idk some "cool" stuff

This commit is contained in:
hdvt
2025-06-26 01:18:01 +03:00
parent 15aca87742
commit 54eb07cc86
24 changed files with 1072 additions and 195 deletions

View File

@@ -1,29 +1,94 @@
package hdvtdev.blockAndSeek;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
import me.libraryaddict.disguise.DisguiseAPI;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.bukkit.persistence.PersistentDataType;
import java.util.*;
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 Set<Player> players = Collections.synchronizedSet(new HashSet<>());
private final ConcurrentHashMap<Player, PlayerType> players = new ConcurrentHashMap<>();
public BlockAndSeekGame(String name, List<String> players) {
for (String player : players) {
this.addPlayer(player);
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 void addPlayer(String name) {
Player p = Bukkit.getPlayerExact(name);
if (p != null) players.add(p);
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<Player> getPlayers() {
return players.keySet();
}
public Player getLastHider() {
for (Map.Entry<Player, PlayerType> 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
}
}