2
0
RedstoneFuture 1 жил өмнө
parent
commit
222ddeb2f4

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

@@ -40,7 +40,7 @@ import de.butzlabben.missilewars.game.stats.FightStats;
 import de.butzlabben.missilewars.game.timer.EndTimer;
 import de.butzlabben.missilewars.game.timer.GameTimer;
 import de.butzlabben.missilewars.game.timer.LobbyTimer;
-import de.butzlabben.missilewars.game.timer.Timer;
+import de.butzlabben.missilewars.game.timer.TaskManager;
 import de.butzlabben.missilewars.inventory.OrcItem;
 import de.butzlabben.missilewars.listener.game.EndListener;
 import de.butzlabben.missilewars.listener.game.GameBoundListener;
@@ -84,8 +84,6 @@ public class Game {
     private final Map<String, Integer> votes = new HashMap<>(); // Votes for the maps.
     private final Lobby lobby;
     private final HashMap<UUID, BukkitTask> playerTasks = new HashMap<>();
-    private Timer timer;
-    private BukkitTask bt;
     private GameState state = GameState.LOBBY;
     private Team team1;
     private Team team2;
@@ -99,6 +97,7 @@ public class Game {
     private ScoreboardManager scoreboardManager;
     private GameBoundListener listener;
     private EquipmentManager equipmentManager;
+    private TaskManager taskManager;
 
     public Game(Lobby lobby) {
         Logger.BOOT.log("Loading lobby " + lobby.getName());
@@ -139,10 +138,11 @@ public class Game {
 
         Logger.DEBUG.log("Start timer");
 
-        stopTimer();
+        taskManager = new TaskManager(this);
+        taskManager.stopTimer();
         updateGameListener(new LobbyListener(this));
-        timer = new LobbyTimer(this, lobby.getLobbyTime());
-        bt = Bukkit.getScheduler().runTaskTimer(MissileWars.getInstance(), timer, 0, 20);
+        taskManager.setTimer(new LobbyTimer(this, lobby.getLobbyTime()));
+        taskManager.setBukkitTask(0, 20);
         state = GameState.LOBBY;
 
         Bukkit.getScheduler().runTaskLater(MissileWars.getInstance(), () -> applyForAllPlayers(this::runTeleportEventForPlayer), 2);
@@ -214,10 +214,10 @@ public class Game {
             return;
         }
 
-        stopTimer();
+        taskManager.stopTimer();
         updateGameListener(new GameListener(this));
-        timer = new GameTimer(this);
-        bt = Bukkit.getScheduler().runTaskTimer(MissileWars.getInstance(), timer, 5, 20);
+        taskManager.setTimer(new GameTimer(this));
+        taskManager.setBukkitTask(5, 20);
         state = GameState.INGAME;
 
         timestart = System.currentTimeMillis();
@@ -229,11 +229,6 @@ public class Game {
         Bukkit.getPluginManager().callEvent(new GameStartEvent(this));
     }
 
-    private void stopTimer() {
-        if (bt != null)
-            bt.cancel();
-    }
-
     public void stopGame() {
         if (Config.isSetup()) return;
 
@@ -252,10 +247,10 @@ public class Game {
 
         }
 
-        stopTimer();
+        taskManager.stopTimer();
         updateGameListener(new EndListener(this));
-        timer = new EndTimer(this);
-        bt = Bukkit.getScheduler().runTaskTimer(MissileWars.getInstance(), timer, 5, 20);
+        taskManager.setTimer(new EndTimer(this));
+        taskManager.setBukkitTask(5, 20);
         state = GameState.END;
 
         updateMOTD();
@@ -443,7 +438,7 @@ public class Game {
     public void resetGame() {
         HandlerList.unregisterAll(listener);
 
-        stopTimer();
+        taskManager = new TaskManager(this);
 
         applyForAllPlayers(this::teleportToAfterGameSpawn);
 

+ 54 - 0
missilewars-plugin/src/main/java/de/butzlabben/missilewars/game/timer/TaskManager.java

@@ -0,0 +1,54 @@
+/*
+ * This file is part of MissileWars (https://github.com/Butzlabben/missilewars).
+ * Copyright (c) 2018-2021 Daniel Nägele.
+ *
+ * MissileWars is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * MissileWars is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with MissileWars.  If not, see <https://www.gnu.org/licenses/>.
+ */
+
+package de.butzlabben.missilewars.game.timer;
+
+import de.butzlabben.missilewars.MissileWars;
+import de.butzlabben.missilewars.game.Game;
+import lombok.Getter;
+import lombok.Setter;
+import org.bukkit.Bukkit;
+import org.bukkit.scheduler.BukkitTask;
+
+/**
+ * @author Butzlabben
+ * @since 14.01.2018
+ */
+
+@Getter
+public class TaskManager {
+
+    private final Game game;
+
+    @Setter private Timer timer;
+    private BukkitTask bukkitTask;
+
+    public TaskManager(Game game) {
+        this.game = game;
+    }
+    
+    public void setBukkitTask(long delay, long period) {
+        bukkitTask = Bukkit.getScheduler().runTaskTimer(MissileWars.getInstance(), timer , delay, period);
+    }
+
+    public void stopTimer() {
+        if (bukkitTask != null)
+            bukkitTask.cancel();
+    }
+    
+}