From 3af6751f3ca684dd14e6fe7a2af57ffd34b8ecd8 Mon Sep 17 00:00:00 2001 From: FalsePattern Date: Wed, 4 Jun 2025 12:52:06 +0200 Subject: [PATCH] improved pattern matcher for biome super patcher --- .../transformer/chunk/ChunkProviderSuperPatcher.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/falsepattern/endlessids/asm/transformer/chunk/ChunkProviderSuperPatcher.java b/src/main/java/com/falsepattern/endlessids/asm/transformer/chunk/ChunkProviderSuperPatcher.java index 3781539..e177686 100644 --- a/src/main/java/com/falsepattern/endlessids/asm/transformer/chunk/ChunkProviderSuperPatcher.java +++ b/src/main/java/com/falsepattern/endlessids/asm/transformer/chunk/ChunkProviderSuperPatcher.java @@ -97,7 +97,13 @@ import java.util.function.Supplier; * //state 8 * ILOAD k * //state 9 + * //Branch X | Y + * //X: * ALOAD abyte + * //Y: + * ALOAD + * GETFIELD classname.fieldname : [Lnet/minecraft/world/biome/BiomeGenBase; + * //Join X | Y * //state 10 * ARRAYLENGTH * //state 11 @@ -160,6 +166,7 @@ public class ChunkProviderSuperPatcher implements TurboClassTransformer { private static State STATE7 = null; private static State STATE8 = null; private static State STATE9 = null; + private static State STATE9_Y = null; private static State STATE10 = null; private static State STATE11 = null; private static State STATE12 = null; @@ -256,7 +263,10 @@ public class ChunkProviderSuperPatcher implements TurboClassTransformer { STATE9 = casting(VarInsnNode.class, (insn, memory) -> insn.getOpcode() == Opcodes.ALOAD && insn.var == memory.biomeArrayIndex - ? STATE10 : STATE0); + ? STATE10 : STATE9_Y); + + STATE9_Y = casting(FieldInsnNode.class, insn -> + insn.getOpcode() == Opcodes.GETFIELD && anyMatch(insn.desc, CLASS_BiomeGenBase, "[L", ";") ? STATE10: STATE0); STATE10 = casting(InsnNode.class, (insn) -> insn.getOpcode() == Opcodes.ARRAYLENGTH ? STATE11 : STATE0);