Jump to content

Modding:Farm data: Difference between revisions

From Stardew Valley Wiki
imported>Pathoschild
m Pathoschild moved page Modding:Custom Farms to Modding:Farm data: standardize name
imported>Sunbeam135
mNo edit summary
 
(6 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{upcoming|1.6}}
← [[Modding:Index|Index]]


← [[Modding:Index|Index]]
This page explains how the game stores and parses [[Farm Maps|farm types]], maps, and related data. This is an advanced guide for mod developers.


This page explains how to create a custom farm type. It is an advanced guide for modders.
'''Before reading this page''', see [[Modding:Editing XNB files]] for the basic concepts.
'''Before reading this page''', see [[Modding:Editing XNB files]] for the basic concepts.


==Files to Edit==
==Assets==
Creating a custom farm requires editing some files and adding new ones. However, you don't need any programming experience and it can be done with [[Modding:Content Patcher|Content Patcher]].
===Farm type data===
 
You can define custom farm types by editing the <samp>Data/AdditionalFarms</samp> asset.
==Farm Map==
A map controls the general appearance and layout of your farm. [[Modding:Maps|Modding:Maps]] describes the basic process of creating a map. Copying and editing an existing farm map is recommended to avoid problems with missing information. The map must be added to the game files, and not replace an existing one. When testing a custom farm map, it is best to create a new save whenever you make changes to map properties or the Paths layer. Some changes to farm maps will not appear on existing saves. These properties are optional, and the game will use default values for any properties that aren't specified.


===Entry Properties===
This consists of a list of models, where each model has the fields listed below.
These map properties can change where a player enters the farm when arriving from other locations, such as the backwoods, bus stop, or forest. Each uses the format [{{t|int x}} {{t|int y}}].


{| class="wikitable"
|-
! property
! entering from
|-
| <samp>BackwoodsEntry</samp>
| [[Backwoods|The backwoods]]
|-
| <samp>BusStopEntry</samp>
| [[Bus Stop|The bus stop]]
|-
| <samp>FarmCaveEntry</samp>
| [[The Cave|The farm cave]]
|-
| <samp>ForestEntry</samp>
| [[Cindersap Forest|The cindersap forest]]
|-
| <samp>WarpTotemEntry</samp>
| Using a [[Warp Totem: Farm|warp totem]], or the [[Farm Obelisk|Ginger Island farm obelisk]]
|}
===Building Properties===
These map properties can change where some objects are positioned by default, such as the greenhouse, farmhouse, or grandpa's shrine. Each uses the format [{{t|int x}} {{t|int y}}].
{| class="wikitable"
|-
! property
! description
|-
| <samp>FarmHouseEntry</samp>
| Changes the position of the farmhouse. This is the tile position just below the farmhouse door, which is 3 from the top and 5 from the left of the upper left corner of the base of the farmhouse. The farmhouse is 9 x 5.
|-
| <samp>GrandpaShrineLocation</samp>
| Changes the position of Grandpa's shrine. It does not add the appropriate tiles or action. It is only used as a reference for displaying grandpa's note, as well as the shrine candles. This is the bottom center tile position of the shrine, where the note appears, and should be on the same tile as the appropriate action tile property. (<samp>Action: </samp><code>Message "Farm.1"</code>). Even if the map property is omitted, the action tile property must be present.
|-
| <samp>GreenhouseLocation</samp>
| Changes the position of the greenhouse ruins. This is the the tile position of the upper left corner of the base of the greenhouse. The greenhouse is 7 x 6.
|-
| <samp>SpouseAreaLocation</samp>
| Changes the position of the spouse patio when you are married. This is the tile position of the upper left corner. All spouse areas are 4 x 2.
|-
| <samp>ShippingBinLocation</samp>
| Changes the position of the shipping bin. This is the left tile of the base of the shipping bin. Shipping bins are 2 x 1.
|-
| <samp>PetBowlLocation</samp>
| Changes the position of the pet's water bowl. This controls where the water bowl is displayed and where the pet sleeps when sleeping outdoors.
|-
| <samp>MailboxLocation</samp>
| Changes the position of the main farmhouse's mailbox. This is the tile position at the base of the mailbox. This is typically ignored, but may be used if the Farmhouse exterior is altered by a mod.
|}
===Farmhouse Interior===
The starter interior layout of the farmhouse and cabins can be modified using these map properties '''on the farm'''.
{| class="wikitable"
|-
! property
! description
|-
| <samp>FarmHouseFlooring{{t|flooring id}}</samp>
| Changes the default flooring. For flooring from the base game, this is just the [[Flooring|index]]. For custom flooring, it is [{{t|sheet_id}}:{{t|index}}]
|-
| <samp>FarmHouseWallpaper{{t|wallpaper id}}</samp>
| Changes the default wallpaper. For wallpaper from the base game, this is just the [[Wallpaper|index]]. For custom wallpapers, it is [{{t|sheet_id}}:{{t|index}}]
|-
| <samp>FarmHouseStarterSeedsPosition{{t|Tile X}} {{t|Tile Y}}</samp>
| Changes the position of the "gift box" that appears on new saves, typically containing some starter seeds.
|-
| <samp>FarmHouseFurniture [{{t|Furniture ID}} {{t|Tile X}} {{t|Tile Y}} {{t|Rotation}}]+</samp>
| Changes the initial furniture content and layout. If multiple furniture items are added to the same tile, the first one will be placed on the ground and the last one will be placed on the first one. This cannot be used to modify, move, or remove the starter bed, which is always a small bed placed at [9, 8].
|}
===Other Properties===
These map properties can change other aspects of the farm, such as regenerating hardwood stumps or rock-spawning quarries.
{| class="wikitable"
|-
! property
! description
|-
| <samp>FarmFishLocationOverride  {{t|location id}} {{t|chance}}</samp>
| Adds an alternative location id when catching fish, where the {{t|chance}} is a decimal value between 0 (never happens) and 1 (always happens). For example, <samp>FarmFishLocationOverride Mountain 0.5</samp> adds a 50% chance of catching mountain fish instead of the normal fish for that location. The location id is case-sensitive, and matches those shown by the {{nexus mod|679|Debug Mode mod}}.
|-
| <samp>FarmOceanCrabPotOverride T</samp>
| Causes crab pots on the farm to catch ocean fish.
|-
| <samp>Stumps [{{t|Tile X}} {{t|Tile Y}} {{t|unused}}]+</samp>
| Places hardwood stumps every morning. This is based on the upper left corner of the stumps, which are 2 x 2.
|-
| <samp>SpawnBeachFarmForage T</samp>
| Causes beach forage and [[Supply Crate|supply crates]] to spawn on the farm. These will only spawn on tiles with the <samp>BeachSpawn</samp> tile property set on the <samp>Back</samp> layer and no tile on <samp>AlwaysFront</samp>, which are clear for placement.
|-
| <samp>SpawnForestFarmForage T</samp>
| Causes forest forage to spawn on the farm. These will only spawn on tiles with <samp>Type Grass</samp> on the <samp>Back</samp> layer and no tile on <samp>AlwaysFront</samp>, which are clear for placement.
|-
| <samp>SpawnMountainFarmOreRect {{t|Tile X}} {{t|Tile Y}} {{t|Width}} {{t|Height}}</samp>
| The tile area on the farm map where ores should randomly spawn (like the [[Farm Maps|vanilla hilltop farm]]). Ores will only spawn on tiles which have the <samp>Type Dirt</samp> tile property and are clear for object placement.
|}
==Farm Type==
To use a custom farm type, it must be added to the game by editing Data/AdditionalFarms. Each entry is an object with these fields:
{| class="wikitable"
{| class="wikitable"
|-
|-
Line 121: Line 17:
|-
|-
| <samp>ID</samp>
| <samp>ID</samp>
| A unique ID value. This must be '''globally''' unique across all mods, so you should prefix your mod ID (''e.g.,'' <samp>Example.PineapplesAnywhere/PineappleFarm</samp>). You should avoid commas for compatibility with Content Patcher packs checking the <samp><nowiki>{{FarmType}}</nowiki></samp> token. This is not shown in-game. It should be the same as the key for this entry.
| A [[Modding:Common data field types#Unique string ID|unique string ID]] for the farm type.
|-
|-
| <samp>TooltipStringPath</samp>
| <samp>TooltipStringPath</samp>
| Where to get the translatable farm name and description. This must be a key in the form <samp>{{t|asset name}}:{{t|key}}</samp>; for example, <samp>Strings/UI:Farm_Description</samp> will get it from the <samp>Farm_Description</samp> entry in the <samp>Strings/UI</samp> file. The translated text must be in the form "<samp>{{t|name}}_{{t|description}}</samp>", like "Pineapple Farm_A farm shaped like a pineapple".
| The [[Modding:Common data field types#Translation key|translation key]] containing the translatable farm name and description. For example, <samp>Strings/UI:Farm_Description</samp> will get it from the <samp>Farm_Description</samp> entry in the <samp>Strings/UI</samp> file.
 
The translated text must be in the form "<samp>{{t|name}}_{{t|description}}</samp>", like "Pineapple Farm_A farm shaped like a pineapple".
|-
|-
| <samp>MapName</samp>
| <samp>MapName</samp>
| The map asset name relative to the <samp>Maps</samp> folder. For example, <samp>Farm_Pineapple</samp> would load <samp>Maps/Farm_Pineapple</samp>.
| The [[Modding:Common data field types#Asset name|asset name]] for the farm's [[Modding:Maps|map asset]], relative to the <samp>Maps</samp> folder. For example, <samp>Farm_Pineapple</samp> would load <samp>Maps/Farm_Pineapple</samp>.
|-
|-
| <samp>IconTexture</samp>
| <samp>IconTexture</samp>
| ''(optional)'' The asset name for a 22x20 pixel icon texture, shown on the 'New Game' and co-op join screens.
| ''(Optional)'' The [[Modding:Common data field types#Asset name|asset name]] for a 22x20 pixel icon texture, shown on the 'New Game' and co-op join screens.
|-
| <samp>SpawnMonstersByDefault</samp>
| ''(Optional)'' The default value of the 'spawn monsters at night' [[Options#Advanced Game Options|advanced save option]].
|-
|-
| <samp>WorldMapTexture</samp>
| <samp>WorldMapTexture</samp>
| ''(optional)'' The asset name for a 131x61 pixel texture that's drawn over the farm area in the in-game world map.
| ''(Optional)'' The [[Modding:Common data field types#Asset name|asset name]] for a 131x61 pixel texture that's drawn over the farm area in the in-game world map.
|-
|-
| <samp>ModData</samp>
| <samp>ModData</samp>
| ''(optional)'' A string→string dictionary of mod-specific metadata for the farm, which can be accessed in C# code via <samp>Game1.GetFarmTypeModData(key)</samp>.
| ''(Optional)'' The [[Modding:Common data field types#Mod data|mod data fields]] for this farm type, which can be accessed in C# code via <samp>Game1.GetFarmTypeModData(key)</samp>.
|}
|}


==Location Data==
===Farm map===
'''This step is optional.''' [[Modding:Location data|Data/Locations]] contains additional information about the game's locations. Each farm type has its own entry. A custom farm type can use an entry identified by <samp>Farm_{{t|Unique_ID}}</samp> to change the location data of the farm when it is used. If this location data does not exist, the location data of the standard farm layout will be used instead. This can be used to alter the forage, fish, crab pot catches, and dug up items on the farm, among other things.
The farm [[Modding:Maps|map]] contains the general appearance and layout of your farm. [[Modding:Maps|Modding:Maps]] describes the basic process of creating a map.
 
Copying and editing an existing farm map is recommended to avoid problems with missing information. The map must be added to the game files, and not replace an existing one.
 
===Farm map properties===
You can customize the farm behavior by [[Modding:Maps|setting map properties in the map asset]].
 
When testing map property changes, it's best to create a new save since some of these are only applied when the save is created. These properties are optional, and the game will use default values for any properties that aren't specified.
 
Some notable map properties are:
 
* [[Modding:Maps#Warps & map positions|Warp & map positions]] set the player position when arriving on the farm (e.g. <samp>BackwoodsEntry</samp> when arriving from the [[backwoods]], or <samp>WarpTotemEntry</samp> when using a [[Warp Totem: Farm|warp totem]] or [[Farm Obelisk|farm obelisk]]), and the default positions of some location contents (e.g. <samp>MailboxLocation</samp> for the default mailbox position).
* [[Modding:Maps#Farmhouse interior|Farmhouse interior properties]] set the appearance and contents of the [[farmhouse]] (e.g. <samp>FarmHouseFlooring</samp> for the default flooring, or <samp>FarmHouseStarterGift</samp> for what's in the starter giftbox).
* [[Modding:Maps#Fishing|Fishing properties]] override fishing and crab pot behavior.
* [[Modding:Maps#Plants, forage, & item spawning|Plants, forage, & item spawning properties]] override how crops, forage, artifact spots, etc work on the farm.


For custom farms, some fields should have specific values to preserve expected behavior.
===Location data===
'''Optionally''', you can override additional farm location behavior by [[Modding:Location data|editing <samp>Data/Locations</samp>]]. Each farm type can have its own entry, with a key in the form <samp>Farm_{{t|farm type ID}}</samp>. If omitted, it defaults to the location data for the standard farm layout.
 
This can be used to override forage, fish, crab pot catches, artifact spots, etc.
 
For custom farms, some fields should have specific values to preserve expected behavior:
{| class="wikitable"
{| class="wikitable"
|-
|-
Line 149: Line 69:
|-
|-
| <samp>DisplayName</samp>
| <samp>DisplayName</samp>
| This is used to display the farm name. It should contain at least the <samp>FarmName</samp> token to be sure the farm name is shown. The standard value is  
| A [[Modding:Common data field types#Tokenizable string|tokenizable string]] for the farm name. It should contain at least the <samp>FarmName</samp> token to be sure the farm name is shown. The standard value is <code>[LocalizedText Strings\\StringsFromCSFiles:MapPage.cs.11064 [EscapedText [FarmName]]]</code>.
<samp>[LocalizedText Strings\\StringsFromCSFiles:MapPage.cs.11064 [EscapedText [FarmName]]]</samp>
|-
|-
| <samp>CreateOnLoad</samp>
| <samp>CreateOnLoad</samp>
| Must be <samp>null</samp> or absent. Any other value will create duplicate locations.
| Must be <samp>null</samp> or omitted. Any other value will create duplicate locations.
|-
|-
| <samp>CanPlantHere</samp>
| <samp>CanPlantHere</samp>
| Should be <samp>true</samp> or absent. If <samp>false</samp>, crops can't be grown on your farm.
| Should be <samp>true</samp> or omitted. If <samp>false</samp>, crops can't be grown on your farm.
|-
|}
|}


==Example==
==Example==
This is an example of a [[Modding:Content Patcher|Content Patcher]] pack adding a custom farm type with custom location data.
For example, this [[Modding:Content Patcher|Content Patcher]] pack adds a farm type with custom location data.
{{collapse|Data|content=<syntaxhighlight lang="json">
<syntaxhighlight lang="json">
{
{
     "Changes": [
     "Changes": [
Line 170: Line 88:
             "Target": "Data/AdditionalFarms",
             "Target": "Data/AdditionalFarms",
             "Entries": {
             "Entries": {
                 "ExampleAuthor.PineappleFarm/PineappleFarm": { // for technical reasons, you need to specify the ID here *and* in the 'ID' field
                 "{{ModId}}_PineappleFarm": { // for technical reasons, you need to specify the ID here *and* in the 'ID' field
                     "ID": "ExampleAuthor.PineappleFarm/PineappleFarm",
                     "ID": "{{ModId}}_PineappleFarm",
                     "TooltipStringPath": "Strings/UI:ExampleAuthor_PineappleFarm",
                     "TooltipStringPath": "Strings/UI:{{ModId}}",
                     "MapName": "ExampleAuthor_PineappleFarm",
                     "MapName": "{{ModId}}",
                     "IconTexture": "Mods/ExampleAuthor.PineappleFarm/Icon",
                     "IconTexture": "Mods/{{ModId}}/Icon",
                     "WorldMapTexture": "Mods/ExampleAuthor.PineappleFarm/WorldMap"
                     "WorldMapTexture": "Mods/{{ModId}}/WorldMap"
                 }
                 }
             }
             }
Line 185: Line 103:
             "Target": "Strings/UI",
             "Target": "Strings/UI",
             "Entries": {
             "Entries": {
                 "ExampleAuthor_PineappleFarm": "Pineapple Farm_A farm shaped like a pineapple!" // tip: use {{i18n}} to translate it
                 "{{ModId}}": "Pineapple Farm_A farm shaped like a pineapple!" // tip: use {{i18n}} to translate it
             }
             }
         },
         },
Line 192: Line 110:
         {
         {
             "Action": "Load",
             "Action": "Load",
             "Target": "Maps/ExampleAuthor_PineappleFarm",
             "Target": "Maps/{{ModId}}",
             "FromFile": "assets/map.tmx"
             "FromFile": "assets/map.tmx"
         },
         },
Line 199: Line 117:
         {
         {
             "Action": "Load",
             "Action": "Load",
             "Target": "Mods/ExampleAuthor.PineappleFarm/Icon, Mods/ExampleAuthor.PineappleFarm/WorldMap",
             "Target": "Mods/{{ModId}}/Icon, Mods/{{ModId}}/WorldMap",
             "FromFile": "assets/{{TargetWithoutPath}}.png"
             "FromFile": "assets/{{TargetWithoutPath}}.png"
         },
         },
Line 208: Line 126:
             "Target": "Data/Locations",
             "Target": "Data/Locations",
             "Entries": {
             "Entries": {
                 "Farm_ExampleAuthor.PineappleFarm/PineappleFarm": {
                 "Farm_{{ModId}}_PineappleFarm": {
                     "DisplayName": "[LocalizedText Strings\\StringsFromCSFiles:MapPage.cs.11064 [EscapedText [FarmName]]]",
                     "DisplayName": "[LocalizedText Strings\\StringsFromCSFiles:MapPage.cs.11064 [EscapedText [FarmName]]]",
                     "CanPlantHere": true,
                     "CanPlantHere": true,
Line 223: Line 141:
                         },
                         },
                         {
                         {
                             "Id": "Mixed_Seeds",
                             "Id": "MixedSeeds",
                             "ItemId": "(O)770",
                             "ItemId": "(O)770",
                             "Chance": 0.1,
                             "Chance": 0.1,
Line 236: Line 154:
                         // custom artifacts
                         // custom artifacts
                         {
                         {
                             "Id": "Spring seeds",
                             "Id": "SpringSeeds",
                             "ItemId": "(O)495",
                             "ItemId": "(O)495",
                             "Chance": 0.2,
                             "Chance": 0.2,
Line 244: Line 162:
                         },
                         },
                         {
                         {
                             "Id": "Summer seeds",
                             "Id": "SummerSeeds",
                             "ItemId": "(O)496",
                             "ItemId": "(O)496",
                             "Chance": 0.2,
                             "Chance": 0.2,
Line 252: Line 170:
                         },
                         },
                         {
                         {
                             "Id": "Fall seeds",
                             "Id": "FallSeeds",
                             "ItemId": "(O)497",
                             "ItemId": "(O)497",
                             "Chance": 0.2,
                             "Chance": 0.2,
Line 260: Line 178:
                         },
                         },
                         {
                         {
                             "Id": "Winter seeds",
                             "Id": "WinterSeeds",
                             "ItemId": "(O)498",
                             "ItemId": "(O)498",
                             "Chance": 0.2,
                             "Chance": 0.2,
Line 273: Line 191:
     ]
     ]
}
}
</syntaxhighlight>}}
</syntaxhighlight>


[[Category:Modding]]
[[Category:Modding]]
[[ru:Модификации:Ферма]]
[[zh:模组:农场数据]]

Latest revision as of 18:07, 6 March 2026

← Index

This page explains how the game stores and parses farm types, maps, and related data. This is an advanced guide for mod developers.

Before reading this page, see Modding:Editing XNB files for the basic concepts.

Assets

Farm type data

You can define custom farm types by editing the Data/AdditionalFarms asset.

This consists of a list of models, where each model has the fields listed below.

field description
ID A unique string ID for the farm type.
TooltipStringPath The translation key containing the translatable farm name and description. For example, Strings/UI:Farm_Description will get it from the Farm_Description entry in the Strings/UI file.

The translated text must be in the form "<name>_<description>", like "Pineapple Farm_A farm shaped like a pineapple".

MapName The asset name for the farm's map asset, relative to the Maps folder. For example, Farm_Pineapple would load Maps/Farm_Pineapple.
IconTexture (Optional) The asset name for a 22x20 pixel icon texture, shown on the 'New Game' and co-op join screens.
SpawnMonstersByDefault (Optional) The default value of the 'spawn monsters at night' advanced save option.
WorldMapTexture (Optional) The asset name for a 131x61 pixel texture that's drawn over the farm area in the in-game world map.
ModData (Optional) The mod data fields for this farm type, which can be accessed in C# code via Game1.GetFarmTypeModData(key).

Farm map

The farm map contains the general appearance and layout of your farm. Modding:Maps describes the basic process of creating a map.

Copying and editing an existing farm map is recommended to avoid problems with missing information. The map must be added to the game files, and not replace an existing one.

Farm map properties

You can customize the farm behavior by setting map properties in the map asset.

When testing map property changes, it's best to create a new save since some of these are only applied when the save is created. These properties are optional, and the game will use default values for any properties that aren't specified.

Some notable map properties are:

Location data

Optionally, you can override additional farm location behavior by editing Data/Locations. Each farm type can have its own entry, with a key in the form Farm_<farm type ID>. If omitted, it defaults to the location data for the standard farm layout.

This can be used to override forage, fish, crab pot catches, artifact spots, etc.

For custom farms, some fields should have specific values to preserve expected behavior:

field description
DisplayName A tokenizable string for the farm name. It should contain at least the FarmName token to be sure the farm name is shown. The standard value is [LocalizedText Strings\\StringsFromCSFiles:MapPage.cs.11064 [EscapedText [FarmName]]].
CreateOnLoad Must be null or omitted. Any other value will create duplicate locations.
CanPlantHere Should be true or omitted. If false, crops can't be grown on your farm.

Example

For example, this Content Patcher pack adds a farm type with custom location data.

{
    "Changes": [
        // add farm type
        {
            "Action": "EditData",
            "Target": "Data/AdditionalFarms",
            "Entries": {
                "{{ModId}}_PineappleFarm": { // for technical reasons, you need to specify the ID here *and* in the 'ID' field
                    "ID": "{{ModId}}_PineappleFarm",
                    "TooltipStringPath": "Strings/UI:{{ModId}}",
                    "MapName": "{{ModId}}",
                    "IconTexture": "Mods/{{ModId}}/Icon",
                    "WorldMapTexture": "Mods/{{ModId}}/WorldMap"
                }
            }
        },

        // add farm name + description
        {
            "Action": "EditData",
            "Target": "Strings/UI",
            "Entries": {
                "{{ModId}}": "Pineapple Farm_A farm shaped like a pineapple!" // tip: use {{i18n}} to translate it
            }
        },

        // load map
        {
            "Action": "Load",
            "Target": "Maps/{{ModId}}",
            "FromFile": "assets/map.tmx"
        },

        // load icon
        {
            "Action": "Load",
            "Target": "Mods/{{ModId}}/Icon, Mods/{{ModId}}/WorldMap",
            "FromFile": "assets/{{TargetWithoutPath}}.png"
        },

        // custom location data
        {
            "Action": "EditData",
            "Target": "Data/Locations",
            "Entries": {
                "Farm_{{ModId}}_PineappleFarm": {
                    "DisplayName": "[LocalizedText Strings\\StringsFromCSFiles:MapPage.cs.11064 [EscapedText [FarmName]]]",
                    "CanPlantHere": true,
                    "DefaultArrivalTile": {"X": 64, "Y": 15},
                    "MinDailyWeeds": 5,
                    "MaxDailyWeeds": 11,
                    "ArtifactSpots": [
                        // default artifact data
                        {
                            "Id": "Coal",
                            "ItemId": "(O)382",
                            "Chance": 0.5,
                            "MaxStack": 3
                        },
                        {
                            "Id": "MixedSeeds",
                            "ItemId": "(O)770",
                            "Chance": 0.1,
                            "MaxStack": 3
                        },
                        {
                            "Id": "Stone",
                            "ItemId": "(O)390",
                            "Chance": 0.25,
                            "MaxStack": 3
                        },
                        // custom artifacts
                        {
                            "Id": "SpringSeeds",
                            "ItemId": "(O)495",
                            "Chance": 0.2,
                            "MaxStack": 4,
                            "Condition": "SEASON Spring",
                            "Precedence": 1
                        },
                        {
                            "Id": "SummerSeeds",
                            "ItemId": "(O)496",
                            "Chance": 0.2,
                            "MaxStack": 4,
                            "Condition": "SEASON Summer",
                            "Precedence": 1
                        },
                        {
                            "Id": "FallSeeds",
                            "ItemId": "(O)497",
                            "Chance": 0.2,
                            "MaxStack": 4,
                            "Condition": "SEASON Fall",
                            "Precedence": 1
                        },
                        {
                            "Id": "WinterSeeds",
                            "ItemId": "(O)498",
                            "Chance": 0.2,
                            "MaxStack": 4,
                            "Condition": "SEASON Winter",
                            "Precedence": 1
                        }
                    ]
                }
            }
        }
    ]
}