Browse Source

Finalize refactoring, fixing time placeholder error on game ending

RedstoneFuture 2 năm trước cách đây
mục cha
commit
275465febe

+ 8 - 6
missilewars-plugin/src/main/java/de/butzlabben/missilewars/game/Game.java

@@ -98,6 +98,7 @@ public class Game {
     private GameBoundListener listener;
     private EquipmentManager equipmentManager;
     private TaskManager taskManager;
+    private int remainingGameDuration;
 
     public Game(Lobby lobby) {
         Logger.BOOT.log("Loading lobby " + lobby.getName());
@@ -246,7 +247,10 @@ public class Game {
             teleportToArenaSpectatorSpawn(player);
 
         }
-
+        
+        // Save the remaining game duration.
+        remainingGameDuration = taskManager.getTimer().getSeconds();
+        
         taskManager.stopTimer();
         updateGameListener(new EndListener(this));
         taskManager.setTimer(new EndTimer(this));
@@ -436,14 +440,12 @@ public class Game {
     }
 
     public void resetGame() {
-        HandlerList.unregisterAll(listener);
-
-        taskManager = new TaskManager(this);
-
         applyForAllPlayers(this::teleportToAfterGameSpawn);
+        
+        HandlerList.unregisterAll(listener);
+        taskManager.stopTimer();
 
         if (gameWorld != null) {
-            gameWorld.sendPlayersBack();
             gameWorld.unload();
             gameWorld.delete();
         }

+ 1 - 1
missilewars-plugin/src/main/java/de/butzlabben/missilewars/game/equipment/PlayerEquipmentRandomizer.java

@@ -172,7 +172,7 @@ public class PlayerEquipmentRandomizer {
             return DEFAULT_FACTOR_BY_GAME_TIME;
         }
 
-        int seconds = game.getTimer().getSeconds();
+        int seconds = game.getTaskManager().getTimer().getSeconds();
         for (int i = seconds; i <= maxGameDuration; i++) {
             if (arena.getInterval().getIntervalFactorByGameTime().containsKey(Integer.toString(i))) {
                 return arena.getInterval().getIntervalFactorByGameTime().get(Integer.toString(i));

+ 7 - 3
missilewars-plugin/src/main/java/de/butzlabben/missilewars/game/misc/ScoreboardManager.java

@@ -228,11 +228,15 @@ public class ScoreboardManager {
      */
     private String replaceScoreboardPlaceholders(String text) {
 
-        String time;
+        String time = "";
         if (game.getState() == GameState.LOBBY) {
+            // Show the planned duration of the next game:
             time = Integer.toString(game.getArena().getGameDuration());
-        } else {
-            time = Integer.toString(game.getTimer().getSeconds() / 60);
+        } else if (game.getState() == GameState.INGAME) {
+            // Show the remaining duration of the running game:
+            time = Integer.toString(game.getTaskManager().getTimer().getSeconds() / 60);
+        } else if (game.getState() == GameState.END) {
+            time = Integer.toString(game.getRemainingGameDuration() / 60);
         }
 
 

+ 1 - 1
missilewars-plugin/src/main/java/de/butzlabben/missilewars/listener/game/LobbyListener.java

@@ -69,7 +69,7 @@ public class LobbyListener extends GameBoundListener {
             if (displayName.equals(getGame().getPlayer(player).getTeam().getFullname())) return;
 
             // too late for team change:
-            if (getGame().getTimer().getSeconds() < 10) {
+            if (getGame().getTaskManager().getTimer().getSeconds() < 10) {
                 player.sendMessage(Messages.getMessage(true, Messages.MessageEnum.TEAM_CHANGE_TEAM_NO_LONGER_NOW));
                 return;
             }