Shops

Willy's Fish Shop

Access the complete stock list for Willy's Fish Shop with category filtering, fishing level requirements, and sorting using the chainable WillyQuery API.

Quick Start

import { willy } from 'stardew-valley-data'

// Get all Willy shop items
const all = willy().get()

// Get fishing rods sorted by price
const rods = willy().rods().sortByPrice().get()

// Get items available at fishing level 6
const level6 = willy().byFishingLevel(6).get()

// Get all bait types
const bait = willy().bait().get()

Type Definition

Each item conforms to the WillyItem interface:

FieldTypeDescription
idstringUnique identifier.
namestringDisplay name of the item.
pricenumberPurchase price in gold.
descriptionstringIn-game description text.
imagestringPath to the item's image.
categoryWillyCategoryItem category.
fishingLevelRequirednumber | undefinedMinimum fishing level needed to purchase.
availabilitystring | undefinedSpecial purchase condition, if any.

WillyCategory

type WillyCategory =
  | 'rod'
  | 'bait'
  | 'tackle'
  | 'equipment'
  | 'recipe'
  | 'furniture'

Query Methods

WillyQuery extends QueryBase and inherits five terminal methods:

MethodReturnsDescription
get()WillyItem[]Return all results as an array.
first()WillyItem | undefinedReturn the first result.
find(id)WillyItem | undefinedFind an item by exact ID.
findByName(name)WillyItem | undefinedFind an item by name (case-insensitive).
count()numberReturn the number of results.

Filter Methods

MethodReturnsDescription
rods()WillyQueryFilter to fishing rods only.
bait()WillyQueryFilter to bait items only.
tackle()WillyQueryFilter to tackle items only.
byCategory(category)WillyQueryFilter to items in the given category.
byFishingLevel(level)WillyQueryFilter to items requiring the given fishing level or lower.
alwaysAvailable()WillyQueryFilter to items with no special purchase condition.

Sort Methods

MethodReturnsDescription
sortByPrice(order?)WillyQuerySort by price. Pass 'asc' (default) or 'desc'.
sortByName(order?)WillyQuerySort alphabetically by name. Pass 'asc' (default) or 'desc'.
sortByFishingLevel(order?)WillyQuerySort by fishing level required. Pass 'asc' (default) or 'desc'.

Examples

List all rods by fishing level

import { willy } from 'stardew-valley-data'

const rods = willy().rods().sortByFishingLevel().get()

rods.forEach((rod) => {
  console.log(
    `${rod.name} - ${rod.price}g (level ${rod.fishingLevelRequired ?? 0})`,
  )
})

Show items available at each fishing level

import { willy } from 'stardew-valley-data'

for (let level = 0; level <= 10; level++) {
  const count = willy().byFishingLevel(level).count()
  console.log(`Fishing level ${level}: ${count} items available`)
}

Get all tackle sorted by price

import { willy } from 'stardew-valley-data'

const tackle = willy().tackle().sortByPrice().get()

tackle.forEach((t) => {
  console.log(`${t.name} - ${t.price}g`)
})

Find items with special availability

import { willy } from 'stardew-valley-data'

const special = willy()
  .get()
  .filter((item) => item.availability !== undefined)

special.forEach((item) => {
  console.log(`${item.name} - requires: ${item.availability}`)
})
Previous
Volcano