From 72ac9134b1bfef0d24cfbdfdcfcb6568fb62825b Mon Sep 17 00:00:00 2001 From: fullwall Date: Tue, 13 Feb 2018 17:18:15 +0800 Subject: [PATCH] Allow minecraft to remove NPCs on death instead of going through Citizens --- .../net/citizensnpcs/npc/AbstractEntityController.java | 5 +++++ main/src/main/java/net/citizensnpcs/npc/CitizensNPC.java | 9 ++++++--- .../main/java/net/citizensnpcs/npc/EntityController.java | 6 ++++-- 3 files changed, 15 insertions(+), 5 deletions(-) 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); }