diff --git a/src/main/java/org/adde0109/ambassador/Ambassador.java b/src/main/java/org/adde0109/ambassador/Ambassador.java index 4f99f34..9dbad48 100644 --- a/src/main/java/org/adde0109/ambassador/Ambassador.java +++ b/src/main/java/org/adde0109/ambassador/Ambassador.java @@ -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(); + } } diff --git a/src/main/java/org/adde0109/ambassador/AmbassadorConfig.java b/src/main/java/org/adde0109/ambassador/AmbassadorConfig.java index 2b50c3b..ae97fab 100644 --- a/src/main/java/org/adde0109/ambassador/AmbassadorConfig.java +++ b/src/main/java/org/adde0109/ambassador/AmbassadorConfig.java @@ -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); } diff --git a/src/main/java/org/adde0109/ambassador/ForgeConnection.java b/src/main/java/org/adde0109/ambassador/Forge/ForgeConnection.java similarity index 98% rename from src/main/java/org/adde0109/ambassador/ForgeConnection.java rename to src/main/java/org/adde0109/ambassador/Forge/ForgeConnection.java index 4010f14..25dfbe3 100644 --- a/src/main/java/org/adde0109/ambassador/ForgeConnection.java +++ b/src/main/java/org/adde0109/ambassador/Forge/ForgeConnection.java @@ -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; diff --git a/src/main/java/org/adde0109/ambassador/ForgeHandshakeHandler.java b/src/main/java/org/adde0109/ambassador/Forge/ForgeHandshakeHandler.java similarity index 78% rename from src/main/java/org/adde0109/ambassador/ForgeHandshakeHandler.java rename to src/main/java/org/adde0109/ambassador/Forge/ForgeHandshakeHandler.java index 774e9f4..8f7fd24 100644 --- a/src/main/java/org/adde0109/ambassador/ForgeHandshakeHandler.java +++ b/src/main/java/org/adde0109/ambassador/Forge/ForgeHandshakeHandler.java @@ -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 incomingForgeConnections = new HashMap(); - 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()); diff --git a/src/main/java/org/adde0109/ambassador/ForgeHandshakeUtils.java b/src/main/java/org/adde0109/ambassador/Forge/ForgeHandshakeUtils.java similarity index 99% rename from src/main/java/org/adde0109/ambassador/ForgeHandshakeUtils.java rename to src/main/java/org/adde0109/ambassador/Forge/ForgeHandshakeUtils.java index 954b55a..e32e125 100644 --- a/src/main/java/org/adde0109/ambassador/ForgeHandshakeUtils.java +++ b/src/main/java/org/adde0109/ambassador/Forge/ForgeHandshakeUtils.java @@ -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; diff --git a/src/main/java/org/adde0109/ambassador/ForgeServerConnection.java b/src/main/java/org/adde0109/ambassador/Forge/ForgeServerConnection.java similarity index 98% rename from src/main/java/org/adde0109/ambassador/ForgeServerConnection.java rename to src/main/java/org/adde0109/ambassador/Forge/ForgeServerConnection.java index 8c8333e..1ea98b6 100644 --- a/src/main/java/org/adde0109/ambassador/ForgeServerConnection.java +++ b/src/main/java/org/adde0109/ambassador/Forge/ForgeServerConnection.java @@ -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; diff --git a/src/main/java/org/adde0109/ambassador/event/PostSyncEvent.java b/src/main/java/org/adde0109/ambassador/event/PostSyncEvent.java deleted file mode 100644 index 9d476cc..0000000 --- a/src/main/java/org/adde0109/ambassador/event/PostSyncEvent.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.adde0109.ambassador.event; - -public class PostSyncEvent { - - PostSyncEvent() { - - } -} diff --git a/src/main/java/org/adde0109/ambassador/event/PreSyncEvent.java b/src/main/java/org/adde0109/ambassador/event/PreSyncEvent.java deleted file mode 100644 index 3454875..0000000 --- a/src/main/java/org/adde0109/ambassador/event/PreSyncEvent.java +++ /dev/null @@ -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 { - - 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) { - - } -}