diff --git a/main/src/main/java/net/citizensnpcs/npc/CitizensNPC.java b/main/src/main/java/net/citizensnpcs/npc/CitizensNPC.java index e6c73bba1..1b5efa878 100644 --- a/main/src/main/java/net/citizensnpcs/npc/CitizensNPC.java +++ b/main/src/main/java/net/citizensnpcs/npc/CitizensNPC.java @@ -367,7 +367,7 @@ public class CitizensNPC extends AbstractNPC { if (!data().has(NPC.Metadata.SWIMMING) || data(). get(NPC.Metadata.SWIMMING)) { Location currentDest = navigator.getPathStrategy().getCurrentDestination(); if (currentDest == null || currentDest.getY() > getStoredLocation().getY()) { - NMS.trySwim(getEntity(), SwimmingExaminer.isWaterMob(getEntity()) ? 0.01F : 0.04F); + NMS.trySwim(getEntity(), SwimmingExaminer.isWaterMob(getEntity()) ? 0.02F : 0.04F); } } } else if (data().has(NPC.Metadata.SWIMMING) ? data(). get(NPC.Metadata.SWIMMING) diff --git a/main/src/main/java/net/citizensnpcs/npc/ai/AStarNavigationStrategy.java b/main/src/main/java/net/citizensnpcs/npc/ai/AStarNavigationStrategy.java index d33a1584f..377170a00 100644 --- a/main/src/main/java/net/citizensnpcs/npc/ai/AStarNavigationStrategy.java +++ b/main/src/main/java/net/citizensnpcs/npc/ai/AStarNavigationStrategy.java @@ -56,7 +56,7 @@ public class AStarNavigationStrategy extends AbstractPathStrategy { @Override public Location getCurrentDestination() { - return vector != null ? vector.toLocation(npc.getEntity().getWorld()) : null; + return plan != null ? plan.getCurrentVector().toLocation(npc.getEntity().getWorld()) : destination.clone(); } @Override @@ -141,7 +141,7 @@ public class AStarNavigationStrategy extends AbstractPathStrategy { } Location loc = npc.getEntity().getLocation(NPC_LOCATION); /* Proper door movement - gets stuck on corners at times - + Block block = currLoc.getWorld().getBlockAt(vector.getBlockX(), vector.getBlockY(), vector.getBlockZ()); if (MinecraftBlockExaminer.isDoor(block.getType())) { Door door = (Door) block.getState().getData(); diff --git a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/CodController.java b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/CodController.java index ba09ae28c..cad8b1364 100644 --- a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/CodController.java +++ b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/CodController.java @@ -22,7 +22,6 @@ import net.minecraft.server.v1_13_R2.EntityCod; import net.minecraft.server.v1_13_R2.EntityHuman; import net.minecraft.server.v1_13_R2.EntityMinecartAbstract; import net.minecraft.server.v1_13_R2.EnumHand; -import net.minecraft.server.v1_13_R2.EnumMoveType; import net.minecraft.server.v1_13_R2.IBlockData; import net.minecraft.server.v1_13_R2.ItemStack; import net.minecraft.server.v1_13_R2.Items; @@ -91,14 +90,7 @@ public class CodController extends MobEntityController { @Override public void a(float f, float f1, float f2) { if (npc == null || !npc.isFlyable()) { - if (!npc.useMinecraftAI() && isInWater() && !npc.getNavigator().isNavigating()) { - this.a(f, f1, f2, 0.01F); - this.move(EnumMoveType.SELF, this.motX, this.motY, this.motZ); - this.motX *= 0.9D; - this.motY *= 0.9D; - this.motZ *= 0.9D; - - } else { + if (!NMSImpl.moveFish(npc, this, f, f1, f2)) { super.a(f, f1, f2); } } else { diff --git a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/DolphinController.java b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/DolphinController.java index ba512d9e1..9f4eac7ea 100644 --- a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/DolphinController.java +++ b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/DolphinController.java @@ -19,6 +19,7 @@ import net.minecraft.server.v1_13_R2.Entity; import net.minecraft.server.v1_13_R2.EntityBoat; import net.minecraft.server.v1_13_R2.EntityDolphin; import net.minecraft.server.v1_13_R2.EntityMinecartAbstract; +import net.minecraft.server.v1_13_R2.GenericAttributes; import net.minecraft.server.v1_13_R2.IBlockData; import net.minecraft.server.v1_13_R2.NBTTagCompound; import net.minecraft.server.v1_13_R2.SoundEffect; @@ -61,6 +62,8 @@ public class DolphinController extends MobEntityController { if (npc != null) { NMSImpl.clearGoals(goalSelector, targetSelector); this.setNoAI(true); + this.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED) + .setValue(this.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED).getValue() / 10); } } @@ -74,7 +77,9 @@ public class DolphinController extends MobEntityController { @Override public void a(float f, float f1, float f2) { if (npc == null || !npc.isFlyable()) { - super.a(f, f1, f2); + if (!NMSImpl.moveFish(npc, this, f, f1, f2, cK())) { + super.a(f, f1, f2); + } } else { NMSImpl.flyingMoveLogic(this, f, f1, f2); } diff --git a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/PufferFishController.java b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/PufferFishController.java index df1998aee..d1134aa2e 100644 --- a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/PufferFishController.java +++ b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/PufferFishController.java @@ -77,7 +77,9 @@ public class PufferFishController extends MobEntityController { @Override public void a(float f, float f1, float f2) { if (npc == null || !npc.isFlyable()) { - super.a(f, f1, f2); + if (!NMSImpl.moveFish(npc, this, f, f1, f2)) { + super.a(f, f1, f2); + } } else { NMSImpl.flyingMoveLogic(this, f, f1, f2); } diff --git a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/SalmonController.java b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/SalmonController.java index f8d9247a5..f8860d167 100644 --- a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/SalmonController.java +++ b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/SalmonController.java @@ -22,7 +22,6 @@ import net.minecraft.server.v1_13_R2.EntityHuman; import net.minecraft.server.v1_13_R2.EntityMinecartAbstract; import net.minecraft.server.v1_13_R2.EntitySalmon; import net.minecraft.server.v1_13_R2.EnumHand; -import net.minecraft.server.v1_13_R2.EnumMoveType; import net.minecraft.server.v1_13_R2.IBlockData; import net.minecraft.server.v1_13_R2.ItemStack; import net.minecraft.server.v1_13_R2.Items; @@ -77,14 +76,7 @@ public class SalmonController extends MobEntityController { @Override public void a(float f, float f1, float f2) { if (npc == null || !npc.isFlyable()) { - if (!npc.useMinecraftAI() && isInWater() && !npc.getNavigator().isNavigating()) { - this.a(f, f1, f2, 0.01F); - this.move(EnumMoveType.SELF, this.motX, this.motY, this.motZ); - this.motX *= 0.9D; - this.motY *= 0.9D; - this.motZ *= 0.9D; - - } else { + if (!NMSImpl.moveFish(npc, this, f, f1, f2)) { super.a(f, f1, f2); } } else { diff --git a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/TropicalFishController.java b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/TropicalFishController.java index 58a403c9a..6322d9a8f 100644 --- a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/TropicalFishController.java +++ b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/TropicalFishController.java @@ -22,7 +22,6 @@ import net.minecraft.server.v1_13_R2.EntityHuman; import net.minecraft.server.v1_13_R2.EntityMinecartAbstract; import net.minecraft.server.v1_13_R2.EntityTropicalFish; import net.minecraft.server.v1_13_R2.EnumHand; -import net.minecraft.server.v1_13_R2.EnumMoveType; import net.minecraft.server.v1_13_R2.IBlockData; import net.minecraft.server.v1_13_R2.ItemStack; import net.minecraft.server.v1_13_R2.Items; @@ -77,14 +76,7 @@ public class TropicalFishController extends MobEntityController { @Override public void a(float f, float f1, float f2) { if (npc == null || !npc.isFlyable()) { - if (!npc.useMinecraftAI() && isInWater() && !npc.getNavigator().isNavigating()) { - this.a(f, f1, f2, 0.01F); - this.move(EnumMoveType.SELF, this.motX, this.motY, this.motZ); - this.motX *= 0.9D; - this.motY *= 0.9D; - this.motZ *= 0.9D; - - } else { + if (!NMSImpl.moveFish(npc, this, f, f1, f2)) { super.a(f, f1, f2); } } else { diff --git a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/TurtleController.java b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/TurtleController.java index c1a5eb6ea..9621ef305 100644 --- a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/TurtleController.java +++ b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/TurtleController.java @@ -22,11 +22,8 @@ import net.minecraft.server.v1_13_R2.EntityBoat; import net.minecraft.server.v1_13_R2.EntityInsentient; import net.minecraft.server.v1_13_R2.EntityMinecartAbstract; import net.minecraft.server.v1_13_R2.EntityTurtle; -import net.minecraft.server.v1_13_R2.EnumMoveType; 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; @@ -67,14 +64,7 @@ public class TurtleController extends MobEntityController { @Override public void a(float f, float f1, float f2) { if (npc == null || !npc.isFlyable()) { - if (!npc.useMinecraftAI() && isInWater() && !npc.getNavigator().isNavigating()) { - this.a(f, f1, f2, 0.01F); - this.move(EnumMoveType.SELF, this.motX, this.motY, this.motZ); - this.motX *= 0.9D; - this.motY *= 0.9D; - this.motZ *= 0.9D; - - } else { + if (!NMSImpl.moveFish(npc, this, f, f1, f2)) { super.a(f, f1, f2); } } else { @@ -82,14 +72,6 @@ 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()) { diff --git a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/util/NMSImpl.java b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/util/NMSImpl.java index 3a7d26546..4a29f2b6d 100644 --- a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/util/NMSImpl.java +++ b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/util/NMSImpl.java @@ -219,6 +219,7 @@ import net.minecraft.server.v1_13_R2.EntityShulker; import net.minecraft.server.v1_13_R2.EntityTameableAnimal; import net.minecraft.server.v1_13_R2.EntityTracker; import net.minecraft.server.v1_13_R2.EntityTrackerEntry; +import net.minecraft.server.v1_13_R2.EntityTurtle; import net.minecraft.server.v1_13_R2.EntityTypes; import net.minecraft.server.v1_13_R2.EntityWither; import net.minecraft.server.v1_13_R2.EnumMoveType; @@ -1685,6 +1686,26 @@ public class NMSImpl implements NMSBridge { minecart.setDisplayBlockOffset(offset); } + public static boolean moveFish(NPC npc, EntityInsentient handle, float f, float f1, float f2) { + return moveFish(npc, handle, f1, f1, f2, -1); + } + + public static boolean moveFish(NPC npc, EntityInsentient handle, float f, float f1, float f2, float speed) { + if (npc == null) { + return false; + } + if (!npc.useMinecraftAI() && handle.isInWater() && !npc.getNavigator().isNavigating()) { + handle.a(f, f1, f2, speed > 0 ? speed : handle instanceof EntityTurtle ? 0.1F : 0.01F); + handle.move(EnumMoveType.SELF, handle.motX, handle.motY, handle.motZ); + handle.motX *= 0.9D; + handle.motY *= 0.9D; + handle.motZ *= 0.9D; + + return true; + } + return false; + } + public static void sendPacket(Player player, Packet packet) { if (packet == null) return; diff --git a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/CodController.java b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/CodController.java index 71eb5a02b..8a1c2d439 100644 --- a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/CodController.java +++ b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/CodController.java @@ -23,7 +23,6 @@ import net.minecraft.server.v1_14_R1.EntityHuman; import net.minecraft.server.v1_14_R1.EntityMinecartAbstract; import net.minecraft.server.v1_14_R1.EntityTypes; import net.minecraft.server.v1_14_R1.EnumHand; -import net.minecraft.server.v1_14_R1.EnumMoveType; import net.minecraft.server.v1_14_R1.IBlockData; import net.minecraft.server.v1_14_R1.ItemStack; import net.minecraft.server.v1_14_R1.Items; @@ -121,11 +120,7 @@ public class CodController extends MobEntityController { @Override public void e(Vec3D vec3d) { if (npc == null || !npc.isFlyable()) { - if (!npc.useMinecraftAI() && isInWater() && !npc.getNavigator().isNavigating()) { - this.a(0.01F, vec3d); - this.move(EnumMoveType.SELF, this.getMot()); - this.setMot(this.getMot().a(0.9D)); - } else { + if (!NMSImpl.moveFish(npc, this, vec3d)) { super.e(vec3d); } } else { diff --git a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/DolphinController.java b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/DolphinController.java index 3c7396b4d..4b4f48f9d 100644 --- a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/DolphinController.java +++ b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/DolphinController.java @@ -21,10 +21,9 @@ import net.minecraft.server.v1_14_R1.EntityBoat; import net.minecraft.server.v1_14_R1.EntityDolphin; import net.minecraft.server.v1_14_R1.EntityMinecartAbstract; import net.minecraft.server.v1_14_R1.EntityTypes; +import net.minecraft.server.v1_14_R1.GenericAttributes; 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; @@ -66,6 +65,8 @@ public class DolphinController extends MobEntityController { if (npc != null) { NMSImpl.clearGoals(goalSelector, targetSelector); this.moveController = new ControllerMove(this); + this.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED) + .setValue(this.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED).getBaseValue() / 10); } } @@ -76,11 +77,6 @@ public class DolphinController extends MobEntityController { } } - @Override - public boolean au() { - return npc == null ? super.au() : true; - } - @Override public void b(float f, float f1) { if (npc == null || !npc.isFlyable()) { @@ -88,11 +84,6 @@ public class DolphinController extends MobEntityController { } } - @Override - protected NavigationAbstract b(World world) { - return new Navigation(this, world); - } - @Override protected void checkDespawn() { if (npc == null) { @@ -117,7 +108,9 @@ public class DolphinController extends MobEntityController { @Override public void e(Vec3D vec3d) { if (npc == null || !npc.isFlyable()) { - super.e(vec3d); + if (!NMSImpl.moveFish(npc, this, vec3d, db())) { + super.e(vec3d); + } } else { NMSImpl.flyingMoveLogic(this, vec3d); } @@ -181,11 +174,6 @@ public class DolphinController extends MobEntityController { } } - @Override - public boolean isInWater() { - return npc == null ? super.isInWater() : false; - } - @Override public boolean isLeashed() { if (npc == null) diff --git a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/PufferFishController.java b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/PufferFishController.java index 367943897..49b62279c 100644 --- a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/PufferFishController.java +++ b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/PufferFishController.java @@ -118,7 +118,9 @@ public class PufferFishController extends MobEntityController { @Override public void e(Vec3D vec3d) { if (npc == null || !npc.isFlyable()) { - super.e(vec3d); + if (!NMSImpl.moveFish(npc, this, vec3d)) { + super.e(vec3d); + } } else { NMSImpl.flyingMoveLogic(this, vec3d); } diff --git a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/SalmonController.java b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/SalmonController.java index df680435d..2ec838086 100644 --- a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/SalmonController.java +++ b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/SalmonController.java @@ -23,7 +23,6 @@ import net.minecraft.server.v1_14_R1.EntityMinecartAbstract; import net.minecraft.server.v1_14_R1.EntitySalmon; import net.minecraft.server.v1_14_R1.EntityTypes; import net.minecraft.server.v1_14_R1.EnumHand; -import net.minecraft.server.v1_14_R1.EnumMoveType; import net.minecraft.server.v1_14_R1.IBlockData; import net.minecraft.server.v1_14_R1.ItemStack; import net.minecraft.server.v1_14_R1.Items; @@ -107,11 +106,7 @@ public class SalmonController extends MobEntityController { @Override public void e(Vec3D vec3d) { if (npc == null || !npc.isFlyable()) { - if (!npc.useMinecraftAI() && isInWater() && !npc.getNavigator().isNavigating()) { - this.a(0.01F, vec3d); - this.move(EnumMoveType.SELF, this.getMot()); - this.setMot(this.getMot().a(0.9D)); - } else { + if (!NMSImpl.moveFish(npc, this, vec3d)) { super.e(vec3d); } } else { diff --git a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/TraderLlamaController.java b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/TraderLlamaController.java index d40e660a7..c0b59981d 100644 --- a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/TraderLlamaController.java +++ b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/TraderLlamaController.java @@ -50,7 +50,6 @@ public class TraderLlamaController extends MobEntityController { public static class EntityTraderLlamaNPC extends EntityLlamaTrader implements NPCHolder { boolean calledNMSHeight = false; - private final CitizensNPC npc; public EntityTraderLlamaNPC(EntityTypes types, World world) { diff --git a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/TropicalFishController.java b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/TropicalFishController.java index 8b3137470..dcdb54f99 100644 --- a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/TropicalFishController.java +++ b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/TropicalFishController.java @@ -23,7 +23,6 @@ import net.minecraft.server.v1_14_R1.EntityMinecartAbstract; import net.minecraft.server.v1_14_R1.EntityTropicalFish; import net.minecraft.server.v1_14_R1.EntityTypes; import net.minecraft.server.v1_14_R1.EnumHand; -import net.minecraft.server.v1_14_R1.EnumMoveType; import net.minecraft.server.v1_14_R1.IBlockData; import net.minecraft.server.v1_14_R1.ItemStack; import net.minecraft.server.v1_14_R1.Items; @@ -107,11 +106,7 @@ public class TropicalFishController extends MobEntityController { @Override public void e(Vec3D vec3d) { if (npc == null || !npc.isFlyable()) { - if (!npc.useMinecraftAI() && isInWater() && !npc.getNavigator().isNavigating()) { - this.a(0.01F, vec3d); - this.move(EnumMoveType.SELF, this.getMot()); - this.setMot(this.getMot().a(0.9D)); - } else { + if (!NMSImpl.moveFish(npc, this, vec3d)) { super.e(vec3d); } } else { diff --git a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/TurtleController.java b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/TurtleController.java index d5833e123..31b588749 100644 --- a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/TurtleController.java +++ b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/TurtleController.java @@ -23,11 +23,8 @@ import net.minecraft.server.v1_14_R1.EntityInsentient; import net.minecraft.server.v1_14_R1.EntityMinecartAbstract; import net.minecraft.server.v1_14_R1.EntityTurtle; import net.minecraft.server.v1_14_R1.EntityTypes; -import net.minecraft.server.v1_14_R1.EnumMoveType; 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; @@ -73,14 +70,6 @@ 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) { @@ -105,11 +94,7 @@ public class TurtleController extends MobEntityController { @Override public void e(Vec3D vec3d) { if (npc == null || !npc.isFlyable()) { - if (!npc.useMinecraftAI() && isInWater() && !npc.getNavigator().isNavigating()) { - this.a(0.01F, vec3d); - this.move(EnumMoveType.SELF, this.getMot()); - this.setMot(this.getMot().a(0.9D)); - } else { + if (!NMSImpl.moveFish(npc, this, vec3d)) { super.e(vec3d); } } else { diff --git a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/util/NMSImpl.java b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/util/NMSImpl.java index 126cd7818..a379afc03 100644 --- a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/util/NMSImpl.java +++ b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/util/NMSImpl.java @@ -238,6 +238,7 @@ import net.minecraft.server.v1_14_R1.EntityRabbit; import net.minecraft.server.v1_14_R1.EntityShulker; import net.minecraft.server.v1_14_R1.EntitySize; import net.minecraft.server.v1_14_R1.EntityTameableAnimal; +import net.minecraft.server.v1_14_R1.EntityTurtle; import net.minecraft.server.v1_14_R1.EntityTypes; import net.minecraft.server.v1_14_R1.EntityWither; import net.minecraft.server.v1_14_R1.EnumMoveType; @@ -1746,6 +1747,23 @@ public class NMSImpl implements NMSBridge { minecart.setDisplayBlockOffset(offset); } + public static boolean moveFish(NPC npc, EntityInsentient handle, Vec3D vec3d) { + return moveFish(npc, handle, vec3d, -1); + } + + public static boolean moveFish(NPC npc, EntityInsentient handle, Vec3D vec3d, float speed) { + if (npc == null) { + return false; + } + if (!npc.useMinecraftAI() && handle.isInWater() && !npc.getNavigator().isNavigating()) { + handle.a(speed > 0 ? speed : handle instanceof EntityTurtle ? 0.1F : 0.01F, vec3d); + handle.move(EnumMoveType.SELF, handle.getMot()); + handle.setMot(handle.getMot().a(0.9)); + return true; + } + return false; + } + public static void resetPuffTicks(EntityPufferFish fish) { try { PUFFERFISH_C.invoke(fish, 0); diff --git a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/CodController.java b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/CodController.java index dbe5e5e08..af2d9d022 100644 --- a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/CodController.java +++ b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/CodController.java @@ -24,7 +24,6 @@ import net.minecraft.server.v1_15_R1.EntityHuman; import net.minecraft.server.v1_15_R1.EntityMinecartAbstract; import net.minecraft.server.v1_15_R1.EntityTypes; import net.minecraft.server.v1_15_R1.EnumHand; -import net.minecraft.server.v1_15_R1.EnumMoveType; import net.minecraft.server.v1_15_R1.IBlockData; import net.minecraft.server.v1_15_R1.ItemStack; import net.minecraft.server.v1_15_R1.Items; @@ -125,11 +124,7 @@ public class CodController extends MobEntityController { @Override public void e(Vec3D vec3d) { if (npc == null || !npc.isFlyable()) { - if (!npc.useMinecraftAI() && isInWater() && !npc.getNavigator().isNavigating()) { - this.a(0.01F, vec3d); - this.move(EnumMoveType.SELF, this.getMot()); - this.setMot(this.getMot().a(0.9D)); - } else { + if (!NMSImpl.moveFish(npc, this, vec3d)) { super.e(vec3d); } } else { diff --git a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/DolphinController.java b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/DolphinController.java index fba529e14..12d27e569 100644 --- a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/DolphinController.java +++ b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/DolphinController.java @@ -22,10 +22,9 @@ import net.minecraft.server.v1_15_R1.EntityBoat; import net.minecraft.server.v1_15_R1.EntityDolphin; import net.minecraft.server.v1_15_R1.EntityMinecartAbstract; import net.minecraft.server.v1_15_R1.EntityTypes; +import net.minecraft.server.v1_15_R1.GenericAttributes; 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 +68,8 @@ public class DolphinController extends MobEntityController { NMSImpl.clearGoals(npc, goalSelector, targetSelector); this.oldMoveController = this.moveController; this.moveController = new ControllerMove(this); + this.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED) + .setValue(this.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED).getBaseValue() / 10); } } @@ -79,11 +80,6 @@ public class DolphinController extends MobEntityController { } } - @Override - public boolean ay() { - return npc == null ? super.ay() : true; - } - @Override public boolean b(float f, float f1) { if (npc == null || !npc.isFlyable()) { @@ -92,11 +88,6 @@ public class DolphinController extends MobEntityController { return false; } - @Override - protected NavigationAbstract b(World world) { - return new Navigation(this, world); - } - @Override public void checkDespawn() { if (npc == null) { @@ -121,7 +112,9 @@ public class DolphinController extends MobEntityController { @Override public void e(Vec3D vec3d) { if (npc == null || !npc.isFlyable()) { - super.e(vec3d); + if (!NMSImpl.moveFish(npc, this, vec3d, dt())) { + super.e(vec3d); + } } else { NMSImpl.flyingMoveLogic(this, vec3d); } @@ -185,11 +178,6 @@ public class DolphinController extends MobEntityController { } } - @Override - public boolean isInWater() { - return npc == null ? super.isInWater() : false; - } - @Override public boolean isLeashed() { if (npc == null) diff --git a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/PufferFishController.java b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/PufferFishController.java index 025576a90..3b32c17f0 100644 --- a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/PufferFishController.java +++ b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/PufferFishController.java @@ -122,7 +122,9 @@ public class PufferFishController extends MobEntityController { @Override public void e(Vec3D vec3d) { if (npc == null || !npc.isFlyable()) { - super.e(vec3d); + if (!NMSImpl.moveFish(npc, this, vec3d)) { + super.e(vec3d); + } } else { NMSImpl.flyingMoveLogic(this, vec3d); } diff --git a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/SalmonController.java b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/SalmonController.java index d48ed05f7..1f40d16a7 100644 --- a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/SalmonController.java +++ b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/SalmonController.java @@ -24,7 +24,6 @@ import net.minecraft.server.v1_15_R1.EntityMinecartAbstract; import net.minecraft.server.v1_15_R1.EntitySalmon; import net.minecraft.server.v1_15_R1.EntityTypes; import net.minecraft.server.v1_15_R1.EnumHand; -import net.minecraft.server.v1_15_R1.EnumMoveType; import net.minecraft.server.v1_15_R1.IBlockData; import net.minecraft.server.v1_15_R1.ItemStack; import net.minecraft.server.v1_15_R1.Items; @@ -111,11 +110,7 @@ public class SalmonController extends MobEntityController { @Override public void e(Vec3D vec3d) { if (npc == null || !npc.isFlyable()) { - if (!npc.useMinecraftAI() && isInWater() && !npc.getNavigator().isNavigating()) { - this.a(0.01F, vec3d); - this.move(EnumMoveType.SELF, this.getMot()); - this.setMot(this.getMot().a(0.9D)); - } else { + if (!NMSImpl.moveFish(npc, this, vec3d)) { super.e(vec3d); } } else { diff --git a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/TropicalFishController.java b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/TropicalFishController.java index b82f7eae4..b8c8ac474 100644 --- a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/TropicalFishController.java +++ b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/TropicalFishController.java @@ -24,7 +24,6 @@ import net.minecraft.server.v1_15_R1.EntityMinecartAbstract; import net.minecraft.server.v1_15_R1.EntityTropicalFish; import net.minecraft.server.v1_15_R1.EntityTypes; import net.minecraft.server.v1_15_R1.EnumHand; -import net.minecraft.server.v1_15_R1.EnumMoveType; import net.minecraft.server.v1_15_R1.IBlockData; import net.minecraft.server.v1_15_R1.ItemStack; import net.minecraft.server.v1_15_R1.Items; @@ -111,11 +110,7 @@ public class TropicalFishController extends MobEntityController { @Override public void e(Vec3D vec3d) { if (npc == null || !npc.isFlyable()) { - if (!npc.useMinecraftAI() && isInWater() && !npc.getNavigator().isNavigating()) { - this.a(0.01F, vec3d); - this.move(EnumMoveType.SELF, this.getMot()); - this.setMot(this.getMot().a(0.9D)); - } else { + if (!NMSImpl.moveFish(npc, this, vec3d)) { super.e(vec3d); } } else { diff --git a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/TurtleController.java b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/TurtleController.java index 17857dc60..2421dc8f2 100644 --- a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/TurtleController.java +++ b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/TurtleController.java @@ -24,11 +24,8 @@ import net.minecraft.server.v1_15_R1.EntityInsentient; import net.minecraft.server.v1_15_R1.EntityMinecartAbstract; import net.minecraft.server.v1_15_R1.EntityTurtle; import net.minecraft.server.v1_15_R1.EntityTypes; -import net.minecraft.server.v1_15_R1.EnumMoveType; 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; @@ -79,14 +76,6 @@ 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) { @@ -111,11 +100,7 @@ public class TurtleController extends MobEntityController { @Override public void e(Vec3D vec3d) { if (npc == null || !npc.isFlyable()) { - if (!npc.useMinecraftAI() && isInWater() && !npc.getNavigator().isNavigating()) { - this.a(0.01F, vec3d); - this.move(EnumMoveType.SELF, this.getMot()); - this.setMot(this.getMot().a(0.9D)); - } else { + if (!NMSImpl.moveFish(npc, this, vec3d)) { super.e(vec3d); } } else { diff --git a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/util/NMSImpl.java b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/util/NMSImpl.java index 8aaba2126..fd45694ec 100644 --- a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/util/NMSImpl.java +++ b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/util/NMSImpl.java @@ -242,6 +242,7 @@ import net.minecraft.server.v1_15_R1.EntityRabbit; import net.minecraft.server.v1_15_R1.EntityShulker; import net.minecraft.server.v1_15_R1.EntitySize; import net.minecraft.server.v1_15_R1.EntityTameableAnimal; +import net.minecraft.server.v1_15_R1.EntityTurtle; import net.minecraft.server.v1_15_R1.EntityTypes; import net.minecraft.server.v1_15_R1.EntityWither; import net.minecraft.server.v1_15_R1.EnumMoveType; @@ -1780,6 +1781,23 @@ public class NMSImpl implements NMSBridge { minecart.setDisplayBlockOffset(offset); } + public static boolean moveFish(NPC npc, EntityInsentient handle, Vec3D vec3d) { + return moveFish(npc, handle, vec3d, -1); + } + + public static boolean moveFish(NPC npc, EntityInsentient handle, Vec3D vec3d, float speed) { + if (npc == null) { + return false; + } + if (!npc.useMinecraftAI() && handle.isInWater() && !npc.getNavigator().isNavigating()) { + handle.a(speed > 0 ? speed : handle instanceof EntityTurtle ? 0.1F : 0.01F, vec3d); + handle.move(EnumMoveType.SELF, handle.getMot()); + handle.setMot(handle.getMot().a(0.9)); + return true; + } + return false; + } + public static void resetPuffTicks(EntityPufferFish fish) { try { PUFFERFISH_C.invoke(fish, 0); diff --git a/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/entity/CodController.java b/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/entity/CodController.java index 4f8ad143b..066f0f3d5 100644 --- a/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/entity/CodController.java +++ b/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/entity/CodController.java @@ -26,7 +26,6 @@ import net.minecraft.server.v1_16_R3.EntityMinecartAbstract; import net.minecraft.server.v1_16_R3.EntityTypes; import net.minecraft.server.v1_16_R3.EnumHand; import net.minecraft.server.v1_16_R3.EnumInteractionResult; -import net.minecraft.server.v1_16_R3.EnumMoveType; import net.minecraft.server.v1_16_R3.IBlockData; import net.minecraft.server.v1_16_R3.ItemStack; import net.minecraft.server.v1_16_R3.Items; @@ -132,11 +131,7 @@ public class CodController extends MobEntityController { @Override public void g(Vec3D vec3d) { if (npc == null || !npc.isFlyable()) { - if (!npc.useMinecraftAI() && isInWater() && !npc.getNavigator().isNavigating()) { - this.a(0.01F, vec3d); - this.move(EnumMoveType.SELF, this.getMot()); - this.setMot(this.getMot().a(0.9D)); - } else { + if (!NMSImpl.moveFish(npc, this, vec3d)) { super.g(vec3d); } } else { diff --git a/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/entity/DolphinController.java b/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/entity/DolphinController.java index f52252452..6476eb39b 100644 --- a/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/entity/DolphinController.java +++ b/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/entity/DolphinController.java @@ -23,10 +23,9 @@ import net.minecraft.server.v1_16_R3.EntityBoat; import net.minecraft.server.v1_16_R3.EntityDolphin; import net.minecraft.server.v1_16_R3.EntityMinecartAbstract; import net.minecraft.server.v1_16_R3.EntityTypes; +import net.minecraft.server.v1_16_R3.GenericAttributes; import net.minecraft.server.v1_16_R3.IBlockData; import net.minecraft.server.v1_16_R3.NBTTagCompound; -import net.minecraft.server.v1_16_R3.Navigation; -import net.minecraft.server.v1_16_R3.NavigationAbstract; import net.minecraft.server.v1_16_R3.SoundEffect; import net.minecraft.server.v1_16_R3.Vec3D; import net.minecraft.server.v1_16_R3.World; @@ -62,6 +61,8 @@ public class DolphinController extends MobEntityController { NMSImpl.clearGoals(npc, goalSelector, targetSelector); this.oldMoveController = this.moveController; this.moveController = new ControllerMove(this); + this.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED) + .setValue(this.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED).getBaseValue() / 10); } } @@ -72,11 +73,6 @@ public class DolphinController extends MobEntityController { } } - @Override - public boolean aG() { - return npc == null ? super.aG() : true; - } - @Override public boolean b(float f, float f1) { if (npc == null || !npc.isFlyable()) { @@ -85,11 +81,6 @@ public class DolphinController extends MobEntityController { return false; } - @Override - protected NavigationAbstract b(World world) { - return new Navigation(this, world); - } - @Override public void checkDespawn() { if (npc == null) { @@ -127,7 +118,9 @@ public class DolphinController extends MobEntityController { @Override public void g(Vec3D vec3d) { if (npc == null || !npc.isFlyable()) { - super.g(vec3d); + if (!NMSImpl.moveFish(npc, this, vec3d, dM())) { + super.g(vec3d); + } } else { NMSImpl.flyingMoveLogic(this, vec3d); } @@ -178,11 +171,6 @@ public class DolphinController extends MobEntityController { } } - @Override - public boolean isInWater() { - return npc == null ? super.isInWater() : false; - } - @Override public boolean isLeashed() { if (npc == null) diff --git a/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/entity/PufferFishController.java b/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/entity/PufferFishController.java index 25fbfefa8..fcefc5614 100644 --- a/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/entity/PufferFishController.java +++ b/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/entity/PufferFishController.java @@ -137,7 +137,9 @@ public class PufferFishController extends MobEntityController { @Override public void g(Vec3D vec3d) { if (npc == null || !npc.isFlyable()) { - super.g(vec3d); + if (!NMSImpl.moveFish(npc, this, vec3d)) { + super.g(vec3d); + } } else { NMSImpl.flyingMoveLogic(this, vec3d); } diff --git a/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/entity/SalmonController.java b/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/entity/SalmonController.java index 88d9ce0d3..221a94613 100644 --- a/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/entity/SalmonController.java +++ b/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/entity/SalmonController.java @@ -26,7 +26,6 @@ import net.minecraft.server.v1_16_R3.EntitySalmon; import net.minecraft.server.v1_16_R3.EntityTypes; import net.minecraft.server.v1_16_R3.EnumHand; import net.minecraft.server.v1_16_R3.EnumInteractionResult; -import net.minecraft.server.v1_16_R3.EnumMoveType; import net.minecraft.server.v1_16_R3.IBlockData; import net.minecraft.server.v1_16_R3.ItemStack; import net.minecraft.server.v1_16_R3.Items; @@ -126,11 +125,7 @@ public class SalmonController extends MobEntityController { @Override public void g(Vec3D vec3d) { if (npc == null || !npc.isFlyable()) { - if (!npc.useMinecraftAI() && isInWater() && !npc.getNavigator().isNavigating()) { - this.a(0.01F, vec3d); - this.move(EnumMoveType.SELF, this.getMot()); - this.setMot(this.getMot().a(0.9D)); - } else { + if (!NMSImpl.moveFish(npc, this, vec3d)) { super.g(vec3d); } } else { diff --git a/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/entity/TropicalFishController.java b/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/entity/TropicalFishController.java index e25416bf8..707abccb2 100644 --- a/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/entity/TropicalFishController.java +++ b/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/entity/TropicalFishController.java @@ -26,7 +26,6 @@ import net.minecraft.server.v1_16_R3.EntityTropicalFish; import net.minecraft.server.v1_16_R3.EntityTypes; import net.minecraft.server.v1_16_R3.EnumHand; import net.minecraft.server.v1_16_R3.EnumInteractionResult; -import net.minecraft.server.v1_16_R3.EnumMoveType; import net.minecraft.server.v1_16_R3.IBlockData; import net.minecraft.server.v1_16_R3.ItemStack; import net.minecraft.server.v1_16_R3.Items; @@ -126,11 +125,7 @@ public class TropicalFishController extends MobEntityController { @Override public void g(Vec3D vec3d) { if (npc == null || !npc.isFlyable()) { - if (!npc.useMinecraftAI() && isInWater() && !npc.getNavigator().isNavigating()) { - this.a(0.01F, vec3d); - this.move(EnumMoveType.SELF, this.getMot()); - this.setMot(this.getMot().a(0.9D)); - } else { + if (!NMSImpl.moveFish(npc, this, vec3d)) { super.g(vec3d); } } else { diff --git a/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/entity/TurtleController.java b/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/entity/TurtleController.java index 93fa16627..c03c05dbf 100644 --- a/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/entity/TurtleController.java +++ b/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/entity/TurtleController.java @@ -25,11 +25,8 @@ import net.minecraft.server.v1_16_R3.EntityInsentient; import net.minecraft.server.v1_16_R3.EntityMinecartAbstract; import net.minecraft.server.v1_16_R3.EntityTurtle; import net.minecraft.server.v1_16_R3.EntityTypes; -import net.minecraft.server.v1_16_R3.EnumMoveType; import net.minecraft.server.v1_16_R3.IBlockData; import net.minecraft.server.v1_16_R3.NBTTagCompound; -import net.minecraft.server.v1_16_R3.Navigation; -import net.minecraft.server.v1_16_R3.NavigationAbstract; import net.minecraft.server.v1_16_R3.SoundEffect; import net.minecraft.server.v1_16_R3.Vec3D; import net.minecraft.server.v1_16_R3.World; @@ -80,14 +77,6 @@ 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) { @@ -125,11 +114,7 @@ public class TurtleController extends MobEntityController { @Override public void g(Vec3D vec3d) { if (npc == null || !npc.isFlyable()) { - if (!npc.useMinecraftAI() && isInWater() && !npc.getNavigator().isNavigating()) { - this.a(0.01F, vec3d); - this.move(EnumMoveType.SELF, this.getMot()); - this.setMot(this.getMot().a(0.9D)); - } else { + if (!NMSImpl.moveFish(npc, this, vec3d)) { super.g(vec3d); } } else { diff --git a/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/util/NMSImpl.java b/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/util/NMSImpl.java index 797548981..e19219865 100644 --- a/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/util/NMSImpl.java +++ b/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/util/NMSImpl.java @@ -247,6 +247,7 @@ import net.minecraft.server.v1_16_R3.EntityRabbit; import net.minecraft.server.v1_16_R3.EntityShulker; import net.minecraft.server.v1_16_R3.EntitySize; import net.minecraft.server.v1_16_R3.EntityTameableAnimal; +import net.minecraft.server.v1_16_R3.EntityTurtle; import net.minecraft.server.v1_16_R3.EntityTypes; import net.minecraft.server.v1_16_R3.EntityWither; import net.minecraft.server.v1_16_R3.EnumMoveType; @@ -1747,6 +1748,23 @@ public class NMSImpl implements NMSBridge { minecart.setDisplayBlockOffset(offset); } + public static boolean moveFish(NPC npc, EntityInsentient handle, Vec3D vec3d) { + return moveFish(npc, handle, vec3d, -1); + } + + public static boolean moveFish(NPC npc, EntityInsentient handle, Vec3D vec3d, float speed) { + if (npc == null) { + return false; + } + if (!npc.useMinecraftAI() && handle.isInWater() && !npc.getNavigator().isNavigating()) { + handle.a(speed > 0 ? speed : handle instanceof EntityTurtle ? 0.1F : 0.01F, vec3d); + handle.move(EnumMoveType.SELF, handle.getMot()); + handle.setMot(handle.getMot().a(0.9)); + return true; + } + return false; + } + public static void resetPuffTicks(EntityPufferFish fish) { try { PUFFERFISH_C.invoke(fish, 0); diff --git a/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/entity/AxolotlController.java b/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/entity/AxolotlController.java index 9796b22fb..8a7dbcc8f 100644 --- a/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/entity/AxolotlController.java +++ b/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/entity/AxolotlController.java @@ -6,6 +6,8 @@ import org.bukkit.craftbukkit.v1_17_R1.entity.CraftAxolotl; import org.bukkit.craftbukkit.v1_17_R1.entity.CraftEntity; import org.bukkit.util.Vector; +import com.mojang.serialization.Dynamic; + import net.citizensnpcs.api.event.NPCEnderTeleportEvent; import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.nms.v1_17_R1.util.ForwardingNPCHolder; @@ -22,10 +24,9 @@ import net.minecraft.world.InteractionResult; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.MoverType; +import net.minecraft.world.entity.ai.Brain; +import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.ai.control.MoveControl; -import net.minecraft.world.entity.ai.navigation.GroundPathNavigation; -import net.minecraft.world.entity.ai.navigation.PathNavigation; import net.minecraft.world.entity.animal.axolotl.Axolotl; import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.vehicle.AbstractMinecart; @@ -67,6 +68,8 @@ public class AxolotlController extends MobEntityController { NMSImpl.clearGoals(npc, goalSelector, targetSelector); this.oldMoveController = this.moveControl; this.moveControl = new MoveControl(this); + this.getAttribute(Attributes.MOVEMENT_SPEED) + .setBaseValue(this.getAttribute(Attributes.MOVEMENT_SPEED).getBaseValue() / 10); } } @@ -100,11 +103,6 @@ public class AxolotlController extends MobEntityController { } } - @Override - protected PathNavigation createNavigation(Level world) { - return new GroundPathNavigation(this, world); - } - @Override public void dismountTo(double d0, double d1, double d2) { if (npc == null) { @@ -146,16 +144,6 @@ public class AxolotlController extends MobEntityController { return npc; } - @Override - public boolean isInWater() { - return npc == null ? super.isInWater() : false; - } - - @Override - public boolean isInWaterRainOrBubble() { - return npc == null ? super.isInWaterRainOrBubble() : true; - } - @Override public boolean isLeashed() { if (npc == null) @@ -169,6 +157,14 @@ public class AxolotlController extends MobEntityController { return false; // shouldLeash } + @Override + protected Brain makeBrain(Dynamic dynamic) { + if (npc == null || npc.useMinecraftAI()) { + return super.makeBrain(dynamic); + } + return brainProvider().makeBrain(dynamic); + } + @Override public InteractionResult mobInteract(Player entityhuman, InteractionHand enumhand) { if (npc == null || !npc.isProtected()) @@ -229,11 +225,7 @@ public class AxolotlController extends MobEntityController { @Override public void travel(Vec3 vec3d) { if (npc == null || !npc.isFlyable()) { - if (!npc.useMinecraftAI() && isInWater() && !npc.getNavigator().isNavigating()) { - this.moveRelative(this.getSpeed(), vec3d); - this.move(MoverType.SELF, this.getDeltaMovement()); - this.setDeltaMovement(this.getDeltaMovement().scale(0.9D)); - } else { + if (!NMSImpl.moveFish(npc, this, vec3d)) { super.travel(vec3d); } } else { diff --git a/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/entity/CodController.java b/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/entity/CodController.java index 6cc1ac190..61c50b17f 100644 --- a/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/entity/CodController.java +++ b/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/entity/CodController.java @@ -22,7 +22,6 @@ import net.minecraft.world.InteractionResult; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.MoverType; import net.minecraft.world.entity.ai.control.MoveControl; import net.minecraft.world.entity.animal.Cod; import net.minecraft.world.entity.player.Player; @@ -229,11 +228,7 @@ public class CodController extends MobEntityController { @Override public void travel(Vec3 vec3d) { if (npc == null || !npc.isFlyable()) { - if (!npc.useMinecraftAI() && isInWater() && !npc.getNavigator().isNavigating()) { - this.moveRelative(0.01F, vec3d); - this.move(MoverType.SELF, this.getDeltaMovement()); - this.setDeltaMovement(this.getDeltaMovement().scale(0.9D)); - } else { + if (!NMSImpl.moveFish(npc, this, vec3d)) { super.travel(vec3d); } } else { diff --git a/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/entity/DolphinController.java b/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/entity/DolphinController.java index ae9a2e7d6..d5d4c010e 100644 --- a/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/entity/DolphinController.java +++ b/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/entity/DolphinController.java @@ -20,9 +20,8 @@ import net.minecraft.sounds.SoundEvent; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.ai.control.MoveControl; -import net.minecraft.world.entity.ai.navigation.GroundPathNavigation; -import net.minecraft.world.entity.ai.navigation.PathNavigation; import net.minecraft.world.entity.animal.Dolphin; import net.minecraft.world.entity.vehicle.AbstractMinecart; import net.minecraft.world.entity.vehicle.Boat; @@ -61,6 +60,8 @@ public class DolphinController extends MobEntityController { NMSImpl.clearGoals(npc, goalSelector, targetSelector); this.oldMoveController = this.moveControl; this.moveControl = new MoveControl(this); + this.getAttribute(Attributes.MOVEMENT_SPEED) + .setBaseValue(this.getAttribute(Attributes.MOVEMENT_SPEED).getBaseValue() / 10); } } @@ -94,11 +95,6 @@ public class DolphinController extends MobEntityController { } } - @Override - protected PathNavigation createNavigation(Level world) { - return new GroundPathNavigation(this, world); - } - @Override public void dismountTo(double d0, double d1, double d2) { if (npc == null) { @@ -140,16 +136,6 @@ public class DolphinController extends MobEntityController { return npc; } - @Override - public boolean isInWater() { - return npc == null ? super.isInWater() : false; - } - - @Override - public boolean isInWaterRainOrBubble() { - return npc == null ? super.isInWaterRainOrBubble() : true; - } - @Override public boolean isLeashed() { if (npc == null) @@ -212,7 +198,9 @@ public class DolphinController extends MobEntityController { @Override public void travel(Vec3 vec3d) { if (npc == null || !npc.isFlyable()) { - super.travel(vec3d); + if (!NMSImpl.moveFish(npc, this, vec3d)) { + super.travel(vec3d); + } } else { NMSImpl.flyingMoveLogic(this, vec3d); } diff --git a/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/entity/PigZombieController.java b/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/entity/PigZombieController.java index 10367fd20..2aa7e6e73 100644 --- a/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/entity/PigZombieController.java +++ b/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/entity/PigZombieController.java @@ -179,7 +179,9 @@ public class PigZombieController extends MobEntityController { @Override public void travel(Vec3 vec3d) { if (npc == null || !npc.isFlyable()) { - super.travel(vec3d); + if (!NMSImpl.moveFish(npc, this, vec3d)) { + super.travel(vec3d); + } } else { NMSImpl.flyingMoveLogic(this, vec3d); } diff --git a/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/entity/PufferFishController.java b/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/entity/PufferFishController.java index 667ea2503..f1d465c61 100644 --- a/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/entity/PufferFishController.java +++ b/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/entity/PufferFishController.java @@ -24,6 +24,7 @@ import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityDimensions; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.MoverType; import net.minecraft.world.entity.Pose; import net.minecraft.world.entity.ai.control.MoveControl; import net.minecraft.world.entity.animal.Pufferfish; @@ -244,7 +245,9 @@ public class PufferFishController extends MobEntityController { @Override public void travel(Vec3 vec3d) { if (npc == null || !npc.isFlyable()) { - super.travel(vec3d); + if (!NMSImpl.moveFish(npc, this, vec3d)) { + super.travel(vec3d); + } } else { NMSImpl.flyingMoveLogic(this, vec3d); } diff --git a/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/entity/SalmonController.java b/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/entity/SalmonController.java index 2aa058a79..e180aebdb 100644 --- a/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/entity/SalmonController.java +++ b/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/entity/SalmonController.java @@ -22,7 +22,6 @@ import net.minecraft.world.InteractionResult; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.MoverType; import net.minecraft.world.entity.ai.control.MoveControl; import net.minecraft.world.entity.animal.Salmon; import net.minecraft.world.entity.player.Player; @@ -221,11 +220,7 @@ public class SalmonController extends MobEntityController { @Override public void travel(Vec3 vec3d) { if (npc == null || !npc.isFlyable()) { - if (!npc.useMinecraftAI() && isInWater() && !npc.getNavigator().isNavigating()) { - this.moveRelative(0.01F, vec3d); - this.move(MoverType.SELF, this.getDeltaMovement()); - this.setDeltaMovement(this.getDeltaMovement().scale(0.9D)); - } else { + if (!NMSImpl.moveFish(npc, this, vec3d)) { super.travel(vec3d); } } else { diff --git a/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/entity/TropicalFishController.java b/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/entity/TropicalFishController.java index a57bc075b..7aaaed56a 100644 --- a/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/entity/TropicalFishController.java +++ b/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/entity/TropicalFishController.java @@ -22,7 +22,6 @@ import net.minecraft.world.InteractionResult; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.MoverType; import net.minecraft.world.entity.ai.control.MoveControl; import net.minecraft.world.entity.animal.TropicalFish; import net.minecraft.world.entity.player.Player; @@ -223,11 +222,7 @@ public class TropicalFishController extends MobEntityController { @Override public void travel(Vec3 vec3d) { if (npc == null || !npc.isFlyable()) { - if (!npc.useMinecraftAI() && isInWater() && !npc.getNavigator().isNavigating()) { - this.moveRelative(0.01F, vec3d); - this.move(MoverType.SELF, this.getDeltaMovement()); - this.setDeltaMovement(this.getDeltaMovement().scale(0.9D)); - } else { + if (!NMSImpl.moveFish(npc, this, vec3d)) { super.travel(vec3d); } } else { diff --git a/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/entity/TurtleController.java b/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/entity/TurtleController.java index 63fde115e..abefbc083 100644 --- a/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/entity/TurtleController.java +++ b/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/entity/TurtleController.java @@ -21,11 +21,8 @@ import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.Mob; -import net.minecraft.world.entity.MoverType; import net.minecraft.world.entity.ai.control.JumpControl; import net.minecraft.world.entity.ai.control.MoveControl; -import net.minecraft.world.entity.ai.navigation.GroundPathNavigation; -import net.minecraft.world.entity.ai.navigation.PathNavigation; import net.minecraft.world.entity.animal.Turtle; import net.minecraft.world.entity.vehicle.AbstractMinecart; import net.minecraft.world.entity.vehicle.Boat; @@ -94,14 +91,6 @@ public class TurtleController extends MobEntityController { } } - @Override - protected PathNavigation createNavigation(Level world) { - if (npc == null) { - return super.createNavigation(world); - } - return new GroundPathNavigation(this, world); - } - @Override public void customServerAiStep() { super.customServerAiStep(); @@ -208,11 +197,7 @@ public class TurtleController extends MobEntityController { @Override public void travel(Vec3 vec3d) { if (npc == null || !npc.isFlyable()) { - if (!npc.useMinecraftAI() && isInWater() && !npc.getNavigator().isNavigating()) { - this.moveRelative(0.1F, vec3d); - this.move(MoverType.SELF, this.getDeltaMovement()); - this.setDeltaMovement(this.getDeltaMovement().scale(0.9D)); - } else { + if (!NMSImpl.moveFish(npc, this, vec3d)) { super.travel(vec3d); } } else { diff --git a/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/util/NMSImpl.java b/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/util/NMSImpl.java index 44cbc882d..ca12c3d34 100644 --- a/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/util/NMSImpl.java +++ b/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/util/NMSImpl.java @@ -253,10 +253,13 @@ import net.minecraft.world.entity.ai.navigation.PathNavigation; import net.minecraft.world.entity.animal.AbstractFish; import net.minecraft.world.entity.animal.AbstractSchoolingFish; import net.minecraft.world.entity.animal.Cat; +import net.minecraft.world.entity.animal.Dolphin; import net.minecraft.world.entity.animal.Panda; import net.minecraft.world.entity.animal.PolarBear; import net.minecraft.world.entity.animal.Pufferfish; import net.minecraft.world.entity.animal.Rabbit; +import net.minecraft.world.entity.animal.Turtle; +import net.minecraft.world.entity.animal.axolotl.Axolotl; import net.minecraft.world.entity.animal.horse.AbstractHorse; import net.minecraft.world.entity.boss.enderdragon.EnderDragon; import net.minecraft.world.entity.boss.wither.WitherBoss; @@ -1745,6 +1748,20 @@ public class NMSImpl implements NMSBridge { minecart.setDisplayOffset(offset); } + public static boolean moveFish(NPC npc, Mob handle, Vec3 vec3d) { + if (npc == null) { + return false; + } + if (!npc.useMinecraftAI() && handle.isInWater() && !npc.getNavigator().isNavigating()) { + handle.moveRelative((handle instanceof Dolphin || handle instanceof Axolotl) ? handle.getSpeed() + : handle instanceof Turtle ? 0.1F : 0.01F, vec3d); + handle.move(MoverType.SELF, handle.getDeltaMovement()); + handle.setDeltaMovement(handle.getDeltaMovement().scale(0.9)); + return true; + } + return false; + } + public static void resetPuffTicks(Pufferfish fish) { try { PUFFERFISH_C.invoke(fish, 0); diff --git a/v1_18_R1/src/main/java/net/citizensnpcs/nms/v1_18_R1/entity/AxolotlController.java b/v1_18_R1/src/main/java/net/citizensnpcs/nms/v1_18_R1/entity/AxolotlController.java index 43471d090..d31c13486 100644 --- a/v1_18_R1/src/main/java/net/citizensnpcs/nms/v1_18_R1/entity/AxolotlController.java +++ b/v1_18_R1/src/main/java/net/citizensnpcs/nms/v1_18_R1/entity/AxolotlController.java @@ -6,11 +6,12 @@ import org.bukkit.craftbukkit.v1_18_R1.entity.CraftAxolotl; import org.bukkit.craftbukkit.v1_18_R1.entity.CraftEntity; import org.bukkit.util.Vector; +import com.mojang.serialization.Dynamic; + import net.citizensnpcs.api.event.NPCEnderTeleportEvent; import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.nms.v1_18_R1.util.ForwardingNPCHolder; import net.citizensnpcs.nms.v1_18_R1.util.NMSImpl; -import net.citizensnpcs.nms.v1_18_R1.util.PlayerMoveControl; import net.citizensnpcs.npc.CitizensNPC; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.Util; @@ -23,10 +24,9 @@ import net.minecraft.world.InteractionResult; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.MoverType; +import net.minecraft.world.entity.ai.Brain; +import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.ai.control.MoveControl; -import net.minecraft.world.entity.ai.navigation.GroundPathNavigation; -import net.minecraft.world.entity.ai.navigation.PathNavigation; import net.minecraft.world.entity.animal.axolotl.Axolotl; import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.vehicle.AbstractMinecart; @@ -68,6 +68,8 @@ public class AxolotlController extends MobEntityController { NMSImpl.clearGoals(npc, goalSelector, targetSelector); this.oldMoveController = this.moveControl; this.moveControl = new MoveControl(this); + this.getAttribute(Attributes.MOVEMENT_SPEED) + .setBaseValue(this.getAttribute(Attributes.MOVEMENT_SPEED).getBaseValue() / 10); } } @@ -101,11 +103,6 @@ public class AxolotlController extends MobEntityController { } } - @Override - protected PathNavigation createNavigation(Level world) { - return new GroundPathNavigation(this, world); - } - @Override public void dismountTo(double d0, double d1, double d2) { if (npc == null) { @@ -147,16 +144,6 @@ public class AxolotlController extends MobEntityController { return npc; } - @Override - public boolean isInWater() { - return npc == null ? super.isInWater() : false; - } - - @Override - public boolean isInWaterRainOrBubble() { - return npc == null ? super.isInWaterRainOrBubble() : true; - } - @Override public boolean isLeashed() { if (npc == null) @@ -170,6 +157,14 @@ public class AxolotlController extends MobEntityController { return false; // shouldLeash } + @Override + protected Brain makeBrain(Dynamic dynamic) { + if (npc == null || npc.useMinecraftAI()) { + return super.makeBrain(dynamic); + } + return brainProvider().makeBrain(dynamic); + } + @Override public InteractionResult mobInteract(Player entityhuman, InteractionHand enumhand) { if (npc == null || !npc.isProtected()) @@ -228,7 +223,7 @@ public class AxolotlController extends MobEntityController { this.moveControl = this.oldMoveController; } if (!npc.useMinecraftAI() && this.moveControl == this.oldMoveController) { - this.moveControl = new PlayerMoveControl(this); + this.moveControl = new MoveControl(this); } npc.update(); } @@ -237,11 +232,7 @@ public class AxolotlController extends MobEntityController { @Override public void travel(Vec3 vec3d) { if (npc == null || !npc.isFlyable()) { - if (!npc.useMinecraftAI() && isInWater() && !npc.getNavigator().isNavigating()) { - this.moveRelative(this.getSpeed(), vec3d); - this.move(MoverType.SELF, this.getDeltaMovement()); - this.setDeltaMovement(this.getDeltaMovement().scale(0.9D)); - } else { + if (!NMSImpl.moveFish(npc, this, vec3d)) { super.travel(vec3d); } } else { diff --git a/v1_18_R1/src/main/java/net/citizensnpcs/nms/v1_18_R1/entity/CodController.java b/v1_18_R1/src/main/java/net/citizensnpcs/nms/v1_18_R1/entity/CodController.java index 5ec22de23..aa4167d45 100644 --- a/v1_18_R1/src/main/java/net/citizensnpcs/nms/v1_18_R1/entity/CodController.java +++ b/v1_18_R1/src/main/java/net/citizensnpcs/nms/v1_18_R1/entity/CodController.java @@ -23,7 +23,6 @@ import net.minecraft.world.InteractionResult; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.MoverType; import net.minecraft.world.entity.ai.control.MoveControl; import net.minecraft.world.entity.animal.Cod; import net.minecraft.world.entity.player.Player; @@ -238,11 +237,7 @@ public class CodController extends MobEntityController { @Override public void travel(Vec3 vec3d) { if (npc == null || !npc.isFlyable()) { - if (!npc.useMinecraftAI() && isInWater() && !npc.getNavigator().isNavigating()) { - this.moveRelative(0.01F, vec3d); - this.move(MoverType.SELF, this.getDeltaMovement()); - this.setDeltaMovement(this.getDeltaMovement().scale(0.9D)); - } else { + if (!NMSImpl.moveFish(npc, this, vec3d)) { super.travel(vec3d); } } else { diff --git a/v1_18_R1/src/main/java/net/citizensnpcs/nms/v1_18_R1/entity/DolphinController.java b/v1_18_R1/src/main/java/net/citizensnpcs/nms/v1_18_R1/entity/DolphinController.java index 7636d49b6..21de76c6e 100644 --- a/v1_18_R1/src/main/java/net/citizensnpcs/nms/v1_18_R1/entity/DolphinController.java +++ b/v1_18_R1/src/main/java/net/citizensnpcs/nms/v1_18_R1/entity/DolphinController.java @@ -10,7 +10,6 @@ import net.citizensnpcs.api.event.NPCEnderTeleportEvent; import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.nms.v1_18_R1.util.ForwardingNPCHolder; import net.citizensnpcs.nms.v1_18_R1.util.NMSImpl; -import net.citizensnpcs.nms.v1_18_R1.util.PlayerMoveControl; import net.citizensnpcs.npc.CitizensNPC; import net.citizensnpcs.npc.ai.NPCHolder; import net.citizensnpcs.util.Util; @@ -21,9 +20,8 @@ import net.minecraft.sounds.SoundEvent; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.ai.control.MoveControl; -import net.minecraft.world.entity.ai.navigation.GroundPathNavigation; -import net.minecraft.world.entity.ai.navigation.PathNavigation; import net.minecraft.world.entity.animal.Dolphin; import net.minecraft.world.entity.vehicle.AbstractMinecart; import net.minecraft.world.entity.vehicle.Boat; @@ -62,6 +60,8 @@ public class DolphinController extends MobEntityController { NMSImpl.clearGoals(npc, goalSelector, targetSelector); this.oldMoveController = this.moveControl; this.moveControl = new MoveControl(this); + this.getAttribute(Attributes.MOVEMENT_SPEED) + .setBaseValue(this.getAttribute(Attributes.MOVEMENT_SPEED).getBaseValue() / 10); } } @@ -95,11 +95,6 @@ public class DolphinController extends MobEntityController { } } - @Override - protected PathNavigation createNavigation(Level world) { - return new GroundPathNavigation(this, world); - } - @Override public void dismountTo(double d0, double d1, double d2) { if (npc == null) { @@ -141,16 +136,6 @@ public class DolphinController extends MobEntityController { return npc; } - @Override - public boolean isInWater() { - return npc == null ? super.isInWater() : false; - } - - @Override - public boolean isInWaterRainOrBubble() { - return npc == null ? super.isInWaterRainOrBubble() : true; - } - @Override public boolean isLeashed() { if (npc == null) @@ -186,8 +171,9 @@ public class DolphinController extends MobEntityController { // this method is called by both the entities involved - cancelling // it will not stop the NPC from moving. super.push(entity); - if (npc != null) + if (npc != null) { Util.callCollisionEvent(npc, entity.getBukkitEntity()); + } } @Override @@ -211,7 +197,7 @@ public class DolphinController extends MobEntityController { this.moveControl = this.oldMoveController; } if (!npc.useMinecraftAI() && this.moveControl == this.oldMoveController) { - this.moveControl = new PlayerMoveControl(this); + this.moveControl = new MoveControl(this); } npc.update(); } @@ -220,7 +206,9 @@ public class DolphinController extends MobEntityController { @Override public void travel(Vec3 vec3d) { if (npc == null || !npc.isFlyable()) { - super.travel(vec3d); + if (!NMSImpl.moveFish(npc, this, vec3d)) { + super.travel(vec3d); + } } else { NMSImpl.flyingMoveLogic(this, vec3d); } diff --git a/v1_18_R1/src/main/java/net/citizensnpcs/nms/v1_18_R1/entity/PufferFishController.java b/v1_18_R1/src/main/java/net/citizensnpcs/nms/v1_18_R1/entity/PufferFishController.java index 4fe42e215..90d84c7ea 100644 --- a/v1_18_R1/src/main/java/net/citizensnpcs/nms/v1_18_R1/entity/PufferFishController.java +++ b/v1_18_R1/src/main/java/net/citizensnpcs/nms/v1_18_R1/entity/PufferFishController.java @@ -25,7 +25,6 @@ import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityDimensions; import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.MoverType; import net.minecraft.world.entity.Pose; import net.minecraft.world.entity.ai.control.MoveControl; import net.minecraft.world.entity.animal.Pufferfish; @@ -253,11 +252,7 @@ public class PufferFishController extends MobEntityController { @Override public void travel(Vec3 vec3d) { if (npc == null || !npc.isFlyable()) { - if (!npc.useMinecraftAI() && isInWater() && !npc.getNavigator().isNavigating()) { - this.moveRelative(0.01F, vec3d); - this.move(MoverType.SELF, this.getDeltaMovement()); - this.setDeltaMovement(this.getDeltaMovement().scale(0.9D)); - } else { + if (!NMSImpl.moveFish(npc, this, vec3d)) { super.travel(vec3d); } } else { diff --git a/v1_18_R1/src/main/java/net/citizensnpcs/nms/v1_18_R1/entity/SalmonController.java b/v1_18_R1/src/main/java/net/citizensnpcs/nms/v1_18_R1/entity/SalmonController.java index b851c90e2..25c33df40 100644 --- a/v1_18_R1/src/main/java/net/citizensnpcs/nms/v1_18_R1/entity/SalmonController.java +++ b/v1_18_R1/src/main/java/net/citizensnpcs/nms/v1_18_R1/entity/SalmonController.java @@ -23,7 +23,6 @@ import net.minecraft.world.InteractionResult; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.MoverType; import net.minecraft.world.entity.ai.control.MoveControl; import net.minecraft.world.entity.animal.Salmon; import net.minecraft.world.entity.player.Player; @@ -229,11 +228,7 @@ public class SalmonController extends MobEntityController { @Override public void travel(Vec3 vec3d) { if (npc == null || !npc.isFlyable()) { - if (!npc.useMinecraftAI() && isInWater() && !npc.getNavigator().isNavigating()) { - this.moveRelative(0.01F, vec3d); - this.move(MoverType.SELF, this.getDeltaMovement()); - this.setDeltaMovement(this.getDeltaMovement().scale(0.9D)); - } else { + if (!NMSImpl.moveFish(npc, this, vec3d)) { super.travel(vec3d); } } else { diff --git a/v1_18_R1/src/main/java/net/citizensnpcs/nms/v1_18_R1/entity/TropicalFishController.java b/v1_18_R1/src/main/java/net/citizensnpcs/nms/v1_18_R1/entity/TropicalFishController.java index ef59a1603..39924139d 100644 --- a/v1_18_R1/src/main/java/net/citizensnpcs/nms/v1_18_R1/entity/TropicalFishController.java +++ b/v1_18_R1/src/main/java/net/citizensnpcs/nms/v1_18_R1/entity/TropicalFishController.java @@ -23,7 +23,6 @@ import net.minecraft.world.InteractionResult; import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; -import net.minecraft.world.entity.MoverType; import net.minecraft.world.entity.ai.control.MoveControl; import net.minecraft.world.entity.animal.TropicalFish; import net.minecraft.world.entity.player.Player; @@ -231,11 +230,7 @@ public class TropicalFishController extends MobEntityController { @Override public void travel(Vec3 vec3d) { if (npc == null || !npc.isFlyable()) { - if (!npc.useMinecraftAI() && isInWater() && !npc.getNavigator().isNavigating()) { - this.moveRelative(0.01F, vec3d); - this.move(MoverType.SELF, this.getDeltaMovement()); - this.setDeltaMovement(this.getDeltaMovement().scale(0.9D)); - } else { + if (!NMSImpl.moveFish(npc, this, vec3d)) { super.travel(vec3d); } } else { diff --git a/v1_18_R1/src/main/java/net/citizensnpcs/nms/v1_18_R1/entity/TurtleController.java b/v1_18_R1/src/main/java/net/citizensnpcs/nms/v1_18_R1/entity/TurtleController.java index aec680989..712620175 100644 --- a/v1_18_R1/src/main/java/net/citizensnpcs/nms/v1_18_R1/entity/TurtleController.java +++ b/v1_18_R1/src/main/java/net/citizensnpcs/nms/v1_18_R1/entity/TurtleController.java @@ -22,11 +22,8 @@ import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.Mob; -import net.minecraft.world.entity.MoverType; import net.minecraft.world.entity.ai.control.JumpControl; import net.minecraft.world.entity.ai.control.MoveControl; -import net.minecraft.world.entity.ai.navigation.GroundPathNavigation; -import net.minecraft.world.entity.ai.navigation.PathNavigation; import net.minecraft.world.entity.animal.Turtle; import net.minecraft.world.entity.vehicle.AbstractMinecart; import net.minecraft.world.entity.vehicle.Boat; @@ -95,14 +92,6 @@ public class TurtleController extends MobEntityController { } } - @Override - protected PathNavigation createNavigation(Level world) { - if (npc == null) { - return super.createNavigation(world); - } - return new GroundPathNavigation(this, world); - } - @Override public void customServerAiStep() { super.customServerAiStep(); @@ -216,11 +205,7 @@ public class TurtleController extends MobEntityController { @Override public void travel(Vec3 vec3d) { if (npc == null || !npc.isFlyable()) { - if (!npc.useMinecraftAI() && isInWater() && !npc.getNavigator().isNavigating()) { - this.moveRelative(0.1F, vec3d); - this.move(MoverType.SELF, this.getDeltaMovement()); - this.setDeltaMovement(this.getDeltaMovement().scale(0.9D)); - } else { + if (!NMSImpl.moveFish(npc, this, vec3d)) { super.travel(vec3d); } } else { diff --git a/v1_18_R1/src/main/java/net/citizensnpcs/nms/v1_18_R1/util/NMSImpl.java b/v1_18_R1/src/main/java/net/citizensnpcs/nms/v1_18_R1/util/NMSImpl.java index dacc8d025..830049223 100644 --- a/v1_18_R1/src/main/java/net/citizensnpcs/nms/v1_18_R1/util/NMSImpl.java +++ b/v1_18_R1/src/main/java/net/citizensnpcs/nms/v1_18_R1/util/NMSImpl.java @@ -255,10 +255,13 @@ import net.minecraft.world.entity.ai.navigation.PathNavigation; import net.minecraft.world.entity.animal.AbstractFish; import net.minecraft.world.entity.animal.AbstractSchoolingFish; import net.minecraft.world.entity.animal.Cat; +import net.minecraft.world.entity.animal.Dolphin; import net.minecraft.world.entity.animal.Panda; import net.minecraft.world.entity.animal.PolarBear; import net.minecraft.world.entity.animal.Pufferfish; import net.minecraft.world.entity.animal.Rabbit; +import net.minecraft.world.entity.animal.Turtle; +import net.minecraft.world.entity.animal.axolotl.Axolotl; import net.minecraft.world.entity.animal.horse.AbstractHorse; import net.minecraft.world.entity.boss.enderdragon.EnderDragon; import net.minecraft.world.entity.boss.wither.WitherBoss; @@ -1748,6 +1751,20 @@ public class NMSImpl implements NMSBridge { minecart.setDisplayOffset(offset); } + public static boolean moveFish(NPC npc, Mob handle, Vec3 vec3d) { + if (npc == null) { + return false; + } + if (!npc.useMinecraftAI() && handle.isInWater() && !npc.getNavigator().isNavigating()) { + handle.moveRelative((handle instanceof Dolphin || handle instanceof Axolotl) ? handle.getSpeed() + : handle instanceof Turtle ? 0.1F : 0.01F, vec3d); + handle.move(MoverType.SELF, handle.getDeltaMovement()); + handle.setDeltaMovement(handle.getDeltaMovement().scale(0.9)); + return true; + } + return false; + } + public static void resetPuffTicks(Pufferfish fish) { try { PUFFERFISH_C.invoke(fish, 0);