Skip to content

EmakiCooking

EmakiCooking 负责世界工位式烹饪。它提供砧板、炒锅、研磨机、蒸锅、烤炉、榨汁机和发酵桶七类工位。重点不是装备成长,而是方块交互、坐标状态、材料输入、阶段进度和分支产物。

基本信息

项目
模块版本4.1.1
API Jaremaki-cooking-api-4.1.1.jar
主类emaki.jiuwu.craft.cooking.EmakiCookingPlugin
主命令/ecooking
别名/ec
硬依赖EmakiCoreLib
软依赖PlaceholderAPI、CraftEngine、ItemsAdder、Nexo、Oraxen、PacketEvents、MMOItems、NeigeItems
最低服务端Paper 1.21.8+(api-version: 1.21.8folia-supported: true
主要权限emakicooking.use(默认 true)、emakicooking.reload(op)、emakicooking.inspect(op)、emakicooking.debug(op)、emakicooking.admin(op)

功能页面

页面内容
命令与权限重载工位配置、检查手持物与目标方块来源、重建工位索引与调试。
工位系统七类工位的方块来源、进度状态、材料缓存、燃料、流体与阶段数据。
配方系统recipes/<station>/ 下按工位划分的配方字段与交互差异。
营养系统营养值累积、阈值边沿触发与持久化机制。
占位符PlaceholderAPI 输出。
CoreLib 动作营养值、阈值复查与配方奖励动作。
API 接入EmakiCookingApi 的版本、插件名与就绪状态探针。
事件 API烹饪与营养流程的 Bukkit 事件。
JavaScript 脚本cooking 脚本模块、产物规则与烹饪完成钩子。

七类工位

工位典型玩法
砧板 chopping_board将食材切割成另一种形态。
炒锅 wok加入材料、控制火候、翻炒、出锅。
研磨机 grinder将物品研磨成粉末或其他材料。
蒸锅 steamer需要燃料、水分或蒸制进度的 GUI / 工位流程。
烤炉 oven加燃料提升火力,在合适火力区间内推进烘烤,并根据烘烤阶段决定结果。
榨汁机 juicer多次压榨材料生成流体,按容器容量盛取饮品。
发酵桶 fermentation_barrel投入多种材料后封存发酵,支持提前收取、正常完成和过度发酵分支。

默认配置目录

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/

目录说明:

目录 / 文件作用
recipes/各工位配方。先从目标工位目录开始改。
gui/steamer.yml蒸锅 GUI。
gui/oven.yml烤炉 GUI。
gui/juicer.yml榨汁机 GUI。
gui/fermentation_barrel.yml发酵桶 GUI。
item_adjustments/对输入或输出物品的额外调整。
nutrition/营养类型定义,随包提供 grain.ymlprotein.ymlvegetable.ymlfruit.ymlsugar.yml。详见营养系统文档。
data/stations/普通方块工位的 YAML fallback 状态目录;方块实体工位优先写入方块 PDC。
data/stations/index/每个世界一个 <world>.idx,记录工位坐标、类型、物品来源和存储后端,用于区块加载恢复。
data/stations-legacy-backup/旧 YAML 状态成功迁移到方块实体 PDC 后的备份目录。
config.yml工位识别、交互、限制、展示实体、燃料和流体容量等全局配置。

世界状态流程

  1. 玩家与工位方块交互。
  2. Cooking 识别该方块是否为配置中的工位。
  3. 读取该坐标的工位状态。
  4. 根据玩家手持物、权限、容器、燃料和配方执行操作。
  5. 更新工位状态,例如加入材料、切割次数、火候、燃烧时间、蒸汽、水分、流体容量或发酵进度。
  6. 条件满足后发放产物、盛取流体、进入下一阶段或执行动作。
  7. 若锚点是方块实体,状态写入方块 PDC 并记录索引;普通方块回退写入 data/stations/ YAML。
  8. 重启或区块加载时,Cooking 根据 data/stations/index/<world>.idx 定位并恢复工位状态。

与外部方块插件的关系

Cooking 可以通过 CraftEngine、ItemsAdder、Nexo 等软依赖识别自定义方块或物品。若这些插件未安装,对应自定义工位不会生效,但原版物品或方块相关功能仍可按配置运行。

展示实体可通过 display_entities.backend 配置:

  • auto:有 PacketEvents 时使用虚拟展示实体,不可用时回退 Bukkit 真实 ItemDisplay。
  • packet_events:优先使用 PacketEvents,加载失败仍回退 Bukkit。
  • bukkit:始终使用 Bukkit 真实 ItemDisplay。

JavaScript 调用

CoreLib JavaScript 脚本中可通过 emaki.module("cooking") 查询 Cooking API 的可用性、版本和就绪状态,并注册配方结果规则与烹饪完成钩子。公开 API 门面本身只暴露身份与就绪探针;配方执行和工位状态变更仍通过 Cooking 自身的方块交互与动作流程完成。

js
function main(ctx) {
  if (emaki.module("cooking").available() && emaki.module("cooking").ready()) {
    emaki.logger.info("Cooking module=" + emaki.module("cooking").pluginName());
  }
  return true;
}

结果规则与完成钩子的完整字段见 JavaScript 脚本