From d9217b2eba7b9c82242840bdb6ef28b081d3b8fa Mon Sep 17 00:00:00 2001 From: Doc Date: Wed, 9 Nov 2022 19:27:47 +1100 Subject: [PATCH] BUILDTOOLS-639: Replace static s3 url with Mojang API to download legacy vanilla server jars --- .../java/org/spigotmc/builder/Builder.java | 32 ++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/spigotmc/builder/Builder.java b/src/main/java/org/spigotmc/builder/Builder.java index e6c5e91..8884214 100644 --- a/src/main/java/org/spigotmc/builder/Builder.java +++ b/src/main/java/org/spigotmc/builder/Builder.java @@ -12,6 +12,9 @@ import com.google.common.io.CharStreams; import com.google.common.io.Files; import com.google.common.io.Resources; import com.google.gson.Gson; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; import difflib.DiffUtils; import difflib.Patch; import java.awt.Desktop; @@ -413,7 +416,7 @@ public class Builder download( versionInfo.getServerUrl(), vanillaJar, HashFormat.MD5, versionInfo.getMinecraftHash() ); } else { - download( String.format( "https://s3.amazonaws.com/Minecraft.Download/versions/%1$s/minecraft_server.%1$s.jar", versionInfo.getMinecraftVersion() ), vanillaJar, HashFormat.MD5, versionInfo.getMinecraftHash() ); + download( getServerVanillaUrl( versionInfo.getMinecraftVersion() ), vanillaJar, HashFormat.MD5, versionInfo.getMinecraftHash() ); } } @@ -1095,6 +1098,33 @@ public class Builder return target; } + public static String getServerVanillaUrl(String version) throws Exception + { + Gson gson = new Gson(); + + String responseManifest = get( "https://launchermeta.mojang.com/mc/game/version_manifest.json" ); + JsonObject manifest = gson.fromJson( responseManifest, JsonObject.class ); + + JsonArray manifestVersions = manifest.getAsJsonArray( "versions" ); + for ( JsonElement manifestVersionElement : manifestVersions ) + { + if ( manifestVersionElement.isJsonObject() ) + { + JsonObject manifestVersion = manifestVersionElement.getAsJsonObject(); + if ( manifestVersion.get( "id" ).getAsString().equals( version ) ) + { + String urlVersionData = manifestVersion.get( "url" ).getAsString(); + + String responseVersionData = get( urlVersionData ); + JsonObject versionData = gson.fromJson( responseVersionData, JsonObject.class ); + return versionData.getAsJsonObject( "downloads" ).getAsJsonObject( "server" ).get( "url" ).getAsString(); + } + } + } + + throw new RuntimeException( "Error cannot get the URL for legacy server version " + version ); + } + public static void disableHttpsCertificateCheck() { // This globally disables certificate checking