EmakiCooking
EmakiCooking 负责世界工位式烹饪。它提供砧板、炒锅、研磨机、蒸锅、烤炉、榨汁机和发酵桶七类工位。重点不是装备成长,而是方块交互、坐标状态、材料输入、阶段进度和分支产物。
基本信息
| 项目 | 值 |
|---|---|
| 模块版本 | 4.1.1 |
| API Jar | emaki-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.8,folia-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.yml、protein.yml、vegetable.yml、fruit.yml、sugar.yml。详见营养系统文档。 |
data/stations/ | 普通方块工位的 YAML fallback 状态目录;方块实体工位优先写入方块 PDC。 |
data/stations/index/ | 每个世界一个 <world>.idx,记录工位坐标、类型、物品来源和存储后端,用于区块加载恢复。 |
data/stations-legacy-backup/ | 旧 YAML 状态成功迁移到方块实体 PDC 后的备份目录。 |
config.yml | 工位识别、交互、限制、展示实体、燃料和流体容量等全局配置。 |
世界状态流程
- 玩家与工位方块交互。
- Cooking 识别该方块是否为配置中的工位。
- 读取该坐标的工位状态。
- 根据玩家手持物、权限、容器、燃料和配方执行操作。
- 更新工位状态,例如加入材料、切割次数、火候、燃烧时间、蒸汽、水分、流体容量或发酵进度。
- 条件满足后发放产物、盛取流体、进入下一阶段或执行动作。
- 若锚点是方块实体,状态写入方块 PDC 并记录索引;普通方块回退写入
data/stations/YAML。 - 重启或区块加载时,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 脚本。