-
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)
修改相关寻路限制。