/* * Decompiled with CFR 0.152. * * Could not load the following classes: * javax.annotation.Nullable * org.bukkit.Bukkit * org.bukkit.Location * org.bukkit.World * org.bukkit.entity.Player * org.bukkit.event.EventHandler * org.bukkit.event.Listener * org.bukkit.event.player.PlayerJoinEvent * org.bukkit.event.player.PlayerQuitEvent * org.bukkit.plugin.Plugin */ package de.maxhenkel.voicechat.voice.server; import de.maxhenkel.voicechat.Voicechat; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.function.Predicate; import javax.annotation.Nullable; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.World; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.plugin.Plugin; public class ServerPlayerManager implements Listener { private static final long REFRESH_INTERVAL_TICKS = 600L; public static final ServerPlayerManager INSTANCE = new ServerPlayerManager(); private volatile Set players = Collections.emptySet(); public static void init(Plugin plugin) { if (!Voicechat.SERVER_CONFIG.threadedServerSupport.get().booleanValue()) { return; } Bukkit.getPluginManager().registerEvents((Listener)INSTANCE, plugin); Voicechat.compatibility.scheduleSyncRepeatingTask(INSTANCE::refresh, 0L, 600L); } private ServerPlayerManager() { } private synchronized void refresh() { this.players = new HashSet(Bukkit.getOnlinePlayers()); } @EventHandler public synchronized void onPlayerJoin(PlayerJoinEvent event) { HashSet newPlayers = new HashSet(this.players); newPlayers.add(event.getPlayer()); this.players = newPlayers; } @EventHandler public synchronized void onPlayerQuit(PlayerQuitEvent event) { HashSet newPlayers = new HashSet(this.players); newPlayers.remove(event.getPlayer()); this.players = newPlayers; } public static Collection getPlayersInRange(World level, Location pos, double range, @Nullable Predicate filter) { return INSTANCE.getPlayersInRangeInternal(level, pos, range, filter); } private Collection getPlayersInRangeInternal(World world, Location pos, double range, @Nullable Predicate filter) { if (!Voicechat.SERVER_CONFIG.threadedServerSupport.get().booleanValue()) { return ServerPlayerManager.getPlayersInRangeDirect(world, pos, range, filter); } ArrayList nearbyPlayers = new ArrayList(); for (Player player : this.players) { if (!world.equals((Object)player.getWorld()) || !ServerPlayerManager.isInRange(player.getLocation(), pos, range) || filter != null && !filter.test(player)) continue; nearbyPlayers.add(player); } return nearbyPlayers; } private static Collection getPlayersInRangeDirect(World world, Location pos, double range, @Nullable Predicate filter) { ArrayList nearbyPlayers = new ArrayList(); List worldPlayers = world.getPlayers(); for (int i = 0; i < worldPlayers.size(); ++i) { Player player = (Player)worldPlayers.get(i); if (!ServerPlayerManager.isInRange(player.getLocation(), pos, range) || filter != null && !filter.test(player)) continue; nearbyPlayers.add(player); } return nearbyPlayers; } public static boolean isInRange(Location pos1, Location pos2, double range) { return ServerPlayerManager.square(pos1.getX() - pos2.getX()) + ServerPlayerManager.square(pos1.getY() - pos2.getY()) + ServerPlayerManager.square(pos1.getZ() - pos2.getZ()) <= ServerPlayerManager.square(range); } private static double square(double value) { return value * value; } }