blob: 7c80db2502edbb77377e6f806959fe599756fa2a (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
package ftbsc.bscv.system;
import ftbsc.bscv.Boscovicino;
import io.netty.channel.*;
import net.minecraft.network.IPacket;
import net.minecraft.network.NetworkManager;
import net.minecraftforge.client.event.ClientPlayerNetworkEvent;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.eventbus.api.Cancelable;
import net.minecraftforge.eventbus.api.Event;
import net.minecraftforge.eventbus.api.SubscribeEvent;
@ChannelHandler.Sharable
public class PacketHandler extends ChannelDuplexHandler {
public PacketHandler() {
MinecraftForge.EVENT_BUS.register(this);
}
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
if(processPacket(msg, false))
super.channelRead(ctx, msg);
}
@Override
public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception {
if(processPacket(msg, true))
super.write(ctx, msg, promise);
}
private static boolean processPacket(Object msg, boolean outgoing) {
if(msg instanceof IPacket) {
IPacket<?> pkt = (IPacket<?>) msg;
PacketEvent event = outgoing ? new PacketEvent.Outgoing(pkt) : new PacketEvent.Incoming(pkt);
MinecraftForge.EVENT_BUS.post(event);
return !event.isCanceled();
} else return true;
}
@SubscribeEvent
public void registerOnLogin(ClientPlayerNetworkEvent.LoggedInEvent event) {
NetworkManager nm = event.getNetworkManager();
if(nm != null) {
nm.channel().pipeline().addBefore("packet_handler", "bscv_handler", this);
Boscovicino.LOGGER.info("Successfully registered PacketHandler!");
} else Boscovicino.LOGGER.error("Failed to register PacketHandler: NetworkManager was null!");
}
@Cancelable
public static class PacketEvent extends Event {
public static class Outgoing extends PacketEvent {
public final IPacket<?> packet;
public Outgoing(IPacket<?> packet) {
this.packet = packet;
}
}
public static class Incoming extends PacketEvent {
public final IPacket<?> packet;
public Incoming(IPacket<?> packet) {
this.packet = packet;
}
}
}
}
|