package com.lifeknight.relaymcbungeemain.queue; import com.lifeknight.relaymcbungeemain.player.Party; import com.lifeknight.relaymcbungeemain.player.SmartPlayer; import com.lifeknight.relayutils.basic.Miscellaneous; import com.lifeknight.relayutils.data.QueueData; import com.lifeknight.relayutils.game.GameType; import com.lifeknight.relayutils.player.Group; import java.util.ArrayList; import java.util.List; public class PlayerGroup { protected final List<SmartPlayer> players = new ArrayList<>(); protected final GameType gameType; protected final QueueData queueData; protected final SmartPlayer leader; public PlayerGroup(GameType gameType, QueueData queueData, SmartPlayer... players) { this(Miscellaneous.getList(players), gameType, queueData); } public PlayerGroup(List<SmartPlayer> players, GameType gameType, QueueData queueData) { this.leader = players.get(0); this.players.addAll(players); this.gameType = gameType; this.queueData = queueData; } public GameType getType() { return this.gameType; } public QueueData getQueueData() { return this.queueData; } public boolean isQueueDataCompatible(PlayerGroup... playerGroups) { for (PlayerGroup playerGroup : playerGroups) { if (!this.queueData.isCompatible(playerGroup.queueData)) { return false; } } return true; } public int getSize() { return this.players.size(); } public synchronized boolean removePlayer(SmartPlayer smartPlayer) { return this.players.removeIf(smartPlayer1 -> smartPlayer1.getUUID().equals(smartPlayer.getUUID())); } public synchronized boolean removeParty(Party party) { return this.players.removeAll(party.getPlayers()); } public synchronized GameType removePartyInadvertently(Party party) { if (this.removeParty(party)) { return this.gameType; } return null; } public synchronized GameType removePlayerInadvertently(SmartPlayer smartPlayer) { if (this.removePlayer(smartPlayer)) { return this.gameType; } return null; } public synchronized boolean hasPlayer(SmartPlayer smartPlayer) { if (this.players.isEmpty()) return false; for (SmartPlayer player : this.players) { if (player.getUUID().equals(smartPlayer.getUUID())) { return true; } } return false; } public List<SmartPlayer> getPlayers() { return this.players; } public synchronized boolean isEmpty() { return this.isEmpty(false); } public synchronized boolean isEmpty(boolean byQueue) { if (this.getSize() == 0) { return true; } for (SmartPlayer player : this.players) { if (!player.isOnline()) { for (SmartPlayer smartPlayer : this.players) { smartPlayer.sendErrorMessage("You have been removed from the queue as one of your queue members is no longer online."); smartPlayer.emptyQueue(); } return true; } } if (this.gameType.isPartyType() && this.queueData.isParty()) { if (this.getSize() == 1 && !byQueue) { SmartPlayer player = this.players.get(0); player.sendErrorMessage("You have been removed from the queue; you cannot play party games by yourself!"); player.emptyQueue(); return true; } } return false; } public boolean isFastQueue(SmartPlayer smartPlayer) { return this.leader.isInGroupOrHigher(Group.CHAMPION); } public boolean isParty() { return this.queueData.isParty(); } }