Skip to content

工位系统

Cooking 工位承载配方交互、进度状态、材料缓存、燃料、流体、阶段数据和结果产出。一个工位可以对应方块、GUI 或交互实体;排查时先确认方块来源,再看工位状态和配方匹配。

工位类型

工位主要状态适合玩法
砧板当前输入、切割次数切菜、分割、预处理。
研磨机当前输入、剩余时间磨粉、研磨药材、压碎矿物。
蒸锅当前输入、燃料、水分、蒸汽进度蒸鱼、蒸饭、熟制半成品。
炒锅材料列表、火候、翻炒次数、错误次数需要操作节奏和判定的料理。
烤炉输入、燃烧时间、火力、烘烤阶段需要控温和阶段判定的烘焙。
榨汁机输入、压榨次数、流体 ID、流体容量果汁、饮品、按容器分装。
发酵桶多输入、发酵进度、封存状态、阶段酒、醋、发酵半成品。

配置顺序

  1. 先在 config.yml 里确认工位方块来源和交互方式。
  2. 再到 recipes/<station>/ 写对应工位配方。
  3. 如果工位有 GUI,再调整 gui/*.yml
  4. 使用 /ec inspect hand 检查材料、工具、容器和方块来源。
  5. 使用 /ec debug 排查工位监听、展示实体和持久化状态。

通用配置字段

字段类型说明
idstring工位唯一 ID。
display_namestring菜单和提示中显示的名称。
block_item_sourceslist绑定的方块来源,推荐使用 minecraft-oak_log 这类短横线格式。
interactionsobject每个操作对应的点击方式。
permissionstring使用工位所需权限,部分权限由命令或监听器统一检查。
guistring/object打开的 GUI ID 或内联 GUI 配置。
drop_resultboolean结果是否直接掉落到世界。
only_recipe_itemsboolean是否只允许可匹配配方的物品进入输入。

砧板示例

yaml
stations:
  chopping_board:
    block_item_sources:
      - minecraft-oak_log
    only_recipe_items: true
    interactions:
      place_input: shift_left_click
      process: shift_left_click
      return_input: right_click
    drop_result: true
    interaction_delay_ms: 1000
    tool_item_sources:
      - minecraft-iron_axe

炒锅示例

yaml
stations:
  wok:
    block_item_sources:
      - minecraft-iron_block
    interactions:
      add_ingredient: shift_left_click
      stir: shift_left_click
      serve: shift_left_click
      return_ingredient: shift_left_click
      inspect: shift_right_click
    drop_result: true
    need_bowl: true
    stir_delay_ms: 5000
    timeout_ms: 30000
    spatula_item_sources:
      - minecraft-iron_shovel
    heat_levels:
      - item_sources:
          - minecraft-campfire
        level: 1
      - item_sources:
          - minecraft-magma_block
        level: 2
      - item_sources:
          - minecraft-lava
        level: 3

炒锅热度参数

字段说明
need_bowl是否要求手持碗才能出锅。
stir_delay_ms两次翻炒之间的最小间隔。
timeout_ms锅状态超时后按过火处理。
heat_levels[].item_sources命中的下方方块来源。
heat_levels[].level对应火候等级。

研磨机示例

yaml
stations:
  grinder:
    block_item_sources:
      - minecraft-grindstone
    interactions:
      start: shift_left_click
    drop_result: true
    check_delay_ticks: 20
    actions:
      start:
        - 'playsound sound=block.grindstone.use volume=0.7 pitch=1.0'
      running:
        - 'particle type=SMOKE count=2 offset_x=0.15 offset_y=0.15 offset_z=0.15'
      complete:
        - 'playsound sound=entity.experience_orb.pickup volume=0.8 pitch=1.2'
字段说明
check_delay_ticks后台检查周期(tick)。研磨机放入材料后自动开始,按此间隔检查进度。
interactions.start手动启动研磨的交互方式。

研磨机是最简单的工位——放入材料后自动开始研磨,达到配方时间后产出结果。不需要燃料、水分或手动翻炒。

蒸锅示例

yaml
stations:
  steamer:
    block_item_sources:
      - minecraft-barrel
    interactions:
      open: shift_right_click
      fuel: right_click
      moisture: right_click
    drop_result: true
    heat_item_sources:
      - minecraft-furnace
      - minecraft-smoker
      - minecraft-blast_furnace
    ignite_heat_source: true
    fuels:
      - item_sources:
          - minecraft-stick
        duration_seconds: 5
      - item_sources:
          - minecraft-coal
        duration_seconds: 80
    moisture_rules:
      - input_item_sources:
          - minecraft-water_bucket
        item_sources:
          - minecraft-bucket
        moisture: 120
      - input_item_sources:
          - minecraft-potion
        item_sources:
          - minecraft-glass_bottle
        moisture: 40
    reset_progress_when_steam_empty: true
    steam_production_efficiency: 10
    steam_conversion_efficiency: 1
    steam_consumption_efficiency: 1
字段说明
heat_item_sources蒸锅下方热源方块来源。支持对象写法指定 lit_item_sources 作为点亮替换。
ignite_heat_source加燃料后是否点亮下方热源外观。
fuels[].item_sources燃料物品来源。
fuels[].duration_seconds投入燃料后增加的燃烧时间。
moisture_rules[].input_item_sources加水操作的输入物品来源。
moisture_rules[].item_sources加水后返还的容器物品来源。
moisture_rules[].moisture加水后增加的水分值。
reset_progress_when_steam_empty蒸汽耗尽时是否重置全部进度。
steam_production_efficiency每个周期最多将多少 moisture 转成 steam。
steam_conversion_efficiency每次 steam 消耗换算成多少进度。
steam_consumption_efficiency每个周期的基础 steam 消耗量。

蒸锅的运行逻辑:燃料提供燃烧时间 → 燃烧时将 moisture 转化为 steam → steam 推进蒸制进度。三个 efficiency 参数控制转化速率。水分和燃料都需要玩家手动补充。

烤炉示例

yaml
stations:
  oven:
    block_item_sources:
      - minecraft-smoker
    interactions:
      open: shift_right_click
      fuel: shift_left_click
      inspect: shift_left_click
    drop_result: true
    heat:
      min: 20
      max: 80
      decay_per_second: 5
    fuels:
      - item_sources:
          - minecraft-stick
        duration_seconds: 5
        heat: 10
      - item_sources:
          - minecraft-coal
        duration_seconds: 80
        heat: 35
字段说明
heat.min / heat.max火力处于该区间时才推进烤制计时。
heat.decay_per_second每秒自然衰减的火力。
fuels[].duration_seconds投入燃料后增加的燃烧时间。
fuels[].heat投入燃料后增加的火力。

烤炉的运行状态会记录当前火力、剩余燃烧时间、累计烘烤时间和烘烤阶段。火力过低或过高都会暂停正常烘烤,配方可根据完美火力占比和过烤时间决定最终产物。

榨汁机示例

yaml
stations:
  juicer:
    block_item_sources:
      - minecraft-cauldron
    interactions:
      open: shift_right_click
      process: shift_left_click
      inspect: left_click
      serve: shift_left_click
    drop_result: true
    only_recipe_items: true
    require_container: true
    max_fluid_ml: 1000
    default_serving_ml: 250
    container_item_sources:
      - minecraft-glass_bottle
    drop_completed_result_on_break: false
字段说明
require_container是否要求容器才能盛取结果。
max_fluid_ml榨汁机内部默认最大流体容量。
default_serving_ml默认每次容器盛取需要的流体量。
container_item_sources可作为容器的物品来源。
drop_completed_result_on_break工位被破坏时是否掉落已完成结果。

榨汁机会把压榨产物保存为“流体 ID + 容量”。同一台榨汁机同一时间只应保存一种流体,避免不同饮品混入。容量达到容器所需 serving_ml 后才可盛取。

发酵桶示例

yaml
stations:
  fermentation_barrel:
    block_item_sources:
      - minecraft-barrel
    interactions:
      open: shift_right_click
      start: shift_left_click
      inspect: left_click
      serve: shift_left_click
    drop_result: true
    pause_when_open: true
    require_sealed: true
    only_recipe_items: true
字段说明
pause_when_openGUI 打开时是否暂停发酵进度。
require_sealed是否要求封存后才推进发酵。
only_recipe_items是否只允许配方材料进入输入。

发酵桶适合多输入长周期配方。配方可以定义提前收取比例、正常完成结果和过度发酵结果。

展示实体

Cooking 支持把工位输入、半成品或结果以展示实体形式呈现在世界中。展示实体由 display_entitiesdisplay_adjustments 控制。

yaml
display_entities:
  backend: auto
  view_distance_blocks: 32
  refresh_interval_ticks: 20
字段说明
backend展示后端,通常可使用 autopacket_eventsbukkit
view_distance_blocks玩家可见距离。
refresh_interval_ticks展示刷新间隔。

display_adjustments 可按工位或物品调整偏移、旋转和缩放。配置自定义方块工位时,建议先使用默认值确认展示正常,再微调高度和旋转。

炒锅动画与烫伤

炒锅可配置翻炒动画和过热惩罚,用于强化操作节奏:

yaml
stir_animation:
  duration_ticks: 12
  height: 0.35
  rotation_axis: y
  rotation_degrees: 180
scald_damage:
  enabled: true
  value: 2
字段说明
stir_animation.duration_ticks翻炒动画持续时间。
stir_animation.height动画抛起高度。
stir_animation.rotation_axis旋转轴。
stir_animation.rotation_degrees旋转角度。
scald_damage.enabled是否启用烫伤。
scald_damage.value烫伤伤害值。

如果炒锅用于轻休闲玩法,可以关闭烫伤或降低伤害;如果用于节奏挑战,可以提高错误惩罚并配合失败产物。

状态生命周期

  1. 玩家右键或按配置点击工位。
  2. 模块检查权限、冷却、工位是否被占用以及手持物是否满足交互要求。
  3. 打开 GUI 或进入交互状态。
  4. 玩家放入材料、投入燃料、注入水分、压榨或封存。
  5. 工位记录进度,例如切割次数、研磨剩余时间、蒸汽、火候、流体容量或发酵阶段。
  6. 达成条件后消耗输入并生成结果;部分工位可先进入“完成待领取”状态。
  7. 执行动作并清理临时状态,必要时保留剩余流体、剩余燃料或剩余进度。

多人和重启处理

  • 同一工位应避免被多个玩家同时修改同一份材料缓存。
  • 如果允许协作,需要明确谁获得产物、谁承担材料消耗。
  • 服务器关闭或重载时,应保存关键状态或安全退还材料。
  • 推荐给每个工位位置写入 PDC 或持久化记录,避免方块被破坏后仍残留状态。
  • 对榨汁机、烤炉和发酵桶,额外确认流体容量、烘烤阶段和发酵进度能正确序列化。

工位权限

各工位的操作权限节点:

权限说明
emakicooking.station.oven.use使用烤炉。
emakicooking.station.oven.fuel向烤炉投入燃料。
emakicooking.station.juicer.use使用榨汁机。
emakicooking.station.juicer.press执行压榨操作。
emakicooking.station.juicer.collect盛取榨汁结果。
emakicooking.station.fermentation_barrel.use使用发酵桶。
emakicooking.station.fermentation_barrel.start开始发酵。
emakicooking.station.fermentation_barrel.collect收取发酵结果。

砧板、研磨机、炒锅和蒸锅的权限由通用 permission 字段控制。

GUI 覆盖范围

工位是否有 GUI
蒸锅
烤炉
榨汁机
发酵桶
砧板无(直接交互)
研磨机无(直接交互)
炒锅无(直接交互)