aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/ftbsc/bscv/patches/PacketPatch.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/ftbsc/bscv/patches/PacketPatch.java')
-rw-r--r--src/main/java/ftbsc/bscv/patches/PacketPatch.java50
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);