@Override public void execute(CommandSender sender, String[] args) { if ( args.length == 0 ) { BungeeCord.getInstance().stop(); } else { BungeeCord.getInstance().stop( Joiner.on( ' ' ).join( args ) ); } } }
@Override @SuppressFBWarnings("UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR") public void handle(StatusResponse statusResponse) throws Exception { Gson gson = BungeeCord.getInstance().gson; callback.done( gson.fromJson( statusResponse.getResponse(), ServerPing.class ), null ); channel.close(); }
@Override public void execute(CommandSender sender, String[] args) { BungeeCord.getInstance().config.load(); BungeeCord.getInstance().reloadMessages(); BungeeCord.getInstance().stopListeners(); BungeeCord.getInstance().startListeners(); BungeeCord.getInstance().getPluginManager().callEvent( new ProxyReloadEvent( sender ) ); sender.sendMessage( ChatColor.BOLD.toString() + ChatColor.RED.toString() + "BungeeCord has been reloaded." + " This is NOT advisable and you will not be supported with any issues that arise! Please restart BungeeCord ASAP." ); } }
public void ping(final Callback<ServerPing> callback, final int protocolVersion) { Preconditions.checkNotNull( callback, "callback" ); ChannelFutureListener listener = new ChannelFutureListener() { @Override public void operationComplete(ChannelFuture future) throws Exception { if ( future.isSuccess() ) { future.channel().pipeline().get( HandlerBoss.class ).setHandler( new PingHandler( BungeeServerInfo.this, callback, protocolVersion ) ); } else { callback.done( null, future.cause() ); } } }; new Bootstrap() .channel( PipelineUtils.getChannel() ) .group( BungeeCord.getInstance().eventLoops ) .handler( PipelineUtils.BASE ) .option( ChannelOption.CONNECT_TIMEOUT_MILLIS, 5000 ) // TODO: Configurable .remoteAddress( getAddress() ) .connect() .addListener( listener ); } }
static void logServer(LogDirection direction, String stateName, PluginMessage message) { String dir = direction == LogDirection.SENDING ? "Server -> Bungee" : "Server <- Bungee"; String log = "[" + stateName + " " + dir + "][" + direction.name() + ": " + getNameFromDiscriminator( message.getTag(), message ) + "]"; BungeeCord.getInstance().getLogger().log( Level.FINE, log ); }
static void logClient(LogDirection direction, String stateName, PluginMessage message) { String dir = direction == LogDirection.SENDING ? "Client -> Bungee" : "Client <- Bungee"; String log = "[" + stateName + " " + dir + "][" + direction.name() + ": " + getNameFromDiscriminator( message.getTag(), message ) + "]"; BungeeCord.getInstance().getLogger().log( Level.FINE, log ); }
@Override public void rewriteServerbound(ByteBuf packet, int oldId, int newId) { super.rewriteServerbound( packet, oldId, newId ); // Special cases int readerIndex = packet.readerIndex(); int packetId = DefinedPacket.readVarInt( packet ); int packetIdLength = packet.readerIndex() - readerIndex; if ( packetId == 0x1B /* Spectate : PacketPlayInSpectate */ && !BungeeCord.getInstance().getConfig().isIpForward() ) { UUID uuid = DefinedPacket.readUUID( packet ); ProxiedPlayer player; if ( ( player = BungeeCord.getInstance().getPlayer( uuid ) ) != null ) { int previous = packet.writerIndex(); packet.readerIndex( readerIndex ); packet.writerIndex( readerIndex + packetIdLength ); DefinedPacket.writeUUID( ( (UserConnection) player ).getPendingConnection().getOfflineId(), packet ); packet.writerIndex( previous ); } } packet.readerIndex( readerIndex ); } }
@Override public void rewriteServerbound(ByteBuf packet, int oldId, int newId) { super.rewriteServerbound( packet, oldId, newId ); // Special cases int readerIndex = packet.readerIndex(); int packetId = DefinedPacket.readVarInt( packet ); int packetIdLength = packet.readerIndex() - readerIndex; if ( packetId == 0x1B /* Spectate : PacketPlayInSpectate */ && !BungeeCord.getInstance().getConfig().isIpForward() ) { UUID uuid = DefinedPacket.readUUID( packet ); ProxiedPlayer player; if ( ( player = BungeeCord.getInstance().getPlayer( uuid ) ) != null ) { int previous = packet.writerIndex(); packet.readerIndex( readerIndex ); packet.writerIndex( readerIndex + packetIdLength ); DefinedPacket.writeUUID( ( (UserConnection) player ).getPendingConnection().getOfflineId(), packet ); packet.writerIndex( previous ); } } packet.readerIndex( readerIndex ); } }
@Override public void rewriteServerbound(ByteBuf packet, int oldId, int newId) { super.rewriteServerbound( packet, oldId, newId ); // Special cases int readerIndex = packet.readerIndex(); int packetId = DefinedPacket.readVarInt( packet ); int packetIdLength = packet.readerIndex() - readerIndex; if ( packetId == 0x1E /* Spectate : PacketPlayInSpectate */ && !BungeeCord.getInstance().getConfig().isIpForward() ) { UUID uuid = DefinedPacket.readUUID( packet ); ProxiedPlayer player; if ( ( player = BungeeCord.getInstance().getPlayer( uuid ) ) != null ) { int previous = packet.writerIndex(); packet.readerIndex( readerIndex ); packet.writerIndex( readerIndex + packetIdLength ); DefinedPacket.writeUUID( ( (UserConnection) player ).getPendingConnection().getOfflineId(), packet ); packet.writerIndex( previous ); } } packet.readerIndex( readerIndex ); } }
@Override public void rewriteServerbound(ByteBuf packet, int oldId, int newId) { super.rewriteServerbound( packet, oldId, newId ); // Special cases int readerIndex = packet.readerIndex(); int packetId = DefinedPacket.readVarInt( packet ); int packetIdLength = packet.readerIndex() - readerIndex; if ( packetId == 0x1B /* Spectate : PacketPlayInSpectate */ && !BungeeCord.getInstance().getConfig().isIpForward() ) { UUID uuid = DefinedPacket.readUUID( packet ); ProxiedPlayer player; if ( ( player = BungeeCord.getInstance().getPlayer( uuid ) ) != null ) { int previous = packet.writerIndex(); packet.readerIndex( readerIndex ); packet.writerIndex( readerIndex + packetIdLength ); DefinedPacket.writeUUID( ( (UserConnection) player ).getPendingConnection().getOfflineId(), packet ); packet.writerIndex( previous ); } } packet.readerIndex( readerIndex ); } }
@Override public void rewriteServerbound(ByteBuf packet, int oldId, int newId) { super.rewriteServerbound( packet, oldId, newId ); // Special cases int readerIndex = packet.readerIndex(); int packetId = DefinedPacket.readVarInt( packet ); int packetIdLength = packet.readerIndex() - readerIndex; if ( packetId == 0x1E /* Spectate : PacketPlayInSpectate */ && !BungeeCord.getInstance().getConfig().isIpForward() ) { UUID uuid = DefinedPacket.readUUID( packet ); ProxiedPlayer player; if ( ( player = BungeeCord.getInstance().getPlayer( uuid ) ) != null ) { int previous = packet.writerIndex(); packet.readerIndex( readerIndex ); packet.writerIndex( readerIndex + packetIdLength ); DefinedPacket.writeUUID( ( (UserConnection) player ).getPendingConnection().getOfflineId(), packet ); packet.writerIndex( previous ); } } packet.readerIndex( readerIndex ); } }
@Override public void rewriteServerbound(ByteBuf packet, int oldId, int newId) { super.rewriteServerbound( packet, oldId, newId ); //Special cases int readerIndex = packet.readerIndex(); int packetId = DefinedPacket.readVarInt( packet ); int packetIdLength = packet.readerIndex() - readerIndex; if ( packetId == 0x18 /* Spectate */ && !BungeeCord.getInstance().getConfig().isIpForward() ) { UUID uuid = DefinedPacket.readUUID( packet ); ProxiedPlayer player; if ( ( player = BungeeCord.getInstance().getPlayer( uuid ) ) != null ) { int previous = packet.writerIndex(); packet.readerIndex( readerIndex ); packet.writerIndex( readerIndex + packetIdLength ); DefinedPacket.writeUUID( ( (UserConnection) player ).getPendingConnection().getOfflineId(), packet ); packet.writerIndex( previous ); } } packet.readerIndex( readerIndex ); } }
@Override public void rewriteServerbound(ByteBuf packet, int oldId, int newId) { super.rewriteServerbound( packet, oldId, newId ); // Special cases int readerIndex = packet.readerIndex(); int packetId = DefinedPacket.readVarInt( packet ); int packetIdLength = packet.readerIndex() - readerIndex; if ( packetId == 0x28 /* Spectate : PacketPlayInSpectate */ && !BungeeCord.getInstance().getConfig().isIpForward() ) { UUID uuid = DefinedPacket.readUUID( packet ); ProxiedPlayer player; if ( ( player = BungeeCord.getInstance().getPlayer( uuid ) ) != null ) { int previous = packet.writerIndex(); packet.readerIndex( readerIndex ); packet.writerIndex( readerIndex + packetIdLength ); DefinedPacket.writeUUID( ( (UserConnection) player ).getPendingConnection().getOfflineId(), packet ); packet.writerIndex( previous ); } } packet.readerIndex( readerIndex ); } }
@Override public void rewriteServerbound(ByteBuf packet, int oldId, int newId) { super.rewriteServerbound( packet, oldId, newId ); // Special cases int readerIndex = packet.readerIndex(); int packetId = DefinedPacket.readVarInt( packet ); int packetIdLength = packet.readerIndex() - readerIndex; if ( packetId == 0x1B /* Spectate : PacketPlayInSpectate */ && !BungeeCord.getInstance().getConfig().isIpForward() ) { UUID uuid = DefinedPacket.readUUID( packet ); ProxiedPlayer player; if ( ( player = BungeeCord.getInstance().getPlayer( uuid ) ) != null ) { int previous = packet.writerIndex(); packet.readerIndex( readerIndex ); packet.writerIndex( readerIndex + packetIdLength ); DefinedPacket.writeUUID( ( (UserConnection) player ).getPendingConnection().getOfflineId(), packet ); packet.writerIndex( previous ); } } packet.readerIndex( readerIndex ); } }
@Override public void initChannel(Channel ch) throws Exception { try { ch.config().setOption( ChannelOption.IP_TOS, 0x18 ); } catch ( ChannelException ex ) { // IP_TOS is not supported (Windows XP / Windows Server 2003) } ch.config().setAllocator( PooledByteBufAllocator.DEFAULT ); ch.config().setWriteBufferWaterMark( MARK ); ch.pipeline().addLast( TIMEOUT_HANDLER, new ReadTimeoutHandler( BungeeCord.getInstance().config.getTimeout(), TimeUnit.MILLISECONDS ) ); ch.pipeline().addLast( FRAME_DECODER, new Varint21FrameDecoder() ); ch.pipeline().addLast( FRAME_PREPENDER, framePrepender ); ch.pipeline().addLast( BOSS_HANDLER, new HandlerBoss() ); } }
@Override protected void initChannel(Channel ch) throws Exception { if ( BungeeCord.getInstance().getConnectionThrottle() != null && BungeeCord.getInstance().getConnectionThrottle().throttle( ( (InetSocketAddress) ch.remoteAddress() ).getAddress() ) ) { ch.close(); return; } ListenerInfo listener = ch.attr( LISTENER ).get(); BASE.initChannel( ch ); ch.pipeline().addBefore( FRAME_DECODER, LEGACY_DECODER, new LegacyDecoder() ); ch.pipeline().addAfter( FRAME_DECODER, PACKET_DECODER, new MinecraftDecoder( Protocol.HANDSHAKE, true, ProxyServer.getInstance().getProtocolVersion() ) ); ch.pipeline().addAfter( FRAME_PREPENDER, PACKET_ENCODER, new MinecraftEncoder( Protocol.HANDSHAKE, true, ProxyServer.getInstance().getProtocolVersion() ) ); ch.pipeline().addBefore( FRAME_PREPENDER, LEGACY_KICKER, legacyKicker ); ch.pipeline().get( HandlerBoss.class ).setHandler( new InitialHandler( BungeeCord.getInstance(), listener ) ); if ( listener.isProxyProtocol() ) { ch.pipeline().addFirst( new HAProxyMessageDecoder() ); } } };
public UpstreamBridge(ProxyServer bungee, UserConnection con) { this.bungee = bungee; this.con = con; BungeeCord.getInstance().addConnection( con ); con.getTabListHandler().onConnect(); con.unsafe().sendPacket( BungeeCord.getInstance().registerChannels( con.getPendingConnection().getVersion() ) ); }
@Override public void done(String result, Throwable error) { if ( error == null ) { LoginResult obj = BungeeCord.getInstance().gson.fromJson( result, LoginResult.class ); if ( obj != null && obj.getId() != null ) { loginProfile = obj; name = obj.getName(); uniqueId = Util.getUUID( obj.getId() ); finish(); return; } disconnect( bungee.getTranslation( "offline_mode_player" ) ); } else { disconnect( bungee.getTranslation( "mojang_fail" ) ); bungee.getLogger().log( Level.SEVERE, "Error authenticating " + getName() + " with minecraft.net", error ); } } };
@Override public void handle(Commands commands) throws Exception { boolean modified = false; if ( BungeeCord.getInstance().config.isInjectCommands() ) { for ( Map.Entry<String, Command> command : bungee.getPluginManager().getCommands() ) { if ( !bungee.getDisabledCommands().contains( command.getKey() ) && commands.getRoot().getChild( command.getKey() ) == null && command.getValue().hasPermission( con ) ) { LiteralCommandNode dummy = LiteralArgumentBuilder.literal( command.getKey() ) .then( RequiredArgumentBuilder.argument( "args", StringArgumentType.greedyString() ) .suggests( Commands.SuggestionRegistry.ASK_SERVER ) ) .build(); commands.getRoot().addChild( dummy ); modified = true; } } } if ( modified ) { con.unsafe().sendPacket( commands ); throw CancelSendSignal.INSTANCE; } }
@Override public void connected(ChannelWrapper channel) throws Exception { this.ch = channel; this.handshakeHandler = new ForgeServerHandler( user, ch, target ); Handshake originalHandshake = user.getPendingConnection().getHandshake(); Handshake copiedHandshake = new Handshake( originalHandshake.getProtocolVersion(), originalHandshake.getHost(), originalHandshake.getPort(), 2 ); if ( BungeeCord.getInstance().config.isIpForward() ) { String newHost = copiedHandshake.getHost() + "\00" + user.getAddress().getHostString() + "\00" + user.getUUID(); LoginResult profile = user.getPendingConnection().getLoginProfile(); if ( profile != null && profile.getProperties() != null && profile.getProperties().length > 0 ) { newHost += "\00" + BungeeCord.getInstance().gson.toJson( profile.getProperties() ); } copiedHandshake.setHost( newHost ); } else if ( !user.getExtraDataInHandshake().isEmpty() ) { // Only restore the extra data if IP forwarding is off. // TODO: Add support for this data with IP forwarding. copiedHandshake.setHost( copiedHandshake.getHost() + user.getExtraDataInHandshake() ); } channel.write( copiedHandshake ); channel.setProtocol( Protocol.LOGIN ); channel.write( new LoginRequest( user.getName() ) ); }