常见问题
套装没有激活
按以下顺序检查:
- 检查
plugin-slot是否填写了实际存放装备的槽位。插件只会读取配置中声明的槽位,不会自动统计玩家身上的其它位置。 - 检查物品是否满足
suit.<套装ID>.set下的匹配条件。 - 检查套装的
permission。填写后,玩家必须拥有对应权限;留空或删除时不进行权限限制。 - 检查套装的
papi条件。所有条件都必须满足,否则整套套装不会参与匹配。 - 修改配置后执行
/lsr reload,确认控制台没有配置加载错误。
套装匹配完成后,插件会根据命中的 set 节点数量计算当前层数。每个 set 节点最多计入一次。
plugin-slot 应该怎么填写
plugin-slot 必须使用插件支持的槽位格式。常用格式如下:
| 槽位类型 | 配置格式 |
|---|---|
| DragonCore | DragonCore#槽位名 |
| GermPlugin | GermPlugin#槽位名 |
| 原版背包 | Minecraft#槽位ID |
| APInventory | APInventory#分页ID#槽位ID |
| LyInventory 1.0 | LyInventory#背包ID#类型 |
| LyInventory 2.0 | LyInventoryReload#背包ID#类型 |
| YeeJewelry | YeeJewelry#背包ID#槽位ID |
| 主手 | Origin#MainHand |
| 副手 | Origin#OffHand |
| 头盔 | Origin#Helmet |
| 胸甲 | Origin#ChestPlate |
| 护腿 | Origin#Legging |
| 靴子 | Origin#Boots |
| 旧版本主手 | Origin2#MainHand |
例如:
yaml
plugin-slot:
- 'Minecraft#8'
- 'Origin#Helmet'
- 'Origin#MainHand'原版背包槽位使用数字索引。项目配置注释中同时出现了 0-36 和 0-35 的说明,实际使用时应以服务器版本和对应背包实现的槽位编号为准。
name、lore 和 nbt 如何匹配
set 下每个键代表一个部件ID,值代表该部件的匹配规则:
| 条件 | 写法 | 匹配方式 |
|---|---|---|
| 物品名称 | name=测试头盔 | 物品显示名称包含指定文本 |
| 物品Lore | lore=测试衣服 | 任意一行Lore包含指定文本 |
| 物品NBT | nbt=a.b.c=测试裤子 | 按NBT路径读取字符串值,并要求值完全相等 |
nbt 的路径使用 . 分隔,例如 a.b.c 表示逐层读取 a、b、c 节点。末级节点必须是字符串类型,并且内容必须与配置值完全一致。
一个部件需要满足多个条件怎么办
使用分号分隔多个条件。所有条件都满足时,该部件才会命中:
yaml
set:
测试部件: 'name=测试名称;lore=测试Lore;nbt=a.b.c=测试值'条件之间可以包含空格,插件会在解析条件时去除条件两侧的空白。未知的条件类型会被视为不满足,并在控制台输出警告。
permission 和 papi 条件没有生效
套装级 permission 和 papi 条件会在套装匹配前检查:
permission不为空时,玩家必须拥有该权限。papi下的每一条表达式都必须成立。papi条件使用 PlaceholderAPI 处理占位符,因此服务器需要启用 PlaceholderAPI。- 表达式支持数值比较、字符串相等或不相等比较、布尔值判断,以及
&&和||逻辑运算。
set 内也可以使用以下玩家条件:
| 条件 | 示例 | 要求 |
|---|---|---|
| PAPI 条件 | papi=%player_level% >= 10 | 表达式计算结果为真 |
| 权限条件 | permission=vip.1 | 玩家拥有 vip.1 |
| 无权限条件 | nopermission=vip.1 | 玩家没有 vip.1 |
玩家条件不满足时,对应的 set 节点不会计入套装层数。
套装属性没有生效
先确认套装已经命中,再检查 attribute-plugin 是否与服务器实际使用的属性插件一致。项目支持以下配置值:
AttributePlusSX-Attribute2SX-Attribute3ItemLoreOriginAttributeCompatibleAPIAttributeSystem
修改 attribute-plugin 后建议重启服务器。AttributeCompatibleAPI 会在插件启动时注册来源插件,并通过兼容接口下发属性。
还需要确认对应属性插件已经安装并正常运行。插件只负责按照套装层数整理并下发 sx 中的属性文本,不会替换属性插件自身的属性格式。
套装属性层数不正确
属性层数根据当前命中的 set 节点数量计算。插件会查找不超过当前层数的最高 sx 配置层级,并使用该层级的属性列表。
例如:
yaml
sx:
1:
- '攻击力+1'
3:
- '攻击力+3'当玩家激活 2 个部件时,会继续使用第 1 层属性;当玩家激活 3 个或更多部件时,使用第 3 层属性。不需要为每一个中间层级都填写配置。
药水效果没有生效
药水效果使用 effect 配置,不使用 sx 配置。效果键为层数,值为 药水类型-等级:
yaml
effect:
1:
- 'SPEED-1'
2:
- 'SPEED-2'检查以下内容:
- 当前命中的部件数量是否达到对应层数。
- 药水类型是否使用 Bukkit 支持的名称,例如
SPEED、JUMP或INCREASE_DAMAGE。 - 等级是否为可解析的数字。
- 配置值是否使用单个短横线分隔类型和等级。
插件会定时刷新效果。配置错误时,控制台会输出药剂错误信息。
套装Lore中的占位内容没有替换
套装Lore支持以下内置标记:
| 标记 | 作用 |
|---|---|
<now> | 当前激活的部件数量 |
%now | 当前激活的部件数量 |
<max> | set 下的部件总数 |
<now-layer> | 当前已达到的最高属性层级 |
<next-layer> | 下一层属性对应的层级 |
<state-部件ID> | 根据部件是否激活替换状态颜色 |
<sx> | 插入当前属性层的文本 |
<next-sx> | 插入下一属性层的文本 |
<state-部件ID> 中的部件ID必须与同一套装 set 下的键完全一致。例如:
yaml
lore:
- '&6测试套装 [<now>/<max>]'
- '<state-测试头盔>测试头盔'
- '&7当前激活 &6<now-layer>件 &7套装属性:'
- '<sx>'
- '&7当达到 &6<next-layer>件 &7可获得属性:'
- '<next-sx>'套装文本颜色不对
检查以下配置:
yaml
have-item-replace: '&a'
no-item-replace: '&7'have-item-replace 用于替换已激活部件的 <state-部件ID>,no-item-replace 用于替换未激活部件的状态。
如果状态文本没有变化,重点检查:
lore中的<state-部件ID>是否拼写正确。- 部件ID是否与
set下的键完全一致。 - 配置是否在重载后重新读取。
PAPI 变量没有返回内容
插件注册的 PlaceholderAPI 标识符为 lsr。支持的变量如下:
| 变量 | 作用 |
|---|---|
%lsr_show% | 返回所有已激活套装的完整显示文本,并使用换行符分隔 |
%lsr_show-行数% | 返回指定行的显示文本,行数从 1 开始 |
%lsr_suit1-套装ID% | 返回指定套装文本,并使用 <> 作为换行符 |
%lsr_suit2-套装ID% | 返回指定套装文本,并使用 \n 作为换行符 |
%lsr_suit3-套装ID% | 返回指定套装是否至少激活一个部件,结果为 true 或 false |
%lsr_layer-套装ID% | 返回指定套装当前激活的部件数量 |
%lsr_mouse_info% | 返回DragonCore当前鼠标指向物品对应套装的显示文本 |
%lsr_mouse_width% | 返回DragonCore当前鼠标指向套装文本的最大字符长度 |
%lsr_mouse_height% | 返回DragonCore当前鼠标指向套装文本的行数 |
使用这些变量前,需要确认 PlaceholderAPI 已安装并正常运行。mouse_* 变量还需要 DragonCore 的相关事件数据能够正常传递。
DragonCore 鼠标提示没有显示套装信息
插件只会处理标识符为 lysuitreload 的 DragonCore 自定义数据包,并识别以下数据:
renderMakerTip:根据鼠标指向的物品匹配套装。clear:清除当前鼠标指向的套装。
请确认:
- DragonCore 已安装并启用。
- DragonCore 的提示交互使用了插件识别的标识符
lysuitreload。 - 传入
renderMakerTip的物品数据可以被 DragonCore 转换为物品。 - 该物品满足某个套装的
set条件。
额外套装文件没有读取
额外套装文件必须放在插件目录的 extra 文件夹中,并且文件扩展名为 .yml。文件必须包含 suit 根节点:
yaml
suit:
套装2:
permission: ''
set:
测试头盔: 'name=测试2头盔'插件会递归读取 extra 目录及其子目录中的 .yml 文件。随插件提供的 示例套装.yml 会被自动忽略,不会重复载入。
保存文件后执行:
text
/lsr reload如果文件结构错误、套装ID重复或条件无法解析,请查看控制台输出的加载警告。
重载后配置仍然没有变化
/lsr reload 只有管理员身份,即 Bukkit 的 isOp() 判断通过时才会执行。命令注册为 lsr,完整命令为:
text
/lsr reload重载时会重新读取主配置、额外套装文件,并重新注册属性和药水效果任务。修改 attribute-plugin 后仍建议重启服务器。
玩家更换装备后没有立即更新
插件会在以下事件后刷新玩家套装缓存:
- 玩家加入服务器。
- 玩家关闭背包界面。
- 玩家切换快捷栏物品。
- 玩家交换主副手物品。
属性和药水效果还会按任务周期继续检查。若使用的是其它背包插件,请确认该背包的槽位已经写入 plugin-slot,并在操作后触发了插件支持的刷新事件。
NBT 匹配在当前版本不可用
项目内置了 1.7.10 和 1.12.2 的NBT读取实现。插件启动时会根据 Bukkit 版本初始化对应实现;其它版本会提示当前游戏版本不支持NBT检测。
如果服务器不是这两个版本,nbt= 条件可能无法命中。此时可以改用 name= 或 lore= 条件,或者使用项目对应版本的实现。
API 获取不到套装数据
插件提供以下 API 方法:
| 方法 | 返回内容 |
|---|---|
getEnableSuits(Player player) | 获取玩家已激活套装及对应层数的映射 |
getEnableSuitLayer(Player player, String suit) | 获取指定套装的激活层数 |
API 接口位于 Ly.suit.plugin.api.LySuitAPI。实际调用前需要确认插件已经完成初始化,并通过插件实例获取 API。玩家缓存尚未建立时,相关数据可能尚未准备完成。
为什么套装没有任何部件也会被处理
如果套装的 permission 和 papi 条件满足,但没有配置物品条件,插件可能会保留该套装的非物品规则结果。不过,正常的装备套装应在 set 中配置明确的 name、lore 或 nbt 条件,并通过 plugin-slot 指定需要读取的槽位。
配置修改后是否必须重启
以下配置可以通过 /lsr reload 重新读取:
- 主配置中的套装定义。
extra目录中的额外套装文件。have-item-replace和no-item-replace。plugin-slot。- 套装属性、效果和匹配条件。
修改 attribute-plugin 后建议重启服务器。NBT实现由服务器版本决定,服务器版本不支持时不能通过重载解决。