Skip to content

常见问题

套装没有激活

按以下顺序检查:

  1. 检查 plugin-slot 是否填写了实际存放装备的槽位。插件只会读取配置中声明的槽位,不会自动统计玩家身上的其它位置。
  2. 检查物品是否满足 suit.<套装ID>.set 下的匹配条件。
  3. 检查套装的 permission。填写后,玩家必须拥有对应权限;留空或删除时不进行权限限制。
  4. 检查套装的 papi 条件。所有条件都必须满足,否则整套套装不会参与匹配。
  5. 修改配置后执行 /lsr reload,确认控制台没有配置加载错误。

套装匹配完成后,插件会根据命中的 set 节点数量计算当前层数。每个 set 节点最多计入一次。

plugin-slot 应该怎么填写

plugin-slot 必须使用插件支持的槽位格式。常用格式如下:

槽位类型配置格式
DragonCoreDragonCore#槽位名
GermPluginGermPlugin#槽位名
原版背包Minecraft#槽位ID
APInventoryAPInventory#分页ID#槽位ID
LyInventory 1.0LyInventory#背包ID#类型
LyInventory 2.0LyInventoryReload#背包ID#类型
YeeJewelryYeeJewelry#背包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-360-35 的说明,实际使用时应以服务器版本和对应背包实现的槽位编号为准。

namelorenbt 如何匹配

set 下每个键代表一个部件ID,值代表该部件的匹配规则:

条件写法匹配方式
物品名称name=测试头盔物品显示名称包含指定文本
物品Lorelore=测试衣服任意一行Lore包含指定文本
物品NBTnbt=a.b.c=测试裤子按NBT路径读取字符串值,并要求值完全相等

nbt 的路径使用 . 分隔,例如 a.b.c 表示逐层读取 abc 节点。末级节点必须是字符串类型,并且内容必须与配置值完全一致。

一个部件需要满足多个条件怎么办

使用分号分隔多个条件。所有条件都满足时,该部件才会命中:

yaml
set:
  测试部件: 'name=测试名称;lore=测试Lore;nbt=a.b.c=测试值'

条件之间可以包含空格,插件会在解析条件时去除条件两侧的空白。未知的条件类型会被视为不满足,并在控制台输出警告。

permissionpapi 条件没有生效

套装级 permissionpapi 条件会在套装匹配前检查:

  • permission 不为空时,玩家必须拥有该权限。
  • papi 下的每一条表达式都必须成立。
  • papi 条件使用 PlaceholderAPI 处理占位符,因此服务器需要启用 PlaceholderAPI。
  • 表达式支持数值比较、字符串相等或不相等比较、布尔值判断,以及 &&|| 逻辑运算。

set 内也可以使用以下玩家条件:

条件示例要求
PAPI 条件papi=%player_level% >= 10表达式计算结果为真
权限条件permission=vip.1玩家拥有 vip.1
无权限条件nopermission=vip.1玩家没有 vip.1

玩家条件不满足时,对应的 set 节点不会计入套装层数。

套装属性没有生效

先确认套装已经命中,再检查 attribute-plugin 是否与服务器实际使用的属性插件一致。项目支持以下配置值:

  • AttributePlus
  • SX-Attribute2
  • SX-Attribute3
  • ItemLoreOrigin
  • AttributeCompatibleAPI
  • AttributeSystem

修改 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 支持的名称,例如 SPEEDJUMPINCREASE_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%返回指定套装是否至少激活一个部件,结果为 truefalse
%lsr_layer-套装ID%返回指定套装当前激活的部件数量
%lsr_mouse_info%返回DragonCore当前鼠标指向物品对应套装的显示文本
%lsr_mouse_width%返回DragonCore当前鼠标指向套装文本的最大字符长度
%lsr_mouse_height%返回DragonCore当前鼠标指向套装文本的行数

使用这些变量前,需要确认 PlaceholderAPI 已安装并正常运行。mouse_* 变量还需要 DragonCore 的相关事件数据能够正常传递。

DragonCore 鼠标提示没有显示套装信息

插件只会处理标识符为 lysuitreload 的 DragonCore 自定义数据包,并识别以下数据:

  • renderMakerTip:根据鼠标指向的物品匹配套装。
  • clear:清除当前鼠标指向的套装。

请确认:

  1. DragonCore 已安装并启用。
  2. DragonCore 的提示交互使用了插件识别的标识符 lysuitreload
  3. 传入 renderMakerTip 的物品数据可以被 DragonCore 转换为物品。
  4. 该物品满足某个套装的 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.101.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。玩家缓存尚未建立时,相关数据可能尚未准备完成。

为什么套装没有任何部件也会被处理

如果套装的 permissionpapi 条件满足,但没有配置物品条件,插件可能会保留该套装的非物品规则结果。不过,正常的装备套装应在 set 中配置明确的 namelorenbt 条件,并通过 plugin-slot 指定需要读取的槽位。

配置修改后是否必须重启

以下配置可以通过 /lsr reload 重新读取:

  • 主配置中的套装定义。
  • extra 目录中的额外套装文件。
  • have-item-replaceno-item-replace
  • plugin-slot
  • 套装属性、效果和匹配条件。

修改 attribute-plugin 后建议重启服务器。NBT实现由服务器版本决定,服务器版本不支持时不能通过重载解决。