Skip to content

ClassCircularityError when mods manually call MixinExtrasBootstrap::init #142

Description

@phantamanta44

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions