From 0fb6f28047c262db322d0239a6289f1d9dd4c3bd Mon Sep 17 00:00:00 2001 From: Duy Tran Khanh <40482367+khanhduytran0@users.noreply.github.com> Date: Sun, 17 Oct 2021 16:33:34 +0700 Subject: [PATCH] Forge 1.17+ support (not tested) --- .../main/java/net/kdt/pojavlaunch/Tools.java | 43 ++++++++++++++++++- 1 file changed, 41 insertions(+), 2 deletions(-) diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/Tools.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/Tools.java index dfa198dfb..4479a4036 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/Tools.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/Tools.java @@ -123,7 +123,7 @@ public final class Tools { else gamedirPath = Tools.DIR_GAME_NEW; if(pvcConfig != null && pvcConfig.jvmArgs != null && !pvcConfig.jvmArgs.isEmpty()) LauncherPreferences.PREF_CUSTOM_JAVA_ARGS = pvcConfig.jvmArgs; PojavLoginActivity.disableSplash(gamedirPath); - String[] launchArgs = getMinecraftArgs(profile, versionInfo, gamedirPath); + String[] launchArgs = getMinecraftClientArgs(profile, versionInfo, gamedirPath); // ctx.appendlnToLog("Minecraft Args: " + Arrays.toString(launchArgs)); @@ -149,6 +149,7 @@ public final class Tools { } */ + javaArgList.addAll(Arrays.asList(getMinecraftJVMArgs(versionInfo, gamedirPath))); javaArgList.add("-cp"); javaArgList.add(getLWJGL3ClassPath() + ":" + launchClassPath); @@ -182,7 +183,45 @@ public final class Tools { javaArgList.add(cacioClasspath.toString()); } - public static String[] getMinecraftArgs(MinecraftAccount profile, JMinecraftVersionList.Version versionInfo, String strGameDir) { + public static String[] getMinecraftJVMArgs(JMinecraftVersionList.Version versionInfo, String strGameDir) { + // Parse Forge 1.17+ additional JVM Arguments + if (versionInfo.inheritsFrom == null || versionInfo.arguments == null || versionInfo.arguments.jvm == null) { + return; + } + + Map varArgMap = new ArrayMap<>(); + varArgMap.put("classpath_separator", ":"); + varArgMap.put("library_directory", strGameDir + "/libraries"); + + List minecraftArgs = new ArrayList(); + if (versionInfo.arguments != null) { + for (Object arg : versionInfo.arguments.jvm) { + if (arg instanceof String) { + minecraftArgs.add((String) arg); + } else { + /* + JMinecraftVersionList.Arguments.ArgValue argv = (JMinecraftVersionList.Arguments.ArgValue) arg; + if (argv.values != null) { + minecraftArgs.add(argv.values[0]); + } else { + + for (JMinecraftVersionList.Arguments.ArgValue.ArgRules rule : arg.rules) { + // rule.action = allow + // TODO implement this + } + + } + */ + } + } + } + + String[] argsFromJson = JSONUtils.insertJSONValueList(splitAndFilterEmpty(minecraftArgs.toArray(new String[0])), varArgMap); + // Tools.dialogOnUiThread(this, "Result args", Arrays.asList(argsFromJson).toString()); + return argsFromJson; + } + + public static String[] getMinecraftClientArgs(MinecraftAccount profile, JMinecraftVersionList.Version versionInfo, String strGameDir) { String username = profile.username; String versionName = versionInfo.id; if (versionInfo.inheritsFrom != null) {