Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @EventHandler
- public void onJoin(PlayerJoinEvent event) {
- injectPlayer(event.getPlayer());
- }
- @EventHandler
- public void onLeave(PlayerQuitEvent event) {
- removePlayer(event.getPlayer());
- }
- public void removePlayer(Player player) {
- Channel channel = ((CraftPlayer) player).getHandle().playerConnection.networkManager.channel;
- channel.eventLoop().submit(() -> {
- channel.pipeline().remove(player.getName());
- });
- }
- public void injectPlayer(Player player) {
- ChannelDuplexHandler channelDuplexHandler = new ChannelDuplexHandler() {
- @Override
- public void channelRead(ChannelHandlerContext channelHandlerContext, Object packet) throws Exception {
- if(packet instanceof PacketPlayInUseEntity) {
- PacketPlayInUseEntity use = (PacketPlayInUseEntity) packet;
- Field f = use.getClass().getField("a");
- f.setAccessible(true);
- int entityId = (int) f.get(use);
- }
- super.channelRead(channelHandlerContext, packet);
- }
- @Override
- public void write(ChannelHandlerContext channelHandlerContext, Object packet, ChannelPromise channelPromise) throws Exception {
- super.write(channelHandlerContext, packet, channelPromise);
- }
- };
- ChannelPipeline pipeline = ((CraftPlayer) player).getHandle().playerConnection.networkManager.channel.pipeline();
- pipeline.addBefore("packet_handler", player.getName(), channelDuplexHandler);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement