0.27.16 捕捉幼体认主修复
固化捕捉幼体外观,区块恢复重新校正,并验证成年边界保留 UUID、PDC 和主人。
问题原因
LiPet 捕捉原版生物时会把是否成年保存到宠物外观;捕捉幼体写入的是 adult=false。旧版召唤时只调用 Ageable#setBaby(),没有调用年龄锁,因此实体仍会按原版计时自然长大,运行状态逐渐偏离数据库保存的幼体外观。区块重新载入时旧版也只恢复运行索引、属性和模型,没有再次套用年龄外观。
Paper 26.2 Build 111 的隔离服边界探针分别让狼、猫和马从幼体跨到成年。三种实体都保留原 UUID、PDC 标记、驯服状态和主人 UUID,说明原版成年边界本身不会清除主人;需要修复的是 LiPet 已保存幼体外观但未固化年龄的生命周期缺口。
修复内容
- 对保存为幼体的
Ageable实体调用setBaby()后启用setAgeLock(true),阻止自然成年。 - 保存为成年的实体调用
setAdult()后明确关闭年龄锁,防止旧状态冻结繁殖冷却等原版年龄计时。 - 活动宠物在区块重新载入或运行索引恢复时,重新按数据库外观应用年龄与锁龄。
- 捕捉数据、宠物 ID、主人 UUID和现有 PDC 格式均不改变,不需要数据库迁移。
- 只使用 Bukkit
Ageable标准接口,没有加入 Paper 独占年龄 API。
旧宠物处理
本版没有新增配置,不会覆盖 pet-types.yml、单宠文件、食物、模型、速度或商城设置。旧版已经自然长大的捕捉幼体仍在数据库保存为 adult=false;停服替换新 Jar 后,重新召唤或触发区块恢复便会校正为幼体并锁龄。无需删除宠物或数据库。
这是 Jar 代码修复,旧版 /lipet reload 无法加入年龄锁。请停服备份,移除旧 LiPet Jar,放入 LiPet-0.27.16-SNAPSHOT.jar 后完整启动。
验证
- 新增 3 项年龄外观测试:幼体应用后保持幼体并锁龄;成年应用后清除旧锁;捕捉继续保存当前幼体状态。
- 默认 Paper 1.21.11 兼容构建运行
333项测试,失败、错误和跳过均为0。 - Paper 26.2 API Profile 再运行
333项测试,失败、错误和跳过均为0。 - Paper 26.2 Build 111 原版成年边界探针验证狼、猫、马的 UUID、PDC、驯服状态和主人 UUID全部保留,测试服安全关闭且没有残留 Java 进程。
- 同一真实实体随后应用
0.27.16捕捉外观,狼、猫、马均恢复幼体、启用年龄锁且主人 UUID保持不变。 - 成品:
target/LiPet-0.27.16-SNAPSHOT.jar;大小:893452字节;SHA-256:CAA1C99C080F9B42D62442BE927E87D4F56876960318F9673974F30E0E4C36B4。Jar 共463个条目,未打入 SQLite、JUnit、Bukkit 或 Adventure 外部依赖类。 - 尚未进行真人网络客户端或 Folia/Shiroha 实服的 20 分钟自然成长体感验收。