NetHandlerPlayClient

This commit is contained in:
FalsePattern committed 2022-03-17 16:15:12 +01:00
1 parent bc5dd01982
commit 7329cad2b9
4 files changed
+48 -86

No files matched your search

@@ -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" }),
@@ -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<AbstractInsnNode> iterator = (ListIterator<AbstractInsnNode>)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);
}
}
@@ -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);
}
}
}
}
@@ -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;