配置说明
插件的主要配置位于 plugins/LyDecompositionReload/config.yml,额外分解规则位于 plugins/LyDecompositionReload/extra/。
修改配置后,使用 /lyfj reload 重新读取 config.yml、快捷按钮和全部分解规则。该指令仅限 OP 使用。
配置文件
| 文件 / 目录 | 用途 |
|---|---|
config.yml | 配置物品库读取、界面、消息、快捷按钮和主分解规则。 |
extra/ | 存放额外分解规则,可创建多个 .yml 文件或子目录。 |
extra/额外配置.yml | 插件自动释放的额外规则示例。 |
extra/ 会被递归扫描,子目录内以 .yml 结尾的文件也会加载。额外文件的根节点必须为 decomposition-set。
不同文件可以同时提供分解规则,但规则名称应保持唯一。名称重复时,后加载的同名规则会覆盖先前规则,加载顺序不应作为配置逻辑的一部分。
物品库读取
yaml
LyEntryReload: false
neigeItems: false
originAttribute: false
AzureFlow: false
SX-Item: false这些开关控制未填写物品库前缀时的产物读取方式。
| 配置项 | 默认值 | 说明 |
|---|---|---|
LyEntryReload | false | 默认配置中保留了该节点,但当前代码没有读取此开关。 |
AzureFlow | false | 优先从 AzureFlow 读取无前缀物品,读取失败后尝试 MythicMobs。 |
SX-Item | false | 优先从 SX-Item 读取无前缀物品,读取失败后尝试 MythicMobs。 |
neigeItems | false | 优先从 NeigeItems 读取无前缀物品,读取失败后尝试 MythicMobs。 |
originAttribute | false | 优先从 OriginAttribute 读取无前缀物品,不存在时尝试 MythicMobs。 |
多个开关同时开启时,实际判断顺序为:
AzureFlowSX-ItemneigeItemsoriginAttribute- MythicMobs
命中前面的开关后,不会继续尝试后面的开关。建议只开启一个默认物品库。
分解产物可以使用前缀直接指定物品库,不受上述默认顺序影响:
| 写法 | 说明 |
|---|---|
AzureFlow@物品ID | 从 AzureFlow 读取物品,读取失败后尝试 MythicMobs。 |
NeonFlash@物品ID | 从 NeonFlash 读取物品。NeonFlash 没有对应的全局开关。 |
SX-Item@物品ID | 从 SX-Item 读取物品,读取失败后尝试 MythicMobs。 |
neigeItems@物品ID | 从 NeigeItems 读取物品,读取失败后尝试 MythicMobs。 |
originAttribute@物品ID | 从 OriginAttribute 读取物品,不存在时尝试 MythicMobs。 |
物品ID | 按已开启的物品库开关读取;没有开启时使用 MythicMobs。 |
物品库前缀区分大小写,应严格使用表格中的写法。使用某个物品库前缀或开关前,需要确保对应插件已经安装并正常启用。
基础设置
yaml
drop-near: true
prohibit-decomposition-lore:
- "已绑定"
open-decomposition-slot: 18
is-save-to-lylootswarehouse: false| 配置项 | 默认值 | 说明 |
|---|---|---|
drop-near | true | 关闭界面返还待分解物品时,背包放不下的物品是否掉落在玩家脚下。 |
prohibit-decomposition-lore | 已绑定 | Lore 任意一行包含列表中的任意文本时,该物品不会匹配分解规则。 |
open-decomposition-slot | 18 | 界面顶部开放的待分解槽位数量,界面最多提供 18 格。 |
is-save-to-lylootswarehouse | false | 是否尝试把支持的分解产物直接存入 LyLootsWareHouse。 |
关闭界面返还物品
关闭分解界面时,插件会把顶部开放槽位中的物品返还到玩家背包。
建议保持 drop-near: true。设置为 false 后,如果玩家背包已满,无法放回背包的剩余物品不会执行掉落处理。
禁止分解 Lore
prohibit-decomposition-lore 使用包含匹配,不要求整行完全相同。颜色代码中的 & 会转换为 Minecraft 颜色符号后再参与判断。
yaml
prohibit-decomposition-lore:
- "已绑定"
- "&c不可分解"匹配禁止 Lore 的物品不会进入规则匹配,也不会显示分解产物预览。
开放槽位
分解界面顶部槽位编号为 0-17,因此 open-decomposition-slot 应设置为 1-18。
关闭的槽位会由界面填充物占用,玩家不能向其中放入物品。
战利品仓库
当 is-save-to-lylootswarehouse 为 true 时,只有同时满足以下条件的产物才会存入仓库:
- LyLootsWareHouse 已启用。
- LyLootsWareHouse 的 API 中存在对应产物 ID。
- 产物已经成功从配置的物品库读取。
不满足条件时,产物仍会直接加入玩家背包。
快捷按钮
extra-button 配置界面最下方的 9 个快捷按钮。可用槽位为 0-8,分别对应界面底部从左到右的 9 格。
yaml
extra-button:
0:
type: "put:&7品质: &a一般"
item: "160:5"
name: "&7一键放入&a一般&7品质的装备"
lore:
- "[点我]"
1:
type: "put:&7品质: &b优秀"
item: "160:6"
name: "&7一键放入&b优秀&7品质的装备"
lore: []
8:
type: "get"
item: "160:7"
name: "&7一键取回全部装备"
lore: []按钮节点
| 节点 | 必填 | 说明 |
|---|---|---|
type | 是 | 按钮执行的操作,支持 put:文本 和 get。 |
item | 是 | 按钮显示物品,默认配置使用旧版数字 ID 和子 ID。 |
name | 是 | 按钮显示名,支持 & 颜色代码。 |
lore | 否 | 按钮 Lore,支持 & 颜色代码;不需要时可填写空列表。 |
按钮类型
| 类型 | 说明 |
|---|---|
put:文本 | 扫描玩家背包前 36 格,把 Lore 任意一行包含指定文本的物品放入分解界面。 |
get | 取回界面顶部开放槽位中的全部待分解物品。 |
put:文本 会将 & 颜色代码转换后进行包含匹配。只有带有 Lore 的物品才会被快捷放入。
快捷按钮存在固定的 1 秒点击冷却,该时间不能通过配置修改。
界面配置
yaml
gui:
lore-add:
- ""
- "&a分解出现该物品几率: %chance%"
- "&a分解出现该物品数量: %min - %max"
title: "物品分解"
fill-item: "160:0"
fill-name: "&7上方放入要分解的物品"
button-item: "145:2"
button-name: "&e点击分解"
button-lore:
- " "
- "&7下方可预览第一个可分解的物品,分解后的产物"
- " "
- "&a左键分解首个 &7| &a右键全部分解"| 节点 | 说明 |
|---|---|
gui.title | 分解界面的标题。 |
gui.fill-item | 分隔区域、关闭槽位和预览区域使用的填充物品。 |
gui.fill-name | 填充物品的显示名。 |
gui.button-item | 中央分解按钮的物品。 |
gui.button-name | 中央分解按钮的显示名。 |
gui.button-lore | 中央分解按钮的 Lore。 |
gui.lore-add | 追加到产物预览物品末尾的 Lore。 |
界面物品支持兼容材质名称和旧版数字 ID,例如 STONE、160:5、145:2。
界面区域
| 槽位 | 用途 |
|---|---|
0-17 | 放置待分解物品,实际开放数量由 open-decomposition-slot 控制。 |
18-26 | 分隔区域,槽位 22 为分解按钮。 |
27-44 | 显示第一个可分解物品对应的产物预览。 |
45-53 | 显示 extra-button.0-8 快捷按钮。 |
产物预览只查找顶部第一个能够匹配规则的物品。若该物品同时匹配多条规则,会合并显示这些规则中配置的产物。
预览数量使用配置范围的最大值,显示堆叠数量最多为 64。预览仅用于展示,不代表本次分解一定获得该产物。
预览占位符
| 占位符 | 说明 |
|---|---|
%chance% | 产物基础几率,显示为保留两位小数的数值。 |
%min | 产物最小数量。 |
%max | 产物最大数量。 |
预览显示的是规则中填写的基础几率,不会计算玩家触发的额外条件几率调整。
消息配置
yaml
message:
inv-max: "&c背包已满,待分解物品掉落在地。"
success: "&a分解完毕!"
result: "&f分解%name&f获得了%itemx%amount"
fail: "&7分解失败,请查看是否有物品可分解或背包不足%slot格"| 节点 | 触发时机 | 支持内容 |
|---|---|---|
message.inv-max | 关闭界面时,待分解物品因背包已满而掉落。 | 支持 & 颜色代码。 |
message.success | 点击分解按钮并结束本轮处理后。 | 支持 & 颜色代码;删除该节点可不发送。 |
message.result | 每个成功生成的产物发放或存入仓库时。 | %name、%item、%amount。 |
message.fail | 没有可分解物品,或背包空槽不足时。 | %slot。 |
消息占位符
| 占位符 | 说明 |
|---|---|
%name | 被分解物品的显示名;没有自定义名称时使用材质名称。 |
%item | 获得产物的显示名;没有自定义名称时使用材质名称。 |
%amount | 获得数量。存入仓库时,数量后会追加“已存入仓库”提示。 |
%slot | 本次判断需要的背包空槽数量。 |
默认文本中的 %itemx%amount 会依次替换 %item 和 %amount,其中字母 x 作为数量分隔符保留。
插件判断背包空间时统计的是空槽数量,不会把已有物品堆叠的剩余空间计入。需要的空槽数按照当前物品匹配规则中的产物条目总数计算,不考虑产物是否会因几率失败。
分解规则
主规则写在 config.yml 的 decomposition-set 下:
yaml
decomposition-set:
"条件1":
id: "0:0"
name: ""
lore: ""
containsName: false
containsLore: false
give: true
commands:
- "[console]bc %p分解了条件1"
extra-condition:
"等级判断":
condition:
- "papi:{%player_level% >= 5}"
- "papi:{%player_level% <= 10}"
result:
- "$msg:{&a满足额外条件}"
- "$addChance:{10}"
result:
- "材料#1-2#100"额外规则文件使用相同结构:
yaml
decomposition-set:
"额外规则名称":
name: "需要匹配的物品名称"
lore: "需要匹配的 Lore"
give: true
result:
- "材料#1-2#100"规则节点
| 节点 | 默认值 | 说明 |
|---|---|---|
id | 0:0 | 匹配原物品的数字 ID 和 data,格式必须为 数字:数字。 |
name | 空文本 | 匹配原物品显示名。 |
lore | 空文本 | 匹配原物品 Lore 中的任意一行。 |
containsName | false | 为 true 时名称使用包含匹配,否则要求完全相同。 |
containsLore | false | 为 true 时 Lore 使用包含匹配,否则要求某一行完全相同。 |
give | true | 是否生成并发放 result 中的产物。 |
commands | 空列表 | 规则执行完成时运行的指令。 |
extra-condition | 无 | 根据玩家条件执行消息、指令或几率调整。 |
result | 空列表 | 该规则可能生成的产物。 |
name、lore 和相关消息支持 & 颜色代码。规则中的名称和 Lore 会先转换颜色代码,再与物品数据比较。
ID 匹配
id 必须保留冒号,例如:
yaml
id: "276:0"匹配规则如下:
- ID 大于
0时检查物品类型。 - data 大于
0时检查物品 data。 0:0表示不使用 ID 和 data 限制。276:0会检查 ID276,但 data0不会作为额外限制。
如需准确识别自定义装备,建议同时配置 name 或 lore。
多规则叠加
同一个物品可以同时匹配多条分解规则。插件会执行全部匹配规则,因此以下内容可以叠加:
- 每条规则的分解产物。
- 每条规则的
commands。 - 每条规则内满足条件的
extra-condition结果。
若不希望结果叠加,应让各规则的 ID、名称或 Lore 条件互斥。
规则指令
commands 在规则执行结束时运行,并支持 %p 替换为玩家名称。
yaml
commands:
- "[console]bc %p完成了一次分解"
- "[op]say 我完成了一次分解"
- "say 我完成了一次分解"| 写法 | 执行身份 |
|---|---|
[console]指令 | 由控制台执行。 |
[op]指令 | 临时给予玩家 OP 后,以玩家身份执行,执行后恢复原状态。 |
指令 | 由玩家自身执行。 |
当前代码不会移除 [player] 前缀,因此不要在 commands 中使用 [player]。需要玩家执行时直接填写无前缀指令。
commands 只替换 %p,不会在这里执行 PlaceholderAPI 变量解析。需要 PlaceholderAPI 解析的控制台指令,可写在产物格式的第 4 段之后,或写入额外条件的指令结果。
产物格式
yaml
result:
- "材料#1-2#100"
- "SX-Item@材料A#1#25#bc %player_name% 分解出了材料A"基础格式为:
text
物品ID#数量或范围#几率#可选控制台指令| 段位 | 说明 |
|---|---|
| 第 1 段 | 产物 ID,可以带物品库前缀。 |
| 第 2 段 | 固定数量或随机范围。 |
| 第 3 段 | 基础生成几率。 |
| 第 4 段及以后 | 每一段都作为一条控制台指令执行。 |
数量
| 写法 | 说明 |
|---|---|
1 | 固定生成 1 个。 |
2-5 | 随机生成 2 至 5 个,包含最小值和最大值。 |
几率
几率以 100 为基准:
| 数值 | 说明 |
|---|---|
100 | 必定通过基础几率判断。 |
50 | 约 50% 几率。 |
0 | 不会生成。 |
额外条件产生的几率调整会与基础几率相加后参与判断。代码不会限制调整后的数值范围。
产物附加指令
从第 4 段开始,每个 # 分隔段都会作为独立控制台指令执行:
yaml
result:
- "材料#1#100#bc %player_name% 获得了材料#give %player_name% diamond 1"这些指令会经过 PlaceholderAPI 解析。指令只会在以下条件全部满足后执行:
- 该产物通过几率判断。
- 产物能够从对应物品库中读取。
由于 # 是格式分隔符,单条附加指令本身不能包含 #。
额外条件
每条分解规则可以包含多个命名的额外条件组:
yaml
extra-condition:
"等级与权限":
condition:
- "papi:{%player_level% >= 5 && %player_level% <= 10}"
- "permission:{decomposition.vip}"
result:
- "$msg:{&a满足额外条件}"
- "$addChance:{10}"
- "$consoleCmd:{bc %p触发了额外条件}"同一条件组中的全部 condition 都满足后,才会把该组的 result 加入执行列表。多个条件组可以同时满足,其结果会合并执行。
条件类型
| 条件 | 说明 |
|---|---|
papi:{表达式} | 先解析 PlaceholderAPI 变量,再判断表达式。 |
permission:{权限} | 玩家必须拥有指定权限。 |
nopermission:{权限} | 玩家必须没有指定权限。 |
roll:{几率} | 进行一次以 100 为基准的随机判断。 |
PAPI 表达式
支持以下比较运算符:
| 运算符 | 说明 |
|---|---|
> | 左侧大于右侧。 |
>= | 左侧大于或等于右侧。 |
< | 左侧小于右侧。 |
<= | 左侧小于或等于右侧。 |
== | 两侧文本完全相同。 |
&& | 同一表达式中连接多个判断,所有判断都必须成立。 |
yaml
condition:
- "papi:{%player_level% >= 5 && %player_level% <= 10}"除 == 外的比较会把两侧内容解析为数字。使用无法解析为数字的变量值会导致判断异常。
条件结果
| 结果 | 说明 |
|---|---|
$msg:{文本} | 向玩家发送消息,支持 & 颜色代码。 |
$addChance:{数值} | 在当前几率调整值上增加指定数值。 |
$takeChance:{数值} | 从当前几率调整值中减少指定数值。 |
$setChance:{数值} | 把当前“额外几率调整值”设为指定数值,最终几率仍为基础几率加该数值。 |
$consoleCmd:{指令} | 由控制台执行指令,并将 %p 替换为玩家名称。 |
$playerCmd:{指令} | 由玩家自身执行指令。 |
$opCmd:{指令} | 临时给予玩家 OP 后执行指令,随后恢复原状态。 |
$continue | 跳过当前这一条额外结果,继续处理后面的结果。 |
$return | 立即停止当前分解规则,不生成该规则产物,也不执行该规则的 commands。 |
$setChance 设置的不是最终几率。例如基础几率为 25,执行 $setChance:{10} 后,实际判断几率为 35。
额外结果按配置加载后的内部顺序执行。不要让多个条件组依赖固定执行顺序,尤其不要依赖多条 $setChance 的先后关系。
分解按钮行为
| 操作 | 行为 |
|---|---|
| 左键分解按钮 | 查找并分解顶部第一个可分解的物品槽。 |
| 右键分解按钮 | 按开放槽位数量持续查找并分解物品。 |
每次找到一个可分解物品后,会按该物品的堆叠数量逐个执行规则。例如槽位内有 16 个相同物品,会执行 16 次几率判断、产物生成和规则指令。
分解按钮存在固定的 1 秒点击冷却,该时间不能通过配置修改。