package io.mazenmc.skypebot.game; import io.mazenmc.skypebot.game.cah.CardsAgainstHumanity; import io.mazenmc.skypebot.utils.Resource; import io.mazenmc.skypebot.utils.Utils; import java.util.ArrayList; import java.util.List; public class GameManager { private static final GameManager INSTANCE = new GameManager(); private Game current; private List<Class<? extends Game>> registeredGames = new ArrayList<>(); private GameManager() { registeredGames.add(CardsAgainstHumanity.class); new GameTimer(); } public static GameManager instance() { return INSTANCE; } public <T extends Game> T startGame(String name) throws InstantiationException, IllegalAccessException { Class<? extends Game> belongingClass = findGame(name); if (belongingClass == null) { return null; } current = belongingClass.newInstance(); return (T) current; } public void stopGame() { if (current != null) { current.setState(GameState.ENDED); } current = null; Resource.sendMessage("Game has been stopped! Thanks for playing!"); } public Game current() { return current; } private Class<? extends Game> findGame(String name) { return Utils.optionalGet(registeredGames.stream().filter((c) -> c.getSimpleName().equalsIgnoreCase(name)).findFirst()); } }