0.29.10 停服保存与残留攻击保护
停服独立保存、无会话攻击隔离、间接来源与嘎枝 Brain 主人仇恨清理。
修复背景
0.29.9 已修正缺失活动会话时的归属误报和加载清理,但进一步审计发现:正常停服的保存回调仍等待实体下一 tick,导致等待超时;缺失会话的带标记宠物也会失去原有主人伤害保护。嘎枝的攻击目标来自 Brain,普通清目标方法并未清除其主人仇恨。
本次修复
- 停服改为独立的保存流程:关闭新操作入口,保存可信档案和待处理死亡状态,不等待已经无法推进的实体 tick。在线配置重载及普通召回仍使用原流程。
- 保存遵守档案 revision,避免以旧活动快照覆盖已经落盘的成长或死亡;无法完成保存时明确报告,不再无条件打印“已安全关闭”。
- 只有当前线程拥有实体时才进行实体清理,不在 Folia 其他区域强行读写实体。停服时先将本体和自有名牌标记为不写入世界存档,再尝试移除,避免 Folia 区域已停止 tick 后底层移除失败仍保存残留;不修改玩家或其他插件乘客的持久性,不改变平时区块卸载行为。
- 无法取得所属区域或标记失败时明确告警,并保留加载对账兜底,不把无法访问的实体宣称为已清理。
- 已标记但没有有效活动会话的宠物处于攻击隔离状态:拦截目标事件并禁止造成伤害。包括召唤尚未完成、重启残留和失效会话窗口,不根据点击者或名字认领宠物。
- 活动宠物继续禁止伤害主人;正常战斗权限不因本次修复改变。间接攻击使用可在 Folia 下安全读取的来源信息,野生生物不按名称误判为宠物。
- 嘎枝清除主人仇恨、停止战斗和恢复跟随时使用原生解除激活接口,真正清除 Brain 的攻击目标。
更新方式
维护前备份数据库、配置和旧 Jar,并召回宠物。正常停止 Minecraft 服务端,替换为 LiPet-0.29.10-SNAPSHOT.jar,保留原数据目录。启动检查 Enabling LiPet v0.29.10-SNAPSHOT。
不要用 PlugManX 热卸载;/lipet reload 无法替换已加载的 Java 代码。不需要关闭电脑。本次交付不自动重启正式服,也不覆盖管理员已有配置。
客户的视频来自旧版本。本版验收以隔离服务端的保存、重启和伤害结果为依据,不把服务端探针当作客户现场或真人客户端验收。
第三方脚本如果完全不提供造成者实体,无法仅靠 Bukkit 伤害来源可靠反推宠物归属;本版不宣称覆盖所有无来源脚本伤害。
验证结果
- 默认 API 与 Paper 26.2 API 构建各通过 498 项测试,无失败、错误或跳过。
- 隔离 Paper 26.2 和 Folia 26.2,实际创建并召唤嘎枝后正常停服:数据库为 STORED、主人 UUID 不变。直接离线检查世界 MCA 有效实体区块,本次宠物及名牌匹配数均为 0。
- 两端再次启动后,读取原始档案仍为 STORED,旧实体数为 0,可以召唤新的实体;第二次停止后再次通过离线检查。LiPet 关闭流程在日志秒级精度内耗时 0 秒,不再出现原来的 20 秒调度等待。
- 嘎枝主人目标真正清空;正常活动、等待注册、失效会话以及箭矢间接攻击场景均保护主人。模拟其他监听器重新放行伤害后,最终拦截仍有效;敌方与野生生物伤害正常。
- Folia 关闭阶段若底层移除因区域上下文已停止而失败,仍记录警告;本次实际测试已确认,先设置的停服不持久化标记使本体和名牌不会再写入世界。这不代表把运行期移除失败隐藏成成功。