private void registerBukkitEvents() { listener = new Listener() { @EventHandler(priority = EventPriority.LOWEST) public final void onPlayerLogin(PlayerLoginEvent e) { if (closed) return; Channel channel = getChannel(e.getPlayer()); if (!uninjectedChannels.contains(channel)) { injectPlayer(e.getPlayer()); } } @EventHandler public final void onPluginDisable(PluginDisableEvent e) { if (e.getPlugin().equals(plugin)) { close(); } } }; plugin.getServer().getPluginManager().registerEvents(listener, plugin); }
private void unregisterChannelHandler() { if (serverChannelHandler == null) return; for (Channel serverChannel : serverChannels) { final ChannelPipeline pipeline = serverChannel.pipeline(); // Remove channel handler serverChannel.eventLoop().execute(new Runnable() { @Override public void run() { try { pipeline.remove(serverChannelHandler); } catch (NoSuchElementException e) { // That's fine } } }); } }
private PacketInterceptor injectChannelInternal(Channel channel) { try { PacketInterceptor interceptor = (PacketInterceptor) channel .pipeline().get(handlerName); if (interceptor == null) { interceptor = new PacketInterceptor(); channel.pipeline().addBefore("packet_handler", handlerName, interceptor); uninjectedChannels.remove(channel); } return interceptor; } catch (IllegalArgumentException e) { return (PacketInterceptor) channel.pipeline().get(handlerName); } }
@Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { final Channel channel = ctx.channel(); handleLoginStart(channel, msg); try { for (PacketListener listener : packetListeners) { msg = listener.onPacketInAsync(player, channel, msg); } } catch (Exception e) { plugin.getLogger().log(Level.SEVERE, "Error in onPacketInAsync().", e); } if (msg != null) { super.channelRead(ctx, msg); } }
@SuppressWarnings("unchecked") private void registerChannelHandler() { Object mcServer = getMinecraftServer.get(Bukkit.getServer()); Object serverConnection = getServerConnection.get(mcServer); boolean looking = true; networkManagers = (List<Object>) getNetworkMarkers.invoke(null, serverConnection); createServerChannelHandler(); for (int i = 0; looking; i++) { List<Object> list = Reflection.getField(serverConnection.getClass(), List.class, i).get(serverConnection); for (Object item : list) { if (!ChannelFuture.class.isInstance(item)) break; Channel serverChannel = ((ChannelFuture) item).channel(); serverChannels.add(serverChannel); serverChannel.pipeline().addFirst(serverChannelHandler); looking = false; } } }
private void unregisterChannelHandler() { if (serverChannelHandler == null) return; for (Channel serverChannel : serverChannels) { final ChannelPipeline pipeline = serverChannel.pipeline(); serverChannel.eventLoop().execute(new Runnable() { @Override public void run() { try { pipeline.remove(serverChannelHandler); } catch (NoSuchElementException e) { } } }); } }
@Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { final Channel channel = ctx.channel(); handleLoginStart(channel, msg); try { for(PacketListener pl : protocolsListeners) msg = pl.onPacketInAsync(player, channel, msg); } catch (Exception e) { plugin.getLogger().log(Level.SEVERE, "Error in onPacketInAsync().", e); } if (msg != null) { super.channelRead(ctx, msg); } }
@Override public Object onPacketInAsync(Player sender, Channel channel, Object packet) { if (!this.packet.isInstance(packet)) return packet; int x = this.x.get(packet); int y = this.y.get(packet); int z = this.z.get(packet); String[] l = this.l.get(packet); Block b = sender.getWorld().getBlockAt(x, y, z); Sign s = (Sign) b.getState(); for(int i = 0; i < l.length; i ++){ if(sender.hasPermission("essentials.signs.color") || sender.hasPermission("signgui.color")) l[i] = ChatColor.translateAlternateColorCodes('&', l[i]); else l[i] = ChatColor.stripColor(l[i]); s.setLine(i, l[i]); } s.update(); return packet; }
protected void initChannel(Channel channel) { try { channel.config().setOption(ChannelOption.IP_TOS, Integer.valueOf(24)); } catch (ChannelException channelexception) { ; } try { channel.config().setOption(ChannelOption.TCP_NODELAY, Boolean.valueOf(false)); } catch (ChannelException channelexception1) { ; } channel.pipeline().addLast("timeout", new ReadTimeoutHandler(30)).addLast("legacy_query", new LegacyPingHandler(this.a)).addLast("splitter", new PacketSplitter()).addLast("decoder", new PacketDecoder(NetworkManager.h)).addLast("prepender", new PacketPrepender()).addLast("encoder", new PacketEncoder(NetworkManager.h)); NetworkManager networkmanager = new NetworkManager(false); ServerConnection.a(this.a).add(networkmanager); channel.pipeline().addLast("packet_handler", networkmanager); networkmanager.a((PacketListener) (new HandshakeListener(ServerConnection.b(this.a), networkmanager))); }
@SuppressWarnings("unchecked") private void registerChannelHandler() { Object mcServer = getMinecraftServer.get(Bukkit.getServer()); Object serverConnection = getServerConnection.get(mcServer); boolean looking = true; networkManagers = (List<Object>) getNetworkMarkers.invoke(null, serverConnection); createServerChannelHandler(); for (int i = 0; looking; i++) { List<Object> list = Reflection.getField( serverConnection.getClass(), List.class, i).get( serverConnection); for (Object item : list) { if (!ChannelFuture.class.isInstance(item)) break; Channel serverChannel = ((ChannelFuture) item).channel(); serverChannels.add(serverChannel); serverChannel.pipeline().addFirst(serverChannelHandler); looking = false; } } }
public Channel getChannel(Player player) { Channel channel = channelLookup.get(player.getName()); if (channel == null) { Object connection = getConnection.get(getPlayerHandle .invoke(player)); Object manager = getManager.get(connection); channelLookup.put(player.getName(), channel = getChannel.get(manager)); } return channel; }
public void uninjectChannel(final Channel channel) { if (!closed) { uninjectedChannels.add(channel); } channel.eventLoop().execute(new Runnable() { @Override public void run() { channel.pipeline().remove(handlerName); } }); }
private void createServerChannelHandler() { endInitProtocol = new ChannelInitializer<Channel>() { @Override protected void initChannel(Channel channel) throws Exception { try { synchronized (networkManagers) { if (!closed) { injectChannelInternal(channel); } } } catch (Exception e) { plugin.getLogger().log(Level.SEVERE, "Cannot inject incomming channel " + channel, e); } } }; beginInitProtocol = new ChannelInitializer<Channel>() { @Override protected void initChannel(Channel channel) throws Exception { channel.pipeline().addLast(endInitProtocol); } }; serverChannelHandler = new ChannelInboundHandlerAdapter() { @Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { Channel channel = (Channel) msg; channel.pipeline().addFirst(beginInitProtocol); ctx.fireChannelRead(msg); } }; }
private PacketInterceptor injectChannelInternal(Channel channel) { try { PacketInterceptor interceptor = (PacketInterceptor) channel.pipeline().get(handlerName); if (interceptor == null) { interceptor = new PacketInterceptor(); channel.pipeline().addBefore("packet_handler", handlerName, interceptor); uninjectedChannels.remove(channel); } return interceptor; } catch (IllegalArgumentException e) { return (PacketInterceptor) channel.pipeline().get(handlerName); } }
public Channel getChannel(Player player) { Channel channel = channelLookup.get(player.getName()); if (channel == null) { Object connection = getConnection.get(getPlayerHandle.invoke(player)); Object manager = getManager.get(connection); channelLookup.put(player.getName(), channel = getChannel.get(manager)); } return channel; }
/** * Gets the channel * * @param player player * @return the Channel */ private static Channel getChannel(Player player) { try { Object entity = Reflections.getHandle(player); return clientChannelField.get(networkManagerField.get(playerConnectionField.get(entity))); } catch(Exception e) { LoggerUtils.exception(e); return null; } }
/** * Sets the new socket channel of the given manager. * * @param inManager The manager to change the channel of * @param inChannel The new channel */ public static void setNetworkChannel(Object inManager, Channel inChannel) { try { Field channel = getOrRegisterNMSField("NetworkManager", "k"); channel.set(inManager, inChannel); } catch(Exception e) { } }
protected void swapFields() { if (CHANNEL_FIELD == null) { CHANNEL_FIELD = new Reflection().reflect(NetworkManager.class).getSafeFieldByType(Channel.class).getAccessor(); } if (ADDRESS_FIELD == null) { ADDRESS_FIELD = new Reflection().reflect(NetworkManager.class).getSafeFieldByType(InetSocketAddress.class).getAccessor(); } CHANNEL_FIELD.set(this, new NullChannel(null)); ADDRESS_FIELD.set(this, null); }
protected void swapFields() { if (CHANNEL_FIELD == null) { CHANNEL_FIELD = new Reflection().reflect(NetworkManager.class).getSafeFieldByType(Channel.class).getAccessor(); } if (ADDRESS_FIELD == null) { ADDRESS_FIELD = new Reflection().reflect(NetworkManager.class).getSafeFieldByType(SocketAddress.class).getAccessor(); } CHANNEL_FIELD.set(this, new NullChannel(null)); ADDRESS_FIELD.set(this, new SocketAddress() {}); }
public void sendPacket(Channel channel, Object packet) { channel.pipeline().writeAndFlush(packet); }
public void receivePacket(Channel channel, Object packet) { channel.pipeline().context("encoder").fireChannelRead(packet); }
public void injectChannel(Channel channel) { injectChannelInternal(channel); }
public boolean hasInjected(Channel channel) { return channel.pipeline().get(handlerName) != null; }
private void handleLoginStart(Channel channel, Object packet) { if (PACKET_LOGIN_IN_START.isInstance(packet)) { GameProfile profile = getGameProfile.get(packet); channelLookup.put(profile.getName(), channel); } }
public Object onPacketOutAsync(Player reciever, Channel channel, Object packet);
public Object onPacketInAsync(Player sender, Channel channel, Object packet);
static Channel a(NetworkManager networkmanager) { return networkmanager.m; }
public Object onPacketOutAsync(Player reciever, Channel channel, Object packet){ return packet; }
public Object onPacketInAsync(Player sender, Channel channel, Object packet){ return packet; }