diff --git a/src/main/java/de/fanta/challenges/Timer.java b/src/main/java/de/fanta/challenges/Timer.java index 31b621b..69b965c 100644 --- a/src/main/java/de/fanta/challenges/Timer.java +++ b/src/main/java/de/fanta/challenges/Timer.java @@ -27,16 +27,18 @@ private int actionBarTaskId; private int idleActionBarTaskId; - private int time; // seconds + private long time; // milliseconds private int timeSinceMLG; // seconds private int maxMLGTime; // seconds private boolean mlgActive; - private boolean reverse; + private TimerMode mode; + private long countingSinceTimestamp; public Timer(Challenges plugin) { this.plugin = plugin; this.random = new Random(); this.maxMLGTime = plugin.getConfig().getInt("mlg.maxtime"); + this.mode = TimerMode.DOWN; if (!isRunning()) { sendIdleActionBar(); @@ -44,6 +46,7 @@ } public void startTimer() { + countingSinceTimestamp = System.currentTimeMillis(); if (idleActionBarTaskId > 0) { Bukkit.getScheduler().cancelTask(idleActionBarTaskId); idleActionBarTaskId = -1; @@ -55,9 +58,14 @@ triggerMLG(); } - if (reverse) { + if (mode == TimerMode.DOWN) { if (time <= 0) { - if (!plugin.getConfig().getBoolean("event.enabled")) { + if (plugin.getConfig().getBoolean("event.enabled")) { + for (Player p : Bukkit.getOnlinePlayers()) { + p.setGameMode(GameMode.SPECTATOR); + } + GUIUtils.sendTitleToAll("Event", "Die Zeit ist abgelaufen!", ChatColor.GREEN); + } else { for (Player p : Bukkit.getOnlinePlayers()) { p.setGameMode(GameMode.SPECTATOR); p.sendTitle(ChatColor.DARK_RED + "ZEIT ABGELAUFEN!", ChatColor.RED + "Challenge fehgeschlagen", 10, 60, 10); @@ -65,19 +73,14 @@ ChatUtil.sendBrodcastMessage(ChatColor.DARK_RED + "Die Zeit ist abgelaufen und die Challenge somit fehlgeschlagen!"); ChatUtil.sendBrodcastMessage("Seed: " + ChatColor.AQUA + Bukkit.getWorlds().get(0).getSeed()); - } else { - for (Player p : Bukkit.getOnlinePlayers()) { - p.setGameMode(GameMode.SPECTATOR); - } - GUIUtils.sendTitleToAll("Event", "Die Zeit ist abgelaufen!", ChatColor.GREEN); } stopTimer(); } else { - time--; + time -= (System.currentTimeMillis() - countingSinceTimestamp); sendTimerActionBar(ChatUtil.BLUE); } } else { - time++; + time += (System.currentTimeMillis() - countingSinceTimestamp); sendTimerActionBar(ChatUtil.GREEN); } }, 20L, 20L); @@ -142,15 +145,22 @@ } public String formatTime(ChatColor color) { - return color + StringUtil.formatTimespan((long) time * 1000L, " Tag/e ", "", "", "", ":", ":", false, true); + return color + StringUtil.formatTimespan(time, " Tag/e ", "", "", "", ":", ":", false, true); } public String formatTime() { - return StringUtil.formatTimespan((long) time * 1000L, " Tag/e ", "", "", "", ":", ":", false, true); + return StringUtil.formatTimespan(time, " Tag/e ", "", "", "", ":", ":", false, true); } public void reverseTimer() { - this.reverse = !this.reverse; + if (mode == TimerMode.DOWN) { + mode = TimerMode.UP; + } else { + mode = TimerMode.DOWN; + } + if (isRunning()) { + countingSinceTimestamp = System.currentTimeMillis(); + } } public void tpMLG(Player p) { @@ -201,14 +211,21 @@ } public boolean isReverse() { - return reverse; + return mode == TimerMode.DOWN; } - public int getTime() { - return time; + public long getTime() { + return time / 1000; } public void setTime(int seconds) { - this.time = seconds; + this.time = seconds * 1000L; + this.countingSinceTimestamp = System.currentTimeMillis(); } + + private enum TimerMode { + UP, + DOWN; + } + } \ No newline at end of file