diff --git a/app_pojavlauncher/src/main/assets/components/lwjgl3/lwjgl-jemalloc.jar b/app_pojavlauncher/src/main/assets/components/lwjgl3/lwjgl-jemalloc.jar index 07029fc00..9b2bbcdb9 100644 Binary files a/app_pojavlauncher/src/main/assets/components/lwjgl3/lwjgl-jemalloc.jar and b/app_pojavlauncher/src/main/assets/components/lwjgl3/lwjgl-jemalloc.jar differ diff --git a/app_pojavlauncher/src/main/assets/components/lwjgl3/lwjgl-stb.jar b/app_pojavlauncher/src/main/assets/components/lwjgl3/lwjgl-stb.jar index d16fa38a9..00170036b 100644 Binary files a/app_pojavlauncher/src/main/assets/components/lwjgl3/lwjgl-stb.jar and b/app_pojavlauncher/src/main/assets/components/lwjgl3/lwjgl-stb.jar differ diff --git a/app_pojavlauncher/src/main/assets/components/lwjgl3/lwjgl-tinyfd.jar b/app_pojavlauncher/src/main/assets/components/lwjgl3/lwjgl-tinyfd.jar index ac6d03635..60d2cb4ba 100644 Binary files a/app_pojavlauncher/src/main/assets/components/lwjgl3/lwjgl-tinyfd.jar and b/app_pojavlauncher/src/main/assets/components/lwjgl3/lwjgl-tinyfd.jar differ diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/JMinecraftVersionList.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/JMinecraftVersionList.java index 88ecb7e4a..0f32bebb1 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/JMinecraftVersionList.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/JMinecraftVersionList.java @@ -73,6 +73,12 @@ public class JMinecraftVersionList { public static class ArgRules { public String action; public String features; + public ArgOS os; + + public static class ArgOS { + public String name; + public String version; + } } } } 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 08af84e28..69067d36a 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/Tools.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/Tools.java @@ -130,7 +130,7 @@ public final class Tools { LauncherPreferences.PREF_CUSTOM_JAVA_ARGS = minecraftProfile.javaArgs; } PojavLoginActivity.disableSplash(gamedirPath); - String[] launchArgs = getMinecraftArgs(profile, versionInfo, gamedirPath); + String[] launchArgs = getMinecraftClientArgs(profile, versionInfo, gamedirPath); // Select the appropriate openGL version OldVersionsUtils.selectOpenGlVersion(versionInfo); @@ -165,6 +165,7 @@ public final class Tools { if (versionInfo.logging != null) { javaArgList.add("-Dlog4j.configurationFile=" + Tools.DIR_GAME_NEW + "/" + versionInfo.logging.client.file.id); } + javaArgList.addAll(Arrays.asList(getMinecraftJVMArgs(versionName, gamedirPath))); javaArgList.add("-cp"); javaArgList.add(getLWJGL3ClassPath() + ":" + launchClassPath); @@ -198,7 +199,47 @@ public final class Tools { javaArgList.add(cacioClasspath.toString()); } - public static String[] getMinecraftArgs(MinecraftAccount profile, JMinecraftVersionList.Version versionInfo, String strGameDir) { + public static String[] getMinecraftJVMArgs(String versionName, String strGameDir) { + JMinecraftVersionList.Version versionInfo = Tools.getVersionInfo(null, versionName, true); + // Parse Forge 1.17+ additional JVM Arguments + if (versionInfo.inheritsFrom == null || versionInfo.arguments == null || versionInfo.arguments.jvm == null) { + return new String[0]; + } + + Map varArgMap = new ArrayMap<>(); + varArgMap.put("classpath_separator", ":"); + varArgMap.put("library_directory", strGameDir + "/libraries"); + varArgMap.put("version_name", versionInfo.id); + + 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(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) { @@ -525,7 +566,15 @@ public final class Tools { public static String[] generateLibClasspath(JMinecraftVersionList.Version info) { List libDir = new ArrayList(); + libLoop: for (DependentLibrary libItem: info.libraries) { + if (libItem.rules != null) { + for (JMinecraftVersionList.Arguments.ArgValue.ArgRules rule : libItem.rules) { + if (rule.action.equals("allow") && rule.os != null && rule.os.name.equals("osx")) { + continue libLoop; + } + } + } String[] libInfos = libItem.name.split(":"); libDir.add(Tools.DIR_HOME_LIBRARY + "/" + Tools.artifactToPath(libInfos[0], libInfos[1], libInfos[2])); } @@ -533,6 +582,10 @@ public final class Tools { } public static JMinecraftVersionList.Version getVersionInfo(BaseLauncherActivity bla, String versionName) { + return getVersionInfo(bla, versionName, false); + } + + public static JMinecraftVersionList.Version getVersionInfo(BaseLauncherActivity bla, String versionName, boolean skipInheriting) { try { JMinecraftVersionList.Version customVer = Tools.GLOBAL_GSON.fromJson(read(DIR_HOME_VERSION + "/" + versionName + "/" + versionName + ".json"), JMinecraftVersionList.Version.class); for (DependentLibrary lib : customVer.libraries) { @@ -540,7 +593,7 @@ public final class Tools { customVer.optifineLib = lib; } } - if (customVer.inheritsFrom == null || customVer.inheritsFrom.equals(customVer.id)) { + if (skipInheriting || customVer.inheritsFrom == null || customVer.inheritsFrom.equals(customVer.id)) { return customVer; } else { JMinecraftVersionList.Version inheritsVer = null; diff --git a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/value/DependentLibrary.java b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/value/DependentLibrary.java index 812a57234..5df6b410e 100644 --- a/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/value/DependentLibrary.java +++ b/app_pojavlauncher/src/main/java/net/kdt/pojavlaunch/value/DependentLibrary.java @@ -1,11 +1,13 @@ package net.kdt.pojavlaunch.value; import androidx.annotation.Keep; +import net.kdt.pojavlaunch.JMinecraftVersionList.Arguments.ArgValue.ArgRules; @Keep public class DependentLibrary { + public ArgRules[] rules; public String name; - public LibraryDownloads downloads; + public LibraryDownloads downloads; public String url; @Keep