Files
AuPet/README.md
2026-06-03 07:09:32 +08:00

509 lines
8.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AuPet 灵宠系统
AuPet 是一个面向 Minecraft Paper 1.21 系列服务端的灵宠插件。
插件围绕“宠物物品 + 玩家携带数据 + 宠物召唤实体 + GUI 管理”构建,适合用于服务器宠物养成、宠物技能展示、宠物出战和宠物经验成长玩法。
核心功能:
- 玩家通过 GUI 查看当前携带的灵宠、等级、经验、血量和资质
- 支持将手持宠物物品携带到玩家数据中
- 支持从玩家数据中取出宠物物品
- 支持召唤和召回宠物实体
- 支持 BetterModel 模型展示
- 支持 MythicMobs 技能触发
- 支持宠物喂养、经验增加和进化阶段控制
- 支持宠物改名
- 支持 MySQL 持久化玩家宠物数据
- 提供宠物召唤事件,方便其他插件监听
简单理解:
```yml
AuPet = 灵宠物品管理 + 宠物数据持久化 + 宠物 GUI + 宠物召唤 + 技能触发
玩家 = 携带、召唤、喂养、改名和培养宠物
管理员 = 配置宠物类型、模型、技能、等级经验和 GUI 展示
```
------
# 运行环境
## 服务端版本
```yml
Minecraft: 1.21.x
推荐服务端: Paper
Java: 21
```
当前构建配置使用:
```yml
Paper API: 1.21.8-R0.1-SNAPSHOT
plugin.yml api-version: 1.21
```
## 前置依赖
插件代码依赖以下组件:
```yml
DemonAPI
CraftDataManager
NBTAPI
MythicMobs
BetterModel
```
服务器启动前应确认这些插件或依赖已正确安装,并且版本与构建配置兼容。
------
# 安装方式
## 第一步:构建插件
在项目根目录执行:
```bash
mvn -q -DskipTests package
```
构建成功后会生成:
```yml
target/AuPet-1.0-SNAPSHOT.jar
```
## 第二步:放入服务器
将插件 jar 放入服务器插件目录:
```yml
plugins/AuPet.jar
```
同时放入前置依赖插件。
## 第三步:启动服务器
首次启动后会生成插件配置目录。
控制台应能看到宠物系统参数、等级经验配置和宠物类型加载日志。
------
# 目录结构
## 插件默认资源
```yml
config.yml
lang.yml
plugin.yml
```
## 插件数据目录
宠物类型配置读取自:
```yml
plugins/AuPet/PetData/
```
玩家携带宠物数据保存到 MySQL 表:
```yml
aupets_data
```
表字段:
```yml
PLAYERNAME: 玩家名
PETSTACK: 序列化后的宠物 ItemStack
```
------
# 玩家命令
## 打开主界面
```yml
/apet
/apet open
```
玩家未携带宠物时会打开携带界面;已携带宠物时会打开宠物主界面。
## 携带或取出宠物
```yml
/apet carry
```
当玩家未携带宠物时:
- 需要手持带有 `petKey` NBT 的宠物物品
- 执行后会将手持宠物写入玩家数据
- 手持栏会被清空
当玩家已携带宠物时:
- 会收回已召唤宠物
- 刷新宠物物品数据
- 将宠物物品返还给玩家
如果玩家背包已满,剩余物品会掉落在玩家当前位置。
## 召唤或召回宠物
```yml
/apet call
```
当宠物未出战时会召唤宠物;当宠物已出战时会召回宠物。
召唤时会:
- 生成狼实体作为宠物基础实体
- 应用宠物血量、攻击、移动速度属性
- 加载 BetterModel 模型
- 触发配置的出生技能
- 触发 `PetCallEvent`
------
# 管理员命令
管理员命令需要:
```yml
admin.use
```
## 查看帮助
```yml
/apet
```
## 重载配置
```yml
/apet reload
```
重载内容:
- 语言文件
- 默认配置
- 等级经验配置
- 宠物模板
- GUI 物品配置
- 品质显示配置
- 宠物类型配置
## 给予宠物
```yml
/apet give 宠物Key 玩家名
```
示例:
```yml
/apet give cat Steve
```
插件会读取 `PetData` 中对应宠物配置,生成默认宠物物品并发放给目标玩家。
## 增加宠物经验
```yml
/apet addexp 经验 玩家名
```
给玩家当前携带的宠物增加经验。
## 增加手持宠物经验
```yml
/apet addexp 经验 玩家名 true
```
给目标玩家手持的宠物物品增加经验。
------
# 宠物配置
宠物配置文件位于:
```yml
plugins/AuPet/PetData/宠物Key.yml
```
示例:
```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秒"
```
字段说明:
```yml
PetName: 宠物显示名
MaxLevel: 宠物最大等级
ModelId: BetterModel 模型 ID
CustomIconModelId: 宠物物品 CustomModelData
AccessChannels: 获取渠道展示
SummonSkill: 召唤时触发的 MythicMobs 技能default 表示不触发
DeathSkill: 死亡技能预留字段
Skills: 宠物技能列表
```
------
# 技能触发器
当前代码支持:
```yml
onAttack: 玩家攻击实体时触发
onDamaged: 玩家受到伤害时触发
onSpawn: 宠物召唤后触发 SummonSkill
```
技能由 MythicMobs 执行。
技能冷却使用玩家 UUID 和技能名作为冷却键。
------
# 等级经验配置
默认配置节点:
```yml
NeedExpSettings:
1: 10000
2: 10000
3: 10000
30: -1
```
说明:
```yml
正数: 当前等级升到下一级所需经验
-1: 终止等级,不再继续升级
```
宠物还会受到进化阶段限制:
```yml
进化 1: 最高 20 级
进化 2: 最高 40 级
进化 3: 最高 60 级
进化 4: 最高 70 级
进化 5: 最高 75 级
```
------
# GUI 功能
## 主界面
主界面展示:
- 宠物物品
- 宠物技能
- 宠物资质
- 召唤或召回按钮
- 喂养入口
- 改名入口
## 携带界面
用于携带或取出宠物。
玩家可以通过点击背包中的宠物物品,将其写入当前携带数据。
## 喂养界面
支持放入带有以下 NBT 的道具:
```yml
petAppleExp: 增加经验
petAppleUp: 进化阶段要求等级
```
关闭界面时,如果喂养槽仍有物品,会自动返还玩家。
背包满时,剩余物会掉落到玩家当前位置。
------
# 数据保存机制
玩家数据以序列化 ItemStack 形式保存到 MySQL。
主要保存时机:
- 携带宠物
- 取出宠物
- 喂养加经验
- 宠物改名
- 玩家退出
- 插件关闭
注意:
```yml
当前数据库读写仍是同步模型。
在线人数较多或数据库延迟较高时,建议后续改造为异步加载和保存队列。
```
------
# API 与事件
## 宠物经验 API
其他代码可以调用:
```java
PetExpAPI.addExp(player, 1000);
```
也可以对手持宠物物品增加经验:
```java
PetNbt petNbt = PetExpAPI.addExp(playerName, itemStack, 1000);
```
## 宠物召唤事件
宠物召唤成功后会触发:
```java
PetCallEvent
```
可读取:
```java
event.getOwner();
event.getCutomName();
event.getEntityUuid();
```
------
# 构建验证
本地验证命令:
```bash
mvn -q test
mvn -q -DskipTests package
```
当前验证结果:
```yml
mvn test: 通过
mvn package: 通过
```
------
# 常见问题
## 插件启动时报缺少类
检查前置依赖是否安装:
```yml
DemonAPI
CraftDataManager
NBTAPI
MythicMobs
BetterModel
```
同时检查这些依赖的版本是否与构建配置兼容。
## 执行 /apet give 找不到宠物
检查:
```yml
plugins/AuPet/PetData/宠物Key.yml 是否存在
文件名是否与命令中的宠物Key一致
配置是否能被 YAML 正常读取
```
## 召唤宠物失败
检查:
```yml
BetterModel 中是否存在对应 ModelId
宠物血量是否大于 0
MythicMobs 技能名是否正确
```
## 宠物无法升级
检查:
```yml
NeedExpSettings 当前等级是否为 -1
宠物是否已达到 MaxLevel
宠物是否已达到当前进化阶段上限
```
## GUI 按钮显示异常
检查:
```yml
config.yml 中 GuiItemData 是否完整
lang.yml 中语言键是否完整
```
------
# 维护建议
- 发布前同步检查 `plugin.yml` 版本号。
- 修改宠物配置后执行 `/apet reload`
- 新增宠物前先在测试服验证 BetterModel 模型和 MythicMobs 技能。
- 不建议在高峰期进行大量玩家数据迁移。
- 后续优先补充数据库异步队列和 MockBukkit 测试。
- 每次更新后至少完成一次登录、携带宠物、打开 GUI、召唤宠物、喂养、退出保存的冒烟测试。