diff --git a/zond/src/main/java/asys/zond/ZondCommandHandler.java b/zond/src/main/java/asys/zond/ZondCommandHandler.java index 193979f..87b9ed9 100644 --- a/zond/src/main/java/asys/zond/ZondCommandHandler.java +++ b/zond/src/main/java/asys/zond/ZondCommandHandler.java @@ -14,7 +14,12 @@ import org.apache.commons.exec.ExecuteWatchdog; import org.apache.commons.exec.Executor; import org.fusesource.jansi.Ansi; +import java.io.BufferedReader; import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.Arrays; +import java.util.List; public class ZondCommandHandler implements CommandHandler { private Executor executor; @@ -57,6 +62,27 @@ public class ZondCommandHandler implements CommandHandler { }, "Thread Ticker"); } + private void preStartScript() { + if (Config.getInstance().getString("cmd.prestart").isEmpty()) + return; + + ProcessBuilder builder = new ProcessBuilder(Arrays.asList( + Config.getInstance().getString("cmd.prestart").split(" ", 2))); + builder.redirectErrorStream(true); + try { + Process process = builder.start(); + BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream())); + String line; + while ((line = br.readLine()) != null) { + Shell.getInstance().getOutput().println(zondColored(line)); + } + process.waitFor(); + } catch (IOException | InterruptedException e) { + Shell.getInstance().getOutput() + .println(zondColored("[!] PreStart error: " + e.getMessage(), Ansi.Color.RED)); + } + } + @Override public void handle(String commandLine) { if (commandLine.startsWith(":")) { @@ -103,6 +129,8 @@ public class ZondCommandHandler implements CommandHandler { private void startProcess() { if (watchdog == null || !watchdog.isWatching()) { + preStartScript(); + if (watchdog == null) { watchdog = new ZondExecuteWatchdog( ExecuteWatchdog.INFINITE_TIMEOUT, diff --git a/zond/src/main/resources/zond.properties b/zond/src/main/resources/zond.properties index ddffcb0..03dc7dc 100644 --- a/zond/src/main/resources/zond.properties +++ b/zond/src/main/resources/zond.properties @@ -10,4 +10,5 @@ pingmonitor.maxlost = 6 #cmd.killer = taskkill /F /PID %PID #Linux cmd.killer = kill -KILL %PID -cmd.start = java -jar server.jar \ No newline at end of file +cmd.start = java -jar server.jar +cmd.prestart = echo Hello \ No newline at end of file