宠物配置
宠物配置文件放在插件目录的 pet/ 文件夹中。插件会递归读取该目录及其子目录内的所有 .yml 文件,每个文件定义一个宠物。
宠物通过全局配置 plugin-slot 指定槽位内物品的显示名称进行匹配。玩家召唤宠物后,插件使用 Adyeshach 创建临时实体,并处理路径跟随、远距离传送、自动攻击、交互指令和宠物技能。
文件读取规则
| 规则 | 说明 |
|---|---|
| 文件位置 | plugins/LyPet/pet/ |
| 文件格式 | YAML,扩展名必须为 .yml |
| 子目录 | 支持,插件会递归读取 |
| 文件名 | 不参与宠物匹配,可自行命名 |
| 宠物 ID | 由文件内的 id 决定,必须全局唯一 |
| 重复 ID | 后读取到的同 ID 配置不会加载,并在控制台提示读取失败 |
| 示例文件 | 插件会释放 pet/示例宠物.yml,已存在时不会覆盖 |
| 重载方式 | 使用 /lycw reload 重新读取全部宠物文件 |
插件没有按文件名筛选宠物,只要文件位于 pet/ 目录树中并以 .yml 结尾,就会尝试读取。
基础配置
yaml
id: 'f1'
identity: '&6宠物-猪猪'
identity-match-contains: false
show-name: '&b{player}的宠物'
entity-type: 'PIG'| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
id | 字符串 | 无 | 宠物唯一 ID,所有宠物文件之间不可重复 |
identity | 字符串 | 无 | 用于匹配指定槽位内物品的显示名称,支持 & 颜色代码 |
identity-match-contains | 布尔值 | false | 是否使用包含匹配;关闭时必须与物品显示名称完全一致 |
show-name | 字符串 | &b{player}的宠物 | 宠物实体的可见名称,支持 & 颜色代码和 {player} |
entity-type | 字符串 | 无 | Adyeshach 的实体类型枚举名称 |
id、identity 和 entity-type 应当明确填写。identity 缺失时,插件读取该文件时会发生异常并将其判定为加载失败。
名称匹配规则
identity-match-contains | 匹配方式 |
|---|---|
false | 槽位物品的显示名称必须与 identity 完全一致 |
true | 槽位物品的显示名称中包含 identity 即可 |
匹配前,配置中的 & 会转换为 Minecraft 颜色符号。因此,物品显示名称中的颜色也会参与比较。
只有槽位中存在物品,并且该物品拥有显示名称时,插件才会尝试匹配宠物。匹配成功后,插件使用找到的第一份宠物配置。
宠物显示名称
show-name 会设置为 Adyeshach 实体的可见自定义名称。
| 内容 | 说明 |
|---|---|
{player} | 替换为宠物主人的玩家名称 |
& 颜色代码 | 加载配置时转换为 Minecraft 颜色代码 |
yaml
show-name: '&b{player}的宠物'玩家 Steve 召唤该宠物时,实体名称会显示为“Steve的宠物”,并应用配置中的颜色。
实体类型
entity-type 通过 Adyeshach 的 EntityTypes.valueOf 读取,应填写 Adyeshach 支持的实体类型枚举名称,例如:
yaml
entity-type: 'PIG'枚举名称需要正确填写,并区分大小写。类型不存在、为空或格式错误时,插件会:
- 在控制台输出实体类型错误。
- 输出对应异常信息。
- 将该宠物的实体类型回退为
PIG。
跟随设置
yaml
follow-speed: 0.35
teleport-distance: 16.0
standby-distance: 1.0| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
follow-speed | 小数 | 0.3 | 宠物的基础跟随速度 |
teleport-distance | 小数 | 15.0 | 宠物与当前目标距离超过该值时,直接传送到目标附近 |
standby-distance | 小数 | 1.5 | 宠物接近目标后停止继续靠近的距离,也参与传送位置偏移计算 |
宠物会记录主人或攻击目标的历史位置,并沿路径点移动。路径点最多保留 30 个;距离目标越远,插件计算出的移动速度倍率越高。
宠物移动时会平滑调整朝向。处于攻击范围内时,宠物会停止继续移动,并朝向当前攻击目标。
召唤后的移动延迟
宠物成功召唤后,会固定等待 20 tick 再开始移动。等待期间仍会记录路径,用于减少模型刚生成时出现动作卡顿的情况。
远距离传送
宠物与当前目标的距离超过 teleport-distance 时,插件会:
- 根据宠物之前的位置或主人朝向计算目标附近的偏移位置。
- 使用
standby-distance控制偏移距离。 - 尝试从目标位置向下两格内寻找安全站立方块。
- 找到安全位置时传送到方块上方,未找到时使用计算出的目标位置。
- 清空已有路径点。
安全位置要求站立方块为实体方块,上方两格为空,并排除栅栏、墙、活板门、压力板和按钮等方块。
切换世界
宠物与主人不在同一世界时,插件会删除原宠物实体,并在主人所在位置重新创建实体,同时清空攻击目标和移动路径。
建议将 track-range 与 teleport-distance 设置为相近数值,避免追击范围与远距离传送范围差异过大。
自动攻击
yaml
auto-attack-enable: true
track-range: 16.0
attack-range: 3.0
attack-speed: 20
attack-function: 'attack'| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
auto-attack-enable | 布尔值 | false | 是否允许宠物追击并攻击目标 |
track-range | 小数 | 10.0 | 攻击目标距离主人超过该值时停止追击 |
attack-range | 小数 | 2.0 | 宠物与目标距离小于该值时进入攻击状态 |
attack-speed | 整数 | 20 | 两次攻击之间的间隔,单位为 tick |
attack-function | 字符串 | attack | 攻击方式,填写 attack 或 MythicMobs 技能 ID |
宠物会从以下行为获取攻击目标:
- 主人对一个生物造成伤害。
- 主人受到一个生物造成的伤害。
插件不会将主人自身设置为攻击目标。
目标出现以下情况时会被清除:
- 目标实体已经失效。
- 目标与主人不在同一世界。
- 目标与主人的距离超过
track-range。 - 主人切换世界,导致宠物重新创建。
目标被清除后,宠物恢复跟随主人。
攻击方式
attack-function 值 | 行为 |
|---|---|
attack | 以宠物主人身份对目标执行一次服务端原版攻击 |
| MythicMobs 技能 ID | 以宠物当前位置作为技能原点,尝试释放对应 MythicMobs 技能 |
填写 MythicMobs 技能 ID 时,该技能必须已经存在。技能不存在时不会释放。
attack 的实现直接调用 CraftBukkit/NMS v1_12_R1 类,只能确认适用于对应的 Minecraft 1.12 服务端实现。其他服务端版本使用该方式可能无法加载插件或无法正常攻击,应改用 MythicMobs 技能。
攻击动作
yaml
attack-animation-id: ''
attack-animation-speed: 0| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
attack-animation-id | 字符串 | 空字符串 | 自动攻击时播放的 DragonCore 模型动作 ID,留空不播放 |
attack-animation-speed | 整数 | 0 | 发送给 DragonCore 的动作速度参数 |
每次执行自动攻击前,宠物都会先播放 Adyeshach 的主手挥动动作。
当 attack-animation-id 不为空并且服务器已启用 DragonCore 时,插件还会向宠物所在世界内的玩家发送 DragonCore 模型动作。动作发送失败时会在控制台输出错误,不会改变 attack-function 的配置内容。
Shift 右键交互
yaml
shift-right-command-cooldown: 500
shift-right-command:
- '[op]tell %player_name% 你交互了宠物'
- '[console]tell %player_name% 你交互了宠物'
- 'tell %player_name% 你交互了宠物'玩家潜行并交互自己的宠物实体后,插件会按顺序执行 shift-right-command 中的指令。
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
shift-right-command-cooldown | 整数 | 500 | 同一玩家再次触发宠物交互前的等待时间,单位为毫秒 |
shift-right-command | 字符串列表 | 空列表 | 交互后执行的指令列表 |
交互冷却按玩家记录,不按宠物或指令分别记录。该部分不需要时可以删除。
指令执行身份
| 写法 | 执行身份 |
|---|---|
[console]指令 | 控制台执行 |
[op]指令 | 玩家临时获得 OP 后执行,完成后恢复原状态 |
| 无前缀 | 玩家身份执行 |
交互指令会先解析 PlaceholderAPI 变量。建议将 [console] 或 [op] 放在指令开头,指令内容不要添加 /。
yaml
shift-right-command:
- '[console]give %player_name% apple 1'交互指令不支持专门的 [player] 分支。需要玩家执行时直接省略前缀。
宠物技能
skill 节点用于配置宠物在特定事件发生时释放 MythicMobs 技能、播放 DragonCore 动作或执行指令。该部分不需要时可以删除。
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}'
- 'tell %player_name% 你触发了{id}'skill 下一级节点是技能 ID,例如 1。技能冷却使用“宠物 ID + 技能 ID”区分,同一玩家的不同宠物技能不会共用同一条冷却记录。
技能配置项
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
event | 字符串 | 无 | 技能触发事件 |
trigger-conditions | 字符串列表 | 空列表 | 技能释放条件,所有条件均通过后才继续释放 |
cd | 数值或表达式 | 无 | 技能冷却时间,单位为秒,支持 PlaceholderAPI 变量和四则运算 |
skills | 字符串列表 | 空列表 | 需要尝试释放的 MythicMobs 技能 ID |
animation-id | 字符串 | 空字符串 | 技能触发时播放的 DragonCore 动作 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: ''缺少 cd 会导致宠物文件读取失败。缺少冷却消息键可能在发送对应消息时产生异常。
技能触发事件
| 事件写法 | 触发条件 |
|---|---|
LEFT | 宠物显示期间,主人左键空气或方块 |
RIGHT | 宠物显示期间,主人右键空气或方块 |
TIME#几率 | 每秒检测一次,并按指定百分比几率尝试触发 |
DAMAGED#几率 | 主人受到实体伤害时,按指定百分比几率尝试触发 |
ATTACK#几率 | 主人对实体造成伤害时,按指定百分比几率尝试触发 |
SLOT-DRAGON#键位 | 收到对应 DragonCore 按键事件时触发 |
SLOT-GERM#键位 | 松开对应 GermPlugin 键位时触发 |
几率按 0 到 100 填写。例如:
yaml
event: 'TIME#25'该配置每秒检测一次,每次有约 25% 的概率尝试释放技能。通过几率检测后,技能仍需通过 trigger-conditions 和冷却检查。
DragonCore 键位填写普通按键名称:
yaml
event: 'SLOT-DRAGON#H'GermPlugin 键位填写萌芽的 KeyType 名称:
yaml
event: 'SLOT-GERM#KEY_H'键位技能使用的按键还需要加入全局配置的 register-keys 列表。召唤宠物使用的 show-and-hide-key 会由插件单独注册。
同一次普通点击、攻击、受伤或定时检测可以触发多份符合事件配置的技能。DragonCore 或 GermPlugin 键位事件找到第一份键位匹配的技能后会停止继续查找。
触发条件
trigger-conditions 会先解析 PlaceholderAPI 变量,再进行数值计算或文本比较。列表中的每条条件都必须通过。
支持的比较符号:
| 符号 | 说明 |
|---|---|
> | 大于 |
>= | 大于或等于 |
== | 相等,可用于文本比较 |
<= | 小于或等于 |
< | 小于 |
数值部分支持 +、-、*、/ 和括号。
yaml
trigger-conditions:
- '%player_level% * 2 >= 20'
- '%player_world% == world'单条条件支持使用 && 和 || 组合判断:
yaml
trigger-conditions:
- '%player_level% >= 10 && %player_level% < 30'
- '%player_world% == world || %player_world% == world_nether'| 连接符 | 说明 |
|---|---|
&& | 同一组内的全部条件都要成立 |
| ` |
文本相等判断会移除表达式中的空格,因此不要依赖空格区分文本内容。数值比较两侧必须能够计算为数字。
技能冷却
cd 的基础单位为秒。插件先解析 PlaceholderAPI 变量和四则运算,再将结果乘以 1000 转换为毫秒保存。
yaml
cd: 5也可以填写带变量的表达式:
yaml
cd: '%player_level% / 10 + 2'冷却表达式支持整数、小数、+、-、*、/ 和括号。变量替换后的内容应当形成有效的数值表达式。
技能仍在冷却时,再次触发只会发送 cd-msg.on-cd,不会释放 MythicMobs 技能、播放动作或执行指令。
插件每秒检查当前在线玩家正在显示的宠物技能。检测到当前宠物对应的冷却已经结束时,会发送一次 cd-msg.over-cd,然后删除该冷却记录。
| 消息变量 | 适用位置 | 说明 |
|---|---|---|
{id} | on-cd、over-cd | 当前技能 ID,即 skill 下的节点名称 |
{time} | on-cd | 剩余冷却秒数,按秒向上显示 |
冷却消息支持 & 颜色代码。
MythicMobs 技能
skills 可以配置多个 MythicMobs 技能,触发后会按列表顺序逐个尝试释放。
yaml
skills:
- '宠物火球'
- '宠物粒子'skill-origin-loc | 技能原点 |
|---|---|
true | 宠物主人当前位置 |
false | 宠物实体当前位置 |
技能由宠物主人作为释放者。MythicMobs 技能需要使用配置的技能原点时,可以使用 @Origin 目标选择器。
配置的技能 ID 不存在时,该技能不会释放。其他存在的技能和后续指令仍会继续处理。
技能动作
yaml
animation-id: 'attack'
animation-speed: 1animation-id 不为空且 DragonCore 已启用时,插件会向宠物主人所在世界内的玩家发送宠物模型动作。
未安装 DragonCore或动作 ID 留空时,不播放动作,不影响 MythicMobs 技能和指令执行。动作发送发生在处理 skills 列表时;配置多个 MythicMobs 技能时,同一动作可能被发送多次。
技能指令
yaml
command:
- '[op]tell %player_name% 你触发了{id}'
- '[console]tell %player_name% 你触发了{id}'
- '[player]tell %player_name% 你触发了{id}'| 写法 | 执行身份 |
|---|---|
[console]指令 | 控制台执行 |
[op]指令 | 玩家临时获得 OP 后执行,完成后恢复原状态 |
[player]指令 | 玩家身份执行,并移除 [player] 前缀 |
| 无前缀 | 玩家身份执行 |
技能指令支持 PlaceholderAPI 变量和 {id}。指令内容不要添加 /。
只要技能成功通过显示状态、触发条件和冷却检查,指令就会执行。即使 skills 列表为空,或配置的 MythicMobs 技能不存在,指令仍会执行。
DragonCore 模型绑定
服务器启用 DragonCore 时,宠物首次创建后会延迟 1 tick,尝试读取 DragonCore 缓存中的 EntityModel.yml。
匹配流程如下:
- 将宠物的
show-name替换{player}。 - 移除宠物显示名称中的颜色。
- 遍历
EntityModel.yml的顶级节点。 - 读取每个节点的
entity配置并移除颜色。 - 判断宠物最终显示名称是否包含该
entity名称。 - 找到第一项匹配后,向宠物所在世界内的玩家发送模型绑定,并停止继续查找。
例如宠物名称配置为:
yaml
show-name: '&b{player}的猪猪宠物'对应 DragonCore 模型节点的 entity 识别名称可以是“猪猪宠物”。颜色不会影响匹配,但实际发送给 DragonCore 的识别名称会保留 entity 配置中的颜色。
EntityModel.yml 不在 DragonCore 缓存中、entity 为空、没有匹配节点或 DragonCore 未启用时,插件不会执行模型绑定,不影响 Adyeshach 宠物实体本身。
模型自动绑定只在宠物通过 setPetData 创建实体时调用。宠物因跨世界跟随而被重新创建时,当前代码不会再次执行该模型同步流程。
完整配置模板
yaml
id: 'f1'
identity: '&6宠物-猪猪'
identity-match-contains: false
show-name: '&b{player}的宠物'
entity-type: 'PIG'
follow-speed: 0.35
teleport-distance: 16.0
standby-distance: 1.0
auto-attack-enable: true
track-range: 16.0
attack-range: 3.0
attack-speed: 20
attack-function: 'attack'
attack-animation-id: ''
attack-animation-speed: 0
shift-right-command-cooldown: 500
shift-right-command:
- '[console]tell %player_name% 你交互了宠物'
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:
- '[console]tell %player_name% 你触发了{id}'配置刷新机制
关闭背包时刷新槽位
玩家关闭背包时,如果宠物当前正在显示,插件会重新读取全局 plugin-slot 指定槽位中的物品:
- 槽位中不再匹配任何宠物时,当前宠物会被隐藏并删除实体。
- 槽位匹配到另一份宠物配置时,玩家缓存中的宠物配置会切换到新配置。
切换配置时,如果原宠物实体仍然存在,当前代码不会立即删除并重新创建实体。因此,实体名称、实体类型和首次模型绑定可能继续保留原宠物的显示效果;新的跟随、攻击和技能配置会写入缓存。需要完整刷新实体时,应先隐藏宠物,再重新召唤。
重载宠物文件
修改宠物 YAML 文件后,需要执行:
text
/lycw reload该指令仅允许 OP 执行。重载会:
- 重新读取
config.yml。 - 重新注册已启用的 DragonCore 或 GermPlugin 键位。
- 清空已加载的宠物配置。
- 递归扫描整个
pet/目录并读取.yml文件。 - 重新启动每秒执行的技能检测任务。
已经显示的宠物仍持有重载前的宠物配置对象,不会因 /lycw reload 自动重建。修改宠物文件并重载后,应让相关玩家隐藏并重新召唤宠物,使新配置完整生效。
玩家也可以通过以下指令执行与召唤按键相同的显示或隐藏操作:
text
/lycw common该指令必须由玩家执行。显示宠物时,如果 plugin-slot 指定槽位没有匹配到宠物,玩家会收到无法召唤的提示。