From 2f13fc4682c4fd8e72397f203dd4e93c86939fff Mon Sep 17 00:00:00 2001 From: IzzelAliz Date: Sun, 18 Apr 2021 15:24:29 +0800 Subject: [PATCH] Provide fallback install when java not in path (#179 #209) --- .../forgeinstaller/ForgeInstaller.java | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/forge-installer/src/main/java/io/izzel/arclight/forgeinstaller/ForgeInstaller.java b/forge-installer/src/main/java/io/izzel/arclight/forgeinstaller/ForgeInstaller.java index e5c01fd9..75ed1de1 100644 --- a/forge-installer/src/main/java/io/izzel/arclight/forgeinstaller/ForgeInstaller.java +++ b/forge-installer/src/main/java/io/izzel/arclight/forgeinstaller/ForgeInstaller.java @@ -17,6 +17,7 @@ import java.io.InputStreamReader; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.net.URL; +import java.net.URLClassLoader; import java.nio.file.FileSystem; import java.nio.file.FileSystems; import java.nio.file.Files; @@ -65,11 +66,19 @@ public class ForgeInstaller { CompletableFuture[] futures = installForge(installInfo, pool); handleFutures(futures); ArclightLocale.info("downloader.forge-install"); - ProcessBuilder builder = new ProcessBuilder(); - builder.command("java", "-Djava.net.useSystemProxies=true", "-jar", String.format("forge-%s-%s-installer.jar", installInfo.installer.minecraft, installInfo.installer.forge), "--installServer", "."); - builder.inheritIO(); - Process process = builder.start(); - process.waitFor(); + try { + ProcessBuilder builder = new ProcessBuilder(); + builder.command("java", "-Djava.net.useSystemProxies=true", "-jar", String.format("forge-%s-%s-installer.jar", installInfo.installer.minecraft, installInfo.installer.forge), "--installServer", "."); + builder.inheritIO(); + Process process = builder.start(); + process.waitFor(); + } catch (IOException e) { + URLClassLoader loader = new URLClassLoader( + new URL[]{new File(String.format("forge-%s-%s-installer.jar", installInfo.installer.minecraft, installInfo.installer.forge)).toURI().toURL()}, + ForgeInstaller.class.getClassLoader().getParent()); + Method method = loader.loadClass("net.minecraftforge.installer.SimpleInstaller").getMethod("main", String[].class); + method.invoke(null, (Object) new String[]{"--installServer", "."}); + } } handleFutures(array); pool.shutdownNow();