Adding Recipes
Pack location: Server/Item/Recipes/
Base game reference: Assets.zip/Server/Item/Recipes/
Defining a Recipe
Section titled “Defining a Recipe”Here’s a complete recipe file:
{ "Input": [ { "ItemId": "hytale:iron_ingot", "Quantity": 3 }, { "ItemId": "hytale:wood_stick", "Quantity": 2 } ], "PrimaryOutput": { "ItemId": "hytale:iron_pickaxe" }, "OutputQuantity": 1, "BenchRequirement": [ { "Type": "Crafting", "Id": "Anvil", "Categories": ["Tools"], "RequiredTierLevel": 1 } ], "TimeSeconds": 0, "KnowledgeRequired": false}Input lists the ingredients — each needs at least an ItemId, ResourceTypeId (wildcard matching like “any wood”), or ItemTag. PrimaryOutput is what gets crafted. BenchRequirement controls where the recipe can be crafted (see Choosing a Bench Type).
Recipe Fields
Section titled “Recipe Fields”| Field | Default | Description |
|---|---|---|
Input | (required) | List of ingredients (MaterialQuantity) |
PrimaryOutput | (required) | The main output item |
OutputQuantity | 1 | How many of the primary output to produce |
Output | [] | Additional outputs beyond the primary |
BenchRequirement | — | Which bench(es) can craft this recipe |
TimeSeconds | 0 | Crafting duration in seconds (0 = instant) |
KnowledgeRequired | false | Must the player learn this recipe first? |
RequiredMemoriesLevel | 1 | World progression gate |
Ingredient Matching
Section titled “Ingredient Matching”Each ingredient (MaterialQuantity) can match items in three ways:
| Field | Description |
|---|---|
ItemId | Exact item (e.g. "hytale:iron_ingot") |
ResourceTypeId | Any item of a resource type (any wood, any ore) |
ItemTag | Tag-based matching |
Set Quantity for how many are needed (default: 1). Use Metadata for specific item variants.
Embedding Recipes in Items
Section titled “Embedding Recipes in Items”Items can embed a Recipe field directly in their item JSON asset. These are auto-generated as "{itemId}_Recipe_Generated_0" at load time — no separate recipe file needed.
{ "Parent": "Template_Weapon_Sword", "Recipe": { "Input": [ { "ItemId": "hytale:iron_ingot", "Quantity": 3 }, { "ItemId": "hytale:wood_stick", "Quantity": 2 } ], "BenchRequirement": [{ "Type": "Crafting", "Id": "Anvil" }] }}Choosing a Bench Type
Section titled “Choosing a Bench Type”The BenchRequirement on each recipe controls which bench(es) can craft it. A recipe can list multiple bench requirements to be craftable at different stations.
Each bench requirement has:
Type— the crafting mechanic (defaults toCrafting, see table below)Id— which specific bench (e.g."Anvil","Fieldcraft")Categories— UI organization tags (e.g.["Tools"],["Weapons"])RequiredTierLevel— minimum bench tier to unlock this recipe (default:0)
Bench Mechanics
Section titled “Bench Mechanics”| Type | How it works |
|---|---|
Crafting | Grid-based. Ingredients consumed in any order. Instant or timed. |
DiagramCrafting | Slot-based with diagrams. Items placed in specific positions. Auto-learns recipes on success. Limited to 1 output. |
StructuralCrafting | 1 input item, select from multiple outputs. Used for block variant crafting. |
Processing | Fuel-based (furnace-like). Runs without the player — see Processing Benches. |
Bench Tiers
Section titled “Bench Tiers”Crafting benches support tier levels. Higher tiers unlock recipes with higher RequiredTierLevel and reduce crafting time via a tier-based modifier. Tier upgrades are handled through the TierUpgradeAction window action.
Material Search
Section titled “Material Search”Benches search for materials in the player’s inventory and nearby chests. The search radius is configurable per-world in WorldConfig:
| Field | Default | Description |
|---|---|---|
BenchMaterialChestHorizontalSearchRadius | 14 | Horizontal block radius (max 14) |
BenchMaterialChestVerticalSearchRadius | 6 | Vertical block radius (max 14) |
BenchMaterialChestLimit | 100 | Max chests to search (max 200) |
Fieldcraft (Pocket Crafting)
Section titled “Fieldcraft (Pocket Crafting)”Fieldcraft lets players craft from their inventory without interacting with a bench block. The client opens it directly (via ClientOpenWindow packet) and the server responds with an UpdateWindow containing the available recipes.
To make a recipe available in Fieldcraft, set the bench requirement to "Id": "Fieldcraft":
{ "Input": [ { "ItemId": "hytale:flint", "Quantity": 2 }, { "ItemId": "hytale:wood_stick", "Quantity": 1 } ], "PrimaryOutput": { "ItemId": "hytale:flint_knife" }, "BenchRequirement": [ { "Type": "Crafting", "Id": "Fieldcraft", "Categories": ["Tools"] } ]}Fieldcraft Categories
Section titled “Fieldcraft Categories”Fieldcraft has its own category system separate from bench categories. Categories are JSON assets that control how recipes are organized in the pocket crafting UI.
Pack location: Server/Item/Category/Fieldcraft/
Base game reference: Assets.zip/Server/Item/Category/Fieldcraft/
Each category has:
| Field | Description |
|---|---|
id | Category identifier |
name | Display name (i18n key) |
icon | Icon reference |
order | Display order in UI |
Categories are synced to clients via the UpdateFieldcraftCategories packet during connection setup. Category removal at runtime is not supported.
Restrictions
Section titled “Restrictions”Fieldcraft differs from bench-based crafting in several ways:
- Instant only —
TimeSecondsis ignored (triggers a validation warning if set) - Player inventory only — no nearby chest scanning for materials
- No tiers —
RequiredTierLevelmust be0(no bench block to upgrade) - No queuing — each craft is processed immediately
KnowledgeRequired and RequiredMemoriesLevel both work with Fieldcraft.
Server-Authoritative
Section titled “Server-Authoritative”Fieldcraft is fully server-authoritative. The client sends a CraftRecipeAction with a recipe ID and quantity — the server validates everything (recipe existence, materials, knowledge, memories level) and fires CraftRecipeEvent before producing output. See Crafting & Recipes for event details.
Processing Benches
Section titled “Processing Benches”Processing benches work differently from other bench types:
- Backed by
ProcessingBenchState, a block-level tickable state - Operates independently of the player being present — place inputs and fuel, close the UI, come back later
- Automatically matches recipes based on current input slot contents
- Consumes fuel over time, processes items when fuel is available. Benches without fuel slots auto-activate.
- Supports extra outputs per fuel consumed (e.g. byproducts)
- Toggled on/off via the
SetActiveActionwindow action
Runtime & Events
Section titled “Runtime & Events”For adding/removing recipes in code, the knowledge system API, and crafting events, see Crafting & Recipes.