diff --git a/definition/src/main/java/org/sinytra/adapter/patch/analysis/MethodLabelComparator.java b/definition/src/main/java/org/sinytra/adapter/patch/analysis/MethodLabelComparator.java index 788fbbf..24f4b7a 100644 --- a/definition/src/main/java/org/sinytra/adapter/patch/analysis/MethodLabelComparator.java +++ b/definition/src/main/java/org/sinytra/adapter/patch/analysis/MethodLabelComparator.java @@ -57,8 +57,18 @@ public static ComparisonResult findPatchedLabels(AbstractInsnNode cleanInjection return null; } + List> patchedLabels; int to = dirtyLabelsOriginal.indexOf(patchRange.getSecond()); - List> patchedLabels = patchRange.getFirst() == null ? dirtyLabelsOriginal.subList(0, to) : dirtyLabelsOriginal.subList(dirtyLabelsOriginal.indexOf(patchRange.getFirst()) + 1, to); + if (patchRange.getFirst() == null) { + patchedLabels = dirtyLabelsOriginal.subList(0, to); + } else { + int from = dirtyLabelsOriginal.indexOf(patchRange.getFirst()) + 1; + if (from < to) { + patchedLabels = dirtyLabelsOriginal.subList(dirtyLabelsOriginal.indexOf(patchRange.getFirst()) + 1, to); + } else { + return null; + } + } return new ComparisonResult(patchedLabels, cleanLabel); } diff --git a/definition/src/main/java/org/sinytra/adapter/patch/transformer/dynamic/DynamicInjectorOrdinalPatch.java b/definition/src/main/java/org/sinytra/adapter/patch/transformer/dynamic/DynamicInjectorOrdinalPatch.java index bfea98b..2f82d97 100644 --- a/definition/src/main/java/org/sinytra/adapter/patch/transformer/dynamic/DynamicInjectorOrdinalPatch.java +++ b/definition/src/main/java/org/sinytra/adapter/patch/transformer/dynamic/DynamicInjectorOrdinalPatch.java @@ -27,7 +27,7 @@ public class DynamicInjectorOrdinalPatch implements MethodTransform { @Override public Collection getAcceptedAnnotations() { - return Set.of(MixinConstants.INJECT, MixinConstants.MODIFY_VAR); + return Set.of(MixinConstants.INJECT, MixinConstants.MODIFY_VAR, MixinConstants.MODIFY_RETURN_VAL); } @Override