
兔子寻路修复(非官方Forge移植版)
修复兔子寻路 / MC-150224。一个从 Fabric 版本非官方移植到 Forge 生态的版本
免责声明
这是 Rabbit Pathfinding Fixed 的分支版本。我不主张对原始代码、资源的所有权,也没有更改任何代码逻辑。所有功劳归 litetex 所有。我只是为 Forge 生态系统做了一个移植。
Rabbit Pathfinding Fixed
高效地修复兔子寻路。
截至 1.21.1,兔子寻路存在多个问题:
基础寻路
- 跳跃高度/速度的计算不正确且实现拙劣。
这导致跳跃高度过小,无法翻越方块。 - 兔子在跳跃期间会“停滞”(没有水平移动)——因此当它们试图翻越方块时,只会在原地向上跳。
此行为由RabbitMoveControl引起,它在移动时只正确设置(水平)速度,但在跳跃时不设置。 - 兔子会卡住 / 试图永远四处游荡。
- 根本原因是
EntityNavigation根据移动速度设置其超时时间。
如果移动速度为 0(当兔子/生物“卡住”时就是这种情况),超时时间也为 0……而如果超时时间为 0,它就会被忽略,因此会永远执行下去(或被外部因素如另一个目标中断)。 - 兔子在空闲时只有一个目标:
WanderAround(Far)。大多数其他实体还使用LookAroundGoal。
因此上述无限导航永远不会停止,以便像大多数其他生物那样执行另一个目标。 RabbitMoveControl#tick会不断更新兔子的速度(RabbitEntity#setSpeed)。
在此过程中,它还会间接执行moveControl#moveTo,因此兔子总是试图到达它的最后一个目标,即使它不应该这样做。
- 根本原因是
截至
1.21.4/24w46a,MC-150224 已被修复,纠正了跳跃高度(1)并修复了停滞问题(2)。
然而,所有其他部分——包括上述修复中的优化和健全性检查——仍然缺失。
吃胡萝卜作物
- 兔子无法到达作物,总是停在距离它们一个方块的位置。
这是由于选择了不正确的作物方块距离(是1,但应该是0)。 - 兔子即使仍在跳跃和处于空中时也会立即吃掉作物。
- 由于
shouldContinue和isTargetPos方法的实现不正确,该目标/行为会被立即中止(在选择目标作物方块后的几个 tick 内)。
详细的视频对比也可供查看。
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。