-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPacketShowTool.kt
87 lines (74 loc) · 3.04 KB
/
PacketShowTool.kt
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
class PacketShowTool : JavaPlugin() {
// 1.19.4 기준임
override fun onEnable() {
server.onlinePlayers.forEach {
val packetShowTool = PacketShowTool()
it.playerConnection.getNetworkManager().addHandler(packetShowTool)
}
server.pluginManager.registerEvents(object : Listener {
@EventHandler
fun onJoin(event: PlayerJoinEvent) {
val player = event.player
val playerConnection = (player as CraftPlayer).handle.b
val packetShowTool = PacketShowTool()
playerConnection.getNetworkManager().addHandler(packetShowTool)
}
@EventHandler
fun onQuit(event: PlayerQuitEvent) {
val player = event.player
val playerConnection = (player as CraftPlayer).handle.b
playerConnection.getNetworkManager().removeHandler()
}
}, this)
}
override fun onDisable() {
server.onlinePlayers.forEach {
it.playerConnection.getNetworkManager().removeHandler()
}
}
}
class PacketShowTool : ChannelDuplexHandler() {
override fun channelRead(ctx: ChannelHandlerContext, msg: Any) {
println("Read: ${msg::class.simpleName}")
super.channelRead(ctx, msg)
}
override fun write(ctx: ChannelHandlerContext, msg: Any, promise: ChannelPromise) {
println("Write: ${msg::class.simpleName}")
super.write(ctx, msg, promise)
}
}
private fun PlayerConnection.getNetworkManager(): NetworkManager {
val networkManagerField = PlayerConnection::class.java.getDeclaredField("h")
networkManagerField.isAccessible = true
return networkManagerField.get(this) as NetworkManager
}
private fun NetworkManager.addHandler(channelHandler: ChannelHandler) {
m.pipeline().addBefore("packet_handler", "test_handler", channelHandler)
}
private fun NetworkManager.removeHandler() {
m.pipeline().remove("test_handler")
}
/*override fun channelRead(ctx: ChannelHandlerContext, msg: Any) {
if (msg !is PacketPlayInFlying.PacketPlayInLook &&
msg !is PacketPlayInFlying.PacketPlayInPosition &&
msg !is PacketPlayInFlying.PacketPlayInPositionLook
) {
println("Read: ${msg::class.simpleName}")
}
super.channelRead(ctx, msg)
}
override fun write(ctx: ChannelHandlerContext, msg: Any, promise: ChannelPromise) {
if (msg !is PacketPlayOutEntityHeadRotation &&
msg !is PacketPlayOutEntity.PacketPlayOutRelEntityMove &&
msg !is PacketPlayOutEntity.PacketPlayOutRelEntityMoveLook &&
msg !is PacketPlayOutEntityVelocity &&
msg !is PacketPlayOutEntityTeleport &&
msg !is ClientboundLevelChunkWithLightPacket &&
msg !is PacketPlayOutLightUpdate &&
msg !is PacketPlayOutUpdateTime &&
msg !is PacketPlayOutUnloadChunk
) {
println("Write: ${msg::class.simpleName}")
}
super.write(ctx, msg, promise)
}*/