From 0e91475c624e5b9ee38946a1eb5f5bf808edfe86 Mon Sep 17 00:00:00 2001 From: R-Josef <460257626@qq.com> Date: Sun, 16 Aug 2020 12:45:52 -0500 Subject: [PATCH] Follows specified address/port in remote config for plugin versions: fix #1110 (#1145) * fix #1110 * updating comments in config.yml * Fix indentation * Centralize localhost retrieval; remove unnecessary Docker check * Add config.yml Co-authored-by: DoctorMacc --- .../bungeecord/GeyserBungeePlugin.java | 9 +++---- .../platform/spigot/GeyserSpigotPlugin.java | 9 +++---- .../platform/sponge/GeyserSpongePlugin.java | 6 ++--- .../standalone/GeyserStandaloneBootstrap.java | 3 +++ .../velocity/GeyserVelocityPlugin.java | 9 +++---- .../geysermc/connector/GeyserConnector.java | 15 ++++++++--- .../geysermc/connector/utils/DockerCheck.java | 27 ++----------------- connector/src/main/resources/config.yml | 5 +++- 8 files changed, 32 insertions(+), 51 deletions(-) diff --git a/bootstrap/bungeecord/src/main/java/org/geysermc/platform/bungeecord/GeyserBungeePlugin.java b/bootstrap/bungeecord/src/main/java/org/geysermc/platform/bungeecord/GeyserBungeePlugin.java index 4e3ad5b90..059e1dfd8 100644 --- a/bootstrap/bungeecord/src/main/java/org/geysermc/platform/bungeecord/GeyserBungeePlugin.java +++ b/bootstrap/bungeecord/src/main/java/org/geysermc/platform/bungeecord/GeyserBungeePlugin.java @@ -81,17 +81,14 @@ public class GeyserBungeePlugin extends Plugin implements GeyserBootstrap { InetSocketAddress javaAddr = listener.getHost(); - // Don't change the ip if its listening on all interfaces - // By default this should be 127.0.0.1 but may need to be changed in some circumstances - if (!javaAddr.getHostString().equals("0.0.0.0") && !javaAddr.getHostString().equals("")) { - this.geyserConfig.getRemote().setAddress(javaAddr.getHostString()); + // By default this should be localhost but may need to be changed in some circumstances + if (this.geyserConfig.getRemote().getAddress().equalsIgnoreCase("auto")) { + this.geyserConfig.getRemote().setPort(javaAddr.getPort()); } if (geyserConfig.getBedrock().isCloneRemotePort()) { geyserConfig.getBedrock().setPort(javaAddr.getPort()); } - - this.geyserConfig.getRemote().setPort(javaAddr.getPort()); } this.geyserLogger = new GeyserBungeeLogger(getLogger(), geyserConfig.isDebugMode()); diff --git a/bootstrap/spigot/src/main/java/org/geysermc/platform/spigot/GeyserSpigotPlugin.java b/bootstrap/spigot/src/main/java/org/geysermc/platform/spigot/GeyserSpigotPlugin.java index 759246df3..496681d33 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/platform/spigot/GeyserSpigotPlugin.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/platform/spigot/GeyserSpigotPlugin.java @@ -81,18 +81,15 @@ public class GeyserSpigotPlugin extends JavaPlugin implements GeyserBootstrap { ex.printStackTrace(); } - // Don't change the ip if its listening on all interfaces - // By default this should be 127.0.0.1 but may need to be changed in some circumstances - if (!Bukkit.getIp().equals("0.0.0.0") && !Bukkit.getIp().equals("")) { - geyserConfig.getRemote().setAddress(Bukkit.getIp()); + // By default this should be localhost but may need to be changed in some circumstances + if (this.geyserConfig.getRemote().getAddress().equalsIgnoreCase("auto")) { + geyserConfig.getRemote().setPort(Bukkit.getPort()); } if (geyserConfig.getBedrock().isCloneRemotePort()) { geyserConfig.getBedrock().setPort(Bukkit.getPort()); } - geyserConfig.getRemote().setPort(Bukkit.getPort()); - this.geyserLogger = new GeyserSpigotLogger(getLogger(), geyserConfig.isDebugMode()); GeyserConfiguration.checkGeyserConfiguration(geyserConfig, geyserLogger); diff --git a/bootstrap/sponge/src/main/java/org/geysermc/platform/sponge/GeyserSpongePlugin.java b/bootstrap/sponge/src/main/java/org/geysermc/platform/sponge/GeyserSpongePlugin.java index cfead6fdd..e57e383b2 100644 --- a/bootstrap/sponge/src/main/java/org/geysermc/platform/sponge/GeyserSpongePlugin.java +++ b/bootstrap/sponge/src/main/java/org/geysermc/platform/sponge/GeyserSpongePlugin.java @@ -104,11 +104,9 @@ public class GeyserSpongePlugin implements GeyserBootstrap { // Don't change the ip if its listening on all interfaces // By default this should be 127.0.0.1 but may need to be changed in some circumstances - if (!javaAddr.getHostString().equals("0.0.0.0") && !javaAddr.getHostString().equals("")) { - serverIP.setValue("127.0.0.1"); + if (this.geyserConfig.getRemote().getAddress().equalsIgnoreCase("auto")) { + serverPort.setValue(javaAddr.getPort()); } - - serverPort.setValue(javaAddr.getPort()); } ConfigurationNode bedrockPort = config.getNode("bedrock").getNode("port"); diff --git a/bootstrap/standalone/src/main/java/org/geysermc/platform/standalone/GeyserStandaloneBootstrap.java b/bootstrap/standalone/src/main/java/org/geysermc/platform/standalone/GeyserStandaloneBootstrap.java index e9576b19a..e4b70133f 100644 --- a/bootstrap/standalone/src/main/java/org/geysermc/platform/standalone/GeyserStandaloneBootstrap.java +++ b/bootstrap/standalone/src/main/java/org/geysermc/platform/standalone/GeyserStandaloneBootstrap.java @@ -108,6 +108,9 @@ public class GeyserStandaloneBootstrap implements GeyserBootstrap { try { File configFile = FileUtils.fileOrCopiedFromResource("config.yml", (x) -> x.replaceAll("generateduuid", UUID.randomUUID().toString())); geyserConfig = FileUtils.loadConfig(configFile, GeyserStandaloneConfiguration.class); + if (this.geyserConfig.getRemote().getAddress().equalsIgnoreCase("auto")) { + geyserConfig.getRemote().setAddress("127.0.0.1"); + } } catch (IOException ex) { geyserLogger.severe(LanguageUtils.getLocaleStringLog("geyser.config.failed"), ex); System.exit(0); diff --git a/bootstrap/velocity/src/main/java/org/geysermc/platform/velocity/GeyserVelocityPlugin.java b/bootstrap/velocity/src/main/java/org/geysermc/platform/velocity/GeyserVelocityPlugin.java index 974d4c4c9..6d8032343 100644 --- a/bootstrap/velocity/src/main/java/org/geysermc/platform/velocity/GeyserVelocityPlugin.java +++ b/bootstrap/velocity/src/main/java/org/geysermc/platform/velocity/GeyserVelocityPlugin.java @@ -92,18 +92,15 @@ public class GeyserVelocityPlugin implements GeyserBootstrap { InetSocketAddress javaAddr = proxyServer.getBoundAddress(); - // Don't change the ip if its listening on all interfaces - // By default this should be 127.0.0.1 but may need to be changed in some circumstances - if (!javaAddr.getHostString().equals("0.0.0.0") && !javaAddr.getHostString().equals("")) { - geyserConfig.getRemote().setAddress(javaAddr.getHostString()); + // By default this should be localhost but may need to be changed in some circumstances + if (this.geyserConfig.getRemote().getAddress().equalsIgnoreCase("auto")) { + geyserConfig.getRemote().setPort(javaAddr.getPort()); } if (geyserConfig.getBedrock().isCloneRemotePort()) { geyserConfig.getBedrock().setPort(javaAddr.getPort()); } - geyserConfig.getRemote().setPort(javaAddr.getPort()); - this.geyserLogger = new GeyserVelocityLogger(logger, geyserConfig.isDebugMode()); GeyserConfiguration.checkGeyserConfiguration(geyserConfig, geyserLogger); diff --git a/connector/src/main/java/org/geysermc/connector/GeyserConnector.java b/connector/src/main/java/org/geysermc/connector/GeyserConnector.java index 103faf791..8203a1689 100644 --- a/connector/src/main/java/org/geysermc/connector/GeyserConnector.java +++ b/connector/src/main/java/org/geysermc/connector/GeyserConnector.java @@ -53,13 +53,14 @@ import org.geysermc.connector.network.translators.world.WorldManager; import org.geysermc.connector.network.translators.world.block.BlockTranslator; import org.geysermc.connector.network.translators.world.block.entity.BlockEntityTranslator; import org.geysermc.connector.utils.DimensionUtils; -import org.geysermc.connector.utils.DockerCheck; import org.geysermc.connector.utils.LanguageUtils; import org.geysermc.connector.utils.LocaleUtils; import javax.naming.directory.Attribute; import javax.naming.directory.InitialDirContext; +import java.net.InetAddress; import java.net.InetSocketAddress; +import java.net.UnknownHostException; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.List; @@ -133,8 +134,16 @@ public class GeyserConnector { SoundRegistry.init(); SoundHandlerRegistry.init(); - if (platformType != PlatformType.STANDALONE) { - DockerCheck.check(bootstrap); + if (platformType != PlatformType.STANDALONE && config.getRemote().getAddress().equals("auto")) { + // Set the remote address to localhost since that is where we are always connecting + try { + config.getRemote().setAddress(InetAddress.getLocalHost().getHostAddress()); + } catch (UnknownHostException ex) { + logger.debug("Unknown host when trying to find localhost."); + if (config.isDebugMode()) { + ex.printStackTrace(); + } + } } String remoteAddress = config.getRemote().getAddress(); int remotePort = config.getRemote().getPort(); diff --git a/connector/src/main/java/org/geysermc/connector/utils/DockerCheck.java b/connector/src/main/java/org/geysermc/connector/utils/DockerCheck.java index 74d020bca..59a039887 100644 --- a/connector/src/main/java/org/geysermc/connector/utils/DockerCheck.java +++ b/connector/src/main/java/org/geysermc/connector/utils/DockerCheck.java @@ -25,36 +25,13 @@ package org.geysermc.connector.utils; -import org.geysermc.connector.bootstrap.GeyserBootstrap; - -import java.net.InetAddress; import java.nio.file.Files; import java.nio.file.Paths; public class DockerCheck { - public static void check(GeyserBootstrap bootstrap) { - try { - String OS = System.getProperty("os.name").toLowerCase(); - String ipAddress = InetAddress.getLocalHost().getHostAddress(); - - // Check if the user is already using the recommended IP - if (ipAddress.equals(bootstrap.getGeyserConfig().getRemote().getAddress())) { - return; - } - - if (OS.indexOf("nix") >= 0 || OS.indexOf("nux") >= 0 || OS.indexOf("aix") > 0) { - bootstrap.getGeyserLogger().debug("We are on a Unix system, checking for Docker..."); - - String output = new String(Files.readAllBytes(Paths.get("/proc/1/cgroup"))); - - if (output.contains("docker")) { - bootstrap.getGeyserLogger().warning(LanguageUtils.getLocaleStringLog("geyser.bootstrap.docker_warn.line1")); - bootstrap.getGeyserLogger().warning(LanguageUtils.getLocaleStringLog("geyser.bootstrap.docker_warn.line2", ipAddress)); - } - } - } catch (Exception e) { } // Ignore any errors, inc ip failed to fetch, process could not run or access denied - } + // By default, Geyser now sets the IP to the local IP in all cases on plugin versions so we don't notify the user of anything + // However we still have this check for the potential future bug public static boolean checkBasic() { try { String OS = System.getProperty("os.name").toLowerCase(); diff --git a/connector/src/main/resources/config.yml b/connector/src/main/resources/config.yml index 6ccaa3065..b4d437276 100644 --- a/connector/src/main/resources/config.yml +++ b/connector/src/main/resources/config.yml @@ -22,8 +22,11 @@ bedrock: motd2: "Another GeyserMC forced host." remote: # The IP address of the remote (Java Edition) server - address: 127.0.0.1 + # If it is "auto", for standalone version the remote address will be set to 127.0.0.1, + # for plugin versions, Geyser will attempt to find the best address to connect to. + address: auto # The port of the remote (Java Edition) server + # For plugin versions, if address has been set to "auto", the port will also follow the server's listening port. port: 25565 # Authentication type. Can be offline, online, or floodgate (see https://github.com/GeyserMC/Geyser/wiki/Floodgate). auth-type: online