With Forge 1.16.2-33.0.59 and newer, Caelus API (specifically) is incompatible with Xaero's Minimap and World map
AileyJames opened this issue ยท 9 comments
Versions (Be specific, do not write "latest"):
- Caelus: 1.16.2-2.0.0.0
- Forge/Fabric: 1.16.2-33.0.59 and 33.0.61
Observed Behavior: Instant crash upon pressing play in launcher but only on newer forge versions. Was not sure which mod creator to report to
Expected Behavior: starting the game fine
Steps to Reproduce:
- Download newest Xaero's Minimap (v20.21.0 for Forge 1.16.2) and world map (v1.10.3 for Forge 1.16.2) (either or, they both crash it)
- Start game
- Instant crash upon start
...
Crash Log: Please use a paste site like hastebin.
https://pastebin.com/Eja1xdiF
Please let me know if i should report this to xaero instead?
Not sure why this would happen. The attached log seems to be cut rather short, so just making sure, is that everything? And no other error messages pop up within the launcher or anything?
I believe so, the only message i get is "unexpected issue occurred" message with exit code: 0
There wasn't a crash report so i had to copy the game output
if it's helps, forge version 33.0.21 seems to run both fine? it is purely when i tried to upgrade forge, but each work fine independently with the newer version
I was able to reproduce this. I did get an error. I have no idea what it means. Going to look into it later. Leaving this here in case you need it:
Re-entrance detected during prepare phase, this will cause serious problems.
org.spongepowered.asm.mixin.transformer.throwables.ReEntrantTransformerError: Re-entrance error.
at org.spongepowered.asm.mixin.transformer.MixinProcessor.applyMixins(MixinProcessor.java:278) ~[mixin-0.8.jar:0.8+unknown-b0.git-unknown]
at org.spongepowered.asm.mixin.transformer.MixinTransformer.transformClass(MixinTransformer.java:206) ~[mixin-0.8.jar:0.8+unknown-b0.git-unknown]
at org.spongepowered.asm.mixin.transformer.MixinTransformationHandler.processClass(MixinTransformationHandler.java:109) ~[mixin-0.8.jar:0.8+unknown-b0.git-unknown]
at org.spongepowered.asm.launch.MixinLaunchPlugin.processClass(MixinLaunchPlugin.java:135) ~[mixin-0.8.jar:0.8+unknown-b0.git-unknown]
at cpw.mods.modlauncher.serviceapi.ILaunchPluginService.processClassWithFlags(ILaunchPluginService.java:154) ~[modlauncher-7.0.1.jar:7.0.1+78+master.e9771d8]
at cpw.mods.modlauncher.LaunchPluginHandler.offerClassNodeToPlugins(LaunchPluginHandler.java:85) ~[modlauncher-7.0.1.jar:?]
at cpw.mods.modlauncher.ClassTransformer.transform(ClassTransformer.java:119) ~[modlauncher-7.0.1.jar:?]
at cpw.mods.modlauncher.TransformingClassLoader$DelegatedClassLoader.findClass(TransformingClassLoader.java:256) ~[modlauncher-7.0.1.jar:?]
at cpw.mods.modlauncher.TransformingClassLoader.buildTransformedClassNodeFor(TransformingClassLoader.java:140) ~[modlauncher-7.0.1.jar:?]
at cpw.mods.modlauncher.TransformerClassWriter.computeHierarchyFromFile(TransformerClassWriter.java:149) ~[modlauncher-7.0.1.jar:?]
at cpw.mods.modlauncher.TransformerClassWriter.computeHierarchy(TransformerClassWriter.java:112) ~[modlauncher-7.0.1.jar:?]
at cpw.mods.modlauncher.TransformerClassWriter.access$100(TransformerClassWriter.java:34) ~[modlauncher-7.0.1.jar:?]
at cpw.mods.modlauncher.TransformerClassWriter$SuperCollectingVisitor.visit(TransformerClassWriter.java:177) ~[modlauncher-7.0.1.jar:?]
at org.objectweb.asm.tree.ClassNode.accept(ClassNode.java:340) ~[asm-tree-7.2.jar:7.2]
at cpw.mods.modlauncher.TransformerClassWriter.computeHierarchy(TransformerClassWriter.java:99) ~[modlauncher-7.0.1.jar:?]
at cpw.mods.modlauncher.TransformerClassWriter.getCommonSuperClass(TransformerClassWriter.java:59) ~[modlauncher-7.0.1.jar:?]
at org.objectweb.asm.SymbolTable.addMergedType(SymbolTable.java:1200) ~[asm-7.2.jar:7.2]
at org.objectweb.asm.Frame.merge(Frame.java:1299) ~[asm-7.2.jar:7.2]
at org.objectweb.asm.Frame.merge(Frame.java:1197) ~[asm-7.2.jar:7.2]
at org.objectweb.asm.MethodWriter.computeAllFrames(MethodWriter.java:1610) ~[asm-7.2.jar:7.2]
at org.objectweb.asm.MethodWriter.visitMaxs(MethodWriter.java:1546) ~[asm-7.2.jar:7.2]
at org.objectweb.asm.tree.MethodNode.accept(MethodNode.java:767) ~[asm-tree-7.2.jar:7.2]
at org.objectweb.asm.tree.MethodNode.accept(MethodNode.java:647) ~[asm-tree-7.2.jar:7.2]
at org.objectweb.asm.tree.ClassNode.accept(ClassNode.java:408) ~[asm-tree-7.2.jar:7.2]
at cpw.mods.modlauncher.ClassTransformer.transform(ClassTransformer.java:132) ~[modlauncher-7.0.1.jar:?]
at cpw.mods.modlauncher.TransformingClassLoader$DelegatedClassLoader.findClass(TransformingClassLoader.java:256) ~[modlauncher-7.0.1.jar:?]
at cpw.mods.modlauncher.TransformingClassLoader.buildTransformedClassNodeFor(TransformingClassLoader.java:140) ~[modlauncher-7.0.1.jar:?]
at cpw.mods.modlauncher.LaunchPluginHandler.lambda$null$8(LaunchPluginHandler.java:97) ~[modlauncher-7.0.1.jar:?]
at org.spongepowered.asm.launch.MixinLaunchPlugin.getClassNode(MixinLaunchPlugin.java:212) ~[mixin-0.8.jar:0.8+unknown-b0.git-unknown]
at org.spongepowered.asm.launch.MixinLaunchPlugin.getClassNode(MixinLaunchPlugin.java:200) ~[mixin-0.8.jar:0.8+unknown-b0.git-unknown]
at org.spongepowered.asm.mixin.transformer.ClassInfo.forName(ClassInfo.java:1843) ~[mixin-0.8.jar:0.8+unknown-b0.git-unknown]
at org.spongepowered.asm.mixin.transformer.MixinInfo.getTargetClass(MixinInfo.java:1007) ~[mixin-0.8.jar:0.8+unknown-b0.git-unknown]
at org.spongepowered.asm.mixin.transformer.MixinInfo.readTargetClasses(MixinInfo.java:997) ~[mixin-0.8.jar:0.8+unknown-b0.git-unknown]
at org.spongepowered.asm.mixin.transformer.MixinInfo.parseTargets(MixinInfo.java:885) ~[mixin-0.8.jar:0.8+unknown-b0.git-unknown]
at org.spongepowered.asm.mixin.transformer.MixinConfig.prepareMixins(MixinConfig.java:730) ~[mixin-0.8.jar:0.8+unknown-b0.git-unknown]
at org.spongepowered.asm.mixin.transformer.MixinConfig.prepare(MixinConfig.java:646) ~[mixin-0.8.jar:0.8+unknown-b0.git-unknown]
at org.spongepowered.asm.mixin.transformer.MixinProcessor.prepareConfigs(MixinProcessor.java:515) ~[mixin-0.8.jar:0.8+unknown-b0.git-unknown]
at org.spongepowered.asm.mixin.transformer.MixinProcessor.select(MixinProcessor.java:440) ~[mixin-0.8.jar:0.8+unknown-b0.git-unknown]
at org.spongepowered.asm.mixin.transformer.MixinProcessor.checkSelect(MixinProcessor.java:416) ~[mixin-0.8.jar:0.8+unknown-b0.git-unknown]
at org.spongepowered.asm.mixin.transformer.MixinProcessor.applyMixins(MixinProcessor.java:285) ~[mixin-0.8.jar:0.8+unknown-b0.git-unknown]
at org.spongepowered.asm.mixin.transformer.MixinTransformer.transformClass(MixinTransformer.java:206) ~[mixin-0.8.jar:0.8+unknown-b0.git-unknown]
at org.spongepowered.asm.mixin.transformer.MixinTransformationHandler.processClass(MixinTransformationHandler.java:109) ~[mixin-0.8.jar:0.8+unknown-b0.git-unknown]
at org.spongepowered.asm.launch.MixinLaunchPlugin.processClass(MixinLaunchPlugin.java:135) ~[mixin-0.8.jar:0.8+unknown-b0.git-unknown]
at cpw.mods.modlauncher.serviceapi.ILaunchPluginService.processClassWithFlags(ILaunchPluginService.java:154) ~[modlauncher-7.0.1.jar:7.0.1+78+master.e9771d8]
at cpw.mods.modlauncher.LaunchPluginHandler.offerClassNodeToPlugins(LaunchPluginHandler.java:85) ~[modlauncher-7.0.1.jar:?]
at cpw.mods.modlauncher.ClassTransformer.transform(ClassTransformer.java:119) ~[modlauncher-7.0.1.jar:?]
at cpw.mods.modlauncher.TransformingClassLoader$DelegatedClassLoader.findClass(TransformingClassLoader.java:256) ~[modlauncher-7.0.1.jar:?]
at cpw.mods.modlauncher.TransformingClassLoader.loadClass(TransformingClassLoader.java:135) ~[modlauncher-7.0.1.jar:?]
at cpw.mods.modlauncher.TransformingClassLoader.loadClass(TransformingClassLoader.java:97) ~[modlauncher-7.0.1.jar:?]
at java.lang.ClassLoader.loadClass(ClassLoader.java:521) ~[?:?]
at java.lang.Class.forName0(Native Method) ~[?:?]
at java.lang.Class.forName(Class.java:398) ~[?:?]
at net.minecraftforge.fml.loading.FMLClientLaunchProvider.lambda$launchService$0(FMLClientLaunchProvider.java:51) ~[forge-1.16.2-33.0.59.jar:33.0]
at cpw.mods.modlauncher.LaunchServiceHandlerDecorator.launch(LaunchServiceHandlerDecorator.java:37) [modlauncher-7.0.1.jar:?]
at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:54) [modlauncher-7.0.1.jar:?]
at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:72) [modlauncher-7.0.1.jar:?]
at cpw.mods.modlauncher.Launcher.run(Launcher.java:81) [modlauncher-7.0.1.jar:?]
at cpw.mods.modlauncher.Launcher.main(Launcher.java:65) [modlauncher-7.0.1.jar:?]
I don't particularly agree that the JS coremod system was cleaner, I find mixins to be much more approachable. Looking up a couple method names and writing a few annotated methods is much easier and readable than doing lines of bytecode manipulation with ASM.
I'm also not sure how the previous system would be less crash-causing. They both attempt to do the same thing, but mixins were designed to work with other mixins while the JS coremod system can be rather arbitrarily affected by any other injection since they each have to code the transformation themselves. This particular crash is the only crash that's been reported to me so far since moving to mixins and it's not even related to the mod's implementation itself. That being said, if more evidence is found later on that illustrates that mixins are unreliable for use in the Forge ecosystem, I'll consider changing it back.
You ask a good question. If something worked, why change it? Mainly, maintainability and readability. Like I mentioned previously, I find mixins to be a cleaner approach. This means less maintenance burden on me moving forward, especially if another mod happens to create an incompatibility and I have to figure out a way to resolve it. It also makes the code more readable to people perusing the repo or trying to dissect the code for use as a library. As a more minor reason, I also develop Caelus for Fabric, which uses mixins exclusively. It's less work for me to just maintain the same mixin code across both platforms rather than try to maintain two different systems.
I looked into it and it seems to be a new Forge/Mixin/modlauncher issue. There's an issue filed for this on the Mixin repo: SpongePowered/Mixin#439
TheIllusiveC4, would you be so kind and tell me more why did you recently switch to Mixin in favor of the new Forge's JS coremod system, please? IMHO the latter seems to be much cleaner way to do hacks, less crash-causing, and also more persistent, as you can see. If something worked, why change it?
@Eric-01 Mixins are far more compatible with each other (as long as it is not an overwrite or redirect mixin) than javascript coremods which I have found to break basically any mod that also touches the same place. So if someone needs to coremod, mixins is the best solution.
As for this situation, I would say this was caused by a miscommunication between Forge and Murfrey and not that 'mixins are unstable'. Cpw was working on the modloader and changed how it worked in a few places and knew it would break stuff. Thus he bumped the major version of the modloader to 7.0.0 but either thought the changes he has done would not break mixins or forgot to tell murfrey that Forge did a breaking change. Thus when they released that version of the modloader on forge, mixins blew up due to the breaking change.