#3628: Convert PostLoginEvent to AsyncEvent and expose target server

This commit is contained in:
ignPurple 2024-04-13 17:08:15 +10:00 committed by md_5
parent d6c5197cb9
commit 17e23d5c3f
No known key found for this signature in database
GPG Key ID: E8E901AC7C617C11
2 changed files with 36 additions and 15 deletions

View File

@ -3,8 +3,9 @@ package net.md_5.bungee.api.event;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import net.md_5.bungee.api.Callback;
import net.md_5.bungee.api.config.ServerInfo;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.api.plugin.Event;
/**
* Event called as soon as a connection has a {@link ProxiedPlayer} and is ready
@ -13,11 +14,22 @@ import net.md_5.bungee.api.plugin.Event;
@Data
@ToString(callSuper = false)
@EqualsAndHashCode(callSuper = false)
public class PostLoginEvent extends Event
public class PostLoginEvent extends AsyncEvent<PostLoginEvent>
{
/**
* The player involved with this event.
*/
private final ProxiedPlayer player;
/**
* The server to which the player will initially be connected.
*/
private ServerInfo target;
public PostLoginEvent(ProxiedPlayer player, ServerInfo target, Callback<PostLoginEvent> done)
{
super( done );
this.player = player;
this.target = target;
}
}

View File

@ -652,28 +652,37 @@ public class InitialHandler extends PacketHandler implements PendingConnection
}
ch.getHandle().pipeline().get( HandlerBoss.class ).setHandler( new UpstreamBridge( bungee, userCon ) );
bungee.getPluginManager().callEvent( new PostLoginEvent( userCon ) );
// #3612: Don't progress further if disconnected during event
if ( ch.isClosed() )
{
return;
}
ServerInfo server;
ServerInfo initialServer;
if ( bungee.getReconnectHandler() != null )
{
server = bungee.getReconnectHandler().getServer( userCon );
initialServer = bungee.getReconnectHandler().getServer( userCon );
} else
{
server = AbstractReconnectHandler.getForcedHost( InitialHandler.this );
initialServer = AbstractReconnectHandler.getForcedHost( InitialHandler.this );
}
if ( server == null )
if ( initialServer == null )
{
server = bungee.getServerInfo( listener.getDefaultServer() );
initialServer = bungee.getServerInfo( listener.getDefaultServer() );
}
userCon.connect( server, null, true, ServerConnectEvent.Reason.JOIN_PROXY );
Callback<PostLoginEvent> complete = new Callback<PostLoginEvent>()
{
@Override
public void done(PostLoginEvent result, Throwable error)
{
// #3612: Don't progress further if disconnected during event
if ( ch.isClosed() )
{
return;
}
userCon.connect( result.getTarget(), null, true, ServerConnectEvent.Reason.JOIN_PROXY );
}
};
// fire post-login event
bungee.getPluginManager().callEvent( new PostLoginEvent( userCon, initialServer, complete ) );
}
@Override