Combat

Weapons

Access every weapon in Stardew Valley -- swords, daggers, clubs, and slingshots -- with filters for type, level, enchantability, and sorting by damage, name, or level. Also includes weapon stat data.

Quick Start

import { weapons, weaponStats } from 'stardew-valley-data'

// Get all weapons
const allWeapons = weapons().get()

// Get only swords sorted by damage
const bestSwords = weapons().swords().sortByDamage('desc').get()

// Find a weapon by name
const galaxySword = weapons().findByName('Galaxy Sword')

// Get all weapon stats
const stats = weaponStats().get()

Type Definitions

Weapon

Weapon is a union type: MeleeWeapon | Slingshot.

MeleeWeapon

FieldTypeDescription
idstringUnique identifier
type'sword' | 'dagger' | 'club'Melee weapon category
namestringDisplay name
imagestringRelative path to the weapon image
damageMinnumberMinimum damage
damageMaxnumberMaximum damage
speednumberSpeed modifier
critChancenumberCritical hit chance modifier
critPowernumberCritical hit power modifier
defensenumberDefense modifier
knockbacknumberKnockback modifier
levelnumberMine level where the weapon appears
obtainstringHow to obtain this weapon
sellPricenumberSell price in gold
canEnchantbooleanWhether the weapon can be enchanted at the Forge

Slingshot

FieldTypeDescription
idstringUnique identifier
type'slingshot'Always 'slingshot'
namestringDisplay name
imagestringRelative path to the weapon image
obtainstringHow to obtain this slingshot
sellPricenumberSell price in gold
canEnchantbooleanWhether the slingshot can be enchanted at the Forge

WeaponType

type WeaponType = 'sword' | 'dagger' | 'club' | 'slingshot'

WeaponStat

FieldTypeDescription
idstringUnique identifier
namestringStat name (e.g., Speed, Defense, Crit. Chance)
descriptionstringDescription of what the stat does
imagestringRelative path to the stat image

Query Methods

WeaponQuery

Create a query with the weapons() function. Every filter and sort method returns a new WeaponQuery, so you can chain calls in any order.

Filter Methods

MethodSignatureDescription
byTypebyType(type: WeaponType): WeaponQueryFilter by weapon type string.
swordsswords(): WeaponQueryFilter to swords only.
daggersdaggers(): WeaponQueryFilter to daggers only.
clubsclubs(): WeaponQueryFilter to clubs only.
slingshotsslingshots(): WeaponQueryFilter to slingshots only.
meleemelee(): WeaponQueryFilter to all melee weapons (swords, daggers, clubs).
canEnchantcanEnchant(): WeaponQueryFilter to weapons that can be enchanted at the Forge.
byMinLevelbyMinLevel(level: number): WeaponQueryFilter to melee weapons at or above the given level. Slingshots are excluded.
byMaxLevelbyMaxLevel(level: number): WeaponQueryFilter to melee weapons at or below the given level. Slingshots are excluded.

Sort Methods

MethodSignatureDescription
sortByDamagesortByDamage(order?: 'asc' | 'desc'): WeaponQuerySort by max damage. Slingshots sort as 0. Default: 'desc'.
sortByNamesortByName(order?: 'asc' | 'desc'): WeaponQuerySort alphabetically by name. Default: 'asc'.
sortByLevelsortByLevel(order?: 'asc' | 'desc'): WeaponQuerySort by level. Slingshots sort as 0. Default: 'asc'.

Terminal Methods

MethodSignatureDescription
getget(): Weapon[]Return all results as an array.
firstfirst(): Weapon | undefinedReturn the first result, or undefined if empty.
findfind(id: string): Weapon | undefinedFind an item by its exact ID.
findByNamefindByName(name: string): Weapon | undefinedFind an item by name (case-insensitive exact match).
countcount(): numberReturn the number of results.

WeaponStatQuery

Create a query with the weaponStats() function.

Sort Methods

MethodSignatureDescription
sortByNamesortByName(order?: 'asc' | 'desc'): WeaponStatQuerySort alphabetically by name. Default: 'asc'.

Terminal Methods

MethodSignatureDescription
getget(): WeaponStat[]Return all results as an array.
firstfirst(): WeaponStat | undefinedReturn the first result, or undefined if empty.
findfind(id: string): WeaponStat | undefinedFind a stat by its exact ID.
findByNamefindByName(name: string): WeaponStat | undefinedFind a stat by name (case-insensitive exact match).
countcount(): numberReturn the number of results.

Examples

Get the top 5 highest-damage swords

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

const topSwords = weapons().swords().sortByDamage('desc').get().slice(0, 5)

topSwords.forEach((w) =>
  console.log(`${w.name}: ${w.damageMin}-${w.damageMax} damage`),
)

Find enchantable melee weapons above level 10

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

const enchantable = weapons()
  .melee()
  .canEnchant()
  .byMinLevel(10)
  .sortByLevel('asc')
  .get()

enchantable.forEach((w) => console.log(`${w.name} (Level ${w.level})`))

List all daggers sorted by name

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

const daggers = weapons().daggers().sortByName().get()
daggers.forEach((d) => console.log(d.name))

Get all slingshots

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

const slingshots = weapons().slingshots().get()
slingshots.forEach((s) => console.log(`${s.name}${s.obtain}`))

Find weapons available early game

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

const earlyWeapons = weapons().byMaxLevel(5).sortByDamage('desc').get()

earlyWeapons.forEach((w) =>
  console.log(`${w.name}: ${w.damageMin}-${w.damageMax}`),
)

Look up a weapon stat

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

const speedStat = weaponStats().findByName('Speed')
if (speedStat) {
  console.log(`${speedStat.name}: ${speedStat.description}`)
}
Previous
Monster slayer goals
Next
Rings