Merge branch 'forge-1.17-wip' into v3_openjdk

This commit is contained in:
khanhduytran0 2022-05-07 13:36:53 +07:00
commit 199b0562c2
6 changed files with 65 additions and 4 deletions

View File

@ -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;
}
}
}
}

View File

@ -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<String, String> varArgMap = new ArrayMap<>();
varArgMap.put("classpath_separator", ":");
varArgMap.put("library_directory", strGameDir + "/libraries");
varArgMap.put("version_name", versionInfo.id);
List<String> minecraftArgs = new ArrayList<String>();
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<String> libDir = new ArrayList<String>();
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;

View File

@ -1,9 +1,11 @@
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 String url;