Skip to content

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

ItemValue
Module version4.1.1
API jaremaki-cooking-api-4.1.1.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 1.21.8+ (api-version: 1.21.8, 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.
JavaScriptThe cooking script module, result rules, and completion hooks.

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, seal and ferment, 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/
│   ├── stations/
│   │   └── index/
│   └── stations-legacy-backup/
└── 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/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.ymlGlobal station recognition, interaction, restriction, display, fuel, and fluid settings.

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.

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.

js
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 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.