From 7329cad2b94b41e92a355cda834100143dac5367 Mon Sep 17 00:00:00 2001 From: FalsePattern <30945458+FalsePattern@users.noreply.github.com> Date: Thu, 17 Mar 2022 16:14:34 +0100 Subject: [PATCH] NetHandlerPlayClient --- .../endlessids/asm/ClassEdit.java | 3 +- .../VanillaNetHandlerPlayClient.java | 84 ------------------- .../client/NetHandlerPlayClientMixin.java | 46 ++++++++++ .../endlessids/mixin/plugin/Mixin.java | 1 + 4 files changed, 48 insertions(+), 86 deletions(-) delete mode 100644 src/main/java/com/falsepattern/endlessids/asm/transformer/VanillaNetHandlerPlayClient.java create mode 100644 src/main/java/com/falsepattern/endlessids/mixin/mixins/client/NetHandlerPlayClientMixin.java diff --git a/src/main/java/com/falsepattern/endlessids/asm/ClassEdit.java b/src/main/java/com/falsepattern/endlessids/asm/ClassEdit.java index 3f9d3a2..cb5ea05 100644 --- a/src/main/java/com/falsepattern/endlessids/asm/ClassEdit.java +++ b/src/main/java/com/falsepattern/endlessids/asm/ClassEdit.java @@ -13,7 +13,6 @@ 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.VanillaNetHandlerPlayClient; import java.util.Map; public enum ClassEdit @@ -25,7 +24,7 @@ public enum ClassEdit //VanillaChunk(new VanillaChunk(), new String[] { "net.minecraft.world.chunk.Chunk" }), //VanillaExtendedBlockStorage(new VanillaExtendedBlockStorage(), new String[] { "net.minecraft.world.chunk.storage.ExtendedBlockStorage" }), //VanillaDataWatcher(new VanillaDataWatcher(), new String[] { "net.minecraft.entity.DataWatcher" }), - VanillaNetHandlerPlayClient(new VanillaNetHandlerPlayClient(), new String[] { "net.minecraft.client.network.NetHandlerPlayClient" }), + //VanillaNetHandlerPlayClient(new VanillaNetHandlerPlayClient(), new String[] { "net.minecraft.client.network.NetHandlerPlayClient" }), //VanillaS21PacketChunkData(new VanillaS21PacketChunkData(), new String[] { "net.minecraft.network.play.server.S21PacketChunkData" }), VanillaS22PacketMultiBlockChange(new VanillaS22PacketMultiBlockChange(), new String[] { "net.minecraft.network.play.server.S22PacketMultiBlockChange" }), VanillaS24PacketBlockActivation(new VanillaS24PacketBlockActivation(), new String[] { "net.minecraft.network.play.server.S24PacketBlockAction" }), diff --git a/src/main/java/com/falsepattern/endlessids/asm/transformer/VanillaNetHandlerPlayClient.java b/src/main/java/com/falsepattern/endlessids/asm/transformer/VanillaNetHandlerPlayClient.java deleted file mode 100644 index 5f602a8..0000000 --- a/src/main/java/com/falsepattern/endlessids/asm/transformer/VanillaNetHandlerPlayClient.java +++ /dev/null @@ -1,84 +0,0 @@ -package com.falsepattern.endlessids.asm.transformer; - -import java.util.ListIterator; -import org.objectweb.asm.tree.InsnList; -import org.objectweb.asm.tree.MethodNode; -import com.falsepattern.endlessids.asm.AsmTransformException; -import org.objectweb.asm.tree.IntInsnNode; -import org.objectweb.asm.tree.MethodInsnNode; -import org.objectweb.asm.tree.InsnNode; -import org.objectweb.asm.tree.VarInsnNode; -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 VanillaNetHandlerPlayClient implements IClassNodeTransformer -{ - public VanillaNetHandlerPlayClient() { - super(); - } - - @Override - public void transform(final ClassNode cn, final boolean obfuscated) { - final MethodNode method = AsmUtil.findMethod(cn, Name.nhpc_handleMultiBlockChange); - final InsnList code = method.instructions; - int part = 0; - final ListIterator iterator = (ListIterator)code.iterator(); - while (iterator.hasNext()) { - AbstractInsnNode insn = (AbstractInsnNode)iterator.next(); - if (part == 0) { - if (insn.getOpcode() != 25 || ((VarInsnNode)insn).var != 4) { - continue; - } - ++part; - } - else if (part == 1) { - if (insn.getOpcode() != 25 || ((VarInsnNode)insn).var != 4) { - continue; - } - iterator.remove(); - insn = iterator.next(); - iterator.set((AbstractInsnNode)new InsnNode(3)); - ++part; - } - else if (part == 2) { - if (insn.getOpcode() != 21 || ((VarInsnNode)insn).var != 7) { - continue; - } - iterator.set((AbstractInsnNode)new VarInsnNode(25, 4)); - iterator.add((AbstractInsnNode)new MethodInsnNode(182, "java/io/DataInputStream", "readShort", "()S", false)); - ++part; - } - else if (part == 3) { - if (insn.getOpcode() == 54) { - ++part; - } - else { - iterator.remove(); - } - } - else if (part == 4) { - if (insn.getOpcode() != 21 || ((VarInsnNode)insn).var != 7) { - continue; - } - iterator.set((AbstractInsnNode)new VarInsnNode(25, 4)); - iterator.add((AbstractInsnNode)new MethodInsnNode(182, "java/io/DataInputStream", "readByte", "()B", false)); - iterator.add((AbstractInsnNode)new IntInsnNode(16, 15)); - iterator.add((AbstractInsnNode)new InsnNode(126)); - ++part; - } - else { - if (part != 5) { - continue; - } - if (insn.getOpcode() == 54) { - return; - } - iterator.remove(); - } - } - throw new AsmTransformException("no match for part " + part); - } -} diff --git a/src/main/java/com/falsepattern/endlessids/mixin/mixins/client/NetHandlerPlayClientMixin.java b/src/main/java/com/falsepattern/endlessids/mixin/mixins/client/NetHandlerPlayClientMixin.java new file mode 100644 index 0000000..0c37a9e --- /dev/null +++ b/src/main/java/com/falsepattern/endlessids/mixin/mixins/client/NetHandlerPlayClientMixin.java @@ -0,0 +1,46 @@ +package com.falsepattern.endlessids.mixin.mixins.client; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; +import net.minecraft.client.multiplayer.WorldClient; +import net.minecraft.client.network.NetHandlerPlayClient; +import net.minecraft.network.play.server.S22PacketMultiBlockChange; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.Shadow; + +import java.io.ByteArrayInputStream; +import java.io.DataInputStream; +import java.io.IOException; + +@SideOnly(Side.CLIENT) +@Mixin(NetHandlerPlayClient.class) +public abstract class NetHandlerPlayClientMixin { + + @Shadow private WorldClient clientWorldController; + + /** + * @author FalsePattern + * @reason Direct port from dumped code + */ + @Overwrite + public void handleMultiBlockChange(S22PacketMultiBlockChange p_147287_1_) throws IOException { + int var2 = p_147287_1_.func_148920_c().chunkXPos * 16; + int var3 = p_147287_1_.func_148920_c().chunkZPos * 16; + if (p_147287_1_.func_148921_d() != null) { + DataInputStream var4 = new DataInputStream(new ByteArrayInputStream(p_147287_1_.func_148921_d())); + + for(int var5 = 0; var5 < p_147287_1_.func_148922_e(); ++var5) { + short var6 = var4.readShort(); + short var8 = var4.readShort(); + int var9 = var4.readByte() & 15; + int var10 = var6 >> 12 & 15; + int var11 = var6 >> 8 & 15; + int var12 = var6 & 255; + this.clientWorldController.func_147492_c(var10 + var2, var12, var11 + var3, Block.getBlockById(var8), var9); + } + } + + } +} diff --git a/src/main/java/com/falsepattern/endlessids/mixin/plugin/Mixin.java b/src/main/java/com/falsepattern/endlessids/mixin/plugin/Mixin.java index 4e469d8..4ed30cd 100644 --- a/src/main/java/com/falsepattern/endlessids/mixin/plugin/Mixin.java +++ b/src/main/java/com/falsepattern/endlessids/mixin/plugin/Mixin.java @@ -17,6 +17,7 @@ public enum Mixin { WorldMixin(builder(Side.COMMON).mixin("WorldMixin")), ExtendedBlockStorageMixin(builder(Side.COMMON).mixin("ExtendedBlockStorageMixin")), S21PacketChunkDataMixin(builder(Side.COMMON).mixin("S21PacketChunkDataMixin")), + NetHandlerPlayClientMixin(builder(Side.CLIENT).mixin("NetHandlerPlayClientMixin")), ; public final String mixin;