Skip to content

配置说明

LyTag 的主要配置由以下文件组成:

路径用途
plugins/LyTag/config.yml数据存储、属性系统、变量显示、称号分类、界面和消息配置。
plugins/LyTag/tag/*.yml定义称号内容、属性、药水效果和触发动作。支持在 tag 目录下使用子目录。
plugins/LyTag/data/<玩家 UUID>.yml未启用 MySQL 时保存玩家拥有的称号、显示称号和属性称号。

修改配置后可使用 /ltag reload 重载。mysql.enableattribute-plugin 涉及监听器或属性系统初始化,修改后需要重启服务器。

数据存储

YAML 存储

mysql.enablefalse 时,玩家数据保存在:

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: ''
配置值对接系统
AttributePlusAttributePlus。
SX-Attribute2SX-Attribute 2。
SX-Attribute3SX-Attribute 3。
AttributeSystemAttributeSystem。
ItemLoreOriginItemLoreOrigin。
空字符串不向属性插件添加称号属性。

修改 attribute-plugin 后需要重启服务器。选择某个属性系统时,对应插件也必须正常加载。

玩家属性由两部分合并计算:

  • 玩家拥有的所有称号都会添加该称号的 collect-attribute
  • 每个分类当前佩戴的属性称号会添加该称号的 attribute

ItemLoreOrigin 刷新间隔

使用 ItemLoreOrigin 时,可以通过可选节点 ilo-update-task 调整属性刷新任务的周期。

yaml
ilo-update-task: 20
节点类型默认值说明
ilo-update-task整数20ItemLoreOrigin 属性任务的执行周期,单位为服务器 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.ymltag-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已取消佩戴属性称号.'