mirror of
https://github.com/GTMEGA/EndlessIDs.git
synced 2026-11-12 04:57:31 +00:00
NetHandlerPlayClient
This commit is contained in:
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" }),
|
||||
|
||||
-84
@@ -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);
|
||||
}
|
||||
}
|
||||
+46
@@ -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;
|
||||
|
||||
Reference in new issue
Block a user