0.27.24 死亡扣级惩罚
默认死亡扣 1 级、热重载、经验与属性点规则及持久化验证。
日期:2026-09-06。版本:0.27.24-SNAPSHOT。
新增宠物死亡扣级规则,默认启用、每次扣 1 级、最低保留 1 级。旧服升级会补入缺失设置,因此升级后发生的宠物死亡默认会启用惩罚;不需要时请设置 enabled: false。
配置
位于 plugins/LiPet/config.yml,修改后执行 /lipet reload:
# 死亡扣级惩罚;实际掉级时清空当前级经验,并扣回对应升级属性点。
death-penalty:
# true 启用;false 保留原有死亡/复活冷却,但不扣等级、经验和属性点。
enabled: true
# 每次扣除等级,整数 0-10000;0 同样不扣等级、经验和点数。
levels-lost: 1
# 扣级下限,整数 1-10000;宠物低于此值时不扣,也不会自动升级。
minimum-level: 1
例:10 级宠物在默认配置下死亡变为 9 级;把 levels-lost 改为 2,则变为 8 级。1 级宠物不会降为 0 级。
经验和属性点
只有实际掉级时才会清空当前级经验。已处于最低等级、关闭惩罚或设置扣级数为 0 时,经验和属性点原样保留。
扣回点数 = 实际掉级数 × 该宠物类型的每级属性点。先扣未分配点数,不足部分按当前力量、体质、防御、敏捷的比例扣回,整数舍入采用最大余数法;余数相同按力量、体质、防御、敏捷顺序处理。不会扣成负数,也不会超过现有点数。
四维属性目前没有逐点来源记录,无法精确区分升级加点、捕捉初始值与食物增加值。因此比例扣回可能影响捕捉或食物增加的属性,不能理解为只撤回最近一次升级分配。这样处理可防止保留全部点数后反复死亡、升回原等级刷点;不重置技能书等级。
复活冷却仍取各宠物类型原有配置。再次召唤使用掉级后的档案,生命、攻击和等级模型按新等级正常解析;本轮实际验收了原版狼的复活等级和生命属性,未连接 ModelEngine 客户端验证模型外观。
保存与 Folia 边界
- 等级、经验、四维、未分配点数、死亡状态及冷却时间通过一次带 revision 校验的档案写入一起保存,不新增数据库字段。
- 死亡与经验、喂食、收回共用按主人串行的操作队列。保存前读取数据库权威档案,避免用旧等级覆盖已经完成的成长。
- revision 冲突最多重新读取并重试两次;每次从最新 ACTIVE 档案计算,已经 DEAD 的档案不重复扣级、不延长冷却。
- 成功保存后才移除活动索引并通知主人;提示通过主人 Entity Scheduler 发送。保存失败会保留错误日志并显示失败提示,不误报掉级成功。
- 死亡清理原有名牌;宠物不掉落原版物品,也不掉落原版经验。
- 原有
pet-died自定义文本保留,新增pet-death-penalty与pet-death-save-failed消息。前者支持<pet_name>、<levels>、<old_level>、<level>、<points>。
不承诺在数据库持续不可用或进程强制终止时自动补记所有死亡事件;本版没有额外的死亡事件恢复台账。也未解决 0.27.23 排查报告中所有背包并发与配置快照风险。
验证
默认兼容 API 与 Paper 26.2 API 各 377 项测试通过,失败、错误、跳过均为 0。新增测试覆盖默认扣级、按比例扣点、最低等级、关闭/零扣级、极值溢出、重复死亡、revision 冲突、SQLite 关闭重开后的数据保留。
Folia 26.2 Build 7、Java 25 隔离服,实际狼实体死亡结果:
| 场景 | 原等级/经验/未分配点 | 死亡后等级/经验/未分配点 |
|---|---|---|
| 默认扣 1 级 | 10 / 73 / 27 | 9 / 0 / 24 |
/lipet reload 改为扣 2 级 |
10 / 73 / 27 | 8 / 0 / 21 |
/lipet reload 关闭惩罚 |
10 / 73 / 27 | 10 / 73 / 27 |
/lipet reload 最低等级设为 10 |
10 / 73 / 27 | 10 / 73 / 27 |
每个场景额外提交两次相同实体死亡回调,结果没有重复扣级。完整停止并启动隔离服后,四份档案的等级、经验、点数和 DEAD 状态均保持;冷却结束后再次召唤 8 级狼,仍为 8 级、21 点,生命属性按 8 级刷新,随后正常收回。
探针使用合成服务器玩家和真实实体,未进行真人网络掉线、客户端文本/模型外观或 MySQL 群组服压测。本轮没有操作正式服、也没有关闭电脑。
升级
备份 plugins/LiPet/ 和数据库,在维护窗口停止 Minecraft 服务器,替换为 LiPet-0.27.24-SNAPSHOT.jar 并完整启动。代码更新不能只执行 /lipet reload;装入新版后配置修改才可热重载。
旧配置只补缺失节点和注释,保留已有管理员设置。成品 927719 字节,425 个 class 均为 LiPet 自身代码,Java 21 字节码,不包含探针或公共依赖。
SHA-256:FB2B0F5C1C3C104563C9E5BE172C17716C206546425F8E8D932912220757A9B9。