English
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
| Item | Value |
|---|---|
| Module version | 4.3.8 |
| API jar | emaki-cooking-api-4.3.6.jar |
| Main class | emaki.jiuwu.craft.cooking.EmakiCookingPlugin |
| Main command | /ecooking |
| Alias | /ec |
| Hard dependency | EmakiCoreLib |
| Soft dependencies | PlaceholderAPI, CraftEngine, ItemsAdder, Nexo, Oraxen, PacketEvents, MMOItems, NeigeItems |
| Minimum server | Paper 26.1+ (api-version: 26.1, folia-supported: true) |
| Main permissions | emakicooking.use (default true), emakicooking.reload (op), emakicooking.inspect (op), emakicooking.debug (op), emakicooking.admin (op) |
Pages
| Page | Contents |
|---|---|
| Commands | Reloading station config, inspecting held items and target block sources, rebuilding the station index, and debug |
| Stations | Block sources, progress state, ingredient cache, fuel, fluids, and stage data for the seven station types |
| Recipes | Per-station recipe fields and interaction differences under recipes/<station>/ |
| Nutrition | Nutrition accumulation, threshold edge triggers, and persistence |
| Placeholders | PlaceholderAPI output |
| CoreLib Actions | Nutrition value, threshold re-check, and recipe reward actions |
| API | The version, plugin name, and readiness probes of EmakiCookingApi |
| Event API | Bukkit events across the cooking and nutrition flows |
Seven station types
| Station | Typical use |
|---|---|
Chopping Board chopping_board | Cut an ingredient into another form |
Wok wok | Add ingredients, control heat, stir, and serve |
Grinder grinder | Grind items into powders or other materials |
Steamer steamer | GUI/station flow that uses fuel, moisture, and steam progress |
Oven oven | Add fuel, maintain valid heat, advance baking, and resolve the baking stage |
Juicer juicer | Press ingredients into fluid and bottle servings by container capacity |
Fermentation Barrel fermentation_barrel | Insert 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/| Path | Purpose |
|---|---|
recipes/ | Recipes grouped by station. Start with the target station folder |
gui/steamer.yml | Steamer GUI |
gui/oven.yml | Oven GUI |
gui/juicer.yml | Juicer GUI |
gui/fermentation_barrel.yml | Fermentation 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.yml | Global 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
| Field | Type | Required | Default | Range | Description |
|---|---|---|---|---|---|
version | string | No | "4.3.8" | — | Config version used for upgrade comparison |
language | string | No | "zh_CN" | A language file name present under lang/ | Language file, matching lang/<language>.yml |
release_default_data | boolean | No | true | true / false | Whether 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_items | boolean | No | true | true / false | Global strict mode; a station section without its own only_recipe_items inherits this value |
station.disabled_worlds | list<string> | No | [] (no world disabled) | World name, case-insensitive | Worlds 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_resourceWorld-state flow
- A player interacts with a station block
- Cooking checks whether the block matches a configured station
- The state for that world location is loaded
- The module runs the operation according to the held item, permissions, container, fuel, and recipe
- Station state is updated, such as input items, cuts, heat, burn time, steam, moisture, fluid amount, or fermentation progress
- When requirements are met, the module gives results, bottles fluid, advances a stage, or runs actions
- If the anchor is a block entity, state is written to block PDC and indexed; normal blocks fall back to
data/stations/YAML - On restart or chunk load, Cooking uses
data/stations/index/<world>.idxto 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 ItemDisplaypacket_events: prefer PacketEvents and fall back to Bukkit if loading failsbukkit: 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 blockto confirmtile_state=yesandstorage_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