Skip to content

配置说明

LyGalaxyMapped 根据物品快照、玩家状态和临时标签计算标签层数,再按映射需求和组内优先级选择生效映射,最终刷新属性、药水效果和状态消息。

配置文件位置

文件用途
plugins/LyGalaxyMapped/config.yml主配置,只定义属性插件、检测间隔和全局物品槽位。
plugins/LyGalaxyMapped/mapped/*.yml标签和映射配置目录,会递归读取当前目录及子目录中的全部 .yml 文件。

插件首次加载时会将默认示例保存为 mapped/示例配置.yml,已有文件不会被覆盖。一个 mapped 配置文件可以同时包含 tag-checkmapped 节点。

tag-checkmapped 只从 mapped 目录读取,写入主配置 config.yml 不会生效。多个文件中的标签 ID 或映射 ID 重复时,文件会按路径排序读取,保留先读取的配置,后读取的重复配置会被忽略。

主配置文件

当前主配置结构如下:

yaml
attribute-plugin: 'AttributePlus'
thread-running-interval: 20
plugin-slot:
  - 'Origin#MainHand'
  - 'Origin#OffHand'
  - 'Origin#Helmet'
  - 'Origin#ChestPlate'
  - 'Origin#Legging'
  - 'Origin#Boots'

attribute-plugin

配置项类型默认值说明
attribute-plugin字符串AttributePlus指定接收生效映射属性的属性插件。配置匹配不区分大小写。

支持的配置值:

配置值要求
AttributePlus对应属性插件必须已安装并成功启用。
AttributeSystem对应属性插件必须已安装并成功启用。
SX-Attribute对应属性插件必须已安装并成功启用。
SX-Attribute2对应属性插件必须已安装并成功启用。
SX-Attribute3对应属性插件必须已安装并成功启用。
ItemLoreOriginItemLoreOrigin 必须已安装并成功启用。同步间隔固定为 20 tick。

属性插件未安装、未启用或配置值不受支持时,属性写入不会生效。选择 ItemLoreOrigin 时没有额外的同步间隔配置项。

thread-running-interval

配置项类型默认值说明
thread-running-interval整数20标签、映射、属性和药水结果的检测周期,单位为 tick,最小值为 1

该配置不控制物品快照任务。全局物品快照任务固定每 10 tick 处理一次被标记的玩家。未单独设置药水持续时间时,药水默认持续时间会根据该检测间隔计算,且至少为 2 秒。

plugin-slot

plugin-slot 是全局物品扫描槽位列表。没有单独配置 check-slot 的标签,以及 Lore 动态变量提取,都会使用该列表。

写法说明
Minecraft#槽位ID读取原版背包中的数字槽位。
Origin#MainHand读取原版主手。
Origin#OffHand读取原版副手。旧版本没有副手方法时返回空值。
Origin#Helmet读取原版头盔槽位。
Origin#ChestPlate读取原版胸甲槽位。
Origin#Legging读取原版护腿槽位。
Origin#Boots读取原版鞋子槽位。
DragonCore#槽位名读取 DragonCore 槽位。
GermPlugin#槽位名读取 GermPlugin 槽位。
APInventory#分页ID#槽位ID读取 APInventory 指定分页的数字槽位。
LyInventory#背包ID#槽位名读取 LyInventory 指定背包的槽位。
LyInventoryReload#背包ID#槽位名读取 LyInventoryReload 指定背包的槽位。
YeeJewelry#背包ID#槽位ID读取 YeeJewelry 指定背包的槽位。

每项都必须使用完整槽位配置字符串。使用外部背包插件的格式时,对应插件必须提供可读取的槽位物品。

tag-check 标签配置

tag-check 必须写在 plugins/LyGalaxyMapped/mapped/ 目录中的 YAML 文件内,用于将物品条件、玩家条件和玩家状态转换为标签层数。

基本结构如下:

yaml
tag-check:
  '火焰':
    condition:
      1:
        - 'lore(''元素:火焰'')'
        - 'nbt(''lgm.element'', ''fire'')'
      2:
        - 'permission(''lgm.先天霜火圣体'')'
    max-point: -1

标签节点

配置项类型默认值说明
tag-check节点标签配置根节点。
tag-check.<标签ID>节点定义一个标签及其检测规则。标签 ID 可自定义。
tag-check.<标签ID>.condition节点或字符串列表定义标签条件。推荐使用数字权重节点。
tag-check.<标签ID>.condition.<权重>字符串列表每条条件命中一次时增加的层数。数字是层数权重,不是条件编号。
tag-check.<标签ID>.check-slot字符串列表使用全局 plugin-slot为当前标签单独指定物品扫描槽位。
tag-check.<标签ID>.max-point整数-1限制最终标签层数。小于 0 表示不限制。
tag-check.<标签ID>.point整数1使用简化列表写法时,每条条件命中的层数。

condition 支持数字权重写法和简化列表写法。

带权重写法:

yaml
condition:
  1:
    - 'lore(''元素:火焰'')'
  2:
    - 'permission(''lgm.先天霜火圣体'')'

简化列表写法:

yaml
condition:
  - 'permission(''lgm.先天霜火圣体'')'
point: 2

带权重写法中,同一个权重下的每一条字符串条件都会独立统计命中次数。例如 3 件物品满足权重为 1 的 Lore 条件,就增加 3 层;同一件物品同时满足多条条件时,各条条件仍然分别累计,不进行物品去重。

物品条件按扫描槽位统计命中次数。权限、PlaceholderAPI 和玩家状态条件每次只判断一次,不会按照物品槽位重复计算。

标签层数会在所有条件累计完成后再应用 max-point 限制。

check-slot

check-slot 的写法与 plugin-slot 相同。配置后,当前标签的物品条件只扫描该列表;未配置或列表为空时,使用全局 plugin-slot

check-slot 只改变物品条件的扫描范围,不会让 permissionnopermissionpapiworldtimegamemodeweather 条件按槽位重复计算。

条件表达式

条件使用函数式写法,不支持旧版的 lore:{...}nbt:{...}permission:{...} 格式。函数参数使用单引号,多个参数使用逗号分隔。

条件写法说明
名称包含name('文本')物品显示名称包含文本,默认使用 contains 匹配。
名称包含name('文本', contains)物品显示名称包含文本。
名称完整匹配name('文本', equals)物品显示名称完整匹配文本。
Lore 包含lore('文本')任意一行 Lore 包含文本,默认使用 contains 匹配。
Lore 包含lore('文本', contains)任意一行 Lore 包含文本。
Lore 完整匹配lore('文本', equals)任意一行 Lore 完整匹配文本。
NBT 字符串或数值nbt('路径', '值')默认完整匹配 NBT 标量值。数值也可以不加引号。
玩家权限permission('权限节点')玩家拥有权限时命中一次。
无玩家权限nopermission('权限节点')玩家没有权限时命中一次。
PlaceholderAPIpapi(比较表达式)根据 PlaceholderAPI 展开结果判断。需要 PlaceholderAPI 已安装并启用。
世界world('世界名')玩家当前世界名称匹配时命中一次。
时间time('day')time('night')day 为 0 到 11999,night 为 12000 到 23999。
游戏模式gamemode('模式')玩家当前游戏模式匹配时命中一次。
天气weather('clear')weather('rain')weather('thunder')判断当前世界天气,stormthunder 的同义写法。

文本条件中的 & 会转换为 Minecraft 颜色码后再进行匹配。

NBT 比较方式

写法说明
nbt('路径', '值', equals)字符串完整匹配。默认方式。
nbt('路径', '值', !=)字符串不等于。
nbt('路径', '值', contains)字符串包含。
nbt('路径', '值', startsWith)字符串以目标文本开头。
nbt('路径', '值', endsWith)字符串以目标文本结尾。
nbt('路径', 5, >)NBT 数值大于目标值。
nbt('路径', 5, >=)NBT 数值大于或等于目标值。
nbt('路径', 5, <)NBT 数值小于目标值。
nbt('路径', 5, <=)NBT 数值小于或等于目标值。
nbt('路径', 'TEXT', ignoreCase)忽略英文大小写进行完整匹配。
nbt('路径', 'TEXT', equals, ignoreCase)忽略英文大小写进行完整匹配。

数值比较要求物品 NBT 实际值和目标值都可以转换为数字。ignoreCase 可以和其他比较方式组合使用。

条件组合

  • 同一条字符串条件中,顶层 || 表示 OR,任意一侧成立即可。
  • 在函数前添加 ! 表示取反,例如 !lore('已绑定')
  • && 和比较运算符用于 papi 的 PlaceholderAPI 比较表达式。
  • papi 支持 ==!=>>=<<=&&||
yaml
condition:
  1:
    - 'lore(''元素:火焰'') || nbt(''lgm.element'', ''fire'')'
    - '!lore(''已绑定'')'
  2:
    - 'papi(%player_level% >= 5 && %player_level% <= 10)'
    - 'permission(''lgm.vip'') || papi(%player_level% >= 30)'

同一权重下的多条条件不是多行 AND。只有同一条字符串中的 || 才表示条件分支。

mapped 映射配置

mapped 必须写在 plugins/LyGalaxyMapped/mapped/ 目录中的 YAML 文件内。它根据标签层数选择动态构筑。同一个 group-id 中只会有一条映射生效,不同 group-id 的映射可以同时生效。

映射节点

配置项类型默认值说明
mapped节点映射配置根节点。
mapped.<映射ID>节点定义一条动态映射。映射 ID 可自定义。
mapped.<映射ID>.group-id字符串当前映射 ID当前映射所属的组。相同组内的映射互相选择。
mapped.<映射ID>.group-priority整数0当前映射在组内的优先级,数值越大越优先。
mapped.<映射ID>.require节点激活所需的标签层数,多个标签必须同时满足。
mapped.<映射ID>.exclude节点排斥标签层数,任意标签达到配置层数时当前映射不生效。
mapped.<映射ID>.lore-get-placeholder节点从全局 plugin-slot 快照的物品 Lore 中提取动态数值。
mapped.<映射ID>.attribute字符串列表空列表当前映射提供的属性行。
mapped.<映射ID>.potion字符串列表空列表当前映射提供的药水效果。
mapped.<映射ID>.start-message字符串列表空列表映射开始生效时发送的消息。
mapped.<映射ID>.end-message字符串列表空列表映射结束生效时发送的消息。

映射选择规则如下:

  • require 中的每个标签都必须达到指定层数。
  • exclude 中任意标签达到指定层数后,当前映射被排斥。
  • 相同 group-id 中,选择满足条件且 group-priority 最高的映射。
  • 同组优先级相同时,按映射 ID 的字典顺序选择较早的一条。
  • 同组低优先级映射的属性和药水不会与高优先级映射叠加。
  • 不同组的映射可以同时生效。
yaml
mapped:
  '霜火共鸣1级':
    group-id: '霜火共鸣'
    group-priority: 1
    require:
      '火焰': 1
      '冰霜': 1
    exclude:
      '夜间': 1
    lore-get-placeholder:
      '变量id': '获得 <value>x玩家 等级点攻击力'
    attribute:
      - '火属性伤害: {var.变量id}'
      - '火焰层数伤害: <{tag.火焰}*2>'
      - '冰属性伤害: 20'
      - '元素穿透: 10'
    potion:
      - 'SPEED:1'
    start-message:
      - '&7你触发了 &a{id}'
    end-message:
      - '&7你的 &a{id} &7消失了'

requireexclude

yaml
require:
  '火焰': 2
  '冰霜': 2
exclude:
  '夜间': 1

require 是同时满足关系,上例要求 火焰冰霜 都至少达到 2 层。

exclude 是排斥关系,上例中 夜间 达到 1 层后,当前映射不会生效。通过外部 API 添加的临时标签也会参与最终标签层数计算,因此会影响 requireexclude

lore-get-placeholder

lore-get-placeholder 的键是变量 ID,值是 Lore 提取模板。模板使用 <value> 标记需要读取的数字。

yaml
lore-get-placeholder:
  '变量id': '获得 <value>x玩家 等级点攻击力'
attribute:
  - '火属性伤害: {var.变量id}'

如果 Lore 为 获得 12x玩家 等级点攻击力,变量 变量id 的值为 12。同一个变量在多个物品或多行 Lore 中命中时会累加;未命中的变量按 0 处理。

提取范围使用全局 plugin-slot 快照,没有单独的槽位配置项。模板中的 & 会转换为 Minecraft 颜色码。

attribute

attribute 是字符串列表,每一行代表一条属性配置,并会提交给 attribute-plugin 指定的属性插件。

写法说明
{var.变量ID}读取当前映射的 Lore 动态变量,未知变量替换为 0
{tag.标签ID}读取本次计算得到的标签层数,包含装备标签和临时标签,未知标签替换为 0
<表达式>计算尖括号中的四则运算表达式,支持加、减、乘、除和括号。

PlaceholderAPI 占位符会在尖括号公式计算前展开。

yaml
attribute:
  - '火属性伤害: {var.变量id}'
  - '火焰层数伤害: <{tag.火焰}*2>'
  - '火属性伤害: <%player_level%*2>'

当前配置模型直接在映射节点中读取 attribute,不读取独立的 attribute-groupeffectresonance 节点,也不支持旧版 eval:{...} 公式格式。

potion

药水配置格式如下:

yaml
potion:
  - 'SPEED:1'
  - 'JUMP:2:10'
格式说明
类型:等级使用根据 thread-running-interval 计算出的默认持续时间,至少持续 2 秒。
类型:等级:秒数指定正整数持续秒数。无效或非正数值会使用默认持续时间。

配置等级按 1 起算,内部会转换为 Bukkit 药水等级。同一玩家的多个生效映射提供相同药水类型时,等级更高的效果优先;等级相同则持续时间更长的效果优先。无效药水类型、无法解析的等级或缺少必要分段时,会跳过当前药水行。

当前示例使用的药水类型包括:

SPEEDFAST_DIGGINGSLOW_DIGGINGINCREASE_DAMAGEHEALHARMJUMPCONFUSIONREGENERATIONDAMAGE_RESISTANCEFIRE_RESISTANCEWATER_BREATHINGINVISIBILITYBLINDNESSNIGHT_VISIONHUNGERWEAKNESSPOISONWITHERHEALTH_BOOSTABSORPTIONSATURATIONFIRE

start-messageend-message

yaml
start-message:
  - '&7你触发了 &a{id}'
end-message:
  - '&7你的 &a{id} &7消失了'
  • & 颜色码会转换为 Minecraft 颜色码。
  • {id} 会替换为当前映射 ID。
  • PlaceholderAPI 启用时,消息发送前会展开 PlaceholderAPI 占位符。
  • 映射首次进入生效状态时发送 start-message
  • 映射离开生效状态时发送 end-message
  • 同组映射切换时,先发送旧映射的 end-message,再发送新映射的 start-message
  • 空消息列表或空消息行不会发送。

重载配置

修改主配置或 mapped 目录中的 YAML 文件后,使用以下指令重新读取:

指令执行限制说明
/lgm reload仅 OP重载 config.ymlmapped 目录中的配置,并重新计算在线玩家状态。

重载过程中会清理旧属性和本插件管理的药水效果,再按新配置重新计算。

配置注意事项

  • 主配置只读取 attribute-pluginthread-running-intervalplugin-slot 等运行参数;tag-checkmapped 必须放在 mapped 目录中的 .yml 文件内。
  • 当前只读取新版 tag-checkmapped 节点,不兼容旧版 checkattribute-group,也不读取独立的 effectresonance 节点。
  • tag-check.condition 中的数字是每次命中的层数权重,不是条件编号。
  • 同一权重下的多条条件独立累计,不是多行 AND。
  • mapped.require 中的多个标签需要同时达到要求。
  • exclude 中任意标签达到对应层数后,当前映射不会生效。
  • 同组映射只保留一条,不同组映射可以同时生效。
  • 使用 PlaceholderAPI 条件、属性占位符或消息占位符时,需要 PlaceholderAPI 已安装并启用。
  • 使用外部背包槽位时,对应背包插件必须能够提供该槽位物品。