diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..a4bb591 --- /dev/null +++ b/pom.xml @@ -0,0 +1,73 @@ + + + + 4.0.0 + + de.jakob48 + restartcountdown + 1.0 + jar + + + 21 + ${java.version} + ${java.version} + UTF-8 + 1.20.1-R0.1-SNAPSHOT + + + + + papermc-repo + https://repo.papermc.io/repository/maven-public/ + + + + + + + io.papermc.paper + paper-api + ${paper.version} + provided + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.11.0 + + ${java.version} + ${java.version} + + + + + + org.apache.maven.plugins + maven-shade-plugin + 3.5.0 + + + package + + shade + + + false + + + + + + + + + diff --git a/src/main/java/de/jakob48/restartcountdown.java b/src/main/java/de/jakob48/restartcountdown.java new file mode 100644 index 0000000..2d807cd --- /dev/null +++ b/src/main/java/de/jakob48/restartcountdown.java @@ -0,0 +1,115 @@ +package de.jakob48; + +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.plugin.java.JavaPlugin; +import org.bukkit.scheduler.BukkitRunnable; + +public class restartcountdown extends JavaPlugin { + + private BukkitRunnable countdownTask = null; // Referenz auf aktuellen Countdown + + @Override + public void onEnable() { + getLogger().info("RestartCountdown Plugin aktiviert!"); + } + + @Override + public void onDisable() { + getLogger().info("RestartCountdown Plugin deaktiviert!"); + if (countdownTask != null) countdownTask.cancel(); + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + if (!command.getName().equalsIgnoreCase("restartserver")) return false; + + if (args.length == 0) { + sender.sendMessage("§cVerwendung: /restartserver oder /restartserver stop"); + return false; + } + + if (args[0].equalsIgnoreCase("stop")) { + if (countdownTask != null) { + countdownTask.cancel(); + countdownTask = null; + Bukkit.broadcastMessage("§cCountdown wurde gestoppt!"); + } else { + sender.sendMessage("§cEs läuft kein Countdown!"); + } + return true; + } + + long seconds = parseTime(args[0]); + if (seconds <= 0) { + sender.sendMessage("§cUngültige Zeitangabe!"); + return false; + } + + sender.sendMessage("§aServerneustart in " + formatTime(seconds) + " gestartet!"); + startCountdown(seconds); + return true; + } + + private long parseTime(String input) { + try { + if (input.endsWith("s")) return Long.parseLong(input.replace("s", "")); + if (input.endsWith("m")) return Long.parseLong(input.replace("m", "")) * 60; + if (input.endsWith("h")) return Long.parseLong(input.replace("h", "")) * 3600; + } catch (NumberFormatException e) { + return -1; + } + return -1; + } + + private void startCountdown(long seconds) { + if (countdownTask != null) countdownTask.cancel(); + + countdownTask = new BukkitRunnable() { + long timeLeft = seconds; + + @Override + public void run() { + if (timeLeft <= 0) { + Bukkit.broadcastMessage("§cServer wird jetzt neu gestartet!"); + Bukkit.shutdown(); + cancel(); + countdownTask = null; + return; + } + + if (timeLeft == seconds) { + Bukkit.broadcastMessage("§eServerneustart in " + formatTime(timeLeft) + "!"); + } + else if (timeLeft > 600 && timeLeft % 600 == 0) { + Bukkit.broadcastMessage("§eServerneustart in " + formatTime(timeLeft) + "!"); + } + else if (timeLeft <= 600 && timeLeft >= 60 && timeLeft % 60 == 0) { + Bukkit.broadcastMessage("§eServerneustart in " + formatTime(timeLeft) + "!"); + } + else if (timeLeft == 20) { + Bukkit.broadcastMessage("§cServerneustart in 20 Sekunden!"); + } + else if (timeLeft <= 10) { + Bukkit.broadcastMessage("§cServerneustart in " + timeLeft + " Sekunden!"); + } + + timeLeft--; + } + }; + + countdownTask.runTaskTimer(this, 0, 20); // 20 Ticks = 1 Sekunde + } + + 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"); + return sb.toString().trim(); + } +} diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml new file mode 100644 index 0000000..c852d4f --- /dev/null +++ b/src/main/resources/plugin.yml @@ -0,0 +1,12 @@ +name: RestartCountdown +version: 1.0 +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