package com.alttd.hunger_games.services; import com.alttd.hunger_games.data_objects.PLAYER_STATE; import com.alttd.hunger_games.data_objects.ROUND_STATE; import lombok.Getter; import java.util.*; import java.util.stream.Collectors; public class RoundService implements RoundListener { private static RoundService instance = null; @Getter private ROUND_STATE roundState; private final HashMap players = new HashMap<>(); public static RoundService createSingletonInstance(Round round) { if (instance != null) { throw new IllegalStateException("RoundService is already initialized."); } instance = new RoundService(round); return instance; } private RoundService(Round round) { this.roundState = round.register(this); } public Set getPlayers(PLAYER_STATE playerState) { return players.entrySet().stream() .filter(entry -> entry.getValue().equals(playerState)) .map(Map.Entry::getKey) .collect(Collectors.toSet()); } protected void setPlayerState(UUID uuid, PLAYER_STATE playerState) { players.put(uuid, playerState); } protected void clear() { players.clear(); } public Optional getPlayerState(UUID uuid) { return Optional.ofNullable(players.get(uuid)); } @Override public void stateChange(ROUND_STATE roundState) { this.roundState = roundState; if (roundState.equals(ROUND_STATE.PLAYER_REGISTRATION)) { clear(); } } }