Fix for #196
When using forge >= 47.3.26, the local capturing strategy always fails and crash the game. Inspired by Fabric API, I proposed a strategy using ModifyExpressionValue to ensure the mixin is always working.
Related issue: #196
The crash is never reproducible after using ~~this mod file~~this mod file.
Second this
The fix crashed the game when joining the game.
Mods installed:
- Forge 47.4.0
- Connector-1.0.0-beta.46+1.20.1.jar
- ConnectorExtras-1.11.2+1.20.1.jar
- fabric-api-0.92.2+1.11.12+1.20.1-hf.jar (your fix)
[2025-05-30 23:59:51.089] [Server thread/FATAL] [mixin/]: Mixin apply for mod fabric_object_builder_api_v1 failed fabric-object-builder-v1.mixins.json:TradeOffersTypeAwareBuyForOneEmeraldFactoryMixin from mod fabric_object_builder_api_v1 -> net.minecraft.world.entity.npc.VillagerTrades$EmeraldsForVillagerTypeItem: org.spongepowered.asm.mixin.injection.throwables.InvalidInjectionException @ModifyExpressionValue expression value modifier method net/minecraft/world/entity/npc/VillagerTrades$EmeraldsForVillagerTypeItem::failOnNullItem from fabric-object-builder-v1.mixins.json:TradeOffersTypeAwareBuyForOneEmeraldFactoryMixin from mod fabric_object_builder_api_v1 has an invalid signature. Found unexpected argument type org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable at index 1, expected net.minecraft.world.entity.Entity. Handler signature: (Ljava/lang/Object;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)Ljava/lang/Object; Expected signature: (Ljava/lang/Object;Lnet/minecraft/world/entity/Entity;Lnet/minecraft/util/RandomSource;)Ljava/lang/Object; [INJECT Applicator Phase -> fabric-object-builder-v1.mixins.json:TradeOffersTypeAwareBuyForOneEmeraldFactoryMixin from mod fabric_object_builder_api_v1 -> Apply Injections -> -> Inject -> fabric-object-builder-v1.mixins.json:TradeOffersTypeAwareBuyForOneEmeraldFactoryMixin from mod fabric_object_builder_api_v1->@ModifyExpressionValue::failOnNullItem(Ljava/lang/Object;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)Ljava/lang/Object;]
org.spongepowered.asm.mixin.injection.throwables.InvalidInjectionException: @ModifyExpressionValue expression value modifier method net/minecraft/world/entity/npc/VillagerTrades$EmeraldsForVillagerTypeItem::failOnNullItem from fabric-object-builder-v1.mixins.json:TradeOffersTypeAwareBuyForOneEmeraldFactoryMixin from mod fabric_object_builder_api_v1 has an invalid signature. Found unexpected argument type org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable at index 1, expected net.minecraft.world.entity.Entity. Handler signature: (Ljava/lang/Object;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)Ljava/lang/Object; Expected signature: (Ljava/lang/Object;Lnet/minecraft/world/entity/Entity;Lnet/minecraft/util/RandomSource;)Ljava/lang/Object; [INJECT Applicator Phase -> fabric-object-builder-v1.mixins.json:TradeOffersTypeAwareBuyForOneEmeraldFactoryMixin from mod fabric_object_builder_api_v1 -> Apply Injections -> -> Inject -> fabric-object-builder-v1.mixins.json:TradeOffersTypeAwareBuyForOneEmeraldFactoryMixin from mod fabric_object_builder_api_v1->@ModifyExpressionValue::failOnNullItem(Ljava/lang/Object;Lorg/spongepowered/asm/mixin/injection/callback/CallbackInfoReturnable;)Ljava/lang/Object;]
at org.spongepowered.asm.mixin.injection.code.Injector.validateParams(Injector.java:598) ~[mixin-0.8.5.jar:0.8.5+Jenkins-b310.git-155314e6e91465dad727e621a569906a410cd6f4]
at com.llamalad7.mixinextras.injector.ModifyExpressionValueInjector.invokeHandler(ModifyExpressionValueInjector.java:72) ~[MixinExtras-0.3.5.jar%23257!/:?]
at com.llamalad7.mixinextras.injector.ModifyExpressionValueInjector.injectValueModifier(ModifyExpressionValueInjector.java:63) ~[MixinExtras-0.3.5.jar%23257!/:?]
at com.llamalad7.mixinextras.injector.ModifyExpressionValueInjector.inject(ModifyExpressionValueInjector.java:42) ~[MixinExtras-0.3.5.jar%23257!/:?]
at org.spongepowered.asm.mixin.injection.code.Injector.inject(Injector.java:276) ~[mixin-0.8.5.jar:0.8.5+Jenkins-b310.git-155314e6e91465dad727e621a569906a410cd6f4]
at org.spongepowered.asm.mixin.injection.struct.InjectionInfo.inject(InjectionInfo.java:445) ~[mixin-0.8.5.jar:0.8.5+Jenkins-b310.git-155314e6e91465dad727e621a569906a410cd6f4]
at org.spongepowered.asm.mixin.transformer.MixinTargetContext.applyInjections(MixinTargetContext.java:1377) ~[mixin-0.8.5.jar:0.8.5+Jenkins-b310.git-155314e6e91465dad727e621a569906a410cd6f4]
at org.spongepowered.asm.mixin.transformer.MixinApplicatorStandard.applyInjections(MixinApplicatorStandard.java:1062) ~[mixin-0.8.5.jar:0.8.5+Jenkins-b310.git-155314e6e91465dad727e621a569906a410cd6f4]
at org.spongepowered.asm.mixin.transformer.MixinApplicatorStandard.applyMixin(MixinApplicatorStandard.java:402) ~[mixin-0.8.5.jar:0.8.5+Jenkins-b310.git-155314e6e91465dad727e621a569906a410cd6f4]
at org.spongepowered.asm.mixin.transformer.MixinApplicatorStandard.apply(MixinApplicatorStandard.java:327) ~[mixin-0.8.5.jar:0.8.5+Jenkins-b310.git-155314e6e91465dad727e621a569906a410cd6f4]
at org.spongepowered.asm.mixin.transformer.TargetClassContext.apply(TargetClassContext.java:421) ~[mixin-0.8.5.jar:0.8.5+Jenkins-b310.git-155314e6e91465dad727e621a569906a410cd6f4]
at org.spongepowered.asm.mixin.transformer.TargetClassContext.applyMixins(TargetClassContext.java:403) ~[mixin-0.8.5.jar:0.8.5+Jenkins-b310.git-155314e6e91465dad727e621a569906a410cd6f4]
at org.spongepowered.asm.mixin.transformer.MixinProcessor.applyMixins(MixinProcessor.java:363) ~[mixin-0.8.5.jar:0.8.5+Jenkins-b310.git-155314e6e91465dad727e621a569906a410cd6f4]
at org.spongepowered.asm.mixin.transformer.MixinTransformer.transformClass(MixinTransformer.java:250) ~[mixin-0.8.5.jar:0.8.5+Jenkins-b310.git-155314e6e91465dad727e621a569906a410cd6f4]
at org.spongepowered.asm.service.modlauncher.MixinTransformationHandler.processClass(MixinTransformationHandler.java:131) ~[mixin-0.8.5.jar:0.8.5+Jenkins-b310.git-155314e6e91465dad727e621a569906a410cd6f4]
at org.spongepowered.asm.launch.MixinLaunchPluginLegacy.processClass(MixinLaunchPluginLegacy.java:131) ~[mixin-0.8.5.jar:0.8.5+Jenkins-b310.git-155314e6e91465dad727e621a569906a410cd6f4]
at cpw.mods.modlauncher.serviceapi.ILaunchPluginService.processClassWithFlags(ILaunchPluginService.java:156) ~[modlauncher-10.0.9.jar:10.0.9+10.0.9+main.dcd20f30]
at cpw.mods.modlauncher.LaunchPluginHandler.offerClassNodeToPlugins(LaunchPluginHandler.java:88) ~[modlauncher-10.0.9.jar:?]
at cpw.mods.modlauncher.ClassTransformer.transform(ClassTransformer.java:120) ~[modlauncher-10.0.9.jar:?]
at cpw.mods.modlauncher.TransformingClassLoader.maybeTransformClassBytes(TransformingClassLoader.java:50) ~[modlauncher-10.0.9.jar:?]
at cpw.mods.cl.ModuleClassLoader.readerToClass(ModuleClassLoader.java:113) ~[securejarhandler-2.1.10.jar:?]
at cpw.mods.cl.ModuleClassLoader.lambda$findClass$15(ModuleClassLoader.java:219) ~[securejarhandler-2.1.10.jar:?]
at cpw.mods.cl.ModuleClassLoader.loadFromModule(ModuleClassLoader.java:229) ~[securejarhandler-2.1.10.jar:?]
at cpw.mods.cl.ModuleClassLoader.findClass(ModuleClassLoader.java:219) ~[securejarhandler-2.1.10.jar:?]
at cpw.mods.cl.ModuleClassLoader.loadClass(ModuleClassLoader.java:135) ~[securejarhandler-2.1.10.jar:?]
at java.lang.ClassLoader.loadClass(ClassLoader.java:525) ~[?:?]
at net.minecraft.world.entity.npc.VillagerTrades.m_35632_(VillagerTrades.java:65) ~[client-1.20.1-20230612.114412-srg.jar%23166!/:?]
at net.minecraft.Util.m_137469_(Util.java:359) ~[client-1.20.1-20230612.114412-srg.jar%23166!/:?]
at net.minecraft.world.entity.npc.VillagerTrades.<clinit>(VillagerTrades.java:63) ~[client-1.20.1-20230612.114412-srg.jar%23166!/:?]
at net.minecraftforge.common.VillagerTradingManager.<clinit>(VillagerTradingManager.java:32) ~[forge-1.20.1-47.4.0-universal.jar%23171!/:?]
at net.minecraftforge.eventbus.EventBus.doCastFilter(EventBus.java:260) ~[eventbus-6.0.5.jar%2387!/:?]
at net.minecraftforge.eventbus.EventBus.lambda$addListener$11(EventBus.java:252) ~[eventbus-6.0.5.jar%2387!/:?]
at net.minecraftforge.eventbus.EventBus.post(EventBus.java:315) ~[eventbus-6.0.5.jar%2387!/:?]
at net.minecraftforge.eventbus.EventBus.post(EventBus.java:296) ~[eventbus-6.0.5.jar%2387!/:?]
at net.minecraftforge.server.ServerLifecycleHooks.handleServerAboutToStart(ServerLifecycleHooks.java:98) ~[forge-1.20.1-47.4.0-universal.jar%23171!/:?]
at net.minecraft.client.server.IntegratedServer.m_7038_(IntegratedServer.java:62) ~[client-1.20.1-20230612.114412-srg.jar%23166!/:?]
at net.minecraft.server.MinecraftServer.m_130011_(MinecraftServer.java:634) ~[client-1.20.1-20230612.114412-srg.jar%23166!/:?]
at net.minecraft.server.MinecraftServer.m_206580_(MinecraftServer.java:251) ~[client-1.20.1-20230612.114412-srg.jar%23166!/:?]
at java.lang.Thread.run(Thread.java:840) ~[?:?]
@Tidy-Bear at runtime you might need mixin-extras 0.4.1, I think @Viola-Siemens didn't jarjar it
yeah, you are using MixinExtras-0.3.5.jar
im not quite sure how to jarinjar mixinextras 0.4.1. i tried the official method in their repo but end up making the workflow fail
Dunno how Fabric managed that signature working but I'm pretty sure MEV is supposed to be typed as described here:
https://github.com/LlamaLad7/MixinExtras/wiki/ModifyExpressionValue
Cancellable is valid, but you might need newer mixin extras
https://github.com/LlamaLad7/MixinExtras/wiki/Cancellable#example
Yes and now newer mixinextras is embedded in my newer build.
Newer jar: https://github.com/Viola-Siemens/ForgifiedFabricAPI-forked/releases/download/0.92.2%2B1.11.12%2B1.20.1-fix2/fabric-api-0.92.2+1.11.12+1.20.1.jar
Mixinextras 0.4.1 is embedded into this file.