diff --git a/api/src/main/java/org/geysermc/geyser/api/network/RemoteServer.java b/api/src/main/java/org/geysermc/geyser/api/network/RemoteServer.java index 8ac5d8a03..3e72ccd44 100644 --- a/api/src/main/java/org/geysermc/geyser/api/network/RemoteServer.java +++ b/api/src/main/java/org/geysermc/geyser/api/network/RemoteServer.java @@ -67,4 +67,11 @@ public interface RemoteServer { */ @NonNull AuthType authType(); + + /** + * Gets if we should attempt to resolve the SRV record for this server. + * + * @return if we should attempt to resolve the SRV record for this server + */ + boolean resolveSrv(); } diff --git a/core/src/main/java/org/geysermc/geyser/configuration/GeyserJacksonConfiguration.java b/core/src/main/java/org/geysermc/geyser/configuration/GeyserJacksonConfiguration.java index e096d58fa..64ab09954 100644 --- a/core/src/main/java/org/geysermc/geyser/configuration/GeyserJacksonConfiguration.java +++ b/core/src/main/java/org/geysermc/geyser/configuration/GeyserJacksonConfiguration.java @@ -270,6 +270,11 @@ public abstract class GeyserJacksonConfiguration implements GeyserConfiguration return authType; } + @Override + public boolean resolveSrv() { + return false; + } + @Getter @JsonProperty("allow-password-authentication") private boolean passwordAuthentication = true; diff --git a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java index 7197a4fc4..da91c32b7 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -935,7 +935,15 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { } else { downstream = new TcpClientSession(this.remoteServer.address(), this.remoteServer.port(), this.protocol); this.downstream = new DownstreamSession(downstream); - disableSrvResolving(); + + boolean resolveSrv = false; + try { + resolveSrv = this.remoteServer.resolveSrv(); + } catch (AbstractMethodError | NoSuchMethodError ignored) { + // Ignore if the method doesn't exist + // This will happen with extensions using old APIs + } + this.downstream.getSession().setFlag(BuiltinFlags.ATTEMPT_SRV_RESOLVE, resolveSrv); } if (geyser.getConfig().getRemote().isUseProxyProtocol()) { @@ -1419,13 +1427,6 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { sendDownstreamPacket(swapHandsPacket); } - /** - * Will be overwritten for GeyserConnect. - */ - protected void disableSrvResolving() { - this.downstream.getSession().setFlag(BuiltinFlags.ATTEMPT_SRV_RESOLVE, false); - } - @Override public String name() { return null;