Some fixes
This commit is contained in:
parent
0618777b85
commit
621ad9222b
|
|
@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
@ -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());
|
||||||
|
|
@ -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;
|
||||||
|
|
@ -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;
|
||||||
|
|
@ -1,8 +0,0 @@
|
||||||
package org.adde0109.ambassador.event;
|
|
||||||
|
|
||||||
public class PostSyncEvent {
|
|
||||||
|
|
||||||
PostSyncEvent() {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -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) {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Loading…
Reference in New Issue
Block a user