diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/launch/DefaultLauncher.java b/FCLCore/src/main/java/com/tungsten/fclcore/launch/DefaultLauncher.java index 5b515cc1..f4f39437 100644 --- a/FCLCore/src/main/java/com/tungsten/fclcore/launch/DefaultLauncher.java +++ b/FCLCore/src/main/java/com/tungsten/fclcore/launch/DefaultLauncher.java @@ -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 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)); diff --git a/FCLCore/src/main/java/com/tungsten/fclcore/util/LibFilter.java b/FCLCore/src/main/java/com/tungsten/fclcore/util/LibFilter.java index b234094d..3f05dfd4 100644 --- a/FCLCore/src/main/java/com/tungsten/fclcore/util/LibFilter.java +++ b/FCLCore/src/main/java/com/tungsten/fclcore/util/LibFilter.java @@ -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 filterLibs(List libraries) { ArrayList 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; } -} +} \ No newline at end of file diff --git a/FCLauncher/src/main/jniLibs/arm64-v8a/libjnidispatch.so b/FCLauncher/src/main/jniLibs/arm64-v8a/libjnidispatch.so index d42762d3..b5881659 100644 Binary files a/FCLauncher/src/main/jniLibs/arm64-v8a/libjnidispatch.so and b/FCLauncher/src/main/jniLibs/arm64-v8a/libjnidispatch.so differ diff --git a/FCLauncher/src/main/jniLibs/armeabi-v7a/libjnidispatch.so b/FCLauncher/src/main/jniLibs/armeabi-v7a/libjnidispatch.so index c411147d..1d02dca9 100644 Binary files a/FCLauncher/src/main/jniLibs/armeabi-v7a/libjnidispatch.so and b/FCLauncher/src/main/jniLibs/armeabi-v7a/libjnidispatch.so differ diff --git a/FCLauncher/src/main/jniLibs/x86/libjnidispatch.so b/FCLauncher/src/main/jniLibs/x86/libjnidispatch.so index bb9058cb..336aad7b 100644 Binary files a/FCLauncher/src/main/jniLibs/x86/libjnidispatch.so and b/FCLauncher/src/main/jniLibs/x86/libjnidispatch.so differ diff --git a/FCLauncher/src/main/jniLibs/x86_64/libjnidispatch.so b/FCLauncher/src/main/jniLibs/x86_64/libjnidispatch.so index 72ad7b97..4af42fc5 100644 Binary files a/FCLauncher/src/main/jniLibs/x86_64/libjnidispatch.so and b/FCLauncher/src/main/jniLibs/x86_64/libjnidispatch.so differ