idk some "cool" stuff
This commit is contained in:
@@ -1,16 +1,14 @@
|
||||
package hdvtdev.blockAndSeek;
|
||||
|
||||
import hdvtdev.blockAndSeek.managers.FreezeManager;
|
||||
import me.libraryaddict.disguise.DisguiseAPI;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.persistence.PersistentDataType;
|
||||
|
||||
import java.security.SecureRandom;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
|
||||
@@ -21,24 +19,50 @@ public class BlockAndSeekGame {
|
||||
private final AtomicBoolean started = new AtomicBoolean(false);
|
||||
private final String name;
|
||||
private final int maxPlayers;
|
||||
private final Location lobby;
|
||||
|
||||
|
||||
public BlockAndSeekGame(String name, int maxPlayers) {
|
||||
public BlockAndSeekGame(String name, int maxPlayers, List<Integer> lobby) {
|
||||
this.name = name;
|
||||
this.maxPlayers = maxPlayers;
|
||||
this.lobby = new Location(Bukkit.getWorld(name), lobby.getFirst(), lobby.get(1), lobby.get(2));
|
||||
}
|
||||
|
||||
public List<Player> getHiders() {
|
||||
return players.entrySet().stream().filter(e -> Objects.equals(e.getValue(), PlayerType.HIDER)).map(Map.Entry::getKey).toList();
|
||||
}
|
||||
|
||||
public void preEnd() {
|
||||
|
||||
for (Player hider : getHiders()) {
|
||||
FreezeManager.unfreezeIfFrozen(hider);
|
||||
FreezeManager.removePlayerDisguise(hider);
|
||||
DisguiseAPI.undisguiseToAll(hider);
|
||||
hider.getInventory().clear();
|
||||
hider.setGlowing(true);
|
||||
}
|
||||
|
||||
for (Player player : getPlayers()) {
|
||||
player.setInvulnerable(true);
|
||||
player.setVisibleByDefault(true);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public void end() {
|
||||
|
||||
for (Player hider : getHiders()) {
|
||||
FreezeManager.removePlayerDisguise(hider);
|
||||
DisguiseAPI.undisguiseToAll(hider);
|
||||
}
|
||||
|
||||
for (Player player : players.keySet()) {
|
||||
//EventListener.unfreezePlayer(player); TODO
|
||||
player.getPersistentDataContainer().remove(BlockAndSeekContainer.PLAYER);
|
||||
player.sendBlockChange(player.getLocation(), Material.AIR.createBlockData());
|
||||
player.teleport(lobby);
|
||||
player.getPersistentDataContainer().remove(Keys.PLAYER);
|
||||
player.setGameMode(GameMode.SURVIVAL);
|
||||
DisguiseAPI.undisguiseToAll(player);
|
||||
player.setInvulnerable(false);
|
||||
player.setGlowing(false);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,7 +70,8 @@ public class BlockAndSeekGame {
|
||||
if (started.get() || playerCount() + 1 > maxPlayers) {
|
||||
return false;
|
||||
}
|
||||
player.getPersistentDataContainer().set(BlockAndSeekContainer.PLAYER, PersistentDataType.STRING, name);
|
||||
player.getPersistentDataContainer().set(Keys.PLAYER, PersistentDataType.STRING, name);
|
||||
player.teleport(lobby);
|
||||
players.put(player, PlayerType.HIDER);
|
||||
return true;
|
||||
}
|
||||
@@ -92,17 +117,15 @@ public class BlockAndSeekGame {
|
||||
}
|
||||
|
||||
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) {
|
||||
players.put(player, PlayerType.SEEKER);
|
||||
return player;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
return null;
|
||||
return selectRandomSeekers(1).getFirst();
|
||||
}
|
||||
|
||||
public List<Player> selectRandomSeekers(int count) {
|
||||
ArrayList<Player> playerList = new ArrayList<>(players.keySet());
|
||||
Collections.shuffle(playerList);
|
||||
List<Player> seekers = playerList.subList(0, Math.min(count, playerList.size()));
|
||||
for (Player seeker : seekers) players.put(seeker, PlayerType.SEEKER);
|
||||
return seekers;
|
||||
}
|
||||
|
||||
private enum PlayerType {
|
||||
|
||||
Reference in New Issue
Block a user