Skip to content

属性包

属性包配置在 attribute-group 下,用于通过 /lmr add 给在线玩家添加一组限时属性。属性包激活后会写入插件当前的属性计算结果,并按照设定时间自动过期。

配置位置

属性包可以写在以下位置:

  • 插件主配置文件 plugins/LyMappingReload/config.yml
  • plugins/LyMappingReload/extra/ 目录及其子目录下的 .yml 文件

插件重载时会读取主配置文件以及 extra 目录中所有 .yml 文件,并重新加载其中的 attribute-group 配置。相同属性包 ID 重复配置时,后加载的配置会覆盖先加载的配置。

基础结构

yaml
attribute-group:
  "属性包1":
    time: 5
    enable-message: "你激活了属性包1"
    disable-message: "你的属性包已过期"
    attribute:
      - "攻击力: eval:{%player_level% + 1 * 2.5:10}"

attribute-group 下的每个子节点都是一个属性包 ID。属性包 ID 用于指令发放,也用于属性包变量读取。

配置项

配置项类型默认值说明
attribute-group.<属性包ID>节点属性包的唯一 ID。指令和变量都使用此 ID。
time整数100属性包持续时间,单位为秒。
enable-message字符串不发送属性包激活时向玩家发送的消息。删除或留空时不发送。
disable-message字符串不发送属性包过期时向玩家发送的消息。删除或留空时不发送。
attribute字符串列表空列表属性包包含的属性行。每行都会参与属性计算。

消息支持使用 & 颜色代码,插件发送消息时会将其转换为颜色字符。

属性行

attribute 中的每一项都是一行属性配置,格式由当前对接的属性插件解析。插件会先处理自身支持的 eval:{} 表达式,再将计算后的属性列表提交给已配置的属性插件。

yaml
attribute:
  - "攻击力: eval:{%player_level% + 1 * 2.5:10}"
  - "生命值: eval:{100 + %player_level%:500}"

eval:{公式:上限} 中:

部分说明
公式支持数字以及 +-*/ 和括号运算,也可以使用 PlaceholderAPI 占位符。
上限可选的最大值。计算结果超过上限时会按上限处理。
:默认用于分隔公式和上限的符号,可通过主配置中的 eval-max-tag 修改。

是否保留小数由主配置中的 value-number 控制。属性包会在激活、过期以及定时刷新时重新计算属性表达式。

发放指令

插件命令仅允许服务器管理员使用,代码中通过 OP 身份进行判断,项目未定义独立权限节点。

指令说明
/lmr add <玩家> <属性包ID>给指定的在线玩家添加属性包。
/lmr add * <属性包ID>给所有在线玩家添加属性包。
/lmr reload重载配置,包括属性包配置。

玩家名称必须对应在线玩家。属性包 ID 不存在时,插件会提示添加失败。

同一个玩家再次添加相同 ID 的属性包时,会覆盖原有属性包的结束时间,持续时间从本次添加开始重新计算。

过期与离线保留

属性包由插件定时检查,每秒检查一次:

  • 到达结束时间后,移除玩家对应的属性包属性。
  • 配置了 disable-message 时,过期后向在线玩家发送过期消息。
  • 玩家离线时,属性包数据不会立即删除。
  • 玩家最后在线时间超过 30 分钟后,插件会清理该玩家保存的全部属性包数据。
  • 玩家重新上线后,仍在有效期内的属性包会重新参与属性计算。

属性包变量

安装并启用 PlaceholderAPI 后,可以使用以下变量读取属性包指定行的计算结果:

text
%lmr_group-属性包ID:行数%
占位符说明
%lmr_group-属性包ID:行数%读取指定属性包经过计算后的属性行。行数从 1 开始。

例如,读取 ID 为 属性包1 的第 1 行:

text
%lmr_group-属性包1:1%

属性包不存在、行数小于 1 或超过计算后的属性行数量时,变量返回空字符串。

属性行中的公式会在读取变量时重新计算,因此包含玩家等级或其他 PlaceholderAPI 占位符时,读取结果会随玩家数据变化。