Recipes loader¶
Folder: RuneSchema/mods/<ModName>/recipes/
Crafting, processing, station placement, merchants, and vendor contributions.
Recipes can feed vanilla crafting or processing rows, vanilla merchants, and RuneSchema vendors.
RuneSchema 0.8.0.0 also accepts a recipe-level Discovery block for native item
pickup, actor-interaction and skill-level prerequisites, including AND/OR
queries. It works for cooked overrides and in-PAK loader definitions without
separate /raw files. See recipe discovery for
examples, native limits and the required full restart. Do not combine a
conditional Discovery block with Unlock: true.
{
"RECIPE_MY_ITEM": {
"PersistenceID": "AAAAAAAAAAAAAAAAAAAAAA",
"AddTo": [{
"DataTable": "/Game/MyMod/Data/DT_MyStation.DT_MyStation",
"Row": "StationRow",
"Array": "Recipes"
}],
"Properties": {
"ItemsConsumed": [{"ItemData":"/Game/Gameplay/Items/ITEM_Log.ITEM_Log","Count":2}],
"ItemsCreated": [{"ItemData":"/Game/MyMod/Items/ITEM_MyItem.ITEM_MyItem","Count":1}]
},
"Unlock": false
}
}
Placement rules:
- Use
Tablefor a unique legacy short table name. - Use
DataTablefor an exact vanilla or modded cooked table path. - Use
Categoryfor a nativeLabeledRecipescategory. Both crafting-station rows and merchant rows use this layout. - Use
Arrayfor a directRecipeDataobject array. Dragonwilds processing stations useArray: "Recipes". - Use
RuneSchemaVendorsfor one or more RuneSchema store IDs. - Use
VanillaVendorsfor native merchant table/row targets. Unlock:truegrants the recipe; placement alone does not.- Grants are learned character progress: already learned recipes are retained without a fresh unlock on each session. Temporary vendor stock remains session-only. Safe Clean removes unresolved orphan recipe IDs after their content is disabled or removed; it does not reset valid active recipes.
PersistenceIDis optional. When omitted, RuneSchema derives a stable ID from the mod folder and recipe key.Ordersorts within a category. Lower values appear first.ItemsConsumed[].ItemDataandItemsCreated[].ItemDatashould use full item object paths. RuneSchema accepts a timed-processing output only after an/assetsclone is fully registered and its persistent identity resolves back to that exact item.ItemsConsumed[].CountandItemsCreated[].Countare exact quantities per operation for both crafting and processing. RuneSchema reads full-array writes back from the liveRecipeDataand refuses placement if an entry or count was not retained exactly.
The verified vanilla station targets are:
/Game/Gameplay/World/Stations/DT_CraftingStationsDataTable.DT_CraftingStationsDataTable
Category layout: CraftingTable, RuneAltar, GarouMasonsBench, PotteryWheel,
RangeBronze, RangeStone, JewelersBench, BrewingCauldron, ToolsMeleeBench,
MysticForge, FletchingBenchv2, ArmourBench
/Game/Gameplay/World/Stations/DT_ProcessingStationDataTable.DT_ProcessingStationDataTable
Array "Recipes": Campfire, Kiln, Grinder, Loom, Sawmill, Spinning Wheel,
Tannery, Furnace, Air Altar, Fire Altar, BrewingCauldron, Grill, Stonecutter,
AdvancedSmelter, FermentationBarrel, AdvancedTannery,
AdvancedSpinningWheel
For example, the older dye definitions target the crafting-side
BrewingCauldron and correctly create a Dyes category:
To make the same recipe run through the timed processing cauldron, use:
Category and Array are mutually exclusive. RuneSchema validates the live
row structure and the array's accepted object class before writing. A missing
table, row, category layout, or recipe array rejects only that placement.
Exact DataTable paths are recommended for custom or potentially ambiguous
tables. Helpy's station picker derives its choices from the same reflected
LabeledRecipes and RecipeData[] layouts.
Simple rules¶
- Recipe placement and recipe unlocking are separate operations.
- Use
DataTablefor an exact cooked table path; useTableonly for a unique legacy short name. Categorytargets nativeLabeledRecipes;Arraytargets a direct recipe array. Do not use both on the same placement.
FAQ¶
FAQ-RECIPES-001 — Does placing a recipe at a station automatically unlock it?¶
No. Placement makes the station or vendor contain the recipe; Unlock:true
controls whether the recipe is granted.
FAQ-RECIPES-002 — When should I use DataTable instead of Table?¶
Use DataTable when you want an exact vanilla or modded cooked table path,
especially for custom or potentially ambiguous tables. Use Table only when
the short table name is unique.
FAQ-RECIPES-003 — Can a placement use both Category and Array?¶
No. Category and Array are mutually exclusive placement modes.
FAQ-RECIPES-004 — Can a timed processing station create an /assets clone?¶
Yes. Reference the clone by its RuneSchema object path. RuneSchema verifies the registered clone before adding the recipe to a processing queue. An unresolved or duplicate item identity rejects that recipe placement instead of leaving an unsafe queued output.
FAQ-RECIPES-005 — Must every recipe provide PersistenceID?¶
No. It is optional. A supplied value must be unique and stable; otherwise RuneSchema derives one from the owning mod and recipe key.