模块系统
把通用的布局、脚本、效果拆到 modules/ 目录下,用 use: 复用,避免多个配方文件重复写相同的内容。
引用模块
yaml
# recipes/enhance.yml
use:
- "modules/gui/base_gui"
- "modules/logic/base_enhance"
- "modules/effects/common_effects"use 按顺序引入模块,后面的字段可以覆盖前面的同名字段。路径相对于 ItemMaster/ 插件目录(不带 .yml 后缀)。
定义模块
模块文件本身就是一个片段式的 YAML,可以只包含 layout、slots、variables、execute 中的一部分。
yaml
# modules/gui/base_gui.yml
layout:
- "XXXXXXXXX"
- "X.......X"
- "X...I...X"
- "X.......X"
- "X...B...X"
- "XXXXXXXXX"
slots:
X: decoration(id=边框, material=BLACK_STAINED_GLASS_PANE, name=" ")引用它的配方只需补齐 I / B 等业务槽位即可。
模块占位符
模块可以声明参数,在被 use: 时由外层传入具体值。
yaml
# modules/logic/enhance_base.yml
variables:
最大等级: "${maxLevel:10}" # 默认值 10
成功率基础: "${baseRate:80}" # 默认值 80
execute: |
require 等级 < 最大等级 : "&c已达最大等级"语法:${name:default}。
name是外部传入的参数名。:default可选,未传入时使用默认值。- 默认值也省略时,未传入会得到
null。
传入参数:slot_values
在 use: 改用对象形式,通过 slot_values 传参:
yaml
use:
- name: "modules/logic/enhance_base"
slot_values:
maxLevel: 15
baseRate: 90这会在加载模块时把 ${maxLevel:10} 替换成 15、${baseRate:80} 替换成 90。
典型分层
一个成熟项目通常这样拆分:
modules/
├── gui/
│ ├── base_gui.yml # 6 行布局 + 边框
│ └── with_preview.yml # 带预览槽位的布局
├── logic/
│ ├── enhance_base.yml # 通用强化逻辑(带占位符)
│ └── reforge_base.yml # 通用洗练逻辑
└── effects/
├── common_effects.yml # 通用音效/粒子
└── anim_roulette.yml # 转盘动画脚本配方文件只写业务差异,由 use: 组合。
调试提示
模块合并后的最终配置可通过服务器日志查看。若 ${xxx} 占位符没被替换,检查 slot_values 的键名是否完全一致(区分大小写)。