S22PacketMultiBlockChange

This commit is contained in:
FalsePattern committed 2022-03-17 16:38:16 +01:00
1 parent 2159692908
commit 54b8681360
4 files changed
+39 -77

No files matched your search

@@ -11,7 +11,6 @@ import com.falsepattern.endlessids.asm.transformer.VanillaItemInWorldManager;
import com.falsepattern.endlessids.asm.transformer.VanillaPlayerControllerMP;
import com.falsepattern.endlessids.asm.transformer.VanillaS26PacketMapChunkBulk;
import com.falsepattern.endlessids.asm.transformer.VanillaS24PacketBlockActivation;
import com.falsepattern.endlessids.asm.transformer.VanillaS22PacketMultiBlockChange;
import java.util.Map;
public enum ClassEdit
@@ -25,7 +24,7 @@ public enum ClassEdit
//VanillaDataWatcher(new VanillaDataWatcher(), new String[] { "net.minecraft.entity.DataWatcher" }),
//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" }),
//VanillaS22PacketMultiBlockChange(new VanillaS22PacketMultiBlockChange(), new String[] { "net.minecraft.network.play.server.S22PacketMultiBlockChange" }),
VanillaS24PacketBlockActivation(new VanillaS24PacketBlockActivation(), new String[] { "net.minecraft.network.play.server.S24PacketBlockAction" }),
VanillaS26PacketMapChunkBulk(new VanillaS26PacketMapChunkBulk(), new String[] { "net.minecraft.network.play.server.S26PacketMapChunkBulk" }),
//VanillaRenderGlobal(new VanillaRenderGlobal(), new String[] { "net.minecraft.client.renderer.RenderGlobal" }),
@@ -1,75 +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.VarInsnNode;
import org.objectweb.asm.tree.MethodInsnNode;
import org.objectweb.asm.tree.InsnNode;
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 VanillaS22PacketMultiBlockChange implements IClassNodeTransformer
{
public VanillaS22PacketMultiBlockChange() {
super();
}
@Override
public void transform(final ClassNode cn, final boolean obfuscated) {
final MethodNode method = AsmUtil.findMethod(cn, Name.s22_init_server);
final InsnList code = method.instructions;
int part = 0;
final ListIterator<AbstractInsnNode> iterator = (ListIterator<AbstractInsnNode>)code.iterator();
while (iterator.hasNext()) {
final AbstractInsnNode insn = (AbstractInsnNode)iterator.next();
if (part == 0) {
if (insn.getOpcode() != 7) {
continue;
}
iterator.set((AbstractInsnNode)new InsnNode(8));
++part;
}
else if (part == 1) {
if (insn.getOpcode() != 184) {
continue;
}
final MethodInsnNode node = (MethodInsnNode)insn;
if (!Name.block_getIdFromBlock.matches(node, obfuscated)) {
continue;
}
iterator.add((AbstractInsnNode)new MethodInsnNode(182, "java/io/DataOutputStream", "writeShort", "(I)V", false));
++part;
}
else if (part == 2) {
if (insn.getOpcode() == 25) {
++part;
}
else {
iterator.remove();
}
}
else if (part == 3) {
if (insn.getOpcode() != 182) {
continue;
}
iterator.add((AbstractInsnNode)new VarInsnNode(25, 6));
iterator.add((AbstractInsnNode)new InsnNode(95));
iterator.add((AbstractInsnNode)new MethodInsnNode(182, "java/io/DataOutputStream", "writeByte", "(I)V", false));
++part;
}
else {
iterator.remove();
if (insn.getOpcode() == 182) {
return;
}
continue;
}
}
throw new AsmTransformException("no match for part " + part);
}
}
@@ -0,0 +1,37 @@
package com.falsepattern.endlessids.mixin.mixins.common;
import net.minecraft.block.Block;
import net.minecraft.network.play.server.S22PacketMultiBlockChange;
import net.minecraft.world.chunk.Chunk;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
import java.io.DataOutputStream;
import java.io.IOException;
@Mixin(S22PacketMultiBlockChange.class)
public abstract class S22PacketMultiBlockChangeMixin {
private int id;
private int meta;
@Redirect(method = "<init>(I[SLnet/minecraft/world/chunk/Chunk;)V",
at = @At(value = "INVOKE",
target = "Lnet/minecraft/world/chunk/Chunk;getBlock(III)Lnet/minecraft/block/Block;"),
require = 1)
private Block extractBlockInfo(Chunk instance, int x, int y, int z) {
Block block = instance.getBlock(x, y, z);
id = Block.getIdFromBlock(block);
meta = instance.getBlockMetadata(x, y, z);
return block;
}
@Redirect(method = "<init>(I[SLnet/minecraft/world/chunk/Chunk;)V",
at = @At(value = "INVOKE",
target = "Ljava/io/DataOutputStream;writeShort(I)V",
ordinal = 1),
require = 1)
private void hackWrite(DataOutputStream instance, int value) throws IOException {
instance.writeShort(id);
instance.writeByte(meta);
}
}
@@ -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")),
S22PacketMultiBlockChangeMixin(builder(Side.COMMON).mixin("S22PacketMultiBlockChangeMixin")),
NetHandlerPlayClientMixin(builder(Side.CLIENT).mixin("NetHandlerPlayClientMixin")),
RenderGlobalMixin(builder(Side.CLIENT).mixin("RenderGlobalMixin")),
;