remove players from npc viewer lists on player disconnect

This commit is contained in:
Pyrbu 2023-08-22 21:52:56 +02:00
parent 6e6cef56f6
commit f1c59d0b80
3 changed files with 27 additions and 0 deletions

@ -41,6 +41,7 @@ import lol.pyr.znpcsplus.scheduling.TaskScheduler;
import lol.pyr.znpcsplus.skin.cache.MojangSkinCache; import lol.pyr.znpcsplus.skin.cache.MojangSkinCache;
import lol.pyr.znpcsplus.skin.cache.SkinCacheCleanTask; import lol.pyr.znpcsplus.skin.cache.SkinCacheCleanTask;
import lol.pyr.znpcsplus.tasks.HologramRefreshTask; import lol.pyr.znpcsplus.tasks.HologramRefreshTask;
import lol.pyr.znpcsplus.tasks.NpcHideListener;
import lol.pyr.znpcsplus.tasks.NpcProcessorTask; import lol.pyr.znpcsplus.tasks.NpcProcessorTask;
import lol.pyr.znpcsplus.updater.UpdateChecker; import lol.pyr.znpcsplus.updater.UpdateChecker;
import lol.pyr.znpcsplus.updater.UpdateNotificationListener; 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 NpcProcessorTask(npcRegistry, configManager, propertyRegistry), 60L, 3L);
scheduler.runDelayedTimerAsync(new HologramRefreshTask(npcRegistry), 60L, 20L); scheduler.runDelayedTimerAsync(new HologramRefreshTask(npcRegistry), 60L, 20L);
scheduler.runDelayedTimerAsync(new SkinCacheCleanTask(skinCache), 1200, 1200); scheduler.runDelayedTimerAsync(new SkinCacheCleanTask(skinCache), 1200, 1200);
pluginManager.registerEvents(new NpcHideListener(npcRegistry), this);
log(ChatColor.WHITE + " * Loading data..."); log(ChatColor.WHITE + " * Loading data...");
npcRegistry.reload(); npcRegistry.reload();

@ -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());
});
}
}

@ -37,6 +37,10 @@ public abstract class Viewable {
UNSAFE_hide(player); UNSAFE_hide(player);
} }
public void UNSAFE_removeViewer(Player player) {
viewers.remove(player);
}
protected void UNSAFE_hideAll() { protected void UNSAFE_hideAll() {
for (Player viewer : viewers) UNSAFE_hide(viewer); for (Player viewer : viewers) UNSAFE_hide(viewer);
} }