Provide fallback install when java not in path (#179 #209)

This commit is contained in:
IzzelAliz 2021-04-18 15:24:29 +08:00
parent 5f82080fb6
commit 2f13fc4682

View File

@ -17,6 +17,7 @@ import java.io.InputStreamReader;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.net.URL; import java.net.URL;
import java.net.URLClassLoader;
import java.nio.file.FileSystem; import java.nio.file.FileSystem;
import java.nio.file.FileSystems; import java.nio.file.FileSystems;
import java.nio.file.Files; import java.nio.file.Files;
@ -65,11 +66,19 @@ public class ForgeInstaller {
CompletableFuture<?>[] futures = installForge(installInfo, pool); CompletableFuture<?>[] futures = installForge(installInfo, pool);
handleFutures(futures); handleFutures(futures);
ArclightLocale.info("downloader.forge-install"); ArclightLocale.info("downloader.forge-install");
try {
ProcessBuilder builder = new ProcessBuilder(); 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.command("java", "-Djava.net.useSystemProxies=true", "-jar", String.format("forge-%s-%s-installer.jar", installInfo.installer.minecraft, installInfo.installer.forge), "--installServer", ".");
builder.inheritIO(); builder.inheritIO();
Process process = builder.start(); Process process = builder.start();
process.waitFor(); 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); handleFutures(array);
pool.shutdownNow(); pool.shutdownNow();