Skip to content

映射 LyMappingReload

LyMappingReload 用于把装备槽位、物品名称、物品 Lore、权限、PlaceholderAPI 表达式和套装状态映射为属性或药水效果。玩家满足检测条件时获得对应效果,不再满足时移除映射属性。

插件可用于制作饰品属性、装备组合加成、权限属性、等级条件属性、套装效果和限时属性包。它还能从物品 Lore 中提取数值,将结果代入属性公式,或读取物品 NBT 中保存的单行字符串属性。

插件信息

项目内容
插件名LyMappingReload
插件版本1.1.3
作者Liyuan
Java 版本Java 8
主命令/lmr
配置目录plugins/LyMappingReload/
主配置config.yml
扩展配置extra/ 目录内的所有 .yml 文件

支持版本

项目明确提供了以下 NBT 实现:

Minecraft 版本NBT 读取状态
1.7.10已提供 v1_7_R4 实现
1.12.2已提供 v1_12_R1 实现
其他版本插件会提示当前版本不支持 NBT 检测

上述版本范围只用于说明项目中能够确认的 NBT 适配。项目没有提供完整的服务器版本支持列表,因此不能据此确认其他功能在所有 Minecraft 版本上的兼容性。

swap_hand 检测依赖主副手交换事件,配置示例同时注明该检测在旧版本中可能存在兼容问题。

依赖与对接

插件声明的软依赖

plugin.yml 中声明了以下软依赖。没有使用对应功能时,不要求全部安装。

插件用途
PlaceholderAPI解析条件和属性公式中的变量,并注册 %lmr_...% 变量
DZ_Status配置模板中保留了 DZ 属性类型编号
AttributePlus接收插件计算出的属性文本
SX-Attribute支持 SX-Attribute 2.0 和 3.0 接口
ItemLoreOrigin通过虚拟物品 Lore 写入属性
APInventory读取 APInventory 指定背包和槽位中的物品
LyInventory读取 LyInventory 背包槽位中的物品
GermPlugin读取萌芽槽位中的物品

涉及 papi:{...} 条件、eval:{...} 中的 PAPI 变量或 %lmr_...% 变量时,需要安装并正常加载 PlaceholderAPI

代码中存在的其他槽位对接

对接槽位前缀说明
原版背包Minecraft按背包槽位编号读取物品
原版装备栏Origin读取主手、副手和盔甲槽位
龙之核心DragonCore按龙核槽位名读取缓存物品
LyInventory 重置版LyInventoryReload按背包 ID 和类型读取物品
YeeJewelryYeeJewelry按背包 ID 和槽位 ID 读取饰品

使用这些槽位类型时,需要服务器安装并正确配置对应插件。它们不一定全部出现在 plugin.yml 的软依赖列表中。

属性插件

attribute-plugin 决定计算结果写入哪个属性插件。当前项目能够从配置和属性刷新代码中确认以下编号:

编号配置注释中的类型当前代码状态
0不指定不会向属性插件写入映射属性
1AP2存在属性写入实现
2SX2.0存在 SX-Attribute 2.0 写入实现
3SX3.0存在 SX-Attribute 3.0 写入实现
4DZ配置模板保留该编号,但当前属性刷新代码中没有对应写入分支
5ILO存在 ItemLoreOrigin 写入实现
6AP3存在属性写入实现
7lysx存在 LyAttribute 写入实现
8as 属性存在 AttributeSystem 写入实现

属性插件必须与 attribute-plugin 的编号对应并成功加载,否则映射条件仍可计算,但属性结果不会正常写入目标插件。

主要功能

功能说明
多槽位读取可读取原版背包、原版装备栏、龙核、萌芽、APInventory、LyInventory、LyInventoryReload 和 YeeJewelry 槽位
名称检测支持物品名称模糊匹配和完整匹配
Lore 检测支持 Lore 行模糊匹配和完整匹配
权限检测可要求玩家拥有或不拥有指定权限
PAPI 条件支持数值比较、字符串相等判断以及 &&、`
套装检测通过 %lsr_show% 的返回内容判断指定套装状态
属性映射条件满足时写入属性,不满足时移除该检测节点产生的属性
属性公式eval:{...} 支持整数、小数、括号以及 +-*/ 运算
公式上限可在公式中附加最大值,分隔符由 eval-max-tag 设置
Lore 数值提取从指定槽位物品的 Lore 中提取数字,并通过 v 变量代入属性公式
条件堆叠按匹配到的条件或物品数量重复添加属性,并受 max-stack-layers 限制
药水效果条件满足时添加固定等级和持续时间的 Bukkit 药水效果
限时属性包通过命令为玩家添加带持续时间的独立属性组
NBT 属性读取从全局槽位物品的 NBT 键读取单行字符串,并直接作为属性文本写入
事件刷新支持每秒、关闭背包、切换快捷栏和交换主副手时重新检测
扩展配置自动递归加载 extra/ 目录中的所有 .yml 文件
变量预览可通过 PlaceholderAPI 获取映射节点或属性包计算后的指定属性行
变更检测计算结果与上次刷新结果一致时,不重复写入属性插件

映射机制

每个 check 子节点是一条独立映射规则。插件会按该节点的槽位和条件计算匹配层数:

  1. 节点配置了 check-slot 时,只使用该节点的槽位。
  2. 没有配置 check-slot 时,使用全局 plugin-slot
  3. 所有条件达到要求后,计算 attribute 中的属性公式。
  4. 属性根据匹配层数重复添加,但不会超过 max-stack-layers
  5. 条件不再成立时,移除该检测节点产生的属性。
  6. 配置了 potion 时,在对应检测事件触发期间刷新药水效果。

未配置任何 condition 的节点会被视为可激活节点。不同检测节点和属性包产生的属性会合并后统一写入所选属性插件。

检测条件

格式作用
name:{文本}物品名称包含指定文本
equalsName:{文本}物品名称与指定文本完整匹配,忽略大小写
lore:{文本}任意 Lore 行包含指定文本
equalsLore:{文本}Lore 行与指定文本完整匹配,忽略大小写
permission:{权限}玩家必须拥有指定权限
nopermission:{权限}玩家必须没有指定权限
papi:{表达式}解析 PlaceholderAPI 变量后判断表达式
suit:{套装文本}%lsr_show% 的结果必须包含指定文本

颜色符号可使用 &,检测时会转换为 Minecraft 颜色符号。

papi 表达式支持 ><>=<===!=&&||。数值两侧可使用四则运算;字符串相等判断应使用成对的单引号或双引号。

槽位格式

槽位来源格式
原版背包Minecraft#槽位编号
龙之核心DragonCore#槽位名
GermPluginGermPlugin#槽位名
APInventoryAPInventory#分页ID#槽位编号
LyInventoryLyInventory#背包ID#类型
LyInventory 重置版LyInventoryReload#背包ID#类型
YeeJewelryYeeJewelry#背包ID#槽位ID
主手Origin#MainHand
副手Origin#OffHand
头盔Origin#Helmet
胸甲Origin#ChestPlate
护腿Origin#Legging
靴子Origin#Boots

原版背包配置示例使用 036 的槽位编号;APInventory 配置示例使用 053 的槽位编号。实际可用范围仍取决于对应背包插件和背包结构。

刷新事件

事件值触发方式
second每秒检测一次
close_inventory玩家加入后的首次延迟刷新,以及关闭背包时检测
held_item玩家切换快捷栏槽位时检测
swap_hand玩家交换主手和副手物品时检测

删除 check-event 或保留空列表时,该节点默认参加每秒检测。插件可通过 second-update-type-async 控制每秒计算使用异步还是同步任务。

属性公式

属性行可以直接填写目标属性插件能够识别的文本,也可以使用 eval:{公式} 动态计算数值。

yaml
attribute:
  - '攻击力: eval:{%player_level% * 2}'
  - '生命值: eval:{%player_level% + 10:100}'

默认使用 : 分隔公式和上限。例如 eval:{公式:100} 表示结果最大为 100。如果属性格式本身需要冒号,可通过 eval-max-tag 更换分隔符。

value-number: true 时,计算结果转换为整数;设置为 false 时,结果保留两位小数。

Lore 数值提取

lore-get-placeholder 使用 value 标记需要提取的数字。提取结果会扫描当前映射使用的全部槽位,并累计所有成功解析的数值。

yaml
lore-get-placeholder:
  等级点: '获得 <value>x玩家等级点攻击力'

attribute:
  - '攻击力: eval:{%player_level% * <v.等级点>:100}'

如果没有找到对应 Lore,或提取内容不能转换为数字,该变量按 0 处理。变量引用格式为 v 前缀,例如 <v.等级点>;在普通 Markdown 文本中应始终使用代码格式包裹该写法。

药水效果

药水格式为 药水类型-等级-持续时间。每秒检测中的持续时间按秒转换为游戏刻,并会定期刷新;药水等级在写入 Bukkit 效果时会转换为从 0 开始的内部等级。

yaml
potion:
  - 'SPEED-1-2'
  - 'INCREASE_DAMAGE-2-2'

项目配置中列出的类型包括:

类型效果
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配置模板中列出的着火类型,是否可用取决于服务端 Bukkit 药水类型

填写服务端无法识别的药水类型时,控制台会输出未知药水错误。

属性包

attribute-group 用于定义可通过命令发放的限时属性。每个属性包包含持续时间、启用消息、失效消息和属性列表。

  • time 的单位为秒。
  • 同一玩家再次获得相同 ID 的属性包时,会覆盖原记录并重新计算结束时间。
  • 属性包到期后自动移除,并发送 disable-message
  • 玩家离线后,内存数据会暂时保留;代码中的实际清理判断为离线约 30 分钟后删除该玩家的属性包数据。
  • 属性包没有数据库持久化实现,服务器重启后不会从数据库恢复。

属性包的完整配置见属性包

NBT 属性读取

get-nbt-attribute 可从 plugin-slot 中的物品读取指定 NBT 键。读取到的值会直接加入 nbt_attribute 属性来源。

yaml
get-nbt-attribute:
  - 'attribute'
  - 'custom-data'

当前读取实现只取得物品根 NBT 下对应键的字符串值。配置注释说明该功能用于单行字符串属性。虽然 NBT 工具中还存在嵌套路径检测方法,但 get-nbt-attribute 的实际读取流程没有按点号递归读取嵌套节点。

该功能只在项目明确适配的 1.7.101.12.2 上有可确认的 NBT 实现。

指令

插件没有在 plugin.yml 中注册独立权限节点。现有命令逻辑直接要求命令发送者为服务器管理员。

指令使用要求说明
/lmrOP显示插件内置命令提示
/lmr reloadOP重载主配置,并重新读取 extra/ 下的映射与属性包配置
/lmr add 玩家 属性包IDOP,目标在线给指定玩家添加属性包;相同 ID 会强制覆盖
/lmr add * 属性包IDOP给所有在线玩家添加属性包

目标玩家不在线时,指定玩家发放会失败。属性包 ID 不存在时,命令会返回失败消息。

PlaceholderAPI 变量

安装 PlaceholderAPI 后,插件注册变量标识符 lmr

变量返回内容
%lmr_check-检测ID:行数%返回指定映射节点计算后的第几行属性
%lmr_group-属性包ID:行数%返回指定属性包计算后的第几行属性

行数从 1 开始。节点不存在、属性包不存在或行数超出范围时返回空文本。变量只负责计算和显示配置中的属性行,不代表玩家当前一定满足该映射条件或持有该属性包。

完整说明见插件变量

配置文件加载

重载时,插件会清空已注册的映射和属性包定义,然后递归读取:

  • plugins/LyMappingReload/extra/ 中的所有 .yml 文件;
  • plugins/LyMappingReload/config.yml

扩展文件可以包含 checkattribute-group 节点。不同文件使用相同 ID 时,后加载的数据会覆盖管理器中已有的同名数据,因此各文件中的检测 ID 和属性包 ID 应保持唯一。

页面索引

页面内容
配置说明全局配置、属性插件、槽位、计算和刷新设置
映射规则检测节点、条件、Lore 取值、属性、药水和检测事件
属性包限时属性包配置、覆盖机制和命令发放
插件变量PlaceholderAPI 变量格式与返回规则
常见问题属性不生效、槽位读取、公式、NBT 和兼容性排查
更新日志文档整理记录