From 921babed4bcaee2610fd76524dae3f49ec50e06c Mon Sep 17 00:00:00 2001 From: khanhduytran0 Date: Sun, 27 Aug 2023 10:00:13 +0700 Subject: [PATCH] Feat[lib]: replace ASM <5 with ASM 5.0.4 --- .../main/java/net/kdt/pojavlaunch/Tools.java | 31 ++++++++++++---- .../pojavlaunch/value/DependentLibrary.java | 20 ++++------ Natives/MinecraftResourceUtils.m | 37 ++++++------------- 3 files changed, 43 insertions(+), 45 deletions(-) diff --git a/JavaApp/src/main/java/net/kdt/pojavlaunch/Tools.java b/JavaApp/src/main/java/net/kdt/pojavlaunch/Tools.java index ec5f5c8a..239b42c5 100644 --- a/JavaApp/src/main/java/net/kdt/pojavlaunch/Tools.java +++ b/JavaApp/src/main/java/net/kdt/pojavlaunch/Tools.java @@ -36,6 +36,7 @@ import net.kdt.pojavlaunch.utils.DownloadUtils; import net.kdt.pojavlaunch.utils.JSONUtils; import net.kdt.pojavlaunch.value.DependentLibrary; import net.kdt.pojavlaunch.value.MinecraftAccount; +import net.kdt.pojavlaunch.value.MinecraftLibraryArtifact; import org.lwjgl.glfw.GLFW; public final class Tools @@ -309,28 +310,44 @@ public final class Tools // Support for text2speech is not planned, so skip it for now. for (int i = 0; i < libraries.length; i++) { DependentLibrary libItem = libraries[i]; - if (libItem.artifact != null) { - libItem.downloads = new DependentLibrary.LibraryDownloads(libItem.artifact); - } if (libItem.name.startsWith("com.mojang:text2speech") || //libItem.name.startsWith("net.java.jinput") || libItem.name.startsWith("net.java.dev.jna:platform:") || libItem.name.startsWith("org.lwjgl") || libItem.name.startsWith("tv.twitch")) { libItem._skip = true; - } else if (libItem.name.startsWith("net.java.dev.jna:jna:")) { + continue; + } + + String[] version = libItem.name.split(":")[2].split("\\."); + if (libItem.name.startsWith("net.java.dev.jna:jna:")) { // Special handling for LabyMod 1.8.9 and Forge 1.12.2(?) // we have libjnidispatch 5.13.0 in Frameworks directory - int[] version = Arrays.stream(libItem.name.split(":")[2].split("\\.")).mapToInt(Integer::parseInt).toArray(); - if (version[0] >= 5 && version[1] >= 13) return; - System.out.println("Library " + libItem.name + " has been changed to version 5.13.0"); + if (Integer.parseInt(version[0]) >= 5 && Integer.parseInt(version[1]) >= 13) continue; + //System.out.println("Library " + libItem.name + " has been changed to version 5.13.0"); + +createLibraryInfo(libItem); libItem.name = "net.java.dev.jna:jna:5.13.0"; libItem.downloads.artifact.path = "net/java/dev/jna/jna/5.13.0/jna-5.13.0.jar"; libItem.downloads.artifact.url = "https://libraries.minecraft.net/net/java/dev/jna/jna/5.13.0/jna-5.13.0.jar"; + } else if (libItem.name.startsWith("org.ow2.asm:asm-all:")) { + if(Integer.parseInt(version[0]) >= 5) continue; + //System.out.println("Library " + libItem.name + " has been changed to version 5.0.4"); + createLibraryInfo(libItem); + libItem.name = "org.ow2.asm:asm-all:5.0.4"; + libItem.url = null; + libItem.downloads.artifact.path = "org/ow2/asm/asm-all/5.0.4/asm-all-5.0.4.jar"; + libItem.downloads.artifact.sha1 = "e6244859997b3d4237a552669279780876228909"; + libItem.downloads.artifact.url = "https://repo1.maven.org/maven2/org/ow2/asm/asm-all/5.0.4/asm-all-5.0.4.jar"; } } } + private static void createLibraryInfo(DependentLibrary library) { + if(library.downloads == null || library.downloads.artifact == null) + library.downloads = new DependentLibrary.LibraryDownloads(new MinecraftLibraryArtifact()); + } + public static String[] generateLibClasspath(JMinecraftVersionList.Version info) { List libDir = new ArrayList(); diff --git a/JavaApp/src/main/java/net/kdt/pojavlaunch/value/DependentLibrary.java b/JavaApp/src/main/java/net/kdt/pojavlaunch/value/DependentLibrary.java index 16b33081..df8a1953 100644 --- a/JavaApp/src/main/java/net/kdt/pojavlaunch/value/DependentLibrary.java +++ b/JavaApp/src/main/java/net/kdt/pojavlaunch/value/DependentLibrary.java @@ -2,20 +2,16 @@ package net.kdt.pojavlaunch.value; public class DependentLibrary { public boolean _skip; // internal - + //public ArgRules[] rules; public String name; - public LibraryDownloads downloads; + public LibraryDownloads downloads; public String url; - // TLauncher style artifact - public MinecraftLibraryArtifact artifact; - - public static class LibraryDownloads - { - public MinecraftLibraryArtifact artifact; - public LibraryDownloads(MinecraftLibraryArtifact artifact) { - this.artifact = artifact; - } - } + public static class LibraryDownloads { + public MinecraftLibraryArtifact artifact; + public LibraryDownloads(MinecraftLibraryArtifact artifact) { + this.artifact = artifact; + } + } } diff --git a/Natives/MinecraftResourceUtils.m b/Natives/MinecraftResourceUtils.m index 017c6575..8db36244 100644 --- a/Natives/MinecraftResourceUtils.m +++ b/Natives/MinecraftResourceUtils.m @@ -8,30 +8,6 @@ #import "ios_uikit_bridge.h" #import "utils.h" -/* -todo for now - might change anytime -- make the entire download work anyways -- cleanup later, before merging? -- possibility fix incorrect stuff - -- Prevent download when account=local -- download Log4J patch (or use existing one?) -- download a vanilla version (tested) -- download a modded ver with inheritsFrom: - + not downloaded - + inherit version not found - + no internet connection (?) -- download a modded ver without inheritsFrom -- SHA check: - + client json (tested) - + libraries (tested) - + client jar (tested) - + assets -- download assets - + new structure - + old structure (mapped) -*/ - @implementation MinecraftResourceUtils static AFURLSessionManager* manager; @@ -290,11 +266,11 @@ static AFURLSessionManager* manager; [library[@"name"] hasPrefix:@"org.lwjgl"] ); + NSString *versionStr = [library[@"name"] componentsSeparatedByString:@":"][2]; + NSArray *version = [versionStr componentsSeparatedByString:@"."]; if ([library[@"name"] hasPrefix:@"net.java.dev.jna:jna:"]) { // Special handling for LabyMod 1.8.9 and Forge 1.12.2(?) // we have libjnidispatch 5.13.0 in Frameworks directory - NSString *versionStr = [library[@"name"] componentsSeparatedByString:@":"][2]; - NSArray *version = [versionStr componentsSeparatedByString:@"."]; if (!(version[0].intValue < 5 || version[1].intValue < 13 || version[2].intValue < 1)) { NSLog(@"[MCDL] Warning: JNA version required by %@ is %@ > 5.13.0, compatibility might be broken.", json[@"id"], versionStr); } @@ -302,6 +278,15 @@ static AFURLSessionManager* manager; library[@"downloads"][@"artifact"][@"path"] = @"net/java/dev/jna/jna/5.13.0/jna-5.13.0.jar"; library[@"downloads"][@"artifact"][@"url"] = @"https://repo1.maven.org/maven2/net/java/dev/jna/jna/5.13.0/jna-5.13.0.jar"; library[@"downloads"][@"artifact"][@"sha1"] = @"1200e7ebeedbe0d10062093f32925a912020e747"; + } else if ([library[@"name"] hasPrefix:@"org.ow2.asm:asm-all:"]) { + // Early versions of the ASM library get repalced with 5.0.4 because Pojav's LWJGL is compiled for + // Java 8, which is not supported by old ASM versions. Mod loaders like Forge, which depend on this + // library, often include lwjgl in their class transformations, which causes errors with old ASM versions. + if(version[0].intValue >= 5) continue; + library[@"name"] = @"org.ow2.asm:asm-all:5.0.4"; + library[@"downloads"][@"artifact"][@"path"] = @"org/ow2/asm/asm-all/5.0.4/asm-all-5.0.4.jar"; + library[@"downloads"][@"artifact"][@"sha1"] = @"e6244859997b3d4237a552669279780876228909"; + library[@"downloads"][@"artifact"][@"url"] = @"https://repo1.maven.org/maven2/org/ow2/asm/asm-all/5.0.4/asm-all-5.0.4.jar"; } }