feat: Improved connectionRequest method
This commit is contained in:
parent
ae7e61db10
commit
08bfbd7469
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user