diff --git a/API/api/src/main/java/tc/oc/api/docs/virtual/ServerDoc.java b/API/api/src/main/java/tc/oc/api/docs/virtual/ServerDoc.java index 840dc6c..ea604d8 100644 --- a/API/api/src/main/java/tc/oc/api/docs/virtual/ServerDoc.java +++ b/API/api/src/main/java/tc/oc/api/docs/virtual/ServerDoc.java @@ -50,7 +50,8 @@ public interface ServerDoc { } @Serialize - interface CurrentPort extends Partial { + interface Ip extends Partial { + String ip(); Integer current_port(); } @@ -95,7 +96,7 @@ public interface ServerDoc { * Startup info sent to the API */ @Serialize - interface Startup extends Online, CurrentPort { + interface Startup extends Online, Ip { @Nullable DeployInfo deploy_info(); Map plugin_versions(); Set protocol_versions(); diff --git a/API/minecraft/src/main/java/tc/oc/api/minecraft/servers/StartupServerDocument.java b/API/minecraft/src/main/java/tc/oc/api/minecraft/servers/StartupServerDocument.java index d6cff41..d1b1903 100644 --- a/API/minecraft/src/main/java/tc/oc/api/minecraft/servers/StartupServerDocument.java +++ b/API/minecraft/src/main/java/tc/oc/api/minecraft/servers/StartupServerDocument.java @@ -1,9 +1,14 @@ package tc.oc.api.minecraft.servers; +import java.io.BufferedReader; import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.URL; import java.nio.file.Path; import java.util.Map; import java.util.Set; +import java.util.logging.Level; import java.util.logging.Logger; import javax.annotation.Nullable; import javax.inject.Inject; @@ -51,10 +56,25 @@ public class StartupServerDocument implements ServerDoc.Startup { } }); + private final Lazy ip = Lazy.from(() -> { + try { + URL url = new URL("http://checkip.amazonaws.com"); + return new BufferedReader(new InputStreamReader(url.openStream())).readLine(); + } catch(IOException e) { + logger.log(Level.SEVERE, "Unable to find external ip", e); + return minecraftServer.getAddress().getHostName(); + } + }); + @Override public boolean online() { return true; } + @Override + public String ip() { + return ip.get(); + } + @Override public Integer current_port() { return minecraftServer.getAddress().getPort(); }