Skip to content

模块系统

把通用的布局、脚本、效果拆到 modules/ 目录下,用 use: 复用,避免多个配方文件重复写相同的内容。

引用模块

yaml
# recipes/enhance.yml
use:
  - "modules/gui/base_gui"
  - "modules/logic/base_enhance"
  - "modules/effects/common_effects"

use 按顺序引入模块,后面的字段可以覆盖前面的同名字段。路径相对于 ItemMaster/ 插件目录(不带 .yml 后缀)。

定义模块

模块文件本身就是一个片段式的 YAML,可以只包含 layoutslotsvariablesexecute 中的一部分。

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 的键名是否完全一致(区分大小写)。

TQ Minecraft Server Plugin Docs