zombies-utils_fabric/src/main/java/xyz/stachel/zombiesutils/game/GameManager.java
2025-05-25 18:47:50 +03:00

83 lines
2.5 KiB
Java

package xyz.stachel.zombiesutils.game;
import org.jetbrains.annotations.NotNull;
import xyz.stachel.zombiesutils.handlers.Location;
import xyz.stachel.zombiesutils.game.GameMode.Map;
import xyz.stachel.zombiesutils.util.Utils;
import java.util.HashMap;
import java.util.Optional;
import java.util.Set;
public class GameManager {
private final HashMap<String, Game> games = new HashMap<>();
private Optional<GameMode.Difficulty> queuedDifficulty = Optional.empty();
private String queuedDifficultyServer = "INVALID";
private void addGame(final String serverNumber, final GameMode mode, final int round) {
if (serverNumber.equals(queuedDifficultyServer)) {
this.queuedDifficulty.ifPresent(mode::changeDifficulty);
}
this.queuedDifficulty = Optional.empty();
this.games.put(serverNumber, new Game(new GameFile(serverNumber, mode), mode, round));
}
public void onRound(final int round) {
final String sn = Location.getServerNumber();
final String mode = Location.getMode();
if (sn == null || mode == null || !Utils.isZombies()) return;
if (this.getGame(sn) == null) {
this.addGame(sn, new GameMode(Utils.getMap(mode)), round);
} else {
this.getGame(sn).split(round);
}
}
public Game getGame(String sn) {
return this.games.get(sn);
}
public void endGame(final String serverNumber, final boolean isWin) {
if (!games.containsKey(serverNumber)) return;
final Game game = this.getGame(serverNumber);
if (isWin) {
switch (game.mode.getMap()) {
case DEAD_END:
case BAD_BLOOD:
case PRISON:
game.pass(30);
break;
case ALIEN_ARCADIUM:
game.pass(105);
break;
}
}
games.remove(serverNumber);
}
public void splitOrNew(GameMode mode, int round) {
final String serverNumber = Location.getServerNumber();
if (games.containsKey(serverNumber)) {
if (round == 0) addGame(serverNumber, mode, round);
else this.getGame(serverNumber).pass(round);
} else addGame(serverNumber, mode, round);
}
public void setDifficulty(@NotNull GameMode.Difficulty difficulty) {
this.queuedDifficultyServer = Location.getServerNumber();
if (this.games.containsKey(this.queuedDifficultyServer)) {
this.getGame(this.queuedDifficultyServer).mode.changeDifficulty(difficulty);
} else this.queuedDifficulty = Optional.of(difficulty);
}
public Set<String> getGames() {
return this.games.keySet();
}
public void killAll() {
games.clear();
}
}