diff --git a/src/main/java/com/falsepattern/endlessids/IEPlugin.java b/src/main/java/com/falsepattern/endlessids/IEPlugin.java index 392fe90..25991ac 100644 --- a/src/main/java/com/falsepattern/endlessids/IEPlugin.java +++ b/src/main/java/com/falsepattern/endlessids/IEPlugin.java @@ -22,7 +22,6 @@ import static cpw.mods.fml.relauncher.IFMLLoadingPlugin.TransformerExclusions; @Name(Tags.MODID) @TransformerExclusions({"com.falsepattern.endlessids.asm"}) @DependsOn("falsepatternlib") -@SortingIndex(1001) public class IEPlugin implements IFMLLoadingPlugin { static { try { diff --git a/src/main/java/com/falsepattern/endlessids/asm/IETransformer.java b/src/main/java/com/falsepattern/endlessids/asm/IETransformer.java index 3014ce0..44f1bcf 100644 --- a/src/main/java/com/falsepattern/endlessids/asm/IETransformer.java +++ b/src/main/java/com/falsepattern/endlessids/asm/IETransformer.java @@ -36,7 +36,7 @@ public class IETransformer implements IClassTransformer { final ClassReader reader = new ClassReader(bytes); reader.accept(cn, edit == null ? ClassReader.EXPAND_FRAMES : 0); if (edit == null) { - if (cn.interfaces.contains("net/minecraft/world/chunk/IChunkProvider")) { + if (cn.interfaces.contains("apu") || cn.interfaces.contains("net/minecraft/world/chunk/IChunkProvider")) { edit = ClassEdit.ChunkProviderSuperPatcher; } else { return bytes; diff --git a/src/main/java/com/falsepattern/endlessids/asm/transformer/ChunkProviderSuperPatcher.java b/src/main/java/com/falsepattern/endlessids/asm/transformer/ChunkProviderSuperPatcher.java index 02c5caa..d2f5655 100644 --- a/src/main/java/com/falsepattern/endlessids/asm/transformer/ChunkProviderSuperPatcher.java +++ b/src/main/java/com/falsepattern/endlessids/asm/transformer/ChunkProviderSuperPatcher.java @@ -78,11 +78,11 @@ import java.util.function.Function; * */ public class ChunkProviderSuperPatcher implements IClassNodeTransformer { - private static final String BIOME_GEN_BASE_CLASS = "net/minecraft/world/biome/BiomeGenBase"; - private static final String CHUNK_CLASS = "net/minecraft/world/chunk/Chunk"; - private static final String BIOME_ID_FIELD = IETransformer.isObfuscated ? "field_76756_M" : "biomeID"; - private static final String GET_BIOME_ARRAY_METHOD = IETransformer.isObfuscated ? "func_76605_m" : "getBiomeArray"; - private static final Map> STATES = new HashMap<>(); + public static final String CLASS_BiomeGenBase = IETransformer.isObfuscated ? "ahu" : "net/minecraft/world/biome/BiomeGenBase"; + public static final String CLASS_Chunk = IETransformer.isObfuscated ? "apx" : "net/minecraft/world/chunk/Chunk"; + public static final String FIELD_biomeID = IETransformer.isObfuscated ? "ay" : "biomeID"; + public static final String METHOD_getBiomeArray = IETransformer.isObfuscated ? "m" : "getBiomeArray"; + public static final Map> STATES = new HashMap<>(); static { STATES.put(0, casting(VarInsnNode.class, (insn, memory) -> { if (insn.getOpcode() == Opcodes.ALOAD) { @@ -94,8 +94,8 @@ public class ChunkProviderSuperPatcher implements IClassNodeTransformer { })); STATES.put(1, casting(MethodInsnNode.class, (insn, memory) -> { if (insn.getOpcode() == Opcodes.INVOKEVIRTUAL && - insn.owner.equals(CHUNK_CLASS) && - insn.name.equals(GET_BIOME_ARRAY_METHOD) && + insn.owner.equals(CLASS_Chunk) && + insn.name.equals(METHOD_getBiomeArray) && insn.desc.equals("()[B")) { memory.getBiomeArrayInsn = memory.currentInsn; return 2; @@ -122,7 +122,7 @@ public class ChunkProviderSuperPatcher implements IClassNodeTransformer { })); STATES.put(6, casting(LabelNode.class, 7)); STATES.put(7, casting(FrameNode.class, (insn, memory) -> - memory.locals.get(memory.chunkIndex).equals(CHUNK_CLASS) && + memory.locals.get(memory.chunkIndex).equals(CLASS_Chunk) && memory.locals.get(memory.biomeArrayIndex).equals("[B") && memory.locals.get(memory.iteratorIndex).equals(1) ? 8 : 0)); @@ -188,7 +188,7 @@ public class ChunkProviderSuperPatcher implements IClassNodeTransformer { if (insn.var == 0) { memory.altFlags = 1; return 16; - } else if (memory.locals.get(insn.var).equals("[L" + BIOME_GEN_BASE_CLASS + ";")) { + } else if (memory.locals.get(insn.var).equals("[L" + CLASS_BiomeGenBase + ";")) { memory.altFlags = 0; memory.biomesForGenerationIndex = insn.var; return 17; @@ -198,7 +198,7 @@ public class ChunkProviderSuperPatcher implements IClassNodeTransformer { })); STATES.put(16, casting(FieldInsnNode.class, (insn, memory) -> { if ((insn.getOpcode() == Opcodes.GETFIELD || insn.getOpcode() == Opcodes.GETSTATIC) && - insn.desc.equals("[L" + BIOME_GEN_BASE_CLASS + ";")) { + insn.desc.equals("[L" + CLASS_BiomeGenBase + ";")) { memory.biomesForGenerationFieldOwner = insn.owner; memory.biomesForGenerationFieldName = insn.name; return 17; @@ -214,8 +214,8 @@ public class ChunkProviderSuperPatcher implements IClassNodeTransformer { ? 19 : 0)); STATES.put(19, casting(FieldInsnNode.class, (insn) -> insn.getOpcode() == Opcodes.GETFIELD && - insn.owner.equals(BIOME_GEN_BASE_CLASS) && - insn.name.equals(BIOME_ID_FIELD) & + insn.owner.equals(CLASS_BiomeGenBase) && + insn.name.equals(FIELD_biomeID) & insn.desc.equals("I") ? 20 : 0)); STATES.put(20, casting(InsnNode.class, (insn, memory) -> {