diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlus.java b/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlus.java index 902f6e5..cdb8cff 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlus.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/ZNpcsPlus.java @@ -41,6 +41,7 @@ import lol.pyr.znpcsplus.scheduling.TaskScheduler; import lol.pyr.znpcsplus.skin.cache.MojangSkinCache; import lol.pyr.znpcsplus.skin.cache.SkinCacheCleanTask; import lol.pyr.znpcsplus.tasks.HologramRefreshTask; +import lol.pyr.znpcsplus.tasks.NpcHideListener; import lol.pyr.znpcsplus.tasks.NpcProcessorTask; import lol.pyr.znpcsplus.updater.UpdateChecker; import lol.pyr.znpcsplus.updater.UpdateNotificationListener; @@ -167,6 +168,7 @@ public class ZNpcsPlus extends JavaPlugin { scheduler.runDelayedTimerAsync(new NpcProcessorTask(npcRegistry, configManager, propertyRegistry), 60L, 3L); scheduler.runDelayedTimerAsync(new HologramRefreshTask(npcRegistry), 60L, 20L); scheduler.runDelayedTimerAsync(new SkinCacheCleanTask(skinCache), 1200, 1200); + pluginManager.registerEvents(new NpcHideListener(npcRegistry), this); log(ChatColor.WHITE + " * Loading data..."); npcRegistry.reload(); diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/tasks/NpcHideListener.java b/plugin/src/main/java/lol/pyr/znpcsplus/tasks/NpcHideListener.java new file mode 100644 index 0000000..c2ba431 --- /dev/null +++ b/plugin/src/main/java/lol/pyr/znpcsplus/tasks/NpcHideListener.java @@ -0,0 +1,21 @@ +package lol.pyr.znpcsplus.tasks; + +import lol.pyr.znpcsplus.npc.NpcRegistryImpl; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerQuitEvent; + +public class NpcHideListener implements Listener { + private final NpcRegistryImpl registry; + + public NpcHideListener(NpcRegistryImpl registry) { + this.registry = registry; + } + + @EventHandler + public void onQuit(PlayerQuitEvent event) { + registry.getProcessable().forEach(entry -> { + if (entry.getNpc().isVisibleTo(event.getPlayer())) entry.getNpc().UNSAFE_removeViewer(event.getPlayer()); + }); + } +} diff --git a/plugin/src/main/java/lol/pyr/znpcsplus/util/Viewable.java b/plugin/src/main/java/lol/pyr/znpcsplus/util/Viewable.java index e042e2e..cbe229f 100644 --- a/plugin/src/main/java/lol/pyr/znpcsplus/util/Viewable.java +++ b/plugin/src/main/java/lol/pyr/znpcsplus/util/Viewable.java @@ -37,6 +37,10 @@ public abstract class Viewable { UNSAFE_hide(player); } + public void UNSAFE_removeViewer(Player player) { + viewers.remove(player); + } + protected void UNSAFE_hideAll() { for (Player viewer : viewers) UNSAFE_hide(viewer); }