public static void injectNetty(final Player player) { try { Object handle = player.getClass().getMethod("getHandle").invoke(player); Object playerConnection = handle.getClass().getField("playerConnection").get(handle); final Channel channel = (Channel) channelField.get(playerConnection.getClass().getField("networkManager").get(playerConnection)); if (channel != null) { channel.pipeline().addAfter("decoder", "update_sign", new MessageToMessageDecoder<Object>() { @Override protected void decode(ChannelHandlerContext channelHandlerContext, Object object, List list) throws Exception { if (object.toString().contains("PacketPlayInUpdateSign")) { Object packet = ReflectionUtil.getNMSClass("PacketPlayInUpdateSign").cast(object); Bukkit.getPluginManager().callEvent(new PlayerInputEvent(player, (String[]) packet.getClass().getMethod("b").invoke(packet))); } list.add(object); } }); } } catch (Exception e) { e.printStackTrace(); } }
public static List<Object> callDecode(MessageToMessageDecoder decoder, ChannelHandlerContext ctx, ByteBuf input) throws InvocationTargetException { List<Object> output = new ArrayList<>(); try { BungeePipelineUtil.DECODE_METHOD.invoke(decoder, ctx, input, output); } catch (IllegalAccessException e) { e.printStackTrace(); } return output; }
public static ByteBuf decompress(ChannelHandlerContext ctx, ByteBuf bytebuf) { try { return (ByteBuf) callDecode((MessageToMessageDecoder) ctx.pipeline().get("decompress"), ctx.pipeline().context("decompress"), bytebuf).get(0); } catch (InvocationTargetException e) { e.printStackTrace(); return ctx.alloc().buffer(); } }
public CryptoFunction(byte[] key, MessageToMessageEncoder<ByteBuf> encoder, MessageToMessageDecoder<ByteBuf> decoder) { this.key = key; this.encoder = encoder; this.decoder = decoder; }
public MessageToMessageDecoder<ByteBuf> getDecoder() { return decoder; }