diff --git a/src/main/java/com/falsepattern/endlessids/asm/ClassEdit.java b/src/main/java/com/falsepattern/endlessids/asm/ClassEdit.java index 70c65f9..d98df4e 100644 --- a/src/main/java/com/falsepattern/endlessids/asm/ClassEdit.java +++ b/src/main/java/com/falsepattern/endlessids/asm/ClassEdit.java @@ -7,22 +7,16 @@ import com.falsepattern.endlessids.asm.transformer.UndergroundBiomesBiomeUndergr import com.falsepattern.endlessids.asm.transformer.UndergroundBiomesOreUBifier; import com.falsepattern.endlessids.asm.transformer.CofhBlockHelper; import com.falsepattern.endlessids.asm.transformer.FmlRegistry; -import com.falsepattern.endlessids.asm.transformer.VanillaWorld; import com.falsepattern.endlessids.asm.transformer.VanillaItemInWorldManager; import com.falsepattern.endlessids.asm.transformer.VanillaPlayerControllerMP; import com.falsepattern.endlessids.asm.transformer.VanillaRenderGlobal; import com.falsepattern.endlessids.asm.transformer.VanillaS26PacketMapChunkBulk; import com.falsepattern.endlessids.asm.transformer.VanillaS24PacketBlockActivation; import com.falsepattern.endlessids.asm.transformer.VanillaS22PacketMultiBlockChange; -import com.falsepattern.endlessids.asm.transformer.VanillaS21PacketChunkData; import com.falsepattern.endlessids.asm.transformer.VanillaNetHandlerPlayClient; import com.falsepattern.endlessids.asm.transformer.VanillaDataWatcher; -import com.falsepattern.endlessids.asm.transformer.VanillaExtendedBlockStorage; -import com.falsepattern.endlessids.asm.transformer.VanillaChunk; -import com.falsepattern.endlessids.asm.transformer.VanillaAnvilChunkLoader; import com.falsepattern.endlessids.asm.transformer.VanillaStatList; import com.falsepattern.endlessids.asm.transformer.VanillaBlockFire; -import com.falsepattern.endlessids.asm.transformer.SelfHooks; import java.util.Map; public enum ClassEdit diff --git a/src/main/java/com/falsepattern/endlessids/asm/transformer/SelfHooks.java b/src/main/java/com/falsepattern/endlessids/asm/transformer/SelfHooks.java deleted file mode 100644 index d8e2c26..0000000 --- a/src/main/java/com/falsepattern/endlessids/asm/transformer/SelfHooks.java +++ /dev/null @@ -1,62 +0,0 @@ -package com.falsepattern.endlessids.asm.transformer; - -import com.falsepattern.endlessids.asm.Name; -import org.objectweb.asm.tree.InsnList; -import org.objectweb.asm.tree.InsnNode; -import org.objectweb.asm.tree.FieldInsnNode; -import org.objectweb.asm.Type; -import org.objectweb.asm.tree.AbstractInsnNode; -import org.objectweb.asm.tree.VarInsnNode; -import org.objectweb.asm.tree.MethodNode; -import com.falsepattern.endlessids.asm.AsmUtil; -import org.objectweb.asm.tree.ClassNode; -import com.falsepattern.endlessids.asm.IClassNodeTransformer; - -public class SelfHooks implements IClassNodeTransformer -{ - public SelfHooks() { - super(); - } - - @Override - public void transform(final ClassNode cn, final boolean obfuscated) { - MethodNode method = AsmUtil.findMethod(cn, "get"); - this.transformGet(cn, method); - method = AsmUtil.findMethod(cn, "setBlockRefCount"); - this.transformSetBlockRefCount(cn, method, obfuscated); - method = AsmUtil.findMethod(cn, "setTickRefCount"); - this.transformSetTickRefCount(cn, method, obfuscated); - } - - private void transformGet(final ClassNode cn, final MethodNode method) { - final InsnList code = method.instructions; - code.clear(); - code.add((AbstractInsnNode)new VarInsnNode(25, 0)); - code.add((AbstractInsnNode)new FieldInsnNode(180, Type.getArgumentTypes(method.desc)[0].getInternalName(), "block16BArray", "[S")); - code.add((AbstractInsnNode)new InsnNode(176)); - method.localVariables = null; - method.maxStack = 1; - } - - private void transformSetBlockRefCount(final ClassNode cn, final MethodNode method, final boolean isObf) { - final InsnList code = method.instructions; - code.clear(); - code.add((AbstractInsnNode)new VarInsnNode(25, 0)); - code.add((AbstractInsnNode)new VarInsnNode(21, 1)); - code.add((AbstractInsnNode)Name.ebs_blockRefCount.virtualSet(isObf)); - code.add((AbstractInsnNode)new InsnNode(177)); - method.localVariables = null; - method.maxStack = 2; - } - - private void transformSetTickRefCount(final ClassNode cn, final MethodNode method, final boolean isObf) { - final InsnList code = method.instructions; - code.clear(); - code.add((AbstractInsnNode)new VarInsnNode(25, 0)); - code.add((AbstractInsnNode)new VarInsnNode(21, 1)); - code.add((AbstractInsnNode)Name.ebs_tickRefCount.virtualSet(isObf)); - code.add((AbstractInsnNode)new InsnNode(177)); - method.localVariables = null; - method.maxStack = 2; - } -} diff --git a/src/main/java/com/falsepattern/endlessids/asm/transformer/VanillaAnvilChunkLoader.java b/src/main/java/com/falsepattern/endlessids/asm/transformer/VanillaAnvilChunkLoader.java deleted file mode 100644 index 340de7d..0000000 --- a/src/main/java/com/falsepattern/endlessids/asm/transformer/VanillaAnvilChunkLoader.java +++ /dev/null @@ -1,85 +0,0 @@ -package com.falsepattern.endlessids.asm.transformer; - -import org.objectweb.asm.tree.MethodInsnNode; -import java.util.ListIterator; -import org.objectweb.asm.tree.InsnList; -import com.falsepattern.endlessids.asm.AsmTransformException; -import org.objectweb.asm.tree.LdcInsnNode; -import org.objectweb.asm.tree.AbstractInsnNode; -import org.objectweb.asm.tree.MethodNode; -import com.falsepattern.endlessids.asm.AsmUtil; -import com.falsepattern.endlessids.asm.Name; -import org.objectweb.asm.tree.ClassNode; -import com.falsepattern.endlessids.asm.IClassNodeTransformer; - -public class VanillaAnvilChunkLoader implements IClassNodeTransformer -{ - public VanillaAnvilChunkLoader() { - super(); - } - - @Override - public void transform(final ClassNode cn, final boolean obfuscated) { - MethodNode method = AsmUtil.findMethod(cn, Name.acl_writeChunkToNBT); - this.transformWriteChunkToNBT(cn, method, obfuscated); - method = AsmUtil.findMethod(cn, Name.acl_readChunkFromNBT); - this.transformReadChunkFromNBT(cn, method, obfuscated); - } - - private void transformWriteChunkToNBT(final ClassNode cn, final MethodNode method, final boolean obfuscated) { - final InsnList code = method.instructions; - final ListIterator iterator = (ListIterator)code.iterator(); - while (iterator.hasNext()) { - final AbstractInsnNode insn = (AbstractInsnNode)iterator.next(); - if (insn.getOpcode() == 18 && ((LdcInsnNode)insn).cst.equals("Blocks")) { - iterator.remove(); - iterator.next(); - iterator.next(); - iterator.remove(); - iterator.next(); - iterator.remove(); - iterator.add((AbstractInsnNode)Name.hooks_writeChunkToNbt.staticInvocation(obfuscated)); - return; - } - } - throw new AsmTransformException("can't find Blocks LDC"); - } - - private void transformReadChunkFromNBT(final ClassNode cn, final MethodNode method, final boolean obfuscated) { - final InsnList code = method.instructions; - int part = 0; - final ListIterator iterator = (ListIterator)code.iterator(); - while (iterator.hasNext()) { - final AbstractInsnNode insn = (AbstractInsnNode)iterator.next(); - if (part == 0) { - if (insn.getOpcode() != 18 || !((LdcInsnNode)insn).cst.equals("Blocks")) { - continue; - } - iterator.set((AbstractInsnNode)Name.hooks_readChunkFromNbt.staticInvocation(obfuscated)); - ++part; - } - else if (part == 1) { - iterator.remove(); - if (insn.getOpcode() != 182) { - continue; - } - final MethodInsnNode node = (MethodInsnNode)insn; - if (!Name.ebs_setBlockMSBArray.matches(node, obfuscated)) { - continue; - } - ++part; - } - else { - if (insn.getType() == 14) { - iterator.remove(); - ++part; - break; - } - continue; - } - } - if (part != 3) { - throw new AsmTransformException("no match for part " + part); - } - } -} diff --git a/src/main/java/com/falsepattern/endlessids/asm/transformer/VanillaChunk.java b/src/main/java/com/falsepattern/endlessids/asm/transformer/VanillaChunk.java deleted file mode 100644 index 2af827e..0000000 --- a/src/main/java/com/falsepattern/endlessids/asm/transformer/VanillaChunk.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.falsepattern.endlessids.asm.transformer; - -import java.util.ListIterator; -import org.objectweb.asm.tree.MethodNode; -import com.falsepattern.endlessids.asm.AsmTransformException; -import org.objectweb.asm.tree.JumpInsnNode; -import org.objectweb.asm.tree.InsnNode; -import org.objectweb.asm.tree.LdcInsnNode; -import org.objectweb.asm.tree.VarInsnNode; -import org.objectweb.asm.tree.MethodInsnNode; -import org.objectweb.asm.tree.AbstractInsnNode; -import com.falsepattern.endlessids.asm.AsmUtil; -import com.falsepattern.endlessids.asm.Name; -import org.objectweb.asm.tree.ClassNode; -import com.falsepattern.endlessids.asm.IClassNodeTransformer; - -public class VanillaChunk implements IClassNodeTransformer -{ - public VanillaChunk() { - super(); - } - - @Override - public void transform(final ClassNode cn, final boolean obfuscated) { - final MethodNode method = AsmUtil.findMethod(cn, Name.chunk_fillChunk, true); - if (method == null) { - return; - } - method.localVariables = null; - int part = 0; - final ListIterator it = (ListIterator)method.instructions.iterator(); - while (it.hasNext()) { - AbstractInsnNode insn = (AbstractInsnNode)it.next(); - if (part == 0) { - if (insn.getOpcode() != 182 || !Name.ebs_getBlockLSBArray.matches((MethodInsnNode)insn, obfuscated)) { - continue; - } - it.set((AbstractInsnNode)new VarInsnNode(25, 1)); - it.add((AbstractInsnNode)new VarInsnNode(21, 6)); - it.add((AbstractInsnNode)Name.hooks_setBlockData.staticInvocation(obfuscated)); - ++part; - } - else if (part == 1) { - if (insn.getOpcode() == 96) { - it.set((AbstractInsnNode)new VarInsnNode(21, 6)); - it.add((AbstractInsnNode)new LdcInsnNode((Object)Integer.valueOf(8192))); - it.add((AbstractInsnNode)new InsnNode(96)); - ++part; - } - else { - it.remove(); - } - } - else { - if (part == 2 && insn.getOpcode() == 182 && Name.ebs_getBlockMSBArray.matches((MethodInsnNode)insn, obfuscated)) { - while (((AbstractInsnNode)it.previous()).getOpcode() != 3) {} - while (((AbstractInsnNode)it.previous()).getType() != 8) {} - do { - insn = it.next(); - } while (insn.getOpcode() != 161 && insn.getOpcode() != 162); - it.set((AbstractInsnNode)new JumpInsnNode((insn.getOpcode() == 161) ? 163 : 161, ((JumpInsnNode)insn).label)); - return; - } - continue; - } - } - throw new AsmTransformException("no match for part " + part); - } -} diff --git a/src/main/java/com/falsepattern/endlessids/asm/transformer/VanillaExtendedBlockStorage.java b/src/main/java/com/falsepattern/endlessids/asm/transformer/VanillaExtendedBlockStorage.java deleted file mode 100644 index 00f7f1d..0000000 --- a/src/main/java/com/falsepattern/endlessids/asm/transformer/VanillaExtendedBlockStorage.java +++ /dev/null @@ -1,133 +0,0 @@ -package com.falsepattern.endlessids.asm.transformer; - -import org.objectweb.asm.tree.MethodInsnNode; -import com.falsepattern.endlessids.asm.AsmTransformException; -import org.objectweb.asm.tree.InsnNode; -import java.util.ListIterator; -import org.objectweb.asm.tree.FieldInsnNode; -import org.objectweb.asm.tree.VarInsnNode; -import org.objectweb.asm.tree.InsnList; -import org.objectweb.asm.tree.AbstractInsnNode; -import org.objectweb.asm.tree.MethodNode; -import com.falsepattern.endlessids.asm.AsmUtil; -import com.falsepattern.endlessids.asm.Name; -import org.objectweb.asm.tree.FieldNode; -import org.objectweb.asm.tree.ClassNode; -import com.falsepattern.endlessids.asm.IClassNodeTransformer; - -public class VanillaExtendedBlockStorage implements IClassNodeTransformer -{ - public VanillaExtendedBlockStorage() { - super(); - } - - @Override - public void transform(final ClassNode cn, final boolean obfuscated) { - cn.fields.add(new FieldNode(1, "block16BArray", "[S", (String)null, (Object)null)); - AsmUtil.makePublic(AsmUtil.findField(cn, Name.ebs_blockRefCount)); - AsmUtil.makePublic(AsmUtil.findField(cn, Name.ebs_tickRefCount)); - MethodNode method = AsmUtil.findMethod(cn, ""); - this.transformConstructor(cn, method, obfuscated); - method = AsmUtil.findMethod(cn, Name.ebs_getBlock); - this.transformGetBlock(cn, method, obfuscated); - method = AsmUtil.findMethod(cn, Name.ebs_setBlock); - this.transformSetBlock(cn, method, obfuscated); - method = AsmUtil.findMethod(cn, Name.ebs_getBlockMSBArray); - this.transformGetBlockMSBArray(cn, method); - method = AsmUtil.findMethod(cn, Name.ebs_removeInvalidBlocks); - this.transformRemoveInvalidBlocks(cn, method); - } - - private void transformConstructor(final ClassNode cn, final MethodNode method, final boolean obfuscated) { - final InsnList code = method.instructions; - final ListIterator iterator = (ListIterator)code.iterator(); - if (iterator.hasNext()) { - AbstractInsnNode insn = (AbstractInsnNode)iterator.next(); - insn = insn.getNext().getNext(); - final InsnList toInsert = new InsnList(); - toInsert.add((AbstractInsnNode)new VarInsnNode(25, 0)); - toInsert.add((AbstractInsnNode)Name.hooks_create16BArray.staticInvocation(obfuscated)); - toInsert.add((AbstractInsnNode)new FieldInsnNode(181, cn.name, "block16BArray", "[S")); - method.instructions.insert(insn, toInsert); - } - method.maxStack = Math.max(method.maxStack, 2); - } - - private void transformGetBlock(final ClassNode cn, final MethodNode method, final boolean obfuscated) { - final InsnList code = method.instructions; - code.clear(); - code.add((AbstractInsnNode)new VarInsnNode(25, 0)); - code.add((AbstractInsnNode)new VarInsnNode(21, 1)); - code.add((AbstractInsnNode)new VarInsnNode(21, 2)); - code.add((AbstractInsnNode)new VarInsnNode(21, 3)); - code.add((AbstractInsnNode)Name.hooks_getBlockById.staticInvocation(obfuscated)); - code.add((AbstractInsnNode)new InsnNode(176)); - method.localVariables = null; - method.maxStack = 4; - } - - private void transformSetBlock(final ClassNode cn, final MethodNode method, final boolean obfuscated) { - final InsnList code = method.instructions; - int part = 0; - final ListIterator iterator = (ListIterator)code.iterator(); - while (iterator.hasNext()) { - final AbstractInsnNode insn = (AbstractInsnNode)iterator.next(); - if (part == 0) { - iterator.remove(); - if (insn.getOpcode() != 184) { - continue; - } - ++part; - iterator.add((AbstractInsnNode)new VarInsnNode(25, 0)); - iterator.add((AbstractInsnNode)new VarInsnNode(21, 1)); - iterator.add((AbstractInsnNode)new VarInsnNode(21, 2)); - iterator.add((AbstractInsnNode)new VarInsnNode(21, 3)); - iterator.add((AbstractInsnNode)Name.ebs_getBlock.virtualInvocation(obfuscated)); - } - else if (part == 1) { - if (insn.getOpcode() != 184) { - continue; - } - iterator.set((AbstractInsnNode)new VarInsnNode(25, 6)); - iterator.add((AbstractInsnNode)Name.hooks_getIdFromBlockWithCheck.staticInvocation(obfuscated)); - ++part; - } - else { - iterator.remove(); - } - } - if (part != 2) { - throw new AsmTransformException("no match for part " + part); - } - code.add((AbstractInsnNode)new VarInsnNode(54, 5)); - code.add((AbstractInsnNode)new VarInsnNode(25, 0)); - code.add((AbstractInsnNode)new VarInsnNode(21, 1)); - code.add((AbstractInsnNode)new VarInsnNode(21, 2)); - code.add((AbstractInsnNode)new VarInsnNode(21, 3)); - code.add((AbstractInsnNode)new VarInsnNode(21, 5)); - code.add((AbstractInsnNode)Name.hooks_setBlockId.staticInvocation(obfuscated)); - code.add((AbstractInsnNode)new InsnNode(177)); - method.localVariables = null; - --method.maxLocals; - method.maxStack = Math.max(method.maxStack, 5); - } - - private void transformGetBlockMSBArray(final ClassNode cn, final MethodNode method) { - final InsnList code = method.instructions; - code.clear(); - code.add((AbstractInsnNode)new InsnNode(1)); - code.add((AbstractInsnNode)new InsnNode(176)); - method.localVariables = null; - method.maxStack = 1; - } - - private void transformRemoveInvalidBlocks(final ClassNode cn, final MethodNode method) { - final InsnList code = method.instructions; - code.clear(); - code.add((AbstractInsnNode)new VarInsnNode(25, 0)); - code.add((AbstractInsnNode)new MethodInsnNode(184, "com/falsepattern/endlessids/Hooks", "removeInvalidBlocksHook", "(L" + cn.name + ";)V", false)); - code.add((AbstractInsnNode)new InsnNode(177)); - method.localVariables = null; - method.maxStack = 1; - } -} diff --git a/src/main/java/com/falsepattern/endlessids/asm/transformer/VanillaS21PacketChunkData.java b/src/main/java/com/falsepattern/endlessids/asm/transformer/VanillaS21PacketChunkData.java deleted file mode 100644 index 48a37b1..0000000 --- a/src/main/java/com/falsepattern/endlessids/asm/transformer/VanillaS21PacketChunkData.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.falsepattern.endlessids.asm.transformer; - -import java.util.ListIterator; -import org.objectweb.asm.tree.InsnList; -import com.falsepattern.endlessids.asm.AsmTransformException; -import org.objectweb.asm.tree.MethodInsnNode; -import org.objectweb.asm.tree.AbstractInsnNode; -import org.objectweb.asm.tree.MethodNode; -import com.falsepattern.endlessids.asm.Name; -import com.falsepattern.endlessids.asm.AsmUtil; -import org.objectweb.asm.tree.ClassNode; -import com.falsepattern.endlessids.asm.IClassNodeTransformer; - -public class VanillaS21PacketChunkData implements IClassNodeTransformer -{ - public VanillaS21PacketChunkData() { - super(); - } - - @Override - public void transform(final ClassNode cn, final boolean obfuscated) { - MethodNode method = AsmUtil.findMethod(cn, ""); - AsmUtil.transformInlinedSizeMethod(cn, method, 196864, 229632, false); - method = AsmUtil.findMethod(cn, Name.s21_undefined1); - AsmUtil.transformInlinedSizeMethod(cn, method, 196864, 229632, false); - method = AsmUtil.findMethod(cn, Name.packet_readPacketData); - AsmUtil.transformInlinedSizeMethod(cn, method, 12288, 14336, false); - method = AsmUtil.findMethod(cn, Name.s21_undefined2); - this.transformCreateData(cn, method, obfuscated); - } - - private void transformCreateData(final ClassNode cn, final MethodNode method, final boolean obfuscated) { - final InsnList code = method.instructions; - final ListIterator iterator = (ListIterator)code.iterator(); - while (iterator.hasNext()) { - final AbstractInsnNode insn = (AbstractInsnNode)iterator.next(); - if (insn.getOpcode() == 182) { - final MethodInsnNode node = (MethodInsnNode)insn; - if (Name.ebs_getBlockLSBArray.matches(node, obfuscated)) { - iterator.set((AbstractInsnNode)Name.hooks_getBlockData.staticInvocation(obfuscated)); - return; - } - continue; - } - } - throw new AsmTransformException("can't find getBlockLSBArray INVOKEVIRTUAL"); - } -} diff --git a/src/main/java/com/falsepattern/endlessids/asm/transformer/VanillaWorld.java b/src/main/java/com/falsepattern/endlessids/asm/transformer/VanillaWorld.java deleted file mode 100644 index 1093e3d..0000000 --- a/src/main/java/com/falsepattern/endlessids/asm/transformer/VanillaWorld.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.falsepattern.endlessids.asm.transformer; - -import org.objectweb.asm.tree.MethodNode; -import com.falsepattern.endlessids.asm.AsmUtil; -import com.falsepattern.endlessids.asm.Name; -import org.objectweb.asm.tree.ClassNode; -import com.falsepattern.endlessids.asm.IClassNodeTransformer; - -public class VanillaWorld implements IClassNodeTransformer -{ - public VanillaWorld() { - super(); - } - - @Override - public void transform(final ClassNode cn, final boolean obfuscated) { - final MethodNode method = AsmUtil.findMethod(cn, Name.world_breakBlock); - AsmUtil.transformInlinedSizeMethod(cn, method, 12, 16); - } -}