diff --git a/src/main/java/me/azenet/UHPlugin/UHBorderManager.java b/src/main/java/me/azenet/UHPlugin/UHBorderManager.java index 743ccd1..ae03393 100644 --- a/src/main/java/me/azenet/UHPlugin/UHBorderManager.java +++ b/src/main/java/me/azenet/UHPlugin/UHBorderManager.java @@ -222,6 +222,17 @@ public void setWarningSize(int diameter) { setWarningSize(diameter, 0, null); } + /** + * Returns the UHTimer object representing the countdown before the next border reduction. + *

+ * Returns null if there isn't any countdown running currently. + * + * @return The timer. + */ + public UHTimer getWarningTimer() { + return p.getTimerManager().getTimer(this.warningTimerName); + } + /** * Stops the display of the warning messages. */ @@ -234,7 +245,7 @@ public void cancelWarning() { } } - UHTimer timer = p.getTimerManager().getTimer(this.warningTimerName); + UHTimer timer = getWarningTimer(); timer.stop(); p.getTimerManager().unregisterTimer(timer); } diff --git a/src/main/java/me/azenet/UHPlugin/UHGameManager.java b/src/main/java/me/azenet/UHPlugin/UHGameManager.java index f1f115f..be33efc 100644 --- a/src/main/java/me/azenet/UHPlugin/UHGameManager.java +++ b/src/main/java/me/azenet/UHPlugin/UHGameManager.java @@ -30,7 +30,6 @@ import me.azenet.UHPlugin.i18n.I18n; import me.azenet.UHPlugin.task.FireworksOnWinnersTask; import me.azenet.UHPlugin.task.TeamStartTask; -import me.azenet.UHPlugin.task.UpdateTimerTask; import org.bukkit.Bukkit; import org.bukkit.Difficulty; diff --git a/src/main/java/me/azenet/UHPlugin/UHPlugin.java b/src/main/java/me/azenet/UHPlugin/UHPlugin.java index 5eb71bb..2937395 100644 --- a/src/main/java/me/azenet/UHPlugin/UHPlugin.java +++ b/src/main/java/me/azenet/UHPlugin/UHPlugin.java @@ -27,6 +27,7 @@ import me.azenet.UHPlugin.listeners.UHCraftingListener; import me.azenet.UHPlugin.listeners.UHGameListener; import me.azenet.UHPlugin.listeners.UHGameplayListener; +import me.azenet.UHPlugin.task.UpdateTimerTask; import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; @@ -116,6 +117,11 @@ public void onEnable() { // Imports teams from the config. this.teamManager.importTeamsFromConfig(); + // Starts the task that updates the timers. + // Started here, so a timer can be displayed before the start of the game + // (example: countdown before the start). + new UpdateTimerTask(this).runTaskTimer(this, 20l, 20l); + getLogger().info(i18n.t("load.loaded")); } diff --git a/src/main/java/me/azenet/UHPlugin/UHTimerManager.java b/src/main/java/me/azenet/UHPlugin/UHTimerManager.java index ac5ffb5..759ac0b 100644 --- a/src/main/java/me/azenet/UHPlugin/UHTimerManager.java +++ b/src/main/java/me/azenet/UHPlugin/UHTimerManager.java @@ -71,6 +71,10 @@ public void unregisterTimer(UHTimer timer) { public void updateStartedTimersList() { runningTimers = new HashMap(); + if(getMainTimer() != null && getMainTimer().isRunning()) { + runningTimers.put(getMainTimer().getName(), getMainTimer()); + } + for(UHTimer timer : timers.values()) { if(timer.isRunning()) { runningTimers.put(timer.getName(), timer); diff --git a/src/main/java/me/azenet/UHPlugin/task/BorderWarningTask.java b/src/main/java/me/azenet/UHPlugin/task/BorderWarningTask.java index 60f8606..f35ba2f 100644 --- a/src/main/java/me/azenet/UHPlugin/task/BorderWarningTask.java +++ b/src/main/java/me/azenet/UHPlugin/task/BorderWarningTask.java @@ -42,23 +42,6 @@ public void run() { return; // No messages are sent if the game is frozen. } - int minutesLeft = 0; - - if(p.getBorderManager().getWarningFinalTimeEnabled()) { - minutesLeft = (int) ((p.getBorderManager().getWarningFinalTime() - System.currentTimeMillis()) / (60 * 1000) % 60); - int secondsLeft = (int) ((p.getBorderManager().getWarningFinalTime() - System.currentTimeMillis()) / 1000 % 60); - - if(secondsLeft > 30) { - minutesLeft++; - } - if(secondsLeft < 0) { // Timer is up, but "-0" minutes - minutesLeft = -1; - } - } - else { - minutesLeft = -1; - } - // Message sent to all players outside the border for(Player player : p.getBorderManager().getPlayersOutside(p.getBorderManager().getWarningSize())) { int distance = p.getBorderManager().getDistanceToBorder(player.getLocation(), p.getBorderManager().getWarningSize()); @@ -70,19 +53,7 @@ public void run() { player.sendMessage(i.t("borders.warning.messageSquared", String.valueOf(p.getBorderManager().getWarningSize()))); } - if(minutesLeft <= 0) { - player.sendMessage(i.t("borders.warning.messageDistance", String.valueOf(distance))); - } - else { - player.sendMessage(i.t("borders.warning.messageDistanceTime", String.valueOf(distance), String.valueOf(minutesLeft))); - } - } - - // Message sent to the sender of the warning if the timer is up - if(p.getBorderManager().getWarningFinalTimeEnabled() && minutesLeft <= 0) { - p.getBorderManager().getWarningSender().sendMessage(i.t("borders.warning.timerUp")); - p.getBorderManager().sendCheckMessage(p.getBorderManager().getWarningSender(), p.getBorderManager().getWarningSize()); - p.getBorderManager().stopWarningTime(); + player.sendMessage(i.t("borders.warning.messageDistance", String.valueOf(distance))); } } } diff --git a/src/main/java/me/azenet/UHPlugin/task/UpdateTimerTask.java b/src/main/java/me/azenet/UHPlugin/task/UpdateTimerTask.java index f130800..2b9e987 100644 --- a/src/main/java/me/azenet/UHPlugin/task/UpdateTimerTask.java +++ b/src/main/java/me/azenet/UHPlugin/task/UpdateTimerTask.java @@ -20,6 +20,7 @@ package me.azenet.UHPlugin.task; import me.azenet.UHPlugin.UHPlugin; +import me.azenet.UHPlugin.UHTimer; import org.bukkit.scheduler.BukkitRunnable; @@ -33,7 +34,8 @@ public UpdateTimerTask(UHPlugin p) { @Override public void run() { - p.getGameManager().updateTimer(); + for(UHTimer timer : p.getTimerManager().getRunningTimers()) { + timer.update(); + } } - }