Skip to content

EmakiCooking ​

What the EmakiCooking module does, which stations exist, where the configuration lives, and how to fill in the global settings are described below. EmakiCooking runs cooking on block stations in the world — a station is the block you cook with. It provides seven station types: chopping board, wok, grinder, steamer, oven, juicer, and fermentation barrel. It covers block interaction, coordinate state, ingredient input, staged progress, and result branches, and has nothing to do with equipment progression

Basic information ​

ItemValue
Module version4.3.8
API jaremaki-cooking-api-4.3.6.jar
Main classemaki.jiuwu.craft.cooking.EmakiCookingPlugin
Main command/ecooking
Alias/ec
Hard dependencyEmakiCoreLib
Soft dependenciesPlaceholderAPI, CraftEngine, ItemsAdder, Nexo, Oraxen, PacketEvents, MMOItems, NeigeItems
Minimum serverPaper 26.1+ (api-version: 26.1, folia-supported: true)
Main permissionsemakicooking.use (default true), emakicooking.reload (op), emakicooking.inspect (op), emakicooking.debug (op), emakicooking.admin (op)

Pages ​

PageContents
CommandsReloading station config, inspecting held items and target block sources, rebuilding the station index, and debug
StationsBlock sources, progress state, ingredient cache, fuel, fluids, and stage data for the seven station types
RecipesPer-station recipe fields and interaction differences under recipes/<station>/
NutritionNutrition accumulation, threshold edge triggers, and persistence
PlaceholdersPlaceholderAPI output
CoreLib ActionsNutrition value, threshold re-check, and recipe reward actions
APIThe version, plugin name, and readiness probes of EmakiCookingApi
Event APIBukkit events across the cooking and nutrition flows

Seven station types ​

StationTypical use
Chopping Board chopping_boardCut an ingredient into another form
Wok wokAdd ingredients, control heat, stir, and serve
Grinder grinderGrind items into powders or other materials
Steamer steamerGUI/station flow that uses fuel, moisture, and steam progress
Oven ovenAdd fuel, maintain valid heat, advance baking, and resolve the baking stage
Juicer juicerPress ingredients into fluid and bottle servings by container capacity
Fermentation Barrel fermentation_barrelInsert multiple ingredients and start fermenting, then collect early, normal, or over-fermented results

Default configuration layout ​

text
plugins/EmakiCooking/
├── config.yml
├── recipes/
│   ├── chopping_board/
│   ├── wok/
│   ├── grinder/
│   ├── steamer/
│   ├── oven/
│   ├── juicer/
│   └── fermentation_barrel/
├── gui/
│   ├── steamer.yml
│   ├── oven.yml
│   ├── juicer.yml
│   └── fermentation_barrel.yml
├── item_adjustments/
├── nutrition/
├── data/
│   ├── nutrition/
│   ├── stations/
│   │   └── index/
│   ├── stations-legacy-backup/
│   └── station-tombstones/
└── lang/
PathPurpose
recipes/Recipes grouped by station. Start with the target station folder
gui/steamer.ymlSteamer GUI
gui/oven.ymlOven GUI
gui/juicer.ymlJuicer GUI
gui/fermentation_barrel.ymlFermentation barrel GUI
item_adjustments/Extra adjustments for input or output items
nutrition/Nutrition type definitions. Ships with grain.yml, protein.yml, vegetable.yml, fruit.yml, and sugar.yml. See the nutrition documentation
data/nutrition/Persisted player nutrition data, one <UUID>.yml per player
data/stations/YAML fallback for stations anchored on normal blocks; block-entity stations prefer block PDC
data/stations/index/One <world>.idx per world, recording station coordinates, type, item source, and storage backend for chunk-load recovery
data/stations-legacy-backup/Backup directory for legacy YAML states after successful migration to block-entity PDC
data/station-tombstones/Tombstone markers written when a station is removed, preventing a deleted station from being re-indexed or revived from leftover state
config.ymlGlobal station recognition, interaction, restriction, display, fuel, and fluid settings

Global configuration ​

These are the top-level fields of config.yml; the station and nutrition sections are documented in Stations and Nutrition

FieldTypeRequiredDefaultRangeDescription
versionstringNo"4.3.8"—Config version used for upgrade comparison
languagestringNo"zh_CN"A language file name present under lang/Language file, matching lang/<language>.yml
release_default_databooleanNotruetrue / falseWhether bundled sample data (recipes/, item_adjustments/, nutrition/) is released. config.yml and lang/ are versioned files and gui/ is static, so none of them are gated by this flag
input_rules.only_recipe_itemsbooleanNotruetrue / falseGlobal strict mode; a station section without its own only_recipe_items inherits this value
station.disabled_worldslist<string>No[] (no world disabled)World name, case-insensitiveWorlds where station interaction is disabled globally; when matched, the plugin does not take over block interaction and vanilla behavior is kept. The shipped config.yml keeps only the comment, not the key
yaml
# Only items that can still match the station's recipes may enter the input
input_rules:
  only_recipe_items: true

# Keep vanilla interaction in resource and instance worlds
station:
  disabled_worlds:
    - world_resource

World-state flow ​

  1. A player interacts with a station block
  2. Cooking checks whether the block matches a configured station
  3. The state for that world location is loaded
  4. The module runs the operation according to the held item, permissions, container, fuel, and recipe
  5. Station state is updated, such as input items, cuts, heat, burn time, steam, moisture, fluid amount, or fermentation progress
  6. When requirements are met, the module gives results, bottles fluid, advances a stage, or runs actions
  7. If the anchor is a block entity, state is written to block PDC and indexed; normal blocks fall back to data/stations/ YAML
  8. On restart or chunk load, Cooking uses data/stations/index/<world>.idx to locate and restore station state

External block plugins ​

Cooking can recognize custom blocks and items through CraftEngine, ItemsAdder, and Nexo. If those plugins are not installed, the related custom stations do not work, but vanilla block/item setups can still run

Display entities are controlled by display_entities.backend:

  • auto: use virtual display entities through PacketEvents when available, otherwise fall back to Bukkit ItemDisplay
  • packet_events: prefer PacketEvents and fall back to Bukkit if loading fails
  • bukkit: always use real Bukkit ItemDisplay entities

Configuration tips ​

  • Start with vanilla blocks before connecting CraftEngine / ItemsAdder / Nexo
  • Prefer block-entity anchors for large station counts when IO pressure matters; use /ec inspect block to confirm tile_state=yes and storage_backend=BLOCK_PDC
  • Add one minimal recipe per station first to verify the interaction chain
  • Test persistence after server restart for every stateful station
  • For ovens, test low heat, valid heat, high heat, and overbaking
  • For juicers, test fluid capacity, serving capacity, mixed-fluid protection, and block breaking behavior
  • For fermentation barrels, test early collection, normal completion, over-fermentation, GUI pause behavior, and sealing requirements
  • Focus anti-dupe testing on fast clicking, full inventories, item switching, and block breaking

Troubleshooting ​

Station not recognized ​

Check the block source type, external block plugin, station id, and player permission

Recipe does not trigger ​

Check input item source, amount, station type, current state, container, fuel, and permission

Oven does not progress ​

Check whether the heat is within heat.min and heat.max, whether fuel time remains, and whether bake_time_seconds is valid

Juicer cannot serve ​

Check whether the current fluid amount reaches serving_ml, whether the player is holding an allowed container, and whether the station already contains another fluid type

Fermentation barrel cannot collect ​

Check fermentation progress, sealing state, early collection ratio, and whether the recipe has already moved into the over-fermented branch

State lost after restart ​

Check /ec inspect block for tile_state, storage_backend, pdc_state, indexed, and legacy_yaml. If the coordinate index is stale, run /ec station reindex. For normal-block anchors, also check whether data/stations/ is writable and whether YAML files were removed manually