EmakiCooking
EmakiCooking runs world-based cooking stations: chopping board, wok, grinder, steamer, oven, juicer, and fermentation barrel. It is separate from equipment progression. Focus on block interaction, coordinate state, ingredient input, staged progress, fluids, and result branches.
Basic information
| Item | Value |
|---|---|
| Module version | 4.1.1 |
| API jar | emaki-cooking-api-4.1.1.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 1.21.8+ (api-version: 1.21.8, 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. |
| JavaScript | The cooking script module, result rules, and completion hooks. |
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, seal and ferment, then collect early, normal, or over-fermented results. |
Default configuration layout
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/
│ ├── stations/
│ │ └── index/
│ └── stations-legacy-backup/
└── 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/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. |
config.yml | Global station recognition, interaction, restriction, display, fuel, and fluid settings. |
World-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 ItemDisplay.packet_events: prefer PacketEvents and fall back to Bukkit if loading fails.bukkit: always use real Bukkit ItemDisplay entities.
JavaScript access
CoreLib JavaScript scripts can query Cooking through emaki.module("cooking") and register recipe result rules and cooking-complete hooks. The public API facade itself exposes readiness and identity probes only; recipe execution and station state changes still run through Cooking block interactions and action flows.
function main(ctx) {
if (emaki.module("cooking").available() && emaki.module("cooking").ready()) {
emaki.logger.info("Cooking module=" + emaki.module("cooking").pluginName());
}
return true;
}See JavaScript for the full result-rule and complete-hook fields.
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.