diff --git a/main/src/main/java/net/citizensnpcs/npc/AbstractEntityController.java b/main/src/main/java/net/citizensnpcs/npc/AbstractEntityController.java index c87434f0d..bf5bab00a 100644 --- a/main/src/main/java/net/citizensnpcs/npc/AbstractEntityController.java +++ b/main/src/main/java/net/citizensnpcs/npc/AbstractEntityController.java @@ -23,6 +23,11 @@ public abstract class AbstractEntityController implements EntityController { return bukkitEntity; } + @Override + public void setEntity(Entity entity) { + this.bukkitEntity = entity; + } + @Override public void remove() { if (bukkitEntity == null) diff --git a/main/src/main/java/net/citizensnpcs/npc/CitizensNPC.java b/main/src/main/java/net/citizensnpcs/npc/CitizensNPC.java index ffe595880..e1d0778ba 100644 --- a/main/src/main/java/net/citizensnpcs/npc/CitizensNPC.java +++ b/main/src/main/java/net/citizensnpcs/npc/CitizensNPC.java @@ -73,7 +73,7 @@ public class CitizensNPC extends AbstractNPC { event.setCancelled(Setting.KEEP_CHUNKS_LOADED.asBoolean()); } Bukkit.getPluginManager().callEvent(event); - if (event.isCancelled()) { + if (event.isCancelled() && reason != DespawnReason.DEATH) { getEntity().getLocation().getChunk(); Messaging.debug("Couldn't despawn", getId(), "due to despawn event cancellation. Force loaded chunk.", getEntity().isValid()); @@ -91,8 +91,11 @@ public class CitizensNPC extends AbstractNPC { trait.onDespawn(); } Messaging.debug("Despawned", getId(), "DespawnReason.", reason); - entityController.remove(); - + if (reason == DespawnReason.DEATH) { + entityController.setEntity(null); + } else { + entityController.remove(); + } return true; } diff --git a/main/src/main/java/net/citizensnpcs/npc/EntityController.java b/main/src/main/java/net/citizensnpcs/npc/EntityController.java index 34344946a..8a5d23d29 100644 --- a/main/src/main/java/net/citizensnpcs/npc/EntityController.java +++ b/main/src/main/java/net/citizensnpcs/npc/EntityController.java @@ -1,14 +1,16 @@ package net.citizensnpcs.npc; -import net.citizensnpcs.api.npc.NPC; - import org.bukkit.Location; import org.bukkit.entity.Entity; +import net.citizensnpcs.api.npc.NPC; + public interface EntityController { Entity getBukkitEntity(); void remove(); + void setEntity(Entity entity); + void spawn(Location at, NPC npc); }