diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 863293c..65ef41b 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -8,24 +8,28 @@ on: [push]
jobs:
build:
- strategy:
- matrix:
- # Use these Java versions
- java: [
- 17, # Current Java LTS & minimum supported by Minecraft
- ]
runs-on: ubuntu-latest
+
steps:
- - name: checkout repository
- uses: actions/checkout@v3
- - name: setup jdk ${{ matrix.java }}
- uses: actions/setup-java@v3
+ - uses: actions/checkout@v4
+ - uses: actions/setup-java@v4
with:
- java-version: ${{ matrix.java }}
- distribution: 'temurin'
+ distribution: 'temurin' # See 'Supported distributions' for available options
+ java-version: '17'
+
- name: build
run: mvn package
+
+ - name: l4j dl
+ run: curl -o l4j.tgz https://cytranet.dl.sourceforge.net/project/launch4j/launch4j-3/3.50/launch4j-3.50-linux-x64.tgz
+
+ - name: l4j unzip
+ run: tar -xzf l4j.tgz
+
+ - name: l4j run
+ run: java -jar launch4j/launch4j.jar launch4jConfig.xml
+
- name: capture build artifacts
uses: actions/upload-artifact@v3
with:
diff --git a/launch4jConfig.xml b/launch4jConfig.xml
new file mode 100644
index 0000000..ef4769a
--- /dev/null
+++ b/launch4jConfig.xml
@@ -0,0 +1,21 @@
+
+ console
+ target/dist/Toolbox2.0.exe
+ target/dist/Toolbox2.0.jar
+ BattleModeIcon.ico
+
+ 17
+ 18
+
+
+ 2.0.0.0
+ 2.0
+ 2.0.0.0
+ 2.0
+ All-in-one tools to manage your own LEM server
+ Legacy Edition Minigames Team
+ Toolbox 2.0
+ Toolbox 2.0
+ Toolbox2.0.exe
+
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 6c11c22..5902d47 100644
--- a/pom.xml
+++ b/pom.xml
@@ -7,6 +7,7 @@
net.kyrptonaught
ToolBox2.0
2.0.0
+ jar
17
@@ -49,30 +50,6 @@
-
- com.akathist.maven.plugins.launch4j
- launch4j-maven-plugin
-
-
- l4j-clui
- package
- launch4j
-
- console
- target/dist/Toolbox2.0.exe
- target/dist/Toolbox2.0.jar
- BattleModeIcon.ico
- %JAVA_HOME%;%PATH%
-
- All-in-one tools to manage your own LEM server
- Legacy Edition Minigames Team
- Toolbox 2.0
- Toolbox 2.0
-
-
-
-
-
diff --git a/src/main/java/net/kyrptonaught/ToolBox/CMDArgsParser.java b/src/main/java/net/kyrptonaught/ToolBox/CMDArgsParser.java
index d2c5012..8b0b6d5 100644
--- a/src/main/java/net/kyrptonaught/ToolBox/CMDArgsParser.java
+++ b/src/main/java/net/kyrptonaught/ToolBox/CMDArgsParser.java
@@ -6,7 +6,7 @@
public class CMDArgsParser {
- private static String[] args;
+ public static String[] args;
public static void setArgs(String[] args) {
CMDArgsParser.args = args;
@@ -39,6 +39,8 @@ public static String getTargetServer() {
return null;
}
+ public static boolean autoUpdateToolbox() {return containsArgs("--autoUpdateToolbox");}
+
public static boolean updateServer() {
return containsArgs("--updateServer");
}
diff --git a/src/main/java/net/kyrptonaught/ToolBox/Main.java b/src/main/java/net/kyrptonaught/ToolBox/Main.java
index 9cd0138..f280f97 100644
--- a/src/main/java/net/kyrptonaught/ToolBox/Main.java
+++ b/src/main/java/net/kyrptonaught/ToolBox/Main.java
@@ -1,16 +1,19 @@
package net.kyrptonaught.ToolBox;
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+
public class Main {
//Γûä
public static void main(String[] args) {
if (args.length > 0 && args[0].equals("--autoHash")) {
AutoHash.autoHash();
- return;
- } else if (args.length > 0 && args[0].equals("--updater")) {
- UpdateChecker.installUpdate();
- return;
+ } else if (args.length > 0 && args[0].equals("--runToolbox")) {
+ Menu.startStateMachine(args);
+ } else {
+ BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
+ CMDArgsParser.setArgs(args);
+ Menu.checkForUpdate(input);
}
-
- Menu.startStateMachine(args);
}
}
\ No newline at end of file
diff --git a/src/main/java/net/kyrptonaught/ToolBox/Menu.java b/src/main/java/net/kyrptonaught/ToolBox/Menu.java
index d7976de..61d5c65 100644
--- a/src/main/java/net/kyrptonaught/ToolBox/Menu.java
+++ b/src/main/java/net/kyrptonaught/ToolBox/Menu.java
@@ -19,32 +19,26 @@
import java.util.stream.Stream;
public class Menu {
- public static boolean SKIP_SHUTDOWN_TASKS = false;
-
-
public static State state;
public static Object stateData;
public static void startStateMachine(String[] args) {
- CMDArgsParser.setArgs(args);
-
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
- if(!SKIP_SHUTDOWN_TASKS) {
- System.out.println();
- System.out.println();
- System.out.println("SHUTTING DOWN");
- System.out.println("Attempting to stop running servers");
- ServerRunner.exit();
- }
+ System.out.println();
+ System.out.println();
+ System.out.println("SHUTTING DOWN");
+ System.out.println("Attempting to stop running servers");
+ ServerRunner.exit();
}));
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
+ CMDArgsParser.setArgs(args);
+
setState(CMDArgsParser.skipSplash() ? State.MENU : State.SPLASH);
Automation.run();
clearConsole();
- //checkForUpdate(input);
while (true) {
clearConsole();
@@ -503,26 +497,28 @@ public static void checkEula(BufferedReader input, InstalledServerInfo serverInf
public static void checkForUpdate(BufferedReader input) {
System.out.println("Checking for Toolbox Updates...");
- System.out.println();
- System.out.println("Current version: Toolbox 2.0 v" + UpdateChecker.version);
-
- String update = UpdateChecker.isUpdateAvailable();
- if (update != null) {
- System.out.println("An update for Toolbox is available: v" + update);
+ String installedVersion = UpdateBootstrapper.getInstalledVersion();
+ if (installedVersion.equals("0.0")) {
+ System.out.println("Toolbox is missing files require to run. The required files will be downloaded automatically.");
System.out.println();
- System.out.println("1. View Release");
- System.out.println("2. Download Update");
-
- System.out.println("0. Ignore");
-
+ System.out.println("1. View Latest Release");
+ System.out.println("2. Download");
+ System.out.println("0. Exit");
System.out.println();
System.out.print("Select Option: ");
+ if(CMDArgsParser.autoUpdateToolbox()){
+ System.out.println("Auto Accepting update...");
+ UpdateBootstrapper.installUpdate();
+ UpdateBootstrapper.runToolbox();
+ return ;
+ }
+
int selection = readInt(input);
if (selection == 1) {
if (Desktop.isDesktopSupported() && Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)) {
try {
- Desktop.getDesktop().browse(new URI(UpdateChecker.URL));
+ Desktop.getDesktop().browse(new URI(UpdateBootstrapper.URL));
} catch (Exception e) {
e.printStackTrace();
}
@@ -530,14 +526,59 @@ public static void checkForUpdate(BufferedReader input) {
clearConsole();
checkForUpdate(input);
} else if (selection == 2) {
- System.out.println("Installing update");
- UpdateChecker.prepUpdate();
+ System.out.println("Installing latest version");
+ UpdateBootstrapper.installUpdate();
+ UpdateBootstrapper.runToolbox();
+ return;
+ } else if (selection == 0) {
+ System.out.println("Exiting...");
+ System.exit(0);
+ }
+ }
+
+ String update = UpdateBootstrapper.isUpdateAvailable();
+ if (update != null) {
+ Path versionFile = Paths.get(".toolbox/VERSION");
+ if (FileHelper.exists(versionFile)) {
+ System.out.println("Current version: Toolbox 2.0 v" + installedVersion);
System.out.println();
- System.out.println("Update installed. Closing Toolbox. Please ");
- pressEnterToCont(input);
- setState(State.EXIT);
+ System.out.println("An update for Toolbox is available: v" + update);
+ System.out.println();
+ System.out.println("1. View Release");
+ System.out.println("2. Download Update");
+ System.out.println("0. Ignore");
+ System.out.println();
+ System.out.print("Select Option: ");
+
+ if(CMDArgsParser.autoUpdateToolbox()){
+ System.out.println("Auto Accepting update...");
+ UpdateBootstrapper.installUpdate();
+ UpdateBootstrapper.runToolbox();
+ return ;
+ }
+
+ int selection = readInt(input);
+ if (selection == 1) {
+ if (Desktop.isDesktopSupported() && Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)) {
+ try {
+ Desktop.getDesktop().browse(new URI(UpdateBootstrapper.URL));
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ clearConsole();
+ checkForUpdate(input);
+
+ } else if (selection == 2) {
+ System.out.println("Installing update");
+ UpdateBootstrapper.installUpdate();
+ UpdateBootstrapper.runToolbox();
+ return;
+ }
}
}
+ System.out.println("Already up to date");
+ UpdateBootstrapper.runToolbox();
}
public static void clearConsole() {
diff --git a/src/main/java/net/kyrptonaught/ToolBox/UpdateBootstrapper.java b/src/main/java/net/kyrptonaught/ToolBox/UpdateBootstrapper.java
new file mode 100644
index 0000000..0923e4b
--- /dev/null
+++ b/src/main/java/net/kyrptonaught/ToolBox/UpdateBootstrapper.java
@@ -0,0 +1,118 @@
+package net.kyrptonaught.ToolBox;
+
+import com.google.gson.JsonArray;
+import com.google.gson.JsonObject;
+import net.kyrptonaught.ToolBox.IO.FileHelper;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.lang.reflect.Method;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.List;
+
+public class UpdateBootstrapper {
+ public static BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
+ public static String URL = "https://github.com/Legacy-Edition-Minigames/ToolBox/releases";
+
+ public static String isUpdateAvailable() {
+ JsonArray response = FileHelper.download(URL.replace("//github.com/", "//api.github.com/repos/"), JsonArray.class);
+
+ if (!response.isEmpty()) {
+ String latestRelease = response.get(0).getAsJsonObject().get("tag_name").getAsString();
+ if (compareVersions(getInstalledVersion(), latestRelease) == -1)
+ return latestRelease;
+ return null;
+ }
+
+ System.out.println("Failed to check for Toolbox Updates");
+ return null;
+ }
+
+ public static void installUpdate() {
+ Menu.clearConsole();
+ System.out.println("Installing Toolbox update...");
+ try {
+ JsonArray response = FileHelper.download(URL.replace("//github.com/", "//api.github.com/repos/"), JsonArray.class);
+
+ if (!response.isEmpty()) {
+ JsonArray assets = response.get(0).getAsJsonObject().get("assets").getAsJsonArray();
+ for (int i = 0; i < assets.size(); i++) {
+ JsonObject obj = assets.get(i).getAsJsonObject();
+
+ String[] fileName = obj.get("name").getAsString().split("\\.");
+
+ String fileExtension = fileName[fileName.length - 1];
+
+ FileHelper.download(obj.get("browser_download_url").getAsString(), Paths.get(".toolbox").resolve("launch." + fileExtension));
+
+ FileHelper.writeFile(Paths.get(".toolbox/VERSION"), response.get(0).getAsJsonObject().get("tag_name").getAsString());
+ }
+ }
+ } catch (Exception e) {
+ System.out.println("Update failed");
+ e.printStackTrace();
+ return;
+ }
+
+ System.out.println("Update successful");
+ System.out.println("Done. Relaunching toolbox...");
+ System.out.println();
+
+ Menu.pressEnterToCont(input);
+ }
+
+ public static void runToolbox() {
+ launchJar(getToolboxRunArgs());
+ }
+
+ private static void launchJar(List args) {
+ try {
+ URLClassLoader child = new URLClassLoader(new URL[]{Paths.get(".toolbox/launch.jar").toUri().toURL()}, Main.class.getClassLoader());
+ Class> classToLoad = Class.forName(Main.class.getName(), true, child);
+ Method method = classToLoad.getDeclaredMethod("main", String[].class);
+ Object instance = classToLoad.newInstance();
+ method.invoke(instance, (Object) args.toArray(String[]::new));
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ private static int compareVersions(String version1, String version2) {
+ int comparisonResult = 0;
+
+ String[] version1Splits = version1.split("\\.");
+ String[] version2Splits = version2.split("\\.");
+ int maxLengthOfVersionSplits = Math.max(version1Splits.length, version2Splits.length);
+
+ for (int i = 0; i < maxLengthOfVersionSplits; i++) {
+ Integer v1 = i < version1Splits.length ? Integer.parseInt(version1Splits[i]) : 0;
+ Integer v2 = i < version2Splits.length ? Integer.parseInt(version2Splits[i]) : 0;
+ int compare = v1.compareTo(v2);
+ if (compare != 0) {
+ comparisonResult = compare;
+ break;
+ }
+ }
+ return comparisonResult;
+ }
+
+ public static String getInstalledVersion() {
+ Path versionFile = Paths.get(".toolbox/VERSION");
+ if (FileHelper.exists(versionFile)) {
+ return FileHelper.readFile(versionFile);
+ } else {
+ return "0.0";
+ }
+ }
+
+ private static List getToolboxRunArgs() {
+ List arguments = new ArrayList<>();
+ arguments.add("--runToolbox");
+ arguments.addAll(List.of(CMDArgsParser.args));
+ return arguments;
+ }
+}
diff --git a/src/main/java/net/kyrptonaught/ToolBox/UpdateChecker.java b/src/main/java/net/kyrptonaught/ToolBox/UpdateChecker.java
deleted file mode 100644
index b8926de..0000000
--- a/src/main/java/net/kyrptonaught/ToolBox/UpdateChecker.java
+++ /dev/null
@@ -1,125 +0,0 @@
-package net.kyrptonaught.ToolBox;
-
-import com.google.gson.JsonArray;
-import com.google.gson.JsonObject;
-import net.kyrptonaught.ToolBox.IO.FileHelper;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.InputStreamReader;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.stream.Stream;
-
-public class UpdateChecker {
-
- //todo change on every new release
- public static String version = "1.0";
-
- public static String URL = "https://github.com/Legacy-Edition-Minigames/ToolBox/releases";
-
- public static String isUpdateAvailable() {
- JsonArray response = FileHelper.download(URL.replace("//github.com/", "//api.github.com/repos/"), JsonArray.class);
-
- if (!response.isEmpty()) {
- String latestRelease = response.get(0).getAsJsonObject().get("tag_name").getAsString();
- if (compareVersions(version, latestRelease) == -1)
- return latestRelease;
- return null;
- }
-
- System.out.println("Failed to check for Toolbox Updates");
- return null;
- }
-
- public static void prepUpdate() {
- FileHelper.createDir(Paths.get(".toolbox").resolve("update"));
-
- JsonArray response = FileHelper.download(URL.replace("//github.com/", "//api.github.com/repos/"), JsonArray.class);
-
- if (!response.isEmpty()) {
- JsonArray assets = response.get(0).getAsJsonObject().get("assets").getAsJsonArray();
- for (int i = 0; i < assets.size(); i++) {
- JsonObject obj = assets.get(i).getAsJsonObject();
- FileHelper.download(obj.get("browser_download_url").getAsString(), Paths.get(".toolbox").resolve("update").resolve(obj.get("name").getAsString()));
- }
-
- FileHelper.copyFile(Paths.get(".").resolve("Toolbox2.0.jar"), Paths.get(".toolbox").resolve("Updater.jar"));
- FileHelper.writeFile(Paths.get(".toolbox").resolve("UPDATE_IN_PROGRESS"), "rua");
-
- launchJar(".toolbox/Updater.jar", "--updater", true);
- }
- }
-
- public static void installUpdate() {
- Menu.clearConsole();
- System.out.println("Installing Toolbox update...");
- try (Stream files = Files.walk(Paths.get(".toolbox").resolve("update"), 1)) {
- Thread.sleep(1000);
-
- files.forEach(path -> {
- if (!Files.isDirectory(path)) {
- FileHelper.copyFile(path, path.getFileName());
- }
- });
- } catch (Exception e) {
- System.out.println("Update failed");
- e.printStackTrace();
- return;
- }
-
- System.out.println("Update successful");
- System.out.println("Cleaning up...");
- FileHelper.deleteDirectory(Paths.get(".toolbox").resolve("update"));
- FileHelper.delete(Paths.get(".toolbox").resolve("UPDATE_IN_PROGRESS"));
-
-
- System.out.println("Done. Relaunching toolbox...");
- System.out.println();
-
- BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
- Menu.pressEnterToCont(input);
-
- launchJar("Toolbox2.0.jar", "", true);
- }
-
- private static void launchJar(String jar, String args, Boolean waitfor) {
- try {
- ProcessBuilder launcher = new ProcessBuilder("java", "-jar", jar, args)
- .directory(new File(System.getProperty("user.dir")))
- .inheritIO();
-
- Process launchedjar = launcher.start();
-
- Menu.SKIP_SHUTDOWN_TASKS = true;
-
- if (waitfor) {
- launchedjar.waitFor();
- }
-
- System.exit(0);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- private static int compareVersions(String version1, String version2) {
- int comparisonResult = 0;
-
- String[] version1Splits = version1.split("\\.");
- String[] version2Splits = version2.split("\\.");
- int maxLengthOfVersionSplits = Math.max(version1Splits.length, version2Splits.length);
-
- for (int i = 0; i < maxLengthOfVersionSplits; i++) {
- Integer v1 = i < version1Splits.length ? Integer.parseInt(version1Splits[i]) : 0;
- Integer v2 = i < version2Splits.length ? Integer.parseInt(version2Splits[i]) : 0;
- int compare = v1.compareTo(v2);
- if (compare != 0) {
- comparisonResult = compare;
- break;
- }
- }
- return comparisonResult;
- }
-}