Skip to content

配置说明

config.yml 用于配置套装匹配规则、套装显示文本、属性与药水效果、物品读取槽位,以及 PlaceholderAPI 相关条件。

插件会在启动和执行 /lsr reload 时读取主配置,并加载 extra 目录及其子目录中的其他 .yml 文件。

配置文件

文件或目录用途
config.yml主配置文件,包含全局配置和主套装配置。
extra/*.yml额外套装配置文件,文件内容使用 suit 节点。插件会递归读取子目录中的 .yml 文件。
extra/示例套装.yml插件自动释放的示例文件,不会被重复加载为套装配置。

额外套装文件必须使用以下结构:

yaml
suit:
  套装ID:
    permission: ''
    set: {}
    lore: []

同一套装 ID 不应在多个文件中重复定义。后加载的配置可能覆盖前面已加载的同名套装数据。

全局配置

attribute-plugin

yaml
attribute-plugin: 'AttributePlus'

指定套装属性的处理方式。

说明
AttributePlus通过 AttributePlus 添加属性。
AttributePlus2代码中保留了对应处理分支,会先删除插件来源属性,再重新添加当前属性列表。
SX-Attribute2使用 SX-Attribute 2 的 API 处理属性。
SX-Attribute3使用 SX-Attribute 3 的 API 处理属性。
ItemLoreOrigin将套装属性组合为物品 Lore,并交给 ItemLoreOrigin 处理。
AttributeCompatibleAPI通过 AttributeCompatibleAPI 添加并合并属性来源。
AttributeSystem通过 AttributeSystem 的 API 添加属性。

如果设置为 SX-Attribute2SX-Attribute3,插件会初始化对应的 SX-Attribute API。

设置为 ItemLoreOrigin 时,插件会按照 ilo-update-task 的配置周期更新 ItemLoreOrigin 的属性物品。

修改 attribute-plugin 后应重启服务器,使对应属性处理方式重新初始化。使用 AttributeCompatibleAPI 时,插件启动后会注册自身为属性来源插件。

ilo-update-task

yaml
ilo-update-task: 20

ItemLoreOrigin 模式下的属性更新周期,单位为 Bukkit tick。代码默认读取 20,即约 1 秒执行一次更新。

该配置只在 attribute-plugin 设置为 ItemLoreOrigin 时有实际作用。

plugin-slot

yaml
plugin-slot:
  - 'Minecraft#8'

指定参与套装统计的物品槽位。只有写入 plugin-slot 的槽位会被读取。

插件只会收集存在物品元数据的物品;没有 ItemMeta 的物品不会加入匹配计算。

每一项使用 # 分隔类型和槽位参数。

写法说明
DragonCore#槽位名读取 DragonCore 槽位。
GermPlugin#槽位名读取 GermPlugin 槽位。
Minecraft#槽位ID读取原版玩家背包槽位。代码直接使用槽位 ID 读取 Bukkit 背包。
APInventory#分页ID#槽位ID读取 APInventory 指定分页的槽位。
LyInventory#背包ID#类型读取 LyInventory 1.0 的背包槽位。
LyInventoryReload#背包ID#类型读取 LyInventoryReload 的背包槽位。
YeeJewelry#背包ID#槽位ID读取 YeeJewelry 饰品槽位。
Origin#MainHand读取原版主手。匹配时不区分大小写。
Origin#OffHand读取原版副手。匹配时不区分大小写。
Origin#Helmet读取头盔槽位。
Origin#ChestPlate读取胸甲槽位。
Origin#Legging读取护腿槽位。
Origin#Boots读取靴子槽位。
Origin2#MainHand使用旧版 Bukkit 接口读取主手。匹配时不区分大小写。

示例:

yaml
plugin-slot:
  - 'Minecraft#8'
  - 'Origin#MainHand'
  - 'Origin#OffHand'
  - 'Origin#Helmet'
  - 'DragonCore#戒指'
  - 'GermPlugin#项链'
  - 'APInventory#饰品#3'
  - 'LyInventory#饰品#项链'
  - 'LyInventoryReload#饰品#项链'
  - 'YeeJewelry#饰品#0'

原版槽位说明

Minecraft#槽位ID 会直接调用 Bukkit 的背包槽位读取方法。配置文件注释中给出了 0-360-35 两种范围说明,实际可用范围以当前服务端 Bukkit 背包槽位为准。

外部槽位插件

使用外部插件槽位时,需要确保对应插件已安装并正常启用。插件只会在对应 API 能够返回物品时参与匹配。

状态颜色替换

yaml
have-item-replace: '&a'
no-item-replace: '&7'

这两个配置用于替换套装 Lore 中的部件状态标记。

配置项作用
have-item-replace玩家已收集对应部件时的替换文本,示例为绿色颜色代码。
no-item-replace玩家未收集对应部件时的替换文本,示例为灰色颜色代码。

在套装的 lore 中使用 <state-部件ID>

yaml
lore:
  - '<state-测试头盔>测试头盔'

如果 set 中的 测试头盔 已匹配,<state-测试头盔> 会替换为 have-item-replace;否则替换为 no-item-replace

套装配置

所有套装配置都位于 suit 节点下:

yaml
suit:
  套装ID:
    permission: ''
    papi:
      - '%player_level% >= 0'
    set:
      测试头盔: 'name=测试头盔'
    lore:
      - '&6测试套装 [<now>/<max>]'
    sx:
      1:
        - '攻击力+1'
    effect:
      1:
        - 'SPEED-1'
配置项类型说明
permission字符串套装激活所需权限。留空、删除或设置为空字符串时,不检查权限。
papi字符串列表套装级条件。所有条件都必须满足,套装才会参与匹配。
set键值映射套装部件匹配规则。键是部件 ID,值是匹配条件。
lore字符串列表套装显示 Lore 模板。
sx数字层级映射各套装层数对应的属性 Lore。
effect数字层级映射各套装层数对应的药水效果。

套装 ID

yaml
suit:
  '套装1':

套装 ID 是套装的唯一标识,会被用于套装变量、API 参数和 DragonCore 联动。建议在所有配置文件中保持唯一。

permission

yaml
permission: 'vip.1'

当玩家没有该权限时,整套套装不会参与统计。

留空时:

yaml
permission: ''

papi

yaml
papi:
  - '%player_level% >= 10'
  - '%player_world% == "world"'

papi 中的每一项都会先通过 PlaceholderAPI 替换占位符,再进行条件判断。所有条件都需要满足。

支持的比较方式包括:

写法说明
>大于比较。
>=大于或等于比较。
<小于比较。
<=小于或等于比较。
==数值或字符串相等比较。
!=数值或字符串不相等比较。
&&同时满足多个条件。
`
true直接判断为真。

示例:

yaml
papi:
  - '%player_level% >= 10 && %player_level% < 50'
  - '%player_world% == "world" || %player_world% == "world_nether"'

如果 papi 条件不满足,套装不会生效,也不会匹配其中的部件。

set

yaml
set:
  测试头盔: 'name=测试头盔'
  测试衣服: 'lore=测试衣服'
  测试裤子: 'nbt=a.b.c=测试裤子'

set 下的每个键都是一个部件 ID。一个部件 ID 最多计入一次套装层数。

部件值由一个或多个条件组成,多个条件使用英文分号 ; 分隔:

yaml
set:
  复合部件: 'name=测试装备;lore=特殊标记'

多个物品条件必须由同一件物品同时满足。部件一旦匹配成功,后续不会重复计数。

支持的部件匹配条件

条件格式说明
物品名称name=文本检查物品显示名称是否包含指定文本。
Lorelore=文本检查物品任意一行 Lore 是否包含指定文本。
NBTnbt=路径=值检查物品 NBT 指定路径的字符串值是否完全等于目标值。
PlaceholderAPIpapi=表达式按玩家条件判断。条件不满足时,该部件规则无效。
权限permission=权限节点玩家拥有权限时,该部件规则有效。
无权限nopermission=权限节点玩家没有权限时,该部件规则有效。

示例:

yaml
set:
  名称部件: 'name=测试头盔'
  Lore部件: 'lore=测试衣服'
  NBT部件: 'nbt=a.b.c=测试裤子'
  多条件部件: 'name=第一个条件;lore=第二个条件'
  等级部件: 'papi=%player_level% >= 10'
  VIP部件: 'permission=vip.1'
  非VIP部件: 'nopermission=vip.1'

name

name=文本 使用包含匹配,而不是完全相等匹配。

yaml
set:
  头盔: 'name=传说头盔'

物品显示名称中包含 传说头盔 时,该部件匹配成功。

lore

lore=文本 会逐行检查物品 Lore,只要任意一行包含指定文本即可。

yaml
set:
  护甲: 'lore=套装护甲'

nbt

NBT 条件格式为:

yaml
set:
  NBT部件: 'nbt=a.b.c=测试值'

其中:

部分说明
a.b.c使用 . 分隔的嵌套 NBT 路径。
测试值目标字符串值,必须完全匹配。

插件只匹配字符串类型的 NBT 值。当前项目只实现了 Minecraft 1.7.101.12.2 的 NBT 处理;其他版本启动时会提示不支持 NBT 检测,相关 NBT 条件将无法正常命中。

无物品条件的部件

如果某个部件规则只包含 papipermissionnopermission 条件,且玩家条件满足,则该部件可以直接计入,不需要额外的物品条件。

例如:

yaml
set:
  等级奖励: 'papi=%player_level% >= 10'
  VIP奖励: 'permission=vip.1'

Lore 显示模板

yaml
lore:
  - '&6测试套装 [<now>/<max>]'
  - '<state-测试头盔>测试头盔'
  - '<state-测试衣服>测试衣服'
  - '<state-测试裤子>测试裤子'
  - '&7当前激活 &6<now-layer>件 &7套装属性:'
  - '<sx>'
  - '&7当达到 &6<next-layer>件 &7可获得属性:'
  - '<next-sx>'

Lore 中的特殊标记会在生成套装显示文本时替换。

标记说明
<now>当前已匹配的部件数量。
%now当前已匹配的部件数量,代码同时支持该写法。
<max>set 下部件规则的总数量。
<now-layer>当前已达到的属性层级。
<next-layer>下一条可达到的属性层级。
<state-部件ID>根据部件是否匹配替换为已收集或未收集文本。
<sx>插入当前属性层级的属性 Lore。
<next-sx>插入下一属性层级的属性 Lore。

<sx><next-sx> 必须单独作为一行使用:

yaml
lore:
  - '&7当前属性:'
  - '<sx>'
  - '&7下一层属性:'
  - '<next-sx>'

当前层级和下一层级

当前层级由已匹配部件数量决定,并使用不超过当前层级的最高 sx 配置层级。

下一层级会从当前部件数量之后寻找下一条已配置的 sx 层级。如果没有找到下一层级,<next-sx> 不会插入属性内容。

属性配置 sx

yaml
sx:
  1:
    - '攻击力+1'
    - '持续获得加速1效果'
  2:
    - '攻击力+2'
    - '持续获得加速2效果'

键名是套装层级,值是该层级的属性字符串列表。

配置规则说明
层级键必须是可转换为整数的数字,例如 12
属性值每行一个属性字符串,内容由所选属性插件解析。
当前层级使用不超过已激活部件数量的最高已配置层级。
未达到任何层级Lore 显示中会使用 §7无
属性列表未变化插件会跳过重复下发。

套装属性会按所有套装分别计算,并将当前有效属性列表发送给 attribute-plugin 指定的属性系统。

药水效果配置 effect

yaml
effect:
  1:
    - 'SPEED-1'
  2:
    - 'SPEED-2'

药水效果格式为:

text
效果类型-等级
部分说明
效果类型Bukkit PotionEffectType 的名称。
等级代码直接转换为药水效果等级值。

代码中使用的常见效果名称如下:

配置名称中文名称
SPEED速度
FAST_DIGGING急迫
SLOW_DIGGING挖掘疲劳
INCREASE_DAMAGE力量
HEAL瞬间治疗
HARM瞬间伤害
JUMP跳跃提升
CONFUSION反胃
REGENERATION生命回复
DAMAGE_RESISTANCE抗性提升
FIRE_RESISTANCE防火
WATER_BREATHING水下呼吸
INVISIBILITY隐身
BLINDNESS失明
NIGHT_VISION夜视
HUNGER饥饿
WEAKNESS虚弱
POISON中毒
WITHER凋零
HEALTH_BOOST生命提升
ABSORPTION吸收
SATURATION饱和
FIRE着火

药水层级独立按照 effect 配置计算,不会使用 sx 的层级配置。例如,玩家达到 sx 的 2 层,但只配置了 effect 的 1 层,则药水效果仍使用 effect.1

插件每 40 tick 检查一次药水效果,并在需要时重新应用配置的效果。

变量相关配置写法

PlaceholderAPI 扩展标识符为 lsr。以下变量可以直接写入支持 PlaceholderAPI 的插件文本配置中。

变量说明
%lsr_show-行数%获取所有已生效套装显示 Lore 的指定行。行数从 1 开始。
%lsr_show%获取所有已生效套装的完整显示文本,使用换行符分隔。
%lsr_suit1-套装ID%获取指定套装 Lore,使用 <> 作为换行符,返回内容适合写入不支持换行的 Lore。
%lsr_suit2-套装ID%获取指定套装 Lore,使用 \n 作为换行符。
%lsr_suit3-套装ID%判断指定套装是否至少匹配一个部件,返回 truefalse
%lsr_layer-套装ID%获取指定套装当前匹配的部件数量。
%lsr_mouse_info%获取 DragonCore 当前鼠标指向物品对应套装的显示 Lore。
%lsr_mouse_width%获取 DragonCore 当前鼠标指向套装文本的最大字符长度。
%lsr_mouse_height%获取 DragonCore 当前鼠标指向套装文本的行数。

变量示例:

text
%lsr_show%
%lsr_show-1%
%lsr_suit1-套装1%
%lsr_suit2-套装1%
%lsr_suit3-套装1%
%lsr_layer-套装1%

%lsr_show-行数% 的实现会将配置中的行号转换为从 1 开始的索引;传入超出范围的行数时返回空文本。

DragonCore 联动

插件会监听 DragonCore 标识符 lysuitreload 的自定义数据包:

数据作用
renderMakerTip读取传入的物品 JSON,判断该物品对应的套装,并更新当前鼠标指向套装。
clear清除玩家当前鼠标指向的套装。

DragonCore 界面可结合以下变量显示鼠标指向套装信息:

text
%lsr_mouse_info%
%lsr_mouse_width%
%lsr_mouse_height%

配置示例

以下示例包含权限、PlaceholderAPI 条件、名称匹配、Lore 匹配、NBT 匹配、属性层级、药水层级和 Lore 显示:

yaml
attribute-plugin: 'AttributePlus'
ilo-update-task: 20

plugin-slot:
  - 'Minecraft#8'
  - 'Origin#MainHand'
  - 'Origin#Helmet'

have-item-replace: '&a'
no-item-replace: '&7'

suit:
  '套装1':
    permission: ''
    papi:
      - '%player_level% >= 0'
    set:
      测试头盔: 'name=测试头盔'
      测试衣服: 'lore=测试衣服'
      测试裤子: 'nbt=a.b.c=测试裤子'
      多条件部件: 'name=第一个条件;lore=第二个条件'
      权限部件: 'permission=vip.1'
      非权限部件: 'nopermission=vip.1'
    lore:
      - '&6测试套装 [<now>/<max>]'
      - '<state-测试头盔>测试头盔'
      - '<state-测试衣服>测试衣服'
      - '<state-测试裤子>测试裤子'
      - '&7当前激活 &6<now-layer>件 &7套装属性:'
      - '<sx>'
      - '&7当达到 &6<next-layer>件 &7可获得属性:'
      - '<next-sx>'
    sx:
      1:
        - '攻击力+1'
        - '持续获得加速1效果'
      2:
        - '攻击力+2'
        - '持续获得加速2效果'
    effect:
      1:
        - 'SPEED-1'
      2:
        - 'SPEED-2'

重载配置

管理员或服务器 OP 可以使用:

text
/lsr reload

重载时会重新读取 config.yml,重新加载 extra 目录中的套装,并重新注册属性和药水效果任务。

修改内容建议操作
全局配置执行 /lsr reload
plugin-slot确认对应槽位插件已启用后,再执行 /lsr reload;涉及插件初始化问题时重启服务器。
attribute-plugin重启服务器,使属性 API 重新初始化。
套装 setpapiloresxeffect执行 /lsr reload
NBT 条件确认当前 Minecraft 版本支持 NBT 处理;项目实现的支持版本为 1.7.101.12.2

常见配置问题

套装部件没有被统计

按以下顺序检查:

  1. 对应位置是否写入了 plugin-slot
  2. 槽位写法是否符合对应插件的格式。
  3. 物品是否包含 ItemMeta。
  4. namelore 文本是否使用包含匹配时的实际内容。
  5. nbt 路径和值是否完全正确。
  6. 套装的 permissionpapi 条件是否满足。
  7. 修改后是否执行了 /lsr reload

<sx> 没有显示属性

检查套装当前匹配部件数量是否达到 sx 中的任意层级。没有达到任何属性层级时,当前属性区域会显示 §7无

药水效果层级与属性层级不一致

药水效果使用 effect 节点单独计算层级。请检查 effect 下是否配置了对应层级,而不是只检查 sx

NBT 条件始终无法匹配

NBT 检测只在项目实现的 1.7.101.12.2 版本中初始化。其他版本启动时会提示当前游戏版本不支持 NBT 检测。

此外,NBT 条件只匹配字符串值,且嵌套路径必须使用点号分隔:

yaml
set:
  NBT部件: 'nbt=a.b.c=测试值'