Skip to content

Commit 0b2b43c

Browse files
committed
Re-add LVT scope transformer
Fixes Sinytra#1295
1 parent a04d85b commit 0b2b43c

File tree

1 file changed

+21
-1
lines changed

1 file changed

+21
-1
lines changed

src/main/java/org/sinytra/connector/ConnectorCoremods.java

+21-1
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,17 @@
1010
import net.neoforged.neoforgespi.coremod.ICoreMod;
1111
import org.objectweb.asm.MethodVisitor;
1212
import org.objectweb.asm.Opcodes;
13+
import org.objectweb.asm.Type;
1314
import org.objectweb.asm.tree.ClassNode;
1415
import org.objectweb.asm.tree.FieldNode;
1516
import org.objectweb.asm.tree.InsnList;
1617
import org.objectweb.asm.tree.InsnNode;
18+
import org.objectweb.asm.tree.LocalVariableNode;
1719
import org.objectweb.asm.tree.MethodInsnNode;
1820
import org.objectweb.asm.tree.MethodNode;
1921
import org.objectweb.asm.tree.TypeInsnNode;
2022
import org.objectweb.asm.tree.VarInsnNode;
23+
import org.sinytra.adapter.patch.analysis.locals.LocalVariableLookup;
2124
import org.slf4j.Logger;
2225

2326
import java.util.List;
@@ -113,12 +116,29 @@ public Iterable<? extends ITransformer<?>> getTransformers() {
113116
}
114117
}
115118
);
119+
ITransformer<?> expandLocalVarScope = new BaseTransformer<>(
120+
TargetType.METHOD,
121+
ITransformer.Target.targetMethod("net.minecraft.world.entity.LivingEntity", "forceAddEffect", "(Lnet/minecraft/world/effect/MobEffectInstance;Lnet/minecraft/world/entity/Entity;)V"),
122+
input -> {
123+
LocalVariableLookup lvt = new LocalVariableLookup(input);
124+
LocalVariableNode mobEffect = lvt.getByTypedOrdinal(Type.getObjectType("net/minecraft/world/effect/MobEffectInstance"), 1).orElse(null);
125+
if (mobEffect != null) {
126+
mobEffect.start = lvt.getByIndex(0).start;
127+
input.instructions.insert(mobEffect.start, ASMAPI.listOf(
128+
new InsnNode(Opcodes.ACONST_NULL),
129+
new VarInsnNode(Opcodes.ASTORE, mobEffect.index)
130+
));
131+
LOGGER.debug("Expanded local variable scope for LivingEntity#forceAddEffect index {}", mobEffect.index);
132+
}
133+
}
134+
);
116135

117136
return ImmutableList.<ITransformer<?>>builder()
118137
.add(keyMappingFieldTypeTransform, creativeModeTabConstructorTransform)
119138
.addAll(addedFields)
120139
.addAll(getFabricASMTransformers())
121140
.add(missingOrderingCall)
141+
.add(expandLocalVarScope)
122142
.build();
123143
}
124144

@@ -128,7 +148,7 @@ private static ITransformer<?> addFieldToClass(String cls, String name, String d
128148
ITransformer.Target.targetClass(cls),
129149
input -> {
130150
input.fields.add(new FieldNode(access, name, desc, null, null));
131-
151+
132152
LOGGER.debug("Added field {} to class {}", name, cls);
133153
}
134154
);

0 commit comments

Comments
 (0)