Certain mods—in this case, BBLSOhMy—have a habit of manually calling MixinExtrasBootstrap::init in a core plugin. When this happens while MixinBooter is present, the mixin class transformer will try to transform the MixinExtrasBootstrap class, and since the mixin plugin used by MixinBooter tries to call MixinExtrasBootstrap::init itself, this causes a ClassCircularityError and kills the mixin processor.
A simple setup to reproduce this is a fresh 1.12.2 instance with only the following mods installed:
- MixinBooter 11.13
- BBLSOhMy 1.1.3
- FermiumBooter 1.5.0 (as a required dependency of BBLSOhMy)
An example of the issue with this setup is as follows...
[01:21:27] [main/INFO] [LaunchWrapper]: Loading tweak class name zone.rong.mixinbooter.service.CoremodsRescuer
[01:21:27] [main/DEBUG] [FML]: Instantiating coremod class BBLSOhMyPlugin
[01:21:27] [main/DEBUG] [FML]: The coremod bblsom.BBLSOhMyPlugin requested minecraft version 1.12.2 and minecraft is 1.12.2. It will be loaded.
[01:21:27] [main/WARN] [FML]: The coremod BBLSOhMyPlugin (bblsom.BBLSOhMyPlugin) is not signed!
[01:21:27] [main/DEBUG] [CleanMix]: Preparing config mixin.mixinbooter.init.json
[01:21:27] [main/INFO] [MixinBooter]: Initializing MixinExtras...
[01:21:27] [main/ERROR] [MixinBooter]: Failed to manually load coremod bblsom.BBLSOhMyPlugin from BBLSOhMy-1.1.3.jar.
java.lang.reflect.InvocationTargetException: null
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_442]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_442]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_442]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_442]
at zone.rong.mixinbooter.service.ModDiscoverer.rescueDroppedCoremods(ModDiscoverer.java:198) [-mixinbooter-11.13.jar:?]
at zone.rong.mixinbooter.service.CoremodsRescuer.<init>(CoremodsRescuer.java:12) [-mixinbooter-11.13.jar:?]
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.8.0_442]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) [?:1.8.0_442]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) [?:1.8.0_442]
at java.lang.reflect.Constructor.newInstance(Constructor.java:423) [?:1.8.0_442]
at java.lang.Class.newInstance(Class.java:442) [?:1.8.0_442]
at net.minecraft.launchwrapper.Launch.launch(Launch.java:98) [launchwrapper-1.12.jar:?]
at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?]
at org.prismlauncher.launcher.impl.StandardLauncher.launch(StandardLauncher.java:115) [NewLaunch.jar:?]
at org.prismlauncher.EntryPoint.listen(EntryPoint.java:129) [NewLaunch.jar:?]
at org.prismlauncher.EntryPoint.main(EntryPoint.java:70) [NewLaunch.jar:?]
Caused by: java.lang.NoClassDefFoundError: com/llamalad7/mixinextras/MixinExtrasBootstrap
at bblsom.BBLSOhMyPlugin.<init>(BBLSOhMyPlugin.java:15) ~[BBLSOhMy-1.1.3.jar:1.1.3]
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.8.0_442]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[?:1.8.0_442]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:1.8.0_442]
at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[?:1.8.0_442]
at java.lang.Class.newInstance(Class.java:442) ~[?:1.8.0_442]
at net.minecraftforge.fml.relauncher.CoreModManager.loadCoreMod(CoreModManager.java:594) ~[forge-1.12.2-14.23.5.2864-universal.jar:?]
... 16 more
Caused by: java.lang.ClassNotFoundException: com.llamalad7.mixinextras.MixinExtrasBootstrap
at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:191) ~[launchwrapper-1.12.jar:?]
at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[?:1.8.0_442]
at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[?:1.8.0_442]
at bblsom.BBLSOhMyPlugin.<init>(BBLSOhMyPlugin.java:15) ~[BBLSOhMy-1.1.3.jar:1.1.3]
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.8.0_442]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[?:1.8.0_442]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:1.8.0_442]
at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[?:1.8.0_442]
at java.lang.Class.newInstance(Class.java:442) ~[?:1.8.0_442]
at net.minecraftforge.fml.relauncher.CoreModManager.loadCoreMod(CoreModManager.java:594) ~[forge-1.12.2-14.23.5.2864-universal.jar:?]
... 16 more
Caused by: java.lang.ClassCircularityError: com/llamalad7/mixinextras/MixinExtrasBootstrap
at zone.rong.mixinbooter.MixinBooterMixinPlugin.onLoad(MixinBooterMixinPlugin.java:18) ~[-mixinbooter-11.13.jar:?]
at org.spongepowered.asm.mixin.transformer.PluginHandle.onLoad(PluginHandle.java:119) ~[-mixinbooter-11.13.jar:?]
at org.spongepowered.asm.mixin.transformer.MixinConfig.onSelect(MixinConfig.java:795) ~[-mixinbooter-11.13.jar:?]
at org.spongepowered.asm.mixin.transformer.MixinProcessor.consumeConfigs(MixinProcessor.java:550) ~[-mixinbooter-11.13.jar:?]
at org.spongepowered.asm.mixin.transformer.MixinProcessor.prepareNewConfigs(MixinProcessor.java:500) ~[-mixinbooter-11.13.jar:?]
at org.spongepowered.asm.mixin.transformer.MixinProcessor.lockAndPrepare(MixinProcessor.java:424) ~[-mixinbooter-11.13.jar:?]
at org.spongepowered.asm.mixin.transformer.MixinProcessor.couldTransformClass(MixinProcessor.java:392) ~[-mixinbooter-11.13.jar:?]
at org.spongepowered.asm.mixin.transformer.MixinTransformer.couldTransformClass(MixinTransformer.java:266) ~[-mixinbooter-11.13.jar:?]
at org.spongepowered.asm.mixin.transformer.MixinTransformer.transformClass(MixinTransformer.java:234) ~[-mixinbooter-11.13.jar:?]
at org.spongepowered.asm.mixin.transformer.MixinTransformer.transformClassBytes(MixinTransformer.java:203) ~[-mixinbooter-11.13.jar:?]
at org.spongepowered.asm.mixin.transformer.Proxy.transform(Proxy.java:70) ~[-mixinbooter-11.13.jar:?]
at net.minecraft.launchwrapper.LaunchClassLoader.runTransformers(LaunchClassLoader.java:279) ~[launchwrapper-1.12.jar:?]
at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:176) ~[launchwrapper-1.12.jar:?]
at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[?:1.8.0_442]
at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[?:1.8.0_442]
at bblsom.BBLSOhMyPlugin.<init>(BBLSOhMyPlugin.java:15) ~[BBLSOhMy-1.1.3.jar:1.1.3]
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.8.0_442]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[?:1.8.0_442]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:1.8.0_442]
at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[?:1.8.0_442]
at java.lang.Class.newInstance(Class.java:442) ~[?:1.8.0_442]
at net.minecraftforge.fml.relauncher.CoreModManager.loadCoreMod(CoreModManager.java:594) ~[forge-1.12.2-14.23.5.2864-universal.jar:?]
... 16 more
In this particular case, the core plugin is loaded by the MixinExtras coremod rescuer service, but this is just incidental; the same issue occurs running an instance with only a test mod that does nothing but call MixinExtrasBootstrap::init in a core plugin:
An example of the issue with this setup is as follows...
[02:04:12] [main/DEBUG] [FML]: Instantiating coremod class TestCorePlugin
[02:04:12] [main/WARN] [FML]: The coremod st.evening.mc.testmod.TestCorePlugin does not have a MCVersion annotation, it may cause issues with this version of Minecraft
[02:04:12] [main/WARN] [FML]: The coremod TestCorePlugin (st.evening.mc.testmod.TestCorePlugin) is not signed!
[02:04:12] [main/DEBUG] [CleanMix]: Preparing config mixin.mixinbooter.init.json
[02:04:12] [main/INFO] [MixinBooter]: Initializing MixinExtras...
[02:04:12] [main/ERROR] [LaunchWrapper]: Unable to launch
java.lang.RuntimeException: An error occurred trying to configure the Minecraft home at /home/phanta/.local/share/PrismLauncher/instances/1.12.2-test2/minecraft for Forge Mod Loader
at net.minecraftforge.fml.relauncher.FMLLaunchHandler.setupHome(FMLLaunchHandler.java:111) ~[forge-1.12.2-14.23.5.2864-universal.jar:?]
at net.minecraftforge.fml.relauncher.FMLLaunchHandler.setupClient(FMLLaunchHandler.java:81) ~[forge-1.12.2-14.23.5.2864-universal.jar:?]
at net.minecraftforge.fml.relauncher.FMLLaunchHandler.configureForClientLaunch(FMLLaunchHandler.java:42) ~[forge-1.12.2-14.23.5.2864-universal.jar:?]
at net.minecraftforge.fml.common.launcher.FMLTweaker.injectIntoClassLoader(FMLTweaker.java:141) ~[forge-1.12.2-14.23.5.2864-universal.jar:?]
at net.minecraft.launchwrapper.Launch.launch(Launch.java:115) [launchwrapper-1.12.jar:?]
at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?]
at org.prismlauncher.launcher.impl.StandardLauncher.launch(StandardLauncher.java:115) [NewLaunch.jar:?]
at org.prismlauncher.EntryPoint.listen(EntryPoint.java:129) [NewLaunch.jar:?]
at org.prismlauncher.EntryPoint.main(EntryPoint.java:70) [NewLaunch.jar:?]
Caused by: java.lang.NoClassDefFoundError: com/llamalad7/mixinextras/MixinExtrasBootstrap
at st.evening.mc.testmod.TestCorePlugin.<init>(TestCorePlugin.kt:8) ~[testmod-1.12.2-1.0.0.jar:?]
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.8.0_442]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[?:1.8.0_442]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:1.8.0_442]
at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[?:1.8.0_442]
at java.lang.Class.newInstance(Class.java:442) ~[?:1.8.0_442]
at net.minecraftforge.fml.relauncher.CoreModManager.loadCoreMod(CoreModManager.java:594) ~[forge-1.12.2-14.23.5.2864-universal.jar:?]
at net.minecraftforge.fml.relauncher.CoreModManager.discoverCoreMods(CoreModManager.java:451) ~[forge-1.12.2-14.23.5.2864-universal.jar:?]
at net.minecraftforge.fml.relauncher.CoreModManager.handleLaunch(CoreModManager.java:265) ~[forge-1.12.2-14.23.5.2864-universal.jar:?]
at net.minecraftforge.fml.relauncher.FMLLaunchHandler.setupHome(FMLLaunchHandler.java:107) ~[forge-1.12.2-14.23.5.2864-universal.jar:?]
... 8 more
Caused by: java.lang.ClassNotFoundException: com.llamalad7.mixinextras.MixinExtrasBootstrap
at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:191) ~[launchwrapper-1.12.jar:?]
at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[?:1.8.0_442]
at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[?:1.8.0_442]
at st.evening.mc.testmod.TestCorePlugin.<init>(TestCorePlugin.kt:8) ~[testmod-1.12.2-1.0.0.jar:?]
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.8.0_442]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[?:1.8.0_442]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:1.8.0_442]
at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[?:1.8.0_442]
at java.lang.Class.newInstance(Class.java:442) ~[?:1.8.0_442]
at net.minecraftforge.fml.relauncher.CoreModManager.loadCoreMod(CoreModManager.java:594) ~[forge-1.12.2-14.23.5.2864-universal.jar:?]
at net.minecraftforge.fml.relauncher.CoreModManager.discoverCoreMods(CoreModManager.java:451) ~[forge-1.12.2-14.23.5.2864-universal.jar:?]
at net.minecraftforge.fml.relauncher.CoreModManager.handleLaunch(CoreModManager.java:265) ~[forge-1.12.2-14.23.5.2864-universal.jar:?]
at net.minecraftforge.fml.relauncher.FMLLaunchHandler.setupHome(FMLLaunchHandler.java:107) ~[forge-1.12.2-14.23.5.2864-universal.jar:?]
... 8 more
Caused by: java.lang.ClassCircularityError: com/llamalad7/mixinextras/MixinExtrasBootstrap
at zone.rong.mixinbooter.MixinBooterMixinPlugin.onLoad(MixinBooterMixinPlugin.java:18) ~[-mixinbooter-11.13.jar:?]
at org.spongepowered.asm.mixin.transformer.PluginHandle.onLoad(PluginHandle.java:119) ~[-mixinbooter-11.13.jar:?]
at org.spongepowered.asm.mixin.transformer.MixinConfig.onSelect(MixinConfig.java:795) ~[-mixinbooter-11.13.jar:?]
at org.spongepowered.asm.mixin.transformer.MixinProcessor.consumeConfigs(MixinProcessor.java:550) ~[-mixinbooter-11.13.jar:?]
at org.spongepowered.asm.mixin.transformer.MixinProcessor.prepareNewConfigs(MixinProcessor.java:500) ~[-mixinbooter-11.13.jar:?]
at org.spongepowered.asm.mixin.transformer.MixinProcessor.lockAndPrepare(MixinProcessor.java:424) ~[-mixinbooter-11.13.jar:?]
at org.spongepowered.asm.mixin.transformer.MixinProcessor.couldTransformClass(MixinProcessor.java:392) ~[-mixinbooter-11.13.jar:?]
at org.spongepowered.asm.mixin.transformer.MixinTransformer.couldTransformClass(MixinTransformer.java:266) ~[-mixinbooter-11.13.jar:?]
at org.spongepowered.asm.mixin.transformer.MixinTransformer.transformClass(MixinTransformer.java:234) ~[-mixinbooter-11.13.jar:?]
at org.spongepowered.asm.mixin.transformer.MixinTransformer.transformClassBytes(MixinTransformer.java:203) ~[-mixinbooter-11.13.jar:?]
at org.spongepowered.asm.mixin.transformer.Proxy.transform(Proxy.java:70) ~[-mixinbooter-11.13.jar:?]
at net.minecraft.launchwrapper.LaunchClassLoader.runTransformers(LaunchClassLoader.java:279) ~[launchwrapper-1.12.jar:?]
at net.minecraft.launchwrapper.LaunchClassLoader.findClass(LaunchClassLoader.java:176) ~[launchwrapper-1.12.jar:?]
at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[?:1.8.0_442]
at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[?:1.8.0_442]
at st.evening.mc.testmod.TestCorePlugin.<init>(TestCorePlugin.kt:8) ~[testmod-1.12.2-1.0.0.jar:?]
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.8.0_442]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[?:1.8.0_442]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:1.8.0_442]
at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[?:1.8.0_442]
at java.lang.Class.newInstance(Class.java:442) ~[?:1.8.0_442]
at net.minecraftforge.fml.relauncher.CoreModManager.loadCoreMod(CoreModManager.java:594) ~[forge-1.12.2-14.23.5.2864-universal.jar:?]
at net.minecraftforge.fml.relauncher.CoreModManager.discoverCoreMods(CoreModManager.java:451) ~[forge-1.12.2-14.23.5.2864-universal.jar:?]
at net.minecraftforge.fml.relauncher.CoreModManager.handleLaunch(CoreModManager.java:265) ~[forge-1.12.2-14.23.5.2864-universal.jar:?]
at net.minecraftforge.fml.relauncher.FMLLaunchHandler.setupHome(FMLLaunchHandler.java:107) ~[forge-1.12.2-14.23.5.2864-universal.jar:?]
... 8 more
Certain mods—in this case, BBLSOhMy—have a habit of manually calling MixinExtrasBootstrap::init in a core plugin. When this happens while MixinBooter is present, the mixin class transformer will try to transform the
MixinExtrasBootstrapclass, and since the mixin plugin used by MixinBooter tries to callMixinExtrasBootstrap::inititself, this causes aClassCircularityErrorand kills the mixin processor.A simple setup to reproduce this is a fresh 1.12.2 instance with only the following mods installed:
An example of the issue with this setup is as follows...
In this particular case, the core plugin is loaded by the MixinExtras coremod rescuer service, but this is just incidental; the same issue occurs running an instance with only a test mod that does nothing but call
MixinExtrasBootstrap::initin a core plugin:An example of the issue with this setup is as follows...