diff --git a/src/main/java/net/citizensnpcs/EventListen.java b/src/main/java/net/citizensnpcs/EventListen.java index 2a03d2f95..769067739 100644 --- a/src/main/java/net/citizensnpcs/EventListen.java +++ b/src/main/java/net/citizensnpcs/EventListen.java @@ -252,10 +252,15 @@ public class EventListen implements Listener { for (NPC npc : getAllNPCs()) { if (!npc.isSpawned() || !npc.getBukkitEntity().getWorld().equals(event.getWorld())) continue; - storeForRespawn(npc); - npc.despawn(DespawnReason.WORLD_UNLOAD); - if (event.isCancelled()) + boolean despawned = npc.despawn(DespawnReason.WORLD_UNLOAD); + if (event.isCancelled() || !despawned) { + for (ChunkCoord coord : toRespawn.keySet()) { + if (event.getWorld().getName().equals(coord.worldName)) + respawnAllFromCoord(coord); + } return; + } + storeForRespawn(npc); Messaging.debug("Despawned", npc.getId() + "due to world unload at", event.getWorld().getName()); } } diff --git a/src/main/java/net/citizensnpcs/npc/ai/MCTargetStrategy.java b/src/main/java/net/citizensnpcs/npc/ai/MCTargetStrategy.java index 404a5d950..625b6202c 100644 --- a/src/main/java/net/citizensnpcs/npc/ai/MCTargetStrategy.java +++ b/src/main/java/net/citizensnpcs/npc/ai/MCTargetStrategy.java @@ -96,7 +96,7 @@ public class MCTargetStrategy implements PathStrategy, EntityTarget { @Override public boolean update() { - if (target == null || target.dead) { + if (target == null || !target.getBukkitEntity().isValid()) { cancelReason = CancelReason.TARGET_DIED; return true; }