搜索

0.27.25 生命周期逐项排查

意外回血、死亡保存重试、末影人验证和剩余问题清单。

本轮优先闭环宠物生命值和死亡持久化。并未完成全部宠物、全部联动组合的验收;已确认的剩余风险在下面逐项列出。

已复现并修复

1. 受伤后重新载入、配置重载或成长刷新意外回血

旧版 0.27.24 在 Folia 26.2 隔离服召唤真实末影人,设置血量为 5,再调用实际的重新载入入口后,血量变成 20。原因是 PetEntityService.applyAttributes 在每次刷新时重新使用存档血量,覆盖实体刚受到的伤害。

0.27.25 区分首次召唤与运行中刷新:召唤仍恢复保存的血量,死亡冷却结束后的召唤仍恢复满血;配置重载、区块恢复、升级及加点只保留实时血量,并在生命上限下降时钳制。迟到的刷新或治疗不会把死亡实体复活。

喂食保存成功后只追加本次治疗和原有升级治疗,不回写保存前的血量快照。若期间又产生经验更新,使用最新活动档案刷新属性,本次治疗不会仅因 revision 已变化而被跳过。本轮实际调用治疗入口;未做真人客户端连续喂食验收。

2. 死亡保存失败后可能被收回成活宠

旧流程在死亡事件中忘记实体,数据库保存失败后仍保留 ACTIVE 档案;之后收回读取不到实体,会回退到缓存血量并保存为 STORED,可能绕过死亡冷却和扣级。

新版在忘记实体前保留待保存死亡事件、首次死亡时间、当时的扣级配置。待保存期间拒绝成长;召唤、收回、改名和删除先重试死亡保存。死亡与已经开始的收回写入竞争时,根据仍存在的死亡凭据把 STORED 纠正为 DEAD。普通死亡保存入口仍不能随意覆盖 STORED。

数据库确认后才清除待保存事件。周期维护、收回、召唤及关闭保存会重试;重复回调不延长最初冷却。删除已确认落盘时清理删除期间到达的死亡凭据。

限制:待保存事件目前在内存中,不是磁盘恢复台账。数据库持续故障且进程被强杀、崩溃或插件被热卸载时,尚未落盘的死亡仍可能丢失。此项没有解决崩溃后的恰好一次扣级。

3. 玩家退出保存失败没有统一日志

退出入口不再丢弃异常或 SAVE_FAILED 结果,会记录 ownerId 和失败原因,方便追查退出后宠物状态异常。普通收回失败的完整自动恢复策略仍需单独完善。

末影人“打死又出现一只”的结论

新版隔离服实际触发末影人死亡,注入一次死亡数据库保存失败,再通过收回重试:最终档案为 DEAD、等级从 2 降到 1,冷却使用首次死亡时间。观察死亡后 100 tick,监听到的 LiPet 末影人生成事件为 1 次、死亡事件为 1 次,未出现自动生成第二只。

这证明该原版末影人受控场景通过,不能据此认定用户服的重复实体已完全解决。还需对照原服日志、实体 UUID / LiPet pet_id、实际服务端构建和 MM 死亡技能,区分原版传送的同一实体、模型载体、第三方技能召唤和真正重复生成。

PlugManX 官方说明其 reload 会卸载并重新加载插件,见 官方命令说明。这与 /lipet reload 更新配置是不同操作。LiPet 当前存在异步存档与实体调度关闭边界,本轮没有进行 PlugManX 实机验收,不声明热卸载安全。插件更新应在维护窗口完整重启 Minecraft 服务器;本轮未操作正式服或关闭电脑。

逐项检查清单

顺序 问题 本轮结果与下一项验收
1 受伤后重载/重新载入回血 旧版实际复现,新版实机通过;升级保持实时血量
2 死亡保存失败被收回成活宠 注入一次数据库失败,新版收回重试保持 DEAD 和扣级;补磁盘恢复台账仍待做
3 末影人真实死亡后重复生成 原版受控场景未复现;原服 Shiroha、MM、MEG 与 PlugManX 组合未验收
4 宠物背包多人编辑/快速重新打开 P1:源码确认每次打开读取独立副本,关闭直接覆盖存储,缺少 petId 独占编辑会话;需要双编辑者、保存延迟、断线和跨服测试。建议处理顺序最高,暂勿让多人同时编辑同一宠物背包
5 GUI 物品被拿走 原有取消点击、拖拽和延迟操作保护仍在;与可存物品的宠物背包并发问题不同。数字键、双击、丢弃、创造模式需真人客户端验收
6 改配置不生效/重载混合状态 P2:普通配置分步更新,后续文件校验失败可能留下部分新配置;需要整体校验和原子发布。不要把本轮血量重载修复理解为全部重载问题解决
7 退出重进不认主/收回偶发失败 本轮补统一失败日志;Folia 真实网络断线、重进及保存失败恢复仍需专项验证
8 捕捉幼体、风弹喂食、捕捉无响应 历史修复未在本轮全部重新实测;捕捉保存与原实体清理仍缺持久化事务凭据,需卸载/重启/崩溃测试
9 经验批量结算、技能书、属性加点 本轮全量自动化回归及末影人升级通过;多人真实战斗、快速连点、跨区目标仍需持续负载验收
10 敏捷速度、飞禽加速、乐魂移动、骑乘朝向和名牌 历史代码保留,未用真人客户端及 ModelEngine 骑乘重新验收,不能标记全部通过
11 专属食物、喂食冷却、喂食经验与打怪收益 配置和历史回归保留;原服定制值不覆盖,需使用实际宠物配置比较收益并逐种验证
12 领地晴天但烈焰人受雨伤 未搭建原服 Residence 与 Shiroha 组合,不把历史代码修复当成本轮联动验收

验证证据与边界

  • 默认 Paper 1.21.11 API + Java 21 字节码:383 项测试通过,失败/错误/跳过均为 0。
  • Paper 26.2 API:383 项测试通过,失败/错误/跳过均为 0。
  • 新增 6 项回归覆盖实时血量保持、延迟治疗、死亡不复活、首次召唤恢复、重复待保存事件、数据库失败与收回竞争纠正。
  • 实机 Folia 26.2 Build 7 + Java 25;真实末影人、合成服务端玩家;未使用真人网络客户端。
  • 旧版日志 .tools/audit25-folia-baseline.log:断言记录 RESTORE_MUST_KEEP_DAMAGE actual=20.0。
  • 最终 Jar 日志 .tools/audit25-folia-final.log 在 17:39:56—17:40:03 验证真实重载、升级、死亡、注入保存失败、收回重试及没有自动重复生成。完整重启后 .tools/audit25-folia-restart.log 在 17:41:01 确认该档案仍为 DEAD、等级 1,没有自动召唤。探针与注入故障不打入交付 Jar。
  • 首次修复版探针以纳秒精度比较数据库毫秒时间而报错;改为毫秒比较后通过,未修改插件时间规则来迁就测试。
  • 日志中的 PROBE_INJECTED_DATABASE_FAILURE 是主动注入的预期告警;Windows OSHI/JNA 性能计数器告警不属于 LiPet 的实体线程异常。
  • 未完成 Shiroha、真实 MythicMobs/ModelEngine、MySQL 跨服、PlugManX 热卸载及持续高并发验收。

更新

成品:LiPet-0.27.25-SNAPSHOT.jar。本轮不新增配置,不覆盖自定义属性、食物、价格、GUI 或消息。

维护窗口先备份 plugins/LiPet/,正常停止 Minecraft 服务器,替换 Jar 后完整启动。/lipet reload 不会替换已经加载的 Java 代码。此处停止的是 Minecraft 服务器,不是关闭电脑。

产物校验:933100 字节,428 个业务 class,全部位于 cn/lipet/,Java 21 字节码,不包含探针或公共依赖。

SHA-256:F0C4864087916FC09BC1FBAF91E9DD588C017A322B0D7D7C44BDA142988B5B28。