From 985c8f5fe6c3e0ef7f494a860ff334337d00a302 Mon Sep 17 00:00:00 2001 From: jaki48 Date: Sun, 14 Sep 2025 12:30:29 +0200 Subject: [PATCH] update 1.1 --- .idea/encodings.xml | 7 ++ .idea/misc.xml | 12 +++ .idea/vcs.xml | 6 ++ pom.xml | 2 +- .../java/de/jakob48/restartcountdown.java | 94 ++++++++++++++----- src/main/resources/config.yml | 17 ++++ src/main/resources/plugin.yml | 2 +- target/classes/plugin.yml | 12 +++ target/maven-archiver/pom.properties | 3 + .../compile/default-compile/createdFiles.lst | 2 + .../compile/default-compile/inputFiles.lst | 1 + 11 files changed, 134 insertions(+), 24 deletions(-) create mode 100644 .idea/encodings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/vcs.xml create mode 100644 src/main/resources/config.yml create mode 100644 target/classes/plugin.yml create mode 100644 target/maven-archiver/pom.properties create mode 100644 target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst create mode 100644 target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..aa00ffa --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..4c7d54e --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index a4bb591..eacf70e 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ de.jakob48 restartcountdown - 1.0 + 1.1 jar diff --git a/src/main/java/de/jakob48/restartcountdown.java b/src/main/java/de/jakob48/restartcountdown.java index 2d807cd..d53c33d 100644 --- a/src/main/java/de/jakob48/restartcountdown.java +++ b/src/main/java/de/jakob48/restartcountdown.java @@ -6,12 +6,16 @@ import org.bukkit.command.CommandSender; import org.bukkit.plugin.java.JavaPlugin; import org.bukkit.scheduler.BukkitRunnable; +import java.util.HashSet; +import java.util.Set; + public class restartcountdown extends JavaPlugin { - private BukkitRunnable countdownTask = null; // Referenz auf aktuellen Countdown + private BukkitRunnable countdownTask = null; @Override public void onEnable() { + saveDefaultConfig(); getLogger().info("RestartCountdown Plugin aktiviert!"); } @@ -26,28 +30,30 @@ public class restartcountdown extends JavaPlugin { if (!command.getName().equalsIgnoreCase("restartserver")) return false; if (args.length == 0) { - sender.sendMessage("§cVerwendung: /restartserver oder /restartserver stop"); - return false; + sender.sendMessage(getConfig().getString("messages.usage", "§cVerwendung: /restartserver oder /restartserver stop")); + return true; } + // Countdown stoppen if (args[0].equalsIgnoreCase("stop")) { if (countdownTask != null) { countdownTask.cancel(); countdownTask = null; - Bukkit.broadcastMessage("§cCountdown wurde gestoppt!"); + Bukkit.broadcastMessage(getConfig().getString("messages.stop", "§cCountdown wurde gestoppt!")); } else { sender.sendMessage("§cEs läuft kein Countdown!"); } return true; } + // Zeit parsen long seconds = parseTime(args[0]); if (seconds <= 0) { - sender.sendMessage("§cUngültige Zeitangabe!"); - return false; + sender.sendMessage(getConfig().getString("messages.invalid_time", "§cUngültige Zeitangabe!")); + return true; } - sender.sendMessage("§aServerneustart in " + formatTime(seconds) + " gestartet!"); + // Countdown starten startCountdown(seconds); return true; } @@ -63,53 +69,97 @@ public class restartcountdown extends JavaPlugin { return -1; } - private void startCountdown(long seconds) { + private void startCountdown(long totalSeconds) { if (countdownTask != null) countdownTask.cancel(); + // Halbzeit-/Viertel-/Achtel-Marken vorberechnen + Set halbzeitMarken = new HashSet<>(); + long check = totalSeconds / 2; + while (check >= 10) { + halbzeitMarken.add(check); + check /= 2; + } + + // Feste Meldungen (z.B. 20, 10, 5 Minuten) + Set festeMarken = new HashSet<>(); + festeMarken.add(1200L); // 20 Minuten + festeMarken.add(600L); // 10 Minuten + festeMarken.add(300L); // 5 Minuten + + // Bereits angekündigte Zeiten merken, um Doppelmeldungen zu verhindern + Set announced = new HashSet<>(); + countdownTask = new BukkitRunnable() { - long timeLeft = seconds; + long timeLeft = totalSeconds; @Override public void run() { if (timeLeft <= 0) { - Bukkit.broadcastMessage("§cServer wird jetzt neu gestartet!"); + Bukkit.broadcastMessage(getConfig().getString("messages.restart", "§cServer wird jetzt neu gestartet!")); Bukkit.shutdown(); cancel(); countdownTask = null; return; } - if (timeLeft == seconds) { - Bukkit.broadcastMessage("§eServerneustart in " + formatTime(timeLeft) + "!"); + String msg = null; + + // Startmeldung + if (timeLeft == totalSeconds && !announced.contains(timeLeft)) { + msg = getConfig().getString("messages.start", "§eServerneustart in %time% gestartet!"); + announced.add(timeLeft); } - else if (timeLeft > 600 && timeLeft % 600 == 0) { - Bukkit.broadcastMessage("§eServerneustart in " + formatTime(timeLeft) + "!"); + // Feste Meldungen + else if (festeMarken.contains(timeLeft) && !announced.contains(timeLeft)) { + msg = getConfig().getString("messages.fixed_" + timeLeft, "§eServerneustart in %time%!"); + announced.add(timeLeft); } - else if (timeLeft <= 600 && timeLeft >= 60 && timeLeft % 60 == 0) { - Bukkit.broadcastMessage("§eServerneustart in " + formatTime(timeLeft) + "!"); + // Halbzeit-/Viertel-/Achtel-Meldungen + else if (halbzeitMarken.contains(timeLeft) && !announced.contains(timeLeft)) { + msg = getConfig().getString("messages.half", "§6Serverneustart in %time%! (Halbzeit)"); + announced.add(timeLeft); } - else if (timeLeft == 20) { - Bukkit.broadcastMessage("§cServerneustart in 20 Sekunden!"); + // Ab 10 Minuten jede volle Minute + else if (timeLeft > 60 && timeLeft <= 600 && timeLeft % 60 == 0 && !announced.contains(timeLeft)) { + msg = getConfig().getString("messages.minute", "§eServerneustart in %time%!"); + announced.add(timeLeft); } - else if (timeLeft <= 10) { - Bukkit.broadcastMessage("§cServerneustart in " + timeLeft + " Sekunden!"); + // Ab 1 Minute jede volle Minute + else if (timeLeft > 20 && timeLeft <= 60 && timeLeft % 60 == 0 && !announced.contains(timeLeft)) { + msg = getConfig().getString("messages.minute", "§eServerneustart in %time%!"); + announced.add(timeLeft); + } + // Bei genau 20 Sekunden + else if (timeLeft == 20 && !announced.contains(timeLeft)) { + msg = getConfig().getString("messages.seconds_20", "§cAchtung! Der Server wird in 20 Sekunden neu gestartet!"); + announced.add(timeLeft); + } + // Letzte 10 Sekunden, jede Sekunde + else if (timeLeft <= 10 && !announced.contains(timeLeft)) { + msg = getConfig().getString("messages.seconds_final", "§4Serverneustart in %time% Sekunden!"); + announced.add(timeLeft); + } + + if (msg != null) { + Bukkit.broadcastMessage(msg.replace("%time%", formatTime(timeLeft))); } timeLeft--; } }; - countdownTask.runTaskTimer(this, 0, 20); // 20 Ticks = 1 Sekunde + countdownTask.runTaskTimer(this, 0, 20); } private String formatTime(long seconds) { long hours = seconds / 3600; long minutes = (seconds % 3600) / 60; long secs = seconds % 60; + StringBuilder sb = new StringBuilder(); if (hours > 0) sb.append(hours).append("h "); if (minutes > 0) sb.append(minutes).append("m "); - if (secs > 0) sb.append(secs).append("s"); + if (secs > 0 || sb.length() == 0) sb.append(secs).append("s"); return sb.toString().trim(); } } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml new file mode 100644 index 0000000..21f941d --- /dev/null +++ b/src/main/resources/config.yml @@ -0,0 +1,17 @@ +messages: + start: "§aAchtung! Der Server wird in %time% neu gestartet!" + stop: "§cCountdown wurde gestoppt!" + restart: "§cServer wird jetzt neu gestartet!" + invalid_time: "§cUngültige Zeitangabe!" + usage: "§cVerwendung: /restartserver oder /restartserver stop" + + # Dynamische Meldungen + half: "§eServerneustart in %time%!" + minute: "§eServerneustart in %time%!" + seconds_20: "§eServerneustart in 20s!" + seconds_final: "§cServerneustart in %time% Sekunden!" + + # Feste Meldungen + fixed_1200: "§eServerneustart in 20m!" + fixed_600: "§eServerneustart in 10m!" + fixed_300: "§eServerneustart in 5m!" \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index c852d4f..79c2e7e 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ name: RestartCountdown -version: 1.0 +version: 1.1 main: de.jakob48.restartcountdown api-version: 1.20 commands: diff --git a/target/classes/plugin.yml b/target/classes/plugin.yml new file mode 100644 index 0000000..79c2e7e --- /dev/null +++ b/target/classes/plugin.yml @@ -0,0 +1,12 @@ +name: RestartCountdown +version: 1.1 +main: de.jakob48.restartcountdown +api-version: 1.20 +commands: + restartserver: + description: Startet einen Server-Neustart nach Countdown + usage: /restartserver + permission: restartserver.use +permissions: + restartserver.use: + default: op diff --git a/target/maven-archiver/pom.properties b/target/maven-archiver/pom.properties new file mode 100644 index 0000000..1aa26a0 --- /dev/null +++ b/target/maven-archiver/pom.properties @@ -0,0 +1,3 @@ +artifactId=restartcountdown +groupId=de.jakob48 +version=1.1 diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..323ba20 --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,2 @@ +de/jakob48/restartcountdown$1.class +de/jakob48/restartcountdown.class diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..0f26ef7 --- /dev/null +++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1 @@ +/Users/jakob/IdeaProjects/RestartCountdownPlugin/src/main/java/de/jakob48/restartcountdown.java