-
Notifications
You must be signed in to change notification settings - Fork 1
Navigation
原本是想提供一个接口用以自定义Navigation甚至可以更改其寻路算法,但是由于实现太过冗杂,我们便放弃了。 由于时间原因,就仓促诞生了如下的一个Navigation接口使用寻路相关算法。
FocessEntity提供了#getNavigation()方法用以获得Navigation实例。
Navigation navigation = focessEntity.getNavigation();
通过Navigation你可以使用寻路相关算法。
使用 #getWorld() 来获取实体所在的世界。
注意,所有有效的寻路都必须在一个世界里面
使用 #isIdle() 来获取Navigation是否处于空闲状态,避免同时调用导致得不到预期效果。
使用#findPathTo(FocessEntity focessEntity)
来获取通往实体的路线。
更便捷的,你可以使用#findPathTo(double x,double y,double z)或#findPathTo(double x,double y,double z,int distance)
直接通过某一世界的坐标信息来获取通往该坐标的路线。
当你找到路线后,你可以使用#startMovingAlong(Path path,double speed)
来让实体走上一条预定的道路。
当然,你还可以直接使用#startMovingTo(final double x, final double y, final double z, final double speed)或#startMovingTo(final FocessEntity entity, final double speed)
同时实现寻路与行动。
使用#getCurrentPath()来获取本次行动的路线。
使用#stop()来中断本次寻路行动。
使用#getSpeed()、#getRangeMulti``plier()来获取速度、误差范围修正。
使用#setSpeed(double speed)、#setRangeMultiplier(float rangeMultiplier)来设置速度、误差范围修正。
注意,默认的误差范围修正为float DEFAULT_RANGE_MULTIPLIER = 1.0F。
使用#recalculatePath()重新计算路径。
使用#shouldRecalculatePath()获取是否需要重新计算路径。
使用#getAvoidsWater()(只适用于1.8)、#canOpenDoors()(不适用于1.8)、
avoidSunlight() 、#canEnterOpenDoors()、
#canSwim()
获取相关寻路限制。
使用#setAvoidsWater(boolean avoidsWater)(只适用于1.8)、#setCanOpenDoors(final boolean canOpenDoors)(不适用于1.8)、
#setAvoidSunlight(final boolean avoidSunlight)、#setCanEnterOpenDoors(final boolean canEnterOpenDoors)、
#setCanSwim(final boolean canSwim)
修改相关寻路限制。