mirror of
https://github.com/GTMEGA/EndlessIDs.git
synced 2026-11-12 16:37:49 +00:00
S22PacketMultiBlockChange
This commit is contained in:
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" }),
|
||||
|
||||
-75
@@ -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);
|
||||
}
|
||||
}
|
||||
+37
@@ -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")),
|
||||
;
|
||||
|
||||
Reference in new issue
Block a user