Skip to content

配置说明

LyGalaxyDecomposition 的配置由主配置文件 config.yml 和规则目录 rule 组成:

文件或目录用途
config.yml设置默认物品库、产物入库顺序、全局条件、额外按钮、分解界面和提示消息
rule/*.yml定义物品匹配条件、分解产物、规则命令和产物命令

插件会递归读取 rule 目录及其子目录中的 .yml 文件。执行 /lyfj reload 时,会重新读取主配置、全部规则文件、额外按钮和外部插件连接状态。

如果重载发现阻止加载的错误,本次配置不会生效,原有规则、按钮、全局条件和入库顺序继续运行。只有警告时允许完成重载。

主配置字段

config.yml 顶层只允许使用以下字段。填写其它顶层字段会导致重载失败。

配置项类型说明
item-provider字符串未在产物 ID 中指定物品库前缀时使用的默认物品库
delivery-order字符串列表分解产物的入库目标和尝试顺序
global-condition字符串列表所有分解规则匹配前必须满足的全局条件
extra-button配置节点界面底部的额外按钮,可不配置
gui配置节点分解界面的标题、物品和产物预览设置
open-decomposition-slot整数开放的分解输入槽位数量
message配置节点分解结果、失败和物品返还提示

extra-button 外,删除普通配置项或将其设为 null 时,插件会在运行时使用内置默认值。删除 extra-button、将其设为 null 或不配置任何按钮表示禁用额外按钮。

默认物品库

item-provider

当规则产物没有填写物品库前缀时,插件使用 item-provider 指定的物品库创建产物。

yaml
item-provider: 'MythicMobs'

支持的物品库如下:

配置名称对应插件说明
MythicMobsMythicMobs 或 LyItemSave支持 MythicMobs 4、MythicMobs 5;只有 LyItemSave 时使用其 MythicMobs 4 兼容接口
LyItemSaveMythicMobs 或 LyItemSaveMythicMobs 名称互通
AzureFlowAzureFlow使用 AzureFlow 物品 ID
NeonFlashNeonFlash使用 NeonFlash 物品 ID
SX-ItemSX-Item使用 SX-Item 物品 ID
NeigeItemsNeigeItems使用 NeigeItems 物品 ID,并传入当前玩家
OriginAttributeOriginAttribute使用 OriginAttribute 物品 ID,并传入当前玩家

配置为空字符串、缺失或为 null 时,默认使用 MythicMobs

物品库名称查找不区分大小写。对应插件未安装、未启用或适配器初始化失败时,引用该物品库的规则无法通过重载校验。

规则产物可以使用 物品库@物品ID 格式覆盖默认物品库:

yaml
result:
  - 'MythicMobs@分解材料 1 1'
  - 'NeigeItems@稀有碎片 1-3 0.25'

@ 后的内容是对应物品库内部使用的物品 ID。

产物入库顺序

delivery-order

delivery-order 决定产物生成后依次尝试进入哪些位置。

yaml
delivery-order:
  - LyLootsWarehouse
  - LyWarehouse
  - inventory

支持的入库目标如下:

配置值实际目标生效条件
inventory玩家背包始终可用
LyLootsWarehouseLyLootsWareHouse 战利品仓库已安装并启用 LyLootsWareHouse,且仓库接口接受该产物
LyWarehouseLyWarehouse 仓库已安装并启用 LyWarehouse,且仓库接口接受该物品
SpaceRingPlus灵魂空间已安装并启用提供接口的 YeeCore
StarStorageStarStorage 默认仓库已安装并启用 StarStorage,玩家仓库数据已加载且物品允许存放

配置规则:

  • 列表按照从上到下的顺序处理。
  • 配置值不区分大小写,加载后会转换为正式名称。
  • 同一个入库目标不能重复配置。
  • 不支持的目标、非字符串内容或重复目标会导致重载失败。
  • 未安装、未启用、初始化失败或当前无法接收物品的外部仓库会被跳过。
  • inventory 可以接收部分数量,背包无法容纳的剩余数量会继续尝试后续目标。
  • 外部仓库接口按完整剩余物品栈尝试接收;返回失败时继续尝试下一个目标。
  • 全部目标处理后仍有剩余产物时,剩余物品会掉落在玩家当前位置。
  • 列表缺失、为 null 或为空列表时,默认只尝试 inventory

仅使用玩家背包:

yaml
delivery-order:
  - inventory

优先进入外部仓库,失败后进入背包:

yaml
delivery-order:
  - StarStorage
  - LyLootsWarehouse
  - inventory

结果消息中的 {amount} 同时包含数量和实际入库位置,例如 2(已进入背包)。如果同一项产物由多个位置接收,位置名称会使用顿号连接。全部目标均未接收时,会显示产物已进入玩家位置。

全局条件

global-condition

全局条件会在每条分解规则的自身条件之前判断。物品必须先通过全部全局条件,才会继续匹配 rule 目录中的规则。

yaml
global-condition:
  - "!lore('已绑定', contains)"
  - "!permission('lydecomposition.bypass')"

条件组合规则:

  • 多行条件之间为 AND,每一行都必须成立。
  • 同一行顶层使用 || 表示 OR,任意一个分支成立即可。
  • 函数前添加 ! 表示取反;连续添加多个 ! 时会依次反转结果。
  • 每行必须是非空字符串。
  • 条件表达式中的括号和单引号必须完整闭合。
  • 函数中的字符串参数使用单引号。
  • 单引号字符串内需要表示单引号时,可连续填写两个单引号。
  • global-condition 为空列表时不增加全局限制。

允许使用的条件函数包括:

函数用途
hasname()判断物品是否存在自定义名称
haslore()判断物品是否存在 Lore
name()匹配物品名称
lore()匹配物品 Lore
material()匹配材质、旧版数字 ID 和 Data
permission()判断玩家权限
papi()替换 PlaceholderAPI 变量后判断表达式
hasnbt()判断指定 NBT 节点是否存在
nbt()比较指定 NBT 节点的值

使用 papi() 条件时必须安装并启用 PlaceholderAPI,否则重载失败。使用 hasnbt()nbt() 时,当前服务端版本必须存在可用的 NBT 适配器,否则重载失败。

额外按钮

extra-button

额外按钮显示在分解界面最下方,共有 08 九个可配置位置。编号对应底部区域从左到右的槽位索引。

每个按钮允许使用以下字段:

配置项类型必填默认值说明
action字符串按钮动作,只能填写 putgetcommand
item字符串按钮显示物品,使用 Bukkit 物品格式
name字符串按钮显示名称,支持 & 颜色代码
lore字符串列表空列表按钮 Lore,支持 & 颜色代码
cooldown非负整数0当前按钮每次成功交互后的独立冷却,单位为毫秒
condition字符串列表put 必填空列表一键放入物品时使用的条件
command字符串列表空列表command 动作按顺序执行的命令

按钮编号必须是 08 的整数。以下问题会导致重载失败:

  • 按钮编号不是整数或超出范围。
  • 按钮内容不是配置节点。
  • 包含不支持的按钮字段。
  • actionitemname 为空。
  • action 不是 putgetcommand
  • item 无法创建显示物品。
  • lore 不是列表。
  • cooldown 不是非负整数。
  • 动作与 conditioncommand 字段的组合不符合要求。

不同按钮分别记录冷却。cooldown: 0 或不配置 cooldown 表示无冷却。玩家在冷却期间再次点击会收到固定的冷却提示。

put 动作

put 会扫描玩家背包前 36 个槽位,将同时满足以下要求的物品移动到开放输入槽位:

  1. 满足按钮自身的全部 condition
  2. 满足当前全局条件。
  3. 能够匹配至少一条当前生效的分解规则。

放入时会优先合并输入区域内的相似物品栈,再使用空输入槽位。输入区域装满后停止处理。

yaml
extra-button:
  0:
    action: 'put'
    condition:
      - "lore('&7品质: &a一般', contains)"
      - "!lore('已绑定', contains)"
    item: '160:5'
    name: '&7一键放入&a一般&7品质装备'
    lore:
      - '&7点击后放入全部符合条件的装备'
    cooldown: 500

put 配置限制:

  • 必须配置非空的 condition 字符串列表。
  • 不能配置 command
  • 条件语法与全局条件和规则条件相同。
  • 条件使用 papi() 或 NBT 函数时,对应功能必须可用。

get 动作

get 会取回当前界面的全部输入物品。玩家背包无法容纳的物品会掉落在玩家当前位置,并发送 message.inv-max

yaml
extra-button:
  8:
    action: 'get'
    item: '160:7'
    name: '&c一键取回全部装备'
    lore:
      - '&7点击后取回全部输入物品'
    cooldown: 500

get 不能配置 conditioncommand

玩家正常关闭分解界面时,也会自动返还输入区域中的物品。每个界面只会执行一次关闭返还。

command 动作

command 会按配置顺序执行 command 列表中的非空命令。

yaml
extra-button:
  6:
    action: 'command'
    item: '160:1'
    name: '&c执行指令'
    lore:
      - '&7点击后执行配置指令'
    cooldown: 1000
    command:
      - '[console]say %player_name% 点击了分解界面按钮'
      - '[op]say %player_name% 执行了临时OP指令'
      - 'say %player_name% 执行了玩家指令'

命令执行身份:

格式执行身份
[console]指令控制台
[op]指令玩家临时获得 OP 后执行,完成后恢复原 OP 状态
指令玩家

执行身份前缀不区分大小写。命令支持 PlaceholderAPI 变量;未安装 PlaceholderAPI 时保留原始文本。命令内容不要包含开头的 /

command 配置限制:

  • 不能配置 condition
  • command 可以省略或留空,此时按钮不运行命令。
  • 配置 command 时必须使用字符串列表。
  • 列表内只能填写非空字符串。
  • [console][op] 后必须存在实际命令内容。
  • 单条命令执行异常时会记录警告,不影响列表中其它命令继续执行。

分解界面

gui

分解界面固定为 54 格,分为输入区域、操作区域、产物预览区域和额外按钮区域。

配置项类型默认值说明
gui.title字符串物品分解界面标题,支持 & 颜色代码
gui.fill-item字符串160:0未开放槽位、分隔区域、空预览区域和未配置按钮位置使用的填充物品
gui.fill-name字符串&7上方放入要分解的物品填充物品名称,支持 & 颜色代码
gui.button-item字符串145:2分解按钮显示物品
gui.button-name字符串&e点击分解分解按钮名称,支持 & 颜色代码
gui.button-lore字符串列表见下方配置分解按钮 Lore,支持 & 颜色代码
gui.preview-refresh-interval数字10产物预览刷新请求的检测间隔,单位为 tick,运行时最小为 1
gui.lore-add字符串列表见下方配置追加到每个预览产物 Lore 末尾的内容

完整配置结构:

yaml
gui:
  title: '物品分解'
  fill-item: '160:0'
  fill-name: '&7上方放入要分解的物品'
  button-item: '145:2'
  button-name: '&e点击分解'
  button-lore:
    - ''
    - '&7下方显示第一个可分解物品的产物预览'
    - ''
    - '&a左键分解首个物品栈 &7| &a右键分解全部物品栈'
  preview-refresh-interval: 10
  lore-add:
    - ''
    - '&a出现几率: {chance}'
    - '&a产物数量: {min} - {max}'

界面布局

区域槽位说明
输入区域017实际开放数量由 open-decomposition-slot 决定
分隔区域1826使用填充物品,其中槽位 22 为分解按钮
产物预览2744最多显示 18 个预览产物
额外按钮4553对应 extra-button.0extra-button.8

玩家只能向开放的输入槽位放入物品。未开放输入槽位、分隔区域、产物预览和额外按钮区域不能作为普通容器槽位使用。

分解按钮操作

操作效果
左键查找并完整分解输入区域内第一个可分解的物品栈
右键按输入槽位顺序分解全部可分解物品栈

分解按钮使用固定的 1000 毫秒点击冷却,不能通过配置修改。

如果一个物品同时匹配多条规则,全部匹配规则都会参与本次分解。每消耗一个输入物品,插件都会分别计算各规则的产物和命令。

外部插件可以通过分解前置事件取消单个物品的分解。被取消或执行失败时,输入物品不会按成功结果扣除。

产物预览

预览系统会从输入区域中查找第一个能够匹配规则的物品,并展示其全部匹配规则中的可发放产物:

  • 预览不会进行概率随机。
  • 预览不会发放物品、消耗输入物品或执行任何命令。
  • give-item: false 的规则不会生成产物预览。
  • 预览物品显示数量使用产物最大数量,但不会超过该物品的最大堆叠数量。
  • 最多显示前 18 个成功创建的产物。
  • 不存在、格式错误或物品库无法创建的产物不会显示。
  • 输入物品变化后会请求刷新。
  • 刷新请求按照 gui.preview-refresh-interval 指定的间隔检测。
  • 配置值小于 1 时按 1 tick 处理。

gui.lore-add 支持以下内置占位符:

占位符说明
{chance}产物概率,显示为保留两位小数的百分比
{min}最小产物数量
{max}最大产物数量

输入槽位数量

open-decomposition-slot

设置界面顶部允许玩家放入物品的槽位数量。

yaml
open-decomposition-slot: 18

运行时有效范围为 118

  • 小于 1 时按 1 处理。
  • 大于 18 时按 18 处理。
  • 未配置或为 null 时默认为 18
  • 界面打开后,本次界面使用的槽位数量保持不变。
  • 重载后的槽位数量会在玩家重新打开界面时应用。

消息设置

message

yaml
message:
  inv-max: '&c背包已满,剩余物品已掉落在你的位置'
  success: '&a分解完成'
  result: '&f分解 [{name}&f] 获得了: {item}x{amount}'
  fail: '&c没有可分解物品,或背包还需要 &6{slot} &c个空位'
  execution-error: '&c分解失败:&6{reason}'
配置项触发时机支持内容
message.inv-max关闭界面或使用 get 按钮返还输入物品时,背包无法容纳全部物品& 颜色代码
message.success一次点击完成了至少一个物品的分解,且批量过程未被错误中断& 颜色代码
message.result每项实际生成的产物完成入库后{name}{item}{amount}& 颜色代码
message.fail输入区域没有可分解物品,或执行返回背包空间不足状态{slot}& 颜色代码
message.execution-error单个物品分解返回非成功状态{reason}& 颜色代码

message.result 占位符:

占位符说明
{name}被分解物品的显示名称;没有可用来源名称时显示通用物品名称
{item}产物的显示名称;没有自定义名称时使用 Bukkit 材质名称
{amount}产物数量和实际进入位置,例如 3(已进入背包)

message.fail 中的 {slot} 是执行结果要求的额外槽位数量。当前界面没有匹配到可分解物品时,该值为 0

message.execution-error 中的 {reason} 是执行状态对应的简体中文原因,例如分解系统尚未就绪、输入物品无效、没有匹配规则、被外部插件取消、配置错误或执行异常。

规则文件

规则文件位于插件数据目录的 rule 文件夹。插件会递归读取该目录及其子目录内所有以 .yml 结尾的文件,并按照完整文件路径忽略大小写排序后加载。

规则文件最外层直接填写规则 ID:

yaml
'分解规则示例':
  condition:
    - "name('&a额外规则示例') || name('额外规则', contains)"
    - "lore('武器', contains) || lore('防具', contains)"
    - "!lore('已绑定', contains)"
    - "material('276:0')"
  commands:
    - '[console]say %player_name% 触发了分解规则示例'
  give-item: true
  result:
    - 'MythicMobs@分解产物1 1-2 0.5'
    - 'MythicMobs@分解产物2 2 1'

规则字段

每条规则只允许使用以下字段。其它字段会导致重载失败。

配置项类型默认值说明
condition字符串列表当前规则的匹配条件,必须至少配置一行
give-item布尔值true是否根据 result 生成并发放产物
commands字符串列表空列表规则执行成功后运行的命令
result字符串列表空列表分解产物和产物级命令定义

规则要求:

  • 规则 ID 在全部规则文件中必须唯一。
  • 单个物品可以同时匹配多条规则,匹配结果会叠加。
  • condition 必须至少包含一行有效条件。
  • 全局条件会先于规则自身的 condition 判断。
  • give-item: false 时不生成产物,但仍会执行 commands
  • give-item: true 但未配置 result 时只产生重载警告,不阻止加载。
  • 产物格式错误、产物物品库不可用或规则 ID 重复时会导致重载失败。

规则命令

规则的 commands 与额外命令按钮使用相同的执行身份:

yaml
commands:
  - '[console]say %player_name% 完成了分解'
  - '[op]say %player_name% 触发了临时OP命令'
  - 'say %player_name% 触发了玩家命令'
格式执行身份
[console]指令控制台
[op]指令玩家临时获得 OP 后执行,完成后恢复原状态
指令玩家

规则命令会在产物生成和入库流程后,按照匹配规则的加载顺序执行。命令支持 PlaceholderAPI 变量。单条命令执行失败时会记录警告,不会撤销已经发放的产物,也不会使本次分解变为失败状态。

产物格式

result 中每行的基础格式为:

text
物品ID 数量或数量范围 概率

示例:

yaml
result:
  - 'MythicMobs@材料A 2 1'
  - 'NeigeItems@材料B 1-3 0.5'
部分格式说明
物品 ID物品库@物品ID物品ID不写物品库时使用 item-provider
固定数量正整数,如 2每次命中生成固定数量
数量范围最小值-最大值命中后在包含两端的范围内随机数量
概率010 表示不会出现,1 表示必定出现

产物会先进行概率判断,再随机数量并创建物品。物品库无法创建产物时,本次单个物品分解返回配置错误,调用方不应扣除输入物品。

产物命令

每项产物可以从第四段开始追加一个或多个命令。每条命令必须单独放在 {} 中:

text
物品ID 数量或数量范围 概率 {命令1} {命令2}
yaml
result:
  - 'MythicMobs@稀有材料 1-2 0.25 {[console]say %player_name% 获得了稀有材料} {[op]say 第二条命令}'
  - 'NeigeItems@普通材料 2 1 {say 我获得了普通材料}'

产物命令规则:

  • 只有该项产物通过概率判断、成功创建并完成入库后才会执行。
  • 多条命令按照配置中的填写顺序执行。
  • 支持 [console][op] 和无前缀玩家身份。
  • 支持 PlaceholderAPI 变量;PlaceholderAPI 不可用时保留原始文本。
  • 产物命令在 message.result 发送后执行。
  • 单条产物命令执行失败时会记录警告,不会撤销已经发放的产物。

完整规则示例:

yaml
'带产物命令的分解规则':
  condition:
    - "material('DIAMOND_SWORD')"
    - "!lore('已绑定', contains)"
  give-item: true
  result:
    - 'MythicMobs@钻石碎片 1-3 1 {[console]say %player_name% 分解出钻石碎片}'
    - 'MythicMobs@稀有核心 1 0.1 {[console]say %player_name% 获得了稀有核心}'
  commands:
    - '[console]say %player_name% 完成了一次钻石剑分解'

条件格式

主配置的 global-condition、额外按钮的 condition 和规则文件的 condition 使用相同语法。

条件组合

yaml
condition:
  - "name('&a普通装备') || name('普通装备', contains, ignoreColor)"
  - "lore('武器', contains) || lore('防具', contains)"
  - "!lore('已绑定', contains)"
  - "permission('lydecomposition.use')"

以上配置表示:

  1. 名称完整等于绿色“普通装备”,或者忽略颜色后名称包含“普通装备”。
  2. 任意一行 Lore 包含“武器”或“防具”。
  3. 所有 Lore 均不能包含“已绑定”。
  4. 玩家必须拥有配置中的权限节点。

名称与 Lore

条件说明
hasname()物品存在自定义名称
haslore()物品存在 Lore
name('文本')名称完整匹配,保留颜色
name('文本', equals)名称完整匹配
name('文本', contains)名称包含文本
name('文本', startsWith)名称以文本开头
name('文本', endsWith)名称以文本结尾
name('文本', ignoreColor)忽略颜色后完整匹配
name('文本', contains, ignoreColor)忽略颜色后判断是否包含文本
lore('文本')任意一行 Lore 完整匹配
lore('文本', equals)任意一行 Lore 完整匹配
lore('文本', contains)任意一行 Lore 包含文本
lore('文本', startsWith)任意一行 Lore 以文本开头
lore('文本', endsWith)任意一行 Lore 以文本结尾
lore('文本', ignoreColor)忽略颜色后完整匹配任意一行 Lore
lore('文本', contains, ignoreColor)忽略颜色后判断任意一行 Lore 是否包含文本

name()lore() 的匹配方式只允许 equalscontainsstartsWithendsWith。可追加 ignoreColor 忽略颜色代码。

目标文本中的 & 颜色代码会在匹配前转换为服务端颜色符号。文本匹配区分字符大小写;只有 NBT 条件支持单独配置 ignoreCase

材质与权限

条件说明
material('276:0')匹配旧版数字物品 ID 和 Data
material('276')只匹配旧版数字物品 ID
material('DIAMOND_SWORD')匹配 Bukkit 材质名称
material('minecraft:diamond_sword')匹配带 minecraft: 命名空间的材质名称
permission('权限节点')玩家拥有指定权限

材质名称匹配不区分大小写。条件前添加 ! 可以反转结果:

yaml
condition:
  - "!permission('lydecomposition.bypass')"

PlaceholderAPI 条件

papi() 会先替换玩家变量,再判断括号内的完整表达式。

yaml
condition:
  - "papi(%player_level% >= 5 && %player_level% <= 10)"
  - "papi(%player_class% == '战士' || %player_class% == '骑士')"

支持的比较运算符:

运算符说明
==双方都是数字时比较数值,否则比较完整文本
!=双方都是数字时比较数值,否则比较完整文本
>数字大于
>=数字大于等于
<数字小于
<=数字小于等于

表达式规则:

  • && 的优先级高于 ||
  • 范围运算符只在两侧都能转换为数字时成立。
  • ==!= 在两侧都能转换为数字时按数值比较,否则按文本比较。
  • 没有比较运算符时,表达式内容必须等于 true,忽略大小写。
  • 文本值可以使用单引号包裹。
  • 使用 papi() 时必须安装并启用 PlaceholderAPI。

NBT 条件

NBT 键使用单引号包裹,并支持使用点号访问嵌套节点。目标键必须存在,nbt() 才可能匹配成功。

条件说明
hasnbt('lyfj.a.b.c')存在指定 NBT 节点
nbt('lyfj.a.b.c', 'sword')NBT 值完整等于文本,默认使用 equals
nbt('lyfj.attribute.level', 5)NBT 值转换为字符串后完整等于 5
nbt('lyfj.a.b.c', 'bound', !=)NBT 值不等于目标文本
nbt('lyfj.a.b.c', 'swo', contains)NBT 值包含目标文本
nbt('lyfj.a.b.c', 'sword', startsWith)NBT 值以目标文本开头
nbt('lyfj.a.b.c', 'sword', endsWith)NBT 值以目标文本结尾
nbt('lyfj.a.b.c', 'SWORD', equals, ignoreCase)忽略英文大小写完整匹配
nbt('lyfj.attribute.level', 5, >)NBT 数值大于 5
nbt('lyfj.attribute.level', 5, >=)NBT 数值大于等于 5
nbt('lyfj.attribute.level', 10, <)NBT 数值小于 10
nbt('lyfj.attribute.level', 10, <=)NBT 数值小于等于 10

NBT 文本匹配支持:

参数说明
equals完整匹配,默认方式
!=不等于目标文本
contains包含目标文本
startsWith以目标文本开头
endsWith以目标文本结尾
ignoreCase忽略英文大小写,可与文本匹配方式组合

数值比较支持 >>=<<=。只有实际值和目标值都能转换为数字时才会成立。

NBT 条件依赖对应服务端版本的 NBT 适配器。当前项目包含以下适配版本:

  • 1.7.10
  • 1.8.8
  • 1.11.2
  • 1.12.2
  • 1.13.2
  • 1.14.4
  • 1.15.2
  • 1.16.5
  • 1.17.1
  • 1.18.2
  • 1.19.2
  • 1.19.4
  • 1.20.1
  • 1.20.2
  • 1.20.3

未提供对应 NBT 适配器的服务端版本不能加载使用 hasnbt()nbt() 的条件。

旧版规则转换

/lyfj convert 用于将旧版 LyDecompositionReload 规则转换为当前规则格式。该操作只读取旧版数据目录,不会修改旧版配置。

转换读取位置:

路径说明
plugins/LyDecompositionReload/config.yml读取 decomposition-set 节点中的旧版主规则
plugins/LyDecompositionReload/extra递归读取子目录内的全部 .yml 额外规则

转换结果固定写入:

text
plugins/LyGalaxyDecomposition/rule/旧版转换/旧版配置转换.yml

如果转换文件已经存在,覆盖前会创建固定备份文件:

text
plugins/LyGalaxyDecomposition/rule/旧版转换/旧版配置转换.yml.bak

转换完成后,插件会自动执行一次当前配置重载。转换文件已生成但重载失败时,当前运行中的规则保持不变。

转换内容

旧版内容当前格式
数字 ID 和 Data转换为 material() 条件
名称匹配转换为 name() 条件
Lore 匹配转换为 lore() 条件
give转换为 give-item
commands转换为当前规则命令格式
物品#数量#百分比转换为空格分隔的物品、数量和 01 概率
%p转换为 %player_name%
[player]移除前缀,使用玩家身份执行

旧版无物品库前缀的产物会明确添加 MythicMobs@ 前缀。旧版产物概率按照百分比除以 100 转换;小于 0 的概率按 0 处理,大于 100 的概率按 100 处理并产生警告。

旧版产物命令也会转换为当前 {命令} 格式。旧版产物命令没有执行身份前缀时,会按旧版行为添加 [console] 前缀。

转换生成的规则 ID 会添加 旧版_ 前缀。规则 ID 中的英文点号会替换为全角点号,转换后发生重复时会追加递增编号。

转换文件使用 UTF-8 无 BOM 编码写入。旧版输入文件可以是 UTF-8,也可以带有 UTF-8 BOM。

重载校验

执行 /lyfj reload 时会校验以下内容:

  • 主配置 YAML 和规则文件 YAML 是否能够正常读取。
  • 主配置根节点是否包含不支持的字段。
  • 每条规则是否包含不支持的字段。
  • delivery-order 是否为列表。
  • delivery-order 是否只包含字符串、支持的目标和不重复的目标。
  • global-condition 是否为字符串列表。
  • 全局条件、规则条件和 put 按钮条件的基础语法。
  • 条件中的括号和单引号是否完整闭合。
  • 条件函数名称是否受支持。
  • papi() 条件需要的 PlaceholderAPI 是否可用。
  • NBT 条件需要的服务端 NBT 适配器是否可用。
  • 规则 ID 是否重复。
  • 规则是否至少配置一行条件。
  • 产物定义格式是否正确。
  • 产物引用的物品库是否存在并已启用。
  • 额外按钮编号、节点类型、字段和动作是否正确。
  • 额外按钮显示物品是否能够创建。
  • 额外按钮冷却是否为非负整数。
  • 额外按钮的 conditioncommand 是否符合对应动作要求。

阻止重载的常见错误:

错误结果
YAML 无法读取或格式错误本次重载失败
主配置或规则包含未知字段本次重载失败
规则 ID 重复本次重载失败
规则没有有效 condition本次重载失败
条件语法错误本次重载失败
papi() 或 NBT 条件依赖不可用本次重载失败
产物格式错误本次重载失败
产物物品库不可用本次重载失败
额外按钮配置错误本次重载失败
give-item: true 但没有 result只产生警告,允许重载

重载失败时,控制台会输出全部错误,指令发送者也会收到错误列表。重载成功时,会显示加载的规则数量、额外按钮数量和警告数量。