兔子寻路已修复

兔子寻路已修复

高效修复兔子的寻路问题

游戏机制

修复兔子寻路效率问题。

自1.21.1起,兔子寻路存在多个问题:

基础寻路

  1. 跳跃高度/速度的计算不正确且实现拙劣。
    这导致攀爬方块时的跳跃过小。
  2. 兔子在跳跃时会“卡住”(无水平移动)——因此尝试攀爬方块时只会原地向上跳。
    此行为由 RabbitMoveControl 引起,它只在移动期间正确设置(水平)速度,而在跳跃时没有这样做。
  3. 兔子会被困住/永远试图四处游荡。
    • 根本原因是 EntityNavigation 根据移动速度设置其超时时间。
      如果移动速度为 0(当兔子/生物被“卡住”时),超时时间也为 0……而如果超时时间为 0,则会被忽略,因此该行为会永远执行(直到被其他外部因素如另一个目标打断)。
    • 兔子空闲时只有一个目标:WanderAround(Far)。大多数其他实体还会使用 LookAroundGoal。
      因此,上述无限的导航永远不会因执行其他目标而被停止,这一点与大多数其他生物不同。
    • RabbitMoveControl#tick 会不断更新兔子的速度(RabbitEntity#setSpeed)。
      在此过程中,它还会间接执行 moveControl#moveTo,因此兔子总是试图到达其最后的目标,即使它本不该这样做。

自 1.21.4/24w46a 起,MC-150224 已修复,纠正了跳跃高度(1)并修复了卡顿(2)。
然而,所有其他部分——包括上述修复中的优化和健全性检查——仍然缺失。

食用胡萝卜作物

  1. 兔子无法够到作物,总是在距作物一个方块处停下。
    这是因为选择了与作物方块不正确的距离(应为 0,实际为 1)。
  2. 兔子即便还在跳跃并处于空中,也会瞬间吃掉作物。
  3. 由于 shouldContinue 和 isTargetPos 方法实现不正确,该目标/行为(在选择目标作物方块后的几个刻内)会立即被中止。

其他修复

  • 成年兔子的头部在客户端旋转时,大部分时间会略微向上——MC-306682 影响 26.1 或更高版本

详细的视频对比也可供查阅。