From c43bb8e5c14207422a06e2a2062d2767c1e9a24a Mon Sep 17 00:00:00 2001 From: Xytronix <32957125+Xytronix@users.noreply.github.com> Date: Tue, 24 Feb 2026 15:07:02 +0100 Subject: [PATCH] Fix parent delegation for necessary casts of Refixes --- .../cc/irori/hyinit/mixin/HyinitClassLoader.java | 14 ++++++++++++++ .../hyinit/mixin/impl/MixinPluginClassLoader.java | 9 +++++++++ 2 files changed, 23 insertions(+) diff --git a/src/main/java/cc/irori/hyinit/mixin/HyinitClassLoader.java b/src/main/java/cc/irori/hyinit/mixin/HyinitClassLoader.java index a67a2ba..3ed9ca6 100644 --- a/src/main/java/cc/irori/hyinit/mixin/HyinitClassLoader.java +++ b/src/main/java/cc/irori/hyinit/mixin/HyinitClassLoader.java @@ -154,6 +154,8 @@ protected Class loadClass(String name, boolean resolve) throws ClassNotFoundE c = originalLoader.loadClass(name); } else if (name.startsWith("java.")) { c = PLATFORM_CLASS_LOADER.loadClass(name); + } else if (isParentDelegated(name)) { + c = originalLoader.loadClass(name); } else { c = tryLoadClass(name, false); @@ -407,6 +409,18 @@ private Metadata getMetadata(Path sourcePath) { }); } + private static final Set PARENT_DELEGATED = + Set.of("org.objectweb.asm.", "org.spongepowered.asm.", "com.llamalad7.mixinextras."); + + private static boolean isParentDelegated(String name) { + for (String prefix : PARENT_DELEGATED) { + if (name.startsWith(prefix)) { + return true; + } + } + return false; + } + private static final Set TRANSFORM_EXCLUSIONS = Set.of( "java.", "javax.", diff --git a/src/main/java/cc/irori/hyinit/mixin/impl/MixinPluginClassLoader.java b/src/main/java/cc/irori/hyinit/mixin/impl/MixinPluginClassLoader.java index 3fda136..01b043f 100644 --- a/src/main/java/cc/irori/hyinit/mixin/impl/MixinPluginClassLoader.java +++ b/src/main/java/cc/irori/hyinit/mixin/impl/MixinPluginClassLoader.java @@ -1,5 +1,6 @@ package cc.irori.hyinit.mixin.impl; +import cc.irori.hyinit.HyinitLogger; import cc.irori.hyinit.shared.SourceMetaStore; import cc.irori.hyinit.shared.SourceMetadata; import cc.irori.hyinit.util.LoaderUtil; @@ -25,6 +26,14 @@ public MixinPluginClassLoader(URL[] urls, ClassLoader parent) { super(urls, parent); } + @Inject(method = "loadLocalClass", at = @At("HEAD"), cancellable = true) + private void hyinit$guardNullClassName(String name, CallbackInfoReturnable> cir) { + if (name == null) { + HyinitLogger.get().warn("Skipping loadLocalClass with null class name"); + cir.setReturnValue(null); + } + } + // OrbisGuard compatibility: // When the same class is present in both the earlyplugin jar and the mod jar, prioritize the mod's. // To do this, we need to check the SourceMetadata of the loaded class.