Procházet zdrojové kódy

Cleaning up code and call GameEndEvent

RedstoneFuture před 3 roky
rodič
revize
f540165cbd

+ 18 - 23
missilewars-plugin/src/main/java/de/butzlabben/missilewars/game/Game.java

@@ -39,6 +39,7 @@ import de.butzlabben.missilewars.wrapper.abstracts.Arena;
 import de.butzlabben.missilewars.wrapper.abstracts.GameWorld;
 import de.butzlabben.missilewars.wrapper.abstracts.Lobby;
 import de.butzlabben.missilewars.wrapper.abstracts.MapChooseProcedure;
+import de.butzlabben.missilewars.wrapper.event.GameEndEvent;
 import de.butzlabben.missilewars.wrapper.event.GameStartEvent;
 import de.butzlabben.missilewars.wrapper.event.PlayerArenaJoinEvent;
 import de.butzlabben.missilewars.wrapper.game.MissileGameEquipment;
@@ -80,7 +81,7 @@ public class Game {
     private final HashMap<UUID, BukkitTask> playerTasks = new HashMap<>();
     private Timer timer;
     private BukkitTask bt;
-    private GameState state = GameState.LOBBY;
+    private GameState state;
     private Team team1;
     private Team team2;
     private boolean ready = false;
@@ -126,10 +127,6 @@ public class Game {
 
         players.clear();
 
-        GameBoundListener listener = new LobbyListener(this);
-        Bukkit.getPluginManager().registerEvents(listener, MissileWars.getInstance());
-        this.listener = listener;
-
         team1 = new Team(lobby.getTeam1Name(), lobby.getTeam1Color(), this);
         team2 = new Team(lobby.getTeam2Name(), lobby.getTeam2Color(), this);
       
@@ -149,9 +146,12 @@ public class Game {
         if (!Config.isMultipleLobbies()) MotdManager.getInstance().updateMOTD(this);
 
         Logger.DEBUG.log("Start timer");
+
         stopTimer();
+        updateGameListener(new LobbyListener(this));
         timer = new LobbyTimer(this, lobby.getLobbyTime());
         bt = Bukkit.getScheduler().runTaskTimer(MissileWars.getInstance(), timer, 0, 20);
+        state = GameState.LOBBY;
 
         if (Config.isSetup()) {
             Logger.WARN.log("Did not fully initialize lobby " + lobby.getName() + " as the plugin is in setup mode");
@@ -191,6 +191,13 @@ public class Game {
         createGameItems();
     }
 
+    private void updateGameListener(GameBoundListener listener) {
+        if (listener != null) HandlerList.unregisterAll(listener);
+
+        Bukkit.getPluginManager().registerEvents(listener, MissileWars.getInstance());
+        this.listener = listener;
+    }
+
     public Scoreboard getScoreboard() {
         return scoreboardManager.board;
     }
@@ -209,16 +216,11 @@ public class Game {
         }
 
         stopTimer();
+        updateGameListener(new GameListener(this));
         timer = new GameTimer(this);
         bt = Bukkit.getScheduler().runTaskTimer(MissileWars.getInstance(), timer, 5, 20);
-
-        HandlerList.unregisterAll(listener);
-
-        GameBoundListener listener = new GameListener(this);
-        Bukkit.getPluginManager().registerEvents(listener, MissileWars.getInstance());
-        this.listener = listener;
-
         state = GameState.INGAME;
+
         timestart = System.currentTimeMillis();
 
         applyForAllPlayers(this::startForPlayer);
@@ -240,7 +242,7 @@ public class Game {
             return;
 
         Logger.DEBUG.log("Stopping");
-        state = GameState.END;
+
         for (BukkitTask bt : playerTasks.values()) {
             bt.cancel();
         }
@@ -256,18 +258,10 @@ public class Game {
         }
 
         stopTimer();
-        HandlerList.unregisterAll(listener);
-        GameBoundListener listener = new EndListener(this);
-
-        try {
-            Bukkit.getPluginManager().registerEvents(listener, MissileWars.getInstance());
-        } catch (Exception ignored) {
-        }
-
-        this.listener = listener;
-
+        updateGameListener(new EndListener(this));
         timer = new EndTimer(this);
         bt = Bukkit.getScheduler().runTaskTimer(MissileWars.getInstance(), timer, 5, 20);
+        state = GameState.END;
 
         // Change MOTD
         if (!Config.isMultipleLobbies()) {
@@ -280,6 +274,7 @@ public class Game {
         }
 
         Logger.DEBUG.log("Stopped completely");
+        Bukkit.getPluginManager().callEvent(new GameEndEvent(this));
     }
 
     public void reset() {