Skip to content

Chef's Workbench Recipe Guide

TamKungZ_ edited this page Jun 15, 2026 · 1 revision

Chef's Workbench Datapack 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.

Contents

Supported Versions

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.

Version Compatibility Matrix

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 recipes instead of recipe, 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.

Available Recipe Types

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

Datapack Folder Structure

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.

Recipe IDs

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.

pack.mcmeta

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.

Installing and Reloading a Datapack

For a single-player world:

  1. Open the world folder.
  2. Place the datapack folder or ZIP file in <world>/datapacks/.
  3. Enter or reopen the world.
  4. Run /reload.
  5. Run /datapack list enabled and confirm that the pack is listed.

For a server:

  1. Place the datapack folder or ZIP file in <server>/<world-name>/datapacks/.
  2. Start the server or run /reload.
  3. Check the server console for recipe parsing errors.
  4. 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/

Shared JSON Concepts

JSON Must Be Strict

Minecraft recipe files use strict JSON:

  • use double quotes, not single quotes;
  • do not add comments;
  • do not leave a trailing comma;
  • use lowercase true and false;
  • 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
}

Ingredients in 1.20.1 and 1.21.1

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.

Ingredients in 26.1.2

An exact item:

"minecraft:beef"

Any item in an item tag:

"#minecraft:logs_that_burn"

The # prefix is required for a tag.

Supporting Multiple Alternative Items

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.

Result Stacks

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 1 for Oven and Bamboo Steamer recipes.

Cooking Time

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

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.

Item IDs and Tags

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.

Quick Start Examples

These three files define the same fried beef recipe for different Minecraft versions.

Minecraft 1.20.1

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
}

Minecraft 1.21.1

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
}

Minecraft 26.1.2

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
}

Converting a Recipe Between Versions

1.20.1 to 1.21.1

  1. Move the file from recipes/ to recipe/.
  2. Keep ingredient objects unchanged.
  3. Change every result stack key from "item" to "id".
  4. Check whether item or tag IDs changed in the newer Minecraft version.
  5. Update pack.mcmeta for the target game version.

Before:

{
  "ingredient": {
    "item": "minecraft:beef"
  },
  "result": {
    "item": "minecraft:cooked_beef"
  }
}

After:

{
  "ingredient": {
    "item": "minecraft:beef"
  },
  "result": {
    "id": "minecraft:cooked_beef"
  }
}

1.21.1 to 26.1.2

  1. Keep the file in recipe/.
  2. Keep result stack keys as "id".
  3. Convert exact item ingredients to strings.
  4. Convert tag ingredients to strings beginning with #.
  5. 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 use tags/item/.
  6. Check whether item or tag IDs changed in the newer Minecraft version.
  7. Update pack.mcmeta for 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"
  }
}

Stove Cooking

Recipe type:

chefworkbench:stove_cooking

Fields

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:

  1. Include at least one of ingredient or fuel.
  2. Include at least one of result or byproduct.
  3. Use byproduct_chance from 0.0 through 1.0.
  4. Use cookingtime of at least 1.
  5. 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.

Important Default Difference

Always write byproduct_chance explicitly when a byproduct exists.

  • In 1.20.1, an omitted chance defaults to 1.0 when byproduct exists.
  • 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.

Matching Rules

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

Fuel Restrictions Do Not Create New Fuels

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.

Standard Stove Recipe

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
}

Fuel-Restricted Recipe with a Byproduct

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.

Fuel-Only Recipe

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;
  • cookingtime is the minimum required burn duration for that fuel item;
  • a fuel item with burn time shorter than cookingtime produces 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.

Result-Only and Byproduct-Only Outputs

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.

Stove Vanilla Fallback

When no custom stove_cooking recipe matches:

  1. The Stove checks vanilla minecraft:smelting.
  2. It accepts only a smelting recipe whose result is edible.
  3. It uses half of the vanilla cooking time, with a minimum of 1 tick.
  4. It uses the vanilla recipe's XP.
  5. 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 Behavior

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.

Pan Frying

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.

Fields

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.

Independent Mode: combined: false

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: combined: true

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.

Pan Recipe Selection

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:

  1. combined recipes before independent recipes;
  2. recipes with more ingredients before recipes with fewer ingredients;
  3. 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.

Losing Heat

  • 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.

Oven Baking

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.

Fields

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.

Oven Vanilla Fallback

When no custom oven_baking recipe matches:

  1. The Oven checks vanilla minecraft:smelting.
  2. It accepts only recipes whose result is edible.
  3. It uses the vanilla cooking time and XP.
  4. It forces the result to one item.

Custom Oven recipes may process non-food items.

Avoid Automatic Recipe Cycles

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.

Bamboo Steaming

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.

Fields

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.

Pot Boiling

Recipe type:

chefworkbench:boiling

The Pot has six input slots and one output slot. A Boiling recipe is one shapeless combination job.

Fields

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.

Recipe Priority and Overlap

Stove

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.

Oven and Bamboo Steamer

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.

Pot

The Pot uses the matching recipe returned by Minecraft's Recipe Manager. Avoid multiple shapeless recipes that accept the same complete ingredient set.

Pan

The Pan guarantees combined recipes before independent recipes and larger ingredient sets before smaller sets. Exact ties remain unordered.

Replacing Built-In Chef's Workbench Recipes

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 enabled

to inspect enabled packs and:

/datapack enable "file/MyChefRecipes" last

to 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.

Recipe Viewer Integration

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.

Common Errors

The datapack is not listed

Check:

  • pack.mcmeta is 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 datapacks directory.

The datapack loads, but the recipe does not

Check:

  • the recipe directory is recipes for 1.20.1;
  • the recipe directory is recipe for 1.21.1 and 26.1.2;
  • the recipe file ends with .json;
  • type uses the chefworkbench namespace;
  • every referenced item and tag exists;
  • result stacks use item on 1.20.1 and id on newer versions;
  • 26.1.2 ingredients use strings and tag strings begin with #.

Unknown recipe serializer

Typical causes:

  • Chef's Workbench is not installed on the server;
  • the mod failed to load;
  • the type value 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

Unknown item or Unknown registry key

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.

A tag ingredient never matches

Check:

  • the tag is an item tag;
  • the tag file is in tags/items on 1.20.1;
  • the tag file is in tags/item on 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 Stove recipe exists but the Stove does not ignite

The matching fuel ingredient must also be a valid burnable fuel. Recipe JSON does not create a new fuel or assign burn time.

A fuel-only recipe produces nothing

Check:

  • the fuel condition matches the consumed fuel item;
  • byproduct_chance is explicitly greater than 0 when 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.

The Pan selects an independent recipe

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.

A machine reaches completion but produces nothing

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.

Oven or Bamboo Steamer accepts only one item per slot

This is intentional. Each slot processes one item and replaces it with one result. Use several slots for concurrent processing.

A recipe works in one Minecraft version but not another

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.

Validation Checklist

Before reporting a problem:

  1. Confirm the exact Minecraft version.
  2. Confirm the exact loader and loader version.
  3. Confirm the exact Chef's Workbench mod file.
  4. Confirm that the pack appears in /datapack list enabled.
  5. Run /reload.
  6. Check latest.log or the server console for JSON errors.
  7. Validate the JSON with a JSON parser or editor.
  8. Confirm the version-specific recipe directory.
  9. Confirm the version-specific ingredient syntax.
  10. Confirm the version-specific result key.
  11. Confirm every item and item tag exists.
  12. Test with a new recipe ID in your own namespace.
  13. Test without unrelated datapacks that replace the same recipe ID.
  14. Test without unrelated mods when practical.
  15. Confirm the machine placement and fuel source are correct.
  16. Confirm all required output slots have space.

Reporting a Datapack Recipe Issue

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.

Issue Template

## 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:

Useful Log Search Terms

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.

Final Notes

  • 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.ps1 or build-all.ps1.
  • Recipe IDs come from file paths, not an id field.
  • 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 chefworkbench namespace and matching path only when intentionally replacing a built-in recipe.

Clone this wiki locally