搜索

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 分钟自然成长体感验收。