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