-
Notifications
You must be signed in to change notification settings - Fork 0
Chef's Workbench Recipe Guide
This guide is for players, modpack authors, server owners, and datapack developers who want to add or replace Chef's Workbench recipes with ordinary Minecraft datapacks.
It documents the JSON files that Minecraft loads at runtime. It does not
document this repository's internal content-definitions.json format, and
datapack authors do not need any PowerShell scripts or a development
environment.
- Supported versions
- Version compatibility matrix
- Datapack folder structure
- Installing and reloading
- Shared JSON concepts
- Quick start examples
- Stove cooking
- Pan frying
- Oven baking
- Bamboo steaming
- Pot boiling
- Replacing built-in recipes
- Common errors
- Reporting an issue
Chef's Workbench currently has projects for:
| Minecraft version | Loaders |
|---|---|
| 1.20.1 | Forge and Fabric |
| 1.21.1 | Forge, Fabric, and NeoForge |
| 26.1.2 | Fabric and NeoForge |
Recipe JSON is the same across loaders for the same Minecraft version. The important differences are between Minecraft versions.
Use this table before copying any example:
| Minecraft version | Recipe directory | Item ingredient | Tag ingredient | Result item key |
|---|---|---|---|---|
| 1.20.1 | data/<namespace>/recipes/ |
{ "item": "minecraft:beef" } |
{ "tag": "minecraft:logs_that_burn" } |
"item" |
| 1.21.1 | data/<namespace>/recipe/ |
{ "item": "minecraft:beef" } |
{ "tag": "minecraft:logs_that_burn" } |
"id" |
| 26.1.2 | data/<namespace>/recipe/ |
"minecraft:beef" |
"#minecraft:logs_that_burn" |
"id" |
The custom recipe type remains the same in every version:
chefworkbench:<recipe_type>
The most common compatibility mistakes are:
- using
recipesinstead ofrecipe, or the reverse; - using
"item"in a 1.21.1 or 26.1.2 result; - using
"id"in a 1.20.1 result; - using object ingredients in 26.1.2;
- forgetting
#before a tag ingredient in 26.1.2.
| Recipe type | Machine | Inputs | Outputs | Heat source |
|---|---|---|---|---|
chefworkbench:stove_cooking |
Stove | 1 input and 1 fuel | 1 result and 1 byproduct | Stove fuel slot |
chefworkbench:pan_frying |
Pan | 4 input slots | 4 output slots | Stove directly below |
chefworkbench:oven_baking |
Oven | 8 independent baking slots | Result replaces each input | Oven fuel slot |
chefworkbench:bamboo_steaming |
Bamboo Steamer | 4 independent steaming slots | Result replaces each input | Stove directly below |
chefworkbench:boiling |
Pot | 6 input slots | 1 output slot | Stove directly below |
A datapack must contain pack.mcmeta and a data directory at its root.
Example for Minecraft 1.20.1:
MyChefRecipes/
|-- pack.mcmeta
`-- data/
`-- mychefpack/
`-- recipes/
|-- fried_egg.json
`-- vegetable_soup.json
Example for Minecraft 1.21.1 and 26.1.2:
MyChefRecipes/
|-- pack.mcmeta
`-- data/
`-- mychefpack/
`-- recipe/
|-- fried_egg.json
`-- vegetable_soup.json
The namespace in these examples is mychefpack. You may choose another
lowercase namespace.
The recipe ID comes from the namespace and file path. Do not add an id field
inside the recipe JSON.
This file:
data/mychefpack/recipe/breakfast/fried_egg.json
has this recipe ID:
mychefpack:breakfast/fried_egg
Recipe file and directory names should use only lowercase letters, digits, underscores, hyphens, periods, and forward-slash path segments.
Minecraft 1.20.1 example:
{
"pack": {
"pack_format": 15,
"description": "My Chef's Workbench recipes"
}
}Minecraft 1.21.1 example:
{
"pack": {
"pack_format": 34,
"description": "My Chef's Workbench recipes"
}
}The current Chef's Workbench 26.1.2 projects also bundle resources with
pack_format 34:
{
"pack": {
"pack_format": 34,
"description": "My Chef's Workbench recipes"
}
}pack_format belongs to Minecraft's datapack system, not Chef's Workbench. If
Minecraft reports that the pack format is incompatible, use the format
requested by the exact game release while keeping the Chef's Workbench recipe
syntax described in this guide.
For a single-player world:
- Open the world folder.
- Place the datapack folder or ZIP file in
<world>/datapacks/. - Enter or reopen the world.
- Run
/reload. - Run
/datapack list enabledand confirm that the pack is listed.
For a server:
- Place the datapack folder or ZIP file in
<server>/<world-name>/datapacks/. - Start the server or run
/reload. - Check the server console for recipe parsing errors.
- Run
/datapack list enabled.
When creating a ZIP, pack.mcmeta must be at the ZIP root. This is wrong:
MyChefRecipes.zip
`-- MyChefRecipes/
|-- pack.mcmeta
`-- data/
This is correct:
MyChefRecipes.zip
|-- pack.mcmeta
`-- data/
Minecraft recipe files use strict JSON:
- use double quotes, not single quotes;
- do not add comments;
- do not leave a trailing comma;
- use lowercase
trueandfalse; - keep numeric values unquoted;
- save the file as UTF-8;
- do not repeat the same key in one object.
Invalid:
{
// JSON does not allow comments
"cookingtime": "100",
}
Valid:
{
"cookingtime": 100
}An exact item:
{
"item": "minecraft:beef"
}Any item in an item tag:
{
"tag": "minecraft:logs_that_burn"
}Recipe ingredients use item tags, not block tags.
An exact item:
"minecraft:beef"Any item in an item tag:
"#minecraft:logs_that_burn"The # prefix is required for a tag.
The most portable way to accept multiple alternatives is to create an item tag and use that tag as the ingredient.
For 1.20.1, create:
data/mychefpack/tags/items/raw_meat.json
For 1.21.1 and 26.1.2, create:
data/mychefpack/tags/item/raw_meat.json
Tag contents:
{
"replace": false,
"values": [
"minecraft:beef",
"minecraft:porkchop",
"minecraft:mutton"
]
}Reference it in 1.20.1 or 1.21.1:
{
"tag": "mychefpack:raw_meat"
}Reference it in 26.1.2:
"#mychefpack:raw_meat"Using a tag is recommended instead of relying on version-specific alternative ingredient array syntax.
Minecraft 1.20.1:
{
"item": "minecraft:cooked_beef",
"count": 2
}Minecraft 1.21.1 and 26.1.2:
{
"id": "minecraft:cooked_beef",
"count": 2
}If count is omitted, it defaults to 1.
For reliable cross-version behavior:
- use a positive count;
- do not exceed the result item's maximum stack size;
- use a count of exactly
1for Oven and Bamboo Steamer recipes.
cookingtime is measured in game ticks.
| Ticks | Time at 20 TPS |
|---|---|
1 |
0.05 seconds |
20 |
1 second |
80 |
4 seconds |
100 |
5 seconds |
160 |
8 seconds |
200 |
10 seconds |
600 |
30 seconds |
Use an integer of at least 1.
Actual real-world time may be longer when a server runs below 20 TPS.
experience is the XP stored after a recipe completes:
{
"experience": 0.35
}Use a number greater than or equal to 0. Decimal values are supported.
XP accumulates in the machine. It is awarded when a player takes an output through the machine menu. Automated extraction does not directly award XP to a player.
All item and tag IDs must include a namespace:
minecraft:beef
minecraft:logs_that_burn
anothermod:tomato
anothermod:raw_meats
An item or tag from another mod works only when that mod is installed and the ID exists in the exact game version being used.
These three files define the same fried beef recipe for different Minecraft versions.
File:
data/mychefpack/recipes/fried_beef.json
{
"type": "chefworkbench:pan_frying",
"combined": false,
"ingredients": [
{
"item": "minecraft:beef"
}
],
"results": [
{
"item": "minecraft:cooked_beef"
}
],
"cookingtime": 80,
"experience": 0.35
}File:
data/mychefpack/recipe/fried_beef.json
{
"type": "chefworkbench:pan_frying",
"combined": false,
"ingredients": [
{
"item": "minecraft:beef"
}
],
"results": [
{
"id": "minecraft:cooked_beef"
}
],
"cookingtime": 80,
"experience": 0.35
}File:
data/mychefpack/recipe/fried_beef.json
{
"type": "chefworkbench:pan_frying",
"combined": false,
"ingredients": [
"minecraft:beef"
],
"results": [
{
"id": "minecraft:cooked_beef"
}
],
"cookingtime": 80,
"experience": 0.35
}- Move the file from
recipes/torecipe/. - Keep ingredient objects unchanged.
- Change every result stack key from
"item"to"id". - Check whether item or tag IDs changed in the newer Minecraft version.
- Update
pack.mcmetafor the target game version.
Before:
{
"ingredient": {
"item": "minecraft:beef"
},
"result": {
"item": "minecraft:cooked_beef"
}
}After:
{
"ingredient": {
"item": "minecraft:beef"
},
"result": {
"id": "minecraft:cooked_beef"
}
}- Keep the file in
recipe/. - Keep result stack keys as
"id". - Convert exact item ingredients to strings.
- Convert tag ingredients to strings beginning with
#. - Move custom item tags from
tags/item/only if required by the exact source pack layout; 1.21.1 and 26.1.2 targets in this project both usetags/item/. - Check whether item or tag IDs changed in the newer Minecraft version.
- Update
pack.mcmetafor the target game version.
Before:
{
"ingredient": {
"tag": "minecraft:logs_that_burn"
},
"result": {
"id": "minecraft:charcoal"
}
}After:
{
"ingredient": "#minecraft:logs_that_burn",
"result": {
"id": "minecraft:charcoal"
}
}Recipe type:
chefworkbench:stove_cooking
| Field | Type | Required | Recommended range/default | Meaning |
|---|---|---|---|---|
type |
string | Yes | chefworkbench:stove_cooking |
Selects the Stove serializer |
ingredient |
ingredient | Conditional | Omitted | Input item condition |
fuel |
ingredient | Conditional | Omitted | Fuel item condition |
result |
item stack | Conditional | Omitted | Upper output slot |
byproduct |
item stack | Conditional | Omitted | Lower output slot |
byproduct_chance |
number | No |
0.0 to 1.0
|
Chance to create the byproduct |
cookingtime |
integer | No | 100 |
Processing time in ticks |
experience |
number | No | 0.0 |
Stored XP per completion |
Supported recipe rules:
- Include at least one of
ingredientorfuel. - Include at least one of
resultorbyproduct. - Use
byproduct_chancefrom0.0through1.0. - Use
cookingtimeof at least1. - Use non-negative
experience.
Minecraft 1.20.1 rejects recipes that violate these rules while loading. Newer codecs may accept some invalid combinations, but those combinations are not supported and may behave incorrectly.
Always write byproduct_chance explicitly when a byproduct exists.
- In 1.20.1, an omitted chance defaults to
1.0whenbyproductexists. - In 1.21.1 and 26.1.2, an omitted chance defaults to
0.0.
Writing the field explicitly prevents the same datapack design from changing behavior between versions.
Fields in one Stove recipe use AND logic:
| Fields present | Behavior |
|---|---|
ingredient only |
The input can use any normal Minecraft fuel |
fuel only |
Produces output from each matching fuel item |
ingredient and fuel
|
The input requires that specific fuel |
Outputs are independent:
| Fields present | Behavior |
|---|---|
result only |
Produces the upper result |
byproduct only |
Rolls the lower byproduct |
result and byproduct
|
Produces the result and separately rolls the byproduct |
The fuel field filters an already valid fuel. It does not assign burn time to
an item.
For example, this condition:
{
"item": "minecraft:diamond"
}does not make a diamond burnable. The item must already be accepted as fuel by Minecraft or the installed loader/mod environment.
Minecraft 1.20.1:
{
"type": "chefworkbench:stove_cooking",
"ingredient": {
"item": "minecraft:beef"
},
"result": {
"item": "minecraft:cooked_beef"
},
"cookingtime": 80,
"experience": 0.35
}Minecraft 1.21.1:
{
"type": "chefworkbench:stove_cooking",
"ingredient": {
"item": "minecraft:beef"
},
"result": {
"id": "minecraft:cooked_beef"
},
"cookingtime": 80,
"experience": 0.35
}Minecraft 26.1.2:
{
"type": "chefworkbench:stove_cooking",
"ingredient": "minecraft:beef",
"result": {
"id": "minecraft:cooked_beef"
},
"cookingtime": 80,
"experience": 0.35
}This recipe cooks beef only while a log is the active fuel. It always produces cooked beef and has a 25% chance to produce charcoal.
Minecraft 1.20.1:
{
"type": "chefworkbench:stove_cooking",
"ingredient": {
"item": "minecraft:beef"
},
"fuel": {
"tag": "minecraft:logs_that_burn"
},
"result": {
"item": "minecraft:cooked_beef"
},
"byproduct": {
"item": "minecraft:charcoal"
},
"byproduct_chance": 0.25,
"cookingtime": 100,
"experience": 0.5
}Minecraft 1.21.1:
{
"type": "chefworkbench:stove_cooking",
"ingredient": {
"item": "minecraft:beef"
},
"fuel": {
"tag": "minecraft:logs_that_burn"
},
"result": {
"id": "minecraft:cooked_beef"
},
"byproduct": {
"id": "minecraft:charcoal"
},
"byproduct_chance": 0.25,
"cookingtime": 100,
"experience": 0.5
}Minecraft 26.1.2:
{
"type": "chefworkbench:stove_cooking",
"ingredient": "minecraft:beef",
"fuel": "#minecraft:logs_that_burn",
"result": {
"id": "minecraft:cooked_beef"
},
"byproduct": {
"id": "minecraft:charcoal"
},
"byproduct_chance": 0.25,
"cookingtime": 100,
"experience": 0.5
}If byproduct_chance is greater than 0, the byproduct slot must have space
before the Stove advances the recipe. This check happens even when the final
random roll would not produce a byproduct.
A fuel-only recipe can produce output once for each matching fuel item.
Minecraft 1.20.1:
{
"type": "chefworkbench:stove_cooking",
"fuel": {
"tag": "minecraft:logs_that_burn"
},
"byproduct": {
"item": "minecraft:charcoal"
},
"byproduct_chance": 1.0,
"cookingtime": 100,
"experience": 0.15
}Minecraft 1.21.1:
{
"type": "chefworkbench:stove_cooking",
"fuel": {
"tag": "minecraft:logs_that_burn"
},
"byproduct": {
"id": "minecraft:charcoal"
},
"byproduct_chance": 1.0,
"cookingtime": 100,
"experience": 0.15
}Minecraft 26.1.2:
{
"type": "chefworkbench:stove_cooking",
"fuel": "#minecraft:logs_that_burn",
"byproduct": {
"id": "minecraft:charcoal"
},
"byproduct_chance": 1.0,
"cookingtime": 100,
"experience": 0.15
}Fuel-only behavior:
- the fuel is consumed using its normal burn time;
- no Stove input item is consumed;
- the output roll occurs when that fuel item's burn time ends;
-
cookingtimeis the minimum required burn duration for that fuel item; - a fuel item with burn time shorter than
cookingtimeproduces no output; - each fuel item can roll output no more than once;
- the per-fuel state is saved when the chunk unloads or the game closes;
- if the required output slot is full when fuel ends, the Stove holds the pending fuel output and does not consume the next fuel item.
A fuel-only recipe may run alongside:
- a separate input recipe in the Stove; or
- a Pan, Pot, or Bamboo Steamer using heat from the Stove above it.
Do not put the same charcoal byproduct on both a food recipe and a fuel-only recipe unless two separate chances to produce charcoal are intentional.
Both of these are supported as long as the recipe has an input or fuel condition.
Byproduct-only example for 1.21.1:
{
"type": "chefworkbench:stove_cooking",
"ingredient": {
"item": "minecraft:kelp"
},
"byproduct": {
"id": "minecraft:dried_kelp"
},
"byproduct_chance": 1.0
}Result-only fuel recipe for 1.21.1:
{
"type": "chefworkbench:stove_cooking",
"fuel": {
"item": "minecraft:coal"
},
"result": {
"id": "minecraft:diamond"
},
"cookingtime": 100
}The second example is technically supported but is intentionally unbalanced.
When no custom stove_cooking recipe matches:
- The Stove checks vanilla
minecraft:smelting. - It accepts only a smelting recipe whose result is edible.
- It uses half of the vanilla cooking time, with a minimum of 1 tick.
- It uses the vanilla recipe's XP.
- It produces no byproduct.
A custom Stove recipe may process non-food items. The edible-result restriction applies only to the vanilla fallback.
Stove progress decreases by 2 ticks at a time when:
- fuel runs out;
- the active input or fuel no longer matches;
- a required output slot is full.
The progress eventually returns to zero instead of pausing indefinitely.
Recipe type:
chefworkbench:pan_frying
The Pan must be placed directly above a Stove. It has no fuel slot and requests heat from the Stove below.
| Field | Type | Required | Recommended range/default | Meaning |
|---|---|---|---|---|
type |
string | Yes | chefworkbench:pan_frying |
Selects the Pan serializer |
combined |
boolean | No | false |
Independent pairs or one combined recipe |
ingredients |
array | Yes | 1 to 4 entries | Accepted input ingredients |
results |
array | Yes | 1 to 4 entries | Produced output stacks |
cookingtime |
integer | No | 100 |
Frying time in ticks |
experience |
number | No | 0.0 |
Stored XP per completed job |
Use no more than four ingredients or four results because the Pan has four input and four output slots.
In independent mode, each ingredient is paired with the result at the same array index:
ingredients[0] -> results[0]
ingredients[1] -> results[1]
ingredients[2] -> results[2]
ingredients[3] -> results[3]
The arrays must have equal lengths.
Minecraft 1.20.1:
{
"type": "chefworkbench:pan_frying",
"combined": false,
"ingredients": [
{
"item": "minecraft:beef"
},
{
"item": "minecraft:porkchop"
}
],
"results": [
{
"item": "minecraft:cooked_beef"
},
{
"item": "minecraft:cooked_porkchop"
}
],
"cookingtime": 80,
"experience": 0.35
}Minecraft 1.21.1:
{
"type": "chefworkbench:pan_frying",
"combined": false,
"ingredients": [
{
"item": "minecraft:beef"
},
{
"item": "minecraft:porkchop"
}
],
"results": [
{
"id": "minecraft:cooked_beef"
},
{
"id": "minecraft:cooked_porkchop"
}
],
"cookingtime": 80,
"experience": 0.35
}Minecraft 26.1.2:
{
"type": "chefworkbench:pan_frying",
"combined": false,
"ingredients": [
"minecraft:beef",
"minecraft:porkchop"
],
"results": [
{
"id": "minecraft:cooked_beef"
},
{
"id": "minecraft:cooked_porkchop"
}
],
"cookingtime": 80,
"experience": 0.35
}Independent mode behavior:
- each matching input slot starts its own job;
- the same ingredient can be fried in several slots concurrently;
- one item is consumed per completed job;
- each job uses the output slot in the same column as its input;
- each job awards the configured XP;
- an input slot may hold a stack and process one item after another;
- a completed job waits if its paired output slot cannot accept the result.
Combined mode requires all ingredients and treats them as one shapeless recipe.
Minecraft 1.20.1:
{
"type": "chefworkbench:pan_frying",
"combined": true,
"ingredients": [
{
"item": "minecraft:egg"
},
{
"item": "minecraft:potato"
},
{
"item": "minecraft:porkchop"
}
],
"results": [
{
"item": "minecraft:baked_potato",
"count": 2
},
{
"item": "minecraft:cooked_porkchop"
}
],
"cookingtime": 140,
"experience": 1.0
}Minecraft 1.21.1:
{
"type": "chefworkbench:pan_frying",
"combined": true,
"ingredients": [
{
"item": "minecraft:egg"
},
{
"item": "minecraft:potato"
},
{
"item": "minecraft:porkchop"
}
],
"results": [
{
"id": "minecraft:baked_potato",
"count": 2
},
{
"id": "minecraft:cooked_porkchop"
}
],
"cookingtime": 140,
"experience": 1.0
}Minecraft 26.1.2:
{
"type": "chefworkbench:pan_frying",
"combined": true,
"ingredients": [
"minecraft:egg",
"minecraft:potato",
"minecraft:porkchop"
],
"results": [
{
"id": "minecraft:baked_potato",
"count": 2
},
{
"id": "minecraft:cooked_porkchop"
}
],
"cookingtime": 140,
"experience": 1.0
}Combined mode behavior:
- input slot order does not matter;
- every ingredient entry must match a different input slot;
- repeated ingredients require separate slots;
- a stack of two in one slot cannot satisfy two ingredient entries;
- one item is consumed from every matched input slot;
- all results are produced together;
- results are merged into output slots from left to right;
- the ingredient and result counts do not need to be equal;
- XP is awarded once for the whole combined job;
- if output space is insufficient, the job waits at completion without consuming ingredients.
After an input changes, the Pan waits 10 ticks, approximately 0.5 seconds, before selecting recipes. This gives multi-item insertion time to complete.
Recipes are selected in this order:
- combined recipes before independent recipes;
- recipes with more ingredients before recipes with fewer ingredients;
- tied recipes have no guaranteed order.
Avoid two recipes with identical ingredient conditions but different results. File names do not provide a supported priority system.
- Removing the Stove cancels all Pan jobs and resets their progress.
- Running out of fuel while the Stove remains pauses Pan progress.
- Refueling resumes the existing progress.
Recipe type:
chefworkbench:oven_baking
The Oven has eight independent baking slots and its own fuel slot. Each baking slot accepts one item at a time. The result replaces the ingredient in the same slot.
| Field | Type | Required | Recommended range/default | Meaning |
|---|---|---|---|---|
type |
string | Yes | chefworkbench:oven_baking |
Selects the Oven serializer |
ingredient |
ingredient | Yes | Non-empty | Item accepted by a baking slot |
result |
item stack | Yes | Count exactly 1
|
Item replacing the ingredient |
cookingtime |
integer | No | 200 |
Baking time in ticks |
experience |
number | No | 0.0 |
Stored XP per completed slot |
Minecraft 1.20.1:
{
"type": "chefworkbench:oven_baking",
"ingredient": {
"item": "minecraft:beef"
},
"result": {
"item": "minecraft:cooked_beef"
},
"cookingtime": 200,
"experience": 0.35
}Minecraft 1.21.1:
{
"type": "chefworkbench:oven_baking",
"ingredient": {
"item": "minecraft:beef"
},
"result": {
"id": "minecraft:cooked_beef"
},
"cookingtime": 200,
"experience": 0.35
}Minecraft 26.1.2:
{
"type": "chefworkbench:oven_baking",
"ingredient": "minecraft:beef",
"result": {
"id": "minecraft:cooked_beef"
},
"cookingtime": 200,
"experience": 0.35
}Oven behavior:
- all eight baking slots may run concurrently;
- all active slots share the Oven's current fuel burn;
- each slot holds only one input item;
- each completed result replaces its input in the same slot;
- removing or changing an input resets progress for that slot;
- running out of fuel pauses progress until more fuel is added;
- each completed slot stores the configured XP independently.
When no custom oven_baking recipe matches:
- The Oven checks vanilla
minecraft:smelting. - It accepts only recipes whose result is edible.
- It uses the vanilla cooking time and XP.
- It forces the result to one item.
Custom Oven recipes may process non-food items.
The result remains in the same baking slot. If it is also an ingredient for another Oven recipe, the next recipe may begin automatically.
Avoid cycles such as:
A -> A
A -> B
B -> A
These cycles can consume fuel continuously and may generate unintended XP.
Recipe type:
chefworkbench:bamboo_steaming
The Bamboo Steamer has four independent steaming slots. It must be directly above a Stove and uses heat from that Stove.
| Field | Type | Required | Recommended range/default | Meaning |
|---|---|---|---|---|
type |
string | Yes | chefworkbench:bamboo_steaming |
Selects the Steamer serializer |
ingredient |
ingredient | Yes | Non-empty | Item accepted by a steaming slot |
result |
item stack | Yes | Count exactly 1
|
Item replacing the ingredient |
cookingtime |
integer | No | 200 |
Steaming time in ticks |
experience |
number | No | 0.0 |
Stored XP per completed slot |
Minecraft 1.20.1:
{
"type": "chefworkbench:bamboo_steaming",
"ingredient": {
"item": "minecraft:beef"
},
"result": {
"item": "minecraft:cooked_beef"
},
"cookingtime": 160,
"experience": 0.35
}Minecraft 1.21.1:
{
"type": "chefworkbench:bamboo_steaming",
"ingredient": {
"item": "minecraft:beef"
},
"result": {
"id": "minecraft:cooked_beef"
},
"cookingtime": 160,
"experience": 0.35
}Minecraft 26.1.2:
{
"type": "chefworkbench:bamboo_steaming",
"ingredient": "minecraft:beef",
"result": {
"id": "minecraft:cooked_beef"
},
"cookingtime": 160,
"experience": 0.35
}Bamboo Steamer behavior:
- there is no vanilla smelting fallback;
- all four steaming slots may run concurrently;
- each slot holds one item;
- the result replaces the ingredient in the same slot;
- all slots request heat from the same Stove below;
- running out of fuel pauses progress without decreasing it;
- removing the Stove prevents heating and prevents opening the normal menu through the block;
- removing or changing an input resets progress for that slot.
The automatic recipe-cycle warning from Oven recipes also applies to Bamboo Steamer recipes.
Recipe type:
chefworkbench:boiling
The Pot has six input slots and one output slot. A Boiling recipe is one shapeless combination job.
| Field | Type | Required | Recommended range/default | Meaning |
|---|---|---|---|---|
type |
string | Yes | chefworkbench:boiling |
Selects the Pot serializer |
ingredients |
array | Yes | 1 to 6 entries | Entire shapeless ingredient set |
result |
item stack | Yes | Positive count | Single output stack |
cookingtime |
integer | No | 100 |
Boiling time in ticks |
experience |
number | No | 0.0 |
Stored XP per completed recipe |
Minecraft 1.20.1:
{
"type": "chefworkbench:boiling",
"ingredients": [
{
"item": "minecraft:cooked_rabbit"
},
{
"item": "minecraft:baked_potato"
},
{
"item": "minecraft:carrot"
},
{
"item": "minecraft:red_mushroom"
},
{
"item": "minecraft:bowl"
}
],
"result": {
"item": "minecraft:rabbit_stew"
},
"cookingtime": 200,
"experience": 0.5
}Minecraft 1.21.1:
{
"type": "chefworkbench:boiling",
"ingredients": [
{
"item": "minecraft:cooked_rabbit"
},
{
"item": "minecraft:baked_potato"
},
{
"item": "minecraft:carrot"
},
{
"item": "minecraft:red_mushroom"
},
{
"item": "minecraft:bowl"
}
],
"result": {
"id": "minecraft:rabbit_stew"
},
"cookingtime": 200,
"experience": 0.5
}Minecraft 26.1.2:
{
"type": "chefworkbench:boiling",
"ingredients": [
"minecraft:cooked_rabbit",
"minecraft:baked_potato",
"minecraft:carrot",
"minecraft:red_mushroom",
"minecraft:bowl"
],
"result": {
"id": "minecraft:rabbit_stew"
},
"cookingtime": 200,
"experience": 0.5
}Boiling behavior:
- ingredient order does not matter;
- every ingredient entry requires a separate occupied input slot;
- repeated ingredient entries require separate slots;
- a stack of two in one slot cannot satisfy two ingredient entries;
- the number of occupied input slots must exactly equal the number of recipe ingredients;
- any extra unmatched item prevents the recipe from starting;
- completion consumes one item from every occupied input slot;
- the result is inserted into the single output slot;
- a full or incompatible output slot pauses completion without consuming input;
- running out of fuel pauses progress while the Stove remains below;
- removing the Stove resets Pot progress;
- there is no vanilla fallback.
Custom Stove recipes are checked before the vanilla smelting fallback.
There is no public priority field. The first matching custom recipe supplied
by Minecraft's Recipe Manager is used. File names and alphabetical order are
not a supported priority mechanism.
Avoid overlapping conditions such as:
Recipe A: ingredient is minecraft:beef
Recipe B: ingredient is a tag that contains minecraft:beef
Use a different fuel condition or a non-overlapping ingredient set.
The first matching custom recipe is used. There is no priority field.
The Oven checks custom recipes before its vanilla fallback. The Bamboo Steamer has no fallback.
The Pot uses the matching recipe returned by Minecraft's Recipe Manager. Avoid multiple shapeless recipes that accept the same complete ingredient set.
The Pan guarantees combined recipes before independent recipes and larger ingredient sets before smaller sets. Exact ties remain unordered.
A datapack in your own namespace adds a new recipe:
data/mychefpack/recipe/fried_beef.json
To replace a built-in recipe, use the chefworkbench namespace and the same
recipe path as the built-in recipe, then ensure your datapack has higher
priority:
Minecraft 1.20.1:
data/chefworkbench/recipes/fried_beef.json
Minecraft 1.21.1 and 26.1.2:
data/chefworkbench/recipe/fried_beef.json
Use:
/datapack list enabledto inspect enabled packs and:
/datapack enable "file/MyChefRecipes" lastto place a folder-based pack at high priority. The exact displayed pack name may differ for a ZIP file.
Replacing a recipe requires valid replacement JSON. An empty or intentionally invalid recipe file only creates a load error.
Chef's Workbench can display its custom recipes in supported optional recipe viewer mods.
Current project integrations:
| Minecraft target | Viewer integrations in the project |
|---|---|
| Forge/Fabric 1.20.1 | JEI, EMI, and REI |
| Fabric/NeoForge 1.21.1 | JEI, EMI, and REI |
| Forge 1.21.1 | JEI |
| Fabric/NeoForge 26.1.2 | JEI for single-player worlds |
Viewer mods are optional. Chef's Workbench and datapack recipes still work without a viewer.
No viewer-specific fields are required in recipe JSON. After /reload, reopen
the viewer or the world if its recipe cache does not refresh immediately.
Check:
-
pack.mcmetais at the pack root; - the file is valid JSON;
- a ZIP does not contain an extra outer directory;
- the pack is inside the correct world's
datapacksdirectory.
Check:
- the recipe directory is
recipesfor 1.20.1; - the recipe directory is
recipefor 1.21.1 and 26.1.2; - the recipe file ends with
.json; -
typeuses thechefworkbenchnamespace; - every referenced item and tag exists;
- result stacks use
itemon 1.20.1 andidon newer versions; - 26.1.2 ingredients use strings and tag strings begin with
#.
Typical causes:
- Chef's Workbench is not installed on the server;
- the mod failed to load;
- the
typevalue is misspelled; - the client and server use incompatible mod or Minecraft versions.
Correct examples:
chefworkbench:stove_cooking
chefworkbench:pan_frying
chefworkbench:oven_baking
chefworkbench:bamboo_steaming
chefworkbench:boiling
The item ID is missing, misspelled, or belongs to a mod that is not installed. Confirm the exact ID for the exact Minecraft and mod version.
Check:
- the tag is an item tag;
- the tag file is in
tags/itemson 1.20.1; - the tag file is in
tags/itemon 1.21.1 and 26.1.2; - the tag contains the expected item;
- the namespace is correct;
- 26.1.2 references the tag with a
#prefix.
The matching fuel ingredient must also be a valid burnable fuel. Recipe JSON
does not create a new fuel or assign burn time.
Check:
- the fuel condition matches the consumed fuel item;
-
byproduct_chanceis explicitly greater than0when using a byproduct; - the fuel's burn duration is at least
cookingtime; - the required output slot has space;
- the recipe has at least one output.
Check:
- all combined ingredients are present;
- every ingredient occupies a separate input slot;
- no slot is already reserved by a running job;
- at least 10 ticks have passed since the last input change;
- another combined recipe does not overlap the same ingredients.
Check output space:
- the Stove needs space for its result and any enabled byproduct;
- an independent Pan job needs its paired output column;
- a combined Pan job needs enough total room for all results;
- the Pot needs room in its single output slot.
This is intentional. Each slot processes one item and replaces it with one result. Use several slots for concurrent processing.
Compare the file against the version compatibility matrix at the top of this guide. Folder names, result keys, and ingredient syntax changed between the supported version families.
Before reporting a problem:
- Confirm the exact Minecraft version.
- Confirm the exact loader and loader version.
- Confirm the exact Chef's Workbench mod file.
- Confirm that the pack appears in
/datapack list enabled. - Run
/reload. - Check
latest.logor the server console for JSON errors. - Validate the JSON with a JSON parser or editor.
- Confirm the version-specific recipe directory.
- Confirm the version-specific ingredient syntax.
- Confirm the version-specific result key.
- Confirm every item and item tag exists.
- Test with a new recipe ID in your own namespace.
- Test without unrelated datapacks that replace the same recipe ID.
- Test without unrelated mods when practical.
- Confirm the machine placement and fuel source are correct.
- Confirm all required output slots have space.
Open an issue at:
https://github.com/TamKungZ/ChefWorkbench-MinecraftMod/issues
Include enough information to reproduce the problem. A screenshot alone is not enough to diagnose recipe loading.
## Environment
- Minecraft version:
- Loader: Forge / Fabric / NeoForge
- Loader version:
- Chef's Workbench version or JAR filename:
- Single-player or dedicated server:
- Recipe viewer and version, if installed:
- Other relevant mods:
## Datapack
- Datapack name:
- Folder or ZIP:
- Output of `/datapack list enabled`:
- Recipe file path:
- Recipe ID:
## Recipe JSON
```json
Paste the complete recipe JSON here.
```
## pack.mcmeta
```json
Paste pack.mcmeta here.
```
## Expected Behavior
Describe what should happen.
## Actual Behavior
Describe what happens instead.
## Reproduction Steps
1. Place the machine...
2. Insert...
3. Run...
## Logs
Attach `latest.log` or the dedicated server log.
Include the lines around any recipe, JSON, codec, serializer, or datapack error.
## Additional Information
- Does the issue happen without a recipe viewer?
- Does it happen with only Chef's Workbench and the datapack installed?
- Did `/reload` report an error?
- Screenshots or video:Search latest.log for:
chefworkbench
recipe
serializer
codec
json
datapack
unknown item
unknown registry
failed to parse
Attach the log file when possible instead of pasting thousands of unrelated lines into the issue body.
- Datapack authors edit runtime recipe JSON directly.
- Datapack authors do not use this repository's
content-definitions.json. - Datapack authors do not run
sync-content.ps1orbuild-all.ps1. - Recipe IDs come from file paths, not an
idfield. - Loader choice does not change JSON within the same Minecraft version.
- Minecraft version differences must be followed exactly.
- Use your own namespace for additive recipes.
- Use the
chefworkbenchnamespace and matching path only when intentionally replacing a built-in recipe.