remove players from npc viewer lists on player disconnect
This commit is contained in:
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);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue