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;
}
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();
}

View File

@ -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()));
}
}

View File

@ -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)

View File

@ -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;
}
}

View File

@ -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) {