-
-
Notifications
You must be signed in to change notification settings - Fork 4
Open
Description
I need to add a parameter with index 0 (at the very beginning), but when I do this I get an error:
Caused by: java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 3
at LAYER SERVICE/org.sinytra.connector@2.0.0-beta.3+1.21.1+dev-g6ae9c7f-full/org.sinytra.adapter.patch.transformer.operation.param.ParamTransformationUtil.lambda$extractWrapOperation$0(ParamTransformationUtil.java:175)
at java.base/java.util.HashMap.forEach(HashMap.java:1429)
at LAYER SERVICE/org.sinytra.connector@2.0.0-beta.3+1.21.1+dev-g6ae9c7f-full/org.sinytra.adapter.patch.transformer.operation.param.ParamTransformationUtil.extractWrapOperation(ParamTransformationUtil.java:165)
at LAYER SERVICE/org.sinytra.connector@2.0.0-beta.3+1.21.1+dev-g6ae9c7f-full/org.sinytra.adapter.patch.transformer.operation.param.InjectParameterTransform.apply(InjectParameterTransform.java:76)
at LAYER SERVICE/org.sinytra.connector@2.0.0-beta.3+1.21.1+dev-g6ae9c7f-full/org.sinytra.adapter.patch.transformer.operation.param.TransformParameters.apply(TransformParameters.java:54)
at LAYER SERVICE/org.sinytra.connector@2.0.0-beta.3+1.21.1+dev-g6ae9c7f-full/org.sinytra.adapter.patch.PatchInstance.apply(PatchInstance.java:72)
at LAYER SERVICE/org.sinytra.connector@2.0.0-beta.3+1.21.1+dev-g6ae9c7f-full/org.sinytra.connector.transformer.MixinPatchTransformer.process(MixinPatchTransformer.java:219)
at LAYER SERVICE/org.sinytra.connector@2.0.0-beta.3+1.21.1+dev-g6ae9c7f-full/reloc.net.minecraftforge.fart.internal.EntryImpl$ClassEntry.process(EntryImpl.java:58)
at LAYER SERVICE/org.sinytra.connector@2.0.0-beta.3+1.21.1+dev-g6ae9c7f-full/reloc.net.minecraftforge.fart.internal.EntryImpl$ClassEntry.process(EntryImpl.java:36)
at LAYER SERVICE/org.sinytra.connector@2.0.0-beta.3+1.21.1+dev-g6ae9c7f-full/reloc.net.minecraftforge.fart.internal.RenamerImpl.processEntry(RenamerImpl.java:215)
at LAYER SERVICE/org.sinytra.connector@2.0.0-beta.3+1.21.1+dev-g6ae9c7f-full/reloc.net.minecraftforge.fart.internal.AsyncHelper.lambda$null$2(AsyncHelper.java:40)
at java.base/java.util.concurrent.ForkJoinTask$AdaptedCallable.exec(ForkJoinTask.java:1456)
at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:387)
at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1312)
at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1843)
at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1808)
at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:188)
So I thought a great solution would be to use swap, and my code started to look like this:
.transformParams(builder -> builder
.targetType(ParamTransformTarget.INJECTION_POINT)
.inject(2, Type.getObjectType("net/minecraft/world/entity/Entity"))
.inject(3, Type.getObjectType("net/minecraft/world/item/ItemStack"))
.swap(0, 2)
.swap(1, 3)
.inject(4, Type.getObjectType("net/minecraft/world/entity/EquipmentSlot"))
)It works, but the order of the arguments in WrapOperation hasn't changed, so I think the code that adds the parameters there works, but it can't swap them around:

Metadata
Metadata
Assignees
Labels
No labels