From 46ab67396a81d972975ccda207270ccc859565de Mon Sep 17 00:00:00 2001 From: glitch Date: Fri, 6 Sep 2024 15:35:14 +0000 Subject: [PATCH] Floader 0.16.3 --- .../minecraft/BundlerClassPathCapture.java | 38 ++++++++++++++++++- src/main/resources/quilt.mod.json | 2 +- 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/minecraft/src/main/java/org/quiltmc/loader/impl/game/minecraft/BundlerClassPathCapture.java b/minecraft/src/main/java/org/quiltmc/loader/impl/game/minecraft/BundlerClassPathCapture.java index 2e67225fc..4c7ec3caf 100644 --- a/minecraft/src/main/java/org/quiltmc/loader/impl/game/minecraft/BundlerClassPathCapture.java +++ b/minecraft/src/main/java/org/quiltmc/loader/impl/game/minecraft/BundlerClassPathCapture.java @@ -16,8 +16,11 @@ package org.quiltmc.loader.impl.game.minecraft; +import java.io.IOException; +import java.net.JarURLConnection; import java.net.URL; import java.net.URLClassLoader; +import java.net.URLConnection; import java.util.concurrent.CompletableFuture; public final class BundlerClassPathCapture { @@ -26,9 +29,42 @@ public final class BundlerClassPathCapture { public static void main(String[] args) { // invoked by the bundler on a thread try { URLClassLoader cl = (URLClassLoader) Thread.currentThread().getContextClassLoader(); - FUTURE.complete(cl.getURLs()); + URL[] urls = cl.getURLs(); + + // suppress asm library since it conflicts with Loader's, needed for MC 24w33a + + URL asmUrl = cl.findResource("org/objectweb/asm/ClassReader.class"); + + if (asmUrl != null && (asmUrl = getJarUrl(asmUrl)) != null) { + for (int i = 0; i < urls.length; i++) { + if (urls[i].equals(asmUrl)) { + URL[] newUrls = new URL[urls.length - 1]; + System.arraycopy(urls, 0, newUrls, 0, i); + System.arraycopy(urls, i + 1, newUrls, i, urls.length - i - 1); + urls = newUrls; + break; + } + } + } + + FUTURE.complete(urls); } catch (Throwable t) { FUTURE.completeExceptionally(t); } } + + /** + * Transform jar:file url to its outer file url. + * + *

jar:file:/path/to.jar!/pkg/Cls.class -> file:/path/to.jar + */ + private static URL getJarUrl(URL url) throws IOException { + URLConnection connection = url.openConnection(); + + if (connection instanceof JarURLConnection) { + return ((JarURLConnection) connection).getJarFileURL(); + } + + return null; + } } diff --git a/src/main/resources/quilt.mod.json b/src/main/resources/quilt.mod.json index ada8cb468..3df9e6bdb 100644 --- a/src/main/resources/quilt.mod.json +++ b/src/main/resources/quilt.mod.json @@ -22,7 +22,7 @@ "provides": [ { "id": "fabricloader", - "version": "0.16.2" + "version": "0.16.3" } ], "depends": [