Compatibility
Minecraft: Java Edition
Platforms
Tags
Creators
Details
EmakiCooking brings immersive cooking gameplay to your server. Seven different world stations each feature unique interaction methods and recipe structures. Players interact directly with blocks in the world to complete cooking processes. Floating display entities visualize the cooking progress, heat source blocks auto-ignite for atmosphere, and station states persist through server restarts.
Core Features
Seven World Stations
Cutting Board (CHOPPING_BOARD)
Used to slice raw materials into intermediates. Default block: Oak Log (customizable).
- Interaction: Shift+left-click to place ingredient, shift+left-click with knife to cut, right-click to retrieve
- Cut count: Each recipe defines
cuts_required— player must click that many times - Tool durability: Each cut consumes
tool_damagedurability from the held tool - Cut injury: Configurable chance to damage the player (default 10% chance, 2 damage)
- Multiple outputs:
result.outputssupports a list for multi-product recipes - Interaction cooldown:
interaction_delay_msprevents spam-clicking (default 1000ms)
Wok (WOK)
The most complex interactive station — players must stir-fry ingredients in the correct order. Default block: Iron Block.
- Heat levels: Determined by the block below the wok (Campfire=1, Magma Block=2, Lava=3, customizable)
- Ingredient input: Shift+left-click to add ingredients one by one, each with its own
stir_rule - Stir rules: Hold spatula and shift+left-click to stir; recipe defines
stir_total(min-max range) andfault_tolerance - Timeout:
timeout_ms(default 30s) — exceeding this treats the dish as overcooked - Four result branches: success, undercooked, overcooked, invalid
- Global failure chance:
failure.chance(default 5%) produces a failure item regardless of recipe - Scald damage:
scald_damagecan hurt the player during cooking - Bowl requirement:
need_bowlcan require holding a bowl to serve - Stir cooldown:
stir_delay_msminimum interval between stirs (default 5000ms)
Grinder (GRINDER)
Automated time-based station that grinds materials. Default block: Grindstone.
- Interaction: Shift+left-click to insert material and start grinding
- Grind time:
grind_time_secondsper recipe - Auto output: Products drop automatically when complete
- Background polling: Plugin checks progress every
check_delay_ticks(default 20 ticks) - Multiple outputs:
result.outputssupports multiple product types
Steamer (STEAMER)
Fuel-driven station with GUI, requiring both fuel and moisture management. Default block: Barrel.
- GUI interface: Shift+right-click to open, place ingredients inside
- Fuel system: Right-click to add fuel (sticks=5s, coal/charcoal=80s)
- Moisture system: Right-click to add water (water bucket=+120, potion=+40)
- Steam efficiency:
steam_production_efficiency,steam_conversion_efficiency, andsteam_consumption_efficiencycontrol the steam cycle - Recipe requirement:
required_steamdefines steam needed to complete - Progress reset: When
reset_progress_when_steam_emptyis true, running out of steam resets all progress - Heat source block below required (furnace, smoker, blast furnace); auto-ignites when fuel is added
Oven (OVEN)
Temperature-sensitive station where players must maintain heat within range. Default block: Smoker.
- GUI interface: Shift+right-click to open, place ingredients inside
- Temperature control: Heat must stay between
heat.min(20) andheat.max(80) to progress baking - Heat decay: Temperature drops by
decay_per_second(default 5) each second - Fuel: Shift+left-click to add fuel, increasing both burn time and heat value (coal: +80s, +35 heat)
- Perfect zone: Recipe defines
perfect_heatrange; maintainingperfect_required_ratiotime in zone yields perfect result - Three outcomes: perfect bake, normal bake, burnt (after
overbake_seconds) - Inspect: Shift+left-click to check current temperature and progress
Juicer (JUICER)
Press-based station with fluid accumulation mode. Default block: Cauldron.
- GUI interface: Shift+right-click to open, place fruit inside
- Pressing: Shift+left-click to press;
presses_requiredper recipe - Fluid mode: Each press produces
fluid.amount_mlof liquid, stored internally (maxmax_fluid_ml, default 1000ml) - Container collection: When
require_containeris true, hold a container (glass bottle) to collectserving_ml(default 250ml) per use - Direct output mode: When
require_containeris false, product drops directly - Strict input:
only_recipe_itemsrestricts input to recipe-matching items only
Fermentation Barrel (FERMENTATION_BARREL)
Long-duration station with early collection and over-fermentation mechanics. Default block: Barrel.
- GUI interface: Shift+right-click to open, place ingredients inside
- Start fermentation: Shift+left-click to seal and begin;
require_sealedmust be true - Fermentation time:
fermentation_time_secondsfor normal completion - Early collection (partial product): After reaching
early_collect.min_progress_ratio(e.g. 50%), collect a partial product - Normal completion: Collect at the right time for the intended product
- Over-fermentation (degraded product): After
over_time_seconds, product degrades (e.g. wine becomes vinegar) - Progress persistence: Fermentation continues through server restarts using real-time calculation
- Pause on open:
pause_when_openpauses progress while GUI is open
Floating Display Entity System
Ingredients display as floating entities above stations, giving players visual feedback on what's being cooked.
- Three backend modes:
auto(recommended): Uses PacketEvents virtual entities when available, falls back to Bukkitpacket_events: Forces PacketEvents mode, falls back to Bukkit on failurebukkit: Always uses real Bukkit ItemDisplay entities
- PacketEvents advantage: Virtual entities don't count toward server entity limits, no collision overhead
- Bukkit advantage: No extra dependencies needed, better compatibility
- View distance:
view_distance_blocks(default 48) controls how far players can see display entities - Refresh interval:
refresh_interval_ticks(default 20) controls update frequency - Wok layout:
wok.layout_radiuscontrols circular arrangement of multiple ingredients
Heat Source Block Ignition
Stations requiring heat (wok, steamer) automatically manage heat source block states:
- Enable via
ignite_heat_source: truein station config - Auto-ignites the block below when cooking starts, restores original state when cooking ends
- Works with vanilla blocks that have a lit state (campfire, furnace, smoker, blast furnace)
- Supports custom blocks from CraftEngine, ItemsAdder, and Nexo via
lit_item_sourcesmapping:- CraftEngine:
item_sources: [craftengine-emaki:heater]+lit_item_sources: [craftengine-emaki:heater_lit] - ItemsAdder:
item_sources: [itemsadder-emaki:heater]+lit_item_sources: [itemsadder-emaki:heater_lit] - Nexo:
item_sources: [nexo-heater]+lit_item_sources: [nexo-heater_lit]
- CraftEngine:
- Allows resource pack creators to build custom stoves with fire on/off visuals
Item Display Adjustments
Fine-tune how items appear above stations via display_adjustments:
- Global defaults:
defaults.itemanddefaults.blockcontrol item-type and block-type display entitiesoffset: X/Y/Z position (Y controls hover height; item default 1.02, block default 1.125)rotation: X/Y/Z angles (item default X=90 for flat display; supports range syntax like "0.0-90.0")scale: X/Y/Z scale factors (item default 0.5, block default 0.25)
- Per-station overrides:
station_defaultsallows different display params per station type - All values hot-reloadable — no server restart needed
Station State Persistence
Station states fully preserved through server restarts:
- Storage: Station data saved in
plugins/EmakiCooking/data/ - Auto-load: All station states restored on startup, including in-progress items and progress
- Fermentation: Uses real-time calculation — offline time counts toward fermentation
- Invalid cleanup: Stations with broken/missing blocks are automatically cleaned up
- Display recovery: Display entities regenerate when players enter view range
Recipe System
Recipes are YAML files in plugins/EmakiCooking/recipes/<station_type>/:
- Common fields:
id: Unique recipe identifier (required); filename serves as IDdisplay_name: Display name for messagespermission: Permission node required to use this recipe (optional)result.actions: Action list executed on completion (send messages, run commands, give XP, etc.)
- Item source formats:
minecraft-item,craftengine-ns:item,itemsadder-ns:item,nexo-item - Supports multiple inputs and outputs
- Hot-reloadable via
/ec reload - Strict mode:
only_recipe_itemsrestricts input to recipe-matching items only
Commands
| Command | Description |
|---|---|
/ec help |
Display help information |
/ec reload |
Reload config, language files, and all recipes |
/ec inspect hand |
Inspect the held item's CoreLib source identifier (debug) |
Aliases: /ecooking and /ec both work.
Permissions
| Permission | Default | Description |
|---|---|---|
emakicooking.use |
all | Use basic commands |
emakicooking.reload |
op | Reload configuration |
emakicooking.inspect |
op | Inspect item sources |
emakicooking.admin |
op | Full admin access (includes all above) |
emakicooking.station.chopping_board.use |
all | Use cutting board |
emakicooking.station.chopping_board.cut |
all | Cut on board |
emakicooking.station.wok.use |
all | Use wok |
emakicooking.station.wok.stir |
all | Stir ingredients |
emakicooking.station.wok.serve |
all | Serve from wok |
emakicooking.station.grinder.use |
all | Use grinder |
emakicooking.station.steamer.use |
all | Use steamer |
emakicooking.station.steamer.fuel |
all | Add steamer fuel |
emakicooking.station.steamer.moisture |
all | Add steamer moisture |
emakicooking.station.oven.use |
all | Use oven |
emakicooking.station.oven.fuel |
all | Add oven fuel |
emakicooking.station.juicer.use |
all | Use juicer |
emakicooking.station.juicer.press |
all | Press juice |
emakicooking.station.juicer.collect |
all | Collect juice |
emakicooking.station.fermentation_barrel.use |
all | Use fermenter |
emakicooking.station.fermentation_barrel.start |
all | Start fermentation |
emakicooking.station.fermentation_barrel.collect |
all | Collect fermented product |
Recipes can also define per-recipe permissions (e.g. emakicooking.recipe.apple_cider).
PAPI Placeholders
Requires PlaceholderAPI as a soft dependency. Prefix: %emakicooking_<placeholder>%.
| Placeholder | Description |
|---|---|
recipe_count |
Total recipe count across all stations |
recipe_count_chopping_board |
Cutting board recipe count |
recipe_count_wok |
Wok recipe count |
recipe_count_grinder |
Grinder recipe count |
recipe_count_steamer |
Steamer recipe count |
recipe_count_oven |
Oven recipe count |
recipe_count_juicer |
Juicer recipe count |
recipe_count_fermentation_barrel |
Fermenter recipe count |
Ideal For
- RPG / Survival servers — immersive life-skill gameplay beyond combat
- Custom item servers — pairs with CraftEngine, ItemsAdder, or Nexo for full food production chains
- Economy servers — cooking outputs as tradeable goods add economic depth
- Casual community servers — fun cooking interactions for all player types
Requirements
| Item | Requirement |
|---|---|
| Server | Spigot / Paper 1.21+ |
| Java | 21+ |
| Hard Dependencies | EmakiCoreLib |
| Soft Dependencies | PacketEvents (virtual display entities), PlaceholderAPI (placeholders), CraftEngine / ItemsAdder / Nexo (custom block & item support) |
View Full Wiki Documentation | Join Discord Community | QQ Group


