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