@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 ); } }
BungeeCord bungee = new BungeeCord(); ProxyServer.setInstance( bungee ); bungee.getLogger().info( "Enabled BungeeCord version " + bungee.getVersion() ); bungee.start(); while ( bungee.isRunning && ( line = bungee.getConsoleReader().readLine( ">" ) ) != null ) if ( !bungee.getPluginManager().dispatchCommand( ConsoleCommandSender.getInstance(), line ) ) bungee.getConsole().sendMessage( new ComponentBuilder( "Command not found" ).color( ChatColor.RED ).create() );
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 execute(CommandSender sender, String[] args) { if ( args.length == 0 ) { BungeeCord.getInstance().stop(); } else { BungeeCord.getInstance().stop( Joiner.on( ' ' ).join( args ) ); } } }
@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." ); } }
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 ); }
UUID uuid = DefinedPacket.readUUID( packet ); ProxiedPlayer player; if ( ( player = BungeeCord.getInstance().getPlayerByOfflineUUID( uuid ) ) != null )
public void verbose(String msg) { if (level <= VERBOSE) { if (TabooLib.isSpigot()) { Bukkit.getConsoleSender().sendMessage(Strings.replaceWithOrder(pattern, name, "§f全部", TLocale.Translate.setColored(msg))); } else { BungeeCord.getInstance().getConsole().sendMessage(TextComponent.fromLegacyText(Strings.replaceWithOrder(pattern, name, "§f全部", TLocale.Translate.setColored(msg)))); } } }
@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(); }
disconnect( bungee.getTranslation( "name_invalid" ) ); return; disconnect( bungee.getTranslation( "name_too_long" ) ); return; int limit = BungeeCord.getInstance().config.getPlayerLimit(); if ( limit > 0 && bungee.getOnlineCount() > limit ) disconnect( bungee.getTranslation( "proxy_full" ) ); return; if ( !isOnlineMode() && bungee.getPlayer( getUniqueId() ) != null ) disconnect( bungee.getTranslation( "already_connected_proxy" ) ); return; bungee.getPluginManager().callEvent( new PreLoginEvent( InitialHandler.this, callback ) );
if ( bungee.getConfig().isLogPings() ) bungee.getLogger().log( Level.INFO, "{0} has connected", this ); bungee.getPluginManager().callEvent( new PlayerHandshakeEvent( InitialHandler.this, handshake ) ); case 2: if ( !bungee.getConfig().isLogPings() ) bungee.getLogger().log( Level.INFO, "{0} has connected", this ); if ( handshake.getProtocolVersion() > bungee.getProtocolVersion() ) disconnect( bungee.getTranslation( "outdated_server", bungee.getGameVersion() ) ); } else disconnect( bungee.getTranslation( "outdated_client", bungee.getGameVersion() ) );
@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 ); } } };
bungee.getPluginManager().callEvent( new PlayerHandshakeEvent( InitialHandler.this, handshake ) ); if (BungeeCord.getInstance().getConfig().isLogServerListPing()) { bungee.getLogger().log( Level.INFO, "{0} is pinging", this ); break; case 2: bungee.getLogger().log( Level.INFO, "{0} has connected", this ); disconnect( bungee.getTranslation( "outdated_server" ) ); return; if ( bungee.getJoinThrottle() != null && bungee.getJoinThrottle().throttle( getAddress().getAddress() ) ) BungeeCord.getInstance().getLogger().log(Level.INFO, "{0} was join-throttled", getAddress().getHostString()); disconnect( bungee.getTranslation( "join_throttle_kick", TimeUnit.MILLISECONDS.toSeconds( bungee.getConfig().getThrottle() ) ) );
} else int protocol = ( ProtocolConstants.SUPPORTED_VERSION_IDS.contains( handshake.getProtocolVersion() ) ) ? handshake.getProtocolVersion() : bungee.getProtocolVersion(); pingBack.done( new ServerPing( new ServerPing.Protocol( bungee.getName() + " " + bungee.getGameVersion(), protocol ), new ServerPing.Players( listener.getMaxPlayers(), bungee.getOnlineCount(), null ), motd, BungeeCord.getInstance().config.getFaviconObject() ), null );
final boolean v1_5 = ping.isV1_5(); ServerPing legacy = new ServerPing( new ServerPing.Protocol( bungee.getName() + " " + bungee.getGameVersion(), bungee.getProtocolVersion() ), new ServerPing.Players( listener.getMaxPlayers(), bungee.getOnlineCount(), null ), new TextComponent( TextComponent.fromLegacyText( listener.getMotd() ) ), (Favicon) null ); bungee.getPluginManager().callEvent( new ProxyPingEvent( this, legacy, callback ) );
@Override public void onDisconnect() { PlayerListItem packet = new PlayerListItem(); packet.setAction( PlayerListItem.Action.REMOVE_PLAYER ); PlayerListItem.Item item = new PlayerListItem.Item(); item.setUuid( player.getUniqueId() ); item.setUsername( player.getName() ); packet.setItems( new PlayerListItem.Item[] { item } ); BungeeCord.getInstance().broadcast( packet ); } }
@Override public void broadcast(BaseComponent message) { getConsole().sendMessage( message.toLegacyText() ); broadcast( new Chat( ComponentSerializer.toString( message ) ) ); }
@Override public void done(ServerPing result, Throwable error) { if ( error != null ) { result = new ServerPing(); result.setDescription( bungee.getTranslation( "ping_cannot_connect" ) ); bungee.getLogger().log( Level.WARNING, "Error pinging remote server", error ); } Callback<ProxyPingEvent> callback = new Callback<ProxyPingEvent>() { @Override public void done(ProxyPingEvent pingResult, Throwable error) { Gson gson = BungeeCord.getInstance().gson; unsafe.sendPacket( new StatusResponse( gson.toJson( pingResult.getResponse() ) ) ); if ( bungee.getConnectionThrottle() != null ) { bungee.getConnectionThrottle().unthrottle( getAddress().getAddress() ); } } }; bungee.getPluginManager().callEvent( new ProxyPingEvent( InitialHandler.this, result, callback ) ); } };
bungee.getPluginManager().callEvent( event ); con.getTabListHandler().onDisconnect(); BungeeCord.getInstance().removeConnection( con );
public void run() stopListeners(); getLogger().info( "Closing pending connections" ); getLogger().log( Level.INFO, "Disconnecting {0} connections", connections.size() ); for ( UserConnection user : connections.values() ) getLogger().info( "Saving reconnect locations" ); reconnectHandler.save(); reconnectHandler.close(); getLogger().info( "Disabling plugins" ); for ( Plugin plugin : Lists.reverse( new ArrayList<>( pluginManager.getPlugins() ) ) ) getLogger().log( Level.SEVERE, "Exception disabling plugin " + plugin.getDescription().getName(), t ); getScheduler().cancel( plugin ); plugin.getExecutorService().shutdownNow(); getLogger().info( "Closing IO threads" ); eventLoops.shutdownGracefully(); try getLogger().info( "Thank you and goodbye" ); for ( Handler handler : getLogger().getHandlers() )