常见问题
插件加载后 /lyfj 没有完整功能怎么办?
插件启动时先加载基础部分。核心模块验证并初始化成功后,才会注册分解界面、分解规则、额外按钮和完整帮助信息。
如果帮助中只有 reload,没有 open,说明当前仍处于基础插件模式。基础模式只提供配置重载,不提供玩家分解界面。
核心模块初始化成功后,控制台会输出:
text
离渊分解重置版启动。/lyfj open 打不开界面怎么办?
按以下顺序检查:
- 确认核心模块已经完成验证和初始化。
- 确认执行者是玩家,控制台不能打开玩家分解界面。
- 确认使用完整指令:
text
/lyfj openopen 只在核心模块初始化后注册。项目没有配置独立权限节点,命令帮助和 reload 的权限判断使用管理员状态;打开界面时,代码只检查执行者是否为玩家。
/lyfj reload 没有生效怎么办?
确认执行者是管理员,并使用:
text
/lyfj reload核心模块模式下,重载会重新读取:
config.ymlconfig.yml中的decomposition-setextra文件夹及其子目录中的全部.yml文件prohibit-decomposition-loreextra-button
基础插件模式下,重载只重新读取 config.yml,不会加载额外分解规则和额外按钮。
重载后新规则仍然没有生效怎么办?
检查规则文件是否满足以下条件:
- 主配置中的规则位于
decomposition-set下。 - 额外规则文件也使用
decomposition-set作为根节点。 - 文件扩展名为
.yml。 - 文件位于插件目录的
extra文件夹或其子目录中。 id使用数字ID:子ID格式时,两部分都能转换为数字。result使用物品#数量或数量范围#几率格式。
插件会递归扫描 extra 文件夹中的 .yml 文件。额外规则可以写成:
yaml
decomposition-set:
'示例规则':
name: '示例物品'
lore: '示例 Lore'
give: true
result:
- '材料#1-2#100'修改后执行 /lyfj reload。规则重载时,旧的规则数据会被清空后重新载入。
放入物品后没有预览怎么办?
界面预览会从上方分解格子中按顺序查找第一个匹配到规则的物品,并展示该物品对应规则的产物。
没有预览时,重点检查:
id是否匹配物品数字 ID和子 ID。name是否匹配物品显示名称。lore是否匹配物品 Lore 的某一行。containsName或containsLore是否设置正确。- 物品 Lore 是否包含
prohibit-decomposition-lore中的禁止文本。 - 规则是否已经通过
/lyfj reload重新载入。
containsName 和 containsLore 有什么区别?
| 配置项 | 作用 |
|---|---|
containsName: false | 显示名称必须与 name 完全一致 |
containsName: true | 显示名称中包含 name 即可 |
containsLore: false | 某一行 Lore 必须与 lore 完全一致 |
containsLore: true | 某一行 Lore 中包含 lore 即可 |
这两个配置分别只影响名称和 Lore。对应字段为空时,不会使用该字段进行匹配。
为什么配置了 id: '0:0' 后仍然能匹配物品?
分解规则的 id、name 和 lore 都是可选匹配条件。
代码只在物品 ID大于 0 时进行 ID匹配,只在子 ID大于 0 时进行子 ID匹配。因此,0:0 不会限制物品 ID。name 或 lore 为空时,也不会限制名称或 Lore。
带绑定 Lore 的物品为什么不能分解?
prohibit-decomposition-lore 会检查物品的所有 Lore 行。只要任意一行包含列表中的文本,该物品就不会被统计、预览或分解。
默认配置为:
yaml
prohibit-decomposition-lore:
- '已绑定'修改配置后执行:
text
/lyfj reload该匹配使用包含判断,不要求整行 Lore 完全一致。
同一个物品匹配多条规则时会怎样?
插件会收集所有符合物品 ID、子 ID、名称、Lore 和禁止 Lore 检查的规则。
界面预览只使用分解格子中第一个匹配物品,并显示该物品匹配到的全部规则产物。实际分解时,匹配到的多条规则会依次执行,因此结果可以叠加。
分解界面最多可以放多少个物品?
分解格子数量由 open-decomposition-slot 控制,代码支持的上限为 18:
yaml
open-decomposition-slot: 18界面上方的第 0 到第 17 格为分解格子。配置数量小于 18 时,超过数量的格子会被填充物品并禁止放入;配置数量大于 18 时,界面仍只有这 18 个上方格子可用。
左键和右键分解有什么区别?
点击界面中央的分解按钮时:
| 点击方式 | 处理方式 |
|---|---|
| 左键 | 处理一次可分解物品堆 |
| 右键及其他点击方式 | 最多按可用分解格子数量循环处理 |
每次处理一个物品堆时,插件会按物品数量逐个执行匹配到的规则。分解按钮存在约 1 秒点击冷却。
分解时提示背包空间不足怎么办?
插件会根据当前匹配规则的 result 条目数量检查玩家背包空位。message.fail 中的 %slot 会替换为本次检查所需的空位数量。
配置示例:
yaml
message:
fail: '&7分解失败,请查看是否有物品可分解或背包不足%slot格'如果处理物品堆的过程中背包空间不足,当前操作会停止。分解前应预留足够背包空间。
产物数量和几率是怎样计算的?
result 的每一项格式为:
text
物品#数量或数量范围#几率示例:
yaml
result:
- '材料#1-2#100'| 部分 | 说明 |
|---|---|
材料 | 产物 ID,可以使用物品库前缀 |
1-2 | 随机数量范围,代码按包含最小值和最大值的方式取值 |
100 | 产出几率,按 0 到 100 的范围进行随机判断 |
界面预览显示数量范围中的最大值,实际分解时数量和几率分别随机计算。
如果 result 中存在第四段及之后的文本,代码会把这些内容作为控制台命令执行,并在执行前解析 PlaceholderAPI 变量。
为什么预览中的数量和实际获得数量不同?
预览只显示配置数量或数量范围的最大值。
例如:
yaml
result:
- '材料#1-2#100'预览显示 2,实际分解时可能获得 1 或 2。
give: false 会有什么效果?
give: false 时,规则仍然可以匹配物品,也会处理额外条件和规则命令,但不会发放 result 中的产物。
未配置 give 时,默认值为 true。
产物 ID 必须怎么写?
产物可以直接写普通物品 ID,也可以使用带前缀的物品库 ID:
yaml
result:
- 'SX-Item@物品#1#100'项目代码支持的前缀如下:
| 前缀 | 物品来源 |
|---|---|
AzureFlow@ | AzureFlow |
NeonFlash@ | NeonFlash |
SX-Item@ | SX-Item |
neigeItems@ | NeigeItems |
originAttribute@ | OriginAttribute |
带前缀时,插件优先使用对应物品来源;部分来源读取失败后会回退到 MythicMobs。
不带前缀时,插件按照配置开关选择物品来源。未启用这些开关时,代码会尝试使用 MythicMobs。
物品库开关的作用是什么?
| 配置项 | 作用 |
|---|---|
LyEntryReload | 启用时优先读取 LyEntryReload 物品,读取不到时尝试 NeigeItems |
neigeItems | 启用 NeigeItems 物品库支持 |
originAttribute | 启用 OriginAttribute 物品支持,读取不到时尝试 MythicMobs |
AzureFlow | 启用 AzureFlow 物品库支持,读取不到时尝试 MythicMobs |
SX-Item | 启用 SX-Item 物品库支持,读取不到时尝试 MythicMobs |
带前缀的产物直接按前缀选择来源。无前缀产物根据开关顺序读取;具体使用哪一种物品库时,建议使用对应前缀,避免多个开关同时启用造成来源判断不明确。
为什么控制台提示物品不存在?
分解产物创建失败时,控制台会输出物品不存在提示。常见原因包括:
- 物品 ID 拼写错误。
- 对应物品插件未安装或未启用。
- 对应物品库开关未开启。
- 使用了错误的前缀。
- 物品库中不存在对应 ID。
- MythicMobs 未安装,但配置使用了无前缀物品 ID并依赖 MythicMobs 回退。
确认物品来源和 ID 后,执行 /lyfj reload 重新加载规则。
关闭界面时物品去哪了?
关闭界面时,插件会把上方分解格子中的未处理物品返还到玩家背包。
当背包空间不足时,是否掉落到玩家当前位置由 drop-near 控制:
yaml
drop-near: true| 配置值 | 行为 |
|---|---|
true | 背包放不下的物品掉落在玩家当前位置,并发送 message.inv-max |
false | 不执行代码中的掉落处理 |
关闭界面前应确保背包有足够空间。
点击额外按钮没有反应怎么办?
额外按钮只从 config.yml 的 extra-button 中读取编号 0 到 8 的槽位。按钮编号超出范围时不会加载。
支持的按钮类型如下:
type 写法 | 作用 |
|---|---|
get | 尝试取出全部分解格子中的物品 |
put:<Lore文本> | 遍历玩家背包,将 Lore 任意一行包含指定文本的物品放入分解格子 |
示例:
yaml
extra-button:
0:
type: 'put:&7品质: &a一般'
item: '160:5'
name: '&7一键放入&a一般&7品质的装备'
lore:
- '[点我]'
8:
type: 'get'
item: '160:7'
name: '&7一键取回全部装备'
lore: []按钮的 item 使用旧版数字物品 ID和子 ID格式。按钮点击存在约 1 秒冷却。
为什么额外按钮最多只能配置 9 个?
界面底部只使用第 0 到第 8 个槽位显示额外按钮,共 9 个位置。配置编号小于 0 或大于 8 时会被跳过,不会加载。
未配置的底部槽位会显示填充物品。
额外条件不满足时为什么没有产物?
额外条件会在规则执行前检查。一个额外条件中的多个 condition 必须全部通过,该条件对应的 result 才会加入执行列表。
项目支持以下条件格式:
| 条件格式 | 判断方式 |
|---|---|
papi:{表达式} | 先解析 PlaceholderAPI 变量,再进行比较 |
permission:{权限节点} | 玩家拥有指定权限时通过 |
nopermission:{权限节点} | 玩家没有指定权限时通过 |
roll:{数值} | 按 0 到 100 的范围进行随机判断 |
papi:{} 条件支持 >=、<=、==、> 和 < 比较。多个比较可以使用 && 连接,例如:
yaml
condition:
- 'papi:{%player_level% >= 5 && %player_level% <= 10}'$return 和 $continue 有什么区别?
这两个动作写在额外条件的 result 列表中:
| 动作 | 作用 |
|---|---|
$return | 立即结束当前规则执行,不再发放该规则产物,也不再执行当前规则后续动作 |
$continue | 跳过当前动作,继续处理后面的动作 |
额外条件还支持调整当前规则产物几率的动作:
$addChance:{数值}:增加几率。$takeChance:{数值}:减少几率。$setChance:{数值}:直接设置几率。
额外条件可以执行哪些动作?
项目代码支持以下动作格式:
| 动作格式 | 作用 |
|---|---|
$msg:{消息} | 向玩家发送消息 |
$consoleCmd:{命令} | 以控制台身份执行命令 |
$playerCmd:{命令} | 以玩家身份执行命令 |
$opCmd:{命令} | 临时以管理员身份执行玩家命令 |
$addChance:{数值} | 增加当前规则产物几率 |
$takeChance:{数值} | 减少当前规则产物几率 |
$setChance:{数值} | 设置当前规则产物几率 |
$continue | 跳过当前动作 |
$return | 停止当前规则执行 |
命令中的 %p 会替换为当前玩家名称。产物附加命令还会经过 PlaceholderAPI 解析。
分解规则中的 commands 怎么执行?
规则可以配置 commands 列表:
yaml
commands:
- '[op]bc %p分解了条件1'
- '[console]bc %p分解了条件1'
- '[player]bc %p分解了条件1'支持的执行方式如下:
| 前缀 | 执行身份 |
|---|---|
[op] | 临时提升玩家为管理员后执行,再恢复原状态 |
[console] | 以控制台身份执行 |
| 无前缀 | 以玩家身份执行 |
命令中的 %p 会替换为当前玩家名称。
为什么分解结果会存入战利品仓库?
当以下条件同时满足时,产物会直接交给 LyLootsWareHouse:
is-save-to-lylootswarehouse: true。- LyLootsWareHouse 已安装并启用。
- LyLootsWareHouse 中存在对应物品。
配置示例:
yaml
is-save-to-lylootswarehouse: false不满足条件时,产物会正常加入玩家背包。该功能不是 MySQL 存储功能,不需要根据项目证据额外安装 LyMySQLCore。
为什么分解后没有发送成功消息?
成功消息由 message.success 控制:
yaml
message:
success: '&a分解完毕!'单个产物消息由 message.result 控制。代码支持以下占位符:
| 占位符 | 内容 |
|---|---|
%name | 被分解物品名称 |
%item | 获得的产物名称 |
%amount | 获得数量 |
当产物存入 LyLootsWareHouse 时,数量文本会附加仓库存储提示。
如果成功消息没有出现,检查 message.success 是否存在,并确认本次操作确实匹配到规则且完成了分解。
服务器版本应该如何确认?
插件的 plugin.yml 声明:
yaml
api-version: 1.13项目构建时使用 Paper API 1.16.5-R0.1-SNAPSHOT,代码包含低于 1.13 的旧版材质 ID兼容处理,并通过材质名称、数字 ID和子 ID创建物品。
项目证据没有提供更高版本的单独兼容性声明。实际可用性还取决于服务器核心以及所使用物品插件的 API兼容性。
插件需要哪些依赖?
插件在 plugin.yml 中声明的软依赖只有:
| 插件 | 类型 |
|---|---|
| MythicMobs | 软依赖,作为默认物品来源和部分物品来源的回退 |
根据功能使用情况,还会调用以下插件或接口:
- LyEntryReload
- NeigeItems
- OriginAttribute
- AzureFlow
- SX-Item
- NeonFlash
- PlaceholderAPI
- LyLootsWareHouse
这些插件没有在 plugin.yml 中声明为依赖。使用对应前缀、配置开关、PlaceholderAPI 条件或战利品仓库功能时,应确认对应插件已安装并启用。
项目证据中没有 MySQL 存储配置或 MySQL 数据库实现,因此本插件当前不需要安装 LyMySQLCore,也不存在“连接数据库后分解功能才生效”的配置要求。
分解界面为什么不能拖动物品?
界面会拦截拖拽事件,拖拽操作会被取消。物品应通过普通点击、快捷移动或额外按钮进入分解格子。
界面上方超过 open-decomposition-slot 的格子、分解按钮、产物预览区域、填充区域和额外按钮区域也会被限制点击,避免直接修改界面内容。
关闭界面时物品被重复返还怎么办?
每个分解界面状态只执行一次关闭返还逻辑。插件会记录该界面是否已经完成返还,避免同一次关闭事件重复返还物品。
如果背包无法容纳返还物品,是否掉落仍由 drop-near 决定。
为什么修改额外按钮后没有变化?
额外按钮只从主配置 config.yml 读取,不会从 extra 文件夹中的规则文件读取。修改后需要执行:
text
/lyfj reload同时确认:
- 槽位编号为
0到8。 type为get或以put:开头。item使用可创建的数字 ID、子 ID或材质名称。name和lore位于对应数字槽位下。
为什么规则文件放在 extra 后仍然没有加载?
extra 文件夹中的文件必须同时满足以下条件:
- 文件扩展名为
.yml,大小写不影响判断。 - 文件或其子目录位于插件目录的
extra下。 - 文件根节点包含
decomposition-set。 - 规则条目位于
decomposition-set的下一层。
例如,以下结构可以被扫描:
text
plugins/LyDecompositionReload/extra/额外配置.yml
plugins/LyDecompositionReload/extra/custom/规则.yml以下文件不会被加载:
text
plugins/LyDecompositionReload/extra/规则.txt
plugins/LyDecompositionReload/extra/规则.yml.bak修改文件后执行 /lyfj reload。