Fix turtle navigation between biomes
This commit is contained in:
parent
e52f616a4b
commit
de94185133
|
@ -276,6 +276,7 @@ public class CitizensNavigator implements Navigator, Runnable {
|
|||
executing.stop();
|
||||
}
|
||||
executing = null;
|
||||
|
||||
localParams = defaultParams;
|
||||
stationaryTicks = 0;
|
||||
if (npc.isSpawned()) {
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
package net.citizensnpcs.nms.v1_13_R2.entity;
|
||||
|
||||
import net.minecraft.server.v1_13_R2.*;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.craftbukkit.v1_13_R2.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_13_R2.entity.CraftEntity;
|
||||
|
@ -15,6 +14,18 @@ import net.citizensnpcs.nms.v1_13_R2.util.NMSImpl;
|
|||
import net.citizensnpcs.npc.CitizensNPC;
|
||||
import net.citizensnpcs.npc.ai.NPCHolder;
|
||||
import net.citizensnpcs.util.Util;
|
||||
import net.minecraft.server.v1_13_R2.BlockPosition;
|
||||
import net.minecraft.server.v1_13_R2.ControllerJump;
|
||||
import net.minecraft.server.v1_13_R2.ControllerMove;
|
||||
import net.minecraft.server.v1_13_R2.DamageSource;
|
||||
import net.minecraft.server.v1_13_R2.EntityInsentient;
|
||||
import net.minecraft.server.v1_13_R2.EntityTurtle;
|
||||
import net.minecraft.server.v1_13_R2.IBlockData;
|
||||
import net.minecraft.server.v1_13_R2.NBTTagCompound;
|
||||
import net.minecraft.server.v1_13_R2.Navigation;
|
||||
import net.minecraft.server.v1_13_R2.NavigationAbstract;
|
||||
import net.minecraft.server.v1_13_R2.SoundEffect;
|
||||
import net.minecraft.server.v1_13_R2.World;
|
||||
|
||||
public class TurtleController extends MobEntityController {
|
||||
public TurtleController() {
|
||||
|
@ -43,18 +54,6 @@ public class TurtleController extends MobEntityController {
|
|||
}
|
||||
}
|
||||
|
||||
static class EmptyControllerJump extends ControllerJump {
|
||||
|
||||
public EmptyControllerJump(EntityInsentient var1) {
|
||||
super(var1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void b() {
|
||||
this.a = false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void a(double d0, boolean flag, IBlockData block, BlockPosition blockposition) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
|
@ -71,6 +70,14 @@ public class TurtleController extends MobEntityController {
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected NavigationAbstract b(World world) {
|
||||
if (npc == null) {
|
||||
return super.b(world);
|
||||
}
|
||||
return new Navigation(this, world);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void c(float f, float f1) {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
|
@ -190,6 +197,17 @@ public class TurtleController extends MobEntityController {
|
|||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
static class EmptyControllerJump extends ControllerJump {
|
||||
public EmptyControllerJump(EntityInsentient var1) {
|
||||
super(var1);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void b() {
|
||||
this.a = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static class TurtleNPC extends CraftTurtle implements NPCHolder {
|
||||
|
|
|
@ -23,6 +23,8 @@ import net.minecraft.server.v1_14_R1.EntityTurtle;
|
|||
import net.minecraft.server.v1_14_R1.EntityTypes;
|
||||
import net.minecraft.server.v1_14_R1.IBlockData;
|
||||
import net.minecraft.server.v1_14_R1.NBTTagCompound;
|
||||
import net.minecraft.server.v1_14_R1.Navigation;
|
||||
import net.minecraft.server.v1_14_R1.NavigationAbstract;
|
||||
import net.minecraft.server.v1_14_R1.SoundEffect;
|
||||
import net.minecraft.server.v1_14_R1.Vec3D;
|
||||
import net.minecraft.server.v1_14_R1.World;
|
||||
|
@ -68,6 +70,14 @@ public class TurtleController extends MobEntityController {
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected NavigationAbstract b(World world) {
|
||||
if (npc == null) {
|
||||
return super.b(world);
|
||||
}
|
||||
return new Navigation(this, world);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void checkDespawn() {
|
||||
if (npc == null) {
|
||||
|
|
|
@ -23,6 +23,8 @@ import net.minecraft.server.v1_15_R1.EntityTurtle;
|
|||
import net.minecraft.server.v1_15_R1.EntityTypes;
|
||||
import net.minecraft.server.v1_15_R1.IBlockData;
|
||||
import net.minecraft.server.v1_15_R1.NBTTagCompound;
|
||||
import net.minecraft.server.v1_15_R1.Navigation;
|
||||
import net.minecraft.server.v1_15_R1.NavigationAbstract;
|
||||
import net.minecraft.server.v1_15_R1.SoundEffect;
|
||||
import net.minecraft.server.v1_15_R1.Vec3D;
|
||||
import net.minecraft.server.v1_15_R1.World;
|
||||
|
@ -69,6 +71,14 @@ public class TurtleController extends MobEntityController {
|
|||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected NavigationAbstract b(World world) {
|
||||
if (npc == null) {
|
||||
return super.b(world);
|
||||
}
|
||||
return new Navigation(this, world);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void checkDespawn() {
|
||||
if (npc == null) {
|
||||
|
@ -112,28 +122,6 @@ public class TurtleController extends MobEntityController {
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void h(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.h(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.h(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.h(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public CraftEntity getBukkitEntity() {
|
||||
if (npc != null && !(super.getBukkitEntity() instanceof NPCHolder)) {
|
||||
|
@ -162,6 +150,28 @@ public class TurtleController extends MobEntityController {
|
|||
return NMSImpl.getSoundEffect(npc, super.getSoundHurt(damagesource), NPC.HURT_SOUND_METADATA);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void h(double x, double y, double z) {
|
||||
if (npc == null) {
|
||||
super.h(x, y, z);
|
||||
return;
|
||||
}
|
||||
if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) {
|
||||
if (!npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true))
|
||||
super.h(x, y, z);
|
||||
return;
|
||||
}
|
||||
Vector vector = new Vector(x, y, z);
|
||||
NPCPushEvent event = Util.callPushEvent(npc, vector);
|
||||
if (!event.isCancelled()) {
|
||||
vector = event.getCollisionVector();
|
||||
super.h(vector.getX(), vector.getY(), vector.getZ());
|
||||
}
|
||||
// when another entity collides, this method is called to push the
|
||||
// NPC so we prevent it from doing anything if the event is
|
||||
// cancelled.
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isClimbing() {
|
||||
if (npc == null || !npc.isFlyable()) {
|
||||
|
@ -193,7 +203,6 @@ public class TurtleController extends MobEntityController {
|
|||
}
|
||||
|
||||
static class EmptyControllerJump extends ControllerJump {
|
||||
|
||||
public EmptyControllerJump(EntityInsentient var1) {
|
||||
super(var1);
|
||||
}
|
||||
|
|
|
@ -578,7 +578,8 @@ public class NMSImpl implements NMSBridge {
|
|||
if (params.speed() != lastSpeed) {
|
||||
if (Messaging.isDebugging()) {
|
||||
Messaging.debug(
|
||||
"Repathfinding " + ((NPCHolder) entity).getNPC().getId() + " due to speed change");
|
||||
"Repathfinding " + ((NPCHolder) entity).getNPC().getId() + " due to speed change from",
|
||||
lastSpeed, "to", params.speed());
|
||||
}
|
||||
Entity handle = getHandle(entity);
|
||||
EntitySize size = null;
|
||||
|
|
Loading…
Reference in New Issue