From 7683516d62e772633b3cd882b8be16afd9fbb58c Mon Sep 17 00:00:00 2001 From: fullwall Date: Thu, 20 Jan 2022 17:10:52 +0800 Subject: [PATCH] Avoid setting NPC.COLLIDABLE_METADATA on Player NPCs --- .../main/java/net/citizensnpcs/commands/NPCCommands.java | 1 + .../src/main/java/net/citizensnpcs/trait/Controllable.java | 6 +++--- main/src/main/java/net/citizensnpcs/util/Util.java | 2 +- .../citizensnpcs/nms/v1_10_R1/entity/EntityHumanNPC.java | 4 +++- .../citizensnpcs/nms/v1_11_R1/entity/EntityHumanNPC.java | 4 +++- .../citizensnpcs/nms/v1_12_R1/entity/EntityHumanNPC.java | 4 +++- .../citizensnpcs/nms/v1_13_R2/entity/EntityHumanNPC.java | 4 +++- .../citizensnpcs/nms/v1_14_R1/entity/EntityHumanNPC.java | 4 +++- .../citizensnpcs/nms/v1_15_R1/entity/EntityHumanNPC.java | 4 +++- .../citizensnpcs/nms/v1_16_R3/entity/EntityHumanNPC.java | 4 +++- .../citizensnpcs/nms/v1_17_R1/entity/EntityHumanNPC.java | 4 +++- .../citizensnpcs/nms/v1_18_R1/entity/EntityHumanNPC.java | 4 +++- .../nms/v1_18_R1/entity/RavagerController.java | 7 +++++++ .../citizensnpcs/nms/v1_8_R3/entity/EntityHumanNPC.java | 4 +++- 14 files changed, 42 insertions(+), 14 deletions(-) diff --git a/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java b/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java index 1d9107181..19e4be15e 100644 --- a/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java +++ b/main/src/main/java/net/citizensnpcs/commands/NPCCommands.java @@ -1197,6 +1197,7 @@ public class NPCCommands { key = NPC.Metadata.valueOf(key.toUpperCase()).getKey(); } catch (IllegalArgumentException e) { } + if (command.equals("set")) { if (args.argsLength() != 4) throw new CommandException(); diff --git a/main/src/main/java/net/citizensnpcs/trait/Controllable.java b/main/src/main/java/net/citizensnpcs/trait/Controllable.java index 48f4381b1..1d7d7fcbf 100644 --- a/main/src/main/java/net/citizensnpcs/trait/Controllable.java +++ b/main/src/main/java/net/citizensnpcs/trait/Controllable.java @@ -275,6 +275,7 @@ public class Controllable extends Trait implements Toggleable, CommandConfigurab vel = vel.setX(dXcos * speed * speedMod).setZ(dXsin * speed * speedMod); } + vel = vel.add(new Vector( passenger.getVelocity().getX() * speedMod * Setting.CONTROLLABLE_GROUND_DIRECTION_MODIFIER.asDouble(), 0D, @@ -317,9 +318,8 @@ public class Controllable extends Trait implements Toggleable, CommandConfigurab boolean onGround = NMS.isOnGround(npc.getEntity()); float speedMod = npc.getNavigator().getDefaultParameters() .modifiedSpeed((onGround ? GROUND_SPEED : AIR_SPEED)); - if (!Util.isHorse(npc.getEntity().getType()) || npc.getEntity().getType().name().equals("LLAMA") - || npc.getEntity().getType().name().equals("TRADER_LLAMA")) { - // just use minecraft horse physics + if (!Util.isHorse(npc.getEntity().getType())) { + // use minecraft horse physics speed = updateHorizontalSpeed(npc.getEntity(), rider, speed, speedMod); } diff --git a/main/src/main/java/net/citizensnpcs/util/Util.java b/main/src/main/java/net/citizensnpcs/util/Util.java index 51a5e7695..4ac788c41 100644 --- a/main/src/main/java/net/citizensnpcs/util/Util.java +++ b/main/src/main/java/net/citizensnpcs/util/Util.java @@ -52,7 +52,7 @@ public class Util { return new Vector(x, y, z); } boolean allowed = !npc.data().get(NPC.DEFAULT_PROTECTED_METADATA, true) - || (npc.data().has(NPC.COLLIDABLE_METADATA) && npc.data().get(NPC.COLLIDABLE_METADATA, true)); + || (npc.data().has(NPC.COLLIDABLE_METADATA) && npc.data(). get(NPC.COLLIDABLE_METADATA)); if (NPCPushEvent.getHandlerList().getRegisteredListeners().length == 0) { return allowed ? new Vector(x, y, z) : null; } diff --git a/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/EntityHumanNPC.java b/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/EntityHumanNPC.java index 5247a8050..861aa016f 100644 --- a/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/EntityHumanNPC.java +++ b/v1_10_R1/src/main/java/net/citizensnpcs/nms/v1_10_R1/entity/EntityHumanNPC.java @@ -266,7 +266,9 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable @Override public boolean isCollidable() { - return npc == null ? super.isCollidable() : npc.data().get(NPC.COLLIDABLE_METADATA, true); + return npc == null ? super.isCollidable() + : npc.data().has(NPC.COLLIDABLE_METADATA) ? npc.data(). get(NPC.COLLIDABLE_METADATA) + : !npc.isProtected(); } public boolean isNavigating() { diff --git a/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/entity/EntityHumanNPC.java b/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/entity/EntityHumanNPC.java index 823442474..5b9511af2 100644 --- a/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/entity/EntityHumanNPC.java +++ b/v1_11_R1/src/main/java/net/citizensnpcs/nms/v1_11_R1/entity/EntityHumanNPC.java @@ -293,7 +293,9 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable @Override public boolean isCollidable() { - return npc == null ? super.isCollidable() : npc.data().get(NPC.COLLIDABLE_METADATA, true); + return npc == null ? super.isCollidable() + : npc.data().has(NPC.COLLIDABLE_METADATA) ? npc.data(). get(NPC.COLLIDABLE_METADATA) + : !npc.isProtected(); } public boolean isNavigating() { diff --git a/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/entity/EntityHumanNPC.java b/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/entity/EntityHumanNPC.java index fc82255b4..56fb261a1 100644 --- a/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/entity/EntityHumanNPC.java +++ b/v1_12_R1/src/main/java/net/citizensnpcs/nms/v1_12_R1/entity/EntityHumanNPC.java @@ -320,7 +320,9 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable @Override public boolean isCollidable() { - return npc == null ? super.isCollidable() : npc.data().get(NPC.COLLIDABLE_METADATA, true); + return npc == null ? super.isCollidable() + : npc.data().has(NPC.COLLIDABLE_METADATA) ? npc.data(). get(NPC.COLLIDABLE_METADATA) + : !npc.isProtected(); } public boolean isNavigating() { diff --git a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/EntityHumanNPC.java b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/EntityHumanNPC.java index ba371c7a9..f7dd9df13 100644 --- a/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/EntityHumanNPC.java +++ b/v1_13_R2/src/main/java/net/citizensnpcs/nms/v1_13_R2/entity/EntityHumanNPC.java @@ -303,7 +303,9 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable @Override public boolean isCollidable() { - return npc == null ? super.isCollidable() : npc.data().get(NPC.COLLIDABLE_METADATA, true); + return npc == null ? super.isCollidable() + : npc.data().has(NPC.COLLIDABLE_METADATA) ? npc.data(). get(NPC.COLLIDABLE_METADATA) + : !npc.isProtected(); } public boolean isNavigating() { diff --git a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/EntityHumanNPC.java b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/EntityHumanNPC.java index 169a76a83..5aac70ae5 100644 --- a/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/EntityHumanNPC.java +++ b/v1_14_R1/src/main/java/net/citizensnpcs/nms/v1_14_R1/entity/EntityHumanNPC.java @@ -299,7 +299,9 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable @Override public boolean isCollidable() { - return npc == null ? super.isCollidable() : npc.data().get(NPC.COLLIDABLE_METADATA, true); + return npc == null ? super.isCollidable() + : npc.data().has(NPC.COLLIDABLE_METADATA) ? npc.data(). get(NPC.COLLIDABLE_METADATA) + : !npc.isProtected(); } public boolean isNavigating() { diff --git a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/EntityHumanNPC.java b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/EntityHumanNPC.java index eeba4270e..68ea7cc46 100644 --- a/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/EntityHumanNPC.java +++ b/v1_15_R1/src/main/java/net/citizensnpcs/nms/v1_15_R1/entity/EntityHumanNPC.java @@ -300,7 +300,9 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable @Override public boolean isCollidable() { - return npc == null ? super.isCollidable() : npc.data().get(NPC.COLLIDABLE_METADATA, true); + return npc == null ? super.isCollidable() + : npc.data().has(NPC.COLLIDABLE_METADATA) ? npc.data(). get(NPC.COLLIDABLE_METADATA) + : !npc.isProtected(); } public boolean isNavigating() { diff --git a/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/entity/EntityHumanNPC.java b/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/entity/EntityHumanNPC.java index 11878c33b..002f246da 100644 --- a/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/entity/EntityHumanNPC.java +++ b/v1_16_R3/src/main/java/net/citizensnpcs/nms/v1_16_R3/entity/EntityHumanNPC.java @@ -330,7 +330,9 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable @Override public boolean isCollidable() { - return npc == null ? super.isCollidable() : npc.data().get(NPC.COLLIDABLE_METADATA, true); + return npc == null ? super.isCollidable() + : npc.data().has(NPC.COLLIDABLE_METADATA) ? npc.data(). get(NPC.COLLIDABLE_METADATA) + : !npc.isProtected(); } public boolean isNavigating() { diff --git a/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/entity/EntityHumanNPC.java b/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/entity/EntityHumanNPC.java index 96791d79e..bc4810b12 100644 --- a/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/entity/EntityHumanNPC.java +++ b/v1_17_R1/src/main/java/net/citizensnpcs/nms/v1_17_R1/entity/EntityHumanNPC.java @@ -371,7 +371,9 @@ public class EntityHumanNPC extends ServerPlayer implements NPCHolder, Skinnable @Override public boolean isPushable() { - return npc == null ? super.isPushable() : npc.data().get(NPC.COLLIDABLE_METADATA, true); + return npc == null ? super.isPushable() + : npc.data().has(NPC.COLLIDABLE_METADATA) ? npc.data(). get(NPC.COLLIDABLE_METADATA) + : !npc.isProtected(); } private void moveOnCurrentHeading() { diff --git a/v1_18_R1/src/main/java/net/citizensnpcs/nms/v1_18_R1/entity/EntityHumanNPC.java b/v1_18_R1/src/main/java/net/citizensnpcs/nms/v1_18_R1/entity/EntityHumanNPC.java index 3c412c9cb..a5a33647c 100644 --- a/v1_18_R1/src/main/java/net/citizensnpcs/nms/v1_18_R1/entity/EntityHumanNPC.java +++ b/v1_18_R1/src/main/java/net/citizensnpcs/nms/v1_18_R1/entity/EntityHumanNPC.java @@ -375,7 +375,9 @@ public class EntityHumanNPC extends ServerPlayer implements NPCHolder, Skinnable @Override public boolean isPushable() { - return npc == null ? super.isPushable() : npc.data().get(NPC.COLLIDABLE_METADATA, true); + return npc == null ? super.isPushable() + : npc.data().has(NPC.COLLIDABLE_METADATA) ? npc.data(). get(NPC.COLLIDABLE_METADATA) + : !npc.isProtected(); } private void moveOnCurrentHeading() { diff --git a/v1_18_R1/src/main/java/net/citizensnpcs/nms/v1_18_R1/entity/RavagerController.java b/v1_18_R1/src/main/java/net/citizensnpcs/nms/v1_18_R1/entity/RavagerController.java index a72fec234..af9a253d6 100644 --- a/v1_18_R1/src/main/java/net/citizensnpcs/nms/v1_18_R1/entity/RavagerController.java +++ b/v1_18_R1/src/main/java/net/citizensnpcs/nms/v1_18_R1/entity/RavagerController.java @@ -54,6 +54,13 @@ public class RavagerController extends MobEntityController { } } + @Override + public boolean canBeControlledByRider() { + return (npc == null || npc.data(). get(NPC.Metadata.USE_MINECRAFT_AI, false)) + ? super.canBeControlledByRider() + : false; + } + @Override protected boolean canRide(Entity entity) { if (npc != null && (entity instanceof Boat || entity instanceof AbstractMinecart)) { diff --git a/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/entity/EntityHumanNPC.java b/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/entity/EntityHumanNPC.java index 1a58890bf..f52c3cd5a 100644 --- a/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/entity/EntityHumanNPC.java +++ b/v1_8_R3/src/main/java/net/citizensnpcs/nms/v1_8_R3/entity/EntityHumanNPC.java @@ -101,7 +101,9 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable @Override public boolean ae() { - return npc == null ? super.ae() : npc.data().get(NPC.COLLIDABLE_METADATA, true); + return npc == null ? super.ae() + : npc.data().has(NPC.COLLIDABLE_METADATA) ? npc.data(). get(NPC.COLLIDABLE_METADATA) + : !npc.isProtected(); } @Override