Skip to content

宠物配置

宠物配置文件放在插件目录的 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 的实体类型枚举名称

ididentityentity-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'

枚举名称需要正确填写,并区分大小写。类型不存在、为空或格式错误时,插件会:

  1. 在控制台输出实体类型错误。
  2. 输出对应异常信息。
  3. 将该宠物的实体类型回退为 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 时,插件会:

  1. 根据宠物之前的位置或主人朝向计算目标附近的偏移位置。
  2. 使用 standby-distance 控制偏移距离。
  3. 尝试从目标位置向下两格内寻找安全站立方块。
  4. 找到安全位置时传送到方块上方,未找到时使用计算出的目标位置。
  5. 清空已有路径点。

安全位置要求站立方块为实体方块,上方两格为空,并排除栅栏、墙、活板门、压力板和按钮等方块。

切换世界

宠物与主人不在同一世界时,插件会删除原宠物实体,并在主人所在位置重新创建实体,同时清空攻击目标和移动路径。

建议将 track-rangeteleport-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布尔值trueMythicMobs 技能原点是否使用玩家位置
cd-msg.on-cd字符串技能仍在冷却时发送的消息,空字符串表示不发送
cd-msg.over-cd字符串插件检测到冷却结束时发送的消息,空字符串表示不发送
command字符串列表空列表技能通过条件和冷却检查后执行的指令

eventcdcd-msg.on-cdcd-msg.over-cd 应当明确配置。冷却消息不需要显示时,请填写空字符串:

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

缺少 cd 会导致宠物文件读取失败。缺少冷却消息键可能在发送对应消息时产生异常。

技能触发事件

事件写法触发条件
LEFT宠物显示期间,主人左键空气或方块
RIGHT宠物显示期间,主人右键空气或方块
TIME#几率每秒检测一次,并按指定百分比几率尝试触发
DAMAGED#几率主人受到实体伤害时,按指定百分比几率尝试触发
ATTACK#几率主人对实体造成伤害时,按指定百分比几率尝试触发
SLOT-DRAGON#键位收到对应 DragonCore 按键事件时触发
SLOT-GERM#键位松开对应 GermPlugin 键位时触发

几率按 0100 填写。例如:

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-cdover-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: 1

animation-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

匹配流程如下:

  1. 将宠物的 show-name 替换 {player}
  2. 移除宠物显示名称中的颜色。
  3. 遍历 EntityModel.yml 的顶级节点。
  4. 读取每个节点的 entity 配置并移除颜色。
  5. 判断宠物最终显示名称是否包含该 entity 名称。
  6. 找到第一项匹配后,向宠物所在世界内的玩家发送模型绑定,并停止继续查找。

例如宠物名称配置为:

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 执行。重载会:

  1. 重新读取 config.yml
  2. 重新注册已启用的 DragonCore 或 GermPlugin 键位。
  3. 清空已加载的宠物配置。
  4. 递归扫描整个 pet/ 目录并读取 .yml 文件。
  5. 重新启动每秒执行的技能检测任务。

已经显示的宠物仍持有重载前的宠物配置对象,不会因 /lycw reload 自动重建。修改宠物文件并重载后,应让相关玩家隐藏并重新召唤宠物,使新配置完整生效。

玩家也可以通过以下指令执行与召唤按键相同的显示或隐藏操作:

text
/lycw common

该指令必须由玩家执行。显示宠物时,如果 plugin-slot 指定槽位没有匹配到宠物,玩家会收到无法召唤的提示。