From 6443d1d0b2737bf2cf2c9f0eb1e2cc538be2c537 Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Mon, 19 Dec 2016 17:41:00 +0100 Subject: [PATCH] Added custom restart support --- .classpath | 20 ++++++++++ .settings/org.eclipse.jdt.core.prefs | 12 ++++++ .settings/org.eclipse.m2e.core.prefs | 4 ++ .../serverrunner/ServerRunner.java | 37 +++++++++++++++---- 4 files changed, 65 insertions(+), 8 deletions(-) create mode 100644 .classpath create mode 100644 .settings/org.eclipse.jdt.core.prefs create mode 100644 .settings/org.eclipse.m2e.core.prefs diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..149cb3c --- /dev/null +++ b/.classpath @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..df46a9a --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,12 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..14b697b --- /dev/null +++ b/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/src/buttondevteam/serverrunner/ServerRunner.java b/src/buttondevteam/serverrunner/ServerRunner.java index 489c953..8ab0c10 100644 --- a/src/buttondevteam/serverrunner/ServerRunner.java +++ b/src/buttondevteam/serverrunner/ServerRunner.java @@ -7,6 +7,7 @@ import java.io.InputStreamReader; import java.io.PrintWriter; import java.nio.charset.StandardCharsets; import java.util.Date; +import java.util.regex.Pattern; import jline.console.ConsoleReader; import jline.console.CursorBuffer; @@ -28,6 +29,8 @@ public class ServerRunner { private static volatile ConsoleReader reader; private static volatile PrintWriter runnerout; + private static volatile boolean customrestartfailed = false; + public static void main(String[] args) throws IOException, InterruptedException { String minmem = "512M"; String maxmem = "1G"; @@ -95,6 +98,10 @@ public class ServerRunner { ServerRunner.stop(); writeToScreen("A server is already running!"); } + if (Pattern.matches( + "[\\d\\d:\\d\\d:\\d\\d INFO]: Unknown command. Type \"/help\" for help.\\s+", line)) + customrestartfailed = true; + } else if (!stop) { try { serverinput.close(); @@ -128,21 +135,35 @@ public class ServerRunner { while (!stop) { try { if (restartcounter >= 0) { - if (restartcounter == RESTART_MESSAGE_COUNT) + if (restartcounter == RESTART_MESSAGE_COUNT) { if (firstrun) { // writeToScreen("Sleeping for " + starttime); Thread.sleep(starttime); firstrun = false; } else Thread.sleep(interval * 3600000); - else if (restartcounter > 0) { - if (restartcounter % 10 == 0) - sendMessage(serveroutput, "red", "-- Server restarting in " + restartcounter + " seconds!"); - Thread.sleep(1000); // TODO: Change to bossbar? (plugin) - } else { - writeToScreen("Stopping server for restart..."); - serveroutput.println("restart"); + customrestartfailed = false; + serveroutput.println("schrestart"); serveroutput.flush(); + } else if (restartcounter > 0) { + if (customrestartfailed) { + if (restartcounter % 10 == 0) + sendMessage(serveroutput, "red", + "-- Server restarting in " + restartcounter + " seconds!"); + Thread.sleep(1000); + } else { + restartcounter = RESTART_MESSAGE_COUNT; + continue; // Don't decrement the counter so it will sleep the full time + } + } else { + Thread.sleep(500); + if (customrestartfailed) { + writeToScreen("Stopping server for restart..."); + serveroutput.println("restart"); + serveroutput.flush(); + customrestartfailed = false; + } + Thread.sleep(5000); // Don't run needless cycles } restartcounter--; }