属性包
属性包配置在 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 占位符时,读取结果会随玩家数据变化。