diff options
Diffstat (limited to 'src/main/java/ftbsc/bscv/patches/PacketPatch.java')
-rw-r--r-- | src/main/java/ftbsc/bscv/patches/PacketPatch.java | 50 |
1 files changed, 26 insertions, 24 deletions
diff --git a/src/main/java/ftbsc/bscv/patches/PacketPatch.java b/src/main/java/ftbsc/bscv/patches/PacketPatch.java index 603dd09..7decc4b 100644 --- a/src/main/java/ftbsc/bscv/patches/PacketPatch.java +++ b/src/main/java/ftbsc/bscv/patches/PacketPatch.java @@ -4,7 +4,7 @@ import ftbsc.lll.processor.annotations.Find; import ftbsc.lll.processor.annotations.Injector; import ftbsc.lll.processor.annotations.Patch; import ftbsc.lll.processor.annotations.Target; -import ftbsc.lll.proxies.MethodProxy; +import ftbsc.lll.proxies.impl.MethodProxy; import ftbsc.lll.tools.InsnSequence; import ftbsc.lll.tools.PatternMatcher; import ftbsc.lll.tools.debug.BytecodePrinter; @@ -43,24 +43,21 @@ public class PacketPatch { } } - public static boolean pktIn(IPacket<?> pkt) { - return MinecraftForge.EVENT_BUS.post(new PacketEvent.Incoming(pkt)); - } - - public static boolean pktOut(IPacket<?> pkt) { - return MinecraftForge.EVENT_BUS.post(new PacketEvent.Outgoing(pkt)); - } - - @Patch(value = NetworkManager.class, reason = "add hook to intercept and alter/cancel incoming packets") + @Patch(NetworkManager.class) public abstract static class IncomingPacketInterceptor implements Opcodes { - @Find(parent = PacketPatch.class) - abstract MethodProxy pktIn(); + @Find(IncomingPacketInterceptor.class) + MethodProxy pktIn; - @Target - public abstract void channelRead0(ChannelHandlerContext ctx, IPacket<?> pak); + @Target(of = "pktIn") + public static boolean pktIn(IPacket<?> pkt) { + return MinecraftForge.EVENT_BUS.post(new PacketEvent.Incoming(pkt)); + } + + @Target(of = "injectIncomingInterceptor") + abstract void channelRead0(ChannelHandlerContext ctx, IPacket<?> pak); - @Injector - public void inject(ClassNode clazz, MethodNode main) { + @Injector(reason = "add hook to intercept and alter/cancel incoming packets") + public void injectIncomingInterceptor(ClassNode clazz, MethodNode main) { AbstractInsnNode found = PatternMatcher.builder() .opcodes(ALOAD, GETFIELD, INVOKEINTERFACE, IFEQ) .ignoreFrames() @@ -73,7 +70,7 @@ public class PacketPatch { LabelNode skip = new LabelNode(); InsnSequence is = new InsnSequence(); is.add(new VarInsnNode(ALOAD, 2)); - is.add(new MethodProxyInsnNode(INVOKESTATIC, pktIn())); + is.add(new MethodProxyInsnNode(INVOKESTATIC, pktIn)); is.add(new JumpInsnNode(IFEQ, skip)); is.add(new InsnNode(RETURN)); is.add(skip); @@ -82,21 +79,26 @@ public class PacketPatch { } } - @Patch(value = NetworkManager.class, reason = "add hook to intercept and alter/cancel outgoing packets") + @Patch(NetworkManager.class) public abstract static class OutgoingPacketInterceptor implements Opcodes { - @Find(parent = PacketPatch.class) - abstract MethodProxy pktOut(); + @Find(OutgoingPacketInterceptor.class) + MethodProxy pktOut; + + @Target(of = "pktOut") + public static boolean pktOut(IPacket<?> pkt) { + return MinecraftForge.EVENT_BUS.post(new PacketEvent.Outgoing(pkt)); + } - @Target + @Target(of = "injectOutgoingInterceptor") public abstract void sendPacket(IPacket<?> pak, GenericFutureListener<? extends Future<? super Void>> gfl); - @Injector - public void inject(ClassNode clazz, MethodNode main) { + @Injector(reason = "add hook to intercept and alter/cancel outgoing packets") + public void injectOutgoingInterceptor(ClassNode clazz, MethodNode main) { // hook at the top LabelNode skip = new LabelNode(); InsnSequence is = new InsnSequence(); is.add(new VarInsnNode(ALOAD, 1)); - is.add(new MethodProxyInsnNode(INVOKESTATIC, pktOut())); + is.add(new MethodProxyInsnNode(INVOKESTATIC, pktOut)); is.add(new JumpInsnNode(IFEQ, skip)); is.add(new InsnNode(RETURN)); is.add(skip); |