Some fixes

This commit is contained in:
Adrian Bergqvist 2022-06-26 00:05:15 +02:00
parent 0618777b85
commit 621ad9222b
No known key found for this signature in database
GPG Key ID: FAE7D8EDE225E686
8 changed files with 29 additions and 58 deletions

View File

@ -1,13 +1,18 @@
package org.adde0109.ambassador; package org.adde0109.ambassador;
import com.google.inject.Inject; import com.google.inject.Inject;
import com.velocitypowered.api.event.Continuation;
import com.velocitypowered.api.event.Subscribe; import com.velocitypowered.api.event.Subscribe;
import com.velocitypowered.api.event.player.ServerPreConnectEvent;
import com.velocitypowered.api.event.proxy.ProxyInitializeEvent; import com.velocitypowered.api.event.proxy.ProxyInitializeEvent;
import com.velocitypowered.api.plugin.Plugin; import com.velocitypowered.api.plugin.Plugin;
import com.velocitypowered.api.plugin.annotation.DataDirectory; import com.velocitypowered.api.plugin.annotation.DataDirectory;
import com.velocitypowered.api.proxy.ProxyServer; import com.velocitypowered.api.proxy.ProxyServer;
import com.velocitypowered.api.proxy.server.RegisteredServer; import com.velocitypowered.api.proxy.server.RegisteredServer;
import org.adde0109.ambassador.Forge.ForgeConnection;
import org.adde0109.ambassador.Forge.ForgeHandshakeHandler;
import org.checkerframework.checker.index.qual.PolyUpperBound;
import org.slf4j.Logger; import org.slf4j.Logger;
import java.nio.file.Path; import java.nio.file.Path;
@ -45,7 +50,13 @@ public class Ambassador {
} }
@Subscribe
public void onServerPreConnectEvent(ServerPreConnectEvent event, Continuation continuation) {
ForgeConnection forgeConnection = forgeHandshakeHandler.getForgeConnection(event.getPlayer());
if (forgeConnection != null) {
}
continuation.resume();
}
} }

View File

@ -111,7 +111,7 @@ public class AmbassadorConfig {
if (config != null) { if (config != null) {
String serverName = config.getOrElse("forge-server", ""); String serverName = config.getOrElse("forge-server", "");
if (!Objects.equals(serverName, "")) if (!Objects.equals(serverName, ""))
this.handshakeServer = server.getServer(serverName) handshakeServer = server.getServer(serverName)
.orElseThrow(() -> new Exception(serverName + "is not a registered server!")); .orElseThrow(() -> new Exception(serverName + "is not a registered server!"));
this.forced = config.getOrElse("forced",forced); this.forced = config.getOrElse("forced",forced);
} }

View File

@ -1,4 +1,4 @@
package org.adde0109.ambassador; package org.adde0109.ambassador.Forge;
import com.velocitypowered.api.event.Continuation; import com.velocitypowered.api.event.Continuation;
import com.velocitypowered.api.proxy.LoginPhaseConnection; import com.velocitypowered.api.proxy.LoginPhaseConnection;

View File

@ -1,16 +1,17 @@
package org.adde0109.ambassador; package org.adde0109.ambassador.Forge;
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.connection.PreLoginEvent; import com.velocitypowered.api.event.connection.PreLoginEvent;
import com.velocitypowered.api.event.player.ServerLoginPluginMessageEvent; import com.velocitypowered.api.event.player.ServerLoginPluginMessageEvent;
import com.velocitypowered.api.proxy.LoginPhaseConnection; import com.velocitypowered.api.proxy.LoginPhaseConnection;
import com.velocitypowered.api.proxy.Player;
import com.velocitypowered.api.proxy.ProxyServer; import com.velocitypowered.api.proxy.ProxyServer;
import com.velocitypowered.api.proxy.server.RegisteredServer; import com.velocitypowered.api.proxy.server.RegisteredServer;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import org.adde0109.ambassador.event.PreSyncEvent; import org.adde0109.ambassador.AmbassadorConfig;
import org.slf4j.Logger; import org.slf4j.Logger;
public class ForgeHandshakeHandler { public class ForgeHandshakeHandler {
@ -24,7 +25,7 @@ public class ForgeHandshakeHandler {
public Map<InetSocketAddress,ForgeConnection> incomingForgeConnections = new HashMap<InetSocketAddress,ForgeConnection>(); public Map<InetSocketAddress,ForgeConnection> incomingForgeConnections = new HashMap<InetSocketAddress,ForgeConnection>();
ForgeHandshakeHandler(AmbassadorConfig config, ProxyServer server, Logger logger) { public ForgeHandshakeHandler(AmbassadorConfig config, ProxyServer server, Logger logger) {
this.config = config; this.config = config;
this.server = server; this.server = server;
this.logger = logger; this.logger = logger;
@ -38,36 +39,35 @@ public class ForgeHandshakeHandler {
} }
RegisteredServer defaultServer = config.getServer(event.getConnection().getProtocolVersion().getProtocol()); RegisteredServer defaultServer = config.getServer(event.getConnection().getProtocolVersion().getProtocol());
this.server.getEventManager().fire(new PreSyncEvent(event.getUsername(),event.getConnection(), defaultServer)) if (defaultServer == null) {
.thenAccept((e) -> { continuation.resume();
if (e.getResult().getServer().isEmpty()) {
//Do not sync
return; return;
} }
RegisteredServer newServer = e.getResult().getServer().get();
//If a connection does not already exist, create one. //If a connection does not already exist, create one.
if (!forgeServerConnectionMap.containsKey(newServer)) { if (!forgeServerConnectionMap.containsKey(defaultServer)) {
forgeServerConnectionMap.put(newServer, new ForgeServerConnection(newServer,logger)); forgeServerConnectionMap.put(defaultServer, new ForgeServerConnection(defaultServer,logger));
} }
ForgeServerConnection forgeServerConnection = forgeServerConnectionMap.get(newServer); ForgeServerConnection forgeServerConnection = forgeServerConnectionMap.get(defaultServer);
//Syncing - continuation is forwarded to this method //Syncing - continuation is forwarded to this method
ForgeConnection.sync((LoginPhaseConnection) event.getConnection(),forgeServerConnection,continuation).thenAccept( ForgeConnection.sync((LoginPhaseConnection) event.getConnection(),forgeServerConnection,continuation).thenAccept(
this::onSyncComplete); this::onSyncComplete);
});
} }
public void onSyncComplete(ForgeConnection forgeConnection) { private void onSyncComplete(ForgeConnection forgeConnection) {
if (forgeConnection != null) { if (forgeConnection != null) {
incomingForgeConnections.values().removeIf((c) -> !c.getConnection().isActive()); incomingForgeConnections.values().removeIf((c) -> !c.getConnection().isActive());
incomingForgeConnections.put(forgeConnection.getConnection().getRemoteAddress(), forgeConnection); incomingForgeConnections.put(forgeConnection.getConnection().getRemoteAddress(), forgeConnection);
} }
} }
public ForgeConnection getForgeConnection(Player player) {
return getForgeConnection(player.getRemoteAddress());
}
private ForgeConnection getForgeConnection(InetSocketAddress socketAddress) { private ForgeConnection getForgeConnection(InetSocketAddress socketAddress) {
incomingForgeConnections.values().removeIf((c) -> !c.getConnection().isActive()); incomingForgeConnections.values().removeIf((c) -> !c.getConnection().isActive());

View File

@ -1,4 +1,4 @@
package org.adde0109.ambassador; package org.adde0109.ambassador.Forge;
import com.google.common.io.ByteArrayDataInput; import com.google.common.io.ByteArrayDataInput;
import com.velocitypowered.api.proxy.server.RegisteredServer; import com.velocitypowered.api.proxy.server.RegisteredServer;

View File

@ -1,4 +1,4 @@
package org.adde0109.ambassador; package org.adde0109.ambassador.Forge;
import com.google.common.io.ByteArrayDataInput; import com.google.common.io.ByteArrayDataInput;
import com.velocitypowered.api.event.Continuation; import com.velocitypowered.api.event.Continuation;

View File

@ -1,8 +0,0 @@
package org.adde0109.ambassador.event;
public class PostSyncEvent {
PostSyncEvent() {
}
}

View File

@ -1,32 +0,0 @@
package org.adde0109.ambassador.event;
import com.velocitypowered.api.event.ResultedEvent;
import com.velocitypowered.api.event.player.ServerPreConnectEvent;
import com.velocitypowered.api.proxy.InboundConnection;
import com.velocitypowered.api.proxy.server.RegisteredServer;
public class PreSyncEvent implements ResultedEvent<ServerPreConnectEvent.ServerResult> {
private final String username;
private final InboundConnection connection;
private final RegisteredServer originalServer;
private ServerPreConnectEvent.ServerResult result;
public PreSyncEvent(String username, InboundConnection connection,
RegisteredServer originalServer) {
this.username = username;
this.connection = connection;
this.originalServer = originalServer;
this.result = ServerPreConnectEvent.ServerResult.allowed(originalServer);
}
@Override
public ServerPreConnectEvent.ServerResult getResult() {
return result;
}
@Override
public void setResult(ServerPreConnectEvent.ServerResult result) {
}
}