diff --git a/src/main/java/net/citizensnpcs/EventListen.java b/src/main/java/net/citizensnpcs/EventListen.java index 36c1db2a8..3ac7f3d97 100644 --- a/src/main/java/net/citizensnpcs/EventListen.java +++ b/src/main/java/net/citizensnpcs/EventListen.java @@ -187,6 +187,7 @@ public class EventListen implements Listener { @EventHandler(ignoreCancelled = true) public void onEntityDamage(EntityDamageEvent event) { NPC npc = npcRegistry.getNPC(event.getEntity()); + if (npc == null) { if (event instanceof EntityDamageByEntityEvent) { npc = npcRegistry.getNPC(((EntityDamageByEntityEvent) event).getDamager()); diff --git a/src/main/java/net/citizensnpcs/npc/entity/EntityHumanNPC.java b/src/main/java/net/citizensnpcs/npc/entity/EntityHumanNPC.java index 6c817bba2..2a5d80f5c 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/EntityHumanNPC.java +++ b/src/main/java/net/citizensnpcs/npc/entity/EntityHumanNPC.java @@ -273,6 +273,7 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable super.m(); if (npc == null) return; + boolean navigating = npc.getNavigator().isNavigating(); updatePackets(navigating); if (gravity && !navigating && getBukkitEntity() != null diff --git a/src/main/java/net/citizensnpcs/npc/entity/GhastController.java b/src/main/java/net/citizensnpcs/npc/entity/GhastController.java index cddcc9348..079e9bdb1 100644 --- a/src/main/java/net/citizensnpcs/npc/entity/GhastController.java +++ b/src/main/java/net/citizensnpcs/npc/entity/GhastController.java @@ -70,8 +70,9 @@ public class GhastController extends MobEntityController { // this method is called by both the entities involved - cancelling // it will not stop the NPC from moving. super.collide(entity); - if (npc != null) + if (npc != null) { Util.callCollisionEvent(npc, entity.getBukkitEntity()); + } } @Override diff --git a/src/main/java/net/citizensnpcs/util/Util.java b/src/main/java/net/citizensnpcs/util/Util.java index b96817a91..b5fef9504 100644 --- a/src/main/java/net/citizensnpcs/util/Util.java +++ b/src/main/java/net/citizensnpcs/util/Util.java @@ -28,8 +28,9 @@ public class Util { } public static void callCollisionEvent(NPC npc, Entity entity) { - if (NPCCollisionEvent.getHandlerList().getRegisteredListeners().length > 0) + if (NPCCollisionEvent.getHandlerList().getRegisteredListeners().length > 0) { Bukkit.getPluginManager().callEvent(new NPCCollisionEvent(npc, entity)); + } } public static NPCPushEvent callPushEvent(NPC npc, Vector vector) { diff --git a/src/main/java/net/citizensnpcs/util/nms/PlayerlistTrackerEntry.java b/src/main/java/net/citizensnpcs/util/nms/PlayerlistTrackerEntry.java index 0da87e2de..f1d80cce0 100644 --- a/src/main/java/net/citizensnpcs/util/nms/PlayerlistTrackerEntry.java +++ b/src/main/java/net/citizensnpcs/util/nms/PlayerlistTrackerEntry.java @@ -12,11 +12,8 @@ import net.minecraft.server.v1_9_R1.EntityPlayer; import net.minecraft.server.v1_9_R1.EntityTrackerEntry; public class PlayerlistTrackerEntry extends EntityTrackerEntry { - private final Entity tracker; - public PlayerlistTrackerEntry(Entity entity, int i, int j, int k, boolean flag) { super(entity, i, j, k, flag); - this.tracker = entity; } public PlayerlistTrackerEntry(EntityTrackerEntry entry) { @@ -28,14 +25,14 @@ public class PlayerlistTrackerEntry extends EntityTrackerEntry { // prevent updates to NPC "viewers" if (entityplayer instanceof EntityHumanNPC) return; - - if (entityplayer != this.tracker && c(entityplayer)) { + Entity tracker = getTracker(this); + if (entityplayer != tracker && c(entityplayer)) { if (!this.trackedPlayers.contains(entityplayer) - && ((entityplayer.x().getPlayerChunkMap().a(entityplayer, this.tracker.ab, this.tracker.ad)) - || (this.tracker.attachedToPlayer))) { - if ((this.tracker instanceof SkinnableEntity)) { + && ((entityplayer.x().getPlayerChunkMap().a(entityplayer, tracker.ab, tracker.ad)) + || (tracker.attachedToPlayer))) { + if ((tracker instanceof SkinnableEntity)) { - SkinnableEntity skinnable = (SkinnableEntity) this.tracker; + SkinnableEntity skinnable = (SkinnableEntity) tracker; Player player = skinnable.getBukkitEntity(); if (!entityplayer.getBukkitEntity().canSee(player))