配置说明
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-Attribute2 或 SX-Attribute3,插件会初始化对应的 SX-Attribute API。
设置为 ItemLoreOrigin 时,插件会按照 ilo-update-task 的配置周期更新 ItemLoreOrigin 的属性物品。
修改 attribute-plugin 后应重启服务器,使对应属性处理方式重新初始化。使用 AttributeCompatibleAPI 时,插件启动后会注册自身为属性来源插件。
ilo-update-task
yaml
ilo-update-task: 20ItemLoreOrigin 模式下的属性更新周期,单位为 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-36 和 0-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=文本 | 检查物品显示名称是否包含指定文本。 |
| Lore | lore=文本 | 检查物品任意一行 Lore 是否包含指定文本。 |
| NBT | nbt=路径=值 | 检查物品 NBT 指定路径的字符串值是否完全等于目标值。 |
| PlaceholderAPI | papi=表达式 | 按玩家条件判断。条件不满足时,该部件规则无效。 |
| 权限 | 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.10 和 1.12.2 的 NBT 处理;其他版本启动时会提示不支持 NBT 检测,相关 NBT 条件将无法正常命中。
无物品条件的部件
如果某个部件规则只包含 papi、permission 或 nopermission 条件,且玩家条件满足,则该部件可以直接计入,不需要额外的物品条件。
例如:
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效果'键名是套装层级,值是该层级的属性字符串列表。
| 配置规则 | 说明 |
|---|---|
| 层级键 | 必须是可转换为整数的数字,例如 1、2。 |
| 属性值 | 每行一个属性字符串,内容由所选属性插件解析。 |
| 当前层级 | 使用不超过已激活部件数量的最高已配置层级。 |
| 未达到任何层级 | 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% | 判断指定套装是否至少匹配一个部件,返回 true 或 false。 |
%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 重新初始化。 |
套装 set、papi、lore、sx、effect | 执行 /lsr reload。 |
| NBT 条件 | 确认当前 Minecraft 版本支持 NBT 处理;项目实现的支持版本为 1.7.10 和 1.12.2。 |
常见配置问题
套装部件没有被统计
按以下顺序检查:
- 对应位置是否写入了
plugin-slot。 - 槽位写法是否符合对应插件的格式。
- 物品是否包含 ItemMeta。
name或lore文本是否使用包含匹配时的实际内容。nbt路径和值是否完全正确。- 套装的
permission和papi条件是否满足。 - 修改后是否执行了
/lsr reload。
<sx> 没有显示属性
检查套装当前匹配部件数量是否达到 sx 中的任意层级。没有达到任何属性层级时,当前属性区域会显示 §7无。
药水效果层级与属性层级不一致
药水效果使用 effect 节点单独计算层级。请检查 effect 下是否配置了对应层级,而不是只检查 sx。
NBT 条件始终无法匹配
NBT 检测只在项目实现的 1.7.10 和 1.12.2 版本中初始化。其他版本启动时会提示当前游戏版本不支持 NBT 检测。
此外,NBT 条件只匹配字符串值,且嵌套路径必须使用点号分隔:
yaml
set:
NBT部件: 'nbt=a.b.c=测试值'