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