diff --git a/src/main/java/net/citizensnpcs/api/event/NPCRemoveByCommandSenderEvent.java b/src/main/java/net/citizensnpcs/api/event/NPCRemoveByCommandSenderEvent.java new file mode 100644 index 00000000..ea9606ee --- /dev/null +++ b/src/main/java/net/citizensnpcs/api/event/NPCRemoveByCommandSenderEvent.java @@ -0,0 +1,30 @@ +package net.citizensnpcs.api.event; + +import org.bukkit.command.CommandSender; +import org.bukkit.event.HandlerList; + +import net.citizensnpcs.api.npc.NPC; + +public class NPCRemoveByCommandSenderEvent extends NPCRemoveEvent { + private final CommandSender source; + + public NPCRemoveByCommandSenderEvent(NPC npc, CommandSender source) { + super(npc); + this.source = source; + } + + @Override + public HandlerList getHandlers() { + return handlers; + } + + public CommandSender getSource() { + return source; + } + + public static HandlerList getHandlerList() { + return handlers; + } + + private static final HandlerList handlers = new HandlerList(); +} diff --git a/src/main/java/net/citizensnpcs/api/event/NPCRemoveEvent.java b/src/main/java/net/citizensnpcs/api/event/NPCRemoveEvent.java index 7888e687..b1e9f254 100644 --- a/src/main/java/net/citizensnpcs/api/event/NPCRemoveEvent.java +++ b/src/main/java/net/citizensnpcs/api/event/NPCRemoveEvent.java @@ -1,11 +1,10 @@ package net.citizensnpcs.api.event; -import net.citizensnpcs.api.npc.NPC; - import org.bukkit.event.HandlerList; -public class NPCRemoveEvent extends NPCEvent { +import net.citizensnpcs.api.npc.NPC; +public class NPCRemoveEvent extends NPCEvent { public NPCRemoveEvent(NPC npc) { super(npc); } @@ -15,9 +14,9 @@ public HandlerList getHandlers() { return handlers; } - private static final HandlerList handlers = new HandlerList(); - public static HandlerList getHandlerList() { return handlers; } + + private static final HandlerList handlers = new HandlerList(); } diff --git a/src/main/java/net/citizensnpcs/api/npc/AbstractNPC.java b/src/main/java/net/citizensnpcs/api/npc/AbstractNPC.java index 6e22f0af..2435f408 100644 --- a/src/main/java/net/citizensnpcs/api/npc/AbstractNPC.java +++ b/src/main/java/net/citizensnpcs/api/npc/AbstractNPC.java @@ -7,6 +7,7 @@ import org.bukkit.Bukkit; import org.bukkit.Location; +import org.bukkit.command.CommandSender; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.LivingEntity; @@ -29,6 +30,7 @@ import net.citizensnpcs.api.event.DespawnReason; import net.citizensnpcs.api.event.NPCAddTraitEvent; import net.citizensnpcs.api.event.NPCCloneEvent; +import net.citizensnpcs.api.event.NPCRemoveByCommandSenderEvent; import net.citizensnpcs.api.event.NPCRemoveEvent; import net.citizensnpcs.api.event.NPCRemoveTraitEvent; import net.citizensnpcs.api.event.NPCTeleportEvent; @@ -163,6 +165,12 @@ public void destroy() { goalController.clear(); } + @Override + public void destroy(CommandSender source) { + Bukkit.getPluginManager().callEvent(new NPCRemoveByCommandSenderEvent(this, source)); + destroy(); + } + @Override public boolean equals(Object obj) { if (this == obj) { diff --git a/src/main/java/net/citizensnpcs/api/npc/NPC.java b/src/main/java/net/citizensnpcs/api/npc/NPC.java index 71ba82cc..610e6841 100644 --- a/src/main/java/net/citizensnpcs/api/npc/NPC.java +++ b/src/main/java/net/citizensnpcs/api/npc/NPC.java @@ -5,6 +5,7 @@ import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.block.Block; +import org.bukkit.command.CommandSender; import org.bukkit.entity.Entity; import org.bukkit.entity.EntityType; import org.bukkit.entity.Minecart; @@ -80,6 +81,14 @@ public interface NPC extends Agent, Cloneable { */ public void destroy(); + /** + * Permanently removes this NPC and all data about it from the registry it's attached to. + * + * @param source + * The source of the removal + */ + public void destroy(CommandSender source); + /** * Faces a given {@link Location} if the NPC is spawned. */