2026-06-03 07:09:32 +08:00
2026-06-03 07:09:32 +08:00
2026-06-03 06:25:44 +08:00
2026-06-03 07:09:32 +08:00
2026-06-03 07:09:32 +08:00

AuPet 灵宠系统

AuPet 是一个面向 Minecraft Paper 1.21 系列服务端的灵宠插件。

插件围绕“宠物物品 + 玩家携带数据 + 宠物召唤实体 + GUI 管理”构建,适合用于服务器宠物养成、宠物技能展示、宠物出战和宠物经验成长玩法。

核心功能:

  • 玩家通过 GUI 查看当前携带的灵宠、等级、经验、血量和资质
  • 支持将手持宠物物品携带到玩家数据中
  • 支持从玩家数据中取出宠物物品
  • 支持召唤和召回宠物实体
  • 支持 BetterModel 模型展示
  • 支持 MythicMobs 技能触发
  • 支持宠物喂养、经验增加和进化阶段控制
  • 支持宠物改名
  • 支持 MySQL 持久化玩家宠物数据
  • 提供宠物召唤事件,方便其他插件监听

简单理解:

AuPet = 灵宠物品管理 + 宠物数据持久化 + 宠物 GUI + 宠物召唤 + 技能触发
玩家 = 携带、召唤、喂养、改名和培养宠物
管理员 = 配置宠物类型、模型、技能、等级经验和 GUI 展示

运行环境

服务端版本

Minecraft: 1.21.x
推荐服务端: Paper
Java: 21

当前构建配置使用:

Paper API: 1.21.8-R0.1-SNAPSHOT
plugin.yml api-version: 1.21

前置依赖

插件代码依赖以下组件:

DemonAPI
CraftDataManager
NBTAPI
MythicMobs
BetterModel

服务器启动前应确认这些插件或依赖已正确安装,并且版本与构建配置兼容。


安装方式

第一步:构建插件

在项目根目录执行:

mvn -q -DskipTests package

构建成功后会生成:

target/AuPet-1.0-SNAPSHOT.jar

第二步:放入服务器

将插件 jar 放入服务器插件目录:

plugins/AuPet.jar

同时放入前置依赖插件。

第三步:启动服务器

首次启动后会生成插件配置目录。

控制台应能看到宠物系统参数、等级经验配置和宠物类型加载日志。


目录结构

插件默认资源

config.yml
lang.yml
plugin.yml

插件数据目录

宠物类型配置读取自:

plugins/AuPet/PetData/

玩家携带宠物数据保存到 MySQL 表:

aupets_data

表字段:

PLAYERNAME: 玩家名
PETSTACK: 序列化后的宠物 ItemStack

玩家命令

打开主界面

/apet
/apet open

玩家未携带宠物时会打开携带界面;已携带宠物时会打开宠物主界面。

携带或取出宠物

/apet carry

当玩家未携带宠物时:

  • 需要手持带有 petKey NBT 的宠物物品
  • 执行后会将手持宠物写入玩家数据
  • 手持栏会被清空

当玩家已携带宠物时:

  • 会收回已召唤宠物
  • 刷新宠物物品数据
  • 将宠物物品返还给玩家

如果玩家背包已满,剩余物品会掉落在玩家当前位置。

召唤或召回宠物

/apet call

当宠物未出战时会召唤宠物;当宠物已出战时会召回宠物。

召唤时会:

  • 生成狼实体作为宠物基础实体
  • 应用宠物血量、攻击、移动速度属性
  • 加载 BetterModel 模型
  • 触发配置的出生技能
  • 触发 PetCallEvent

管理员命令

管理员命令需要:

admin.use

查看帮助

/apet

重载配置

/apet reload

重载内容:

  • 语言文件
  • 默认配置
  • 等级经验配置
  • 宠物模板
  • GUI 物品配置
  • 品质显示配置
  • 宠物类型配置

给予宠物

/apet give 宠物Key 玩家名

示例:

/apet give cat Steve

插件会读取 PetData 中对应宠物配置,生成默认宠物物品并发放给目标玩家。

增加宠物经验

/apet addexp 经验 玩家名

给玩家当前携带的宠物增加经验。

增加手持宠物经验

/apet addexp 经验 玩家名 true

给目标玩家手持的宠物物品增加经验。


宠物配置

宠物配置文件位于:

plugins/AuPet/PetData/宠物Key.yml

示例:

PetName: "§a森林灵宠"
MaxLevel: 30
ModelId: forest_pet
CustomIconModelId: 10001
AccessChannels:
  - "活动获取"
  - "商城购买"
SummonSkill: "pet_spawn_effect"
DeathSkill: "default"
Skills:
  bite:
    mmSkill: "pet_bite"
    needLevel: 1
    trigger: "onAttack"
    coolDown: 5000
    item:
      name: "&a撕咬"
      lore:
        - "&7触发条件: 攻击时"
        - "&7冷却: 5秒"

字段说明:

PetName: 宠物显示名
MaxLevel: 宠物最大等级
ModelId: BetterModel 模型 ID
CustomIconModelId: 宠物物品 CustomModelData
AccessChannels: 获取渠道展示
SummonSkill: 召唤时触发的 MythicMobs 技能default 表示不触发
DeathSkill: 死亡技能预留字段
Skills: 宠物技能列表

技能触发器

当前代码支持:

onAttack: 玩家攻击实体时触发
onDamaged: 玩家受到伤害时触发
onSpawn: 宠物召唤后触发 SummonSkill

技能由 MythicMobs 执行。

技能冷却使用玩家 UUID 和技能名作为冷却键。


等级经验配置

默认配置节点:

NeedExpSettings:
  1: 10000
  2: 10000
  3: 10000
  30: -1

说明:

正数: 当前等级升到下一级所需经验
-1: 终止等级,不再继续升级

宠物还会受到进化阶段限制:

进化 1: 最高 20 级
进化 2: 最高 40 级
进化 3: 最高 60 级
进化 4: 最高 70 级
进化 5: 最高 75 级

GUI 功能

主界面

主界面展示:

  • 宠物物品
  • 宠物技能
  • 宠物资质
  • 召唤或召回按钮
  • 喂养入口
  • 改名入口

携带界面

用于携带或取出宠物。

玩家可以通过点击背包中的宠物物品,将其写入当前携带数据。

喂养界面

支持放入带有以下 NBT 的道具:

petAppleExp: 增加经验
petAppleUp: 进化阶段要求等级

关闭界面时,如果喂养槽仍有物品,会自动返还玩家。

背包满时,剩余物会掉落到玩家当前位置。


数据保存机制

玩家数据以序列化 ItemStack 形式保存到 MySQL。

主要保存时机:

  • 携带宠物
  • 取出宠物
  • 喂养加经验
  • 宠物改名
  • 玩家退出
  • 插件关闭

注意:

当前数据库读写仍是同步模型。
在线人数较多或数据库延迟较高时,建议后续改造为异步加载和保存队列。

API 与事件

宠物经验 API

其他代码可以调用:

PetExpAPI.addExp(player, 1000);

也可以对手持宠物物品增加经验:

PetNbt petNbt = PetExpAPI.addExp(playerName, itemStack, 1000);

宠物召唤事件

宠物召唤成功后会触发:

PetCallEvent

可读取:

event.getOwner();
event.getCutomName();
event.getEntityUuid();

构建验证

本地验证命令:

mvn -q test
mvn -q -DskipTests package

当前验证结果:

mvn test: 通过
mvn package: 通过

常见问题

插件启动时报缺少类

检查前置依赖是否安装:

DemonAPI
CraftDataManager
NBTAPI
MythicMobs
BetterModel

同时检查这些依赖的版本是否与构建配置兼容。

执行 /apet give 找不到宠物

检查:

plugins/AuPet/PetData/宠物Key.yml 是否存在
文件名是否与命令中的宠物Key一致
配置是否能被 YAML 正常读取

召唤宠物失败

检查:

BetterModel 中是否存在对应 ModelId
宠物血量是否大于 0
MythicMobs 技能名是否正确

宠物无法升级

检查:

NeedExpSettings 当前等级是否为 -1
宠物是否已达到 MaxLevel
宠物是否已达到当前进化阶段上限

GUI 按钮显示异常

检查:

config.yml 中 GuiItemData 是否完整
lang.yml 中语言键是否完整

维护建议

  • 发布前同步检查 plugin.yml 版本号。
  • 修改宠物配置后执行 /apet reload
  • 新增宠物前先在测试服验证 BetterModel 模型和 MythicMobs 技能。
  • 不建议在高峰期进行大量玩家数据迁移。
  • 后续优先补充数据库异步队列和 MockBukkit 测试。
  • 每次更新后至少完成一次登录、携带宠物、打开 GUI、召唤宠物、喂养、退出保存的冒烟测试。
Description
No description provided
Readme 89 KiB
Languages
Java 100%