diff --git a/src/main/java/com/alttd/ctf/game/RunningGame.java b/src/main/java/com/alttd/ctf/game/RunningGame.java index d376d47..e19d26d 100644 --- a/src/main/java/com/alttd/ctf/game/RunningGame.java +++ b/src/main/java/com/alttd/ctf/game/RunningGame.java @@ -58,13 +58,15 @@ public class RunningGame implements Runnable { } private void nextPhaseActions(@Nullable GamePhase previousPhase, @NotNull GamePhase phase) { - //TODO command to go to next phase this.currentPhase = phase; this.phaseStartTime = Instant.now(); if (previousPhase != null) { gameManager.getPhaseExecutor(previousPhase).end(phase); } gameManager.getPhaseExecutor(phase).start(flag); + if (phase.equals(GamePhase.ENDED)) { + executorService.shutdown(); + } } private static final List NOTIFY_SECONDS = List.of(45, 30, 15, 10, 5, 3, 2, 1); diff --git a/src/main/java/com/alttd/ctf/game/phases/CombatPhase.java b/src/main/java/com/alttd/ctf/game/phases/CombatPhase.java index 987c454..0f9f2ce 100644 --- a/src/main/java/com/alttd/ctf/game/phases/CombatPhase.java +++ b/src/main/java/com/alttd/ctf/game/phases/CombatPhase.java @@ -15,13 +15,15 @@ public class CombatPhase implements GamePhaseExecutor { private ScheduledExecutorService executorService = null; @Override - public void start(Flag flag) { + public synchronized void start(Flag flag) { Bukkit.broadcast(MiniMessage.miniMessage().deserialize("CAPTURE THE FLAG")); flag.spawnFlag(); - if (executorService == null || !executorService.isShutdown()) { - if (executorService != null) { - executorService.shutdown(); - } + if (executorService == null) { + executorService = Executors.newSingleThreadScheduledExecutor(); + } else if (executorService.isTerminated() || executorService.isShutdown()) { + executorService = Executors.newSingleThreadScheduledExecutor(); + } else { + executorService.shutdown(); executorService = Executors.newSingleThreadScheduledExecutor(); } executorService.scheduleAtFixedRate(flag, 0, 1, TimeUnit.SECONDS);