路径查找器

路径查找器

实体寻路性能优化器

性能

适用于 Minecraft 1.21.1(NeoForge)的实体 AI 与寻路优化。通过跳过冗余的寻路搜索、限制寻路爆发频率,以及降低远离所有玩家的生物的 AI 运算频率,减少服务器线程在生物 AI 上的 CPU 开销。

在单人游戏和局域网世界中,集成服务器与渲染器共享同一台机器,因此服务器端的优化也能减少帧时间波动。


功能说明

  1. 不可达目标缓存 — 当生物的 A* 搜索在预算耗尽后仍无进展时,对该目标的后续重试将在 10 秒内被跳过。该缓存按生物分别记录,并且一旦目标所在区块的方块发生变化,相关条目会立即失效,因此开门或放置桥梁等操作会立刻生效
  2. 寻路节流 — 每个服务器 tick 最多启动 4 次寻路计算(可配置),这能平缓诸如村民清晨集体寻路等造成的计算高峰
  3. 搜索深度限制 — A* 搜索最多访问 400 个节点;失败的搜索才是 CPU 消耗的大头(通常访问 800+ 节点),而成功的村庄级路径很少会超过 300 个节点
  4. 重新计算冷却 — 一次寻路失败后,生物会等待 60 tick 再重试,而非原版的 20 tick
  5. 降低远处路径重算频率 — 距离所有玩家 48 格以上的生物,其进行中的路径最多每 60 tick 刷新一次
  6. 降低远处 AI 运算频率 — 距离所有玩家 48 格以上的生物,其 AI 决策每 4 个 tick 运行一次,并在生物间交错进行:包括动物和怪物的目标及攻击目标选择器,以及空闲或休息状态的村民类生物的脑部逻辑。导航、感知和移动控制仍每 tick 运行,确保生物能沿路径平滑移动

适用于所有情况的通用安全规则:

  • 玩家 48 格范围内的生物行为与原版完全一致
  • 紧急状态下的生物 — 例如拥有攻击目标,或在过去 10 秒内受到伤害 — 将绕过所有优化,获得全频率、全预算的原版寻路能力
  • 处于水中或岩浆中的生物绝不会被 AI 限速,确保它们能继续游泳而不会溺水
  • 任何执行非空闲/休息状态任务(如工作、恐慌或模组自定义活动)的脑部逻辑都会以全频率运行
  • 不缓存或复用任何原版对象 — 本模组仅记录“此目标无路可走”的时间戳,因此绝不会向生物提供过期的导航状态

 

兼容性

  • Lithium 优化的是不同层面(它使每次 A* 节点评估更高效;而本模组(Pathfinder)则减少 A* 的搜索频率和深度)。两者可以同时使用。
  • 目标选择器钩子使用 MixinExtras @WrapOperation 实现,因此其他模组对相同调用的包装可以无缝链接,而不会产生冲突。
  • 本模组(Pathfinder)注入到 PathNavigation.createPath、 PathNavigation.recomputePath、 Brain.tick、 Mob.serverAiStep 以及 Level.setBlock 方法中。

致谢

本模组的灵感主要来自 Pathwright,这是近期为 Minecraft 26.1.2 模组开发的一款寻路优化模组。