0.27.11 原版食物与成长持久化
全量原版宠物专属食物、战斗经验批量结算、revision 对账与重启持久化。
修复内容
原版宠物食物
- 全部默认可捕捉原版生物均有独立食物。烈焰人默认使用
BLAZE_POWDER(烈焰粉),狼使用骨头,猫使用鳕鱼,史莱姆使用黏液球,岩浆怪使用岩浆膏。 - 新安装生成的每个原版宠物 YML 都包含完整中文注释、开关、显示名、经验、治疗量、属性点和等级范围。
- 原版物种使用的不是熟牛肉时,会在该宠物文件内把继承的
COOKED_BEEF设为enabled: false,避免所有生物继续吃同一种公共食物。 - 升级旧服只扫描 LiPet 官方原版宠物 ID,且仅在文件完全缺少
growth.foods时补全。只要管理员已写过该节点,原食物、数值、注释都会保留;自定义宠物文件不修改。
烈焰人生成示例:
types:
vanilla_blaze:
growth:
foods:
COOKED_BEEF:
enabled: false
BLAZE_POWDER:
enabled: true
display-name: "烈焰粉"
experience: 20
healing: 6.0
attribute-points: 0
minimum-level: 1
maximum-level: 0
等级、经验与重启持久化
- 同一只宠物正在写数据库时,后续战斗经验会进入下一批合并保存,不再为每次击杀单独提交一次完整宠物记录。
- 不同玩家的宠物仍可分别提交批次;每个玩家原有的召唤、回收、成长、加点和技能操作顺序保持不变。
- 后续的回收或关服保存必须等前面的经验批次完成,因此不会用旧活动会话覆盖刚获得的等级。
- 数据库 revision 冲突时最多重读最新记录并重试两次,不会直接把一批经验静默丢弃。
- 活动宠物按主人、宠物 ID 和实体 ID 建立的三份索引改为同一临界区校验及更新,避免只更新一部分索引。
- 战斗经验保存失败时记录宠物 ID,并向在线主人发送
messages.yml -> pet-combat-experience-save-failed;服主可修改文字,但不建议留空,以免再次表现成只有宠物币到账。
经验消息按实际已合并的总数发送一次;一次批次跨越多级时,升级宠物币也按本批实际升级数一次结算。
配置与升级
- 停服并备份
plugins/LiPet/与数据库。 - 替换为
LiPet-0.27.11-SNAPSHOT.jar后完整启动服务器。 - 检查控制台“为多少个原版宠物文件补全食物”的日志。
- 打开
plugins/LiPet/宠物/原版宠物/烈焰人.yml,确认BLAZE_POWDER已生成;若该文件原来已有growth.foods,插件会保留原配置,不会强改。 - 执行
/lipet status,再用测试宠物刷经验并正常停服、启动,核对等级和经验。
/lipet reload 可以重读已经存在的食物配置,但旧 Jar 没有新迁移与经验批处理代码;升级必须替换 Jar 并完整重启一次。
验证
- 默认兼容构建与 Paper 26.2 Profile 各执行 321 项自动测试,失败、错误和跳过均为 0。
- 测试覆盖两名玩家各自连续提交 50 次战斗经验,所有经验在对应的回收/关服保存屏障前完成,写入次数从逐击写入合并为每只宠物两批。
- 使用真实临时 SQLite 保存 8 级、73 经验、
STORED状态和 revision 3,关闭仓库后重新打开数据库,读取结果完全一致。 - 食物目录测试检查每一种默认可捕捉原版生物都有当前 Paper API 可解析的 Material,并单独断言烈焰人为
BLAZE_POWDER;迁移测试确认已有食物及自定义宠物不覆盖。 - 同一最终 Jar 已在 Paper 26.1.2 Build 70 与 Paper 26.2 Build 111 启动;两服
/lipet status均显示 0.27.11 和 SQLite,/lipet reload成功,随后安全关闭。Paper 26.2 的旧服副本实际补全 77 个原版文件;Paper 26.1.2 的另一旧服副本补全 86 个。 - Paper 26.2 实测迁移后的烈焰人配置包含完整中文注释、关闭的熟牛肉和启用的烈焰粉;已有自定义食物的狼文件 SHA-256 迁移前后均为
D464945AC940D687ED93012C1F7AF0E3B424C0F150C7C08709D7ACEF1DC259C3。 - 最终成品:
LiPet-0.27.11-SNAPSHOT.jar;大小:887726字节;SHA-256:D05BEEBA8E56E3510143B162FA2F3666EFF3529F98C0DBDF7F3C6EE2629DF95B。主类字节码版本为 65(Java 21),Jar 未包含 SQLite、JUnit、Bukkit、Adventure 等外部依赖类。 - 当前环境没有真人客户端,实际双人刷怪消息节奏、Folia 与 MySQL 实服仍需目标服务器验收;并发顺序、批次写入和 SQLite 重启持久化已由确定性测试覆盖。