package hdvtdev.blockAndSeek; import me.libraryaddict.disguise.DisguiseAPI; import org.bukkit.Material; import org.bukkit.entity.Player; import org.bukkit.persistence.PersistentDataType; import java.security.SecureRandom; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicBoolean; public class BlockAndSeekGame { private final ConcurrentHashMap players = new ConcurrentHashMap<>(); private AtomicBoolean started = new AtomicBoolean(false); private final String name; public BlockAndSeekGame(String name) { this.name = name; } public void end() { for (Player player : players.keySet()) { EventListener.unfreezePlayer(player); player.getPersistentDataContainer().remove(BlockAndSeekContainer.PLAYER); player.sendBlockChange(player.getLocation(), Material.AIR.createBlockData()); DisguiseAPI.undisguiseToAll(player); } } public boolean addPlayer(Player player) { if (started.get()) { return false; } player.getPersistentDataContainer().set(BlockAndSeekContainer.PLAYER, PersistentDataType.STRING, name); players.put(player, PlayerType.HIDER); return true; } public void removePlayer(Player player) { players.remove(player); } public Set getPlayers() { return players.keySet(); } public Player getLastHider() { for (Map.Entry entry : players.entrySet()) { if (entry.getValue() == PlayerType.HIDER) return entry.getKey(); } return null; } public int seekersCount() { return (int) players.values().stream().filter(f -> f.equals(PlayerType.SEEKER)).count(); } public int hidersCound() { return (int) players.values().stream().filter(f -> f.equals(PlayerType.HIDER)).count(); } public int playerCount() { return players.size(); } public void start() { started.set(true); } public boolean isStarted() { return started.get(); } public Player selectRandomSeeker() { SecureRandom random = new SecureRandom(); int i = 0; int randomNum = random.nextInt(0, players.size()); for (Player player : players.keySet()) { if (i == randomNum) return player; } return null; } private enum PlayerType { SEEKER, HIDER } }