From 1a0831eec240540ef817e4f0f2d8b8d5f44bf5e9 Mon Sep 17 00:00:00 2001 From: Tungstend Date: Fri, 21 Oct 2022 19:34:54 +0800 Subject: [PATCH] fix api installation --- .../download/forge/ForgeNewInstallTask.java | 34 ++++++++++++++----- .../optifine/OptiFineInstallTask.java | 2 +- 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/download/forge/ForgeNewInstallTask.java b/FCLCore/src/main/java/com/tungsten/fclcore/download/forge/ForgeNewInstallTask.java index b91d2c54..8dcd8980 100644 --- a/FCLCore/src/main/java/com/tungsten/fclcore/download/forge/ForgeNewInstallTask.java +++ b/FCLCore/src/main/java/com/tungsten/fclcore/download/forge/ForgeNewInstallTask.java @@ -5,9 +5,14 @@ import static com.tungsten.fclcore.util.Hex.encodeHex; import static com.tungsten.fclcore.util.Logging.LOG; import static com.tungsten.fclcore.util.gson.JsonUtils.fromNonNullJson; +import android.content.Intent; +import android.os.Bundle; + +import com.tungsten.fclcore.constant.FCLPath; import com.tungsten.fclcore.download.ArtifactMalformedException; import com.tungsten.fclcore.download.DefaultDependencyManager; import com.tungsten.fclcore.download.LibraryAnalyzer; +import com.tungsten.fclcore.download.ProcessService; import com.tungsten.fclcore.download.game.GameLibrariesTask; import com.tungsten.fclcore.download.game.VersionJsonDownloadTask; import com.tungsten.fclcore.game.Artifact; @@ -19,11 +24,14 @@ import com.tungsten.fclcore.game.Library; import com.tungsten.fclcore.game.Version; import com.tungsten.fclcore.task.FileDownloadTask; import com.tungsten.fclcore.task.Task; +import com.tungsten.fclcore.util.SocketServer; import com.tungsten.fclcore.util.StringUtils; import com.tungsten.fclcore.util.function.ExceptionalFunction; import com.tungsten.fclcore.util.gson.JsonUtils; import com.tungsten.fclcore.util.io.ChecksumMismatchException; +import com.tungsten.fclcore.util.io.CompressingUtils; import com.tungsten.fclcore.util.io.FileUtils; +import com.tungsten.fclcore.util.platform.CommandBuilder; import org.jetbrains.annotations.NotNull; @@ -47,10 +55,10 @@ public class ForgeNewInstallTask extends Task { private class ProcessorTask extends Task { - private Processor processor; + private ForgeNewInstallProfile.Processor processor; private Map vars; - public ProcessorTask(@NotNull Processor processor, @NotNull Map vars) { + public ProcessorTask(@NotNull ForgeNewInstallProfile.Processor processor, @NotNull Map vars) { this.processor = processor; this.vars = vars; setSignificance(TaskSignificance.MODERATE); @@ -109,7 +117,6 @@ public class ForgeNewInstallTask extends Task { throw new Exception("Game processor jar does not have main class " + jar); List command = new ArrayList<>(); - command.add(JavaVersion.fromCurrentEnvironment().getBinary().toString()); command.add("-cp"); List classpath = new ArrayList<>(processor.getClasspath().size() + 1); @@ -120,7 +127,7 @@ public class ForgeNewInstallTask extends Task { classpath.add(file.toString()); } classpath.add(jar.toString()); - command.add(String.join(OperatingSystem.PATH_SEPARATOR, classpath)); + command.add(String.join(File.pathSeparator, classpath)); command.add(mainClass); @@ -135,7 +142,18 @@ public class ForgeNewInstallTask extends Task { command.addAll(args); LOG.info("Executing external processor " + processor.getJar().toString() + ", command line: " + new CommandBuilder().addAll(command).toString()); - int exitCode = SystemUtils.callExternalProcess(command); + int exitCode; + SocketServer server = new SocketServer("127.0.0.1", ProcessService.PROCESS_SERVICE_PORT, (server1, msg) -> { + server1.setResult(msg); + server1.stop(); + }); + Intent service = new Intent(FCLPath.CONTEXT, ProcessService.class); + Bundle bundle = new Bundle(); + bundle.putStringArray("commands", command.toArray(new String[0])); + service.putExtras(bundle); + FCLPath.CONTEXT.startService(service); + server.start(); + exitCode = (int) server.getResult(); if (exitCode != 0) throw new IOException("Game processor exited abnormally with code " + exitCode); @@ -165,7 +183,7 @@ public class ForgeNewInstallTask extends Task { private final List> dependencies = new ArrayList<>(1); private ForgeNewInstallProfile profile; - private List processors; + private List processors; private Version forgeVersion; private final String selfVersion; @@ -309,7 +327,7 @@ public class ForgeNewInstallTask extends Task { return options; } - private Task patchDownloadMojangMappingsTask(Processor processor, Map vars) { + private Task patchDownloadMojangMappingsTask(ForgeNewInstallProfile.Processor processor, Map vars) { Map options = parseOptions(processor.getArgs(), vars); if (!"DOWNLOAD_MOJMAPS".equals(options.get("task")) || !"client".equals(options.get("side"))) return null; @@ -339,7 +357,7 @@ public class ForgeNewInstallTask extends Task { }); } - private Task createProcessorTask(Processor processor, Map vars) { + private Task createProcessorTask(ForgeNewInstallProfile.Processor processor, Map vars) { Task task = patchDownloadMojangMappingsTask(processor, vars); if (task == null) { task = new ProcessorTask(processor, vars); diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/download/optifine/OptiFineInstallTask.java b/FCLCore/src/main/java/com/tungsten/fclcore/download/optifine/OptiFineInstallTask.java index 22cf0bbe..2cee9b6f 100644 --- a/FCLCore/src/main/java/com/tungsten/fclcore/download/optifine/OptiFineInstallTask.java +++ b/FCLCore/src/main/java/com/tungsten/fclcore/download/optifine/OptiFineInstallTask.java @@ -140,7 +140,7 @@ public final class OptiFineInstallTask extends Task { dest.toString(), gameRepository.getLibraryFile(version, optiFineLibrary).toString() }; - int exitCode = 0; + int exitCode; SocketServer server = new SocketServer("127.0.0.1", ProcessService.PROCESS_SERVICE_PORT, (server1, msg) -> { server1.setResult(msg); server1.stop();