Skip to content

宠物技能

宠物技能配置在对应宠物文件的 skill 节点下。每个技能使用独立 ID,可配置触发事件、释放条件、动态冷却、MythicMobs 技能、龙核模型动作、冷却提示和触发指令。

技能只有在宠物处于召唤状态时才能触发。skills 中填写的是 MythicMobs 技能 ID,使用该功能时必须安装并正常启用 MythicMobs。使用龙核或萌芽按键事件时,还需要安装对应插件,并在主配置中注册键位。

完整结构

yaml
skill:
  1:
    event: 'LEFT'
    trigger-conditions:
      - '%player_level% * 2 > 10'
    cd: 5
    skills:
      - '测试技能'
    animation-id: ''
    animation-speed: 0
    skill-origin-loc: false
    cd-msg:
      on-cd: '&c技能 {id} 剩余冷却时间:{time} 秒'
      over-cd: '&a技能 {id} 冷却已结束'
    command:
      - '[op]tell %player_name% 你触发了技能 {id}'
      - '[console]tell %player_name% 你触发了技能 {id}'
      - '[player]tell %player_name% 你触发了技能 {id}'

配置项

配置项类型默认值说明
skill.<技能ID>节点一个宠物技能。技能 ID 用于区分冷却,并可通过 {id} 插入消息或指令
event字符串技能触发事件,属于必填项
trigger-conditions字符串列表空列表触发条件。列表中的每一项都必须通过
cd数值或字符串表达式冷却时间,单位为秒,支持 PlaceholderAPI 变量和四则运算,属于必填项
skills字符串列表空列表依次尝试释放的 MythicMobs 技能 ID
animation-id字符串''释放 MythicMobs 技能时播放的龙核模型动作 ID,留空不播放
animation-speed整数0发送给 DragonCore 的模型动作速度参数
skill-origin-loc布尔值trueMythicMobs 技能原点是否使用玩家位置
cd-msg.on-cd字符串技能仍在冷却时发送的消息,留空不发送
cd-msg.over-cd字符串技能冷却结束后发送的消息,留空不发送
command字符串列表空列表技能成功进入释放流程后执行的指令

eventcd 没有代码默认值,应当始终配置。cd-msg.on-cdcd-msg.over-cd 也建议保留;不需要提示时填写空字符串,避免缺少消息内容。

yaml
cd-msg:
  on-cd: ''
  over-cd: ''

触发事件

事件格式触发时机匹配方式
LEFT宠物主人左键点击空气或方块不区分大小写;所有匹配技能都会尝试触发
RIGHT宠物主人右键点击空气或方块不区分大小写;所有匹配技能都会尝试触发
TIME#几率每秒进行一次几率判定几率通过后尝试触发
DAMAGED#几率宠物主人受到实体伤害时进行几率判定几率通过后尝试触发
ATTACK#几率宠物主人对实体造成伤害时进行几率判定几率通过后尝试触发
SLOT-DRAGON#键位收到对应 DragonCore 按键事件时触发键位匹配不区分大小写,只触发找到的第一个技能
SLOT-GERM#键位收到对应 GermPlugin 按键抬起事件时触发键位匹配不区分大小写,只触发找到的第一个技能

左右键事件

yaml
skill:
  left-skill:
    event: 'LEFT'
    cd: 3
    skills:
      - '宠物左键技能'
    cd-msg:
      on-cd: '&c技能剩余冷却:{time} 秒'
      over-cd: '&a技能冷却已结束'
    command: []

  right-skill:
    event: 'RIGHT'
    cd: 5
    skills:
      - '宠物右键技能'
    cd-msg:
      on-cd: ''
      over-cd: ''
    command: []

同一只宠物可以配置多个 LEFTRIGHT 技能。玩家点击时,插件会遍历当前宠物的全部技能,每个事件匹配的技能都会独立检查条件与冷却。

几率事件

yaml
skill:
  timed-skill:
    event: 'TIME#25'
    cd: 10
    skills:
      - '宠物周期技能'
    cd-msg:
      on-cd: ''
      over-cd: ''
    command: []

  damaged-skill:
    event: 'DAMAGED#50'
    cd: 5
    skills:
      - '宠物受击技能'
    cd-msg:
      on-cd: ''
      over-cd: ''
    command: []

  attack-skill:
    event: 'ATTACK#30'
    cd: 5
    skills:
      - '宠物攻击技能'
    cd-msg:
      on-cd: ''
      over-cd: ''
    command: []
事件几率判定频率
TIME#25插件任务每秒判定一次,判定通过时尝试触发
DAMAGED#50主人每次受到实体伤害时判定一次
ATTACK#30主人每次对实体造成伤害时判定一次

示例配置和插件注释将几率定义为 0100

  • 0 不会通过随机判定。
  • 100 每次都会通过随机判定。
  • 几率判定通过后,仍需继续检查触发条件和技能冷却。

几率部分会直接转换为整数,应填写有效整数,不要附加 % 符号或其他文本。

按键技能

DragonCore 和 GermPlugin 的技能键位需要先写入主配置 config.ymlregister-keys。执行插件重载时,LyPet 会尝试向已启用的对应插件重新注册这些键位。

DragonCore 键位

DragonCore 使用普通键盘按键名,例如 ZH

yaml
register-keys:
  - 'H'

宠物技能事件写法:

yaml
skill:
  dragon-skill:
    event: 'SLOT-DRAGON#H'
    cd: 5
    skills:
      - '宠物按键技能'
    cd-msg:
      on-cd: '&c技能剩余冷却:{time} 秒'
      over-cd: '&a技能冷却已结束'
    command: []

只有 DragonCore 已启用时,插件才会注册 DragonCore 按键监听器并注册配置中的键位。

GermPlugin 键位

GermPlugin 事件需要填写其 KeyType 名称,例如 KEY_H

yaml
register-keys:
  - 'KEY_H'

宠物技能事件写法:

yaml
skill:
  germ-skill:
    event: 'SLOT-GERM#KEY_H'
    cd: 5
    skills:
      - '宠物按键技能'
    cd-msg:
      on-cd: '&c技能剩余冷却:{time} 秒'
      over-cd: '&a技能冷却已结束'
    command: []

只有 GermPlugin 已启用时,插件才会注册萌芽按键监听器并处理对应的按键抬起事件。

按键匹配规则

  • 技能事件中的键位匹配不区分大小写。
  • DragonCore 使用事件提供的键盘按键名。
  • GermPlugin 使用事件提供的 KeyType 名称。
  • 一次 DragonCore 或 GermPlugin 按键事件只会触发遍历时找到的第一个匹配技能。
  • 不要在同一只宠物中为多个技能配置相同的龙核或萌芽按键,否则只有其中一个技能会进入触发流程。
  • register-keys 还会在重载时参与按键注销和重新注册,应确保键位名称能被对应插件识别。

触发流程

一次技能触发按以下顺序处理:

  1. 确认玩家缓存存在,并且当前宠物处于召唤状态。
  2. 检查 trigger-conditions 中的全部条件。
  3. 按“玩家 UUID + 宠物 ID + 技能 ID”检查冷却。
  4. 如果技能仍在冷却,发送 cd-msg.on-cd,然后停止本次触发。
  5. 如果技能可以使用,立即记录新的冷却结束时间。
  6. skills 列表顺序尝试释放 MythicMobs 技能。
  7. 在每个 MythicMobs 技能的释放循环中,按配置尝试播放 DragonCore 模型动作。
  8. MythicMobs 技能列表处理结束后,依次执行 command 中的指令。

以下情况不会写入新冷却:

  • 宠物未召唤。
  • 任意一条 trigger-conditions 未通过。
  • 技能仍处于冷却状态。

进入释放流程后,即使 skills 为空,插件仍会记录冷却并执行 command。如果某个 MythicMobs 技能 ID 不存在,该技能不会释放,但后续技能和指令仍会继续处理。

触发条件

trigger-conditions 会使用触发技能的玩家替换 PlaceholderAPI 变量,再进行文本或数值判断。列表中的每一项都必须返回真,技能才能继续触发。

yaml
trigger-conditions:
  - '%player_level% >= 10'
  - '%player_world% == world'

未配置 trigger-conditions 时使用空列表,相当于不限制触发条件。

比较符号

符号处理方式示例
>左侧数值大于右侧数值%player_level% > 10
>=左侧数值大于或等于右侧数值%player_level% >= 10
==去除空格后,两侧文本完全相同%player_world% == world
<=左侧数值小于或等于右侧数值%player_level% <= 50
<左侧数值小于右侧数值%player_level% < 50

>>=<=< 会将两侧内容作为数值表达式计算。== 使用文本完全匹配,不会忽略字母大小写。

条件处理时会移除表达式中的普通空格,因此空格只用于提高配置可读性,不能用于区分 == 两侧的文本。

数值表达式

数值比较支持以下内容:

内容符号
加法+
减法-
乘法*
除法/
括号()
小数1.5
yaml
trigger-conditions:
  - '(%player_level% + 5) * 2 >= 30'
  - '%player_health% / 2 < 10'

PlaceholderAPI 变量替换后,用于数值比较的两侧必须能被解析为有效数值表达式。

组合条件

单条条件支持:

连接符含义
&&同一组内的条件必须全部成立
`

程序先使用 || 拆分条件组,再使用 && 检查每组中的全部条件。

yaml
trigger-conditions:
  - '%player_level% >= 20 && %player_world% == world || %player_level% >= 30 && %player_world% == world_nether'

这条条件表示满足以下任意一组即可:

  • 玩家等级大于或等于 20,并且位于 world
  • 玩家等级大于或等于 30,并且位于 world_nether

多条列表条件与单条条件中的 && 不同。列表中的每一条都必须通过,而每条内部可以继续使用 &&|| 组合判断。

yaml
trigger-conditions:
  - '%player_level% >= 10'
  - '%player_world% == world || %player_world% == world_nether'

冷却

cd 的单位为秒。插件会将配置内容包裹在括号中,替换 PlaceholderAPI 变量,计算表达式后乘以 1000,最终按毫秒记录冷却结束时间。

固定冷却

yaml
cd: 5

动态冷却

yaml
cd: '%player_level% / 10 + 3'

冷却表达式支持:

  • 整数和小数。
  • 加法 +
  • 减法 -
  • 乘法 *
  • 除法 /
  • 括号 ()
  • PlaceholderAPI 玩家变量。

变量替换后的内容应只包含有效数字、小数点、括号和四则运算符。不要在 cd 中添加“秒”等单位文字。

冷却隔离

冷却键由宠物 ID 和技能 ID 组合,并存储在玩家自己的冷却映射中。因此冷却按以下三个维度隔离:

  • 玩家。
  • 宠物 ID。
  • 技能 ID。

不同玩家、不同宠物或不同技能不会共用同一条冷却。宠物文件中的 id 必须保持全局唯一,技能 ID 在同一只宠物的 skill 节点内也必须唯一。

冷却消息

yaml
cd-msg:
  on-cd: '&c技能 {id} 剩余冷却时间:{time} 秒'
  over-cd: '&a技能 {id} 冷却已结束'
占位内容可用位置说明
{id}cd-msg.on-cdcd-msg.over-cdcommand当前技能节点的 ID
{time}cd-msg.on-cd当前剩余冷却秒数,按整数向上显示

{id}{time} 是 LyPet 自己处理的内容,不是 PlaceholderAPI 变量。

cd-msg.on-cd 只会在玩家于冷却期间再次尝试触发技能时发送。仅仅等待冷却结束,不会重复发送冷却中提示。

cd-msg.over-cd 由每秒执行一次的技能任务检查,因此提示可能在实际冷却结束后的下一次任务检查时发送。

冷却结束提示只检查玩家当前已召唤宠物的技能。出现以下情况时,原技能不会立即发送结束提示:

  • 玩家当前没有召唤宠物。
  • 玩家已经切换到另一只宠物。
  • 当前召唤宠物中不存在原来的宠物 ID 与技能 ID 组合。

当玩家之后再次召唤包含同一冷却键的宠物,并且冷却记录仍存在时,任务会在检查到冷却结束后发送提示并移除记录。

不需要提示时保留空字符串:

yaml
cd-msg:
  on-cd: ''
  over-cd: ''

MythicMobs 技能

skills 用于填写需要释放的 MythicMobs 技能 ID。插件会按照列表顺序逐项检查并尝试释放。

yaml
skills:
  - '宠物治疗'
  - '宠物粒子效果'
行为说明
技能施法者宠物主人
技能触发者宠物主人
技能原点skill-origin-loc 决定
实体目标玩家当前指向的生物目标,由 MythicMobs 相关工具取得
技能强度1.0
不存在的技能 ID跳过该项,不释放
多个技能按配置列表顺序依次尝试释放

配置 skills 功能必须安装并正常启用 MythicMobs。插件会在启动时检查 MythicMobs 是否启用,并在控制台输出检查结果。

如果 MythicMobs 中不存在对应技能 ID,该项会直接跳过。它不会阻止列表中的其他技能继续处理,也不会阻止 command 执行。

技能原点

yaml
skill-origin-loc: false
MythicMobs 技能原点
true宠物主人的当前位置
false当前宠物实体的位置

未配置 skill-origin-loc 时默认为 true

如果 MythicMobs 技能需要围绕该坐标选择目标或生成效果,应在 MythicMobs 技能配置中使用 @Origin 等基于原点的目标选择器。

skill-origin-loc 只控制传递给 MythicMobs 的技能原点,不会改变施法者身份。无论选择玩家位置还是宠物位置,施法者仍然是宠物主人。

DragonCore 模型动作

技能可以在处理 skills 列表时,为宠物播放 DragonCore 模型动作。

yaml
animation-id: 'attack'
animation-speed: 1
配置项默认值说明
animation-id''DragonCore 模型动作 ID,空字符串表示不播放
animation-speed0发送给 DragonCore 的模型动作速度参数

动作只有在满足以下条件时才会尝试播放:

  • animation-id 不是空字符串。
  • DragonCore 已启用。
  • skills 列表中正在处理某个 MythicMobs 技能项。

动作会发送给宠物所在世界内的全部在线玩家,使这些玩家看到对应宠物实体播放动作。

动作播放位于 skills 的循环内部,因此需要注意:

  • skills 为空列表时,不会单独播放模型动作。
  • skills 配置一个技能时,同次触发最多发送一次动作。
  • skills 配置多个技能时,同次触发会在处理每个技能项时重复发送动作。
  • 即使某个 MythicMobs 技能 ID 不存在,动作发送仍发生在该技能项的检查流程中。

模型动作依赖宠物实体已经正确绑定 DragonCore 模型。动作 ID 和速度参数的具体效果由对应 DragonCore 模型配置决定。

触发指令

command 中的指令会在技能成功通过条件和冷却检查,并完成 skills 列表处理后依次执行。指令开头不需要填写 /

yaml
command:
  - '[op]tell %player_name% 你触发了技能 {id}'
  - '[console]effect give %player_name% speed 5 1'
  - '[player]say 我使用了技能 {id}'
  - 'say 我使用了技能 {id}'
格式执行身份处理方式
[op]指令宠物主人临时赋予管理员状态执行,完成后恢复原状态
[console]指令控制台移除标记后由控制台执行
[player]指令宠物主人移除标记后以玩家当前权限执行
无前缀指令宠物主人直接以玩家当前权限执行

每条指令的处理顺序为:

  1. 替换 PlaceholderAPI 变量。
  2. 判断执行身份标记。
  3. 移除 [op][console][player] 标记。
  4. {id} 替换为当前技能 ID。
  5. 执行指令。

[op][console] 使用字符串包含方式识别,并非只检查指令开头。建议始终将执行身份标记放在每条指令最前方,避免指令参数中出现相同文本而被误判。

[player] 没有独立的身份判断分支,而是在普通玩家指令分支中移除,因此它与无前缀指令的执行权限相同。

如果技能已成功进入释放流程,即使 skills 为空或 MythicMobs 技能 ID 不存在,command 仍会执行。

配置组合示例

以下配置包含普通点击、条件判断、动态冷却、MythicMobs 技能、宠物位置原点、DragonCore 动作和触发指令:

yaml
skill:
  attack-wave:
    event: 'LEFT'
    trigger-conditions:
      - '%player_level% >= 10'
      - '%player_world% == world || %player_world% == world_nether'
    cd: '%player_level% / 10 + 3'
    skills:
      - '宠物攻击波'
    animation-id: 'attack'
    animation-speed: 1
    skill-origin-loc: false
    cd-msg:
      on-cd: '&c技能 {id} 剩余冷却时间:{time} 秒'
      over-cd: '&a技能 {id} 冷却已结束'
    command:
      - '[console]tell %player_name% 你的宠物释放了技能 {id}'

只执行指令、不释放 MythicMobs 技能时,可以将 skills 保留为空列表:

yaml
skill:
  command-skill:
    event: 'RIGHT'
    trigger-conditions: []
    cd: 3
    skills: []
    animation-id: ''
    animation-speed: 0
    skill-origin-loc: true
    cd-msg:
      on-cd: ''
      over-cd: ''
    command:
      - '[player]say 我触发了宠物技能 {id}'

该配置仍会记录冷却并执行指令,但不会释放 MythicMobs 技能,也不会播放 DragonCore 模型动作。

注意事项

  • eventcd 应当始终配置,缺少这些内容可能导致宠物配置读取或事件处理失败。
  • cd-msg.on-cdcd-msg.over-cd 不需要显示时应填写 '',不要直接省略。
  • event 的几率部分必须是整数。
  • 用于数值比较或动态冷却的 PlaceholderAPI 变量必须替换为有效数字表达式。
  • == 是区分大小写的文本完全匹配。
  • 同一条条件中的空格会被移除,不适合比较包含空格的文本。
  • 同一只宠物可以有多个相同的普通事件或几率事件,它们会分别进行判定。
  • 相同的 DragonCore 或 GermPlugin 按键事件只会触发找到的第一个匹配技能。
  • skills 为空时仍会记录冷却并执行指令,但不会播放通过 animation-id 配置的动作。
  • 配置多个 MythicMobs 技能时,DragonCore 动作可能在同一次触发中重复发送。
  • 技能冷却保存在内存中,没有项目证据表明技能冷却会持久化到文件或数据库。