Skip to content

配置说明

插件的主要配置位于 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

这些开关控制未填写物品库前缀时的产物读取方式。

配置项默认值说明
LyEntryReloadfalse默认配置中保留了该节点,但当前代码没有读取此开关。
AzureFlowfalse优先从 AzureFlow 读取无前缀物品,读取失败后尝试 MythicMobs。
SX-Itemfalse优先从 SX-Item 读取无前缀物品,读取失败后尝试 MythicMobs。
neigeItemsfalse优先从 NeigeItems 读取无前缀物品,读取失败后尝试 MythicMobs。
originAttributefalse优先从 OriginAttribute 读取无前缀物品,不存在时尝试 MythicMobs。

多个开关同时开启时,实际判断顺序为:

  1. AzureFlow
  2. SX-Item
  3. neigeItems
  4. originAttribute
  5. 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-neartrue关闭界面返还待分解物品时,背包放不下的物品是否掉落在玩家脚下。
prohibit-decomposition-lore已绑定Lore 任意一行包含列表中的任意文本时,该物品不会匹配分解规则。
open-decomposition-slot18界面顶部开放的待分解槽位数量,界面最多提供 18 格。
is-save-to-lylootswarehousefalse是否尝试把支持的分解产物直接存入 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-lylootswarehousetrue 时,只有同时满足以下条件的产物才会存入仓库:

  • 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,例如 STONE160:5145: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.ymldecomposition-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"

规则节点

节点默认值说明
id0:0匹配原物品的数字 ID 和 data,格式必须为 数字:数字
name空文本匹配原物品显示名。
lore空文本匹配原物品 Lore 中的任意一行。
containsNamefalsetrue 时名称使用包含匹配,否则要求完全相同。
containsLorefalsetrue 时 Lore 使用包含匹配,否则要求某一行完全相同。
givetrue是否生成并发放 result 中的产物。
commands空列表规则执行完成时运行的指令。
extra-condition根据玩家条件执行消息、指令或几率调整。
result空列表该规则可能生成的产物。

namelore 和相关消息支持 & 颜色代码。规则中的名称和 Lore 会先转换颜色代码,再与物品数据比较。

ID 匹配

id 必须保留冒号,例如:

yaml
id: "276:0"

匹配规则如下:

  • ID 大于 0 时检查物品类型。
  • data 大于 0 时检查物品 data。
  • 0:0 表示不使用 ID 和 data 限制。
  • 276:0 会检查 ID 276,但 data 0 不会作为额外限制。

如需准确识别自定义装备,建议同时配置 namelore

多规则叠加

同一个物品可以同时匹配多条分解规则。插件会执行全部匹配规则,因此以下内容可以叠加:

  • 每条规则的分解产物。
  • 每条规则的 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 秒点击冷却,该时间不能通过配置修改。