fix jna&oshi

This commit is contained in:
ShirosakiMio 2024-01-13 19:42:01 +08:00
parent ac3851d8e4
commit 5e89adcba8
6 changed files with 38 additions and 6 deletions

View File

@ -50,6 +50,7 @@ import java.nio.file.Path;
import java.util.*;
import java.util.function.Supplier;
import java.util.logging.Level;
import java.util.stream.Collectors;
public class DefaultLauncher extends Launcher {
@ -148,6 +149,8 @@ public class DefaultLauncher extends Launcher {
res.addDefault("-Duser.home=", options.getGameDir().getAbsolutePath());
res.addDefault("-Duser.language=", System.getProperty("user.language"));
res.addDefault("-Duser.timezone=", TimeZone.getDefault().getID());
res.addDefault("-Djna.boot.library.path=", context.getApplicationInfo().nativeLibraryDir);
res.addDefault("-Dorg.lwjgl.vulkan.libname=","libvulkan.so");
if (getInjectorArg() != null && options.isBeGesture()) {
res.addDefault("-Dfcl.injector=", getInjectorArg());
@ -178,8 +181,14 @@ public class DefaultLauncher extends Launcher {
configuration.put("${assets_root}", gameAssets.toAbsolutePath().toString());
configuration.put("${natives_directory}", "${natives_directory}");
res.addAll(Arguments.parseArguments(version.getArguments().map(Arguments::getJvm).orElseGet(this::getDefaultJVMArguments), configuration));
List<String> jvmArgs = Arguments.parseArguments(version.getArguments().map(Arguments::getJvm).orElseGet(this::getDefaultJVMArguments), configuration);
res.addAll(jvmArgs.stream().filter(arg -> {
if (arg.contains("-Djna.tmpdir=") || arg.contains("-Dorg.lwjgl.system.SharedLibraryExtractPath=")) {
return false;
} else {
return true;
}
}).collect(Collectors.toList()));
Arguments argumentsFromAuthInfo = authInfo.getLaunchArguments(options);
if (argumentsFromAuthInfo != null && argumentsFromAuthInfo.getJvm() != null && !argumentsFromAuthInfo.getJvm().isEmpty())
res.addAll(Arguments.parseArguments(argumentsFromAuthInfo.getJvm(), configuration));

View File

@ -12,10 +12,20 @@ public class LibFilter {
private static final String ASM_ALL_5_2_STRING =
"{\n" +
" \"name\": \"org.ow2.asm:asm-all:5.2\"\n" +
"}";
" \"name\": \"org.ow2.asm:asm-all:5.2\"\n" +
"}";
private static final String JNA_5_13_STRING =
"{\n" +
" \"name\": \"net.java.dev.jna:jna:5.13.0\"\n" +
"}";
private static final String OSHI_6_3_STRING =
"{\n" +
" \"name\": \"com.github.oshi:oshi-core:6.3.0\"\n" +
"}";
private static final Library ASM_ALL_5_2 = GSON.fromJson(ASM_ALL_5_2_STRING, Library.class);
private static final Library JNA_5_13 = GSON.fromJson(JNA_5_13_STRING, Library.class);
private static final Library OSHI_6_3 = GSON.fromJson(OSHI_6_3_STRING, Library.class);
public static Version filter(Version version) {
return version.setLibraries(filterLibs(version.getLibraries()));
@ -24,9 +34,22 @@ public class LibFilter {
public static List<Library> filterLibs(List<Library> libraries) {
ArrayList<Library> newLibraries = new ArrayList<>();
for (Library library : libraries) {
if (!library.isNative() && !library.getName().contains("org.lwjgl") && (library.getName().contains("jna") || !library.getName().contains("platform"))) {
if (!library.getName().contains("org.lwjgl") && !library.getName().contains("jinput-platform")) {
String[] version = library.getName().split(":")[2].split("\\.");
if (library.getArtifactId().equals("asm-all") && library.getVersion().equals("4.1")) {
newLibraries.add(ASM_ALL_5_2);
} else if (library.getName().startsWith("net.java.dev.jna:jna:")) {
if (Integer.parseInt(version[0]) >= 5 && Integer.parseInt(version[1]) >= 13) {
newLibraries.add(library);
} else {
newLibraries.add(JNA_5_13);
}
} else if (library.getName().startsWith("com.github.oshi:oshi-core:")) {
if (Integer.parseInt(version[0]) != 6 || Integer.parseInt(version[1]) != 2) {
newLibraries.add(library);
} else {
newLibraries.add(OSHI_6_3);
}
} else {
newLibraries.add(library);
}
@ -35,4 +58,4 @@ public class LibFilter {
return newLibraries;
}
}
}