feat: Improved connectionRequest method

This commit is contained in:
Adrian3d04 2022-08-04 20:01:36 +00:00
parent ae7e61db10
commit 08bfbd7469
6 changed files with 56 additions and 36 deletions

View File

@ -62,11 +62,10 @@ public class ConnectListener {
return; return;
} }
event.getResult().getServer().ifPresent(server -> { // this should be present, "event.getResult().isAllowed()" is the "isPresent" check
if(!api.isAuthServer(server)){ if(!api.isAuthServer(event.getResult().getServer().get())) {
event.setResult(ServerPreConnectEvent.ServerResult.denied()); event.setResult(ServerPreConnectEvent.ServerResult.denied());
} }
});
continuation.resume(); continuation.resume();
} }

View File

@ -15,6 +15,8 @@ import com.glyart.authmevelocity.proxy.event.ProxyUnregisterEvent;
import com.google.common.io.ByteArrayDataInput; import com.google.common.io.ByteArrayDataInput;
import com.velocitypowered.api.event.Continuation; import com.velocitypowered.api.event.Continuation;
import com.velocitypowered.api.event.Subscribe; 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.event.connection.PluginMessageEvent;
import com.velocitypowered.api.proxy.Player; import com.velocitypowered.api.proxy.Player;
import com.velocitypowered.api.proxy.ProxyServer; import com.velocitypowered.api.proxy.ProxyServer;
@ -42,13 +44,13 @@ public class PluginMessageListener {
@Subscribe @Subscribe
public void onPluginMessage(final PluginMessageEvent event, Continuation continuation) { public void onPluginMessage(final PluginMessageEvent event, Continuation continuation) {
if ( final boolean cancelled = !(event.getSource() instanceof ServerConnection)
!(event.getSource() instanceof ServerConnection) || !event.getIdentifier().equals(AuthMeVelocityPlugin.AUTHMEVELOCITY_CHANNEL);
|| !event.getIdentifier().equals(AuthMeVelocityPlugin.AUTHMEVELOCITY_CHANNEL) if (cancelled) {
) {
continuation.resume(); continuation.resume();
return; return;
} }
ServerConnection connection = ((ServerConnection)event.getSource()); ServerConnection connection = ((ServerConnection)event.getSource());
event.setResult(PluginMessageEvent.ForwardResult.handled()); event.setResult(PluginMessageEvent.ForwardResult.handled());
@ -60,6 +62,7 @@ public class PluginMessageListener {
switch (sChannel) { switch (sChannel) {
case "LOGIN" : case "LOGIN" :
if (loggedPlayer != null && api.addPlayer(loggedPlayer)){ if (loggedPlayer != null && api.addPlayer(loggedPlayer)){
proxy.getEventManager().fireAndForget(new ProxyLoginEvent(loggedPlayer));
this.createServerConnectionRequest(loggedPlayer, connection); this.createServerConnectionRequest(loggedPlayer, connection);
} }
break; break;
@ -84,25 +87,38 @@ public class PluginMessageListener {
continuation.resume(); continuation.resume();
} }
private void createServerConnectionRequest(Player loggedPlayer, ServerConnection connection){ private void createServerConnectionRequest(Player player, ServerConnection connection){
final RegisteredServer loginServer = loggedPlayer.getCurrentServer().orElse(connection).getServer(); if (!config.getToServerOptions().sendToServer()) {
proxy.getEventManager().fireAndForget(new ProxyLoginEvent(loggedPlayer)); return;
if (config.getToServerOptions().sendToServer()) { }
final List<String> serverList = config.getToServerOptions().getTeleportServers();
final String randomServer = serverList.get(rm.nextInt(serverList.size())); final RegisteredServer loginServer = player.getCurrentServer().orElse(connection).getServer();
proxy.getServer(randomServer).ifPresentOrElse(serverToSend -> final String randomServer = this.getRandomServer();
proxy.getEventManager().fire(new PreSendOnLoginEvent(loggedPlayer, loginServer, serverToSend)).thenAcceptAsync(preSendEvent -> {
if(preSendEvent.getResult().isAllowed()){ proxy.getServer(randomServer).ifPresentOrElse(server ->
loggedPlayer.createConnectionRequest(serverToSend).connect().thenAcceptAsync(result -> { proxy.getEventManager().fire(new PreSendOnLoginEvent(player, loginServer, server))
if(!result.isSuccessful()) { .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 {}", logger.info("Unable to connect the player {} to the server {}",
loggedPlayer.getUsername(), player.getUsername(),
serverToSend.getServerInfo().getName()); server.getServerInfo().getName());
} }
}); });
}
}) })
, () -> logger.warn("The server {} does not exist", randomServer)); , () -> 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()));
} }
} }

View File

@ -21,7 +21,7 @@ final class AuthmePlaceholders {
: FALSE_COMPONENT) : FALSE_COMPONENT)
) )
.globalPlaceholder("is_player_logged", (queue, ctx) -> { .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); Player player = Bukkit.getPlayer(playerName);
if(player == null) return Tag.selfClosingInserting(FALSE_COMPONENT); if(player == null) return Tag.selfClosingInserting(FALSE_COMPONENT);
return Tag.selfClosingInserting(AuthMeApi.getInstance().isAuthenticated(player) return Tag.selfClosingInserting(AuthMeApi.getInstance().isAuthenticated(player)

View File

@ -1,5 +1,6 @@
package com.glyart.authmevelocity.spigot.events; package com.glyart.authmevelocity.spigot.events;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable; import org.bukkit.event.Cancellable;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
@ -11,7 +12,7 @@ public class PreSendLoginEvent extends PlayerEvent implements Cancellable {
private boolean isCancelled = false; private boolean isCancelled = false;
public PreSendLoginEvent(@NotNull Player player) { public PreSendLoginEvent(@NotNull Player player) {
super(player); super(player, !Bukkit.isPrimaryThread());
} }
@Override @Override
@ -28,4 +29,8 @@ public class PreSendLoginEvent extends PlayerEvent implements Cancellable {
public @NotNull HandlerList getHandlers() { public @NotNull HandlerList getHandlers() {
return HANDLERS; return HANDLERS;
} }
public static HandlerList getHandlerList() {
return HANDLERS;
}
} }

View File

@ -15,7 +15,7 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
public class AuthMeListener implements Listener { public final class AuthMeListener implements Listener {
private final AuthMeVelocityPlugin plugin; private final AuthMeVelocityPlugin plugin;
public AuthMeListener(AuthMeVelocityPlugin plugin) { public AuthMeListener(AuthMeVelocityPlugin plugin) {