
Pathwright
通过改变路径权值计算方式来优化Minecraft。减少卡顿。提升FPS。提升MSPT。
Pathwright
适用于 Minecraft 26.1.2 的生物寻路优化。
Pathwright 针对的是 Minecraft 服务器循环中最耗时的热路径之一:生物寻路。每个想要移动的生物都必须计算一条路径——而在原版游戏中,每一次这样的计算都发生在主服务器线程上,一个接一个地进行。Pathwright 用一个三层优化系统取代了它。每一层都可以独立开关,因此你可以在一行配置中禁用任何与其他模组冲突的功能。
概要
Pathwright 模组通过更智能地计算路径来加快生物寻路速度。Pathwright 不会在主线程上每 tick 都重新计算每个生物的路径,而是缓存已经计算过的路径,将路径更新卸载到后台线程,并减慢距离任何玩家较远的生物的路径重新计算速度。这能保持你的 TPS 更高,服务器循环更短。该模组在拥有大量生物的服务器(生物农场、繁殖场、大型群体 AI)上尤其有用,但在单人游戏和本地托管的世界(服务器和客户端共享同一 CPU)中也有明显改善。
性能提升
TPS(服务器每秒刻数)
Pathwright 的优化完全在服务器端进行。TPS 的提升取决于加载并正在主动寻路的生物数量:
预估 TPS 提升:
- 在正常生物数量的典型生存世界中:+1 – 3 TPS
- 在生物农场、繁殖场或拥有 100 个以上主动寻路生物的服务器上:+3 – 8 TPS
- 距离玩家越远的生物越多,提升越大(LOD 系统生效)
FPS(客户端每秒帧数)
注意! 仅当服务器/世界与客户端在同一台电脑上运行时,才能看到 FPS 的提升——例如在你的电脑上本地为你和朋友们托管服务器,或进行单人游戏时。当该模组放在外部托管服务器上时,你会体验到服务器运行更流畅,而不是你的客户端获得更高的 FPS。
当服务器和客户端共享同一 CPU 时:
1. 更少的服务器卡顿峰值 → 更平滑的动画插值 当服务器错过一个 tick(低于 20 TPS)时,客户端会错误地插值实体位置。橡皮筋效应和卡顿现象可追溯至服务器延迟。Pathwright 能使服务器更稳定地保持 20 TPS,即使你的 GPU FPS 没有变化,客户端也会体验到明显的更平滑移动。
2. 单人游戏 / 集成服务器 在服务器 tick 中节省的每一毫秒都是返还给渲染线程的一毫秒。在拥有生物的典型生存世界中:
- 异步寻路将路径计算完全移出主线程
- LOD 限制消除了你甚至看不见的生物的冗余计算
预估单人 FPS 提升:在 60 FPS 基准下 +2 – 8 FPS;在生物密集的世界、生物农场或村民繁殖场中提升更高。
每种优化的运作方式
异步寻路
在原版游戏中,当生物需要新路径时——比如僵尸追你,村民回家——整个路径计算都在主服务器线程上运行。这会阻塞其他所有事情,直到计算完成。在一个有几十个生物同时尝试重新计算路径的世界中,这会迅速累积起来。
Pathwright 将路径更新卸载到一个小的后台线程池中。当生物已有有效路径且需要重新计算时(例如,你移动了,它需要重新规划路线),计算会发生在主线程之外,结果会在下一个 tick 应用。新路径——当生物根本没有路径且需要开始移动时——仍然是同步计算的,因此生物会立即开始移动,没有任何延迟。
战斗中的生物总是获得同步寻路。异步仅用于常规移动更新。
路径结果缓存
同一区域的许多生物经常走相同的路线——例如,村民在同一个工作站和床之间行走。Pathwright 缓存已完成路径计算的结果。如果另一个生物需要在相同的世界状态下从相同位置前往相同目的地,它会重用已计算的路径,而不是从头开始重新计算。
当方块发生变化时(门打开、墙壁放置),缓存会自动失效,因此缓存的路径永远不会过时。通往移动目标(如玩家或其他生物)的路径永远不会被缓存——反正这些路径每 tick 都在变化。
寻路 LOD(细节级别)
靠近玩家时,生物需要准确且频繁更新的寻路。远离玩家时,生物每 tick 还是每 15 tick 更新一次路径真的无关紧要——你无法看出区别。Pathwright 应用了这一见解:距离任何玩家超过 48 格块的生物每 15 tick 才重新计算一次路径,而不是每 tick。
战斗中的生物、最近受到伤害的生物以及没有有效路径的生物无论距离多远都不会受到限制。LOD 仅影响已经在移动的生物的常规移动更新。
配置
config/pathwright.json — 首次启动时自动创建,包含安全的默认值:
{
"enablePathCaching": true,
"pathCacheSize": 1024,
"pathCacheExpiryTicks": 200,
"enableLOD": true,
"lodDistance": 48.0,
"lodTickInterval": 15,
"enableAsync": true,
"asyncThreadCount": 2
}
所有三个模块都可以独立开关。asyncThreadCount 默认为 2——增加此值有助于拥有大量生物的服务器,但不要将其设置得高于你的 CPU 核心数减 1。
常见问题解答——只是我自己回答自己的问题,哈哈
这会改变我的生物农场的工作方式吗? 不。生物行为、攻击 AI、繁殖以及所有游戏逻辑均未触及。Pathwright 仅改变路径计算的速度,不影响生物决定做什么。
村民繁殖场还能用吗? 是的。村民需要到达他们的床和工作站才能繁殖。Pathwright 确保没有有效路径的生物始终能立即获得路径,因此它们永远不会因等待而卡住。
走向我的生物会感觉不一样吗? 不会。以玩家或实体为目标的生物始终获得同步、无缓存、全速寻路。LOD 和异步仅适用于常规移动——而非战斗。
这会损坏我的世界吗? 不会。Pathwright 从不写入方块数据或修改世界状态。它只改变路径的计算方式和时间。
如果它与其他模组冲突怎么办?
很可能不会产生冲突,但万一冲突:在 pathwright.json 中禁用导致冲突的模块。所有三个系统都是独立的——你可以只运行缓存、只运行 LOD、只运行异步,或任意组合。
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。