@Override public void chat(String message) { Preconditions.checkState( server != null, "Not connected to server" ); server.getCh().write( new Chat( message ) ); }
@Override public void exception(Throwable t) throws Exception { if ( server.isObsolete() ) { // do not perform any actions if the user has already moved return; } ServerInfo def = con.updateAndGetNextServer( server.getInfo() ); if ( def != null ) { server.setObsolete( true ); con.connectNow( def, ServerConnectEvent.Reason.SERVER_DOWN_REDIRECT ); con.sendMessage( bungee.getTranslation( "server_went_down" ) ); } else { con.disconnect( Util.exception( t ) ); } }
public void disconnect0(final BaseComponent... reason) { if ( !ch.isClosing() ) { bungee.getLogger().log( Level.INFO, "[{0}] disconnected with: {1}", new Object[] { getName(), BaseComponent.toLegacyText( reason ) } ); ch.delayedClose( new Kick( ComponentSerializer.toString( reason ) ) ); if ( server != null ) { server.setObsolete( true ); server.disconnect( "Quitting" ); } } }
@Override public void disconnected(ChannelWrapper channel) throws Exception { // We lost connection to the server server.getInfo().removePlayer( con ); if ( bungee.getReconnectHandler() != null ) { bungee.getReconnectHandler().setServer( con ); } if ( !server.isObsolete() ) { con.disconnect( bungee.getTranslation( "lost_connection" ) ); } ServerDisconnectEvent serverDisconnectEvent = new ServerDisconnectEvent( con, server.getInfo() ); bungee.getPluginManager().callEvent( serverDisconnectEvent ); }
ServerConnection server = new ServerConnection( ch, target ); ServerConnectedEvent event = new ServerConnectedEvent( user, server ); bungee.getPluginManager().callEvent( event ); } else user.getServer().setObsolete( true ); user.getTabListHandler().onServerChange(); user.getServer().disconnect( "Quitting" ); server.disconnect( "Quitting" );
for ( ProxiedPlayer player : con.getServer().getInfo().getPlayers() ) con.getServer().setObsolete(true); con.getServer().disconnect( "Quitting" );
@Override public InetSocketAddress getAddress() { return getInfo().getAddress(); }
@Override public void handle(Kick kick) throws Exception { ServerInfo def = con.updateAndGetNextServer( server.getInfo() ); ServerKickEvent event = bungee.getPluginManager().callEvent( new ServerKickEvent( con, server.getInfo(), ComponentSerializer.parse( kick.getMessage() ), def, ServerKickEvent.State.CONNECTED ) ); if ( event.isCancelled() && event.getCancelServer() != null ) { con.connectNow( event.getCancelServer(), ServerConnectEvent.Reason.KICK_REDIRECT ); } else { con.disconnect0( event.getKickReasonComponent() ); // TODO: Prefix our own stuff. } server.setObsolete( true ); throw CancelSendSignal.INSTANCE; }
@Override public boolean shouldHandle(PacketWrapper packet) throws Exception { return !server.isObsolete(); }
for ( ProxiedPlayer player : con.getServer().getInfo().getPlayers() ) con.getServer().disconnect( "Quitting" );
@Override public void disconnect(String reason) { disconnect(); }
@Override public void sendData(String channel, byte[] data) { unsafe().sendPacket( new PluginMessage( channel, data, forgeServer ) ); }
@Override public void handle(LoginSuccess loginSuccess) throws Exception { Preconditions.checkState( thisState == State.LOGIN_SUCCESS, "Not expecting LOGIN_SUCCESS" ); ch.setProtocol( Protocol.GAME ); thisState = State.LOGIN; // Only reset the Forge client when: // 1) The user is switching servers (so has a current server) // 2) The handshake is complete // 3) The user is currently on a modded server (if we are on a vanilla server, // we may be heading for another vanilla server, so we don't need to reset.) // // user.getServer() gets the user's CURRENT server, not the one we are trying // to connect to. // // We will reset the connection later if the current server is vanilla, and // we need to switch to a modded connection. However, we always need to reset the // connection when we have a modded server regardless of where we go - doing it // here makes sense. if ( user.getServer() != null && user.getForgeClientHandler().isHandshakeComplete() && user.getServer().isForgeServer() ) { user.getForgeClientHandler().resetHandshake(); } throw CancelSendSignal.INSTANCE; }
ServerConnection server = new ServerConnection( ch, target ); ServerConnectedEvent event = new ServerConnectedEvent( user, server ); user.getServer().setObsolete( true ); user.getTabListHandler().onServerChange(); user.getServer().disconnect( "Quitting" ); server.disconnect( "Quitting" );
@Override public void disconnected(ChannelWrapper channel) throws Exception { // We lost connection to the server server.getInfo().removePlayer( con ); if ( bungee.getReconnectHandler() != null ) { bungee.getReconnectHandler().setServer( con ); } if ( !server.isObsolete() ) { con.disconnect( bungee.getTranslation( "lost_connection" ) ); } ServerDisconnectEvent serverDisconnectEvent = new ServerDisconnectEvent( con, server.getInfo() ); bungee.getPluginManager().callEvent( serverDisconnectEvent ); }
@Override public String toString() { return "[" + con.getName() + "] <-> DownstreamBridge <-> [" + server.getInfo().getName() + "]"; } }
@Override public void handle(Kick kick) throws Exception { ServerInfo def = bungee.getServerInfo( con.getPendingConnection().getListener().getFallbackServer() ); if ( Objects.equal( server.getInfo(), def ) ) { def = null; } ServerKickEvent event = bungee.getPluginManager().callEvent( new ServerKickEvent( con, server.getInfo(), ComponentSerializer.parse( kick.getMessage() ), def, ServerKickEvent.State.CONNECTED ) ); if ( event.isCancelled() && event.getCancelServer() != null ) { con.connectNow( event.getCancelServer() ); } else { con.disconnect0( event.getKickReasonComponent() ); // TODO: Prefix our own stuff. } server.setObsolete( true ); throw CancelSendSignal.INSTANCE; }
@Override public boolean shouldHandle(PacketWrapper packet) throws Exception { return !server.isObsolete(); }