修复了兔子寻路效率低下的问题。
截至 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方法的实现不正确,该目标/行为会立即中止(在选择目标作物方块后的几个刻内)。
其他修复
- 成年兔子头部的客户端旋转角度大多数时候略微向上——MC-306682 影响 26.1 或更高版本
详细的 视频对比 也可供查看。
资源外链
选择礼物
使用社区积分,为喜欢的作品送上一份支持
加载中...
打赏记录
感谢每一位送出礼物的社区成员
0 次支持0 积分
正在加载内容…


