509 lines
8.1 KiB
Markdown
509 lines
8.1 KiB
Markdown
# 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、召唤宠物、喂养、退出保存的冒烟测试。
|