0.30.1 AI 深度优化与验证
寻路采样去重、动态障碍复核、索敌节流、前后对照及逐物种回归。
修改内容
- 有界局部寻路使用单次搜索地形快照:同一方块只取样一次,区块加载/区域所有权在该搜索内复用。快照不跨 tick、不跨实体共享,不缓存 Bukkit 方块/区块对象。单次最多采样 32,768 个方块;原有 900 个节点、水平 24 格和垂直 12 格搜索边界保留。
- 受控路线执行前重新校验下一路点。新增障碍、挖空落脚点、危险方块变化会中止旧速度,后续重新寻路;不会为了缓存效率长期忽略地形变化。粉雪、甜浆果丛、凋零玫瑰加入危险方块。
- 移动目标导致的重算最短间隔为 6 tick;无路时不因每次目标抖动而立即重新搜索,普通刷新间隔仍为 20 tick。跳跃途中保留已验证的地面路点。
- 目标跨世界、坐标非有限数值或宠物已被传送远离路线时,安全终止/丢弃旧缓存,避免跨世界距离计算异常和追逐旧世界位置。
- 主动索敌先筛原生状态及主人/宠物距离,再对近到远候选检查宠物归属、保护规则和视线。最近目标不可攻击时继续查后续候选;区域所有权始终先于实体状态读取。
- 战斗进入攻击距离时停止原生路径一次,持续驻留不再每两 tick 重复停路;重新追击后可以再次停车。去除同轮多余目标指派。
- 飞行/水生宠物停止受控追击时同时清除垂直残留速度;地面生物保留重力下落。蓄力表现更新为每 4 tick,战斗判定仍是原有频率,蓄力时长和伤害间隔不变。
- 新增场景查出了嘎枝战斗后跟随被原版 Brain 抢占、熊猫特殊姿态阻碍战斗/跟随的问题。两类改用受控目标与路径;熊猫恢复行动时清理翻滚、仰躺、进食、喷嚏等临时姿态,不改基因和外观。嘎枝已休眠时不重复触发停用声音/游戏事件。
- 末影人在白天会由原版逃光流程自行瞬移,出现刚被召回又跑远的情况;改为受控感知和导航,阻止该原生逃光逻辑抢占宠物行为。仍保留插件的正常安全召回与技能传送,没有全局取消传送事件,也不影响野生末影人。
本次新增实现仍使用标准 Bukkit 方块、实体和位置接口,复用已有的可选 Folia 区域保护桥。没有引入 NMS 或额外打包依赖,没有修改价格、宠物币、食物、外观、等级、MM 技能或管理员配置。
可复现的寻路采样对照
同一测试程序、地形、起点、终点,分别加载 0.30.0 与 0.30.1 的实际 Jar,统计 World#getBlockAt 次数。
| 场景 | 0.30.0 读块次数 | 0.30.1 读块次数 | 降幅 | 两版路径点数 |
|---|---|---|---|---|
| 小体型绕墙 | 1,731 | 573 | 66.9% | 23 / 23 |
| 略宽于一格的生物绕墙 | 18,572 | 1,226 | 93.4% | 25 / 25 |
| 宽 3、高 6 的大体型绕墙 | 157,868 | 3,985 | 97.5% | 27 / 27 |
| 终点被连续墙隔断 | 7,249 | 2,049 | 71.7% | 4 / 4(部分路径) |
这是特定用例的取样次数对照,不是实际整服 CPU、TPS 或多人压测提升比例。独立新搜索和路点执行检查仍读取最新地形,不能将该缓存理解为永久方块缓存。
复现程序:.tools/ai-deep/PathReadProbe.java;数据:baseline-path-reads.csv、optimized-path-reads.csv。
单元测试
兼容下限 1.21.11 API 和 Paper 26.2 API 分别通过 566 项测试,0 失败、0 错误。新增覆盖单次读块去重、独立搜索刷新、未加载区块拒读、动态封路及恢复、挖空/危险落脚、移动目标重算限频、跨世界旧路线、危险植物、权限查询排序、攻击距离停车频率、垂直速度清理、蓄力表现节流、嘎枝重复停用抑制和熊猫临时姿态恢复。
服务端回归
三批发布测试及僵尸村民追加测试使用同一个 Jar,SHA-256:
5322C8868D065C690E10C571970D1085E8CD6A745D5523C2F5D9B6D0ED2366A6
- Paper 26.2 的 91 种全部执行完毕:首轮 909/910 项通过,90 种为 10/10。僵尸村民首次“连续行走跟随”未通过:最近已到主人 0.584 格,但统计行走距离为 0,不符合本测试的步行判据;不能仅因已接近主人就把这一项改成通过。
- 僵尸村民随后单独重复 7/7 轮、70/70 项通过,再按“僵尸鹦鹉螺 → 僵尸村民”的相邻顺序重复 7 轮,两种合计 14/14 次、140/140 项通过。僵尸村民追加共 14 次均正常;首轮现象尚未稳定复现,保留原始失败行,不宣称偶发问题已完全定位/修复。
- 嘎枝、末影人、熊猫各重复 7 轮,合计 21/21 轮、210/210 项通过。熊猫分别覆盖 WORRIED、WEAK、LAZY、BROWN、NORMAL、PLAYFUL、AGGRESSIVE 七种基因。末影人日志仅有正常安全召回,没有复现修复前的逃光乱传送。
- Folia 26.2 最终 Jar 针对嘎枝、末影人、末影龙、熊猫、潜影贝复测,5/5 种、50/50 项通过。此前候选包 11 种通过的记录仅作过程证据,不冒充最终包全物种 Folia 验证。
每只检查原有九项:连续跟随、主动索敌、隔墙绕障、坐下停战、远距召回、移动助战、主人保护、旁观保护、地形保护;再增加第十项“跟随过程中放墙,拆墙后恢复”。新阶段在开始后第 10 tick 放墙、第 100 tick 拆墙,至 300 tick 检查实际移动及到达距离。Paper 目标 tick rate 200,Folia 使用正常 20 TPS;均不是生产多人负载压测。
本轮查错过程
初版全量测试暴露嘎枝动态跟随、熊猫战斗/跟随和末影人召回问题。补齐嘎枝/熊猫接管后,三类重复测试仍复现末影人原生逃光随机传送,日志显示从测试平台传到低处,再被召回后继续随机传走;补齐末影人感知接管后,最终重点 21 轮全部通过。临时调试探针有过一次字段名写错而中止的运行,该运行不计入结果,探针从未放进产品或正式服。
原始记录位于 .tools/ai-matrix/:
release-deep-paper-results.csv、release-deep-focus-results.csv、release-deep-folia-results.csv、release-zombie-villager-retest-results.csv、release-neighbor-retest-results.csv,对应 *-console.log。失败和通过记录均保留。
Paper 首轮逐物种明细
| 类型 | 首轮通过 | 有效命中 | 投射物 |
|---|---|---|---|
| ALLAY | 10/10 | 32 | 0 |
| ARMADILLO | 10/10 | 29 | 0 |
| AXOLOTL | 10/10 | 31 | 0 |
| BAT | 10/10 | 32 | 0 |
| BEE | 10/10 | 32 | 0 |
| BLAZE | 10/10 | 14 | 15 |
| BOGGED | 10/10 | 17 | 17 |
| BREEZE | 10/10 | 15 | 16 |
| CAMEL | 10/10 | 27 | 0 |
| CAMEL_HUSK | 10/10 | 26 | 0 |
| CAT | 10/10 | 28 | 0 |
| CAVE_SPIDER | 10/10 | 29 | 0 |
| CHICKEN | 10/10 | 28 | 0 |
| COD | 10/10 | 32 | 0 |
| COPPER_GOLEM | 10/10 | 29 | 0 |
| COW | 10/10 | 28 | 0 |
| CREAKING | 10/10 | 29 | 0 |
| CREEPER | 10/10 | 11 | 0 |
| DOLPHIN | 10/10 | 31 | 0 |
| DONKEY | 10/10 | 26 | 0 |
| DROWNED | 10/10 | 17 | 17 |
| ELDER_GUARDIAN | 10/10 | 12 | 0 |
| ENDERMAN | 10/10 | 29 | 0 |
| ENDERMITE | 10/10 | 28 | 0 |
| ENDER_DRAGON | 10/10 | 12 | 12 |
| EVOKER | 10/10 | 12 | 0 |
| FOX | 10/10 | 28 | 0 |
| FROG | 10/10 | 21 | 0 |
| GHAST | 10/10 | 12 | 12 |
| GIANT | 10/10 | 29 | 0 |
| GLOW_SQUID | 10/10 | 30 | 0 |
| GOAT | 10/10 | 16 | 0 |
| GUARDIAN | 10/10 | 12 | 0 |
| HAPPY_GHAST | 10/10 | 31 | 0 |
| HOGLIN | 10/10 | 29 | 0 |
| HORSE | 10/10 | 26 | 0 |
| HUSK | 10/10 | 28 | 0 |
| ILLUSIONER | 10/10 | 17 | 17 |
| IRON_GOLEM | 10/10 | 26 | 0 |
| LLAMA | 10/10 | 17 | 20 |
| MAGMA_CUBE | 10/10 | 24 | 0 |
| MANNEQUIN | 10/10 | 29 | 0 |
| MOOSHROOM | 10/10 | 28 | 0 |
| MULE | 10/10 | 26 | 0 |
| NAUTILUS | 10/10 | 31 | 0 |
| OCELOT | 10/10 | 28 | 0 |
| PANDA | 10/10 | 29 | 0 |
| PARCHED | 10/10 | 17 | 17 |
| PARROT | 10/10 | 32 | 0 |
| PHANTOM | 10/10 | 31 | 0 |
| PIG | 10/10 | 28 | 0 |
| PIGLIN | 10/10 | 29 | 0 |
| PIGLIN_BRUTE | 10/10 | 29 | 0 |
| PILLAGER | 10/10 | 12 | 12 |
| POLAR_BEAR | 10/10 | 26 | 0 |
| PUFFERFISH | 10/10 | 30 | 0 |
| RABBIT | 10/10 | 29 | 0 |
| RAVAGER | 10/10 | 23 | 0 |
| SALMON | 10/10 | 31 | 0 |
| SHEEP | 10/10 | 28 | 0 |
| SHULKER | 10/10 | 11 | 15 |
| SILVERFISH | 10/10 | 28 | 0 |
| SKELETON | 10/10 | 17 | 17 |
| SKELETON_HORSE | 10/10 | 26 | 0 |
| SLIME | 10/10 | 24 | 0 |
| SNIFFER | 10/10 | 30 | 0 |
| SNOW_GOLEM | 10/10 | 24 | 25 |
| SPIDER | 10/10 | 25 | 0 |
| SQUID | 10/10 | 30 | 0 |
| STRAY | 10/10 | 17 | 17 |
| STRIDER | 10/10 | 16 | 0 |
| SULFUR_CUBE | 10/10 | 24 | 0 |
| TADPOLE | 10/10 | 32 | 0 |
| TRADER_LLAMA | 10/10 | 17 | 20 |
| TROPICAL_FISH | 10/10 | 32 | 0 |
| TURTLE | 10/10 | 29 | 0 |
| VEX | 10/10 | 32 | 0 |
| VILLAGER | 10/10 | 29 | 0 |
| VINDICATOR | 10/10 | 28 | 0 |
| WANDERING_TRADER | 10/10 | 29 | 0 |
| WARDEN | 10/10 | 28 | 0 |
| WITCH | 10/10 | 14 | 15 |
| WITHER | 10/10 | 15 | 16 |
| WITHER_SKELETON | 10/10 | 28 | 0 |
| WOLF | 10/10 | 28 | 0 |
| ZOGLIN | 10/10 | 29 | 0 |
| ZOMBIE | 10/10 | 33 | 0 |
| ZOMBIE_HORSE | 10/10 | 26 | 0 |
| ZOMBIE_NAUTILUS | 10/10 | 31 | 0 |
| ZOMBIE_VILLAGER | 9/10 | 33 | 0 |
| ZOMBIFIED_PIGLIN | 10/10 | 30 | 0 |
Folia 最终包专项明细
| 类型 | 通过 |
|---|---|
| CREAKING | 10/10 |
| ENDERMAN | 10/10 |
| ENDER_DRAGON | 10/10 |
| PANDA | 10/10 |
| SHULKER | 10/10 |
更新方式与验收边界
使用正常停服后的替换流程,保留旧 Jar 和整个 LiPet 数据目录备份;本次不需要删除或重置任何配置。正式服正常启动后核对 Enabling LiPet v0.30.1-SNAPSHOT,不能用 /lipet reload 代替 Java 代码更新。
隔离服测试是实际服务器实体与服务端代理玩家驱动的自动验证,不等于真实客户端动画、第一人称骑乘、任意地形、全部 MM/ModelEngine 变种或生产多人负载验收。0.30.0 的 逐物种基础报告 保留为历史记录,不用其结果冒充本版复测。