宠物技能
宠物技能配置在对应宠物文件的 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 | 布尔值 | true | MythicMobs 技能原点是否使用玩家位置 |
cd-msg.on-cd | 字符串 | 无 | 技能仍在冷却时发送的消息,留空不发送 |
cd-msg.over-cd | 字符串 | 无 | 技能冷却结束后发送的消息,留空不发送 |
command | 字符串列表 | 空列表 | 技能成功进入释放流程后执行的指令 |
event 和 cd 没有代码默认值,应当始终配置。cd-msg.on-cd 和 cd-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: []同一只宠物可以配置多个 LEFT 或 RIGHT 技能。玩家点击时,插件会遍历当前宠物的全部技能,每个事件匹配的技能都会独立检查条件与冷却。
几率事件
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 | 主人每次对实体造成伤害时判定一次 |
示例配置和插件注释将几率定义为 0 至 100:
0不会通过随机判定。100每次都会通过随机判定。- 几率判定通过后,仍需继续检查触发条件和技能冷却。
几率部分会直接转换为整数,应填写有效整数,不要附加 % 符号或其他文本。
按键技能
DragonCore 和 GermPlugin 的技能键位需要先写入主配置 config.yml 的 register-keys。执行插件重载时,LyPet 会尝试向已启用的对应插件重新注册这些键位。
DragonCore 键位
DragonCore 使用普通键盘按键名,例如 Z、H。
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还会在重载时参与按键注销和重新注册,应确保键位名称能被对应插件识别。
触发流程
一次技能触发按以下顺序处理:
- 确认玩家缓存存在,并且当前宠物处于召唤状态。
- 检查
trigger-conditions中的全部条件。 - 按“玩家 UUID + 宠物 ID + 技能 ID”检查冷却。
- 如果技能仍在冷却,发送
cd-msg.on-cd,然后停止本次触发。 - 如果技能可以使用,立即记录新的冷却结束时间。
- 按
skills列表顺序尝试释放 MythicMobs 技能。 - 在每个 MythicMobs 技能的释放循环中,按配置尝试播放 DragonCore 模型动作。
- 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-cd、cd-msg.over-cd、command | 当前技能节点的 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-speed | 0 | 发送给 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]指令 | 宠物主人 | 移除标记后以玩家当前权限执行 |
| 无前缀指令 | 宠物主人 | 直接以玩家当前权限执行 |
每条指令的处理顺序为:
- 替换 PlaceholderAPI 变量。
- 判断执行身份标记。
- 移除
[op]、[console]或[player]标记。 - 将
{id}替换为当前技能 ID。 - 执行指令。
[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 模型动作。
注意事项
event和cd应当始终配置,缺少这些内容可能导致宠物配置读取或事件处理失败。cd-msg.on-cd和cd-msg.over-cd不需要显示时应填写'',不要直接省略。event的几率部分必须是整数。- 用于数值比较或动态冷却的 PlaceholderAPI 变量必须替换为有效数字表达式。
==是区分大小写的文本完全匹配。- 同一条条件中的空格会被移除,不适合比较包含空格的文本。
- 同一只宠物可以有多个相同的普通事件或几率事件,它们会分别进行判定。
- 相同的 DragonCore 或 GermPlugin 按键事件只会触发找到的第一个匹配技能。
skills为空时仍会记录冷却并执行指令,但不会播放通过animation-id配置的动作。- 配置多个 MythicMobs 技能时,DragonCore 动作可能在同一次触发中重复发送。
- 技能冷却保存在内存中,没有项目证据表明技能冷却会持久化到文件或数据库。