配置说明
LyTag 的主要配置由以下文件组成:
| 路径 | 用途 |
|---|---|
plugins/LyTag/config.yml | 数据存储、属性系统、变量显示、称号分类、界面和消息配置。 |
plugins/LyTag/tag/*.yml | 定义称号内容、属性、药水效果和触发动作。支持在 tag 目录下使用子目录。 |
plugins/LyTag/data/<玩家 UUID>.yml | 未启用 MySQL 时保存玩家拥有的称号、显示称号和属性称号。 |
修改配置后可使用 /ltag reload 重载。mysql.enable 和 attribute-plugin 涉及监听器或属性系统初始化,修改后需要重启服务器。
数据存储
YAML 存储
当 mysql.enable 为 false 时,玩家数据保存在:
text
plugins/LyTag/data/<玩家 UUID>.yml玩家数据包含以下内容:
| 节点 | 说明 |
|---|---|
show-tag.<分类 ID> | 该分类当前佩戴的显示称号 ID。 |
attribute-tag.<分类 ID> | 该分类当前佩戴的属性称号 ID。 |
all-tag.<称号 ID> | 玩家拥有称号的到期时间。值为 0 时表示永久称号。 |
插件会在玩家加入时读取数据,在玩家退出、被踢出以及数据发生变化后保存数据。数据发生变化时,每名在线玩家最多约每 30 秒执行一次自动保存。
MySQL 存储
MySQL 前置要求
启用 MySQL 存储时,必须安装 LyMySQLCore,并确认它已成功连接数据库。LyMySQLCore 未加载或数据库连接失败时,MySQL 玩家数据的读取、保存和同步不会生效,服务器还会阻止玩家进入。
yaml
mysql:
enable: false
databasename: mc2
username: mc2
password: mc1234
port: 3306
ip: 127.0.0.1| 节点 | 类型 | 默认值 | 说明 |
|---|---|---|---|
mysql.enable | 布尔值 | false | 是否启用 MySQL 存储。修改后需要重启服务器。 |
mysql.databasename | 字符串 | mc2 | 数据库名称。 |
mysql.username | 字符串 | mc2 | 数据库用户名。 |
mysql.password | 字符串 | mc1234 | 数据库密码。 |
mysql.port | 整数 | 3306 | 数据库端口。 |
mysql.ip | 字符串 | 127.0.0.1 | 数据库地址。 |
启用后,插件会使用名为 LyTag 的数据表保存玩家数据。数据表以玩家名称作为唯一标识,称号数据以 YAML 文本形式写入 data 字段。
数据库连接地址会附带以下参数:
text
useSSL=false&serverTimezone=UTC&characterEncoding=UTF-8属性系统
attribute-plugin 用于指定称号属性交由哪个属性插件处理。
yaml
attribute-plugin: ''| 配置值 | 对接系统 |
|---|---|
AttributePlus | AttributePlus。 |
SX-Attribute2 | SX-Attribute 2。 |
SX-Attribute3 | SX-Attribute 3。 |
AttributeSystem | AttributeSystem。 |
ItemLoreOrigin | ItemLoreOrigin。 |
| 空字符串 | 不向属性插件添加称号属性。 |
修改 attribute-plugin 后需要重启服务器。选择某个属性系统时,对应插件也必须正常加载。
玩家属性由两部分合并计算:
- 玩家拥有的所有称号都会添加该称号的
collect-attribute。 - 每个分类当前佩戴的属性称号会添加该称号的
attribute。
ItemLoreOrigin 刷新间隔
使用 ItemLoreOrigin 时,可以通过可选节点 ilo-update-task 调整属性刷新任务的周期。
yaml
ilo-update-task: 20| 节点 | 类型 | 默认值 | 说明 |
|---|---|---|---|
ilo-update-task | 整数 | 20 | ItemLoreOrigin 属性任务的执行周期,单位为服务器 Tick。 |
变量显示格式
yaml
placeholder:
not-tag: '&7无'
not-tag-分类id: '&7无'
forever-tag-format: '&7到期时间: &6永久'
limited-time-tag-format: '&7到期时间: &b{time}'| 节点 | 可用内容 | 说明 |
|---|---|---|
placeholder.not-tag | 颜色代码 | 玩家在对应分类没有佩戴称号时的默认显示文本。 |
placeholder.not-tag-<分类 ID> | 颜色代码 | 为指定分类覆盖无称号时的显示文本。不存在时使用 placeholder.not-tag。 |
placeholder.forever-tag-format | 颜色代码 | 永久称号在界面中的到期时间文本。 |
placeholder.limited-time-tag-format | {time}、颜色代码 | 限时称号在界面中的到期时间文本。 |
placeholder.not-tag-分类id 中的“分类id”需要替换为真实分类名称。例如分类 ID 为“普通称号”时:
yaml
placeholder:
not-tag: '&7无'
not-tag-普通称号: '&7未佩戴普通称号'限时称号的 {time} 会被替换为以下格式的到期时间:
text
yyyy-MM-dd HH:mm:ss称号分类
称号文件中的称号必须在 tag-class 中注册后才能正式使用。
yaml
tag-class:
普通称号:
- '离渊插件牛逼'
示例称号分类:
- '示例称号'tag-class 的每个一级节点都是分类 ID,节点下的列表是该分类包含的称号 ID。
配置时需要注意:
- 列表中的称号 ID 必须与
tag目录内定义的一级节点完全一致。 - 只在称号文件中定义、但没有加入
tag-class的称号不会注册,无法通过界面或管理指令正常使用。 - 同一个称号只能注册到一个分类。重复注册时,后续分类会注册失败。
- 分类顺序按照
config.yml中的书写顺序显示。 - 界面顶部只能显示前 9 个分类,因此分类数量最多应设置为 9 个。
- 每个分类可以分别佩戴一个显示称号和一个属性称号。
- PlaceholderAPI 的显示称号和属性称号变量也使用这里的分类 ID。
界面配置
称号界面固定为 54 格:
- 第 1 行显示分类按钮,最多显示 9 个分类。
- 第 2 行和第 6 行使用填充物品。
- 第 3 至第 5 行显示称号,每页最多 27 个。
- 第 46 格为上一页按钮。
- 第 49 格为当前显示称号或卸除按钮。
- 第 50 格为筛选按钮。
- 第 51 格为当前属性称号或卸除按钮。
- 第 54 格为下一页按钮。
界面默认只显示已拥有称号。点击筛选按钮后会按照“已拥有 → 未拥有 → 全部”的顺序切换。
物品格式
界面物品节点支持旧版数字 ID 与数据值,例如:
yaml
fill-item: '160:0'
tag-item: '403:0'也可以使用当前服务器能够识别的英文材质名称。无法识别材质时,插件会以石头作为默认物品。
界面标题与基础按钮
yaml
gui:
title: '&0当前分类: &n&l{class}'
fill-item: '160:0'
fill-name: '&7封锁'
last-item: '341:0'
last-name: '&6上一页'
next-item: '341:0'
next-name: '&6下一页'
class-button-item: '332:0'
class-button-name: '&e{class}'| 节点 | 可用内容 | 说明 |
|---|---|---|
gui.title | {class}、颜色代码 | 界面标题。{class} 为当前分类 ID。 |
gui.fill-item | 物品格式 | 第 2 行和第 6 行使用的填充物品。 |
gui.fill-name | 颜色代码 | 填充物品名称。 |
gui.last-item | 物品格式 | 上一页按钮物品。 |
gui.last-name | 颜色代码 | 上一页按钮名称。 |
gui.next-item | 物品格式 | 下一页按钮物品。 |
gui.next-name | 颜色代码 | 下一页按钮名称。 |
gui.class-button-item | 物品格式 | 分类按钮物品。所有分类共用此物品。 |
gui.class-button-name | {class}、颜色代码 | 分类按钮名称。{class} 为分类 ID。 |
已拥有称号
yaml
gui:
tag-item: '403:0'
tag-name: '&7称号: &f{tag}'
tag-lore:
- ''
- '{info}'
- ''
- '{time}'
- ''
- '&a[左键生效称号显示] &7| &b[右键生效称号属性]'| 节点 | 可用内容 | 说明 |
|---|---|---|
gui.tag-item | 物品格式 | 玩家已拥有称号的显示物品。 |
gui.tag-name | {tag}、颜色代码 | 已拥有称号的物品名称。 |
gui.tag-lore | {tag}、{info}、{collect_attribute}、{attribute}、{time}、颜色代码 | 已拥有称号的 Lore。 |
玩家左键点击已拥有称号时,将其设为当前分类的显示称号;右键点击时,将其设为当前分类的属性称号。
未拥有称号
yaml
gui:
not-collected-tag-item: '340:0'
not-collected-tag-name: '&7称号: &f{tag}'
not-collected-tag-lore:
- ''
- '{info}'
- ''
- '&7尚未获得'| 节点 | 可用内容 | 说明 |
|---|---|---|
gui.not-collected-tag-item | 物品格式 | 玩家未拥有称号的显示物品。 |
gui.not-collected-tag-name | {tag}、颜色代码 | 未拥有称号的物品名称。 |
gui.not-collected-tag-lore | {tag}、{info}、{collect_attribute}、{attribute}、颜色代码 | 未拥有称号的 Lore。 |
未拥有的称号只能用于查看,点击不会佩戴。
当前显示称号
yaml
gui:
show-tag-item: '403:0'
show-tag-name: '&7当前显示称号: {tag}'
show-tag-lore:
- ''
- '{info}'
- ''
- '{time}'
- ''
- '&a[点击卸除]'
not-show-tag-item: '330:0'
not-show-tag-name: '&7当前显示称号: 无'| 节点 | 可用内容 | 说明 |
|---|---|---|
gui.show-tag-item | 物品格式 | 已佩戴显示称号时的按钮物品。 |
gui.show-tag-name | {tag}、颜色代码 | 当前显示称号按钮名称。 |
gui.show-tag-lore | {tag}、{info}、{collect_attribute}、{attribute}、{time}、颜色代码 | 当前显示称号按钮 Lore。 |
gui.not-show-tag-item | 物品格式 | 当前分类没有显示称号时的按钮物品。 |
gui.not-show-tag-name | 颜色代码 | 当前分类没有显示称号时的按钮名称。 |
点击当前显示称号按钮会卸除该分类的显示称号。
当前属性称号
yaml
gui:
attribute-tag-item: '403:0'
attribute-tag-name: '&7当前属性称号: {tag}'
attribute-tag-lore:
- ''
- '{info}'
- ''
- '{time}'
- ''
- '&a[点击卸除]'
not-attribute-tag-item: '330:0'
not-attribute-tag-name: '&7当前属性称号: 无'| 节点 | 可用内容 | 说明 |
|---|---|---|
gui.attribute-tag-item | 物品格式 | 已佩戴属性称号时的按钮物品。 |
gui.attribute-tag-name | {tag}、颜色代码 | 当前属性称号按钮名称。 |
gui.attribute-tag-lore | {tag}、{info}、{collect_attribute}、{attribute}、{time}、颜色代码 | 当前属性称号按钮 Lore。 |
gui.not-attribute-tag-item | 物品格式 | 当前分类没有属性称号时的按钮物品。 |
gui.not-attribute-tag-name | 颜色代码 | 当前分类没有属性称号时的按钮名称。 |
点击当前属性称号按钮会卸除该分类的属性称号,并重新计算玩家的称号属性和药水效果。
称号筛选
yaml
gui:
filter-switch-item: '339:0'
filter-owned-name: '&a筛选: 已拥有'
filter-unowned-name: '&c筛选: 未拥有'
filter-all-name: '&e筛选: 全部'
filter-switch-lore:
- ''
- '&7点击切换: 已拥有 -> 未拥有 -> 全部'
- ''| 节点 | 说明 |
|---|---|
gui.filter-switch-item | 筛选按钮物品。默认使用 339:0。 |
gui.filter-owned-name | 筛选模式为“已拥有”时的按钮名称。 |
gui.filter-unowned-name | 筛选模式为“未拥有”时的按钮名称。 |
gui.filter-all-name | 筛选模式为“全部”时的按钮名称。 |
gui.filter-switch-lore | 筛选按钮 Lore。 |
Lore 插入内容
界面中的 Lore 列表支持以下内容:
| 内容 | 说明 |
|---|---|
{tag} | 称号的 title。 |
{info} | 将称号的 info 列表逐行插入当前位置。 |
{collect_attribute} | 将称号的 collect-attribute 列表逐行插入当前位置。 |
{attribute} | 将称号的 attribute 列表逐行插入当前位置。 |
{time} | 插入永久称号或限时称号的到期时间文本。仅用于玩家已拥有的称号。 |
{info}、{collect_attribute} 和 {attribute} 必须单独作为一行,插件才会将对应列表插入 Lore。
自定义消息
yaml
message:
tag-end-time: '&7您的 {tag} &7称号已过期!'
set-show-tag: '&7成功佩戴显示称号: {tag}'
set-attribute-tag: '&7成功佩戴属性称号: {tag}'
cancel-show-tag: '&7已取消佩戴显示称号.'
cancel-attribute-tag: '&7已取消佩戴属性称号.'| 节点 | 可用内容 | 触发时机 |
|---|---|---|
message.tag-end-time | {tag}、颜色代码 | 玩家拥有的限时称号到期并被清理时。 |
message.set-show-tag | {tag}、颜色代码 | 玩家通过界面佩戴显示称号时。 |
message.set-attribute-tag | {tag}、颜色代码 | 玩家通过界面佩戴属性称号时。 |
message.cancel-show-tag | 颜色代码 | 玩家通过界面卸除显示称号时。 |
message.cancel-attribute-tag | 颜色代码 | 玩家通过界面卸除属性称号时。 |
称号文件
称号文件位于:
text
plugins/LyTag/tag插件会递归读取该目录及其子目录内所有以 .yml 结尾的文件。文件名不作为称号 ID,文件中的一级节点才是称号 ID。同一个文件可以定义多个称号。
yaml
示例称号:
title: '&7[&a示例称号&7]'
info:
- '&7称号介绍'
collect-attribute:
- '攻击力+1'
attribute:
- '攻击力+1'
effect:
SPEED: 0| 节点 | 类型 | 默认值 | 说明 |
|---|---|---|---|
<称号 ID>.title | 字符串 | 称号 ID | 显示称号的文本,支持 & 颜色代码。 |
<称号 ID>.info | 字符串列表 | 空列表 | 称号介绍,用于界面 Lore。 |
<称号 ID>.collect-attribute | 字符串列表 | 空列表 | 玩家拥有该称号后持续加入属性计算的属性文本。 |
<称号 ID>.attribute | 字符串列表 | 空列表 | 玩家将该称号设为属性称号后加入属性计算的属性文本。 |
<称号 ID>.effect | 键值表 | 空 | 玩家将该称号设为属性称号后获得的药水效果。 |
<称号 ID>.action | 配置节 | 空 | 玩家佩戴该属性称号时可以触发的动作。 |
称号载入后仍需在 config.yml 的 tag-class 中注册。没有注册的称号不会被视为可用称号。
药水效果
effect 只对当前佩戴的属性称号生效,不会因为仅拥有称号而生效。
yaml
示例称号:
effect:
SPEED: 0
DAMAGE_RESISTANCE: 1节点名称使用 Bukkit 药水效果名称,数值是效果等级索引。配置为 0 时,游戏内显示为 I 级。
项目示例中列出的效果名称如下:
| 效果名称 | 游戏效果 |
|---|---|
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 | 着火 |
当多个已佩戴属性称号提供相同药水效果时,插件保留其中数值最高的等级。药水效果会定时重新应用;夜视使用较长持续时间,其他效果使用较短持续时间。
称号触发动作
动作只会检查玩家当前佩戴的属性称号。仅拥有称号或将称号设为显示称号不会触发动作。
yaml
示例称号:
action:
left:
chance: 0.1
cooldown: 5000
result:
- 'tell:&a你触发了左键效果'
- 'mmskill:技能名称'
- 'command_console:tell %player_name% 执行控制台指令'
- 'command_op:tell %player_name% 执行临时 OP 指令'
- 'command:tell %player_name% 执行玩家指令'触发类型
| 节点 | 触发条件 |
|---|---|
action.left | 玩家左键点击空气或方块。 |
action.right | 玩家右键点击空气或方块。 |
action.tick | 插件每 10 Tick 检查一次。 |
每种触发类型包含以下节点:
| 节点 | 类型 | 默认值 | 说明 |
|---|---|---|---|
chance | 小数 | 0 | 每次检查成功触发的概率。代码使用 Math.random() < chance 判断,0.1 表示 10%。 |
cooldown | 整数 | 1000 | 同一玩家、同一称号的触发冷却,单位为毫秒。冷却期间不会发送提示。 |
result | 字符串列表 | 空列表 | 触发成功后依次执行的动作。 |
动作写法
| 前缀 | 说明 | 额外要求 |
|---|---|---|
tell: | 向触发玩家发送消息,支持 & 颜色代码。 | 无。 |
mmskill: | 以玩家为施法者,在玩家当前位置释放指定 MythicMobs 技能。 | 服务器需要存在对应 MythicMobs 技能。 |
command_console: | 由控制台执行指令。 | 指令内容会经过 PlaceholderAPI 变量解析。 |
command_op: | 玩家临时取得 OP 后执行指令,执行结束后恢复原 OP 状态。 | 指令内容会经过 PlaceholderAPI 变量解析。 |
command: | 以玩家身份执行指令。 | 指令内容会经过 PlaceholderAPI 变量解析。 |
动作指令不需要填写开头的 /。
使用 command_console:、command_op: 或 command: 中的 PlaceholderAPI 变量时,需要安装并正常加载 PlaceholderAPI。
完整配置结构
以下示例整理了 config.yml 中已确认的全部主要节点:
yaml
mysql:
enable: false
databasename: mc2
username: mc2
password: mc1234
port: 3306
ip: 127.0.0.1
attribute-plugin: ''
# 仅使用 ItemLoreOrigin 时需要调整
ilo-update-task: 20
placeholder:
not-tag: '&7无'
not-tag-普通称号: '&7无'
forever-tag-format: '&7到期时间: &6永久'
limited-time-tag-format: '&7到期时间: &b{time}'
tag-class:
普通称号:
- '离渊插件牛逼'
示例称号分类:
- '示例称号'
gui:
title: '&0当前分类: &n&l{class}'
fill-item: '160:0'
fill-name: '&7封锁'
last-item: '341:0'
last-name: '&6上一页'
next-item: '341:0'
next-name: '&6下一页'
class-button-item: '332:0'
class-button-name: '&e{class}'
tag-item: '403:0'
tag-name: '&7称号: &f{tag}'
tag-lore:
- ''
- '{info}'
- ''
- '{time}'
- ''
- '&a[左键生效称号显示] &7| &b[右键生效称号属性]'
not-collected-tag-item: '340:0'
not-collected-tag-name: '&7称号: &f{tag}'
not-collected-tag-lore:
- ''
- '{info}'
- ''
- '&7尚未获得'
show-tag-item: '403:0'
show-tag-name: '&7当前显示称号: {tag}'
show-tag-lore:
- ''
- '{info}'
- ''
- '{time}'
- ''
- '&a[点击卸除]'
attribute-tag-item: '403:0'
attribute-tag-name: '&7当前属性称号: {tag}'
attribute-tag-lore:
- ''
- '{info}'
- ''
- '{time}'
- ''
- '&a[点击卸除]'
not-show-tag-item: '330:0'
not-show-tag-name: '&7当前显示称号: 无'
not-attribute-tag-item: '330:0'
not-attribute-tag-name: '&7当前属性称号: 无'
filter-switch-item: '339:0'
filter-owned-name: '&a筛选: 已拥有'
filter-unowned-name: '&c筛选: 未拥有'
filter-all-name: '&e筛选: 全部'
filter-switch-lore:
- ''
- '&7点击切换: 已拥有 -> 未拥有 -> 全部'
- ''
message:
tag-end-time: '&7您的 {tag} &7称号已过期!'
set-show-tag: '&7成功佩戴显示称号: {tag}'
set-attribute-tag: '&7成功佩戴属性称号: {tag}'
cancel-show-tag: '&7已取消佩戴显示称号.'
cancel-attribute-tag: '&7已取消佩戴属性称号.'