feat: Improved connectionRequest method
This commit is contained in:
parent
ae7e61db10
commit
08bfbd7469
@ -62,11 +62,10 @@ public class ConnectListener {
|
||||
return;
|
||||
}
|
||||
|
||||
event.getResult().getServer().ifPresent(server -> {
|
||||
if(!api.isAuthServer(server)){
|
||||
// this should be present, "event.getResult().isAllowed()" is the "isPresent" check
|
||||
if(!api.isAuthServer(event.getResult().getServer().get())) {
|
||||
event.setResult(ServerPreConnectEvent.ServerResult.denied());
|
||||
}
|
||||
});
|
||||
continuation.resume();
|
||||
}
|
||||
|
||||
|
@ -15,6 +15,8 @@ import com.glyart.authmevelocity.proxy.event.ProxyUnregisterEvent;
|
||||
import com.google.common.io.ByteArrayDataInput;
|
||||
import com.velocitypowered.api.event.Continuation;
|
||||
import com.velocitypowered.api.event.Subscribe;
|
||||
import com.velocitypowered.api.event.ResultedEvent.GenericResult;
|
||||
import com.velocitypowered.api.proxy.ConnectionRequestBuilder.Result;
|
||||
import com.velocitypowered.api.event.connection.PluginMessageEvent;
|
||||
import com.velocitypowered.api.proxy.Player;
|
||||
import com.velocitypowered.api.proxy.ProxyServer;
|
||||
@ -42,13 +44,13 @@ public class PluginMessageListener {
|
||||
|
||||
@Subscribe
|
||||
public void onPluginMessage(final PluginMessageEvent event, Continuation continuation) {
|
||||
if (
|
||||
!(event.getSource() instanceof ServerConnection)
|
||||
|| !event.getIdentifier().equals(AuthMeVelocityPlugin.AUTHMEVELOCITY_CHANNEL)
|
||||
) {
|
||||
final boolean cancelled = !(event.getSource() instanceof ServerConnection)
|
||||
|| !event.getIdentifier().equals(AuthMeVelocityPlugin.AUTHMEVELOCITY_CHANNEL);
|
||||
if (cancelled) {
|
||||
continuation.resume();
|
||||
return;
|
||||
}
|
||||
|
||||
ServerConnection connection = ((ServerConnection)event.getSource());
|
||||
|
||||
event.setResult(PluginMessageEvent.ForwardResult.handled());
|
||||
@ -60,6 +62,7 @@ public class PluginMessageListener {
|
||||
switch (sChannel) {
|
||||
case "LOGIN" :
|
||||
if (loggedPlayer != null && api.addPlayer(loggedPlayer)){
|
||||
proxy.getEventManager().fireAndForget(new ProxyLoginEvent(loggedPlayer));
|
||||
this.createServerConnectionRequest(loggedPlayer, connection);
|
||||
}
|
||||
break;
|
||||
@ -84,25 +87,38 @@ public class PluginMessageListener {
|
||||
continuation.resume();
|
||||
}
|
||||
|
||||
private void createServerConnectionRequest(Player loggedPlayer, ServerConnection connection){
|
||||
final RegisteredServer loginServer = loggedPlayer.getCurrentServer().orElse(connection).getServer();
|
||||
proxy.getEventManager().fireAndForget(new ProxyLoginEvent(loggedPlayer));
|
||||
if (config.getToServerOptions().sendToServer()) {
|
||||
final List<String> serverList = config.getToServerOptions().getTeleportServers();
|
||||
final String randomServer = serverList.get(rm.nextInt(serverList.size()));
|
||||
proxy.getServer(randomServer).ifPresentOrElse(serverToSend ->
|
||||
proxy.getEventManager().fire(new PreSendOnLoginEvent(loggedPlayer, loginServer, serverToSend)).thenAcceptAsync(preSendEvent -> {
|
||||
if(preSendEvent.getResult().isAllowed()){
|
||||
loggedPlayer.createConnectionRequest(serverToSend).connect().thenAcceptAsync(result -> {
|
||||
if(!result.isSuccessful()) {
|
||||
private void createServerConnectionRequest(Player player, ServerConnection connection){
|
||||
if (!config.getToServerOptions().sendToServer()) {
|
||||
return;
|
||||
}
|
||||
|
||||
final RegisteredServer loginServer = player.getCurrentServer().orElse(connection).getServer();
|
||||
final String randomServer = this.getRandomServer();
|
||||
|
||||
proxy.getServer(randomServer).ifPresentOrElse(server ->
|
||||
proxy.getEventManager().fire(new PreSendOnLoginEvent(player, loginServer, server))
|
||||
.thenApply(PreSendOnLoginEvent::getResult)
|
||||
.thenApply(GenericResult::isAllowed)
|
||||
.thenAcceptAsync(allowed -> {
|
||||
if (!allowed) {
|
||||
return;
|
||||
}
|
||||
player.createConnectionRequest(server)
|
||||
.connect()
|
||||
.thenApply(Result::isSuccessful)
|
||||
.thenAcceptAsync(result -> {
|
||||
if(!result) {
|
||||
logger.info("Unable to connect the player {} to the server {}",
|
||||
loggedPlayer.getUsername(),
|
||||
serverToSend.getServerInfo().getName());
|
||||
player.getUsername(),
|
||||
server.getServerInfo().getName());
|
||||
}
|
||||
});
|
||||
}
|
||||
})
|
||||
, () -> logger.warn("The server {} does not exist", randomServer));
|
||||
}
|
||||
|
||||
private String getRandomServer() {
|
||||
final List<String> serverList = config.getToServerOptions().getTeleportServers();
|
||||
return serverList.get(rm.nextInt(serverList.size()));
|
||||
}
|
||||
}
|
||||
|
@ -21,7 +21,7 @@ final class AuthmePlaceholders {
|
||||
: FALSE_COMPONENT)
|
||||
)
|
||||
.globalPlaceholder("is_player_logged", (queue, ctx) -> {
|
||||
String playerName = queue.popOr(() -> "you need to provide a player name").value();
|
||||
String playerName = queue.popOr("you need to provide a player name").value();
|
||||
Player player = Bukkit.getPlayer(playerName);
|
||||
if(player == null) return Tag.selfClosingInserting(FALSE_COMPONENT);
|
||||
return Tag.selfClosingInserting(AuthMeApi.getInstance().isAuthenticated(player)
|
||||
|
@ -1,5 +1,6 @@
|
||||
package com.glyart.authmevelocity.spigot.events;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.Cancellable;
|
||||
import org.bukkit.event.HandlerList;
|
||||
@ -11,7 +12,7 @@ public class PreSendLoginEvent extends PlayerEvent implements Cancellable {
|
||||
private boolean isCancelled = false;
|
||||
|
||||
public PreSendLoginEvent(@NotNull Player player) {
|
||||
super(player);
|
||||
super(player, !Bukkit.isPrimaryThread());
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -28,4 +29,8 @@ public class PreSendLoginEvent extends PlayerEvent implements Cancellable {
|
||||
public @NotNull HandlerList getHandlers() {
|
||||
return HANDLERS;
|
||||
}
|
||||
|
||||
public static HandlerList getHandlerList() {
|
||||
return HANDLERS;
|
||||
}
|
||||
}
|
||||
|
@ -15,7 +15,7 @@ import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.EventPriority;
|
||||
import org.bukkit.event.Listener;
|
||||
|
||||
public class AuthMeListener implements Listener {
|
||||
public final class AuthMeListener implements Listener {
|
||||
private final AuthMeVelocityPlugin plugin;
|
||||
|
||||
public AuthMeListener(AuthMeVelocityPlugin plugin) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user