diff --git a/main/src/main/java/net/citizensnpcs/npc/CitizensNPC.java b/main/src/main/java/net/citizensnpcs/npc/CitizensNPC.java index 062e662b9..af8d9bde8 100644 --- a/main/src/main/java/net/citizensnpcs/npc/CitizensNPC.java +++ b/main/src/main/java/net/citizensnpcs/npc/CitizensNPC.java @@ -487,7 +487,8 @@ public class CitizensNPC extends AbstractNPC { NMS.activate(getEntity()); } } - boolean shouldSwim = data().get(NPC.Metadata.SWIM, SwimmingExaminer.isWaterMob(getEntity())) + boolean shouldSwim = data().get(NPC.Metadata.SWIM, + !useMinecraftAI() && SwimmingExaminer.isWaterMob(getEntity())) && MinecraftBlockExaminer.isLiquid(loc.getBlock().getType()); if (navigator.isNavigating()) { if (shouldSwim) { @@ -610,7 +611,7 @@ public class CitizensNPC extends AbstractNPC { } } - private static SetMultimap CHUNK_LOADERS = HashMultimap.create(); + private static final SetMultimap CHUNK_LOADERS = HashMultimap.create(); private static boolean SUPPORT_GLOWING = false; private static boolean SUPPORT_NODAMAGE_TICKS = false; private static boolean SUPPORT_PICKUP_ITEMS = false; 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 980e4c92a..7053e1b44 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,10 +6,7 @@ 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.npc.NPC; -import net.citizensnpcs.nms.v1_17_R1.util.EntityMoveControl; import net.citizensnpcs.nms.v1_17_R1.util.ForwardingNPCHolder; import net.citizensnpcs.nms.v1_17_R1.util.NMSBoundingBox; import net.citizensnpcs.nms.v1_17_R1.util.NMSImpl; @@ -26,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.ai.Brain; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.ai.control.MoveControl; import net.minecraft.world.entity.animal.axolotl.Axolotl; @@ -171,13 +167,6 @@ public class AxolotlController extends MobEntityController { return NMSBoundingBox.makeBB(npc, super.makeBoundingBox()); } - @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()) @@ -226,9 +215,13 @@ public class AxolotlController extends MobEntityController { NMSImpl.updateMinecraftAIState(npc, this); if (npc.useMinecraftAI() && this.moveControl != this.oldMoveController) { this.moveControl = this.oldMoveController; + this.getAttribute(Attributes.MOVEMENT_SPEED) + .setBaseValue(this.getAttribute(Attributes.MOVEMENT_SPEED).getBaseValue() * 10); } if (!npc.useMinecraftAI() && this.moveControl == this.oldMoveController) { - this.moveControl = new EntityMoveControl(this); + this.moveControl = new MoveControl(this); + this.getAttribute(Attributes.MOVEMENT_SPEED) + .setBaseValue(this.getAttribute(Attributes.MOVEMENT_SPEED).getBaseValue() / 10); } npc.update(); } 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 57d0a1610..67b1f3e5c 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 @@ -7,7 +7,6 @@ import org.bukkit.craftbukkit.v1_17_R1.entity.CraftEntity; import org.bukkit.util.Vector; import net.citizensnpcs.api.npc.NPC; -import net.citizensnpcs.nms.v1_17_R1.util.EntityMoveControl; import net.citizensnpcs.nms.v1_17_R1.util.ForwardingNPCHolder; import net.citizensnpcs.nms.v1_17_R1.util.NMSBoundingBox; import net.citizensnpcs.nms.v1_17_R1.util.NMSImpl; @@ -52,9 +51,7 @@ public class DolphinController extends MobEntityController { public static class EntityDolphinNPC extends Dolphin implements NPCHolder { private boolean inProtectedTick; - private final CitizensNPC npc; - private MoveControl oldMoveController; public EntityDolphinNPC(EntityType types, Level level) { @@ -212,9 +209,13 @@ public class DolphinController extends MobEntityController { NMSImpl.updateMinecraftAIState(npc, this); if (npc.useMinecraftAI() && this.moveControl != this.oldMoveController) { this.moveControl = this.oldMoveController; + this.getAttribute(Attributes.MOVEMENT_SPEED) + .setBaseValue(this.getAttribute(Attributes.MOVEMENT_SPEED).getBaseValue() * 10); } if (!npc.useMinecraftAI() && this.moveControl == this.oldMoveController) { - this.moveControl = new EntityMoveControl(this); + this.moveControl = new MoveControl(this); + this.getAttribute(Attributes.MOVEMENT_SPEED) + .setBaseValue(this.getAttribute(Attributes.MOVEMENT_SPEED).getBaseValue() / 10); } npc.update(); } diff --git a/v1_18_R2/src/main/java/net/citizensnpcs/nms/v1_18_R2/entity/AxolotlController.java b/v1_18_R2/src/main/java/net/citizensnpcs/nms/v1_18_R2/entity/AxolotlController.java index e2b232635..37548bc18 100644 --- a/v1_18_R2/src/main/java/net/citizensnpcs/nms/v1_18_R2/entity/AxolotlController.java +++ b/v1_18_R2/src/main/java/net/citizensnpcs/nms/v1_18_R2/entity/AxolotlController.java @@ -6,8 +6,6 @@ import org.bukkit.craftbukkit.v1_18_R2.entity.CraftAxolotl; import org.bukkit.craftbukkit.v1_18_R2.entity.CraftEntity; import org.bukkit.util.Vector; -import com.mojang.serialization.Dynamic; - import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.nms.v1_18_R2.util.ForwardingNPCHolder; import net.citizensnpcs.nms.v1_18_R2.util.NMSBoundingBox; @@ -26,7 +24,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.ai.Brain; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.ai.control.MoveControl; import net.minecraft.world.entity.animal.axolotl.Axolotl; @@ -60,7 +57,6 @@ public class AxolotlController extends MobEntityController { public static class EntityAxolotlNPC extends Axolotl implements NPCHolder { private final CitizensNPC npc; - private MoveControl oldMoveController; public EntityAxolotlNPC(EntityType types, Level level) { @@ -171,13 +167,6 @@ public class AxolotlController extends MobEntityController { return NMSBoundingBox.makeBB(npc, super.makeBoundingBox()); } - @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()) @@ -233,9 +222,13 @@ public class AxolotlController extends MobEntityController { NMSImpl.updateMinecraftAIState(npc, this); if (npc.useMinecraftAI() && this.moveControl != this.oldMoveController) { this.moveControl = this.oldMoveController; + this.getAttribute(Attributes.MOVEMENT_SPEED) + .setBaseValue(this.getAttribute(Attributes.MOVEMENT_SPEED).getBaseValue() * 10); } if (!npc.useMinecraftAI() && this.moveControl == this.oldMoveController) { this.moveControl = new MoveControl(this); + this.getAttribute(Attributes.MOVEMENT_SPEED) + .setBaseValue(this.getAttribute(Attributes.MOVEMENT_SPEED).getBaseValue() / 10); } npc.update(); } diff --git a/v1_18_R2/src/main/java/net/citizensnpcs/nms/v1_18_R2/entity/DolphinController.java b/v1_18_R2/src/main/java/net/citizensnpcs/nms/v1_18_R2/entity/DolphinController.java index 33ff19bfa..b0e0864c6 100644 --- a/v1_18_R2/src/main/java/net/citizensnpcs/nms/v1_18_R2/entity/DolphinController.java +++ b/v1_18_R2/src/main/java/net/citizensnpcs/nms/v1_18_R2/entity/DolphinController.java @@ -52,9 +52,7 @@ public class DolphinController extends MobEntityController { public static class EntityDolphinNPC extends Dolphin implements NPCHolder { private boolean inProtectedTick; - private final CitizensNPC npc; - private MoveControl oldMoveController; public EntityDolphinNPC(EntityType types, Level level) { @@ -219,9 +217,13 @@ public class DolphinController extends MobEntityController { NMSImpl.updateMinecraftAIState(npc, this); if (npc.useMinecraftAI() && this.moveControl != this.oldMoveController) { this.moveControl = this.oldMoveController; + this.getAttribute(Attributes.MOVEMENT_SPEED) + .setBaseValue(this.getAttribute(Attributes.MOVEMENT_SPEED).getBaseValue() * 10); } if (!npc.useMinecraftAI() && this.moveControl == this.oldMoveController) { this.moveControl = new MoveControl(this); + this.getAttribute(Attributes.MOVEMENT_SPEED) + .setBaseValue(this.getAttribute(Attributes.MOVEMENT_SPEED).getBaseValue() / 10); } npc.update(); } diff --git a/v1_19_R3/src/main/java/net/citizensnpcs/nms/v1_19_R3/entity/AxolotlController.java b/v1_19_R3/src/main/java/net/citizensnpcs/nms/v1_19_R3/entity/AxolotlController.java index 6fc3cbf69..4e78beab1 100644 --- a/v1_19_R3/src/main/java/net/citizensnpcs/nms/v1_19_R3/entity/AxolotlController.java +++ b/v1_19_R3/src/main/java/net/citizensnpcs/nms/v1_19_R3/entity/AxolotlController.java @@ -6,8 +6,6 @@ import org.bukkit.craftbukkit.v1_19_R3.entity.CraftAxolotl; import org.bukkit.craftbukkit.v1_19_R3.entity.CraftEntity; import org.bukkit.util.Vector; -import com.mojang.serialization.Dynamic; - import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.nms.v1_19_R3.util.ForwardingNPCHolder; import net.citizensnpcs.nms.v1_19_R3.util.NMSBoundingBox; @@ -27,7 +25,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.ai.Brain; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.ai.control.MoveControl; import net.minecraft.world.entity.animal.axolotl.Axolotl; @@ -172,13 +169,6 @@ public class AxolotlController extends MobEntityController { return NMSBoundingBox.makeBB(npc, super.makeBoundingBox()); } - @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()) @@ -234,9 +224,13 @@ public class AxolotlController extends MobEntityController { NMSImpl.updateMinecraftAIState(npc, this); if (npc.useMinecraftAI() && this.moveControl != this.oldMoveController) { this.moveControl = this.oldMoveController; + this.getAttribute(Attributes.MOVEMENT_SPEED) + .setBaseValue(this.getAttribute(Attributes.MOVEMENT_SPEED).getBaseValue() * 10); } if (!npc.useMinecraftAI() && this.moveControl == this.oldMoveController) { this.moveControl = new MoveControl(this); + this.getAttribute(Attributes.MOVEMENT_SPEED) + .setBaseValue(this.getAttribute(Attributes.MOVEMENT_SPEED).getBaseValue() / 10); } npc.update(); } diff --git a/v1_19_R3/src/main/java/net/citizensnpcs/nms/v1_19_R3/entity/DolphinController.java b/v1_19_R3/src/main/java/net/citizensnpcs/nms/v1_19_R3/entity/DolphinController.java index 5f0a2f176..241053f28 100644 --- a/v1_19_R3/src/main/java/net/citizensnpcs/nms/v1_19_R3/entity/DolphinController.java +++ b/v1_19_R3/src/main/java/net/citizensnpcs/nms/v1_19_R3/entity/DolphinController.java @@ -220,9 +220,13 @@ public class DolphinController extends MobEntityController { NMSImpl.updateMinecraftAIState(npc, this); if (npc.useMinecraftAI() && this.moveControl != this.oldMoveController) { this.moveControl = this.oldMoveController; + this.getAttribute(Attributes.MOVEMENT_SPEED) + .setBaseValue(this.getAttribute(Attributes.MOVEMENT_SPEED).getBaseValue() * 10); } if (!npc.useMinecraftAI() && this.moveControl == this.oldMoveController) { this.moveControl = new MoveControl(this); + this.getAttribute(Attributes.MOVEMENT_SPEED) + .setBaseValue(this.getAttribute(Attributes.MOVEMENT_SPEED).getBaseValue() / 10); } npc.update(); } diff --git a/v1_20_R4/src/main/java/net/citizensnpcs/nms/v1_20_R4/entity/AxolotlController.java b/v1_20_R4/src/main/java/net/citizensnpcs/nms/v1_20_R4/entity/AxolotlController.java index 7009212ab..6154e3bbc 100644 --- a/v1_20_R4/src/main/java/net/citizensnpcs/nms/v1_20_R4/entity/AxolotlController.java +++ b/v1_20_R4/src/main/java/net/citizensnpcs/nms/v1_20_R4/entity/AxolotlController.java @@ -5,8 +5,6 @@ import org.bukkit.craftbukkit.v1_20_R4.CraftServer; import org.bukkit.craftbukkit.v1_20_R4.entity.CraftAxolotl; import org.bukkit.craftbukkit.v1_20_R4.entity.CraftEntity; -import com.mojang.serialization.Dynamic; - import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.nms.v1_20_R4.util.ForwardingNPCHolder; import net.citizensnpcs.nms.v1_20_R4.util.NMSBoundingBox; @@ -25,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.ai.Brain; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.ai.control.MoveControl; import net.minecraft.world.entity.animal.axolotl.Axolotl; @@ -170,13 +167,6 @@ public class AxolotlController extends MobEntityController { return NMSBoundingBox.makeBB(npc, super.makeBoundingBox()); } - @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()) @@ -224,9 +214,13 @@ public class AxolotlController extends MobEntityController { NMSImpl.updateMinecraftAIState(npc, this); if (npc.useMinecraftAI() && this.moveControl != this.oldMoveController) { this.moveControl = this.oldMoveController; + this.getAttribute(Attributes.MOVEMENT_SPEED) + .setBaseValue(this.getAttribute(Attributes.MOVEMENT_SPEED).getBaseValue() * 10); } if (!npc.useMinecraftAI() && this.moveControl == this.oldMoveController) { this.moveControl = new MoveControl(this); + this.getAttribute(Attributes.MOVEMENT_SPEED) + .setBaseValue(this.getAttribute(Attributes.MOVEMENT_SPEED).getBaseValue() / 10); } npc.update(); } diff --git a/v1_20_R4/src/main/java/net/citizensnpcs/nms/v1_20_R4/entity/DolphinController.java b/v1_20_R4/src/main/java/net/citizensnpcs/nms/v1_20_R4/entity/DolphinController.java index 7a05f8b36..3cf32ca1a 100644 --- a/v1_20_R4/src/main/java/net/citizensnpcs/nms/v1_20_R4/entity/DolphinController.java +++ b/v1_20_R4/src/main/java/net/citizensnpcs/nms/v1_20_R4/entity/DolphinController.java @@ -208,9 +208,13 @@ public class DolphinController extends MobEntityController { NMSImpl.updateMinecraftAIState(npc, this); if (npc.useMinecraftAI() && this.moveControl != this.oldMoveController) { this.moveControl = this.oldMoveController; + this.getAttribute(Attributes.MOVEMENT_SPEED) + .setBaseValue(this.getAttribute(Attributes.MOVEMENT_SPEED).getBaseValue() * 10); } if (!npc.useMinecraftAI() && this.moveControl == this.oldMoveController) { this.moveControl = new MoveControl(this); + this.getAttribute(Attributes.MOVEMENT_SPEED) + .setBaseValue(this.getAttribute(Attributes.MOVEMENT_SPEED).getBaseValue() / 10); } npc.update(); } diff --git a/v1_21_R1/src/main/java/net/citizensnpcs/nms/v1_21_R1/entity/AxolotlController.java b/v1_21_R1/src/main/java/net/citizensnpcs/nms/v1_21_R1/entity/AxolotlController.java index 0737894a8..68cb44fee 100644 --- a/v1_21_R1/src/main/java/net/citizensnpcs/nms/v1_21_R1/entity/AxolotlController.java +++ b/v1_21_R1/src/main/java/net/citizensnpcs/nms/v1_21_R1/entity/AxolotlController.java @@ -5,8 +5,6 @@ import org.bukkit.craftbukkit.v1_21_R1.CraftServer; import org.bukkit.craftbukkit.v1_21_R1.entity.CraftAxolotl; import org.bukkit.craftbukkit.v1_21_R1.entity.CraftEntity; -import com.mojang.serialization.Dynamic; - import net.citizensnpcs.api.npc.NPC; import net.citizensnpcs.nms.v1_21_R1.util.ForwardingNPCHolder; import net.citizensnpcs.nms.v1_21_R1.util.NMSBoundingBox; @@ -24,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.ai.Brain; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.ai.control.MoveControl; import net.minecraft.world.entity.animal.axolotl.Axolotl; @@ -59,7 +56,6 @@ public class AxolotlController extends MobEntityController { public static class EntityAxolotlNPC extends Axolotl implements NPCHolder { private final CitizensNPC npc; - private MoveControl oldMoveController; public EntityAxolotlNPC(EntityType types, Level level) { @@ -177,13 +173,6 @@ public class AxolotlController extends MobEntityController { return NMSBoundingBox.makeBB(npc, super.makeBoundingBox()); } - @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()) @@ -224,9 +213,13 @@ public class AxolotlController extends MobEntityController { NMSImpl.updateMinecraftAIState(npc, this); if (npc.useMinecraftAI() && this.moveControl != this.oldMoveController) { this.moveControl = this.oldMoveController; + this.getAttribute(Attributes.MOVEMENT_SPEED) + .setBaseValue(this.getAttribute(Attributes.MOVEMENT_SPEED).getBaseValue() * 10); } if (!npc.useMinecraftAI() && this.moveControl == this.oldMoveController) { this.moveControl = new MoveControl(this); + this.getAttribute(Attributes.MOVEMENT_SPEED) + .setBaseValue(this.getAttribute(Attributes.MOVEMENT_SPEED).getBaseValue() / 10); } npc.update(); } diff --git a/v1_21_R1/src/main/java/net/citizensnpcs/nms/v1_21_R1/entity/DolphinController.java b/v1_21_R1/src/main/java/net/citizensnpcs/nms/v1_21_R1/entity/DolphinController.java index c4a62c80c..cd34d86ef 100644 --- a/v1_21_R1/src/main/java/net/citizensnpcs/nms/v1_21_R1/entity/DolphinController.java +++ b/v1_21_R1/src/main/java/net/citizensnpcs/nms/v1_21_R1/entity/DolphinController.java @@ -208,9 +208,13 @@ public class DolphinController extends MobEntityController { NMSImpl.updateMinecraftAIState(npc, this); if (npc.useMinecraftAI() && this.moveControl != this.oldMoveController) { this.moveControl = this.oldMoveController; + this.getAttribute(Attributes.MOVEMENT_SPEED) + .setBaseValue(this.getAttribute(Attributes.MOVEMENT_SPEED).getBaseValue() * 10); } if (!npc.useMinecraftAI() && this.moveControl == this.oldMoveController) { this.moveControl = new MoveControl(this); + this.getAttribute(Attributes.MOVEMENT_SPEED) + .setBaseValue(this.getAttribute(Attributes.MOVEMENT_SPEED).getBaseValue() / 10); } npc.update(); } diff --git a/v1_21_R1/src/main/java/net/citizensnpcs/nms/v1_21_R1/util/NMSImpl.java b/v1_21_R1/src/main/java/net/citizensnpcs/nms/v1_21_R1/util/NMSImpl.java index 2f499b67a..5af1f71c9 100644 --- a/v1_21_R1/src/main/java/net/citizensnpcs/nms/v1_21_R1/util/NMSImpl.java +++ b/v1_21_R1/src/main/java/net/citizensnpcs/nms/v1_21_R1/util/NMSImpl.java @@ -2316,9 +2316,9 @@ public class NMSImpl implements NMSBridge { } public static boolean moveFish(NPC npc, Mob handle, Vec3 vec3d) { - if (npc == null) + if (npc == null || npc.useMinecraftAI()) return false; - if (!npc.useMinecraftAI() && handle.isInWater() && !npc.getNavigator().isNavigating()) { + if (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());