Stations
Cooking stations store interaction state, input items, progress, fuel/fluid/stage data, and output handling. A station usually maps to a world block, a GUI, or a custom interaction entity.
Station types
| Station | Main state | Best for |
|---|---|---|
| Chopping Board | Input item and cut count | Slicing and preprocessing. |
| Grinder | Input item and remaining time | Grinding powders or herbs. |
| Steamer | Input item, fuel, moisture, and steam progress | Steamed food and cooked intermediates. |
| Wok | Ingredients, heat, stir count, mistakes | Timing-based cooking gameplay. |
| Oven | Input, burn time, heat, and baking stage | Baking with heat control and stage resolution. |
| Juicer | Input, press count, fluid id, and fluid amount | Juice and drinks bottled by serving capacity. |
| Fermentation Barrel | Multiple inputs, progress, sealed state, and stage | Wine, vinegar, and fermented intermediates. |
Common config fields
| Field | Description |
|---|---|
id | Unique station id. |
display_name | Name shown in menus and messages. |
block_item_sources | Block sources bound to the station. Prefer dash-style ids such as minecraft-oak_log. |
interactions | Click mapping for each station operation. |
permission | Permission required to use the station. Some checks are centralized in commands/listeners. |
gui | GUI id or inline GUI config. |
drop_result | Whether results are dropped directly in the world. |
only_recipe_items | Whether only items that can match a recipe may enter the input. |
Chopping board example
stations:
chopping_board:
block_item_sources:
- minecraft-oak_log
only_recipe_items: true
interactions:
place_input: shift_left_click
process: shift_left_click
return_input: right_click
drop_result: true
interaction_delay_ms: 1000
tool_item_sources:
- minecraft-iron_axeWok example
stations:
wok:
block_item_sources:
- minecraft-iron_block
interactions:
add_ingredient: shift_left_click
stir: shift_left_click
serve: shift_left_click
return_ingredient: shift_left_click
inspect: shift_right_click
drop_result: true
need_bowl: true
stir_delay_ms: 5000
timeout_ms: 30000
spatula_item_sources:
- minecraft-iron_shovel
heat_levels:
- item_sources:
- minecraft-campfire
level: 1
- item_sources:
- minecraft-magma_block
level: 2
- item_sources:
- minecraft-lava
level: 3| Field | Description |
|---|---|
need_bowl | Whether a bowl is required to serve. |
stir_delay_ms | Minimum delay between two stirs. |
timeout_ms | Treat the wok as overcooked after this timeout. |
heat_levels[].item_sources | Block sources below the wok. |
heat_levels[].level | Heat level produced by those blocks. |
Grinder example
stations:
grinder:
block_item_sources:
- minecraft-grindstone
interactions:
start: shift_left_click
drop_result: true
check_delay_ticks: 20| Field | Description |
|---|---|
check_delay_ticks | Background check interval (ticks). The grinder starts automatically after input and checks progress at this interval. |
interactions.start | Interaction type to manually start grinding. |
The grinder is the simplest station — place an input item, it starts grinding automatically, and produces a result when the recipe time is reached. No fuel, moisture, or manual stirring required.
Steamer example
stations:
steamer:
block_item_sources:
- minecraft-barrel
interactions:
open: shift_right_click
fuel: right_click
moisture: right_click
drop_result: true
heat_item_sources:
- minecraft-furnace
- minecraft-smoker
- minecraft-blast_furnace
ignite_heat_source: true
fuels:
- item_sources:
- minecraft-stick
duration_seconds: 5
- item_sources:
- minecraft-coal
duration_seconds: 80
moisture_rules:
- input_item_sources:
- minecraft-water_bucket
item_sources:
- minecraft-bucket
moisture: 120
- input_item_sources:
- minecraft-potion
item_sources:
- minecraft-glass_bottle
moisture: 40
reset_progress_when_steam_empty: true
steam_production_efficiency: 10
steam_conversion_efficiency: 1
steam_consumption_efficiency: 1| Field | Description |
|---|---|
heat_item_sources | Block sources below the steamer that act as heat sources. Supports object format with lit_item_sources for lit-state replacement. |
ignite_heat_source | Whether adding fuel lights the heat source block appearance. |
fuels[].item_sources | Fuel item sources. |
fuels[].duration_seconds | Burn time added by the fuel. |
moisture_rules[].input_item_sources | Input item sources for adding moisture. |
moisture_rules[].item_sources | Container item returned after adding moisture. |
moisture_rules[].moisture | Moisture value added. |
reset_progress_when_steam_empty | Whether to reset all progress when steam runs out. |
steam_production_efficiency | Max moisture converted to steam per cycle. |
steam_conversion_efficiency | Progress gained per steam consumed. |
steam_consumption_efficiency | Base steam consumed per cycle. |
Steamer logic: fuel provides burn time → burning converts moisture into steam → steam advances steaming progress. The three efficiency parameters control conversion rates. Both moisture and fuel must be manually replenished by the player.
Oven example
stations:
oven:
block_item_sources:
- minecraft-smoker
interactions:
open: shift_right_click
fuel: shift_left_click
inspect: shift_left_click
drop_result: true
heat:
min: 20
max: 80
decay_per_second: 5
fuels:
- item_sources:
- minecraft-stick
duration_seconds: 5
heat: 10
- item_sources:
- minecraft-coal
duration_seconds: 80
heat: 35| Field | Description |
|---|---|
heat.min / heat.max | Baking only advances while heat stays in this range. |
heat.decay_per_second | Natural heat decay per second. |
fuels[].duration_seconds | Burn time added by the fuel. |
fuels[].heat | Heat added by the fuel. |
The oven runtime records current heat, remaining burn time, accumulated baking time, and baking stage. Heat that is too low or too high pauses normal baking. Recipes can use perfect heat ratio and overbake time to resolve the final result.
Juicer example
stations:
juicer:
block_item_sources:
- minecraft-cauldron
interactions:
open: shift_right_click
process: shift_left_click
inspect: left_click
serve: shift_left_click
drop_result: true
only_recipe_items: true
require_container: true
max_fluid_ml: 1000
default_serving_ml: 250
container_item_sources:
- minecraft-glass_bottle
drop_completed_result_on_break: false| Field | Description |
|---|---|
require_container | Whether a container is required to serve. |
max_fluid_ml | Default internal fluid capacity in milliliters. |
default_serving_ml | Default fluid amount consumed per serving. |
container_item_sources | Items accepted as containers. |
drop_completed_result_on_break | Whether completed results are dropped when the station block is broken. |
The juicer stores output as a fluid id plus an amount. One juicer should only contain one fluid at a time to prevent mixing different drinks. The fluid amount must reach serving_ml before a serving can be bottled.
Fermentation barrel example
stations:
fermentation_barrel:
block_item_sources:
- minecraft-barrel
interactions:
open: shift_right_click
start: shift_left_click
inspect: left_click
serve: shift_left_click
drop_result: true
pause_when_open: true
require_sealed: true
only_recipe_items: true| Field | Description |
|---|---|
pause_when_open | Whether fermentation pauses while the GUI is open. |
require_sealed | Whether the barrel must be sealed before progress advances. |
only_recipe_items | Whether only recipe ingredients can be inserted. |
Fermentation barrels are suited for long-duration, multi-input recipes. Recipes can define early collection, normal completion, and over-fermented results.
Lifecycle
- The player interacts with the station using a configured click.
- The module checks permission, cooldown, occupancy, and held-item requirements.
- A GUI or interaction state is opened.
- The player inserts items, adds fuel/moisture, presses, or seals the station.
- The station tracks progress such as cuts, grinding time, steam, heat, fluid amount, or fermentation stage.
- Inputs are consumed and results are generated, or the station enters a completed-but-unclaimed state.
- Actions run and temporary state is cleared. Remaining fluid, fuel, or progress may be kept.
Safety notes
- Avoid multiple players mutating the same item cache at the same time.
- If cooperation is allowed, define who receives results and who pays the inputs.
- On shutdown or reload, save important state or safely return materials.
- Store station location data persistently so broken blocks do not leave stale state behind.
- For juicers, ovens, and fermentation barrels, verify fluid amount, baking stage, and fermentation progress serialization.
Testing checklist
- Players without permission cannot open or use the station.
- Breaking a station returns, drops, or processes materials according to configuration.
- Closing a GUI leaves the state as expected.
- Full inventory, reload, death, and disconnect do not duplicate or delete items.
- Multiple players clicking the same station do not create race conditions.
- Oven results are correct for low heat, valid heat, high heat, and overbaking.
- Juicer behavior is correct for insufficient fluid, enough fluid, wrong containers, and mixed-fluid attempts.
- Fermentation behavior is correct for early collection, normal completion, over-fermentation, and GUI pause.