Mixin icon indicating copy to clipboard operation
Mixin copied to clipboard

@Invokers with the same name and different signatures are not supported

Open PanSzelescik opened this issue 4 years ago • 1 comments

I have Minecraft class with 2 methods:

private boolean removeBlock(BlockPos p_180235_1_) {
    return this.removeBlock(p_180235_1_, false);
}

private boolean removeBlock(BlockPos p_removeBlock_1_, boolean p_removeBlock_2_) {
    /* ... */
}

The first one is remapped, the second one not, so if you create Invokers:

@Mixin(PlayerInteractionManager.class)
public interface InvokerRemoveBlock {
    
    @Invoker("removeBlock")
    boolean invoke_removeBlock(BlockPos pos);
    @Invoker(value = "removeBlock", remap = false)
    boolean invoke_removeBlock(BlockPos pos, boolean canHarvest);
}

You will get such Exception: crash-2021-09-04_22.16.45-client.txt

I know there are no such situations in Vanilla and probably in Fabric, but you can find such things in Forge.

Created refmap:

{
  "mappings": {
    "pl/test/mixin/mixins/extrautils2/InvokerRemoveBlock": {
      "removeBlock": "func_180235_c(Lnet/minecraft/util/math/BlockPos;)Z"
    }
  },
  "data": {
    "searge": {
      "pl/test/mixin/mixins/extrautils2/InvokerRemoveBlock": {
        "removeBlock": "func_180235_c(Lnet/minecraft/util/math/BlockPos;)Z"
      }
    }
  }
}

Mixin: 0.8.3 MixinGradle: 0.7-SNAPSHOT ForgeGradle: 3.+ Forge: 1.12.2-14.23.5.2855

PanSzelescik avatar Sep 04 '21 20:09 PanSzelescik

Invokers and Accessors are very old part of the toolkit and the method signature/descriptor is not part of their identifier. Thus this is not currently supported but I will look at adding support for this.

Mumfrey avatar Dec 06 '21 13:12 Mumfrey