package ru.simsonic.rscPermissions.Bukkit; import org.bukkit.entity.Player; import ru.simsonic.rscPermissions.BukkitPluginMain; import ru.simsonic.rscUtilityLibrary.Bukkit.Listeners.MovingPlayersCatcher; import ru.simsonic.rscUtilityLibrary.RestartableThread; public class RegionUpdateObserver extends RestartableThread { private static final long granularityMin = 20; private static final long granularityMax = 10000; private final BukkitPluginMain rscp; private final MovingPlayersCatcher movedPlayers = new MovingPlayersCatcher(); public RegionUpdateObserver(BukkitPluginMain rscp) { this.rscp = rscp; } public void registerListeners() { rscp.getServer().getPluginManager().registerEvents(movedPlayers, rscp); } @Override public void run() { try { Thread.currentThread().setName("rscp:" + this.getClass().getSimpleName()); Thread.currentThread().setPriority(Thread.MIN_PRIORITY); long granularity = rscp.settings.getRegionFinderGranularity(); if(granularity < granularityMin) granularity = granularityMin; if(granularity > granularityMax) granularity = granularityMax; for(; !Thread.interrupted(); Thread.sleep(granularity)) for(Player player : movedPlayers.getMovedPlayersAsync()) if(rscp.regionListProvider.isRegionListChanged(player)) rscp.permissionManager.resolvePlayer(player); } catch(InterruptedException ex) { } } }