Difference between revisions of "Modding:Items"

From Stardew Valley Wiki
Jump to navigation Jump to search
(Undo revision 77583 by TehPers (talk))
(→‎Furniture: add info from Modding:Migrate to Stardew Valley 1.6 (main author Pathoschild, with formatting fixes by BarleyZP))
 
(171 intermediate revisions by 20 users not shown)
Line 1: Line 1:
 
← [[Modding:Index|Index]]
 
← [[Modding:Index|Index]]
  
This page explains how the game stores and parses object data. This is an advanced guide for mod developers.
+
This page explains how the game stores and parses item data. This is an advanced guide for mod developers.
  
==Raw data==
+
==Introduction==
Objects are stored in <tt>Content\Data\ObjectInformation.xnb</tt>, which can be [[Modding:Editing XNB files#Getting started|unpacked using XNB Extract]]. Here's the raw data (as of v1.3.29) for reference:
 
  
{{collapse|Code|content=<source lang="yaml">
+
===Overview===
content:  #!Dictionary<Int32,String>
+
As of Stardew Valley 1.6, there are a few important features of Items in the game.
    0: "Weeds/0/-1/Basic/Weeds/A bunch of obnoxious weeds." #!String
+
 
    2: "Stone/0/-300/Basic/Stone/A useful material when broken with the Pickaxe." #!String
+
# Each item as a string ID (<samp>ItemId</samp>) and a globally-unique string ID (<samp>QualifiedItemId</samp>). The <samp>QualifiedItemId</samp> is auto-generated by prefixing the <samp>ItemId</samp> with the item type identifier.<p>For legacy reasons, the <samp>ItemId</samp> for vanilla items may not be globally unique. For example, Pufferfish (object 128) and Mushroom Box (bigcraftable 128) both have <samp>ItemId: 128</samp>. They can be distinguished by their <samp>QualifiedItemId</samp>, which are <samp>(O)128</samp> and <samp>(BC)128</samp> respectively.
    4: "Stone/0/-300/Basic/Stone/A useful material when chopped with the axe." #!String
+
# Each item type has an ''item data definition'' in the game code which tells the game how to handle it. [[#For C# mods|C# mods can add or edit definitions]]. Each definition has a unique prefix which is used in the qualified item IDs. The vanilla types are bigcraftables (<samp>(BC)</samp>), boots (<samp>(B)</samp>), farmhouse flooring (<samp>(FL)</samp>), furniture (<samp>(F)</samp>), hats (<samp>(H)</samp>), objects (<samp>(O)</samp>), pants (<samp>(P)</samp>), shirts (<samp>(S)</samp>), tools (<samp>(T)</samp>), wallpaper (<samp>(WP)</samp>), and weapons (<samp>(W)</samp>).</li>
    16: "Wild Horseradish/50/5/Basic -81/Wild Horseradish/A spicy root found in the spring." #!String
+
# Custom items can now provide their own item texture, specified in a new field in the item data assets (see below). The item's <samp>ParentSheetIndex</samp> field is the index within that texture.
    18: "Daffodil/30/0/Basic -81/Daffodil/A traditional spring flower that makes a nice gift." #!String
 
    20: "Leek/60/16/Basic -81/Leek/A tasty relative of the onion." #!String
 
    22: "Dandelion/40/10/Basic -81/Dandelion/Not the prettiest flower, but the leaves make a good salad." #!String
 
    24: "Parsnip/35/10/Basic -75/Parsnip/A spring tuber closely related to the carrot. It has an earthy taste and is full of nutrients." #!String
 
    30: "Lumber/2/10/Basic/Lumber/A versatile resource used for building and fuel." #!String
 
    60: "Emerald/250/-300/Minerals -2/Emerald/A precious stone with a brilliant green color." #!String
 
    62: "Aquamarine/180/-300/Minerals -2/Aquamarine/A shimmery blue-green gem ." #!String
 
    64: "Ruby/250/-300/Minerals -2/Ruby/A precious stone that is sought after for its rich color and beautiful luster." #!String
 
    66: "Amethyst/100/-300/Minerals -2/Amethyst/A purple variant of quartz." #!String
 
    68: "Topaz/80/-300/Minerals -2/Topaz/Fairly common but still prized for its beauty." #!String
 
    70: "Jade/200/-300/Minerals -2/Jade/A pale green ornamental stone." #!String
 
    72: "Diamond/750/-300/Minerals -2/Diamond/A rare and valuable gem." #!String
 
    74: "Prismatic Shard/2000/-300/Minerals -2/Prismatic Shard/A very rare and powerful substance with unknown origins." #!String
 
    75: "Stone/50/-300/Basic/Stone/..." #!String
 
    76: "Stone/50/-300/Basic/Stone/..." #!String
 
    77: "Stone/50/-300/Basic/Stone/..." #!String
 
    78: "Cave Carrot/25/12/Basic -81/Cave Carrot/A starchy snack found in caves. It helps miners work longer." #!String
 
    79: "Secret Note/1/-300/asdf/Secret Note/It's old and crumpled, but if you look closely you can make out the details.../Town .0001/Note" #!String
 
    80: "Quartz/25/-300/Minerals -2/Quartz/A clear crystal commonly found in caves and mines." #!String
 
    82: "Fire Quartz/100/-300/Minerals -2/Fire Quartz/A glowing red crystal commonly found near hot lava." #!String
 
    84: "Frozen Tear/75/-300/Minerals -2/Frozen Tear/A crystal fabled to be the frozen tears of a yeti." #!String
 
    86: "Earth Crystal/50/-300/Minerals -2/Earth Crystal/A resinous substance found near the surface." #!String
 
    88: "Coconut/100/-300/Basic -79/Coconut/A seed of the coconut palm. It has many culinary uses." #!String
 
    90: "Cactus Fruit/75/30/Basic -79/Cactus Fruit/The sweet fruit of the prickly pear cactus." #!String
 
    92: "Sap/2/-1/Basic -81/Sap/A fluid obtained from trees." #!String
 
    93: "Torch/5/-300/Crafting/Torch/Provides a modest amount of light." #!String
 
    94: "Spirit Torch/5/-300/Crafting/Spirit Torch/It's unclear where the blue color comes from..." #!String
 
    96: "Dwarf Scroll I/1/-300/Arch/Dwarf Scroll I/A yellowed scroll of parchment filled with dwarven script. This one's tied with a red bow.//Set Dwarf 96 97 98 99" #!String
 
    97: "Dwarf Scroll II/1/-300/Arch/Dwarf Scroll II/A yellowed scroll of parchment filled with dwarven script. This one's tied with a green ribbon.//Set Dwarf 96 97 98 99" #!String
 
    98: "Dwarf Scroll III/1/-300/Arch/Dwarf Scroll III/A yellowed scroll of parchment filled with dwarven script. This one's tied with a blue rope.//Set Dwarf 96 97 98 99" #!String
 
    99: "Dwarf Scroll IV/1/-300/Arch/Dwarf Scroll IV/A yellowed scroll of parchment filled with dwarven script. This one's tied with a golden chain.//Set Dwarf 96 97 98 99" #!String
 
    100: "Chipped Amphora/40/-300/Arch/Chipped Amphora/An ancient vessel made of ceramic material. Used to transport both dry and wet goods./Town .04/Item 3 461" #!String
 
    101: "Arrowhead/40/-300/Arch/Arrowhead/A crudely fashioned point used for hunting./Mountain .02 Forest .02 BusStop .02/Debris 2 30 14" #!String
 
    102: "Lost Book/50/-300/asdf/Lost Book/Writings from a wide variety of time periods./Town .05/Note" #!String
 
    103: "Ancient Doll/60/-300/Arch/Ancient Doll/An ancient doll covered in grime. This doll may have been used as a toy, a decoration, or a prop in some kind of ritual./Mountain .04 Forest .03 BusStop .03 Town .01/Money 1 250" #!String
 
    104: "Elvish Jewelry/200/-300/Arch/Elvish Jewelry/Dirty but still beautiful. On the side is a flowing script thought by some to be the ancient language of the elves. No Elvish bones have ever been found./Forest .01/Debris 1 20 6" #!String
 
    105: "Chewing Stick/50/-300/Arch/Chewing Stick/Ancient people chewed on these to keep their teeth clean./Mountain .02 Town .01 Forest .02/Decor 10 28" #!String
 
    106: "Ornamental Fan/300/-300/Arch/Ornamental Fan/This exquisute fan most likely belonged to a noblewoman. Historians believe that the valley was a popular sixth-era vacation spot for the wealthy./Beach .02 Town .008 Forest .01/Money 1 300" #!String
 
    107: "Dinosaur Egg/350/-300/Arch/Dinosaur Egg/A giant dino egg... The entire shell is still intact!/Mine .01 Mountain .008/Item 1 107" #!String
 
    108: "Rare Disc/300/-300/Arch/Rare Disc/A heavy black disc studded with peculiar red stones. When you hold it, you're overwhelmed with a feeling of dread./UndergroundMine .01/Decor 1 29" #!String
 
    109: "Ancient Sword/100/-300/Arch/Ancient Sword/It's the remains of an ancient sword. Most of the blade has turned to rust, but the hilt is very finely crafted./Forest .01 Mountain .008/Debris 1 30 2" #!String
 
    110: "Rusty Spoon/25/-300/Arch/Rusty Spoon/A plain old spoon, probably ten years old. Not very interesting./Town .05/Debris 5 30 2" #!String
 
    111: "Rusty Spur/25/-300/Arch/Rusty Spur/An old spur that was once attached to a cowboy's boot. People must have been raising animals in this area for many generations./Farm .1/Money 1 100" #!String
 
    112: "Rusty Cog/25/-300/Arch/Rusty Cog/A well preserved cog that must have been part of some ancient machine. This could be dwarven technology./Mountain .05/Debris 1 20 4" #!String
 
    113: "Chicken Statue/50/-300/Arch/Chicken Statue/It's a statue of a chicken on a bronze base. The ancient people of this area must have been very fond of chickens./Farm .1/Decor 5 31" #!String
 
    114: "Ancient Seed/5/-300/Arch/Ancient Seed/It's a dry old seed from some ancient plant. By all appearances it's long since dead.../Forest .01 Mountain .01/Seeds 9" #!String
 
    115: "Prehistoric Tool/50/-300/Arch/Prehistoric Tool/Some kind of gnarly old digging tool./Mountain .03 Forest .03 BusStop .04/Debris 1 30 12" #!String
 
    116: "Dried Starfish/40/-300/Arch/Dried Starfish/A starfish from the primordial ocean. It's an unusually pristine specimen!/Beach .1/Money 1 200" #!String
 
    117: "Anchor/100/-300/Arch/Anchor/It may have belonged to ancient pirates./Beach .05/Item 1 289" #!String
 
    118: "Glass Shards/20/-300/Arch/Glass Shards/A mixture of glass shards smoothed by centuries of ocean surf. These could have belonged to an ancient mosaic or necklace./Beach .1/Item 1 462" #!String
 
    119: "Bone Flute/100/-300/Arch/Bone Flute/It's a prehistoric wind instrument carved from an animal's bone. It produces an eerie tone./Mountain .01 Forest .01 UndergroundMine .02 Town .005/Recipe 2 Flute_Block 150" #!String
 
    120: "Prehistoric Handaxe/50/-300/Arch/Prehistoric Handaxe/One of the earliest tools employed by humans. This \"crude\" tool was created by striking one rock with another to form a sharp edge./Mountain .05 Forest .05 BusStop .05/Item 1 294" #!String
 
    121: "Dwarvish Helm/100/-300/Arch/Dwarvish Helm/It's one of the helmets commonly worn by dwarves. The thick metal plating protects them from falling debris and stalactites./UndergroundMine .01/Debris 1 50 0" #!String
 
    122: "Dwarf Gadget/200/-300/Arch/Dwarf Gadget/It's a piece of the advanced technology once known to the dwarves. It's still glowing and humming, but you're unable to understand how it works./UndergroundMine .001/Money 1 500" #!String
 
    123: "Ancient Drum/100/-300/Arch/Ancient Drum/It's a drum made from wood and animal skin. It has a low, reverberating tone./BusStop .01 Forest .01 UndergroundMine .02 Town .005/Recipe 2 Drum_Block 300" #!String
 
    124: "Golden Mask/500/-300/Arch/Golden Mask/A creepy golden mask probably used in an ancient magic ritual. A socket in the forehead contains a large purple gemstone./Desert .04/Money 1 1000" #!String
 
    125: "Golden Relic/250/-300/Arch/Golden Relic/It's a golden slab with heiroglyphs and pictures emblazoned onto the front./Desert .08/Debris 1 40 6" #!String
 
    126: "Strange Doll/1000/-300/Arch/Strange Doll/???/Farm .001 Town .001 Mountain .001 Forest .001 BusStop .001 Beach .001 UndergroundMine .001/Item 1 126" #!String
 
    127: "Strange Doll/1000/-300/Arch/Strange Doll/???/Farm .001 Town .001 Mountain .001 Forest .001 BusStop .001 Beach .001 UndergroundMine .001/Item 1 127" #!String
 
    128: "Pufferfish/200/-40/Fish -4/Pufferfish/Inflates when threatened./Day^Summer" #!String
 
    129: "Anchovy/30/5/Fish -4/Anchovy/A small silver fish found in the ocean./Day Night^Spring Fall" #!String
 
    130: "Tuna/100/15/Fish -4/Tuna/A large fish that lives in the ocean./Day^Summer Winter" #!String
 
    131: "Sardine/40/5/Fish -4/Sardine/A common ocean fish./Day^Spring Summer Fall Winter" #!String
 
    132: "Bream/45/5/Fish -4/Bream/A fairly common river fish that becomes active at night./Night^Spring Summer Fall Winter" #!String
 
    136: "Largemouth Bass/100/15/Fish -4/Largemouth Bass/A popular fish that lives in lakes./Day^Spring Summer Fall Winter" #!String
 
    137: "Smallmouth Bass/50/10/Fish -4/Smallmouth Bass/A freshwater fish that is very sensitive to pollution./Day Night^Spring Fall" #!String
 
    138: "Rainbow Trout/65/10/Fish -4/Rainbow Trout/A freshwater trout with colorful markings./Day^Summer" #!String
 
    139: "Salmon/75/15/Fish -4/Salmon/Swims upstream to lay its eggs./Day^Fall" #!String
 
    140: "Walleye/105/12/Fish -4/Walleye/A freshwater fish caught at night./Night^Fall Winter" #!String
 
    141: "Perch/55/10/Fish -4/Perch/A freshwater fish of the winter./Day Night^Winter" #!String
 
    142: "Carp/30/5/Fish -4/Carp/A common pond fish./Day Night^Spring Summer Fall" #!String
 
    143: "Catfish/200/20/Fish -4/Catfish/An uncommon fish found in streams./Day^Spring Fall Winter" #!String
 
    144: "Pike/100/15/Fish -4/Pike/A freshwater fish that's difficult to catch./Day Night^Summer Winter" #!String
 
    145: "Sunfish/30/5/Fish -4/Sunfish/A common river fish./Day^Spring Summer" #!String
 
    146: "Red Mullet/75/10/Fish -4/Red Mullet/Long ago these were kept as pets./Day^Summer Winter" #!String
 
    147: "Herring/30/5/Fish -4/Herring/A common ocean fish./Day Night^Spring Winter" #!String
 
    148: "Eel/85/12/Fish -4/Eel/A long, slippery little fish./Night^Spring Fall" #!String
 
    149: "Octopus/150/-300/Fish -4/Octopus/A mysterious and intelligent creature./Day^Summer" #!String
 
    150: "Red Snapper/50/10/Fish -4/Red Snapper/A popular fish with a nice red color./Day^Summer Fall Winter" #!String
 
    151: "Squid/80/10/Fish -4/Squid/A deep sea creature that can grow to enormous size./Day^Winter" #!String
 
    152: "Seaweed/20/5/Fish/Seaweed/It can be used in cooking./Day Night^Spring Summer Fall Winter" #!String
 
    153: "Green Algae/15/5/Fish/Green Algae/It's really slimy./Day Night^Spring Summer Fall Winter" #!String
 
    154: "Sea Cucumber/75/-10/Fish -4/Sea Cucumber/A slippery, slimy creature found on the ocean floor./Day^Fall Winter" #!String
 
    155: "Super Cucumber/250/50/Fish -4/Super Cucumber/A rare, purple variety of sea cucumber./Night^Summer Fall" #!String
 
    156: "Ghostfish/45/15/Fish -4/Ghostfish/A pale, blind fish found in underground lakes./Day Night^Spring Summer Fall Winter" #!String
 
    157: "White Algae/25/8/Fish/White Algae/It's super slimy./Day Night^Spring Summer Fall Winter" #!String
 
    158: "Stonefish/300/-300/Fish -4/Stonefish/A bizarre fish that's shaped like a brick./Day Night^Spring Summer Fall Winter" #!String
 
    159: "Crimsonfish/1500/15/Fish -4/Crimsonfish/Lives deep in the ocean but likes to lay its eggs in the warm summer water./Day^Winter" #!String
 
    160: "Angler/900/10/Fish -4/Angler/Uses a bioluminescent dangler to attract prey./Day Night^Spring Summer Fall Winter" #!String
 
    161: "Ice Pip/500/15/Fish -4/Ice Pip/A rare fish that thrives in extremely cold conditions./Day Night^Spring Summer Fall Winter" #!String
 
    162: "Lava Eel/700/20/Fish -4/Lava Eel/It can somehow survive in pools of red-hot lava./Day Night^Spring Summer Fall Winter" #!String
 
    163: "Legend/5000/200/Fish -4/Legend/The king of all fish! They said he'd never be caught./Day^Winter" #!String
 
    164: "Sandfish/75/5/Fish -4/Sandfish/It tries to hide using camouflage./Day Night^Spring Summer Fall Winter" #!String
 
    165: "Scorpion Carp/150/-50/Fish -4/Scorpion Carp/It's like a regular carp but with a sharp stinger./Day Night^Spring Summer Fall Winter" #!String
 
    166: "Treasure Chest/5000/-300/Basic/Treasure Chest/Wow, it's loaded with treasure! This is sure to fetch a good price./Day Night^Spring Summer Fall Winter" #!String
 
    167: "Joja Cola/25/5/Fish -20/Joja Cola/The flagship product of Joja corporation./drink/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    168: "Trash/0/-300/Fish -20/Trash/It's junk./Day Night^Spring Summer Fall Winter" #!String
 
    169: "Driftwood/0/-300/Fish -20/Driftwood/A piece of wood from the sea./Day Night^Spring Summer Fall Winter" #!String
 
    170: "Broken Glasses/0/-300/Fish -20/Broken Glasses/It looks like someone lost their glasses. They're busted./Day Night^Spring Summer Fall Winter" #!String
 
    171: "Broken CD/0/-300/Fish -20/Broken CD/It's a JojaNet 2.0 trial CD. They must've made a billion of these things./Day Night^Spring Summer Fall Winter" #!String
 
    172: "Soggy Newspaper/0/-300/Fish -20/Soggy Newspaper/This is trash./Day Night^Spring Summer Fall Winter" #!String
 
    174: "Large Egg/95/15/Basic -5/Large Egg/It's an uncommonly large white egg!" #!String
 
    176: "Egg/50/10/Basic -5/Egg/A regular white chicken egg." #!String
 
    178: "Hay/0/-300/Basic/Hay/Dried grass used as animal food." #!String
 
    180: "Egg/50/10/Basic -5/Egg/A regular brown chicken egg." #!String
 
    182: "Large Egg/95/15/Basic -5/Large Egg/It's an uncommonly large brown egg!" #!String
 
    184: "Milk/125/15/Basic -6/Milk/A jug of cow's milk./drink/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    186: "Large Milk/190/20/Basic -6/Large Milk/A large jug of cow's milk./drink/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    188: "Green Bean/40/10/Basic -75/Green Bean/A juicy little bean with a cool, crisp snap." #!String
 
    190: "Cauliflower/175/30/Basic -75/Cauliflower/Valuable, but slow-growing. Despite its pale color, the florets are packed with nutrients." #!String
 
    192: "Potato/80/10/Basic -75/Potato/A widely cultivated tuber." #!String
 
    194: "Fried Egg/35/20/Cooking -7/Fried Egg/Sunny-side up./food/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    195: "Omelet/125/40/Cooking -7/Omelet/It's super fluffy./food/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    196: "Salad/110/45/Cooking -7/Salad/A healthy garden salad./food/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    197: "Cheese Cauliflower/300/55/Cooking -7/Cheese Cauliflower/It smells great!/food/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    198: "Baked Fish/100/30/Cooking -7/Baked Fish/Baked fish on a bed of herbs./food/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    199: "Parsnip Soup/120/34/Cooking -7/Parsnip Soup/It's fresh and hearty./food/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    200: "Vegetable Medley/120/66/Cooking -7/Vegetable Medley/This is very nutritious./food/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    201: "Complete Breakfast/350/80/Cooking -7/Complete Breakfast/You'll feel ready to take on the world!/food/2 0 0 0 0 0 0 50 0 0 0/600" #!String
 
    202: "Fried Calamari/150/32/Cooking -7/Fried Calamari/It's so chewy./food/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    203: "Strange Bun/225/40/Cooking -7/Strange Bun/What's inside?/food/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    204: "Lucky Lunch/250/40/Cooking -7/Lucky Lunch/A special little meal./food/0 0 0 0 3 0 0 0 0 0 0/960" #!String
 
    205: "Fried Mushroom/200/54/Cooking -7/Fried Mushroom/Earthy and aromatic./food/0 0 0 0 0 0 0 0 0 0 0 2/600" #!String
 
    206: "Pizza/300/60/Cooking -7/Pizza/It's popular for all the right reasons./food/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    207: "Bean Hotpot/100/50/Cooking -7/Bean Hotpot/It sure is healthy./food/0 0 0 0 0 0 2 0 0 0 0/600" #!String
 
    208: "Glazed Yams/200/80/Cooking -7/Glazed Yams/Sweet and satisfying... The sugar gives it a hint of caramel./food/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    209: "Carp Surprise/150/36/Cooking -7/Carp Surprise/It's bland and oily./food/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    210: "Hashbrowns/120/36/Cooking -7/Hashbrowns/Crispy and golden-brown!/food/1 0 0 0 0 0 0 0 0 0 0/480" #!String
 
    211: "Pancakes/80/36/Cooking -7/Pancakes/A double stack of fluffy, soft pancakes./food/0 0 0 0 0 2 0 0 0 0 0/960" #!String
 
    212: "Salmon Dinner/300/50/Cooking -7/Salmon Dinner/The lemon spritz makes it special./food/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    213: "Fish Taco/500/66/Cooking -7/Fish Taco/It smells delicious./food/0 2 0 0 0 0 0 0 0 0 0/600" #!String
 
    214: "Crispy Bass/150/36/Cooking -7/Crispy Bass/Wow, the breading is perfect./food/0 0 0 0 0 0 0 0 64 0 0/600" #!String
 
    215: "Pepper Poppers/200/52/Cooking -7/Pepper Poppers/Spicy breaded peppers filled with cheese./food/2 0 0 0 0 0 0 0 0 1 0/600" #!String
 
    216: "Bread/60/20/Cooking -7/Bread/A crusty baguette./food/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    218: "Tom Kha Soup/250/70/Cooking -7/Tom Kha Soup/These flavors are incredible!/food/2 0 0 0 0 0 0 30 0 0 0/600" #!String
 
    219: "Trout Soup/100/40/Cooking -7/Trout Soup/Pretty salty./food/0 1 0 0 0 0 0 0 0 0 0/400" #!String
 
    220: "Chocolate Cake/200/60/Cooking -7/Chocolate Cake/Rich and moist with a thick fudge icing./food/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    221: "Pink Cake/480/100/Cooking -7/Pink Cake/There's little heart candies on top./food/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    222: "Rhubarb Pie/400/86/Cooking -7/Rhubarb Pie/Mmm, tangy and sweet!/food/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    223: "Cookie/140/36/Cooking -7/Cookie/Very chewy./food/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    224: "Spaghetti/120/30/Cooking -7/Spaghetti/An old favorite./food/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    225: "Fried Eel/120/30/Cooking -7/Fried Eel/Greasy but flavorful./food/0 0 0 0 1 0 0 0 0 0 0/600" #!String
 
    226: "Spicy Eel/175/46/Cooking -7/Spicy Eel/It's really spicy! Be careful./food/0 0 0 0 1 0 0 0 0 1 0/600" #!String
 
    227: "Sashimi/75/30/Cooking -7/Sashimi/Raw fish sliced into thin pieces./food/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    228: "Maki Roll/220/40/Cooking -7/Maki Roll/Fish and rice wrapped in seaweed./food/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    229: "Tortilla/50/20/Cooking -7/Tortilla/Can be used as a vessel for food or eaten by itself./food/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    230: "Red Plate/400/96/Cooking -7/Red Plate/Full of antioxidants./food/0 0 0 0 0 0 0 50 0 0 0/300" #!String
 
    231: "Eggplant Parmesan/200/70/Cooking -7/Eggplant Parmesan/Tangy, cheesy, and wonderful./food/0 0 1 0 0 0 0 0 0 0 3/400" #!String
 
    232: "Rice Pudding/260/46/Cooking -7/Rice Pudding/It's creamy, sweet, and fun to eat./food/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    233: "Ice Cream/120/40/Cooking -7/Ice Cream/It's hard to find someone who doesn't like this./food/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    234: "Blueberry Tart/150/50/Cooking -7/Blueberry Tart/It's subtle and refreshing./food/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    235: "Autumn's Bounty/350/88/Cooking -7/Autumn's Bounty/A taste of the season./food/0 0 0 0 0 2 0 0 0 0 2/660" #!String
 
    236: "Pumpkin Soup/300/80/Cooking -7/Pumpkin Soup/A seasonal favorite./food/0 0 0 0 2 0 0 0 0 0 2/660" #!String
 
    237: "Super Meal/220/64/Cooking -7/Super Meal/It's a really energizing meal./food/0 0 0 0 0 0 0 40 0 1 0/300" #!String
 
    238: "Cranberry Sauce/120/50/Cooking -7/Cranberry Sauce/A festive treat./food/0 0 2 0 0 0 0 0 0 0 0/300" #!String
 
    239: "Stuffing/165/68/Cooking -7/Stuffing/Ahh... the smell of warm bread and sage./food/0 0 0 0 0 0 0 0 0 0 2/480" #!String
 
    240: "Farmer's Lunch/150/80/Cooking -7/Farmer's Lunch/This'll keep you going./food/3 0 0 0 0 0 0 0 0 0 0/480" #!String
 
    241: "Survival Burger/180/50/Cooking -7/Survival Burger/A convenient snack for the explorer./food/0 0 0 0 0 3 0 0 0 0 0/480" #!String
 
    242: "Dish O' The Sea/220/60/Cooking -7/Dish O' The Sea/This'll keep you warm in the cold sea air./food/0 3 0 0 0 0 0 0 0 0 0/480" #!String
 
    243: "Miner's Treat/200/50/Cooking -7/Miner's Treat/This should keep your energy up./food/0 0 3 0 0 0 0 0 32 0 0/480" #!String
 
    244: "Roots Platter/100/50/Cooking -7/Roots Platter/This'll get you digging for more./food/0 0 0 0 0 0 0 0 0 0 0 3/480" #!String
 
    245: "Sugar/50/10/Basic/Sugar/Adds sweetness to pastries and candies. Too much can be unhealthy." #!String
 
    246: "Wheat Flour/50/5/Basic/Wheat Flour/A common cooking ingredient made from crushed wheat seeds." #!String
 
    247: "Oil/100/5/Basic/Oil/All purpose cooking oil./drink/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    248: "Garlic/60/8/Basic -75/Garlic/Adds a wonderful zestiness to dishes. High quality garlic can be pretty spicy." #!String
 
    250: "Kale/110/20/Basic -75/Kale/The waxy leaves are great in soups and stir frys." #!String
 
    252: "Rhubarb/220/-300/Basic -79/Rhubarb/The stalks are extremely tart, but make a great dessert when sweetened." #!String
 
    254: "Melon/250/45/Basic -79/Melon/A cool, sweet summer treat." #!String
 
    256: "Tomato/60/8/Basic -75/Tomato/Rich and slightly tangy, the Tomato has a wide variety of culinary uses." #!String
 
    257: "Morel/150/8/Basic -81/Morel/Sought after for its unique nutty flavor." #!String
 
    258: "Blueberry/50/10/Basic -79/Blueberry/A popular berry reported to have many health benefits. The blue skin has the highest nutrient concentration." #!String
 
    259: "Fiddlehead Fern/90/10/Basic -75/Fiddlehead Fern/The young shoots are an edible specialty." #!String
 
    260: "Hot Pepper/40/5/Basic -79/Hot Pepper/Fiery hot with a hint of sweetness." #!String
 
    262: "Wheat/25/-300/Basic -75/Wheat/One of the most widely cultivated grains. Makes a great flour for breads and cakes." #!String
 
    264: "Radish/90/18/Basic -75/Radish/A crisp and refreshing root vegetable with hints of pepper when eaten raw." #!String
 
    266: "Red Cabbage/260/30/Basic -75/Red Cabbage/Often used in salads and coleslaws. The color can range from purple to blue to green-yellow depending on soil conditions." #!String
 
    268: "Starfruit/750/50/Basic -79/Starfruit/An extremely juicy fruit that grows in hot, humid weather. Slightly sweet with a sour undertone." #!String
 
    270: "Corn/50/10/Basic -75/Corn/One of the most popular grains. The sweet, fresh cobs are a summer favorite." #!String
 
    272: "Eggplant/60/8/Basic -75/Eggplant/A rich and wholesome relative of the tomato. Delicious fried or stewed." #!String
 
    274: "Artichoke/160/12/Basic -75/Artichoke/The bud of a thistle plant. The spiny outer leaves conceal a fleshy, filling interior." #!String
 
    276: "Pumpkin/320/-300/Basic -75/Pumpkin/A fall favorite, grown for its crunchy seeds and delicately flavored flesh. As a bonus, the hollow shell can be carved into a festive decoration." #!String
 
    278: "Bok Choy/80/10/Basic -75/Bok Choy/The leafy greens and fibrous stalks are healthy and delicious." #!String
 
    280: "Yam/160/18/Basic -75/Yam/A starchy tuber with a lot of culinary versatility." #!String
 
    281: "Chanterelle/160/30/Basic -81/Chanterelle/A tasty mushroom with a fruity smell and slightly peppery flavor." #!String
 
    282: "Cranberries/75/15/Basic -79/Cranberries/These tart red berries are a traditional winter food." #!String
 
    283: "Holly/80/-15/Basic -81/Holly/The leaves and bright red berries make a popular winter decoration." #!String
 
    284: "Beet/100/12/Basic -75/Beet/A sweet and earthy root vegatable. As a bonus, the leaves make a great salad." #!String
 
    286: "Cherry Bomb/50/-300/Crafting -8/Cherry Bomb/Generates a small explosion. Stand back!" #!String
 
    287: "Bomb/50/-300/Crafting -8/Bomb/Generates an explosion. Watch out!" #!String
 
    288: "Mega Bomb/50/-300/Crafting -8/Mega Bomb/Generates a powerful explosion. Use with extreme caution." #!String
 
    290: "Stone/50/-300/Basic/Stone/..." #!String
 
    294: "Twig/1/-300/Crafting/Twig/..." #!String
 
    295: "Twig/1/-300/Crafting/Twig/..." #!String
 
    296: "Salmonberry/5/10/Basic -79/Salmonberry/A spring-time berry with the flavor of the forest." #!String
 
    297: "Grass Starter/50/-300/Crafting/Grass Starter/Place this on your farm to start a new patch of grass." #!String
 
    298: "Hardwood Fence/10/-300/Crafting -8/Hardwood Fence/The most durable type of fence." #!String
 
    299: "Amaranth Seeds/35/-300/Seeds -74/Amaranth Seeds/Plant these in the fall. Takes 7 days to grow. Harvest with the scythe." #!String
 
    300: "Amaranth/150/20/Basic -75/Amaranth/A purple grain cultivated by an ancient civilization." #!String
 
    301: "Grape Starter/30/-300/Seeds -74/Grape Starter/Plant these in the fall. Takes 10 days to grow, but keeps producing after that. Grows on a trellis." #!String
 
    302: "Hops Starter/30/-300/Seeds -74/Hops Starter/Plant these in the summer. Takes 11 days to grow, but keeps producing after that. Grows on a trellis." #!String
 
    303: "Pale Ale/300/20/Basic -26/Pale Ale/Drink in moderation./drink/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    304: "Hops/25/18/Basic -75/Hops/A bitter, tangy flower used to flavor beer." #!String
 
    305: "Void Egg/65/15/Basic -5/Void Egg/A jet-black egg with red flecks. It's warm to the touch." #!String
 
    306: "Mayonnaise/190/-300/Basic -26/Mayonnaise/It looks spreadable." #!String
 
    307: "Duck Mayonnaise/375/-300/Basic -26/Duck Mayonnaise/It's a rich, yellow mayonnaise." #!String
 
    308: "Void Mayonnaise/275/-30/Basic -26/Void Mayonnaise/A thick, black paste that smells like burnt hair." #!String
 
    309: "Acorn/20/-300/Crafting -74/Acorn/Place this on your farm to plant an oak tree." #!String
 
    310: "Maple Seed/5/-300/Crafting -74/Maple Seed/Place this on your farm to plant a maple tree." #!String
 
    311: "Pine Cone/5/-300/Crafting -74/Pine Cone/Place this on your farm to plant a pine tree." #!String
 
    313: "Weeds/50/-300/Crafting/Weeds/..." #!String
 
    314: "Weeds/50/-300/Crafting/Weeds/..." #!String
 
    315: "Weeds/50/-300/Crafting/Weeds/..." #!String
 
    316: "Weeds/50/-300/Crafting/Weeds/..." #!String
 
    317: "Weeds/50/-300/Crafting/Weeds/..." #!String
 
    318: "Weeds/50/-300/Crafting/Weeds/..." #!String
 
    319: "Weeds/50/-300/Crafting/Weeds/..." #!String
 
    320: "Weeds/50/-300/Crafting/Weeds/..." #!String
 
    321: "Weeds/50/-300/Crafting/Weeds/..." #!String
 
    322: "Wood Fence/1/-300/Crafting -8/Wood Fence/Keeps grass and animals contained!" #!String
 
    323: "Stone Fence/2/-300/Crafting -8/Stone Fence/Lasts longer than a wood fence." #!String
 
    324: "Iron Fence/6/-300/Crafting -8/Iron Fence/Lasts longer than a stone fence." #!String
 
    325: "Gate/4/-300/Crafting -8/Gate/Allows you to pass through a fence." #!String
 
    326: "Dwarvish Translation Guide/50/-300/Crafting -8/Dwarvish Translation Guide/Teaches you dwarvish." #!String
 
    328: "Wood Floor/1/-300/Crafting -24/Wood Floor/Place on the ground to create paths or to decorate your floors." #!String
 
    329: "Stone Floor/1/-300/Crafting -24/Stone Floor/Place on the ground to create paths or to spruce up your floors." #!String
 
    330: "Clay/20/-300/Basic -16/Clay/Used in crafting and construction." #!String
 
    331: "Weathered Floor/1/-300/Crafting -24/Weathered Floor/Place on the ground to create paths or to spruce up your floors." #!String
 
    333: "Crystal Floor/1/-300/Crafting -24/Crystal Floor/Place on the ground to create paths or to spruce up your floors." #!String
 
    334: "Copper Bar/60/-300/Basic -15/Copper Bar/A bar of pure copper." #!String
 
    335: "Iron Bar/120/-300/Basic -15/Iron Bar/A bar of pure iron." #!String
 
    336: "Gold Bar/250/-300/Basic -15/Gold Bar/A bar of pure gold." #!String
 
    337: "Iridium Bar/1000/-300/Basic -15/Iridium Bar/A bar of pure iridium." #!String
 
    338: "Refined Quartz/50/-300/Basic -15/Refined Quartz/A more pure form of quartz." #!String
 
    340: "Honey/100/-300/Basic -26/Honey/It's a sweet syrup produced by bees." #!String
 
    341: "Tea Set/200/-300/Basic -24/Tea Set/Fine porcelain." #!String
 
    342: "Pickles/100/-300/Basic -26/Pickles/A jar of your home-made pickles." #!String
 
    343: "Stone/100/-300/Basic/Stone/Stone." #!String
 
    344: "Jelly/160/-300/Basic -26/Jelly/Gooey." #!String
 
    346: "Beer/200/20/Basic -26/Beer/Drink in moderation./drink/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    347: "Rare Seed/200/-300/Seeds -74/Rare Seed/Sow in fall. Takes all season to grow." #!String
 
    348: "Wine/400/20/Basic -26/Wine/Drink in moderation./drink/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    349: "Energy Tonic/500/200/Crafting/Energy Tonic/Restores a lot of energy./drink/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    350: "Juice/150/30/Basic -26/Juice/A sweet, nutritious beverage./drink/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    351: "Muscle Remedy/500/20/Crafting/Muscle Remedy/When you've pushed your body too hard, drink this to remove 'Exhaustion'./drink/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    368: "Basic Fertilizer/2/-300/Basic -19/Basic Fertilizer/Improves soil quality a little, increasing your chance to grow quality crops. Mix into tilled soil." #!String
 
    369: "Quality Fertilizer/10/-300/Basic -19/Quality Fertilizer/Improves soil quality, increasing your chance to grow quality crops. Mix into tilled soil." #!String
 
    370: "Basic Retaining Soil/4/-300/Basic -19/Basic Retaining Soil/This soil has a chance of staying watered overnight. Mix into tilled soil." #!String
 
    371: "Quality Retaining Soil/5/-300/Basic -19/Quality Retaining Soil/This soil has a good chance of staying watered overnight. Mix into tilled soil." #!String
 
    372: "Clam/50/-300/Basic -23/Clam/Someone lived here once." #!String
 
    373: "Golden Pumpkin/2500/-300/Basic/Golden Pumpkin/It's valuable but has no other purpose." #!String
 
    376: "Poppy/140/18/Basic -80/Poppy/In addition to its colorful flower, the Poppy has culinary and medicinal uses." #!String
 
    378: "Copper Ore/5/-300/Basic -15/Copper Ore/A common ore that can be smelted into bars." #!String
 
    380: "Iron Ore/10/-300/Basic -15/Iron Ore/A fairly common ore that can be smelted into bars." #!String
 
    382: "Coal/15/-300/Basic -15/Coal/A combustible rock that is useful for crafting and smelting." #!String
 
    384: "Gold Ore/25/-300/Basic -15/Gold Ore/A precious ore that can be smelted into bars." #!String
 
    386: "Iridium Ore/100/-300/Basic -15/Iridium Ore/An exotic ore with many curious properties. Can be smelted into bars." #!String
 
    388: "Wood/2/-300/Basic -16/Wood/A sturdy, yet flexible plant material with a wide variety of uses." #!String
 
    390: "Stone/2/-300/Basic -16/Stone/A common material with many uses in crafting and building." #!String
 
    392: "Nautilus Shell/120/-300/Basic -23/Nautilus Shell/An ancient shell." #!String
 
    393: "Coral/80/-300/Basic -23/Coral/A colony of tiny creatures that clump together to form beautiful structures." #!String
 
    394: "Rainbow Shell/300/-300/Basic -23/Rainbow Shell/It's a very beautiful shell." #!String
 
    395: "Coffee/150/1/Crafting/Coffee/It smells delicious. This is sure to give you a boost./drink/0 0 0 0 0 0 0 0 0 1 0/120" #!String
 
    396: "Spice Berry/80/10/Basic -79/Spice Berry/It fills the air with a pungent aroma." #!String
 
    397: "Sea Urchin/160/-300/Basic -23/Sea Urchin/A slow-moving, spiny creature that some consider a delicacy." #!String
 
    398: "Grape/80/15/Basic -79/Grape/A sweet cluster of fruit." #!String
 
    399: "Spring Onion/8/5/Basic -81/Spring Onion/These grow wild during the spring." #!String
 
    400: "Strawberry/120/20/Basic -79/Strawberry/A sweet, juicy favorite with an appealing red color." #!String
 
    401: "Straw Floor/1/-300/Crafting -24/Straw Floor/Place on the ground to create paths or to spruce up your floors." #!String
 
    402: "Sweet Pea/50/0/Basic -80/Sweet Pea/A fragrant summer flower." #!String
 
    403: "Field Snack/20/18/Crafting/Field Snack/A quick snack to fuel the hungry forager." #!String
 
    404: "Common Mushroom/40/15/Basic -81/Common Mushroom/Slightly nutty, with good texture." #!String
 
    405: "Wood Path/1/-300/Crafting -24/Wood Path/Place on the ground to create paths or to spruce up your floors." #!String
 
    406: "Wild Plum/80/10/Basic -79/Wild Plum/Tart and juicy with a pungent aroma." #!String
 
    407: "Gravel Path/1/-300/Crafting -24/Gravel Path/Place on the ground to create paths or to spruce up your floors." #!String
 
    408: "Hazelnut/90/12/Basic -81/Hazelnut/That's one big hazelnut!" #!String
 
    409: "Crystal Path/1/-300/Crafting -24/Crystal Path/Place on the ground to create paths or to spruce up your floors." #!String
 
    410: "Blackberry/20/10/Basic -79/Blackberry/An early-fall treat." #!String
 
    411: "Cobblestone Path/1/-300/Crafting -24/Cobblestone Path/Place on the ground to create paths or to spruce up your floors." #!String
 
    412: "Winter Root/70/10/Basic -81/Winter Root/A starchy tuber." #!String
 
    413: "Blue Slime Egg/1750/-300/Basic/Blue Slime Egg/Can be hatched in a slime incubator." #!String
 
    414: "Crystal Fruit/150/25/Basic -79/Crystal Fruit/A delicate fruit that pops up from the snow." #!String
 
    415: "Stepping Stone Path/1/-300/Crafting -24/Stepping Stone Path/Place on the ground to create paths or to spruce up your floors." #!String
 
    416: "Snow Yam/100/12/Basic -81/Snow Yam/This little yam was hiding beneath the snow." #!String
 
    417: "Sweet Gem Berry/3000/-300/Basic -17/Sweet Gem Berry/It's by far the sweetest thing you've ever smelled." #!String
 
    418: "Crocus/60/0/Basic -80/Crocus/A flower that can bloom in the winter." #!String
 
    419: "Vinegar/100/5/Basic/Vinegar/An aged fermented liquid used in many cooking recipes./drink" #!String
 
    420: "Red Mushroom/75/-20/Basic -81/Red Mushroom/A spotted mushroom sometimes found in caves." #!String
 
    421: "Sunflower/80/18/Basic -80/Sunflower/A common misconception is that the flower turns so it's always facing the sun." #!String
 
    422: "Purple Mushroom/250/50/Basic -81/Purple Mushroom/A rare mushroom found deep in caves." #!String
 
    423: "Rice/100/5/Basic/Rice/A basic grain often served under vegetables." #!String
 
    424: "Cheese/200/50/Basic -26/Cheese/It's your basic cheese." #!String
 
    425: "Fairy Seeds/100/-300/Seeds -74/Fairy Seeds/Plant in fall. Takes 12 days to produce a mysterious flower. Assorted Colors." #!String
 
    426: "Goat Cheese/375/50/Basic -26/Goat Cheese/Soft cheese made from goat's milk." #!String
 
    427: "Tulip Bulb/10/-300/Seeds -74/Tulip Bulb/Plant in spring. Takes 6 days to produce a colorful flower. Assorted colors." #!String
 
    428: "Cloth/470/-300/Basic -26/Cloth/A bolt of fine wool cloth." #!String
 
    429: "Jazz Seeds/15/-300/Seeds -74/Jazz Seeds/Plant in spring. Takes 7 days to produce a blue puffball flower." #!String
 
    430: "Truffle/625/5/Basic -17/Truffle/A gourmet type of mushroom with a unique taste." #!String
 
    431: "Sunflower Seeds/20/-300/Seeds -74/Sunflower Seeds/Plant in summer or fall. Takes 8 days to produce a large sunflower. Yields more seeds at harvest." #!String
 
    432: "Truffle Oil/1065/15/Basic -26/Truffle Oil/A gourmet cooking ingredient./drink/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    433: "Coffee Bean/15/-300/Seeds -74/Coffee Bean/Plant in spring or summer to grow a coffee plant. Place five beans in a keg to make coffee." #!String
 
    434: "Stardrop/7777/100/Crafting/Stardrop/A mysterious fruit that empowers those who eat it. The flavor is like a dream... a powerful personal experience, yet difficult to describe to others." #!String
 
    436: "Goat Milk/225/25/Basic -6/Goat Milk/The milk of a goat./drink/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    437: "Red Slime Egg/2500/-300/Basic/Red Slime Egg/Can be hatched in a slime incubator." #!String
 
    438: "L. Goat Milk/345/35/Basic -6/L. Goat Milk/A gallon of creamy goat's milk./drink/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    439: "Purple Slime Egg/5000/-300/Basic/Purple Slime Egg/Can be hatched in a slime incubator." #!String
 
    440: "Wool/340/-300/Basic -18/Wool/Soft, fluffy wool." #!String
 
    441: "Explosive Ammo/20/-300/Basic/Explosive Ammo/Fire this with the slingshot." #!String
 
    442: "Duck Egg/95/15/Basic -5/Duck Egg/It's still warm." #!String
 
    444: "Duck Feather/125/-300/Basic -18/Duck Feather/It's so colorful." #!String
 
    446: "Rabbit's Foot/565/-300/Basic -18/Rabbit's Foot/Some say it's lucky." #!String
 
    449: "Stone Base/0/-300/asdf/Stone Base/A simple block of stone." #!String
 
    450: "Stone/0/-300/asdf/Stone/Stone." #!String
 
    452: "Weeds/0/-300/asdf/Weeds/A cluster of dry old bushes." #!String
 
    453: "Poppy Seeds/50/-300/Seeds -74/Poppy Seeds/Plant in summer. Produces a bright red flower in 7 days." #!String
 
    454: "Ancient Fruit/550/-300/Basic -79/Ancient Fruit/It's been dormant for eons." #!String
 
    455: "Spangle Seeds/25/-300/Seeds -74/Spangle Seeds/Plant in summer. Takes 8 days to produce a vibrant tropical flower. Assorted colors." #!String
 
    456: "Algae Soup/100/30/Cooking -7/Algae Soup/It's a little slimy./food/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    457: "Pale Broth/150/50/Cooking -7/Pale Broth/A delicate broth with a hint of sulfur./food/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    458: "Bouquet/100/-300/Basic/Bouquet/A gift that shows your romantic interest." #!String
 
    459: "Mead/200/30/Basic -26/Mead/A fermented beverage made from honey. Drink in moderation./drink/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    460: "Mermaid's Pendant/2500/-300/Basic/Mermaid's Pendant/Give this to the person you want to marry." #!String
 
    461: "Decorative Pot/200/-300/Crafting/Decorative Pot/A replica of an ancient pot." #!String
 
    463: "Drum Block/100/-300/Crafting/Drum Block/Plays a drum sound when you walk past." #!String
 
    464: "Flute Block/100/-300/Crafting/Flute Block/Plays a flute sound when you walk past." #!String
 
    465: "Speed-Gro/20/-300/Basic -19/Speed-Gro/Stimulates leaf production. Guaranteed to increase growth rate by at least 10%. Mix into tilled soil." #!String
 
    466: "Deluxe Speed-Gro/40/-300/Basic -19/Deluxe Speed-Gro/Stimulates leaf production. Guaranteed to increase growth rate by at least 25%. Mix into tilled soil." #!String
 
    472: "Parsnip Seeds/10/-300/Seeds -74/Parsnip Seeds/Plant these in the spring. Takes 4 days to mature." #!String
 
    473: "Bean Starter/30/-300/Seeds -74/Bean Starter/Plant these in the spring. Takes 10 days to mature, but keeps producing after that. Yields multiple beans per harvest. Grows on a trellis." #!String
 
    474: "Cauliflower Seeds/40/-300/Seeds -74/Cauliflower Seeds/Plant these in the spring. Takes 12 days to produce a large cauliflower." #!String
 
    475: "Potato Seeds/25/-300/Seeds -74/Potato Seeds/Plant these in the spring. Takes 6 days to mature, and has a chance of yielding multiple potatoes at harvest." #!String
 
    476: "Garlic Seeds/20/-300/Seeds -74/Garlic Seeds/Plant these in the spring. Takes 4 days to mature." #!String
 
    477: "Kale Seeds/35/-300/Seeds -74/Kale Seeds/Plant these in the spring. Takes 6 days to mature. Harvest with the scythe." #!String
 
    478: "Rhubarb Seeds/50/-300/Seeds -74/Rhubarb Seeds/Plant these in the spring. Takes 13 days to mature." #!String
 
    479: "Melon Seeds/40/-300/Seeds -74/Melon Seeds/Plant these in the summer. Takes 12 days to mature." #!String
 
    480: "Tomato Seeds/25/-300/Seeds -74/Tomato Seeds/Plant these in the summer. Takes 11 days to mature, and continues to produce after first harvest." #!String
 
    481: "Blueberry Seeds/40/-300/Seeds -74/Blueberry Seeds/Plant these in the summer. Takes 13 days to mature, and continues to produce after first harvest." #!String
 
    482: "Pepper Seeds/20/-300/Seeds -74/Pepper Seeds/Plant these in the summer. Takes 5 days to mature, and continues to produce after first harvest." #!String
 
    483: "Wheat Seeds/5/-300/Seeds -74/Wheat Seeds/Plant these in the summer or fall. Takes 4 days to mature. Harvest with the scythe." #!String
 
    484: "Radish Seeds/20/-300/Seeds -74/Radish Seeds/Plant these in the summer. Takes 6 days to mature." #!String
 
    485: "Red Cabbage Seeds/50/-300/Seeds -74/Red Cabbage Seeds/Plant these in the summer. Takes 9 days to mature." #!String
 
    486: "Starfruit Seeds/200/-300/Seeds -74/Starfruit Seeds/Plant these in the summer. Takes 13 days to mature." #!String
 
    487: "Corn Seeds/75/-300/Seeds -74/Corn Seeds/Plant these in the summer or fall. Takes 14 days to mature, and continues to produce after first harvest." #!String
 
    488: "Eggplant Seeds/10/-300/Seeds -74/Eggplant Seeds/Plant these in the fall. Takes 5 days to mature, and continues to produce after first harvest." #!String
 
    489: "Artichoke Seeds/15/-300/Seeds -74/Artichoke Seeds/Plant these in the fall. Takes 8 days to mature." #!String
 
    490: "Pumpkin Seeds/50/-300/Seeds -74/Pumpkin Seeds/Plant these in the fall. Takes 13 days to mature." #!String
 
    491: "Bok Choy Seeds/25/-300/Seeds -74/Bok Choy Seeds/Plant these in the fall. Takes 4 days to mature." #!String
 
    492: "Yam Seeds/30/-300/Seeds -74/Yam Seeds/Plant these in the fall. Takes 10 days to mature." #!String
 
    493: "Cranberry Seeds/120/-300/Seeds -74/Cranberry Seeds/Plant these in the fall. Takes 7 days to mature, and continues to produce after first harvest." #!String
 
    494: "Beet Seeds/10/-300/Seeds -74/Beet Seeds/Plant these in the fall. Takes 6 days to mature." #!String
 
    495: "Spring Seeds/35/-300/Seeds -74/Spring Seeds/An assortment of wild spring seeds." #!String
 
    496: "Summer Seeds/55/-300/Seeds -74/Summer Seeds/An assortment of wild summer seeds." #!String
 
    497: "Fall Seeds/45/-300/Seeds -74/Fall Seeds/An assortment of wild fall seeds." #!String
 
    498: "Winter Seeds/30/-300/Seeds -74/Winter Seeds/An assortment of wild winter seeds." #!String
 
    499: "Ancient Seeds/30/-300/Seeds -74/Ancient Seeds/Could these still grow?" #!String
 
    516: "Small Glow Ring/100/-300/Ring/Small Glow Ring/Emits a small, constant light." #!String
 
    517: "Glow Ring/200/-300/Ring/Glow Ring/Emits a constant light." #!String
 
    518: "Small Magnet Ring/100/-300/Ring/Small Magnet Ring/Slightly increases your radius for collecting items." #!String
 
    519: "Magnet Ring/200/-300/Ring/Magnet Ring/Increases your radius for collecting items." #!String
 
    520: "Slime Charmer Ring/700/-300/Ring/Slime Charmer Ring/Prevents damage from slimes." #!String
 
    521: "Warrior Ring/1500/-300/Ring/Warrior Ring/Occasionally infuses the wearer with \"warrior energy\" after slaying a monster." #!String
 
    522: "Vampire Ring/1500/-300/Ring/Vampire Ring/Gain a little health every time you slay a monster." #!String
 
    523: "Savage Ring/1500/-300/Ring/Savage Ring/Gain a short speed boost whenever you slay a monster." #!String
 
    524: "Ring of Yoba/1500/-300/Ring/Ring of Yoba/Occasionally shields the wearer from damage." #!String
 
    525: "Sturdy Ring/1500/-300/Ring/Sturdy Ring/Cuts the duration of negative status effects in half." #!String
 
    526: "Burglar's Ring/1500/-300/Ring/Burglar's Ring/Monsters have a greater chance of dropping loot." #!String
 
    527: "Iridium Band/2000/-300/Ring/Iridium Band/Glows, attracts items, and increases attack damage by 10%." #!String
 
    528: "Jukebox Ring/200/-300/Ring/Jukebox Ring/Plays a random assortment of music you've heard." #!String
 
    529: "Amethyst Ring/200/-300/Ring/Amethyst Ring/Increases knockback by 10%." #!String
 
    530: "Topaz Ring/200/-300/Ring/Topaz Ring/Increases weapon precision by 10%." #!String
 
    531: "Aquamarine Ring/400/-300/Ring/Aquamarine Ring/Increases critical strike chance by 10%." #!String
 
    532: "Jade Ring/400/-300/Ring/Jade Ring/Increases critical strike power by 10%." #!String
 
    533: "Emerald Ring/600/-300/Ring/Emerald Ring/Increases weapon speed by 10%." #!String
 
    534: "Ruby Ring/600/-300/Ring/Ruby Ring/Increases attack by 10%." #!String
 
    535: "Geode/50/-300/Basic/Geode/A blacksmith can break this open for you./538 542 548 549 552 555 556 557 558 566 568 569 571 574 576 121" #!String
 
    536: "Frozen Geode/100/-300/Basic/Frozen Geode/A blacksmith can break this open for you./541 544 545 546 550 551 559 560 561 564 567 572 573 577 123" #!String
 
    537: "Magma Geode/150/-300/Basic/Magma Geode/A blacksmith can break this open for you./539 540 543 547 553 554 562 563 565 570 575 578 122" #!String
 
    538: "Alamite/150/-300/Minerals -12/Alamite/Its distinctive fluorescence makes it a favorite among rock collectors." #!String
 
    539: "Bixite/300/-300/Minerals -12/Bixite/A dark metallic Mineral sought after for its cubic structure." #!String
 
    540: "Baryte/50/-300/Minerals -12/Baryte/The best specimens resemble a desert rose." #!String
 
    541: "Aerinite/125/-300/Minerals -12/Aerinite/These crystals are curiously light." #!String
 
    542: "Calcite/75/-300/Minerals -12/Calcite/This yellow crystal is speckled with shimmering nodules." #!String
 
    543: "Dolomite/300/-300/Minerals -12/Dolomite/It can occur in coral reefs, often near an underwater volcano." #!String
 
    544: "Esperite/100/-300/Minerals -12/Esperite/The crystals glow bright green when stimulated." #!String
 
    545: "Fluorapatite/200/-300/Minerals -12/Fluorapatite/Small amounts are found in human teeth." #!String
 
    546: "Geminite/150/-300/Minerals -12/Geminite/Occurs in brilliant clusters." #!String
 
    547: "Helvite/450/-300/Minerals -12/Helvite/It grows in a triangular column." #!String
 
    548: "Jamborite/150/-300/Minerals -12/Jamborite/The crystals are so tightly packed it almost looks fuzzy." #!String
 
    549: "Jagoite/115/-300/Minerals -12/Jagoite/A high volume of tiny crystals makes it very glittery." #!String
 
    550: "Kyanite/250/-300/Minerals -12/Kyanite/The geometric faces are as smooth as glass." #!String
 
    551: "Lunarite/200/-300/Minerals -12/Lunarite/The cratered white orbs form a tight cluster." #!String
 
    552: "Malachite/100/-300/Minerals -12/Malachite/A popular ornamental stone, used in sculpture and to make green paint." #!String
 
    553: "Neptunite/400/-300/Minerals -12/Neptunite/A jet-black crystal that is unusually reflective." #!String
 
    554: "Lemon Stone/200/-300/Minerals -12/Lemon Stone/Some claim the powdered crystal is a dwarvish delicacy." #!String
 
    555: "Nekoite/80/-300/Minerals -12/Nekoite/The delicate shards form a tiny pink meadow." #!String
 
    556: "Orpiment/80/-300/Minerals -12/Orpiment/Despite its high toxicity, this Mineral is widely used in manufacturing and folk medicine." #!String
 
    557: "Petrified Slime/120/-300/Minerals -12/Petrified Slime/This little guy may be 100,000 years old." #!String
 
    558: "Thunder Egg/100/-300/Minerals -12/Thunder Egg/According to legend, angry thunder spirits would throw these stones at one another." #!String
 
    559: "Pyrite/120/-300/Minerals -12/Pyrite/Commonly known as \"Fool's Gold\"." #!String
 
    560: "Ocean Stone/220/-300/Minerals -12/Ocean Stone/An old legend claims these stones are the mosaics of ancient mermaids." #!String
 
    561: "Ghost Crystal/200/-300/Minerals -12/Ghost Crystal/There is an aura of coldness around this crystal." #!String
 
    562: "Tigerseye/275/-300/Minerals -12/Tigerseye/A stripe of shimmering gold gives this gem a warm luster." #!String
 
    563: "Jasper/150/-300/Minerals -12/Jasper/When polished, this stone becomes attactively luminous. Prized by ancient peoples for thousands of years." #!String
 
    564: "Opal/150/-300/Minerals -12/Opal/Its internal structure causes it to reflect a rainbow of light." #!String
 
    565: "Fire Opal/350/-300/Minerals -12/Fire Opal/A rare variety of opal, named for its red spots." #!String
 
    566: "Celestine/125/-300/Minerals -12/Celestine/Some early life forms had bones made from this." #!String
 
    567: "Marble/110/-300/Minerals -12/Marble/A very popular material for sculptures and construction." #!String
 
    568: "Sandstone/60/-300/Minerals -12/Sandstone/A common type of stone with red and brown striations." #!String
 
    569: "Granite/75/-300/Minerals -12/Granite/A speckled Mineral that is commonly used in construction." #!String
 
    570: "Basalt/175/-300/Minerals -12/Basalt/Forms near searing hot magma." #!String
 
    571: "Limestone/15/-300/Minerals -12/Limestone/A very common type of stone. It's not worth very much." #!String
 
    572: "Soapstone/120/-300/Minerals -12/Soapstone/Because of its relatively soft consistency, this stone is very popular for carving." #!String
 
    573: "Hematite/150/-300/Minerals -12/Hematite/An iron-based Mineral with interesting magnetic properties." #!String
 
    574: "Mudstone/25/-300/Minerals -12/Mudstone/A fine-grained rock made from ancient clay or mud." #!String
 
    575: "Obsidian/200/-300/Minerals -12/Obsidian/A volcanic glass that forms when lava cools rapidly." #!String
 
    576: "Slate/85/-300/Minerals -12/Slate/It's extremely resistant to water, making it a good roofing material." #!String
 
    577: "Fairy Stone/250/-300/Minerals -12/Fairy Stone/An old miner's song suggests these are made from the bones of ancient fairies." #!String
 
    578: "Star Shards/500/-300/Minerals -12/Star Shards/No one knows how these form. Some scientists claim that the microscopic structure displays unnatural regularity." #!String
 
    579: "Prehistoric Scapula/100/-300/Arch/Prehistoric Scapula/Commonly known as a \"shoulder blade\"... It's unclear what species it belonged to./Item 1 289/Town .01" #!String
 
    580: "Prehistoric Tibia/100/-300/Arch/Prehistoric Tibia/A thick and sturdy leg bone./Item 1 289/Forest .01" #!String
 
    581: "Prehistoric Skull/100/-300/Arch/Prehistoric Skull/This is definitely a mammalian skull./Item 1 289/Mountain .01" #!String
 
    582: "Skeletal Hand/100/-300/Arch/Skeletal Hand/It's a wonder all these ancient little pieces lasted so long./Item 1 289/Beach .01" #!String
 
    583: "Prehistoric Rib/100/-300/Arch/Prehistoric Rib/Little gouge marks on the side suggest that this rib was someone's dinner./Item 1 289/Farm .01" #!String
 
    584: "Prehistoric Vertebra/100/-300/Arch/Prehistoric Vertebra/A segment of some prehistoric creature's spine./Item 1 289/BusStop .01" #!String
 
    585: "Skeletal Tail/100/-300/Arch/Skeletal Tail/It's pretty short for a tail./Item 1 289/UndergroundMine .01" #!String
 
    586: "Nautilus Fossil/80/-300/Arch/Nautilus Fossil/This must've washed up ages ago from an ancient coral reef. /Item 1 289/Beach .03" #!String
 
    587: "Amphibian Fossil/150/-300/Arch/Amphibian Fossil/The relatively short hind legs suggest some kind of primordial toad./Item 1 289/Forest .01 Mountain .01" #!String
 
    588: "Palm Fossil/100/-300/Arch/Palm Fossil/Palm Fossils are relatively common, but this happens to be a particularly well-preserved specimen./Item 1 289/Desert .1 Beach .01 Forest .01" #!String
 
    589: "Trilobite/50/-300/Arch/Trilobite/A long extinct relative of the crab./Item 1 289/Beach .03 Mountain .03 Forest .03" #!String
 
    590: "Artifact Spot/0/-300/asdf/Artifact Spot/Uh... how did you get this in your inventory? Ape made a booboo./Item 1 289/Beach .03 Mountain .03 Forest .03" #!String
 
    591: "Tulip/30/18/Basic -80/Tulip/The most popular spring flower. Has a very faint sweet smell." #!String
 
    593: "Summer Spangle/90/18/Basic -80/Summer Spangle/A tropical bloom that thrives in the humid summer air. Has a sweet, tangy aroma." #!String
 
    595: "Fairy Rose/290/18/Basic -80/Fairy Rose/An old folk legend suggests that the sweet smell of this flower attracts fairies." #!String
 
    597: "Blue Jazz/50/18/Basic -80/Blue Jazz/The flower grows in a sphere to invite as many butterflies as possible." #!String
 
    599: "Sprinkler/100/-300/Crafting -8/Sprinkler/Waters the 4 adjacent tiles every morning." #!String
 
    604: "Plum Pudding/260/70/Cooking -7/Plum Pudding/A traditional holiday treat./food/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    605: "Artichoke Dip/210/40/Cooking -7/Artichoke Dip/It's cool and refreshing./food/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    606: "Stir Fry/335/80/Cooking -7/Stir Fry/Julienned vegetables on a bed of rice./food/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    607: "Roasted Hazelnuts/270/70/Cooking -7/Roasted Hazelnuts/The roasting process creates a rich forest flavor./food/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    608: "Pumpkin Pie/385/90/Cooking -7/Pumpkin Pie/Silky pumpkin cream in a flakey crust./food/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    609: "Radish Salad/300/80/Cooking -7/Radish Salad/The radishes are so crisp!/food/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    610: "Fruit Salad/450/105/Cooking -7/Fruit Salad/A delicious combination of summer fruits./food/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    611: "Blackberry Cobbler/260/70/Cooking -7/Blackberry Cobbler/There's nothing quite like it./food/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    612: "Cranberry Candy/175/50/Cooking -7/Cranberry Candy/It's sweet enough to mask the bitter fruit./drink/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    613: "Apple/100/15/Basic -79/Apple/A crisp fruit used for juice and cider." #!String
 
    618: "Bruschetta/210/45/Cooking -7/Bruschetta/Roasted tomatoes on a crisp white bread./food/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    621: "Quality Sprinkler/450/-300/Crafting -8/Quality Sprinkler/Waters the 8 adjacent tiles every morning." #!String
 
    628: "Cherry Sapling/850/-300/Basic -74/Cherry Sapling/Takes 28 days to produce a mature cherry tree. Bears fruit in the spring. Only grows if the 8 surrounding \"tiles\" are empty." #!String
 
    629: "Apricot Sapling/500/-300/Basic -74/Apricot Sapling/Takes 28 days to produce a mature Apricot tree. Bears fruit in the spring. Only grows if the 8 surrounding \"tiles\" are empty." #!String
 
    630: "Orange Sapling/1000/-300/Basic -74/Orange Sapling/Takes 28 days to produce a mature Orange tree. Bears fruit in the summer. Only grows if the 8 surrounding \"tiles\" are empty." #!String
 
    631: "Peach Sapling/1500/-300/Basic -74/Peach Sapling/Takes 28 days to produce a mature Peach tree. Bears fruit in the summer. Only grows if the 8 surrounding \"tiles\" are empty." #!String
 
    632: "Pomegranate Sapling/1500/-300/Basic -74/Pomegranate Sapling/Takes 28 days to produce a mature Pomegranate tree. Bears fruit in the fall. Only grows if the 8 surrounding \"tiles\" are empty." #!String
 
    633: "Apple Sapling/1000/-300/Basic -74/Apple Sapling/Takes 28 days to produce a mature Apple tree. Bears fruit in the fall. Only grows if the 8 surrounding \"tiles\" are empty." #!String
 
    634: "Apricot/50/15/Basic -79/Apricot/A tender little fruit with a rock-hard pit." #!String
 
    635: "Orange/100/15/Basic -79/Orange/Juicy, tangy, and bursting with sweet summer aroma." #!String
 
    636: "Peach/140/15/Basic -79/Peach/It's almost fuzzy to the touch." #!String
 
    637: "Pomegranate/140/15/Basic -79/Pomegranate/Within the fruit are clusters of juicy seeds." #!String
 
    638: "Cherry/80/15/Basic -79/Cherry/It's popular, and ripens sooner than most other fruits." #!String
 
    645: "Iridium Sprinkler/1000/-300/Crafting -8/Iridium Sprinkler/Waters the 24 adjacent tiles every morning." #!String
 
    648: "Coleslaw/345/85/Cooking -7/Coleslaw/It's light, fresh and very healthy./food/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    649: "Fiddlehead Risotto/350/90/Cooking -7/Fiddlehead Risotto/A creamy rice dish served with sauteed fern heads. It's a little bland./food/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    651: "Poppyseed Muffin/250/60/Cooking -7/Poppyseed Muffin/It has a soothing effect./food/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    668: "Stone/0/15/Basic/Stone/There's stone ore in this stone." #!String
 
    670: "Stone/0/15/Basic/Stone/There's stone ore in this stone." #!String
 
    674: "Weeds/0/15/Basic/Weeds/Ugly weeds." #!String
 
    675: "Weeds/0/15/Basic/Weeds/Ugly weeds." #!String
 
    676: "Weeds/0/15/Basic/Weeds/Ugly weeds." #!String
 
    677: "Weeds/0/15/Basic/Weeds/Ugly weeds." #!String
 
    678: "Weeds/0/15/Basic/Weeds/Ugly weeds." #!String
 
    679: "Weeds/0/15/Basic/Weeds/Ugly weeds." #!String
 
    680: "Green Slime Egg/1000/-300/Basic/Green Slime Egg/Can be hatched in a slime incubator." #!String
 
    681: "Rain Totem/20/-300/Crafting/Rain Totem/Activate to greatly increase the chance for rain tomorrow. Consumed on use." #!String
 
    682: "Mutant Carp/1000/10/Fish -4/Mutant Carp/The strange waters of the sewer turned this carp into a monstrosity./Day^Spring Summer" #!String
 
    684: "Bug Meat/8/-300/Basic -28/Bug Meat/It's a juicy wad of bug flesh." #!String
 
    685: "Bait/1/-300/Basic -21/Bait/Causes fish to bite faster. Must first be attached to a fishing rod." #!String
 
    686: "Spinner/250/-300/Basic -22/Spinner/The shape makes it spin around in the water. Slightly increases the bite-rate when fishing." #!String
 
    687: "Dressed Spinner/500/-300/Basic -22/Dressed Spinner/The metal tab and colorful streamers create an enticing spectacle for fish. Increases the bite-rate when fishing." #!String
 
    688: "Warp Totem: Farm/20/-300/Crafting/Warp Totem: Farm/Warp directly to your house. Consumed on use." #!String
 
    689: "Warp Totem: Mountains/20/-300/Crafting/Warp Totem: Mountains/Warp directly to the mountains. Consumed on use." #!String
 
    690: "Warp Totem: Beach/20/-300/Crafting/Warp Totem: Beach/Warp directly to the beach. Consumed on use." #!String
 
    691: "Barbed Hook/500/-300/Basic -22/Barbed Hook/Makes your catch more secure, causing the \"fishing bar\" to cling to your catch. Works best on slow, weak fish." #!String
 
    692: "Lead Bobber/150/-300/Basic -22/Lead Bobber/Adds weight to your \"fishing bar\", preventing it from bouncing along the bottom." #!String
 
    693: "Treasure Hunter/250/-300/Basic -22/Treasure Hunter/Fish don't escape while collecting treasures. Also slightly increases the chance to find treasures." #!String
 
    694: "Trap Bobber/200/-300/Basic -22/Trap Bobber/Causes fish to escape slower when you aren't reeling them in." #!String
 
    695: "Cork Bobber/250/-300/Basic -22/Cork Bobber/Slightly increases the size of your \"fishing bar\"." #!String
 
    698: "Sturgeon/200/10/Fish -4/Sturgeon/An ancient bottom-feeder with a dwindling population. Females can live up to 150 years./Day^Spring Summer" #!String
 
    699: "Tiger Trout/150/10/Fish -4/Tiger Trout/A rare hybrid trout that cannot bear offspring of its own./Day^Spring Summer" #!String
 
    700: "Bullhead/75/10/Fish -4/Bullhead/A relative of the catfish that eats a variety of foods off the lake bottom./Day^Spring Summer" #!String
 
    701: "Tilapia/75/10/Fish -4/Tilapia/A primarily vegetarian fish that prefers warm water./Day^Spring Summer" #!String
 
    702: "Chub/50/10/Fish -4/Chub/A common freshwater fish known for its voracious appetite./Day^Spring Summer" #!String
 
    703: "Magnet/15/-300/Basic -21/Magnet/Increases the chance of finding treasures when fishing. However, fish aren't crazy about the taste." #!String
 
    704: "Dorado/100/10/Fish -4/Dorado/A fierce carnivore with brilliant orange scales./Day^Summer" #!String
 
    705: "Albacore/75/10/Fish -4/Albacore/Prefers temperature \"edges\" where cool and warm water meet./Day^Spring Fall" #!String
 
    706: "Shad/60/10/Fish -4/Shad/Lives in a school at sea, but returns to the rivers to spawn./Day^Spring Summer Fall" #!String
 
    707: "Lingcod/120/10/Fish -4/Lingcod/A fearsome predator that will eat almost anything it can cram into its mouth./Day^Fall" #!String
 
    708: "Halibut/80/10/Fish -4/Halibut/A flat fish that lives on the ocean floor./Day^Spring Summer" #!String
 
    709: "Hardwood/15/-300/Basic -16/Hardwood/A special kind of wood with superior strength and beauty." #!String
 
    710: "Crab Pot/50/-300/Crafting/Crab Pot/Place it in the water, load it with bait, and check the next day to see if you've caught anything. Works in streams, lakes, and the ocean." #!String
 
    715: "Lobster/120/-300/Fish -4/Lobster/A large ocean-dwelling crustacean with a strong tail./Day^Spring Summer" #!String
 
    716: "Crayfish/75/-300/Fish -4/Crayfish/A small freshwater relative of the lobster./Day^Spring Summer" #!String
 
    717: "Crab/100/-300/Fish -4/Crab/A marine crustacean with two powerful pincers./Day^Spring Summer" #!String
 
    718: "Cockle/50/-300/Fish -4/Cockle/A common saltwater clam./Day^Spring Summer" #!String
 
    719: "Mussel/30/-300/Fish -4/Mussel/A common bivalve that often lives in clusters./Day^Spring Summer" #!String
 
    720: "Shrimp/60/-300/Fish -4/Shrimp/A scavenger that feeds off the ocean floor. Widely prized for its meat./Day^Spring Summer" #!String
 
    721: "Snail/65/-300/Fish -4/Snail/A wide-ranging mollusc that lives in a spiral shell./Day^Spring Summer" #!String
 
    722: "Periwinkle/20/-300/Fish -4/Periwinkle/A tiny freshwater snail that lives in a blue shell./Day^Spring Summer" #!String
 
    723: "Oyster/40/-300/Fish -4/Oyster/Constantly filters water to find food. In the process, it removes dangerous toxins from the environment./Day^Spring Summer" #!String
 
    724: "Maple Syrup/200/20/Basic -27/Maple Syrup/A sweet syrup with a unique flavor./drink/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    725: "Oak Resin/150/-300/Basic -27/Oak Resin/A sticky, fragrant substance derived from oak sap." #!String
 
    726: "Pine Tar/100/-300/Basic -27/Pine Tar/A pungent substance derived from pine sap." #!String
 
    727: "Chowder/135/90/Cooking -7/Chowder/A perfect way to warm yourself after a cold night at sea./food/0 1 0 0 0 0 0 0 0 0 0/1440" #!String
 
    728: "Fish Stew/175/90/Cooking -7/Fish Stew/It smells a lot like the sea. Tastes better, though./food/0 3 0 0 0 0 0 0 0 0 0/1440" #!String
 
    729: "Escargot/125/90/Cooking -7/Escargot/Butter-soaked snails cooked to perfection./food/0 2 0 0 0 0 0 0 0 0 0/1440" #!String
 
    730: "Lobster Bisque/205/90/Cooking -7/Lobster Bisque/This delicate soup is a secret family recipe of Willy's./food/0 3 0 0 0 0 0 50 0 0 0/1440" #!String
 
    731: "Maple Bar/300/90/Cooking -7/Maple Bar/It's a sweet doughnut topped with a rich maple glaze./food/1 1 1 0 0 0 0 0 0 0 0/1440" #!String
 
    732: "Crab Cakes/275/90/Cooking -7/Crab Cakes/Crab, bread crumbs, and egg formed into patties then fried to a golden brown./food/0 0 0 0 0 0 0 0 0 1 1/1440" #!String
 
    734: "Woodskip/75/10/Fish -4/Woodskip/A very sensitive fish that can only live in pools deep in the forest./Day^Spring Summer" #!String
 
    745: "Strawberry Seeds/0/-300/Seeds -74/Strawberry Seeds/Plant these in spring. Takes 8 days to mature, and keeps producing strawberries after that." #!String
 
    746: "Jack-O-Lantern/0/-300/Crafting -8/Jack-O-Lantern/A whimsical fall decoration." #!String
 
    747: "Rotten Plant/0/-300/Basic -20/Rotten Plant/Decomposing organic material. It's slimy and unpleasant." #!String
 
    748: "Rotten Plant/0/-300/Basic -20/Rotten Plant/Decomposing organic material. It's slimy and unpleasant." #!String
 
    749: "Omni Geode/0/-300/Basic/Omni Geode/A blacksmith can break this open for you. These geodes contain a wide variety of Minerals./538 542 548 549 552 555 556 557 558 566 568 569 571 574 576 541 544 545 546 550 551 559 560 561 564 567 572 573 577 539 540 543 547 553 554 562 563 565 570 575 578 121 122 123" #!String
 
    750: "Weeds/0/15/Basic/Weeds/Ugly weeds." #!String
 
    751: "Stone/0/15/Basic/Stone/There's copper ore in this stone." #!String
 
    760: "Stone/0/15/Basic/Stone/..." #!String
 
    762: "Stone/0/15/Basic/Stone/..." #!String
 
    764: "Stone/0/15/Basic/Stone/gold ore" #!String
 
    765: "Stone/0/15/Basic/Stone/iridium ore" #!String
 
    766: "Slime/5/-300/Basic -28/Slime/A shimmering, gelatinous glob with no smell." #!String
 
    767: "Bat Wing/15/-300/Basic -28/Bat Wing/The material is surprisingly delicate." #!String
 
    768: "Solar Essence/40/-300/Basic -28/Solar Essence/The glowing face is warm to the touch." #!String
 
    769: "Void Essence/50/-300/Basic -28/Void Essence/It's quivering with dark energy." #!String
 
    770: "Mixed Seeds/0/-300/Seeds -74/Mixed Seeds/There's a little bit of everything here. Plant them and see what grows!" #!String
 
    771: "Fiber/1/-300/Basic -16/Fiber/Raw material sourced from plants." #!String
 
    772: "Oil of Garlic/1000/80/Cooking -7/Oil of Garlic/Drink this and weaker monsters will avoid you./drink/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    773: "Life Elixir/500/80/Cooking -7/Life Elixir/Restores health to full./drink/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
    774: "Wild Bait/15/-300/Basic -21/Wild Bait/A unique recipe from Linus. It appeals to all fish." #!String
 
    775: "Glacierfish/1000/10/Fish -4/Glacierfish/Builds a nest on the underside of glaciers./Day^Winter" #!String
 
    784: "Weeds/0/15/Basic/Weeds/Ugly weeds." #!String
 
    785: "Weeds/0/15/Basic/Weeds/Ugly weeds." #!String
 
    786: "Weeds/0/15/Basic/Weeds/Ugly weeds." #!String
 
    787: "Battery Pack/500/-300/Basic -16/Battery Pack/It's fully charged with precious energy." #!String
 
    788: "Lost Axe/0/-300/Quest/Lost Axe/Robin's been looking everywhere for it." #!String
 
    789: "Lucky Purple Shorts/0/-300/Quest/Lucky Purple Shorts/Better not inspect these too closely." #!String
 
    790: "Berry Basket/0/-300/Quest/Berry Basket/The fibers are stained with berry juice." #!String
 
    792: "Weeds/0/15/Basic/Weeds/Ugly weeds." #!String
 
    793: "Weeds/0/15/Basic/Weeds/Ugly weeds." #!String
 
    794: "Weeds/0/15/Basic/Weeds/Ugly weeds." #!String
 
    795: "Void Salmon/150/25/Fish -4/Void Salmon/A salmon, twisted by void energy. The fresh meat is jet black, but rapidly turns pink when exposed to air./Day^Spring Summer" #!String
 
    796: "Slimejack/100/15/Fish -4/Slimejack/He's coated in a very thick layer of slime. He keeps slipping out of your hands!/Day^Spring Summer" #!String
 
    797: "Pearl/2500/-300/Basic/Pearl/A rare treasure from the sea." #!String
 
    798: "Midnight Squid/100/15/Fish -4/Midnight Squid/A strange and mysterious denizen of the ocean's twilight depths./Day^Spring Summer" #!String
 
    799: "Spook Fish/220/15/Fish -4/Spook Fish/The huge eyes can detect the faint silhouettes of prey./Day^Spring Summer" #!String
 
    800: "Blobfish/500/15/Fish -4/Blobfish/This odd creature floats above the ocean floor, consuming any edible material in its path./Day^Spring Summer" #!String
 
    801: "Wedding Ring/2000/-300/Ring/Wedding Ring/An old Zuzu City tradition... It's used to ask for another farmer's hand in marriage." #!String
 
    802: "Cactus Seeds/0/-300/Seeds -74/Cactus Seeds/Can only be grown indoors. Takes 12 days to mature, and then produces fruit every 3 days." #!String
 
    803: "Iridium Milk/0/-2/Basic/Iridium Milk/A powerful 'milk' of unknown origin.../drink/0 0 0 0 0 0 0 0 0 0 0/0" #!String
 
</source>
 
}}
 
  
==Format==
+
In other words, the four important fields for items are:
===Rings===
 
Rings (indexes 516–534 or <tt>Ring.ringLowerIndexRange</tt> through <tt>Ring.ringUpperIndexRange</tt>) are parsed by the <tt>Ring</tt> constructor and contain six fields:
 
  
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
! index
+
! name
! field
+
! type
! example value
+
! description
 +
|-
 +
| <samp>ItemId</samp>
 +
| <samp>string</samp>
 +
| A [[Modding:Common data field types#Unique string ID|unique string ID]] for this item which should be globally unique (but may not be for existing vanilla items for backwards compatibility). For example, <samp>128</samp> (vanilla item) or <samp>Example.ModId_Watermelon</samp> (custom item).
 +
|-
 +
| <samp>QualifiedItemId</samp>
 +
| <samp>string</samp>
 +
| A globally unique item key, like <samp>(O)128</samp> for a vanilla item or <samp>(O)Example.ModId_Watermelon</samp> for a custom one. This is auto-generated from the <samp>TypeDefinitionId</samp> and <samp>ItemId</samp> fields.
 
|-
 
|-
| 0
+
| <samp>ParentSheetIndex</samp>
| name
+
| <samp>int</samp>
| ''Burglar's Ring''
+
| The item's sprite index within its spritesheet.
 
|-
 
|-
| 1
+
| <samp>TypeDefinitionId</samp>
| price<br /><small>(if sold by player)</small>
+
| <samp>string</samp>
| ''1500''
+
| The ID for the data definition which defines the item, like <samp>(O)</samp> for an object. You can use <samp>ItemRegistry.type_*</samp> constants with this field:
 +
<syntaxhighlight lang="c#">
 +
if (item.TypeDefinitionId == ItemRegistry.type_object)
 +
  ...
 +
</syntaxhighlight>
 +
|}
 +
 
 +
===Item references===
 +
Item references throughout the game code now use the <samp>ItemId</samp> instead of the <samp>ParentSheetIndex</samp>. Since the <samp>ItemId</samp> is identical to the index for existing vanilla items, most data assets are unaffected by this change. For example, here's from <samp>Data/NPCGiftTastes</samp> with one custom item:
 +
<syntaxhighlight lang="json">
 +
"Universal_Like": "-2 -7 -26 -75 -80 72 395 613 634 635 636 637 638 724 459 Example.ModID_watermelon"
 +
</syntaxhighlight>
 +
 
 +
Unless otherwise noted, unqualified item IDs will produce [[Modding:Items|objects]]. Some assets let you override that by specifying a <samp>QualifiedItemId</samp> value instead. For example, you can add <code>(O)128</code> to the gift taste list to explicitly add for an object. Here's a partial list of data assets and their supported item ID formats:
 +
 
 +
{| class="wikitable"
 
|-
 
|-
| 2
+
! data asset
| edibility<br /><small>(always "-300")</small>
+
! item ID format
| ''-300''
 
 
|-
 
|-
| 3
+
| [[Modding:Recipe data|<samp>Data/CraftingRecipes</samp><br /><samp>Data/CookingRecipes</samp>]]
| type<br /><small>(always "Ring")</small>
+
| &#32;
| ''Ring''
+
* Ingredients: both supported.
 +
* Output: set field 2 to the unqualified item ID, and field 3 to one of <samp>true</samp> (bigcraftable) or <samp>false</samp> (object).
 
|-
 
|-
| 4
+
| [[Modding:Fruit_trees|<samp>Data/FruitTrees</samp>]]
| display name<br /><small>(specific to language file)</small>
+
| &#32;
| ''Burglar's Ring''
+
* Fruit: both supported.
 +
* Sapling: unqualified only.
 
|-
 
|-
| 5
+
| [[Modding:Gift taste data|<samp>Data/NPCGiftTastes</samp>]]
| description
+
| Both supported, but only <samp>(O)</samp> items can be gifted.
| ''Monsters have a greater chance of dropping loot.''
 
 
|}
 
|}
  
Rings have a hardcoded category -96 (<tt>Object.ringCategory</tt>).
+
===Item types===
 
+
These are the item types for which custom items can added/edited:
===Other objects===
 
All other objects contain at least six fields:
 
  
 
{| class="wikitable"
 
{| class="wikitable"
 
|-
 
|-
! index
+
! item type
! field
+
! type identifier
! example value
+
! data asset
 +
|-
 +
| [[Modding:Items#Big_craftables|Big craftables]]
 +
| <samp>(BC)</samp>
 +
| <samp>Data/BigCraftables</samp><br /><small>Each item can set a custom texture name in the <samp>Texture</samp> field, and sprite index in the <samp>SpriteIndex</samp> field. The default texture is <samp>TileSheets/Craftables</samp>.</small>
 +
|-
 +
| [[Modding:Items#Boots|Boots]]
 +
| <samp>(B)</samp>
 +
| <samp>Data/Boots</samp><br /><small>Each item can set a custom texture name in fields 9 (item) and 7 (shoe color), and sprite index in fields 8 (item) and 5 (shoe color). The default textures are <samp>Maps/springobjects</samp> (item) and <samp>Characters/Farmer/shoeColors</samp> (shoe color).</small>
 +
|-
 +
| [[Modding:Crop data|Crops]]
 +
| <small>''not technically an item type''</small>
 +
| <samp>Data/Crops</samp><br /><small>Each crop can set a custom texture name and sprite index. The default texture is <samp>TileSheets/crops</samp>.</small>
 +
|-
 +
| [[Modding:Fish data|Fish (in fish tanks)]]
 +
| <small>''not technically an item type''</small>
 +
| <samp>Data/AquariumFish</samp><br /><small>Each fish can set a custom aquarium texture name in field 6, and sprite index in field 0. The default texture is <samp>LooseSprites/AquariumFish</samp>.</small>
 +
|-
 +
| [[Modding:Items#Furniture|Furniture]]
 +
| <samp>(F)</samp>
 +
| <samp>Data/Furniture</samp><br /><small>Each item can set a custom texture name in field 9, and sprite index in field 8. The default texture is <samp>TileSheets/furniture</samp>.</small>
 +
|-
 +
| [[Modding:Fruit_trees|Fruit Trees]]
 +
| <small>''not technically an item type''</small>
 +
| <samp>Data/FruitTrees</samp><br /><small>Each fruit tree can set a custom texture name and sprite index. The default texture is <samp>TileSheets/fruitTrees</samp>.</small>
 +
|-
 +
| [[Modding:Items#Hats|Hats]]
 +
| <samp>(H)</samp>
 +
| <samp>Data/Hats</samp><br /><small>Each item can set a custom texture name in field 7, and sprite index in field 6. The default texture is <samp>Characters/Farmer/hats</samp>.</small>
 
|-
 
|-
| 0
+
| [[Modding:Items#Objects|Objects]]
| name
+
| <samp>(O)</samp>
| ''Glacierfish''
+
| <samp>Data/Objects</samp><br /><small>Each item can set a custom texture name in the <samp>Texture</samp> field, and sprite index in the <samp>SpriteIndex</samp> field. The default texture is <samp>Maps/springobjects</samp>.</small>
 
|-
 
|-
| 1
+
| [[Modding:Items#Pants|Pants]]
| price<br /><small>(if sold by player)</small>
+
| <samp>(P)</samp>
| ''1000''
+
| <samp>Data/pantsData</samp><br /><small>Each item can set a custom texture name in the <samp>Texture</samp> field, and sprite index in the <samp>SpriteIndex</samp> field. The default texture is <samp>Characters/Farmer/pants</samp>.</small>
 
|-
 
|-
| 2
+
| [[Modding:Items#Shirts|Shirts]]
| edibility
+
| <samp>(S)</samp>
| ''10''
+
| <samp>Data/shirtData</samp><br /><small>Each item can set a custom texture name in the <samp>Texture</samp> field, and sprite index in the <samp>SpriteIndex</samp> field. The default texture is <samp>Characters/Farmer/shirts</samp>.</small>
 +
 
 +
<small>Shirt textures must be exactly 256 pixels wide, divided into two halves: the left half for the shirt sprites, and the right half for any dye masks. The remaining space can be left blank if needed.</small>
 +
<pre>
 +
      sprites      dye masks
 +
  /-----------\  /-----------\
 +
┌────────────────────────────────┐
 +
│ ┌───┐┌───┐┌───┐┌───┐┌───┐┌───┐ │
 +
│ │ 0 ││ 1 ││ 2 ││ a ││ b ││ c │ │
 +
│ └───┘└───┘└───┘└───┘└───┘└───┘ │
 +
│ ┌───┐┌───┐┌───┐┌───┐┌───┐┌───┐ │
 +
│ │ 3 ││ 4 ││ 5 ││ d ││ e ││ f │ │
 +
│ └───┘└───┘└───┘└───┘└───┘└───┘ │
 +
└────────────────────────────────┘
 +
</pre>
 
|-
 
|-
| 3
+
| [[#Custom tools|Tools]]
| type and category
+
| <samp>(T)</samp>
| ''Fish -4''
+
| <samp>Data/Tools</samp><br /><small>Each item can set a custom texture name in the <samp>Texture</samp> field, and sprite index in the <samp>SpriteIndex</samp> field. The vanilla tools use the <samp>TileSheets/Tools</samp> texture.</small>
 
|-
 
|-
| 4
+
| Wallpaper & flooring
| display name<br /><small>(specific to language file)</small>
+
| <samp>(WP)</samp> and <samp>(FL)</samp>
| ''Glacierfish''
+
| <samp>Data/AdditionalWallpaperFlooring</samp><br /><small>See [[Modding:Migrate to Stardew Valley 1.5.5#In the furniture catalogue|format docs]].</small>
 
|-
 
|-
| 5
+
| [[Modding:Items#Weapons|Weapons]]
| description
+
| <samp>(W)</samp>
| ''Builds a nest on the underside of glaciers.''
+
| <samp>Data/Weapons</samp><br />
 
|}
 
|}
  
Some entries have more fields, but most of the extra fields seem to be ignored.
+
When resolving an unqualified item ID like <samp>128</samp>, the game will get the first item type for which it exists in this order: object, big craftable, furniture, weapon, boots, hat, pants, shirt, tool, wallpaper, and floorpaper.
 +
 
 +
For each item type, the game has two files in its <samp>Content</samp> folder (which can be [[Modding:Editing XNB files#unpacking|unpacked for editing]]):
 +
* a ''data asset'' for the text data for its items (names, descriptions, prices, etc);
 +
* and a ''spritesheet'' for the in-game item icons.
  
====Food &amp; Drink====
+
Each item has a <samp>ParentSheetIndex</samp> field which is its position in the item type's spritesheet, starting at 0 in the top-left and incrementing by one as you move across and then down. For example, hat #0 is the first sprite in <samp>Characters/Farmer/hats</samp>. The <samp>ParentSheetIndex</samp> is also used to identify the item itself; since spritesheet indexes aren't unique (''e.g.,'' there's both a hat #10 and object #10), code needs to check the type too like <code>item is Weapon weapon && weapon.ParentSheetIndex == 4</code>.
If the value in index 6 is "food" or "drink" then the numbers in index 7 represent the buffs given when the food/drink is consumed. The value in index 8 is the duration of the buff(s).  
 
  
'''Buff Duration Number Calculation:'''
+
===Get a list of items===
Where X is equal to how many minutes you want the buff to last, and Y is the value in index 8.
+
With [[Modding:Player Guide/Getting Started|SMAPI installed]], you can [[Modding:Console commands#Console commands|run the <samp>list_items</samp> console command]] in-game to view/search items and their IDs.
  
(X minutes * 60) / 0.7 = Y
+
===Define a custom item===
 +
You can define custom items for most vanilla item types using only [[Modding:Content Patcher|Content Patcher]] or [[Modding:Modder Guide/APIs/Content|SMAPI's content API]].
  
''Note that the buff duration shown on-screen in the game will always be 1 second less than the above calculation.''
+
For example, this content pack adds a new Pufferchick item with a custom image, custom gift tastes, and a custom crop that produces it. Note that item references in other data assets like <samp>Data/Crops</samp> and <samp>Data/NPCGiftTastes</samp> use the item ID.
  
'''Health/Energy/Edibility:'''
+
{{#tag:syntaxhighlight|<nowiki>
The 'Edibility' number determines how much health and energy is restored.
+
{
 +
    "Format": "</nowiki>{{Content Patcher version}}<nowiki>",
 +
    "Changes": [
 +
        // add item
 +
        {
 +
            "Action": "EditData",
 +
            "Target": "Data/Objects",
 +
            "Entries": {
 +
                "{{ModId}}_Pufferchick": {
 +
                    "Name": "{{ModId}}_Pufferchick", // best practice to match the ID, since it's sometimes used as an alternate ID (e.g. in Data/CraftingRecipes)
 +
                    "Displayname": "Pufferchick",
 +
                    "Description": "An example object.",
 +
                    "Type": "Seeds",
 +
                    "Category": -74,
 +
                    "Price": 1200,
  
For X being the value in index 2 (Edibility):
+
                    "Texture": "Mods/{{ModId}}/Objects",
 +
                    "SpriteIndex": 0
 +
                }
 +
            }
 +
        },
  
Energy Restored = X * 2.5
+
        // add gift tastes
 +
        {
 +
            "Action": "EditData",
 +
            "Target": "Data/NPCGiftTastes",
 +
            "TextOperations": [
 +
                {
 +
                    "Operation": "Append",
 +
                    "Target": ["Entries", "Universal_Love"],
 +
                    "Value": "{{ModId}}_Pufferchick",
 +
                    "Delimiter": " " // if there are already values, add a space between them and the new one
 +
                }
 +
            ]
 +
        },
  
Health Restored (value shown on tooltip) = X * 2.5 * 0.4
+
        // add crop (Pufferchick is both seed and produce, like coffee beans)
<br />Health Restored (actual amount gained) = X * 2.5 * 0.45
+
        {
 +
            "Action": "EditData",
 +
            "Target": "Data/Crops",
 +
            "Entries": {
 +
                "{{ModId}}_Pufferchick": {
 +
                    "Seasons": [ "spring", "summer", "fall" ],
 +
                    "DaysInPhase": [ 1, 1, 1, 1, 1 ],
 +
                    "HarvestItemId": "{{ModId}}_Pufferchick",
  
 +
                    "Texture": "Mods/{{ModId}}/Crops",
 +
                    "SpriteIndex": 0
 +
                }
 +
            }
 +
        },
  
From the constructor in <tt>Buff.cs</tt>, the numbers in index 7 (separated by spaces) are:
+
        // add item + crop images
{|class="wikitable"
+
        {
 +
            "Action": "Load",
 +
            "Target": "Mods/{{ModId}}/Crops, Mods/{{ModId}}/Objects",
 +
            "FromFile": "assets/{{TargetWithoutPath}}.png" // assets/Crops.png, assets/Objects.png
 +
        }
 +
    ]
 +
}</nowiki>|lang=javascript}}
 +
 
 +
Most item data assets work just like <samp>Data/Objects</samp>. See also specific info for [[Modding:Fruit_trees|custom fruit trees]], [[Modding:Items#Tools|custom tools]], and [[Modding:Items#Weapons|melee weapons]].
 +
 
 +
===Error items===
 +
Prior to 1.6, in-game items with no underlying data (e.g. because you removed the mod which adds them) would previously cause issues like invisible items, errors, and crashes. This was partly mitigated by the bundled Error Handler mod.
 +
 
 +
Stardew Valley 1.6 added comprehensive handling for such items. They'll be shown with a <samp>🛇</samp> sprite in inventory UIs and in-game, the name Error Item, and a description which indicates the missing item ID for troubleshooting.
 +
 
 +
===For C# mods===
 +
<dl style="margin-left: 2em;">
 +
 
 +
<dt>Compare items</dt>
 +
<dd>
 +
Since <samp>Item.QualifiedItemId</samp> is globally unique, it can be used to simplify comparing items. For example:
 +
 
 +
{| class="wikitable"
 
|-
 
|-
!Index
+
! old code
!Buff Given
+
! new code
 
|-
 
|-
|0
 
|Farming
 
 
|-
 
|-
|1
+
| <samp>item.ParentSheetIndex == 128</samp>
|Fishing
+
| <samp>item.QualifiedItemId == "(O)128"</samp>
 
|-
 
|-
|2
+
| <samp>IsNormalObjectAtParentSheetIndex(item, 128)</samp>
|Mining
+
| <samp>item.QualifiedItemId == "(O)128"</samp>
 
|-
 
|-
|3
+
| <samp>!item.bigCraftable && item.ParentSheetIndex == 128</samp>
|Digging (unimplemented)
+
| <samp>item.QualifiedItemId == "(O)128"</samp>
 
|-
 
|-
|4
+
| <samp>item is Boots && item.ParentSheetIndex == 505</samp>
|Luck
+
| <samp>item.QualifiedItemId == "(B)505"</samp>
 +
|}
 +
 
 +
You can also use <samp>ItemRegistry.QualifyItemId</samp> to convert any item ID into a qualified one (if it's valid), and <samp>ItemRegistry.HasItemId</samp> to check if an item has a qualified or unqualified item ID.
 +
 
 +
Note that flavored item don't have their own ID. For example, Blueberry Wine and Wine are both <samp>(O)348</samp>. This affects flavored jellies, juices, pickles, and wines. In those cases you should still compare their separate fields like <samp>preservedParentSheetIndex</samp> (which actually contains the preserved item's <samp>ItemId</samp>, not its <samp>ParentSheetIndex</samp>).
 +
</dd>
 +
 
 +
<dt>Construct items</dt>
 +
<dd>When constructing items, specify the item's <samp>ItemId</samp> (''not'' <samp>QualifiedItemId</samp>). For example:
 +
 
 +
<syntaxhighlight lang="c#">
 +
new Object("128", 1);                      // vanilla item
 +
new Object("Example.ModId_Watermelon", 1); // custom item
 +
</syntaxhighlight>
 +
 
 +
You can use a utility method to construct items from their <samp>QualifiedItemId</samp>:
 +
 
 +
<syntaxhighlight lang="c#">
 +
Item item = ItemRegistry.Create("(B)505"); // Rubber Boots
 +
</syntaxhighlight>
 +
</dd>
 +
 
 +
<dt>Define custom item types</dt>
 +
<dd>You can implement <samp>IItemDataDefinition</samp> for your own item type, and call <samp>ItemRegistry.AddTypeDefinition</samp> to register it. This provides all the logic needed by the game to handle the item type: where to get item data, how to draw them, etc.
 +
 
 +
'''This is extremely specialized''', and multiplayer compatibility is unknown. Most mods should add custom items within the existing types instead.</dd>
 +
 
 +
<dt>New <samp>Is*</samp> methods</dt>
 +
<dd>1.6 added some <samp>StardewValley.Object</samp> methods to handle custom items in a generic way (and to let mods patch the logic):
 +
{| class="wikitable"
 +
|-
 +
! method
 +
! effect
 +
|-
 +
| <samp>object.IsBar()</samp>
 +
| Whether the item is a [[Copper Bar|copper bar]], [[Iron Bar|iron bar]], [[Gold Bar|gold bar]], [[Iridium Bar|iridium bar]], or [[Radioactive Bar|radioactive bar]].
 +
|-
 +
| <samp>object.IsBreakableStone()</samp>
 +
| Whether the item is a stone debris item which can be broken by a pickaxe.
 
|-
 
|-
|5
+
| <samp>object.IsFence()</samp>
|Foraging
+
| Whether the item is a [[Crafting#Fences|fence]].
 
|-
 
|-
|6
+
| <samp>object.IsFruitTreeSapling()</samp>
|Crafting (unimplemented)
+
| Whether the item is a [[Fruit Trees|fruit tree]] sapling. This checks the <samp>Data\fruitTrees</samp> keys, so it works with custom fruit trees too.
 
|-
 
|-
|7
+
| <samp>object.IsHeldOverHead()</samp>
|Max Energy
+
| Whether the player is shown holding up the item when it's selected in their toolbar. Default true (except for furniture).
 
|-
 
|-
|8
+
| <samp>object.IsIncubator()</samp>
|Magnetism
+
| Whether the item can incubate [[Animals|farm animal]] eggs when placed in a building.
 
|-
 
|-
|9
+
| <samp>object.IsTapper()</samp>
|Speed
+
| Whether the item is a [[Tapper|tapper]] or [[Heavy Tapper|heavy tapper]].
 
|-
 
|-
|10
+
| <samp>object.IsTeaSapling()</samp>
|Defense
+
| Whether the item is a [[Tea Sapling|tea sapling]].
 
|-
 
|-
|11
+
| <samp>object.IsTwig()</samp>
|Attack
+
| Whethere the item is a twig debris item.
 +
|-
 +
| <samp>object.IsWeeds()</samp>
 +
| Whether the item is a weed debris item.
 
|}
 
|}
 +
</dd>
 +
 +
<dt>Work with item metadata</dt>
 +
<dd>
 +
1.6 added an <samp>ItemRegistry</samp> API for working with the new item system. Some of the provided methods are:
 +
 +
{| class="wikitable"
 +
|-
 +
! method
 +
! effect
 +
|-
 +
| <samp>ItemRegistry.Create</samp>
 +
| Create an item from its item ID (qualified or unqualified). If the ID doesn't match a real item, the optional <samp>allowNull</samp> parameter indicates whether to return null or an Error Item. For example:
 +
<syntaxhighlight lang="c#">
 +
Item item = ItemRegistry.Create("(B)505"); // Rubber Boots
 +
</syntaxhighlight>
  
Items that have a number in the "Crafting" field display buggy information in-game (''e.g.'', Bean Hotpot). Items that have a number in the "Attack" field display the Attack icon and a number, but no description. It's unclear how these buffs work (if at all).
+
You can also get a specific value type instead of <samp>Item</samp> if needed. This will throw a descriptive exception if the type isn't compatible (e.g. you try to convert furniture to boots).
 +
<syntaxhighlight lang="c#">
 +
Boots item = ItemRegistry.Create<Boots>("(B)505"); // Rubber Boots
 +
</syntaxhighlight>
 +
|-
 +
| <samp>ItemRegistry.Exists</samp>
 +
| Get whether a qualified or unqualified item ID matches an existing item. For example:
 +
<syntaxhighlight lang="c#">
 +
bool pufferfishExist = ItemRegistry.Exists("(O)128");
 +
</syntaxhighlight>
 +
|-
 +
| <samp>ItemRegistry.IsQualifiedId</samp>
 +
| Get whether the given item ID is qualified with the type prefix (like <samp>(O)128</samp> instead of <samp>128</samp>).
 +
|-
 +
| <samp>ItemRegistry.QualifyItemId</samp>
 +
| Get the unique qualified item ID given an unqualified or qualified one. For example:
 +
<syntaxhighlight lang="c#">
 +
string qualifiedId = ItemRegistry.QualifyItemId("128"); // returns (O)128
 +
</syntaxhighlight>
 +
|-
 +
| <samp>ItemRegistry.GetMetadata</samp>
 +
| This lets you get high-level info about an item:
 +
<syntaxhighlight lang="c#">
 +
// get info about Rubber Boots
 +
ItemMetadata info = ItemRegistry.GetMetadata("(B)505");
  
Note:  The "Tipsy" Buff (from Beer, Wine, Mead, and Pale Ale) and the "Oil of Garlic" buff (from Oil of Garlic) are handled in the game code (<tt>BuffsDisplay::tryToAddDrinkBuff()</tt>), rather than through <tt>ObjectInformation.xnb</tt>.  The complete [[Health]] regen given by consuming a [[Life Elixir]] is also handled in <tt>tryToAddDrinkBuff</tt>.
+
// get item ID info
 +
$"The item has unqualified ID {info.LocalId}, qualified ID {info.QualifiedId}, and is defined by the {info.TypeIdentifier} item data definition.";
  
====Geodes====
+
// does the item exist in the data files?
For the 4 types of geodes (item #535, 536, 537, and 749) there is approximately a 50% chance that the game will use the information in index 6 to determine what item you receive when breaking the geode open at the Blacksmith. (See <tt>Utility::getTreasureFromGeode()</tt>.)
+
bool exists = info.Exists();
 +
</syntaxhighlight>
  
The numbers in index 6 represent other object numbers from <tt>ObjectInformation.xnb</tt>.
+
And get common parsed item data:
 +
<syntaxhighlight lang="c#">
 +
// get parsed info
 +
ParsedItemData data = info.GetParsedData();
 +
$"The internal name is {data.InternalName}, translated name {data.DisplayName}, description {data.Description}, etc.";
  
==Images==
+
// draw an item sprite
The item IDs in <tt>ObjectInformation.xnb</tt> correspond to the images in the sprite sheet <tt>Content\Maps\springobjects.xnb</tt>. The sprites are numbered from the top left starting with zero.
+
Texture2D texture = data.GetTexture();
 +
Rectangle sourceRect = data.GetSourceRect();
 +
spriteBatch.Draw(texture, Vector2.Zero, sourceRect, Color.White);
 +
</syntaxhighlight>
 +
 
 +
And create an item:
 +
<syntaxhighlight lang="c#">
 +
Item item = metadata.CreateItem();
 +
</syntaxhighlight>
 +
 
 +
And get the type definition (note that this is very specialized, and you should usually use <samp>ItemRegistry</samp> instead to benefit from its caching and optimizations):
 +
<syntaxhighlight lang="c#">
 +
IItemDataDefinition typeDefinition = info.GetTypeDefinition();
 +
</syntaxhighlight>
 +
|-
 +
| <samp>ItemRegistry.ResolveMetadata</samp>
 +
| Equivalent to <samp>ItemRegistry.GetMetadata</samp>, except that it'll return null if the item doesn't exist.
 +
|-
 +
| <samp>ItemRegistry.GetData</samp>
 +
| Get the parsed data about an item, or <samp>null</samp> if the item doesn't exist. This is a shortcut for <code>ItemRegistry.ResolveMetadata(id)?.GetParsedData()</code>; see the previous method for info on the parsed data.
 +
|-
 +
| <samp>ItemRegistry.GetDataOrErrorItem</samp>
 +
| Equivalent to <samp>ItemRegistry.GetData</samp>, except that it'll return info for an Error Item if the item doesn't exist (e.g. for drawing in inventory).
 +
|-
 +
| <samp>ItemRegistry.GetErrorItemName</samp>
 +
| Get a translated ''Error Item'' label.
 +
|}
 +
</dd>
 +
</dl>
 +
 
 +
==Common data==
 +
===Quality===
 +
Each item has a quality level which (depending on the item type) may affect its price, health boost, etc. The valid qualities are:
 +
 
 +
{| class="wikitable"
 +
|-
 +
! quality
 +
! value
 +
! constant
 +
|-
 +
| normal
 +
| <samp>0</samp>
 +
| <samp>Object.lowQuality</samp>
 +
|-
 +
| silver
 +
| <samp>1</samp>
 +
| <samp>Object.medQuality</samp>
 +
|-
 +
| gold
 +
| <samp>2</samp>
 +
| <samp>Object.highQuality</samp>
 +
|-
 +
| iridium
 +
| <samp>4</samp>
 +
| <samp>Object.bestQuality</samp>
 +
|}
  
==Categories==
+
===Categories===
Most items have a category, represented by a negative integer separate from the type name. In code, you can get an item's category value from <tt>item.Category</tt>, and its translated name from <tt>item.getCategoryName()</tt>. Here are the valid categories:
+
Each item also has a category (represented by a negative integer). In code, you can get an item's category value from <samp>item.Category</samp>, and its translated name from <samp>item.getCategoryName()</samp>. Here are the valid categories:
  
 
{| class="wikitable sortable"
 
{| class="wikitable sortable"
Line 727: Line 438:
 
! value
 
! value
 
! internal constant
 
! internal constant
 +
! [[#Context tags|context tag]]
 
! English translation
 
! English translation
 +
! Properties
 
|-
 
|-
 
| -2
 
| -2
| <tt>Object.GemCategory</tt>
+
| <samp>Object.GemCategory</samp>
 +
| <samp>category_gem</samp>
 
| Mineral
 
| Mineral
 +
| Affected by [[Skills#Mining|Gemologist]] profession
 
|-
 
|-
 
| -4
 
| -4
| <tt>Object.FishCategory</tt>
+
| <samp>Object.FishCategory</samp>
 +
| <samp>category_fish</samp>
 
| Fish
 
| Fish
 +
| Affected by [[Skills#Fishing|Fisher]] and [[Skills#Fishing|Angler]] professions
 
|-
 
|-
 
| -5
 
| -5
| <tt>Object.EggCategory</tt>
+
| <samp>Object.EggCategory</samp>
 +
| <samp>category_egg</samp>
 
| Animal Product
 
| Animal Product
 +
| Affected by [[Skills#Farming|Rancher]] profession, can be used in a slingshot
 
|-
 
|-
 
| -6
 
| -6
| <tt>Object.MilkCategory</tt>
+
| <samp>Object.MilkCategory</samp>
 +
| <samp>category_milk</samp>
 
| Animal Product
 
| Animal Product
 +
| Affected by [[Skills#Farming|Rancher]] profession
 
|-
 
|-
 
| -7
 
| -7
| <tt>Object.CookingCategory</tt>
+
| <samp>Object.CookingCategory</samp>
 +
| <samp>category_cooking</samp>
 
| Cooking
 
| Cooking
 +
|
 
|-
 
|-
 
| -8
 
| -8
| <tt>Object.CraftingCategory</tt>
+
| <samp>Object.CraftingCategory</samp>
 +
| <samp>category_crafting</samp>
 
| Crafting
 
| Crafting
 +
| Is Placeable
 
|-
 
|-
 
| -9
 
| -9
| <tt>Object.BigCraftableCategory</tt>
+
| <samp>Object.BigCraftableCategory</samp>
 +
| <samp>category_big_craftable</samp>
 
|  
 
|  
 +
| Is Placeable
 
|-
 
|-
 
| -12
 
| -12
| <tt>Object.mineralsCategory</tt>
+
| <samp>Object.mineralsCategory</samp>
 +
| <samp>category_minerals</samp>
 
| Mineral
 
| Mineral
 +
| Affected by [[Skills#Mining|Gemologist]] profession
 
|-
 
|-
 
| -14
 
| -14
| <tt>Object.meatCategory</tt>
+
| <samp>Object.meatCategory</samp>
 +
| <samp>category_meat</samp>
 
| Animal Product
 
| Animal Product
 +
|
 
|-
 
|-
 
| -15
 
| -15
| <tt>Object.metalResources</tt>
+
| <samp>Object.metalResources</samp>
 +
| <samp>category_metal_resources</samp>
 
| Resource
 
| Resource
 +
|
 
|-
 
|-
 
| -16
 
| -16
| <tt>Object.buildingResources</tt>
+
| <samp>Object.buildingResources</samp>
 +
| <samp>category_building_resources</samp>
 
| Resource
 
| Resource
 +
|
 
|-
 
|-
 
| -17
 
| -17
| <tt>Object.sellAtPierres</tt>
+
| <samp>Object.sellAtPierres</samp>
 +
| <samp>category_sell_at_pierres</samp>
 
|  
 
|  
 +
|
 
|-
 
|-
 
| -18
 
| -18
| <tt>Object.sellAtPierresAndMarnies</tt>
+
| <samp>Object.sellAtPierresAndMarnies</samp>
 +
| <samp>category_sell_at_pierres_and_marnies</samp>
 
| Animal Product
 
| Animal Product
 +
| Affected by [[Skills#Farming|Rancher]] profession
 
|-
 
|-
 
| -19
 
| -19
| <tt>Object.fertilizerCategory</tt>
+
| <samp>Object.fertilizerCategory</samp>
 +
| <samp>category_fertilizer</samp>
 
| Fertilizer
 
| Fertilizer
 +
| Is Placeable, is always passable
 
|-
 
|-
 
| -20
 
| -20
| <tt>Object.junkCategory</tt>
+
| <samp>Object.junkCategory</samp>
 +
| <samp>category_junk</samp>
 
| Trash
 
| Trash
 +
|
 
|-
 
|-
 
| -21
 
| -21
| <tt>Object.baitCategory</tt>
+
| <samp>Object.baitCategory</samp>
 +
| <samp>category_bait</samp>
 
| Bait
 
| Bait
 +
| Can be attached to a fishing rod
 
|-
 
|-
 
| -22
 
| -22
| <tt>Object.tackleCategory</tt>
+
| <samp>Object.tackleCategory</samp>
 +
| <samp>category_tackle</samp>
 
| Fishing Tackle
 
| Fishing Tackle
 +
| Can be attached to a fishing rod, cannot stack
 
|-
 
|-
 
| -23
 
| -23
| <tt>sellAtFishShopCategory</tt>
+
| <samp>sellAtFishShopCategory</samp>
 +
| <samp>category_sell_at_fish_shop</samp>
 
|  
 
|  
 +
|
 
|-
 
|-
 
| -24
 
| -24
| <tt>Object.furnitureCategory</tt>
+
| <samp>Object.furnitureCategory</samp>
 +
| <samp>category_furniture</samp>
 
| Decor
 
| Decor
 +
|
 
|-
 
|-
 
| -25
 
| -25
| <tt>Object.ingredientsCategory</tt>
+
| <samp>Object.ingredientsCategory</samp>
 +
| <samp>category_ingredients</samp>
 
| Cooking
 
| Cooking
 +
|
 
|-
 
|-
 
| -26
 
| -26
| <tt>Object.artisanGoodsCategory</tt>
+
| <samp>Object.artisanGoodsCategory</samp>
 +
| <samp>category_artisan_goods</samp>
 
| Artisan Goods
 
| Artisan Goods
 +
| Affected by [[Skills#Farming|Artisan]] profession
 
|-
 
|-
 
| -27
 
| -27
| <tt>Object.syrupCategory</tt>
+
| <samp>Object.syrupCategory</samp>
 +
| <samp>category_syrup</samp>
 
| Artisan Goods
 
| Artisan Goods
 +
| Affected by [[Skills#Foraging|Tapper]] profession
 
|-
 
|-
 
| -28
 
| -28
| <tt>Object.monsterLootCategory</tt>
+
| <samp>Object.monsterLootCategory</samp>
 +
| <samp>category_monster_loot</samp>
 
| Monster Loot
 
| Monster Loot
 +
|
 
|-
 
|-
 
| -29
 
| -29
| <tt>Object.equipmentCategory</tt>
+
| <samp>Object.equipmentCategory</samp>
 +
| <samp>category_equipment</samp>
 
|  
 
|  
 +
|
 
|-
 
|-
 
| -74
 
| -74
| <tt>Object.SeedsCategory</tt>
+
| <samp>Object.SeedsCategory</samp>
 +
| <samp>category_seeds</samp>
 
| Seed
 
| Seed
 +
| Is Placeable, is always passable
 
|-
 
|-
 
| -75
 
| -75
| <tt>Object.VegetableCategory</tt>
+
| <samp>Object.VegetableCategory</samp>
 +
| <samp>category_vegetable</samp>
 
| Vegetable
 
| Vegetable
 +
| Affected by [[Skills#Farming|Tiller]] profession, can be used in a slingshot
 
|-
 
|-
 
| -79
 
| -79
| <tt>Object.FruitsCategory</tt>
+
| <samp>Object.FruitsCategory</samp>
 +
| <samp>category_fruits</samp>
 
| Fruit
 
| Fruit
 +
| Affected by [[Skills#Farming|Tiller]] profession (if not foraged), can be used in a slingshot
 
|-
 
|-
 
| -80
 
| -80
| <tt>Object.flowersCategory</tt>
+
| <samp>Object.flowersCategory</samp>
 +
| <samp>category_flowers</samp>
 
| Flower
 
| Flower
 +
| Affected by [[Skills#Farming|Tiller]] profession
 
|-
 
|-
 
| -81
 
| -81
| <tt>Object.GreensCategory</tt>
+
| <samp>Object.GreensCategory</samp>
 +
| <samp>category_greens</samp>
 
| Forage
 
| Forage
 +
|
 
|-
 
|-
 
| -95
 
| -95
| <tt>Object.hatCategory</tt>
+
| <samp>Object.hatCategory</samp>
 +
| <samp>category_hat</samp>
 
|  
 
|  
 +
|
 
|-
 
|-
 
| -96
 
| -96
| <tt>Object.ringCategory</tt>
+
| <samp>Object.ringCategory</samp>
 +
| <samp>category_ring</samp>
 
|  
 
|  
 +
|
 
|-
 
|-
 
| -98
 
| -98
| <tt>Object.weaponCategory</tt>
+
| <samp>Object.weaponCategory</samp>
 +
| <samp>category_weapon</samp>
 
|  
 
|  
 +
|
 
|-
 
|-
 
| -99
 
| -99
| <tt>Object.toolCategory</tt>
+
| <samp>Object.toolCategory</samp>
 +
| <samp>category_tool</samp>
 
|  
 
|  
 +
|
 
|}
 
|}
  
Here's a dump of the vanilla items for each category:
+
{{collapse|Console commands|content=
{{collapse|Items with numeric categories|content=<source lang="yaml">
+
With the {{nexus mod|3101|Console Code}} mod installed, you can run this command in the SMAPI console to see a list of objects by category:
-81: Wild Horseradish, Daffodil, Leek, Dandelion, Cave Carrot, Sap, Morel, Chanterelle, Holly, Spring Onion, Common Mushroom, Hazelnut, Winter Root, Snow Yam, Red Mushroom, Purple Mushroom
+
 
-80: Poppy, Sweet Pea, Crocus, Sunflower, Tulip, Summer Spangle, Fairy Rose, Blue Jazz
+
<pre>cs return string.Join(`\n`, Game1.objectData.Keys.Select(key => new StardewValley.Object(key, 1)).GroupBy(item => item.Category, item => item.Name).OrderByDescending(p => p.Key).Select(p => $`{p.Key}: {string.Join(`, `, p.OrderBy(name => name))}`));</pre>
-79: Coconut, Cactus Fruit, Rhubarb, Melon, Blueberry, Hot Pepper, Starfruit, Cranberries, Salmonberry, Spice Berry, Grape, Strawberry, Wild Plum, Blackberry, Crystal Fruit, Ancient Fruit, Apple, Apricot, Orange, Peach, Pomegranate, Cherry
+
}}
-75: Parsnip, Green Bean, Cauliflower, Potato, Garlic, Kale, Tomato, Fiddlehead Fern, Wheat, Radish, Red Cabbage, Corn, Eggplant, Artichoke, Pumpkin, Bok Choy, Yam, Beet, Amaranth, Hops
+
 
-74: Amaranth Seeds, Grape Starter, Hops Starter, Acorn, Maple Seed, Pine Cone, Rare Seed, Fairy Seeds, Tulip Bulb, Jazz Seeds, Sunflower Seeds, Coffee Bean, Poppy Seeds, Spangle Seeds, Parsnip Seeds, Bean Starter, Cauliflower Seeds, Potato Seeds, Garlic Seeds, Kale Seeds, Rhubarb Seeds, Melon Seeds, Tomato Seeds, Blueberry Seeds, Pepper Seeds, Wheat Seeds, Radish Seeds, Red Cabbage Seeds, Starfruit Seeds, Corn Seeds, Eggplant Seeds, Artichoke Seeds, Pumpkin Seeds, Bok Choy Seeds, Yam Seeds, Cranberry Seeds, Beet Seeds, Spring Seeds, Summer Seeds, Fall Seeds, Winter Seeds, Ancient Seeds, Cherry Sapling, Apricot Sapling, Orange Sapling, Peach Sapling, Pomegranate Sapling, Apple Sapling, Strawberry Seeds, Mixed Seeds, Cactus Seeds
+
===Context tags===
-28: Bug Meat, Slime, Bat Wing, Solar Essence, Void Essence
+
A ''context tag'' is an arbitrary data label attached to items. These can produce various effects in-game, or may be informational only. Context tags are case-insensitive. The game generates some tags based on the game data (like the item quality), and others are defined in <samp>Data/Objects</samp>.
-27: Maple Syrup, Oak Resin, Pine Tar
+
 
-26: Pale Ale, Mayonnaise, Duck Mayonnaise, Void Mayonnaise, Honey, Pickles, Jelly, Beer, Wine, Juice, Cheese, Goat Cheese, Cloth, Truffle Oil, Mead
+
Here's an ''incomplete'' list of context tags added or used in the base game. Mods can add custom context tags, which aren't listed here.
-24: Wood Floor, Stone Floor, Weathered Floor, Crystal Floor, Tea Set, Straw Floor, Wood Path, Gravel Path, Crystal Path, Cobblestone Path, Stepping Stone Path
+
 
-23: Clam, Nautilus Shell, Coral, Rainbow Shell, Sea Urchin
+
<dl style="margin-left: 2em;">
-22: Spinner, Dressed Spinner, Barbed Hook, Lead Bobber, Treasure Hunter, Trap Bobber, Cork Bobber
+
<dt>Added automatically for all items:</dt>
-21: Bait, Magnet, Wild Bait
+
<dd>
-20: Joja Cola, Trash, Driftwood, Broken Glasses, Broken CD, Soggy Newspaper, Rotten Plant
+
{| class="wikitable"
-19: Basic Fertilizer, Quality Fertilizer, Basic Retaining Soil, Quality Retaining Soil, Speed-Gro, Deluxe Speed-Gro
+
|-
-18: Wool, Duck Feather, Rabbit's Foot
+
! context tag
-17: Sweet Gem Berry, Truffle
+
! effect
-16: Wood, Stone, Hardwood, Fiber, Battery Pack
+
|-
-15: Copper Bar, Iron Bar, Gold Bar, Iridium Bar, Refined Quartz, Copper Ore, Iron Ore, Gold Ore, Iridium Ore, Coal
+
| <samp>category_{{t|category}}</samp>
-12: Alamite, Bixite, Baryte, Aerinite, Calcite, Dolomite, Esperite, Fluorapatite, Geminite, Helvite, Jamborite, Jagoite, Kyanite, Lunarite, Malachite, Neptunite, Lemon Stone, Nekoite, Orpiment, Petrified Slime, Thunder Egg, Pyrite, Ocean Stone, Ghost Crystal, Tigerseye, Jasper, Opal, Fire Opal, Celestine, Marble, Sandstone, Granite, Basalt, Limestone, Soapstone, Hematite, Mudstone, Obsidian, Slate, Fairy Stone, Star Shards
+
| Added automatically based on the item category. See the 'context tag' column in the [[#Categories|item category list]] for possible values.
-8: Cherry Bomb, Bomb, Mega Bomb, Hardwood Fence, Wood Fence, Stone Fence, Iron Fence, Gate, Dwarvish Translation Guide, Sprinkler, Quality Sprinkler, Iridium Sprinkler, Jack-O-Lantern
+
|-
-7: Fried Egg, Omelet, Salad, Cheese Cauliflower, Baked Fish, Parsnip Soup, Vegetable Medley, Complete Breakfast, Fried Calamari, Strange Bun, Lucky Lunch, Fried Mushroom, Pizza, Bean Hotpot, Glazed Yams, Carp Surprise, Hashbrowns, Pancakes, Salmon Dinner, Fish Taco, Crispy Bass, Pepper Poppers, Bread, Tom Kha Soup, Trout Soup, Chocolate Cake, Pink Cake, Rhubarb Pie, Cookie, Spaghetti, Fried Eel, Spicy Eel, Sashimi, Maki Roll, Tortilla, Red Plate, Eggplant Parmesan, Rice Pudding, Ice Cream, Blueberry Tart, Autumn's Bounty, Pumpkin Soup, Super Meal, Cranberry Sauce, Stuffing, Farmer's Lunch, Survival Burger, Dish O' The Sea, Miner's Treat, Roots Platter, Algae Soup, Pale Broth, Plum Pudding, Artichoke Dip, Stir Fry, Roasted Hazelnuts, Pumpkin Pie, Radish Salad, Fruit Salad, Blackberry Cobbler, Cranberry Candy, Bruschetta, Coleslaw, Fiddlehead Risotto, Poppyseed Muffin, Chowder, Fish Stew, Escargot, Lobster Bisque, Maple Bar, Crab Cakes, Oil of Garlic, Life Elixir
+
| <samp>fish_{{t|metadata}}</samp>
-6: Milk, Large Milk, Goat Milk, L. Goat Milk
+
| Added automatically for a fish item based on [[Modding:Fish data|its metadata in <samp>Data/Fish</samp>]].
-5: Large Egg, Egg, Duck Egg, Void Egg
+
 
-4: Pufferfish, Anchovy, Tuna, Sardine, Bream, Largemouth Bass, Smallmouth Bass, Rainbow Trout, Salmon, Walleye, Perch, Carp, Catfish, Pike, Sunfish, Red Mullet, Herring, Eel, Octopus, Red Snapper, Squid, Sea Cucumber, Ghostfish, Stonefish
+
For [[Crab Pot|crab pot]] fish (''i.e.'' those with type <samp>trap</samp>):
-2: Emerald, Aquamarine, Ruby, Amethyst, Topaz, Jade, Diamond, Prismatic Shard, Quartz, Fire Quartz, Frozen Tear, Earth Crystal
 
</source>}}
 
  
 +
{| class="wikitable"
 +
|-
 +
! context tag
 +
! notes
 +
|-
 +
| <samp>fish_trap_location_{{t|water type}}</samp>
 +
| Based on field 2 ('darting randomness'). For example, <samp>fish_trap_location_ocean</samp>.
 +
|}
 +
 +
For fishing rod fish (''i.e.'' those whose type is ''not'' <samp>trap</samp>):
 +
{| class="wikitable"
 +
|-
 +
! context tag
 +
! notes
 +
|-
 +
| <samp>fish_difficulty_{{t|difficulty}}</samp>
 +
| Based on field 1 ('chance to dart'), where {{t|difficulty}} is one of <samp>easy</samp> (0–33), <samp>medium</samp> (34–66), <samp>hard</samp> (67–100), or <samp>extremely_hard</samp> (101+). For example, <samp>fish_difficulty_hard</samp>.
 +
|-
 +
| <samp>fish_motion_{{t|motion}}</samp>
 +
| Based on field 4 ('location'). For example, <samp>fish_motion_floater</samp>.
 +
|-
 +
| <samp>fish_favor_weather_{{t|weather}}</samp>
 +
| Based on field 7 ('weather'). For example, <samp>fish_favor_weather_sunny</samp>.
 +
|}
 +
|-
 +
| <samp>id_{{t|type}}_{{t|identifier}}</samp>
 +
| Added automatically as an alternative ID. The {{t|type}} is one of <samp>B</samp> (boots), <samp>BBL</samp> (big craftable recipe), <samp>BL</samp> (object recipe), <samp>BO</samp> (big craftable), <samp>C</samp> (clothing), <samp>F</samp> (furniture), <samp>H</samp> (hat), <samp>O</samp> (object), <samp>R</samp> (ring), <samp>W</samp> (melee weapon), else blank. The {{t|identifier}} is the item's parent sheet index. For example, [[pufferfish]] has value <samp>id_o_128</samp> (object #128).
 +
|-
 +
| <samp>item_{{t|name}}</samp>
 +
| Added automatically based on the item name. The name is trimmed, lowercase, with spaces replaced with underscores, and with single quotes removed. For example, [['1000 Years From Now']] has context tag <samp>item_1000_years_from_now</samp>.
 +
|}
 +
</dd>
 +
 +
<dt>Added automatically for [[#Objects|object-type]] items:</dt>
 +
<dd>
 +
{| class="wikitable"
 +
|-
 +
! context tag
 +
! effect
 +
|-
 +
| <samp>jelly_item</samp><br /><samp>juice_item</samp><br /><samp>pickle_item</samp><br /><samp>wine_item</samp>
 +
| For items produced by the [[keg]] or [[Preserves Jar|preserves jar]], the preserved item type.
 +
|-
 +
| <samp>preserve_sheet_index_{{t|id}}</samp>
 +
| For items produced by the [[keg]] or [[Preserves Jar|preserves jar]], the parent sheet index for the original item that was produced. For example, blueberry [[wine]] has <samp>preserve_sheet_index_258</samp>, where 258 is the [[blueberry]] item's index.
 +
|-
 +
| <samp>quality_none</samp><br /><samp>quality_silver</samp><br /><samp>quality_gold</samp><br /><samp>quality_iridium</samp>
 +
| Added automatically based on the item quality.
 +
|-
 +
| <samp>quality_qi</samp>
 +
| Added automatically for items cooked while the [[Quests|''Qi's Cuisine'' special order]] is active.
 +
|}
 +
</dd>
 +
 +
<dt>Color tags:</dt>
 +
<dd>
 +
{| class="wikitable"
 +
|-
 +
! context tag
 +
! effect
 +
|-
 +
| <samp>color_*</samp>
 +
| Color tags are used by a number of game functions, including when the player [[Dyeing#Dye Pots|dyes clothing]] at [[2 Willow Lane|Emily's house]], when tinting certain machine products such as [[Wine]] and [[Pickles]], and when displaying the [[Books|Book]] reading animation. For tinting purposes, each tag has a specific RGB value that is used, except when using Emily's Dye Pots, in which case they are grouped into one of the following categories.
 +
 +
{| class="wikitable"
 +
|-
 +
! dye pot
 +
! context tags
 +
|-
 +
| red
 +
| <samp>color_red</samp>, <samp>color_salmon</samp>, <samp>color_dark_red</samp>, <samp>color_pink</samp>
 +
|-
 +
| orange
 +
| <samp>color_orange</samp>, <samp>color_dark_orange</samp>, <samp>color_dark_brown</samp>, <samp>color_brown</samp>, <samp>color_copper</samp>
 +
|-
 +
| yellow
 +
| <samp>color_yellow</samp>, <samp>color_dark_yellow</samp>, <samp>color_gold</samp>, <samp>color_sand</samp>
 +
|-
 +
| green
 +
| <samp>color_green</samp>, <samp>color_dark_green</samp>, <samp>color_lime</samp>, <samp>color_yellow_green</samp>, <samp>color_jade</samp>, <samp>color_sea_green</samp>
 +
|-
 +
| blue
 +
| <samp>color_blue</samp>, <samp>color_dark_blue</samp>, <samp>color_dark_cyan</samp>, <samp>color_light_cyan</samp>, <samp>color_cyan</samp>, <samp>color_aquamarine</samp>
 +
|-
 +
| purple
 +
| <samp>color_purple</samp>, <samp>color_dark_purple</samp>, <samp>color_dark_pink</samp>, <samp>color_pale_violet_red</samp>, <samp>color_poppyseed</samp>, <samp>color_iridium</samp>
 +
|-
 +
| no color
 +
| <samp>color_black</samp>, <samp>color_gray</samp>, <samp>color_dark_gray</samp>, <samp>color_white</samp>, <samp>color_iron</samp>, <samp>color_prismatic</samp>
 +
|}
 +
|}
 +
 +
<dt>Tags added in 1.6:</dt>
 +
<dd>
 +
{| class="wikitable"
 +
|-
 +
! context tag
 +
! effect
 +
|-
 +
| <samp>campfire_item</samp>
 +
| Marks the item as a [[campfire]]. If the item also has the <samp>torch_item</samp> context tag, when it's placed in the world and turned on...
 +
* campfire flames are drawn over it;
 +
* if the item is [[Modding:Items#Big craftables|big craftable]], light is emitted from its center instead of the top.
 +
|-
 +
| <samp>fish_pond_ignore</samp>
 +
| Prevents players from adding this fish to [[Fish Pond|fish ponds]], even if it would otherwise match an entry in <samp>Data/FishPondData</samp>.
 +
|-
 +
| <samp>geode_crusher_ignored</samp>
 +
| Prevents breaking this item open in a [[Geode Crusher|geode crusher]], even if the item has geode fields in [[Modding:Items#Objects|<samp>Data/Objects</samp>]].
 +
|-
 +
| <samp>item_type_{{t|type}}</samp>
 +
| For an [[Modding:Items#Objects|object-type item]], the type value from the 'type and category' field. (Non-object items always have the exact tag <samp>item_type_</samp> with nothing after the last underscore.) This is automatic and shouldn't be set manually. The tag is checked in a few places (''e.g.'' the [[museum]] to check if an item is an artifact or mineral), but most of the game won't be affected.
 +
|-
 +
| <samp>museum_donatable</samp><br /><samp>not_museum_donatable</samp>
 +
| Set whether the item can be donated to the [[museum]], overriding the vanilla logic.
 +
|-
 +
| <samp>not_giftable</samp>
 +
| Prevents players from gifting this item to NPCs, who'll ignore the item entirely (e.g. as if you were holding a tool).
 +
 +
This only affects gift-giving, it doesn't affect non-gift logic like quest goals or special order objectives. If the NPC also has a <samp>reject_*</samp> dialogue for the item, the dialogue takes priority.
 +
|-
 +
| <samp>not_placeable</samp><br /><samp>placeable</samp>
 +
| Sets whether the item can be placed on the ground.
 +
|-
 +
| <samp>prevent_loss_on_death</samp>
 +
| Indicates the item can't be [[Adventurer's Guild#Item Recovery Service|lost when the player dies]].
 +
|-
 +
| <samp>sign_item</samp>
 +
| Marks the item as a [[Crafting#Signs|sign]], which lets player display items on it or place it on a [[Fish Pond|fish pond]] to show the fish count.
 +
|-
 +
| <samp>torch_item</samp>
 +
| Marks the item as a [[torch]], which lets the player turn it on/off to emit light.
 +
 +
See also <samp>campfire_item</samp>.
 +
|}
 +
</dd>
 +
 +
<dt>Context tags which affect [[Modding:Machines|machine processing]]:</dt>
 +
<dd>
 +
{| class="wikitable"
 +
|-
 +
! context tag
 +
! effect
 +
|-
 +
| <samp>crystalarium_banned</samp>
 +
| When applied to a gem or mineral item, prevents players from placing it in a [[crystalarium]].
 +
|-
 +
| <samp>keg_juice</samp><br /><samp>keg_wine</samp>
 +
| Allows processing the item in a [[keg]] to produce a juice or wine variant.
 +
|-
 +
| <samp>preserves_jelly</samp><br /><samp>preserves_pickle</samp>
 +
| Allows processing the item in a [[Preserves Jar|preserves jar]] to produce a jelly or pickled variant.
 +
|-
 +
| <samp>seedmaker_banned</samp>
 +
| When applied to a seed item, prevents players from placing it in a [[Seed Maker|seed maker]].
 +
|-
 +
| <samp>tapper_item</samp>
 +
| Marks the item as a [[tapper]] or [[Heavy Tapper|heavy tapper]].
 +
|-
 +
| <samp>tapper_multiplier_{{t|multiplier}}</samp>
 +
| The multiplier applied to the tapper production speed. For example, <samp>2</samp> will make items take half their base time (''i.e.'' each item will finish in <sup>base time</sup>/<sub>speed multiplier</sub>). Defaults to 1 if omitted.
 +
|}
 +
</dd>
 +
 +
 +
<dt>Informational tags which have no effect on the game logic:</dt>
 +
<dd>
 +
{| class="wikitable"
 +
|-
 +
! context tag
 +
! effect
 +
|-
 +
| <samp>fish_legendary</samp><br /><samp>fish_legendary_family</samp>
 +
| Marks the fish as a [[Fish#Legendary Fish|legendary fish]] or [[Quests#Extended Family|legendary fish family]]. These are purely informational; the legendary fish behavior is determined by data fields like <samp>CatchLimit</samp> or <samp>IsBossFish</samp> in [[Modding:Location_data|<samp>Data/Locations</samp>]].
 +
|-
 +
| <samp>geode</samp>
 +
| ''(Added automatically)'' Marks the item as a [[Minerals#Geodes|geode]] item, which can be broken open at [[Blacksmith|Clint's blacksmith shop]] or using a [[Geode Crusher|geode crusher]]. This is added automatically if the geode fields are present in [[Modding:Items#Objects|<samp>Data/Objects</samp>]].
 +
|-
 +
| <samp>id_{{t|item id}}</samp>
 +
| ''(Added automatically)'' The [[Modding:Common_data_field_types#Item_ID|qualified item ID]], like <samp>id_(o)128</samp>. This can be used to match or exclude an item by ID using context tags. Any spaces in the ID are replaced with underscores, and single quotes are removed.
 +
|-
 +
| <samp>is_machine</samp>
 +
| ''(Added automatically)'' Indicates the item has [[Modding:Machines|machine logic]]. This is added automatically based on <samp>Data/Machines</samp>.
 +
|-
 +
| <samp>machine_input</samp>
 +
| ''(Added automatically)'' Whether the item is a machine which accepts items from the player. This is added automatically based on the machine's fields in <samp>Data/Machines</samp>:
 +
* if <samp>HasInput</samp> is true;
 +
* ''or'' if any output rules have an <samp>ItemPlacedInMachine</samp> trigger.
 +
|-
 +
| <samp>machine_output</samp>
 +
| ''(Added automatically)'' Whether the item is a machine which produces items for the player to collect. This is added automatically based on the machine's fields in <samp>Data/Machines</samp>:
 +
* if <samp>HasOutput</samp> is true;
 +
* ''or'' if it has any output rules.
 +
|}
 +
</dd>
 +
</dl>
 +
 +
Some game data also references context tags in a generic way. For example, you can add custom tags to an item, then reference them in the fish pond data. Specifically:
 +
 +
{| class="wikitable"
 +
|-
 +
! game data
 +
! effects
 +
|-
 +
| [[Modding:Fish Pond data|fish ponds]]
 +
| In <samp>Data/FishPondData</samp>, used to match fish that can be placed in the pond (see [[Modding:Fish Pond data#RequiredTags|<samp>RequiredTags</samp> in the fish pond data]]).
 +
|-
 +
| [[Modding:Special orders|special orders]]
 +
| In <samp>Data/SpecialOrders</samp>, used to match items that meet the quest objectives (see [[Modding:Special orders#Context tags|<samp>AcceptedContextTags</samp> in the special order data]]).
 +
|-
 +
| tailoring
 +
| In <samp>Data/TailoringRecipes</samp>, used to match items that are needed for a recipe.
 +
|-
 +
| [[Modding:Gift taste data|gift tastes]]
 +
| In <samp>Data/NPCGiftTastes</samp>, used to set character likes and dislike for every item using the context tag.
 +
|}
 +
 +
The <samp>debug listtags</samp> [[Modding:Console commands|console command]] lists all the tags of the item being held.
 +
 +
{{collapse|raw tag dump|content=Here's a list of context tags extracted from <samp>Data/ObjectContextTags</samp> that aren't listed above yet: <samp>alcohol_item</samp>, <samp>algae_item</samp>, <samp>ancient_item</samp>, <samp>beach_item</samp>, <samp>bomb_item</samp>, <samp>bone_item</samp>, <samp>book_item</samp>, <samp>ceramic_item</samp>, <samp>chicken_item</samp>, <samp>color_black</samp>, <samp>color_dark_gray</samp>, <samp>color_gray</samp>, <samp>color_iron</samp>, <samp>color_prismatic</samp>, <samp>color_white</samp>, <samp>cooking_item</samp>, <samp>cow_milk_item</samp>, <samp>cowboy_item</samp>, <samp>crop_year_2</samp>, <samp>dinosaur_item</samp>, <samp>doll_item</samp>, <samp>drink_item</samp>, <samp>dwarvish_item</samp>, <samp>dye_medium</samp>, <samp>dye_strong</samp>, <samp>egg_item</samp>, <samp>elvish_item</samp>, <samp>fertilizer_item</samp>, <samp>fish_bug_lair</samp>, <samp>fish_carnivorous</samp>, <samp>fish_crab_pot</samp>, <samp>fish_desert</samp>, <samp>fish_freshwater</samp>, <samp>fish_lake</samp>, <samp>fish_legendary</samp>, <samp>fish_mines</samp>, <samp>fish_night_market</samp>, <samp>fish_nonfish</samp>, <samp>fish_ocean</samp>, <samp>fish_pond</samp>, <samp>fish_river</samp>, <samp>fish_secret_pond</samp>, <samp>fish_semi_rare</samp>, <samp>fish_sewers</samp>, <samp>fish_swamp</samp>, <samp>fish_talk_demanding</samp>, <samp>fish_talk_rude</samp>, <samp>fish_talk_stiff</samp>, <samp>fish_upright</samp>, <samp>flower_item</samp>, <samp>food_bakery</samp>, <samp>food_breakfast</samp>, <samp>food_cake</samp>, <samp>food_party</samp>, <samp>food_pasta</samp>, <samp>food_salad</samp>, <samp>food_sauce</samp>, <samp>food_seafood</samp>, <samp>food_soup</samp>, <samp>food_spicy</samp>, <samp>food_sushi</samp>, <samp>food_sweet</samp>, <samp>forage_item</samp>, <samp>forage_item_beach</samp>, <samp>forage_item_cave</samp>, <samp>forage_item_desert</samp>, <samp>forage_item_mines</samp>, <samp>forage_item_secret</samp>, <samp>fossil_item</samp>, <samp>fruit_item</samp>, <samp>fruit_tree_item</samp>, <samp>furnace_item</samp>, <samp>ginger_item</samp>, <samp>goat_milk_item</samp>, <samp>golden_relic_item</samp>, <samp>honey_item</samp>, <samp>hunting_item</samp>, <samp>instrument_item</samp>, <samp>jelly_item</samp>, <samp>juice_item</samp>, <samp>large_egg_item</samp>, <samp>large_milk_item</samp>, <samp>light_source</samp>, <samp>machine_item</samp>, <samp>marine_item</samp>, <samp>mayo_item</samp>, <samp>medicine_item</samp>, <samp>milk_item</samp>, <samp>noble_item</samp>, <samp>ore_item</samp>, <samp>pickle_item</samp>, <samp>potion_item</samp>, <samp>prehistoric_item</samp>, <samp>quality_fertilizer_item</samp>, <samp>scroll_item</samp>, <samp>season_all</samp>, <samp>season_fall</samp>, <samp>season_spring</samp>, <samp>season_summer</samp>, <samp>season_winter</samp>, <samp>slime_egg_item</samp>, <samp>slime_item</samp>, <samp>statue_item</samp>, <samp>strange_doll_1</samp>, <samp>strange_doll_2</samp>, <samp>syrup_item</samp>, <samp>totem_item</samp>, <samp>toy_item</samp>, <samp>trash_item</samp>, <samp>tree_seed_item</samp>, <samp>wood_item</samp>.}}
 +
 +
====ItemContextTagManager class====
 +
For C# mods, the <samp>ItemContextTagManager</samp> class simplifies working with item context tags and reduces repeated code.
 +
 +
This provides a few utility methods:
 +
{| class="wikitable"
 +
|-
 +
! method
 +
! effect
 +
|-
 +
| <code>GetBaseContextTags(id)</code>
 +
| Get the base context tags for an item based on its raw data in <samp>Data/Objects</samp> or <samp>Data/BigCraftables</samp>. This doesn't include dynamic tags added that are based on instance info (like quality), which you can get using <code>item.GetContextTags()</code>.
 +
|-
 +
| <code>DoesTagQueryMatch(query, tags)</code>
 +
| Get whether a context tag query matches the given tags. For example, <code>ItemContextTagManager.DoesTagQueryMatch("bone_item, !fossil_item", item.GetContextTags())</code> returns true if the item is a bone item but not a fossil (like the [[Bone Flute]]).
 +
|-
 +
| <code>DoAllTagsMatch(requiredTags, actualTags)</code><br /><code>DoAnyTagsMatch(requiredTags, actualTags)</code>
 +
| Get whether every (<samp>DoAllTagsMatch</samp>) or at least one (<samp>DoAnyTagsMatch</samp) required tag matches the actual item tags. This supports negated required tags like <samp>"!fossil_item"</samp> too.
 +
|-
 +
| <code>DoesTagMatch(requiredTag, actualTags)</code>
 +
| Get whether a single tag matches the actual item tags. This supports negated required tags like <samp>"!fossil_item"</samp> too.
 +
|-
 +
| <code>SanitizeContextTag(tag)</code>
 +
| ''(Specialized)'' Replace characters that may appear in item names so they're valid in context tags. For example, <code>SanitizeContextTag("Sam's Boombox")</code> returns <samp>sams_boombox</samp>.
 +
|}
 +
 +
==Objects==
 +
Objects are the default type for items in inventories or placed in the world.
 +
 +
They have their data in <samp>Data/Objects</samp> (<samp>Data/ObjectInformation</samp> prior to 1.6), their icon sprites in <samp>Maps/springobjects</samp>, and their code in <samp>StardewValley.Object</samp>. See [[Modding:Items/Object sprites|a table of sprites and their corresponding indexes]].
 +
 +
===Data format===
 +
The object data in <samp>Data/Objects</samp> consists of a string → model lookup, where...
 +
* The key is the unqualified [[Modding:Common_data_field_types#Item_ID|item ID]].
 +
* The value is a model with the fields listed below.
 +
 +
====Basic info====
 +
{| class="wikitable"
 +
|-
 +
! field
 +
! purpose
 +
|-
 +
| <samp>Name</samp>
 +
| The internal item name.
 +
|-
 +
| <samp>DisplayName</samp><br /><samp>Description</samp>
 +
| A [[Modding:Tokenizable strings|tokenizable string]] for the item's in-game display name and description.
 +
|-
 +
| <samp>Type</samp>
 +
| The item's general type, like Arch (artifact) or Minerals. The vanilla types are: Litter, Basic, Minerals, Quest, asdf, Crafting, Arch, fish, Cooking, Seeds, Ring, interactive
 +
|-
 +
| <samp>Category</samp>
 +
| The [[Modding:Items#Categories|item category]].
 +
|-
 +
| <samp>Price</samp>
 +
| ''(Optional)'' The price when sold by the player. This is not the price when bought from a shop. Default 0.
 +
|}
 +
 +
====Appearance====
 +
{| class="wikitable"
 +
|-
 +
! field
 +
! purpose
 +
|-
 +
| <samp>Texture</samp>
 +
| The asset name for the texture containing the item's sprite. Defaults to <samp>Maps/springobjects</samp>.
 +
|-
 +
| <samp>SpriteIndex</samp>
 +
| The sprite's index within the <samp>Texture</samp>, where 0 is the top-left sprite.
 +
|}
 +
 +
====Edibility====
 +
{| class="wikitable"
 +
|-
 +
! field
 +
! purpose
 +
|-
 +
| <samp>Edibility</samp>
 +
| ''(Optional)'' A numeric value that determines how much energy (edibility × 2.5) and health (edibility × 1.125) is restored when this item is eaten. An item with an edibility of -300 can't be eaten, values from -299 to -1 reduce health and energy, and zero can be eaten but doesn't change health/energy. Default -300.
 +
|-
 +
| <samp>IsDrink</samp>
 +
| ''(Optional)'' Whether to drink the item instead of eating it. Default false.
 +
|-
 +
| <samp>Buffs</samp>
 +
| ''(Optional)'' The buffs to apply to the player when this item is eaten, if any. Default none.
 +
 +
This consists of a list of models with these fields:
 +
{| class="wikitable"
 +
|-
 +
! field
 +
! purpose
 +
|-
 +
| <samp>Id</samp>
 +
| The [[Modding:Common data field types#Unique string ID|unique string ID]] for this entry within the list.
 +
|-
 +
| <samp>Duration</samp>
 +
| ''(Optional if <samp>BuffId</samp> is set)'' The buff duration measured in in-game minutes. This can be set to <samp>-2</samp> for a buff that should last for the rest of the day.
 +
|-
 +
| <samp>BuffId</samp>
 +
| ''(Optional)'' The unique ID of a buff from <samp>Data/Buffs</samp> to apply, or <samp>null</samp> to ignore <samp>Data/Buffs</samp> and set the ID to <samp>food</samp> or <samp>drink</samp> depending on the item's <samp>IsDrink</samp> field.
 +
 +
If a buff from <samp>Data/Buffs</samp> is applied and you also specify other fields, here's how the buff data is combined:
 +
{| class="wikitable"
 +
|-
 +
! field
 +
! result
 +
|-
 +
| <samp>Duration</samp><br /><samp>IconTexture</samp><br /><samp>SpriteIndex</samp><br /><samp>GlowColor</samp>
 +
| If specified, the value in <samp>Data/Objects</samp> is used instead of the one in <samp>Data/Buffs</samp>. If omitted, defaults to the value from <samp>Data/Buffs</samp>.
 +
|-
 +
| <samp>CustomAttributes</samp>
 +
| The values from both entries are combined (e.g. +1 speed in <samp>Data/Objects</samp> and +1 speed in <samp>Data/Buffs</samp> results in +2 speed).
 +
|-
 +
| <samp>IsDebuff</samp>
 +
| The value in <samp>Data/Objects</samp> is used.
 +
|}
 +
|-
 +
| <samp>IsDebuff</samp>
 +
| ''(Optional)'' Whether this buff counts as a debuff, so its duration should be halved when wearing a Sturdy Ring. Default false.
 +
|-
 +
| <samp>IconTexture</samp>
 +
| ''(Optional)'' The asset name for the icon texture to load. This must contain one or more 16x16 icons in a grid of any size. If omitted, the game will draw a default icon based on the <samp>BuffId</samp> and <samp>CustomAttributes</samp> fields.
 +
|-
 +
| <samp>SpriteIndex</samp>
 +
| ''(Optional)'' The buff's icon index within the <samp>IconTexture</samp>, where 0 is the top-left icon. Default 0.
 +
|-
 +
| <samp>GlowColor</samp>
 +
| ''(Optional)'' The glow color to apply to the player. See [[Modding:Common_data_field_types#Color|color format]]. Default none.
 +
|-
 +
| <samp>CustomAttributes</samp>
 +
| The custom buff attributes to apply, if any.
 +
 +
This consists of a model with any combination of these fields:
 +
{| class="wikitable"
 +
|-
 +
! field
 +
! purpose
 +
|-
 +
| <samp>FarmingLevel</samp><br /><samp>FishingLevel</samp><br /><samp>ForagingLevel</samp><br /><samp>LuckLevel</samp><br /><samp>MiningLevel</samp>
 +
| ''(Optional)'' An amount applied to the matching [[Skills|skill level]] while the buff is active. This can be negative for a debuff. Default 0.
 +
|-
 +
| <samp>Attack</samp><br /><samp>Defense</samp><br /><samp>MagneticRadius</samp><br /><samp>MaxStamina</samp><br /><samp>Speed</samp>
 +
| ''(Optional)'' An amount applied to the player's [[attack]], [[defense]], [[Magnetism|magnetic radius]], maximum [[Energy|stamina]], or [[speed]] while the buff is active. This can be negative for a debuff. Default 0.
 +
|}
 +
|-
 +
| <samp>CustomFields</samp>
 +
| ''(Optional)'' The [[Modding:Common_data_field_types#Custom_fields|custom fields]] for this entry.
 +
|}
 +
|}
 +
 +
====Geodes & artifact spots====
 +
{| class="wikitable"
 +
|-
 +
! field
 +
! purpose
 +
|-
 +
| <samp>GeodeDrops</samp><br /><samp><samp>GeodeDropsDefaultItems</samp>
 +
| ''(Optional)'' The items that can be dropped when breaking open this item as a [[Minerals#Geodes|geode]]. Specifying either or both fields automatically enables geode behavior for this item.
 +
 +
You can specify one or both fields:
 +
<ul>
 +
<li><samp>GeodeDrops</samp> can be set to the specific items to drop. Default none. This consists of a list of models with these fields:
 +
{| class="wikitable"
 +
|-
 +
! field
 +
! purpose
 +
|-
 +
|-
 +
| ''common fields''
 +
| See [[Modding:Item queries#Item spawn fields|item spawn fields]] for the generic item fields supported by geode drops.
 +
 +
If set to an [[Modding:Item queries|item query]] which returns multiple items, one of them will be selected at random.
 +
|-
 +
| <samp>Chance</samp>
 +
| ''(Optional)'' The probability that the item will be dropped if the other fields match, as a decimal value between 0 (never) and 1 (always). Default 1.
 +
|-
 +
| <samp>SetFlagOnPickup</samp>
 +
| ''(Optional)'' The mail flag to set for the current player when this drop is picked up.
 +
|-
 +
| <samp>Precedence</samp>
 +
| ''(Optional)'' The order in which this entry should be checked, where lower values are checked first. This can be a negative value. Geode drops with the same precedence are checked in the order listed. Default 0.
 +
 +
For consistency, vanilla drops mostly use these values:
 +
* <samp>-1000</samp>: special overrides like the [[Golden Helmet]];
 +
* <samp>0</samp>: normal items.
 +
|}</li>
 +
<li><samp>GeodeDropsDefaultItems</samp> chooses a predefined list of possible geode drops like [[clay]], [[coal]], [[Copper Ore|copper]], [[Iridium Ore|iridium]], etc. Default false.</li>
 +
</ul>
 +
 +
If both fields are specified, each geode will choose between them with an equal 50% chance. If <samp>GeodeDrops</samp> is specified but no entries match, the geode will use the <samp>GeodeDropsDefaultItems</samp> regardless of whether it's true.
 +
|-
 +
| <samp>ArtifactSpotChances</samp>
 +
| ''(Optional)'' If this is an artifact (i.e. the <samp>Type</samp> field is <samp>Arch</samp>), the chance that it can be found by digging [[Artifact Spot|artifact spots]] in each location.
 +
 +
This consists of a string → model lookup, where:
 +
* the key is the internal location name;
 +
* the value is the probability the item will spawn if checked, as a decimal value between 0 (never) and 1 (always).
 +
|}
 +
 +
====Context tags & exclusions====
 +
{| class="wikitable"
 +
|-
 +
! field
 +
! purpose
 +
|-
 +
| <samp>ContextTags</samp>
 +
| ''(Optional)'' The custom [[Modding:Items#Context tags|context tags]] to add for this item (in addition to the tags added automatically based on the other object data). This is formatted as a list; for example:
 +
<syntaxhighlight lang="json">
 +
"ContextTags": [ "color_yellow", "fish_ocean", "fish_upright", "season_summer" ]
 +
</syntaxhighlight>
 +
|-
 +
| <samp>ExcludeFromRandomSale</samp>
 +
| ''(Optional)'' Whether to exclude this item from shops when selecting random items to sell. Default false.
 +
|-
 +
| <samp>ExcludeFromFishingCollection</samp><br /><samp>ExcludeFromShippingCollection</samp>
 +
| ''(Optional)'' Whether to exclude this item from the fishing/shipping collection and their respective effect on the [[perfection|perfection score]]. Default false, in which case the normal requirements apply (e.g. artifacts are always excluded from the shipping collection).
 +
|}
 +
 +
====Advanced====
 +
{| class="wikitable"
 +
|-
 +
! field
 +
! purpose
 +
|-
 +
| <samp>CustomFields</samp>
 +
| ''(Optional)'' The [[Modding:Common_data_field_types#Custom_fields|custom fields]] for this entry.
 +
|}
 +
 +
===Notes===
 +
* Prior to 1.6, items that have a number in index 6 (the "Crafting" field) showed buggy information in-game (''e.g.,'' Bean Hotpot prior to version 1.4). Items that had a number in the "Attack" field displayed the Attack icon and a number, but no description. It's unclear how these buffs work (if at all).
 +
* '''Adding custom items with the <samp>Arch</samp> type is inadvisable as it often leads to Artifact Spots becoming broken and not giving any items.'''
 +
* Named [[buffs]] (like [[Oil of Garlic]], [[Life Elixir]], or [[Buffs#Tipsy|Tipsy]]) are implemented in code and can't be set in the food buff fields.
 +
* The spritesheet and data have items that can't normally be found in the player inventory (like twigs and lumber), and some sprites have no corresponding item data. There are also multiple entries for ''weeds'' and ''stone'' corresponding to different sprites, but the player can only normally obtain one ''stone'' item (index 390) and no ''weeds'' items.
 +
 +
==Big craftables==
 +
Big craftables are objects which can be placed in the world and are two tiles tall (instead of one like objects).
 +
 +
They have their data in <samp>Data/BigCraftables</samp> (<samp>Data/BigCraftablesInformation</samp> prior to 1.6), their in-game sprites in <samp>TileSheets/Craftables</samp>, and their code in <samp>StardewValley.Object</samp> (with the <code>bigCraftable.Value = true</code> flag).
 +
 +
===Data format===
 +
 +
This consists of a string → model lookup, where...
 +
* The key is the unqualified [[Modding:Common_data_field_types#Item_ID|item ID]].
 +
* The value is a model with the fields listed below.
 +
 +
====Basic info====
 +
{| class="wikitable"
 +
|-
 +
! field
 +
! purpose
 +
|-
 +
| <samp>Name</samp>
 +
| The internal item name.
 +
|-
 +
| <samp>DisplayName</samp><br /><samp>Description</samp>
 +
| A [[Modding:Tokenizable strings|tokenizable string]] for the item's in-game display name and description.
 +
|-
 +
| <samp>Price</samp>
 +
| ''(Optional)'' The price when sold by the player. This is not the price when bought from a shop. Default 0.
 +
|}
 +
 +
====Behavior====
 +
{| class="wikitable"
 +
|-
 +
! field
 +
! purpose
 +
|-
 +
| <samp>Fragility</samp>
 +
| ''(Optional)'' How the item can be picked up. The possible values are 0 (pick up with any tool), 1 (destroyed if hit with an axe/hoe/pickaxe, or picked up with any other tool), or 2 (can't be removed once placed). Default 0.
 +
|-
 +
| <samp>CanBePlacedIndoors</samp><br /><samp>CanBePlacedOutdoors</samp>
 +
| ''(Optional)'' Whether the item can be placed indoors or outdoors. Default true.
 +
|-
 +
| <samp>IsLamp</samp>
 +
| ''(Optional)'' Whether this is a lamp and should produce light when dark. Default false.
 +
|}
 +
 +
====Appearance====
 +
{| class="wikitable"
 +
|-
 +
! field
 +
! purpose
 +
|-
 +
| <samp>Texture</samp>
 +
| ''(Optional)'' The asset name for the texture containing the item's sprite. Defaults to <samp>TileSheets/Craftables</samp>.
 +
|-
 +
| <samp>SpriteIndex</samp>
 +
| ''(Optional)'' The sprite's index within the <samp>Texture</samp>, where 0 is the top-left sprite.
 +
|}
 +
 +
====Context tags====
 +
{| class="wikitable"
 +
|-
 +
! field
 +
! purpose
 +
|-
 +
| <samp>ContextTags</samp>
 +
| ''(Optional)'' The custom [[Modding:Items#Context tags|context tags]] to add for this item (in addition to the tags added automatically based on the other object data). This is formatted as a list; for example:
 +
<syntaxhighlight lang="json">
 +
"ContextTags": [ "light_source", "torch_item" ]
 +
</syntaxhighlight>
 +
|}
 +
 +
====Advanced====
 +
{| class="wikitable"
 +
|-
 +
! field
 +
! purpose
 +
|-
 +
| <samp>CustomFields</samp>
 +
| ''(Optional)'' The [[Modding:Common_data_field_types#Custom_fields|custom fields]] for this entry.
 +
|}
 +
 +
===Notes===
 +
* Many of the items in the data asset aren't implemented in-game. They may be completely absent from the game, or they may be unused as craftables and instead appear in [[#Objects|object data]] or [[#Furniture|furniture data]].
 +
 +
==Boots==
 +
Boots are items that can be equipped in the player's [[footwear]] slot.
 +
 +
They have their data in <samp>Data/Boots</samp>, their in-game sprites in <samp>Maps/springobjects</samp> (item sprite) and <samp>Characters/Farmer/shoeColors</samp> (shoe color), and their code in <samp>StardewValley.Objects.Boots</samp>.
 +
 +
===Data format===
 +
The boots data in <samp>Data/Boots</samp> consists of an integer→string dictionary with entries like this:
 +
 +
<syntaxhighlight lang="json">
 +
  "511": "Dark Boots/Made from thick black leather./250/4/2/7"
 +
</syntaxhighlight>
 +
 +
For each entry in the data asset, the key is the item's <samp>ParentSheetIndex</samp> and the value is a slash-delimited string with these fields:
 +
 +
{| class="wikitable"
 +
|-
 +
! index
 +
! field
 +
! effect
 +
|-
 +
| 0
 +
| name
 +
| The internal item name (and display name in English).
 +
|-
 +
| 1
 +
| description
 +
| The translated item description shown in-game.
 +
|-
 +
| 2
 +
| price
 +
| '''Unused.''' The actual price is calculated as <samp>(''added defence'' × 100) + (''added immunity'' × 100)</samp>.
 +
|-
 +
| 3
 +
| added defense
 +
| A [[defense]] bonus applied to the player while equipped.
 +
|-
 +
| 4
 +
| added immunity
 +
| An [[immunity]] bonus applied to the player while equipped.
 +
|-
 +
| 5
 +
| color index
 +
| The index of the boot color in the <samp>Characters/Farmer/shoeColors</samp> spritesheet.
 +
|-
 +
| 6
 +
| display name
 +
| The translated item name shown in-game (for non-English assets only).
 +
|}
 +
 +
==Pants==
 +
 +
===Data format===
 +
 +
You can create/edit [[Tailoring#Pants|pants]] by editing the <samp>Data/Pants</samp> asset. This consists of a string → model lookup, where...
 +
* The key is the unqualified [[Modding:Common_data_field_types#Item_ID|item ID]].
 +
* The value is a model with the fields listed below.
 +
 +
====Basic pants data====
 +
{| class="wikitable"
 +
|-
 +
! field
 +
! purpose
 +
|-
 +
| <samp>Name</samp>
 +
| ''(Optional)'' The internal name for the item. Default <samp>Pants</samp>.
 +
|-
 +
| <samp>DisplayName</samp><br /><samp>Description</samp>
 +
| ''(Optional)'' A [[Modding:Tokenizable strings|tokenizable string]] for the item's in-game display name and description. Defaults to the generic pants text (''Pants'' and ''A wearable pair of pants'').
 +
|-
 +
| <samp>Price</samp>
 +
| ''(Optional)'' The default price when the item is sold to the player in a shop. Default 50.
 +
|}
 +
 +
====Appearance====
 +
{| class="wikitable"
 +
|-
 +
! field
 +
! purpose
 +
|-
 +
| <samp>Texture</samp>
 +
| The asset name for the texture containing the pants' sprite. Defaults to <samp>Characters/Farmer/pants</samp>.
 +
|-
 +
| <samp>SpriteIndex</samp>
 +
| The pants' sprite index within the <samp>Texture</samp>, where 0 is the top-left set.
 +
|-
 +
| <samp>DefaultColor</samp>
 +
| ''(Optional)'' The dye color to apply to the sprite when the player hasn't [[dyeing|dyed]] it yet, if any. See [[Modding:Common_data_field_types#Color|color format]]. Default <samp>255 235 203</samp> (which matches the color of the cloth item).
 +
|-
 +
| <samp>CanBeDyed</samp>
 +
| ''(Optional)'' Whether the player can [[dyeing|dye]] these pants. Default false.
 +
|-
 +
| <samp>IsPrismatic</samp>
 +
| ''(Optional)'' Whether the pants continuously shift colors. This overrides <samp>DefaultColor</samp> and <samp>CanBeDyed</samp> if set. Default false.
 +
|}
 +
 +
====Other====
 +
{| class="wikitable"
 +
|-
 +
! field
 +
! purpose
 +
|-
 +
| <samp>CanChooseDuringCharacterCustomization</samp>
 +
| ''(Optional)'' Whether these pants can be selected on the character customization screen (e.g. when creating a character). Default false.
 +
|-
 +
| <samp>CustomFields</samp>
 +
| The [[Modding:Common_data_field_types#Custom_fields|custom fields]] for this entry.
 +
|}
 +
 +
==Shirts==
 +
 +
===Data format===
 +
 +
You can create/edit [[Tailoring#Shirts|shirts]] by editing the new <samp>Data/Shirts</samp> asset. This consists of a string → model lookup, where...
 +
* The key is the unqualified [[Modding:Common_data_field_types#Item_ID|item ID]].
 +
* The value is a model with the fields listed below.
 +
 +
====Basic shirt data====
 +
{| class="wikitable"
 +
|-
 +
! field
 +
! purpose
 +
|-
 +
| <samp>Name</samp>
 +
| ''(Optional)'' The internal name for the item. Default <samp>Shirt</samp>.
 +
|-
 +
| <samp>DisplayName</samp><br /><samp>Description</samp>
 +
| ''(Optional)'' A [[Modding:Tokenizable strings|tokenizable string]] for the item's in-game display name and description. Defaults to the generic shirt text (''Shirt'' and ''A wearable shirt'').
 +
|-
 +
| <samp>Price</samp>
 +
| ''(Optional)'' The default price when the item is sold to the player in a shop. Default 50.
 +
|}
 +
 +
====Appearance====
 +
{| class="wikitable"
 +
|-
 +
! field
 +
! purpose
 +
|-
 +
| <samp>Texture</samp>
 +
| The asset name for the texture containing the shirt's sprite. Defaults to <samp>Characters/Farmer/shirts</samp>.
 +
|-
 +
| <samp>SpriteIndex</samp>
 +
| The shirt's sprite index within the <samp>Texture</samp>, where 0 is the top-left set.
 +
|-
 +
| <samp>DefaultColor</samp>
 +
| ''(Optional)'' The dye color to apply to the sprite when the player hasn't [[dyeing|dyed]] it yet, if any. See [[Modding:Common_data_field_types#Color|color format]]. Default none.
 +
|-
 +
| <samp>CanBeDyed</samp>
 +
| ''(Optional)'' Whether the player can [[dyeing|dye]] this shirt. Default false.
 +
|-
 +
| <samp>IsPrismatic</samp>
 +
| ''(Optional)'' Whether the shirt continuously shifts colors. This overrides <samp>DefaultColor</samp> and <samp>CanBeDyed</samp> if set. Default false.
 +
|-
 +
| <samp>HasSleeves</samp>
 +
| ''(Optional)'' Whether to draw shirt sleeves. Default true.
 +
|}
 +
 +
====Other====
 +
{| class="wikitable"
 +
|-
 +
! field
 +
! purpose
 +
|-
 +
| <samp>CanChooseDuringCharacterCustomization</samp>
 +
| ''(Optional)'' Whether this shirt can be selected on the character customization screen (e.g. when creating a character). Default false.
 +
|-
 +
| <samp>CustomFields</samp>
 +
| The [[Modding:Common_data_field_types#Custom_fields|custom fields]] for this entry.
 +
|}
 +
 +
==Furniture==
 +
Furniture are decorative items which can be placed in the world, including chairs which the player can sit on.
 +
 +
They have their data in <samp>Data/Furniture</samp>, their in-game sprites in <samp>TileSheets/furniture</samp>, translations in <samp>Strings/Furniture</samp>, and their code in <samp>StardewValley.Objects.Furniture</samp>.
 +
 +
===Data format===
 +
The furniture data in <samp>Data/Furniture</samp> consists of an integer→string dictionary with entries like this:
 +
 +
<syntaxhighlight lang="json">
 +
  "18": "Country Chair/chair/-1/-1/4/750"
 +
</syntaxhighlight>
 +
 +
For each entry in the data asset, the key is the item's <samp>ParentSheetIndex</samp> and the value is a slash-delimited string with these fields:
 +
 +
{| class="wikitable"
 +
|-
 +
! index
 +
! field
 +
! effect
 +
|-
 +
| 0
 +
| name
 +
| The internal item name (and display name in English).
 +
|-
 +
| 1
 +
| type
 +
| The furniture type. Possible values:
 +
{| class="wikitable sortable"
 +
|-
 +
! type
 +
! meaning
 +
|-
 +
| 0
 +
| chair
 +
|-
 +
| 1
 +
| bench
 +
|-
 +
| 2
 +
| couch
 +
|-
 +
| 3
 +
| armchair
 +
|-
 +
| 4
 +
| dresser
 +
|-
 +
| 5
 +
| long table
 +
|-
 +
| 6
 +
| painting
 +
|-
 +
| 7
 +
| lamp
 +
|-
 +
| 8
 +
| decor
 +
|-
 +
| 9
 +
| other
 +
|-
 +
| 10
 +
| bookcase
 +
|-
 +
| 11
 +
| table
 +
|-
 +
| 12
 +
| rug
 +
|-
 +
| 13
 +
| window
 +
|-
 +
| 14
 +
| fireplace
 +
|-
 +
| 15
 +
| bed
 +
|-
 +
| 16
 +
| torch
 +
|-
 +
| 17
 +
| sconce
 +
|}
 +
|-
 +
| 2
 +
| tilesheet size
 +
| The furniture sprite size on the tilesheet, measured in tiles. This can be <samp>{{t|width}} {{t|height}}</samp> (e.g. <samp>1 2</samp>), or <samp>-1</samp> to use the default size for the type.
 +
|-
 +
| 3
 +
| bounding box size
 +
| The size of the hitbox when the furniture is placed in-game, measured in tiles. The bounding box will be anchored to the bottom-left corner and extend upwards and rightwards. This can be <samp>{{t|width}} {{t|height}}</samp> (e.g. <samp>1 2</samp>), or <samp>-1</samp> to use the default size for the type.
 +
|-
 +
| 4
 +
| rotations
 +
| The number of rotations possible (1, 2, or 4).
 +
|-
 +
| 5
 +
| price
 +
| The price when purchased from a shop.
 +
|-
 +
| 6
 +
| placement restriction
 +
| Where the furniture can be placed.
 +
{| class="wikitable sortable"
 +
|-
 +
! value
 +
! meaning
 +
|-
 +
| -1
 +
| default (uses furniture type)
 +
|-
 +
| 0
 +
| indoors-only
 +
|-
 +
| 1
 +
| outdoors-only
 +
|-
 +
| 2
 +
| indoors or outdoors
 +
|}
 +
|-
 +
| 7
 +
| display name
 +
| The translated furniture name, which allows [[Modding:Tokenizable strings|tokenizable strings]].
 +
|-
 +
| 8
 +
| sprite index
 +
| The sprite index within the spritesheet texture to draw.
 +
|-
 +
| 9
 +
| texture
 +
| ''(Optional)'' The asset name of the texture to draw. Defaults to <samp>TileSheets/furniture</samp>.
 +
|-
 +
| 10
 +
| off limits for random sale
 +
| ''(Optional)'' Whether to prevent this furniture from appearing in randomly generated shop stocks and the furniture catalogue. Default false.
 +
|-
 +
| 11
 +
| context tags
 +
| ''(Optional)'' A space-delimited list of [[Modding:Items#Context tags|context tags]] which apply to this furniture. Default none.
 +
|}
 +
 +
==Hats==
 +
Hats are items that can be equipped in the player's [[hats|hat]] slot.
 +
 +
They have their data in <samp>Data/Hats</samp>, their in-game sprites in <samp>Characters/Farmer/hats</samp>, and their code in <samp>StardewValley.Objects.Hat</samp>.
 +
 +
===Data format===
 +
The hat data in <samp>Data/Hats</samp> consists of an integer→string dictionary with entries like this:
 +
 +
<syntaxhighlight lang="json">
 +
  "5": "Official Cap/Looks like it belonged to a postman or policeman. Either way, it's still very soft and smells okay./false/true"
 +
</syntaxhighlight>
 +
 +
Hats from the base game use the hat's <samp>ParentSheetIndex</samp> as its item ID.
 +
For each entry in the data asset, the key is the hat's item ID, and the value is a slash-delimited string with these fields:
 +
 +
{| class="wikitable"
 +
|-
 +
! index
 +
! field
 +
! effect
 +
|-
 +
| 0
 +
| name
 +
| The internal item name.
 +
|-
 +
| 1
 +
| description
 +
| The translated item description shown in-game.
 +
|-
 +
| 2
 +
| show real hair
 +
| Whether to show the player's hairstyle as-is when the hat is worn (<samp>true</samp>), or change the hairstyle to fit the hat (<samp>false</samp>).
 +
|-
 +
| 3
 +
| skip hairstyle offset
 +
| Whether to ignore the current style when positioning the hat (one of <samp>true</samp> or <samp>false</samp>). For example, the [[Eye Patch|eye patch]] sets <samp>true</samp> since its position isn't affected by the hair, but the [[Butterfly Bow|butterfly bow]] sets <samp>false</samp> to adjust its position on top of your hair.
 +
|-
 +
| 4
 +
| tags
 +
| A space-separated list of "tags". These are separate from context tags, and used to contain miscellaneous information. Currently, the only tag used by the game is <samp>Prismatic</samp>, which marks a hat as prismatic and causes it to cycle through colors.
 +
|-
 +
| 5
 +
| display name
 +
| The translated item name shown in-game.
 +
|-
 +
| 6
 +
| sprite index
 +
| The index in the hat spritesheet used to display this hat.
 +
|-
 +
| 7
 +
| texture name
 +
| The name of the game texture to use for the hat. If empty, the game will use the default hat sheet <samp>Characters/Farmer/hats</samp>
 +
|}
 +
 +
Hats have a hard-coded category of -95 (<samp>HatDataDefinition.cs::GetData</samp>)
 +
 +
==Tools==
 +
[[Tools]] are items that can be swung or used by the player to perform some effect (e.g. dig dirt, chop trees, etc).
 +
 +
They have their data in <samp>Data/Tools</samp>, their in-game sprites in <samp>TileSheets/Tools</samp>, and their code in <samp>StardewValley.Tool</samp> and various subclasses like <samp>StardewValley.Tools.Axe</samp>.
 +
 +
===Data format===
 +
 +
You can create/edit [[tools]] by editing the<samp>Data/Tools</samp> asset. This consists of a string → model lookup, where...
 +
* The key is the unqualified [[Modding:Common_data_field_types#Item_ID|item ID]].
 +
* The value is a model with the fields listed below.
 +
 +
====Basic tool data====
 +
{| class="wikitable"
 +
|-
 +
! field
 +
! purpose
 +
|-
 +
| <samp>ClassName</samp>
 +
| The name of the C# class to construct within the <code>StardewValley.Tools</code> namespace. The class must be a subclass of <samp>StardewValley.Tool</samp>, and have a constructor with no arguments. For example, given a value of <samp>Axe</samp>, the game will create <code>StardewValley.Tools.Axe</code> instances.
 +
 +
The main values are:
 +
* main tools (<samp>Axe</samp>, <samp>FishingRod</samp>, <samp>Hoe</samp>, <samp>MeleeWeapon</samp>, <samp>MilkPail</samp>, <samp>Pan</samp>, <samp>Pickaxe</samp>, <samp>Shears</samp>, <samp>Wand</samp>, and <samp>WateringCan</samp>);
 +
* a special <samp>GenericTool</samp> type which applies the <samp>Data/Tools</samp> data and only has generic logic, so C# mods can patch in their own logic;
 +
* and two tools cut from the game which may not work correctly (<samp>Lantern</samp> and <samp>Raft</samp>).
 +
|-
 +
| <samp>Name</samp>
 +
| The internal name to set for the tool item.
 +
|-
 +
| <samp>DisplayName</samp><br /><samp>Description</samp>
 +
| A [[Modding:Tokenizable strings|tokenizable string]] for the tool's in-game display name and description.
 +
|-
 +
| <samp>AttachmentSlots</samp>
 +
| ''(Optional)'' The number of attachment slots to enable on the tool. Note that only <samp>FishingRod</samp> tools have the code to render and use attachment slots. Default <samp>-1</samp>, which keeps the default value set by the tool class.
 +
|-
 +
| <samp>SalePrice</samp>
 +
| ''(Optional)'' The default price when the item is sold to the player in a shop. Defaults to <samp>-1</samp>, in which case you should set the price manually in shops.
 +
|-
 +
| <samp>CustomFields</samp>
 +
| The [[Modding:Common_data_field_types#Custom_fields|custom fields]] for this entry.
 +
|}
 +
 +
====Appearance====
 +
Note that drawing the tool correctly in the world (ie, while the player is trying to use it) will likely require custom code.
 +
 +
{| class="wikitable"
 +
|-
 +
! field
 +
! purpose
 +
|-
 +
| <samp>Texture</samp>
 +
| The asset name for the texture containing the tool's sprite.
 +
|-
 +
| <samp>SpriteIndex</samp>
 +
| The tool's sprite index within the <samp>Texture</samp>, where 0 is the top row.
 +
|-
 +
| <samp>MenuSpriteIndex</samp>
 +
| ''(Optional)'' The sprite index within the <samp>Texture</samp> for the item icon. Defaults to <samp>SpriteIndex</samp>.
 +
|}
 +
 +
====Upgrades====
 +
{| class="wikitable"
 +
|-
 +
! field
 +
! purpose
 +
|-
 +
| <samp>UpgradeLevel</samp>
 +
| ''(Optional)'' The tool upgrade level. Default <samp>-1</samp>, which keeps the default value set by the tool class.
 +
|-
 +
| <samp>ApplyUpgradeLevelToDisplayName</samp>
 +
| ''(Optional)'' Whether to adjust the <samp>DisplayName</samp> for the usual upgrade levels. For example, the display name for a level one Axe changes to 'Copper Axe'. Default false.
 +
 +
The display name format in English is:
 +
{| class="wikitable"
 +
|-
 +
! upgrade level
 +
! display name format
 +
|-
 +
| 1
 +
| Copper {{t|display name}}
 +
|-
 +
| 2
 +
| Steel {{t|display name}}
 +
|-
 +
| 3
 +
| Gold {{t|display name}}
 +
|-
 +
| 4
 +
| Iridium {{t|display name}}
 +
|}
 +
|-
 +
| <samp>ConventionalUpgradeFrom</samp>
 +
| ''(Optional)'' If set, prepends an upgrade for the given tool ID to the <samp>UpgradeFrom</samp> field. This applies these rules (based on the <samp>UpgradeLevel</samp> field, not the upgrade level of the specified tool ID):
 +
 +
{| class="wikitable"
 +
|-
 +
! upgrade level
 +
! price
 +
! items needed
 +
|-
 +
| 1
 +
| {{price|2000}}
 +
| {{name|Copper Bar|5}}
 +
|-
 +
| 2
 +
| {{price|5000}}
 +
| {{name|Iron Bar|5}}
 +
|-
 +
| 3
 +
| {{price|10000}}
 +
| {{name|Gold Bar|5}}
 +
|-
 +
| 4
 +
| {{price|25000}}
 +
| {{name|Iridium Bar|5}}
 +
|}
 +
 +
For example, Iridium Axe specifies this value:
 +
<syntaxhighlight lang="js">
 +
"ConventionalUpgradeFrom": "(T)GoldAxe"
 +
</syntaxhighlight>
 +
|-
 +
| <samp>UpgradeFrom</samp>
 +
| ''(Optional)'' The requirements to buy this tool from Clint's [[Blacksmith#Upgrade Tools|blacksmith tool upgrade shop]]. If you specify multiple entries, the first one which matches will be applied.
 +
 +
This consists of a list of models with these fields:
 +
{| class="wikitable"
 +
|-
 +
! field
 +
! purpose
 +
|-
 +
| <samp>Price</samp>
 +
| ''(Optional)'' The gold price to buy the upgrade. Defaults to 0.
 +
|-
 +
| <samp>RequireToolId</samp>
 +
| ''(Optional)'' If set, the [[Modding:Common_data_field_types#Item_ID|qualified or unqualified item ID]] for the tool that must be in the player's inventory for the upgrade to appear. The tool will be destroyed when the upgrade is purchased.
 +
|-
 +
| <samp>TradeItemId</samp>
 +
| ''(Optional)'' If set, the [[Modding:Common_data_field_types#Item_ID|qualified or unqualified item ID]] for an extra item that must be traded to upgrade the tool. (For example, many vanilla tools need metal bars.)
 +
|-
 +
| <samp>TradeItemAmount</samp>
 +
| ''(Optional)'' The number of <samp>TradeItemId</samp> required. Defaults to 1.
 +
|-
 +
| <samp>Condition</samp>
 +
| ''(Optional)'' A [[Modding:Game state queries|game state query]] which indicates whether this upgrade is available. Defaults to always true.
 +
|}
 +
 +
For example, these are equivalent to the Steel Axe's upgrade settings:
 +
<syntaxhighlight lang="js">
 +
"UpgradeFrom": [
 +
    {
 +
        "RequireToolId": "(T)CopperAxe",
 +
        "Price": 5000,
 +
        "TradeItemId": "(O)335", // Iron Bar
 +
        "TradeItemAmount": 5
 +
    }
 +
]
 +
</syntaxhighlight>
 +
 +
If you want the tool to always be available, you can just omit the conditions. For example:
 +
<syntaxhighlight lang="js">
 +
"UpgradeFrom": [
 +
    {
 +
        "Price": 5000
 +
    }
 +
]
 +
</syntaxhighlight>
 +
 +
Note that Clint needs a few days to smith the new tool. If you want to sell the tool directly, [[Modding:Shops|add it to a regular shop]] instead.
 +
|}
 +
 +
====Game logic====
 +
{| class="wikitable"
 +
|-
 +
! field
 +
! purpose
 +
|-
 +
| <samp>CanBeLostOnDeath</samp>
 +
| Whether the player can [[Adventurer's Guild#Item Recovery Service|lose this tool when they die]]. Default false.
 +
|}
 +
 +
====Extensibility====
 +
{| class="wikitable"
 +
|-
 +
! field
 +
! purpose
 +
|-
 +
| <samp>ModData</samp>
 +
| ''(Optional)'' The mod data values to set when the tool is created, accessible in C# code via the <samp>tool.modData</samp> dictionary. For example:
 +
<syntaxhighlight lang="js">
 +
"ModData": {
 +
    "PowerLevel": 9000
 +
}
 +
</syntaxhighlight>
 +
|-
 +
| <samp>SetProperties</samp>
 +
| ''(Optional)'' Set the value of arbitrary properties on the tool class. For example, this would disable the tool animation and require no stamina:
 +
<syntaxhighlight lang="js">
 +
"SetProperties": {
 +
    "InstantUse": true,
 +
    "IsEfficient": true
 +
}
 +
</syntaxhighlight>
 +
|}
 +
 +
==Weapons==
 +
[[Weapons]] are tools that can be used by the player to damage monsters.
 +
 +
They have their data in <samp>Data/Weapons</samp>, their in-game sprites in <samp>TileSheets/weapons</samp>, and their code in <samp>StardewValley.Tools.MeleeWeapon</samp> and <samp>StardewValley.Tools.Slingshot</samp>.
 +
 +
===Data format===
 +
The weapon data in <samp>Data/Weapons</samp> consists of a string → model lookup, where...
 +
* The key is the unqualified [[Modding:Common_data_field_types#Item_ID|item ID]] for the weapon.
 +
* The value is model with the fields listed below.
 +
 +
====Basic weapon info====
 +
{| class="wikitable"
 +
|-
 +
! field
 +
! effect
 +
|-
 +
| <samp>Name</samp>
 +
| The internal weapon name.
 +
|-
 +
| <samp>DisplayName</samp><br /><samp>Description</samp>
 +
| A [[Modding:Tokenizable strings|tokenizable string]] for the translated display name & description.
 +
|-
 +
| <samp>Type</samp>
 +
| The weapon type. One of <samp>0</samp> (stabbing sword), <samp>1</samp> (dagger), <samp>2</samp> (club or hammer), or <samp>3</samp> (slashing sword).
 +
|}
 +
 +
====Appearance====
 +
{| class="wikitable"
 +
|-
 +
! field
 +
! effect
 +
|-
 +
| <samp>Texture</samp>
 +
| The asset name for the spritesheet containing the weapon's sprite.
 +
|-
 +
| <samp>SpriteIndex</samp>
 +
| The index within the <samp>Texture</samp> for the weapon sprite, where 0 is the top-left sprite.
 +
|}
 +
 +
====Stats====
 +
{| class="wikitable"
 +
|-
 +
! field
 +
! effect
 +
|-
 +
| <samp>MinDamage</samp><br /><samp>MaxDamage</samp>
 +
| The minimum and maximum based damage caused when hitting a monster with this weapon.
 +
|-
 +
| <samp>Knockback</samp>
 +
| ''(Optional)'' How far the target is pushed when hit, as a multiplier relative to a base weapon like the [[Rusty Sword]] (e.g. <samp>1.5</samp> for 150% of Rusty Sword's weight). Default 1.
 +
|-
 +
| <samp>Speed</samp>
 +
| ''(Optional)'' How fast the player can swing the weapon. Each point of speed is worth 40ms of swing time relative to 0. This stacks with the [[speed|player's weapon speed]]. Default 0.
 +
|-
 +
| <samp>Precision</samp>
 +
| ''(Optional)'' Reduces the chance that a strike will miss. Default 0.
 +
|-
 +
| <samp>Defense</samp>
 +
| ''(Optional)'' Reduces damage received by the player. Default 0.
 +
|-
 +
| <samp>AreaOfEffect</samp>
 +
| ''(Optional)'' Slightly increases the area of effect. Default 0.
 +
|-
 +
| <samp>CritChance</samp>
 +
| ''(Optional)'' The chance of a critical hit, as a decimal value between 0 (never) and 1 (always). Default 0.02.
 +
|-
 +
| <samp>CritMultiplier</samp>
 +
| ''(Optional)'' A multiplier applied to the base damage for a critical hit. This can be a decimal value. Default 3.
 +
|}
 +
 +
====Game logic====
 +
{| class="wikitable"
 +
|-
 +
! field
 +
! effect
 +
|-
 +
| <samp>CanBeLostOnDeath</samp>
 +
| Whether the player can [[Adventurer's Guild#Item Recovery Service|lose this tool when they die]]. Default true.
 +
|-
 +
| <samp>MineBaseLevel</samp><br /><samp>MineMinLevel</samp>
 +
| ''(Optional)'' The base and minimum mine level, which affect [[#Mine container drops|mine container drops]]. Both default to -1, which disables automatic mine drops.
 +
|}
 +
 +
====Advanced====
 +
{| class="wikitable"
 +
|-
 +
! field
 +
! effect
 +
|-
 +
| <samp>Projectiles</samp>
 +
| ''(Optional)'' The projectiles fired when the weapon is used, which continue along their path until they hit a monster and cause damage. A separate projectile is fired for each entry in this list.
 +
 +
This consists of a list of models with these fields (one projectile will fire for each entry in the list):
 +
{| class="wikitable"
 +
|-
 +
! field
 +
! effect
 +
|-
 +
| <samp>Id</samp>
 +
| The [[Modding:Common data field types#Unique string ID|unique string ID]] for the projectile within the current weapon's data.
 +
|-
 +
| <samp>Damage</samp>
 +
| ''(Optional)'' The amount of damage caused when the projectile hits a monster. Default 10.
 +
|-
 +
| <samp>Explodes</samp>
 +
| ''(Optional)'' Whether the projectile explodes when it collides with something. Default false.
 +
|-
 +
| <samp>Bounces</samp>
 +
| ''(Optional)'' The number of times the projectile can bounce off walls before being destroyed. Default 0.
 +
|-
 +
| <samp>MaxDistance</samp>
 +
| ''(Optional)'' The maximum tile distance the projectile can travel. Default 4.
 +
|-
 +
| <samp>Velocity</samp>
 +
| ''(Optional)'' The speed at which the projectile moves. Default 10.
 +
|-
 +
| <samp>RotationVelocity</samp>
 +
| ''(Optional)'' The rotation velocity. Default 32.
 +
|-
 +
| <samp>TailLength</samp>
 +
| ''(Optional)'' The length of the tail which trails behind the main projectile. Default 1.
 +
|-
 +
| <samp>FireSound</samp><br /><samp>BounceSound</samp><br /><samp>CollisionSound</samp>
 +
| ''(Optional)'' The sound played when the projectile is fired, bounces off a wall, or collides with something. All three default to none.
 +
|-
 +
| <samp>MinAngleOffset</samp><br /><samp>MaxAngleOffset</samp>
 +
| ''(Optional)'' A random offset applied to the direction of the project each time it's fired. Both fields default to 0, in which case it's always shot at the 90° angle matching the player's facing direction.
 +
|-
 +
| <samp>SpriteIndex</samp>
 +
| ''(Optional)'' The sprite index in the <samp>TileSheets/Projectiles</samp> asset to draw for this projectile. Defaults to 11 (a glowing-yellow-ball sprite).
 +
|-
 +
| <samp>Item</samp>
 +
| ''(Optional)'' The item to shoot. If set, this overrides <samp>SpriteIndex</samp>.
 +
 +
This consists of a list of models with these fields:
 +
{| class="wikitable"
 +
|-
 +
! field
 +
! effect
 +
|-
 +
| ''common fields''
 +
| See [[Modding:Item queries#Item spawn fields|item spawn fields]] for the generic item fields supported for ammo items.
 +
 +
If set to an [[Modding:Item queries|item query]] which returns multiple items, one of them will be selected at random.
 +
|}
 +
|}
 +
 +
Note that these are magic projectiles fired when the weapon is used, they're not aimed directly like [[slingshot]] projectiles.
 +
|-
 +
| <samp>CustomFields</samp>
 +
| The [[Modding:Common_data_field_types#Custom_fields|custom fields]] for this entry.
 +
|}
 +
Weapons have a hardcoded category of -98 (<samp>Object.weaponCategory</samp>).
 +
 +
===Slingshot notes===
 +
* The base [[slingshot]] has <samp>ParentSheetIndex</samp> 32 in the weapon data, which increases by one for each upgrade level (up to 34 in the weapon data, though only 32 and 33 are obtainable without mods).
 +
* Slingshot damage is [[Slingshot#Ammunition|calculated dynamically]] regardless of the weapon data.
 +
 +
===Mine container drops===
 +
When the player breaks a container in [[The Mines|the mines]], there's a chance it will drop a weapon. Here's how the weapon to drop is chosen<ref>See <samp>Utility.getUncommonItemForThisMineLevel</samp> in the game code.</ref>:
 +
 +
<ol>
 +
<li>Match weapons whose [[#Game logic|minimum mine level]] is less than the current mine level.</li>
 +
<li>From that list, match weapons with a probability check based on the gap between the [[#Game logic|base mine level]] and current mine level. The probability is a bell curve centered on the base mine level:
 +
{| class="wikitable"
 +
|-
 +
! level difference
 +
! probability
 +
|-
 +
| 0
 +
| 100%
 +
|-
 +
| 5
 +
| 92%
 +
|-
 +
| 10
 +
| 71%
 +
|-
 +
| 15
 +
| 46%
 +
|-
 +
| 20
 +
| 25%
 +
|-
 +
| 25
 +
| 4%
 +
|}
 +
The difference applies in both directions; for example, two weapons whose base levels are 5 below and 5 above the current level both have a 92% chance. (The probability is calculated with a [[wikipedia:Gaussian function|Gaussian function]] <code>e<sup>-(current mine level - base mine level)<sup>2</sup> / (2 * 12<sup>2</sup>)</sup></code>.)</li>
 +
<li>Find the weapon with the smallest gap between the current and base mine levels, and add it to the list. (If the item was also selected in step 2, it has two chances to drop.)</li>
 +
<li>From the remaining list of weapons, randomly choose one to drop.</li>
 +
</ol>
 +
 +
==See also==
 +
* [[Modding:Index]] for related content like [[Modding:Crop data|crops]], [[Modding:Fish data|fish]], [[Modding:Gift taste data|gift tastes]], and [[Modding:Recipe data|recipes]]
 +
 +
==References==
 +
<references />
  
 
[[Category:Modding]]
 
[[Category:Modding]]
 +
 +
[[ru:Модификации:Объекты]]
 +
 +
==History==
 +
{{History|1.6|Objects are now stored in <samp>Data/Objects</samp> rather than <samp>Data/ObjectInformation</samp> and have a new format.}}
 +
{{History|1.6|Field 4 of hats is now used for tags, rather than displayName.}}
 +
{{History|1.6|Display name field is now used for all languages.}}
 +
{{History|1.6|Added Texture & texture index fields to all object data.}}
 +
{{History|1.6|All types of items now use string IDs.}}

Latest revision as of 04:22, 5 June 2024

Index

This page explains how the game stores and parses item data. This is an advanced guide for mod developers.

Introduction

Overview

As of Stardew Valley 1.6, there are a few important features of Items in the game.

  1. Each item as a string ID (ItemId) and a globally-unique string ID (QualifiedItemId). The QualifiedItemId is auto-generated by prefixing the ItemId with the item type identifier.

    For legacy reasons, the ItemId for vanilla items may not be globally unique. For example, Pufferfish (object 128) and Mushroom Box (bigcraftable 128) both have ItemId: 128. They can be distinguished by their QualifiedItemId, which are (O)128 and (BC)128 respectively.

  2. Each item type has an item data definition in the game code which tells the game how to handle it. C# mods can add or edit definitions. Each definition has a unique prefix which is used in the qualified item IDs. The vanilla types are bigcraftables ((BC)), boots ((B)), farmhouse flooring ((FL)), furniture ((F)), hats ((H)), objects ((O)), pants ((P)), shirts ((S)), tools ((T)), wallpaper ((WP)), and weapons ((W)).
  3. Custom items can now provide their own item texture, specified in a new field in the item data assets (see below). The item's ParentSheetIndex field is the index within that texture.

In other words, the four important fields for items are:

name type description
ItemId string A unique string ID for this item which should be globally unique (but may not be for existing vanilla items for backwards compatibility). For example, 128 (vanilla item) or Example.ModId_Watermelon (custom item).
QualifiedItemId string A globally unique item key, like (O)128 for a vanilla item or (O)Example.ModId_Watermelon for a custom one. This is auto-generated from the TypeDefinitionId and ItemId fields.
ParentSheetIndex int The item's sprite index within its spritesheet.
TypeDefinitionId string The ID for the data definition which defines the item, like (O) for an object. You can use ItemRegistry.type_* constants with this field:
if (item.TypeDefinitionId == ItemRegistry.type_object)
   ...

Item references

Item references throughout the game code now use the ItemId instead of the ParentSheetIndex. Since the ItemId is identical to the index for existing vanilla items, most data assets are unaffected by this change. For example, here's from Data/NPCGiftTastes with one custom item:

"Universal_Like": "-2 -7 -26 -75 -80 72 395 613 634 635 636 637 638 724 459 Example.ModID_watermelon"

Unless otherwise noted, unqualified item IDs will produce objects. Some assets let you override that by specifying a QualifiedItemId value instead. For example, you can add (O)128 to the gift taste list to explicitly add for an object. Here's a partial list of data assets and their supported item ID formats:

data asset item ID format
Data/CraftingRecipes
Data/CookingRecipes
  • Ingredients: both supported.
  • Output: set field 2 to the unqualified item ID, and field 3 to one of true (bigcraftable) or false (object).
Data/FruitTrees
  • Fruit: both supported.
  • Sapling: unqualified only.
Data/NPCGiftTastes Both supported, but only (O) items can be gifted.

Item types

These are the item types for which custom items can added/edited:

item type type identifier data asset
Big craftables (BC) Data/BigCraftables
Each item can set a custom texture name in the Texture field, and sprite index in the SpriteIndex field. The default texture is TileSheets/Craftables.
Boots (B) Data/Boots
Each item can set a custom texture name in fields 9 (item) and 7 (shoe color), and sprite index in fields 8 (item) and 5 (shoe color). The default textures are Maps/springobjects (item) and Characters/Farmer/shoeColors (shoe color).
Crops not technically an item type Data/Crops
Each crop can set a custom texture name and sprite index. The default texture is TileSheets/crops.
Fish (in fish tanks) not technically an item type Data/AquariumFish
Each fish can set a custom aquarium texture name in field 6, and sprite index in field 0. The default texture is LooseSprites/AquariumFish.
Furniture (F) Data/Furniture
Each item can set a custom texture name in field 9, and sprite index in field 8. The default texture is TileSheets/furniture.
Fruit Trees not technically an item type Data/FruitTrees
Each fruit tree can set a custom texture name and sprite index. The default texture is TileSheets/fruitTrees.
Hats (H) Data/Hats
Each item can set a custom texture name in field 7, and sprite index in field 6. The default texture is Characters/Farmer/hats.
Objects (O) Data/Objects
Each item can set a custom texture name in the Texture field, and sprite index in the SpriteIndex field. The default texture is Maps/springobjects.
Pants (P) Data/pantsData
Each item can set a custom texture name in the Texture field, and sprite index in the SpriteIndex field. The default texture is Characters/Farmer/pants.
Shirts (S) Data/shirtData
Each item can set a custom texture name in the Texture field, and sprite index in the SpriteIndex field. The default texture is Characters/Farmer/shirts.

Shirt textures must be exactly 256 pixels wide, divided into two halves: the left half for the shirt sprites, and the right half for any dye masks. The remaining space can be left blank if needed.

      sprites       dye masks
   /-----------\  /-----------\
┌────────────────────────────────┐
│ ┌───┐┌───┐┌───┐┌───┐┌───┐┌───┐ │
│ │ 0 ││ 1 ││ 2 ││ a ││ b ││ c │ │
│ └───┘└───┘└───┘└───┘└───┘└───┘ │
│ ┌───┐┌───┐┌───┐┌───┐┌───┐┌───┐ │
│ │ 3 ││ 4 ││ 5 ││ d ││ e ││ f │ │
│ └───┘└───┘└───┘└───┘└───┘└───┘ │
└────────────────────────────────┘
Tools (T) Data/Tools
Each item can set a custom texture name in the Texture field, and sprite index in the SpriteIndex field. The vanilla tools use the TileSheets/Tools texture.
Wallpaper & flooring (WP) and (FL) Data/AdditionalWallpaperFlooring
See format docs.
Weapons (W) Data/Weapons

When resolving an unqualified item ID like 128, the game will get the first item type for which it exists in this order: object, big craftable, furniture, weapon, boots, hat, pants, shirt, tool, wallpaper, and floorpaper.

For each item type, the game has two files in its Content folder (which can be unpacked for editing):

  • a data asset for the text data for its items (names, descriptions, prices, etc);
  • and a spritesheet for the in-game item icons.

Each item has a ParentSheetIndex field which is its position in the item type's spritesheet, starting at 0 in the top-left and incrementing by one as you move across and then down. For example, hat #0 is the first sprite in Characters/Farmer/hats. The ParentSheetIndex is also used to identify the item itself; since spritesheet indexes aren't unique (e.g., there's both a hat #10 and object #10), code needs to check the type too like item is Weapon weapon && weapon.ParentSheetIndex == 4.

Get a list of items

With SMAPI installed, you can run the list_items console command in-game to view/search items and their IDs.

Define a custom item

You can define custom items for most vanilla item types using only Content Patcher or SMAPI's content API.

For example, this content pack adds a new Pufferchick item with a custom image, custom gift tastes, and a custom crop that produces it. Note that item references in other data assets like Data/Crops and Data/NPCGiftTastes use the item ID.

{
    "Format": "2.0.0",
    "Changes": [
        // add item
        {
            "Action": "EditData",
            "Target": "Data/Objects",
            "Entries": {
                "{{ModId}}_Pufferchick": {
                    "Name": "{{ModId}}_Pufferchick", // best practice to match the ID, since it's sometimes used as an alternate ID (e.g. in Data/CraftingRecipes)
                    "Displayname": "Pufferchick",
                    "Description": "An example object.",
                    "Type": "Seeds",
                    "Category": -74,
                    "Price": 1200,

                    "Texture": "Mods/{{ModId}}/Objects",
                    "SpriteIndex": 0
                }
            }
        },

        // add gift tastes
        {
            "Action": "EditData",
            "Target": "Data/NPCGiftTastes",
            "TextOperations": [
                {
                    "Operation": "Append",
                    "Target": ["Entries", "Universal_Love"],
                    "Value": "{{ModId}}_Pufferchick",
                    "Delimiter": " " // if there are already values, add a space between them and the new one
                }
            ]
        },

        // add crop (Pufferchick is both seed and produce, like coffee beans)
        {
            "Action": "EditData",
            "Target": "Data/Crops",
            "Entries": {
                "{{ModId}}_Pufferchick": {
                    "Seasons": [ "spring", "summer", "fall" ],
                    "DaysInPhase": [ 1, 1, 1, 1, 1 ],
                    "HarvestItemId": "{{ModId}}_Pufferchick",

                    "Texture": "Mods/{{ModId}}/Crops",
                    "SpriteIndex": 0
                }
            }
        },

        // add item + crop images
        {
            "Action": "Load",
            "Target": "Mods/{{ModId}}/Crops, Mods/{{ModId}}/Objects",
            "FromFile": "assets/{{TargetWithoutPath}}.png" // assets/Crops.png, assets/Objects.png
        }
    ]
}

Most item data assets work just like Data/Objects. See also specific info for custom fruit trees, custom tools, and melee weapons.

Error items

Prior to 1.6, in-game items with no underlying data (e.g. because you removed the mod which adds them) would previously cause issues like invisible items, errors, and crashes. This was partly mitigated by the bundled Error Handler mod.

Stardew Valley 1.6 added comprehensive handling for such items. They'll be shown with a 🛇 sprite in inventory UIs and in-game, the name Error Item, and a description which indicates the missing item ID for troubleshooting.

For C# mods

Compare items
Since Item.QualifiedItemId is globally unique, it can be used to simplify comparing items. For example:
old code new code
item.ParentSheetIndex == 128 item.QualifiedItemId == "(O)128"
IsNormalObjectAtParentSheetIndex(item, 128) item.QualifiedItemId == "(O)128"
!item.bigCraftable && item.ParentSheetIndex == 128 item.QualifiedItemId == "(O)128"
item is Boots && item.ParentSheetIndex == 505 item.QualifiedItemId == "(B)505"

You can also use ItemRegistry.QualifyItemId to convert any item ID into a qualified one (if it's valid), and ItemRegistry.HasItemId to check if an item has a qualified or unqualified item ID.

Note that flavored item don't have their own ID. For example, Blueberry Wine and Wine are both (O)348. This affects flavored jellies, juices, pickles, and wines. In those cases you should still compare their separate fields like preservedParentSheetIndex (which actually contains the preserved item's ItemId, not its ParentSheetIndex).

Construct items
When constructing items, specify the item's ItemId (not QualifiedItemId). For example:
new Object("128", 1);                      // vanilla item
new Object("Example.ModId_Watermelon", 1); // custom item

You can use a utility method to construct items from their QualifiedItemId:

Item item = ItemRegistry.Create("(B)505"); // Rubber Boots
Define custom item types
You can implement IItemDataDefinition for your own item type, and call ItemRegistry.AddTypeDefinition to register it. This provides all the logic needed by the game to handle the item type: where to get item data, how to draw them, etc. This is extremely specialized, and multiplayer compatibility is unknown. Most mods should add custom items within the existing types instead.
New Is* methods
1.6 added some StardewValley.Object methods to handle custom items in a generic way (and to let mods patch the logic):
method effect
object.IsBar() Whether the item is a copper bar, iron bar, gold bar, iridium bar, or radioactive bar.
object.IsBreakableStone() Whether the item is a stone debris item which can be broken by a pickaxe.
object.IsFence() Whether the item is a fence.
object.IsFruitTreeSapling() Whether the item is a fruit tree sapling. This checks the Data\fruitTrees keys, so it works with custom fruit trees too.
object.IsHeldOverHead() Whether the player is shown holding up the item when it's selected in their toolbar. Default true (except for furniture).
object.IsIncubator() Whether the item can incubate farm animal eggs when placed in a building.
object.IsTapper() Whether the item is a tapper or heavy tapper.
object.IsTeaSapling() Whether the item is a tea sapling.
object.IsTwig() Whethere the item is a twig debris item.
object.IsWeeds() Whether the item is a weed debris item.
Work with item metadata
1.6 added an ItemRegistry API for working with the new item system. Some of the provided methods are:
method effect
ItemRegistry.Create Create an item from its item ID (qualified or unqualified). If the ID doesn't match a real item, the optional allowNull parameter indicates whether to return null or an Error Item. For example:
Item item = ItemRegistry.Create("(B)505"); // Rubber Boots

You can also get a specific value type instead of Item if needed. This will throw a descriptive exception if the type isn't compatible (e.g. you try to convert furniture to boots).

Boots item = ItemRegistry.Create<Boots>("(B)505"); // Rubber Boots
ItemRegistry.Exists Get whether a qualified or unqualified item ID matches an existing item. For example:
bool pufferfishExist = ItemRegistry.Exists("(O)128");
ItemRegistry.IsQualifiedId Get whether the given item ID is qualified with the type prefix (like (O)128 instead of 128).
ItemRegistry.QualifyItemId Get the unique qualified item ID given an unqualified or qualified one. For example:
string qualifiedId = ItemRegistry.QualifyItemId("128"); // returns (O)128
ItemRegistry.GetMetadata This lets you get high-level info about an item:
// get info about Rubber Boots
ItemMetadata info = ItemRegistry.GetMetadata("(B)505");

// get item ID info
$"The item has unqualified ID {info.LocalId}, qualified ID {info.QualifiedId}, and is defined by the {info.TypeIdentifier} item data definition.";

// does the item exist in the data files?
bool exists = info.Exists();

And get common parsed item data:

// get parsed info
ParsedItemData data = info.GetParsedData();
$"The internal name is {data.InternalName}, translated name {data.DisplayName}, description {data.Description}, etc.";

// draw an item sprite
Texture2D texture = data.GetTexture();
Rectangle sourceRect = data.GetSourceRect();
spriteBatch.Draw(texture, Vector2.Zero, sourceRect, Color.White);

And create an item:

Item item = metadata.CreateItem();

And get the type definition (note that this is very specialized, and you should usually use ItemRegistry instead to benefit from its caching and optimizations):

IItemDataDefinition typeDefinition = info.GetTypeDefinition();
ItemRegistry.ResolveMetadata Equivalent to ItemRegistry.GetMetadata, except that it'll return null if the item doesn't exist.
ItemRegistry.GetData Get the parsed data about an item, or null if the item doesn't exist. This is a shortcut for ItemRegistry.ResolveMetadata(id)?.GetParsedData(); see the previous method for info on the parsed data.
ItemRegistry.GetDataOrErrorItem Equivalent to ItemRegistry.GetData, except that it'll return info for an Error Item if the item doesn't exist (e.g. for drawing in inventory).
ItemRegistry.GetErrorItemName Get a translated Error Item label.

Common data

Quality

Each item has a quality level which (depending on the item type) may affect its price, health boost, etc. The valid qualities are:

quality value constant
normal 0 Object.lowQuality
silver 1 Object.medQuality
gold 2 Object.highQuality
iridium 4 Object.bestQuality

Categories

Each item also has a category (represented by a negative integer). In code, you can get an item's category value from item.Category, and its translated name from item.getCategoryName(). Here are the valid categories:

value internal constant context tag English translation Properties
-2 Object.GemCategory category_gem Mineral Affected by Gemologist profession
-4 Object.FishCategory category_fish Fish Affected by Fisher and Angler professions
-5 Object.EggCategory category_egg Animal Product Affected by Rancher profession, can be used in a slingshot
-6 Object.MilkCategory category_milk Animal Product Affected by Rancher profession
-7 Object.CookingCategory category_cooking Cooking
-8 Object.CraftingCategory category_crafting Crafting Is Placeable
-9 Object.BigCraftableCategory category_big_craftable Is Placeable
-12 Object.mineralsCategory category_minerals Mineral Affected by Gemologist profession
-14 Object.meatCategory category_meat Animal Product
-15 Object.metalResources category_metal_resources Resource
-16 Object.buildingResources category_building_resources Resource
-17 Object.sellAtPierres category_sell_at_pierres
-18 Object.sellAtPierresAndMarnies category_sell_at_pierres_and_marnies Animal Product Affected by Rancher profession
-19 Object.fertilizerCategory category_fertilizer Fertilizer Is Placeable, is always passable
-20 Object.junkCategory category_junk Trash
-21 Object.baitCategory category_bait Bait Can be attached to a fishing rod
-22 Object.tackleCategory category_tackle Fishing Tackle Can be attached to a fishing rod, cannot stack
-23 sellAtFishShopCategory category_sell_at_fish_shop
-24 Object.furnitureCategory category_furniture Decor
-25 Object.ingredientsCategory category_ingredients Cooking
-26 Object.artisanGoodsCategory category_artisan_goods Artisan Goods Affected by Artisan profession
-27 Object.syrupCategory category_syrup Artisan Goods Affected by Tapper profession
-28 Object.monsterLootCategory category_monster_loot Monster Loot
-29 Object.equipmentCategory category_equipment
-74 Object.SeedsCategory category_seeds Seed Is Placeable, is always passable
-75 Object.VegetableCategory category_vegetable Vegetable Affected by Tiller profession, can be used in a slingshot
-79 Object.FruitsCategory category_fruits Fruit Affected by Tiller profession (if not foraged), can be used in a slingshot
-80 Object.flowersCategory category_flowers Flower Affected by Tiller profession
-81 Object.GreensCategory category_greens Forage
-95 Object.hatCategory category_hat
-96 Object.ringCategory category_ring
-98 Object.weaponCategory category_weapon
-99 Object.toolCategory category_tool
Console commands 
With the Console Code mod installed, you can run this command in the SMAPI console to see a list of objects by category:
cs return string.Join(`\n`, Game1.objectData.Keys.Select(key => new StardewValley.Object(key, 1)).GroupBy(item => item.Category, item => item.Name).OrderByDescending(p => p.Key).Select(p => $`{p.Key}: {string.Join(`, `, p.OrderBy(name => name))}`));

Context tags

A context tag is an arbitrary data label attached to items. These can produce various effects in-game, or may be informational only. Context tags are case-insensitive. The game generates some tags based on the game data (like the item quality), and others are defined in Data/Objects.

Here's an incomplete list of context tags added or used in the base game. Mods can add custom context tags, which aren't listed here.

Added automatically for all items:
context tag effect
category_<category> Added automatically based on the item category. See the 'context tag' column in the item category list for possible values.
fish_<metadata> Added automatically for a fish item based on its metadata in Data/Fish.

For crab pot fish (i.e. those with type trap):

context tag notes
fish_trap_location_<water type> Based on field 2 ('darting randomness'). For example, fish_trap_location_ocean.

For fishing rod fish (i.e. those whose type is not trap):

context tag notes
fish_difficulty_<difficulty> Based on field 1 ('chance to dart'), where <difficulty> is one of easy (0–33), medium (34–66), hard (67–100), or extremely_hard (101+). For example, fish_difficulty_hard.
fish_motion_<motion> Based on field 4 ('location'). For example, fish_motion_floater.
fish_favor_weather_<weather> Based on field 7 ('weather'). For example, fish_favor_weather_sunny.
id_<type>_<identifier> Added automatically as an alternative ID. The <type> is one of B (boots), BBL (big craftable recipe), BL (object recipe), BO (big craftable), C (clothing), F (furniture), H (hat), O (object), R (ring), W (melee weapon), else blank. The <identifier> is the item's parent sheet index. For example, pufferfish has value id_o_128 (object #128).
item_<name> Added automatically based on the item name. The name is trimmed, lowercase, with spaces replaced with underscores, and with single quotes removed. For example, '1000 Years From Now' has context tag item_1000_years_from_now.
Added automatically for object-type items:
context tag effect
jelly_item
juice_item
pickle_item
wine_item
For items produced by the keg or preserves jar, the preserved item type.
preserve_sheet_index_<id> For items produced by the keg or preserves jar, the parent sheet index for the original item that was produced. For example, blueberry wine has preserve_sheet_index_258, where 258 is the blueberry item's index.
quality_none
quality_silver
quality_gold
quality_iridium
Added automatically based on the item quality.
quality_qi Added automatically for items cooked while the Qi's Cuisine special order is active.
Color tags:
context tag effect
color_* Color tags are used by a number of game functions, including when the player dyes clothing at Emily's house, when tinting certain machine products such as Wine and Pickles, and when displaying the Book reading animation. For tinting purposes, each tag has a specific RGB value that is used, except when using Emily's Dye Pots, in which case they are grouped into one of the following categories.
dye pot context tags
red color_red, color_salmon, color_dark_red, color_pink
orange color_orange, color_dark_orange, color_dark_brown, color_brown, color_copper
yellow color_yellow, color_dark_yellow, color_gold, color_sand
green color_green, color_dark_green, color_lime, color_yellow_green, color_jade, color_sea_green
blue color_blue, color_dark_blue, color_dark_cyan, color_light_cyan, color_cyan, color_aquamarine
purple color_purple, color_dark_purple, color_dark_pink, color_pale_violet_red, color_poppyseed, color_iridium
no color color_black, color_gray, color_dark_gray, color_white, color_iron, color_prismatic
Tags added in 1.6:
context tag effect
campfire_item Marks the item as a campfire. If the item also has the torch_item context tag, when it's placed in the world and turned on...
  • campfire flames are drawn over it;
  • if the item is big craftable, light is emitted from its center instead of the top.
fish_pond_ignore Prevents players from adding this fish to fish ponds, even if it would otherwise match an entry in Data/FishPondData.
geode_crusher_ignored Prevents breaking this item open in a geode crusher, even if the item has geode fields in Data/Objects.
item_type_<type> For an object-type item, the type value from the 'type and category' field. (Non-object items always have the exact tag item_type_ with nothing after the last underscore.) This is automatic and shouldn't be set manually. The tag is checked in a few places (e.g. the museum to check if an item is an artifact or mineral), but most of the game won't be affected.
museum_donatable
not_museum_donatable
Set whether the item can be donated to the museum, overriding the vanilla logic.
not_giftable Prevents players from gifting this item to NPCs, who'll ignore the item entirely (e.g. as if you were holding a tool).

This only affects gift-giving, it doesn't affect non-gift logic like quest goals or special order objectives. If the NPC also has a reject_* dialogue for the item, the dialogue takes priority.

not_placeable
placeable
Sets whether the item can be placed on the ground.
prevent_loss_on_death Indicates the item can't be lost when the player dies.
sign_item Marks the item as a sign, which lets player display items on it or place it on a fish pond to show the fish count.
torch_item Marks the item as a torch, which lets the player turn it on/off to emit light.

See also campfire_item.

Context tags which affect machine processing:
context tag effect
crystalarium_banned When applied to a gem or mineral item, prevents players from placing it in a crystalarium.
keg_juice
keg_wine
Allows processing the item in a keg to produce a juice or wine variant.
preserves_jelly
preserves_pickle
Allows processing the item in a preserves jar to produce a jelly or pickled variant.
seedmaker_banned When applied to a seed item, prevents players from placing it in a seed maker.
tapper_item Marks the item as a tapper or heavy tapper.
tapper_multiplier_<multiplier> The multiplier applied to the tapper production speed. For example, 2 will make items take half their base time (i.e. each item will finish in base time/speed multiplier). Defaults to 1 if omitted.
Informational tags which have no effect on the game logic:
context tag effect
fish_legendary
fish_legendary_family
Marks the fish as a legendary fish or legendary fish family. These are purely informational; the legendary fish behavior is determined by data fields like CatchLimit or IsBossFish in Data/Locations.
geode (Added automatically) Marks the item as a geode item, which can be broken open at Clint's blacksmith shop or using a geode crusher. This is added automatically if the geode fields are present in Data/Objects.
id_<item id> (Added automatically) The qualified item ID, like id_(o)128. This can be used to match or exclude an item by ID using context tags. Any spaces in the ID are replaced with underscores, and single quotes are removed.
is_machine (Added automatically) Indicates the item has machine logic. This is added automatically based on Data/Machines.
machine_input (Added automatically) Whether the item is a machine which accepts items from the player. This is added automatically based on the machine's fields in Data/Machines:
  • if HasInput is true;
  • or if any output rules have an ItemPlacedInMachine trigger.
machine_output (Added automatically) Whether the item is a machine which produces items for the player to collect. This is added automatically based on the machine's fields in Data/Machines:
  • if HasOutput is true;
  • or if it has any output rules.

Some game data also references context tags in a generic way. For example, you can add custom tags to an item, then reference them in the fish pond data. Specifically:

game data effects
fish ponds In Data/FishPondData, used to match fish that can be placed in the pond (see RequiredTags in the fish pond data).
special orders In Data/SpecialOrders, used to match items that meet the quest objectives (see AcceptedContextTags in the special order data).
tailoring In Data/TailoringRecipes, used to match items that are needed for a recipe.
gift tastes In Data/NPCGiftTastes, used to set character likes and dislike for every item using the context tag.

The debug listtags console command lists all the tags of the item being held.

raw tag dump 
Here's a list of context tags extracted from Data/ObjectContextTags that aren't listed above yet: alcohol_item, algae_item, ancient_item, beach_item, bomb_item, bone_item, book_item, ceramic_item, chicken_item, color_black, color_dark_gray, color_gray, color_iron, color_prismatic, color_white, cooking_item, cow_milk_item, cowboy_item, crop_year_2, dinosaur_item, doll_item, drink_item, dwarvish_item, dye_medium, dye_strong, egg_item, elvish_item, fertilizer_item, fish_bug_lair, fish_carnivorous, fish_crab_pot, fish_desert, fish_freshwater, fish_lake, fish_legendary, fish_mines, fish_night_market, fish_nonfish, fish_ocean, fish_pond, fish_river, fish_secret_pond, fish_semi_rare, fish_sewers, fish_swamp, fish_talk_demanding, fish_talk_rude, fish_talk_stiff, fish_upright, flower_item, food_bakery, food_breakfast, food_cake, food_party, food_pasta, food_salad, food_sauce, food_seafood, food_soup, food_spicy, food_sushi, food_sweet, forage_item, forage_item_beach, forage_item_cave, forage_item_desert, forage_item_mines, forage_item_secret, fossil_item, fruit_item, fruit_tree_item, furnace_item, ginger_item, goat_milk_item, golden_relic_item, honey_item, hunting_item, instrument_item, jelly_item, juice_item, large_egg_item, large_milk_item, light_source, machine_item, marine_item, mayo_item, medicine_item, milk_item, noble_item, ore_item, pickle_item, potion_item, prehistoric_item, quality_fertilizer_item, scroll_item, season_all, season_fall, season_spring, season_summer, season_winter, slime_egg_item, slime_item, statue_item, strange_doll_1, strange_doll_2, syrup_item, totem_item, toy_item, trash_item, tree_seed_item, wood_item.

ItemContextTagManager class

For C# mods, the ItemContextTagManager class simplifies working with item context tags and reduces repeated code.

This provides a few utility methods:

method effect
GetBaseContextTags(id) Get the base context tags for an item based on its raw data in Data/Objects or Data/BigCraftables. This doesn't include dynamic tags added that are based on instance info (like quality), which you can get using item.GetContextTags().
DoesTagQueryMatch(query, tags) Get whether a context tag query matches the given tags. For example, ItemContextTagManager.DoesTagQueryMatch("bone_item, !fossil_item", item.GetContextTags()) returns true if the item is a bone item but not a fossil (like the Bone Flute).
DoAllTagsMatch(requiredTags, actualTags)
DoAnyTagsMatch(requiredTags, actualTags)
Get whether every (DoAllTagsMatch) or at least one (DoAnyTagsMatch</samp) required tag matches the actual item tags. This supports negated required tags like "!fossil_item" too.
DoesTagMatch(requiredTag, actualTags) Get whether a single tag matches the actual item tags. This supports negated required tags like "!fossil_item" too.
SanitizeContextTag(tag) (Specialized) Replace characters that may appear in item names so they're valid in context tags. For example, SanitizeContextTag("Sam's Boombox") returns sams_boombox.

Objects

Objects are the default type for items in inventories or placed in the world.

They have their data in Data/Objects (Data/ObjectInformation prior to 1.6), their icon sprites in Maps/springobjects, and their code in StardewValley.Object. See a table of sprites and their corresponding indexes.

Data format

The object data in Data/Objects consists of a string → model lookup, where...

  • The key is the unqualified item ID.
  • The value is a model with the fields listed below.

Basic info

field purpose
Name The internal item name.
DisplayName
Description
A tokenizable string for the item's in-game display name and description.
Type The item's general type, like Arch (artifact) or Minerals. The vanilla types are: Litter, Basic, Minerals, Quest, asdf, Crafting, Arch, fish, Cooking, Seeds, Ring, interactive
Category The item category.
Price (Optional) The price when sold by the player. This is not the price when bought from a shop. Default 0.

Appearance

field purpose
Texture The asset name for the texture containing the item's sprite. Defaults to Maps/springobjects.
SpriteIndex The sprite's index within the Texture, where 0 is the top-left sprite.

Edibility

field purpose
Edibility (Optional) A numeric value that determines how much energy (edibility × 2.5) and health (edibility × 1.125) is restored when this item is eaten. An item with an edibility of -300 can't be eaten, values from -299 to -1 reduce health and energy, and zero can be eaten but doesn't change health/energy. Default -300.
IsDrink (Optional) Whether to drink the item instead of eating it. Default false.
Buffs (Optional) The buffs to apply to the player when this item is eaten, if any. Default none.

This consists of a list of models with these fields:

field purpose
Id The unique string ID for this entry within the list.
Duration (Optional if BuffId is set) The buff duration measured in in-game minutes. This can be set to -2 for a buff that should last for the rest of the day.
BuffId (Optional) The unique ID of a buff from Data/Buffs to apply, or null to ignore Data/Buffs and set the ID to food or drink depending on the item's IsDrink field.

If a buff from Data/Buffs is applied and you also specify other fields, here's how the buff data is combined:

field result
Duration
IconTexture
SpriteIndex
GlowColor
If specified, the value in Data/Objects is used instead of the one in Data/Buffs. If omitted, defaults to the value from Data/Buffs.
CustomAttributes The values from both entries are combined (e.g. +1 speed in Data/Objects and +1 speed in Data/Buffs results in +2 speed).
IsDebuff The value in Data/Objects is used.
IsDebuff (Optional) Whether this buff counts as a debuff, so its duration should be halved when wearing a Sturdy Ring. Default false.
IconTexture (Optional) The asset name for the icon texture to load. This must contain one or more 16x16 icons in a grid of any size. If omitted, the game will draw a default icon based on the BuffId and CustomAttributes fields.
SpriteIndex (Optional) The buff's icon index within the IconTexture, where 0 is the top-left icon. Default 0.
GlowColor (Optional) The glow color to apply to the player. See color format. Default none.
CustomAttributes The custom buff attributes to apply, if any.

This consists of a model with any combination of these fields:

field purpose
FarmingLevel
FishingLevel
ForagingLevel
LuckLevel
MiningLevel
(Optional) An amount applied to the matching skill level while the buff is active. This can be negative for a debuff. Default 0.
Attack
Defense
MagneticRadius
MaxStamina
Speed
(Optional) An amount applied to the player's attack, defense, magnetic radius, maximum stamina, or speed while the buff is active. This can be negative for a debuff. Default 0.
CustomFields (Optional) The custom fields for this entry.

Geodes & artifact spots

field purpose
GeodeDrops
GeodeDropsDefaultItems
(Optional) The items that can be dropped when breaking open this item as a geode. Specifying either or both fields automatically enables geode behavior for this item.

You can specify one or both fields:

  • GeodeDrops can be set to the specific items to drop. Default none. This consists of a list of models with these fields:
    field purpose
    common fields See item spawn fields for the generic item fields supported by geode drops.

    If set to an item query which returns multiple items, one of them will be selected at random.

    Chance (Optional) The probability that the item will be dropped if the other fields match, as a decimal value between 0 (never) and 1 (always). Default 1.
    SetFlagOnPickup (Optional) The mail flag to set for the current player when this drop is picked up.
    Precedence (Optional) The order in which this entry should be checked, where lower values are checked first. This can be a negative value. Geode drops with the same precedence are checked in the order listed. Default 0.

    For consistency, vanilla drops mostly use these values:

    • -1000: special overrides like the Golden Helmet;
    • 0: normal items.
  • GeodeDropsDefaultItems chooses a predefined list of possible geode drops like clay, coal, copper, iridium, etc. Default false.

If both fields are specified, each geode will choose between them with an equal 50% chance. If GeodeDrops is specified but no entries match, the geode will use the GeodeDropsDefaultItems regardless of whether it's true.

ArtifactSpotChances (Optional) If this is an artifact (i.e. the Type field is Arch), the chance that it can be found by digging artifact spots in each location.

This consists of a string → model lookup, where:

  • the key is the internal location name;
  • the value is the probability the item will spawn if checked, as a decimal value between 0 (never) and 1 (always).

Context tags & exclusions

field purpose
ContextTags (Optional) The custom context tags to add for this item (in addition to the tags added automatically based on the other object data). This is formatted as a list; for example:
"ContextTags": [ "color_yellow", "fish_ocean", "fish_upright", "season_summer" ]
ExcludeFromRandomSale (Optional) Whether to exclude this item from shops when selecting random items to sell. Default false.
ExcludeFromFishingCollection
ExcludeFromShippingCollection
(Optional) Whether to exclude this item from the fishing/shipping collection and their respective effect on the perfection score. Default false, in which case the normal requirements apply (e.g. artifacts are always excluded from the shipping collection).

Advanced

field purpose
CustomFields (Optional) The custom fields for this entry.

Notes

  • Prior to 1.6, items that have a number in index 6 (the "Crafting" field) showed buggy information in-game (e.g., Bean Hotpot prior to version 1.4). Items that had a number in the "Attack" field displayed the Attack icon and a number, but no description. It's unclear how these buffs work (if at all).
  • Adding custom items with the Arch type is inadvisable as it often leads to Artifact Spots becoming broken and not giving any items.
  • Named buffs (like Oil of Garlic, Life Elixir, or Tipsy) are implemented in code and can't be set in the food buff fields.
  • The spritesheet and data have items that can't normally be found in the player inventory (like twigs and lumber), and some sprites have no corresponding item data. There are also multiple entries for weeds and stone corresponding to different sprites, but the player can only normally obtain one stone item (index 390) and no weeds items.

Big craftables

Big craftables are objects which can be placed in the world and are two tiles tall (instead of one like objects).

They have their data in Data/BigCraftables (Data/BigCraftablesInformation prior to 1.6), their in-game sprites in TileSheets/Craftables, and their code in StardewValley.Object (with the bigCraftable.Value = true flag).

Data format

This consists of a string → model lookup, where...

  • The key is the unqualified item ID.
  • The value is a model with the fields listed below.

Basic info

field purpose
Name The internal item name.
DisplayName
Description
A tokenizable string for the item's in-game display name and description.
Price (Optional) The price when sold by the player. This is not the price when bought from a shop. Default 0.

Behavior

field purpose
Fragility (Optional) How the item can be picked up. The possible values are 0 (pick up with any tool), 1 (destroyed if hit with an axe/hoe/pickaxe, or picked up with any other tool), or 2 (can't be removed once placed). Default 0.
CanBePlacedIndoors
CanBePlacedOutdoors
(Optional) Whether the item can be placed indoors or outdoors. Default true.
IsLamp (Optional) Whether this is a lamp and should produce light when dark. Default false.

Appearance

field purpose
Texture (Optional) The asset name for the texture containing the item's sprite. Defaults to TileSheets/Craftables.
SpriteIndex (Optional) The sprite's index within the Texture, where 0 is the top-left sprite.

Context tags

field purpose
ContextTags (Optional) The custom context tags to add for this item (in addition to the tags added automatically based on the other object data). This is formatted as a list; for example:
"ContextTags": [ "light_source", "torch_item" ]

Advanced

field purpose
CustomFields (Optional) The custom fields for this entry.

Notes

  • Many of the items in the data asset aren't implemented in-game. They may be completely absent from the game, or they may be unused as craftables and instead appear in object data or furniture data.

Boots

Boots are items that can be equipped in the player's footwear slot.

They have their data in Data/Boots, their in-game sprites in Maps/springobjects (item sprite) and Characters/Farmer/shoeColors (shoe color), and their code in StardewValley.Objects.Boots.

Data format

The boots data in Data/Boots consists of an integer→string dictionary with entries like this:

  "511": "Dark Boots/Made from thick black leather./250/4/2/7"

For each entry in the data asset, the key is the item's ParentSheetIndex and the value is a slash-delimited string with these fields:

index field effect
0 name The internal item name (and display name in English).
1 description The translated item description shown in-game.
2 price Unused. The actual price is calculated as (added defence × 100) + (added immunity × 100).
3 added defense A defense bonus applied to the player while equipped.
4 added immunity An immunity bonus applied to the player while equipped.
5 color index The index of the boot color in the Characters/Farmer/shoeColors spritesheet.
6 display name The translated item name shown in-game (for non-English assets only).

Pants

Data format

You can create/edit pants by editing the Data/Pants asset. This consists of a string → model lookup, where...

  • The key is the unqualified item ID.
  • The value is a model with the fields listed below.

Basic pants data

field purpose
Name (Optional) The internal name for the item. Default Pants.
DisplayName
Description
(Optional) A tokenizable string for the item's in-game display name and description. Defaults to the generic pants text (Pants and A wearable pair of pants).
Price (Optional) The default price when the item is sold to the player in a shop. Default 50.

Appearance

field purpose
Texture The asset name for the texture containing the pants' sprite. Defaults to Characters/Farmer/pants.
SpriteIndex The pants' sprite index within the Texture, where 0 is the top-left set.
DefaultColor (Optional) The dye color to apply to the sprite when the player hasn't dyed it yet, if any. See color format. Default 255 235 203 (which matches the color of the cloth item).
CanBeDyed (Optional) Whether the player can dye these pants. Default false.
IsPrismatic (Optional) Whether the pants continuously shift colors. This overrides DefaultColor and CanBeDyed if set. Default false.

Other

field purpose
CanChooseDuringCharacterCustomization (Optional) Whether these pants can be selected on the character customization screen (e.g. when creating a character). Default false.
CustomFields The custom fields for this entry.

Shirts

Data format

You can create/edit shirts by editing the new Data/Shirts asset. This consists of a string → model lookup, where...

  • The key is the unqualified item ID.
  • The value is a model with the fields listed below.

Basic shirt data

field purpose
Name (Optional) The internal name for the item. Default Shirt.
DisplayName
Description
(Optional) A tokenizable string for the item's in-game display name and description. Defaults to the generic shirt text (Shirt and A wearable shirt).
Price (Optional) The default price when the item is sold to the player in a shop. Default 50.

Appearance

field purpose
Texture The asset name for the texture containing the shirt's sprite. Defaults to Characters/Farmer/shirts.
SpriteIndex The shirt's sprite index within the Texture, where 0 is the top-left set.
DefaultColor (Optional) The dye color to apply to the sprite when the player hasn't dyed it yet, if any. See color format. Default none.
CanBeDyed (Optional) Whether the player can dye this shirt. Default false.
IsPrismatic (Optional) Whether the shirt continuously shifts colors. This overrides DefaultColor and CanBeDyed if set. Default false.
HasSleeves (Optional) Whether to draw shirt sleeves. Default true.

Other

field purpose
CanChooseDuringCharacterCustomization (Optional) Whether this shirt can be selected on the character customization screen (e.g. when creating a character). Default false.
CustomFields The custom fields for this entry.

Furniture

Furniture are decorative items which can be placed in the world, including chairs which the player can sit on.

They have their data in Data/Furniture, their in-game sprites in TileSheets/furniture, translations in Strings/Furniture, and their code in StardewValley.Objects.Furniture.

Data format

The furniture data in Data/Furniture consists of an integer→string dictionary with entries like this:

  "18": "Country Chair/chair/-1/-1/4/750"

For each entry in the data asset, the key is the item's ParentSheetIndex and the value is a slash-delimited string with these fields:

index field effect
0 name The internal item name (and display name in English).
1 type The furniture type. Possible values:
type meaning
0 chair
1 bench
2 couch
3 armchair
4 dresser
5 long table
6 painting
7 lamp
8 decor
9 other
10 bookcase
11 table
12 rug
13 window
14 fireplace
15 bed
16 torch
17 sconce
2 tilesheet size The furniture sprite size on the tilesheet, measured in tiles. This can be <width> <height> (e.g. 1 2), or -1 to use the default size for the type.
3 bounding box size The size of the hitbox when the furniture is placed in-game, measured in tiles. The bounding box will be anchored to the bottom-left corner and extend upwards and rightwards. This can be <width> <height> (e.g. 1 2), or -1 to use the default size for the type.
4 rotations The number of rotations possible (1, 2, or 4).
5 price The price when purchased from a shop.
6 placement restriction Where the furniture can be placed.
value meaning
-1 default (uses furniture type)
0 indoors-only
1 outdoors-only
2 indoors or outdoors
7 display name The translated furniture name, which allows tokenizable strings.
8 sprite index The sprite index within the spritesheet texture to draw.
9 texture (Optional) The asset name of the texture to draw. Defaults to TileSheets/furniture.
10 off limits for random sale (Optional) Whether to prevent this furniture from appearing in randomly generated shop stocks and the furniture catalogue. Default false.
11 context tags (Optional) A space-delimited list of context tags which apply to this furniture. Default none.

Hats

Hats are items that can be equipped in the player's hat slot.

They have their data in Data/Hats, their in-game sprites in Characters/Farmer/hats, and their code in StardewValley.Objects.Hat.

Data format

The hat data in Data/Hats consists of an integer→string dictionary with entries like this:

  "5": "Official Cap/Looks like it belonged to a postman or policeman. Either way, it's still very soft and smells okay./false/true"

Hats from the base game use the hat's ParentSheetIndex as its item ID. For each entry in the data asset, the key is the hat's item ID, and the value is a slash-delimited string with these fields:

index field effect
0 name The internal item name.
1 description The translated item description shown in-game.
2 show real hair Whether to show the player's hairstyle as-is when the hat is worn (true), or change the hairstyle to fit the hat (false).
3 skip hairstyle offset Whether to ignore the current style when positioning the hat (one of true or false). For example, the eye patch sets true since its position isn't affected by the hair, but the butterfly bow sets false to adjust its position on top of your hair.
4 tags A space-separated list of "tags". These are separate from context tags, and used to contain miscellaneous information. Currently, the only tag used by the game is Prismatic, which marks a hat as prismatic and causes it to cycle through colors.
5 display name The translated item name shown in-game.
6 sprite index The index in the hat spritesheet used to display this hat.
7 texture name The name of the game texture to use for the hat. If empty, the game will use the default hat sheet Characters/Farmer/hats

Hats have a hard-coded category of -95 (HatDataDefinition.cs::GetData)

Tools

Tools are items that can be swung or used by the player to perform some effect (e.g. dig dirt, chop trees, etc).

They have their data in Data/Tools, their in-game sprites in TileSheets/Tools, and their code in StardewValley.Tool and various subclasses like StardewValley.Tools.Axe.

Data format

You can create/edit tools by editing theData/Tools asset. This consists of a string → model lookup, where...

  • The key is the unqualified item ID.
  • The value is a model with the fields listed below.

Basic tool data

field purpose
ClassName The name of the C# class to construct within the StardewValley.Tools namespace. The class must be a subclass of StardewValley.Tool, and have a constructor with no arguments. For example, given a value of Axe, the game will create StardewValley.Tools.Axe instances.

The main values are:

  • main tools (Axe, FishingRod, Hoe, MeleeWeapon, MilkPail, Pan, Pickaxe, Shears, Wand, and WateringCan);
  • a special GenericTool type which applies the Data/Tools data and only has generic logic, so C# mods can patch in their own logic;
  • and two tools cut from the game which may not work correctly (Lantern and Raft).
Name The internal name to set for the tool item.
DisplayName
Description
A tokenizable string for the tool's in-game display name and description.
AttachmentSlots (Optional) The number of attachment slots to enable on the tool. Note that only FishingRod tools have the code to render and use attachment slots. Default -1, which keeps the default value set by the tool class.
SalePrice (Optional) The default price when the item is sold to the player in a shop. Defaults to -1, in which case you should set the price manually in shops.
CustomFields The custom fields for this entry.

Appearance

Note that drawing the tool correctly in the world (ie, while the player is trying to use it) will likely require custom code.

field purpose
Texture The asset name for the texture containing the tool's sprite.
SpriteIndex The tool's sprite index within the Texture, where 0 is the top row.
MenuSpriteIndex (Optional) The sprite index within the Texture for the item icon. Defaults to SpriteIndex.

Upgrades

field purpose
UpgradeLevel (Optional) The tool upgrade level. Default -1, which keeps the default value set by the tool class.
ApplyUpgradeLevelToDisplayName (Optional) Whether to adjust the DisplayName for the usual upgrade levels. For example, the display name for a level one Axe changes to 'Copper Axe'. Default false.

The display name format in English is:

upgrade level display name format
1 Copper <display name>
2 Steel <display name>
3 Gold <display name>
4 Iridium <display name>
ConventionalUpgradeFrom (Optional) If set, prepends an upgrade for the given tool ID to the UpgradeFrom field. This applies these rules (based on the UpgradeLevel field, not the upgrade level of the specified tool ID):
upgrade level price items needed
1 data-sort-value="2000">Gold.png2,000g Copper Bar.png Copper Bar (5)
2 data-sort-value="5000">Gold.png5,000g Iron Bar.png Iron Bar (5)
3 data-sort-value="10000">Gold.png10,000g Gold Bar.png Gold Bar (5)
4 data-sort-value="25000">Gold.png25,000g Iridium Bar.png Iridium Bar (5)

For example, Iridium Axe specifies this value:

"ConventionalUpgradeFrom": "(T)GoldAxe"
UpgradeFrom (Optional) The requirements to buy this tool from Clint's blacksmith tool upgrade shop. If you specify multiple entries, the first one which matches will be applied.

This consists of a list of models with these fields:

field purpose
Price (Optional) The gold price to buy the upgrade. Defaults to 0.
RequireToolId (Optional) If set, the qualified or unqualified item ID for the tool that must be in the player's inventory for the upgrade to appear. The tool will be destroyed when the upgrade is purchased.
TradeItemId (Optional) If set, the qualified or unqualified item ID for an extra item that must be traded to upgrade the tool. (For example, many vanilla tools need metal bars.)
TradeItemAmount (Optional) The number of TradeItemId required. Defaults to 1.
Condition (Optional) A game state query which indicates whether this upgrade is available. Defaults to always true.

For example, these are equivalent to the Steel Axe's upgrade settings:

"UpgradeFrom": [
    {
        "RequireToolId": "(T)CopperAxe",
        "Price": 5000,
        "TradeItemId": "(O)335", // Iron Bar
        "TradeItemAmount": 5
    }
]

If you want the tool to always be available, you can just omit the conditions. For example:

"UpgradeFrom": [
    {
        "Price": 5000
    }
]

Note that Clint needs a few days to smith the new tool. If you want to sell the tool directly, add it to a regular shop instead.

Game logic

field purpose
CanBeLostOnDeath Whether the player can lose this tool when they die. Default false.

Extensibility

field purpose
ModData (Optional) The mod data values to set when the tool is created, accessible in C# code via the tool.modData dictionary. For example:
"ModData": {
    "PowerLevel": 9000
}
SetProperties (Optional) Set the value of arbitrary properties on the tool class. For example, this would disable the tool animation and require no stamina:
"SetProperties": {
    "InstantUse": true,
    "IsEfficient": true
}

Weapons

Weapons are tools that can be used by the player to damage monsters.

They have their data in Data/Weapons, their in-game sprites in TileSheets/weapons, and their code in StardewValley.Tools.MeleeWeapon and StardewValley.Tools.Slingshot.

Data format

The weapon data in Data/Weapons consists of a string → model lookup, where...

  • The key is the unqualified item ID for the weapon.
  • The value is model with the fields listed below.

Basic weapon info

field effect
Name The internal weapon name.
DisplayName
Description
A tokenizable string for the translated display name & description.
Type The weapon type. One of 0 (stabbing sword), 1 (dagger), 2 (club or hammer), or 3 (slashing sword).

Appearance

field effect
Texture The asset name for the spritesheet containing the weapon's sprite.
SpriteIndex The index within the Texture for the weapon sprite, where 0 is the top-left sprite.

Stats

field effect
MinDamage
MaxDamage
The minimum and maximum based damage caused when hitting a monster with this weapon.
Knockback (Optional) How far the target is pushed when hit, as a multiplier relative to a base weapon like the Rusty Sword (e.g. 1.5 for 150% of Rusty Sword's weight). Default 1.
Speed (Optional) How fast the player can swing the weapon. Each point of speed is worth 40ms of swing time relative to 0. This stacks with the player's weapon speed. Default 0.
Precision (Optional) Reduces the chance that a strike will miss. Default 0.
Defense (Optional) Reduces damage received by the player. Default 0.
AreaOfEffect (Optional) Slightly increases the area of effect. Default 0.
CritChance (Optional) The chance of a critical hit, as a decimal value between 0 (never) and 1 (always). Default 0.02.
CritMultiplier (Optional) A multiplier applied to the base damage for a critical hit. This can be a decimal value. Default 3.

Game logic

field effect
CanBeLostOnDeath Whether the player can lose this tool when they die. Default true.
MineBaseLevel
MineMinLevel
(Optional) The base and minimum mine level, which affect mine container drops. Both default to -1, which disables automatic mine drops.

Advanced

field effect
Projectiles (Optional) The projectiles fired when the weapon is used, which continue along their path until they hit a monster and cause damage. A separate projectile is fired for each entry in this list.

This consists of a list of models with these fields (one projectile will fire for each entry in the list):

field effect
Id The unique string ID for the projectile within the current weapon's data.
Damage (Optional) The amount of damage caused when the projectile hits a monster. Default 10.
Explodes (Optional) Whether the projectile explodes when it collides with something. Default false.
Bounces (Optional) The number of times the projectile can bounce off walls before being destroyed. Default 0.
MaxDistance (Optional) The maximum tile distance the projectile can travel. Default 4.
Velocity (Optional) The speed at which the projectile moves. Default 10.
RotationVelocity (Optional) The rotation velocity. Default 32.
TailLength (Optional) The length of the tail which trails behind the main projectile. Default 1.
FireSound
BounceSound
CollisionSound
(Optional) The sound played when the projectile is fired, bounces off a wall, or collides with something. All three default to none.
MinAngleOffset
MaxAngleOffset
(Optional) A random offset applied to the direction of the project each time it's fired. Both fields default to 0, in which case it's always shot at the 90° angle matching the player's facing direction.
SpriteIndex (Optional) The sprite index in the TileSheets/Projectiles asset to draw for this projectile. Defaults to 11 (a glowing-yellow-ball sprite).
Item (Optional) The item to shoot. If set, this overrides SpriteIndex.

This consists of a list of models with these fields:

field effect
common fields See item spawn fields for the generic item fields supported for ammo items.

If set to an item query which returns multiple items, one of them will be selected at random.

Note that these are magic projectiles fired when the weapon is used, they're not aimed directly like slingshot projectiles.

CustomFields The custom fields for this entry.

Weapons have a hardcoded category of -98 (Object.weaponCategory).

Slingshot notes

  • The base slingshot has ParentSheetIndex 32 in the weapon data, which increases by one for each upgrade level (up to 34 in the weapon data, though only 32 and 33 are obtainable without mods).
  • Slingshot damage is calculated dynamically regardless of the weapon data.

Mine container drops

When the player breaks a container in the mines, there's a chance it will drop a weapon. Here's how the weapon to drop is chosen[1]:

  1. Match weapons whose minimum mine level is less than the current mine level.
  2. From that list, match weapons with a probability check based on the gap between the base mine level and current mine level. The probability is a bell curve centered on the base mine level:
    level difference probability
    0 100%
    5 92%
    10 71%
    15 46%
    20 25%
    25 4%
    The difference applies in both directions; for example, two weapons whose base levels are 5 below and 5 above the current level both have a 92% chance. (The probability is calculated with a Gaussian function e-(current mine level - base mine level)2 / (2 * 122).)
  3. Find the weapon with the smallest gap between the current and base mine levels, and add it to the list. (If the item was also selected in step 2, it has two chances to drop.)
  4. From the remaining list of weapons, randomly choose one to drop.

See also

References

  1. See Utility.getUncommonItemForThisMineLevel in the game code.

History

  • 1.6: Objects are now stored in Data/Objects rather than Data/ObjectInformation and have a new format.
  • 1.6: Field 4 of hats is now used for tags, rather than displayName.
  • 1.6: Display name field is now used for all languages.
  • 1.6: Added Texture & texture index fields to all object data.
  • 1.6: All types of items now use string IDs.