Skip to content

EmakiCooking Overview

EmakiCooking is a world-station cooking system that provides runtime management for four station types — Chopping Board, Wok, Grinder, and Steamer — along with a legacy JiuWu's Kitchen configuration import pipeline.

Basic Information

PropertyValue
Version2.2.0
artifactIdemaki-cooking
Main Classemaki.jiuwu.craft.cooking.EmakiCookingPlugin
Root Command/ecooking
Alias/ec
Hard DependencyEmakiCoreLib
Soft DependencyCraftEngine, ItemsAdder, Nexo

信息

EmakiCooking is the only functional module that does not soft-depend on EmakiAttribute. It focuses on world station interactions rather than equipment stat progression.

Core Responsibilities

  • Provides runtime management for four station types: Chopping Board, Wok, Grinder, and Steamer
  • Persists station state by world coordinates via StationStateStore (YAML files saved to data/stations/)
  • Identifies station block sources (vanilla / CraftEngine / ItemsAdder / Nexo) via CookingBlockMatcher and CustomBlockBridge
  • Handles result distribution uniformly via CookingRewardService (drop / give / action chain)
  • Serves as troubleshooting and migration entry points via CookingInspectService and LegacyImportService
  • Builds assembly layer snapshots for output items via CookingLayerSnapshotBuilder
  • Completes the minimum runnable pipeline through default recipes, station configs, and steamer GUI resources

config.yml Full Format

yaml
# Config file version, do not modify manually
config_version: "2.2.0"

# Language file identifier
language: zh_CN

# Whether to release default resources on first startup (recipes, GUI, language files, etc.)
release_default_data: true

# Legacy import settings
legacy_import:
  # Legacy JiuWu's Kitchen data directory name
  old_directory: "old"

# ============================================================
# Display Adjustments
# Controls offset, rotation, and scale of ItemDisplay entities above stations
# ============================================================
display_adjustments:
  # Global defaults — used when stations have no individual configuration
  defaults:
    # Item display (non-block items)
    item:
      offset:
        x: 0.5
        y: 1.02
        z: 0.5
      rotation:
        x: 90       # Fixed angle, or "min-max" range for random
        y: 0
        z: 0
      scale:
        x: 0.5
        y: 0.5
        z: 0.5
    # Block display (block-type items)
    block:
      offset:
        x: 0.5
        y: 1.125
        z: 0.5
      rotation:
        x: 0
        y: 90
        z: 0
      scale:
        x: 0.25
        y: 0.25
        z: 0.25

  # Station-level defaults — override global defaults
  station_defaults:
    wok:
      item:
        offset:
          y: 1.05
        rotation:
          y: "0-360"   # Random rotation range

# ============================================================
# Stations Configuration
# ============================================================
stations:

  # ---- Chopping Board ----
  chopping_board:
    # Station block source (vanilla or craftengine format)
    block_source: "minecraft-oak_slab"
    # Whether sneaking is required to interact
    require_sneaking: true
    # Whether results drop into the world (false = directly given to inventory)
    drop_result: true
    # Whether to check space above the chopping board (must be air)
    space_restriction: false
    # Minimum interval between two interactions (milliseconds)
    interaction_delay_ms: 1000
    # Item sources allowed as cutting tools
    tool_sources:
      - "minecraft-iron_sword"
      - "minecraft-diamond_sword"
      - "minecraft-netherite_sword"
    # Damage dealt to the player when cutting
    cut_damage:
      enabled: true
      chance: 10       # Percentage probability (0-100)
      value: 2         # Damage value

  # ---- Wok ----
  wok:
    block_source: "minecraft-cauldron"
    require_sneaking: true
    drop_result: true
    # Whether a bowl is required when serving
    need_bowl: true
    # Minimum interval between two stirs (milliseconds)
    stir_delay_ms: 5000
    # Timeout (milliseconds), exceeding this without stirring counts as burnt
    timeout_ms: 30000
    # Default output item source when no recipe matches
    invalid_result_source: ""
    # Item sources allowed as spatulas
    spatula_sources:
      - "minecraft-wooden_shovel"
      - "minecraft-stone_shovel"
    # Heat level rules — block below the wok determines heat level
    heat_levels:
      - source: "minecraft-campfire"
        level: 1
      - source: "minecraft-soul_campfire"
        level: 2
    # Scald damage when retrieving ingredients bare-handed
    scald_damage:
      enabled: true
      value: 2
    # Random failure configuration
    failure:
      enabled: true
      chance: 5        # Percentage probability
      output_source: "minecraft-charcoal"

  # ---- Grinder ----
  grinder:
    block_source: "minecraft-lodestone"
    require_sneaking: true
    drop_result: true
    # Background check interval (ticks, 20 ticks = 1 second)
    check_delay_ticks: 20

  # ---- Steamer ----
  steamer:
    block_source: "minecraft-barrel"
    require_sneaking: true
    drop_result: true
    # Heat source blocks (blocks below the steamer)
    heat_sources:
      - "minecraft-campfire"
      - "minecraft-soul_campfire"
    # Whether to auto-ignite the heat source when adding fuel
    ignite_heat_source: true
    # Fuel rules — item source → burn duration (seconds)
    fuels:
      - source: "minecraft-coal"
        duration_seconds: 60
      - source: "minecraft-charcoal"
        duration_seconds: 40
    # Moisture source rules — input item → output item + moisture value
    moisture_sources:
      - input_source: "minecraft-water_bucket"
        output_source: "minecraft-bucket"
        moisture: 100
    # Whether to reset cooking progress when steam is depleted
    reset_progress_when_steam_empty: true
    # Amount of moisture converted to steam per tick
    steam_production_efficiency: 10
    # Amount of steam consumed per ingredient per tick
    steam_conversion_efficiency: 1
    # Base steam consumption per tick
    steam_consumption_efficiency: 1

Default Content

Content TypeCountDescription
Cooking Recipes4cut_carrot, bone_meal, simple_stew, steamed_cod

Default Resource Directory

File/DirectoryDescription
config.ymlMain configuration
recipes/chopping_board/Chopping board recipes
recipes/wok/Wok recipes
recipes/grinder/Grinder recipes
recipes/steamer/Steamer recipes
gui/steamer.ymlSteamer GUI configuration
item_adjustments/Item display adjustment configs
lang/Language files
data/stations/Runtime station state
old/Legacy data directory
backup/Import backup directory

item_adjustments Format

Item display adjustment files are placed in the item_adjustments/ directory. Each file corresponds to a display override for a specific item source:

yaml
# item_adjustments/craftengine-custom_food.yml
source: "craftengine-custom_food"

# Global adjustment (shared across all stations)
adjustment:
  offset:
    x: 0.5
    y: 1.1
    z: 0.5
  rotation:
    x: 90
    y: "0-360"
    z: 0
  scale: 0.4    # Scalar notation, uniform scaling on all three axes

# Station-level overrides (higher priority than adjustment)
stations:
  chopping_board:
    offset:
      y: 1.0
    scale: 0.3
  wok:
    rotation:
      y: 45

Tip

Each axis of rotation can be a fixed value (e.g., 90) or a range (e.g., "0-360"). The range notation randomly picks a value each time a display entity is spawned. scale supports scalar notation (uniform on all axes) or object notation (specifying x/y/z separately).

Released under the GPL-3.0 License