From 094a1facb29123fe04e83059985f764ca5c1d7c1 Mon Sep 17 00:00:00 2001 From: EpicKnarvik97 Date: Tue, 11 Aug 2020 14:03:26 +0200 Subject: [PATCH] Adds support for the travertine and waterfall server proxies --- .../server/ServerTypeHandler.java | 10 +++++ .../server/servertypes/BungeeCord.java | 11 +++-- .../server/servertypes/Travertine.java | 17 +++++++- .../server/servertypes/Waterfall.java | 43 ++++++++++++++++++- src/main/resources/servertypes.csv | 4 +- .../DownloadTests.java | 1 + 6 files changed, 79 insertions(+), 7 deletions(-) diff --git a/src/main/java/net/knarcraft/minecraftserverlauncher/server/ServerTypeHandler.java b/src/main/java/net/knarcraft/minecraftserverlauncher/server/ServerTypeHandler.java index 66816e0..4b7d644 100644 --- a/src/main/java/net/knarcraft/minecraftserverlauncher/server/ServerTypeHandler.java +++ b/src/main/java/net/knarcraft/minecraftserverlauncher/server/ServerTypeHandler.java @@ -9,7 +9,9 @@ import net.knarcraft.minecraftserverlauncher.server.servertypes.ServerType; import net.knarcraft.minecraftserverlauncher.server.servertypes.Snapshot; import net.knarcraft.minecraftserverlauncher.server.servertypes.Spigot; import net.knarcraft.minecraftserverlauncher.server.servertypes.SpongeVanilla; +import net.knarcraft.minecraftserverlauncher.server.servertypes.Travertine; import net.knarcraft.minecraftserverlauncher.server.servertypes.Vanilla; +import net.knarcraft.minecraftserverlauncher.server.servertypes.Waterfall; import javax.naming.ConfigurationException; import java.io.FileNotFoundException; @@ -121,6 +123,14 @@ public class ServerTypeHandler { newType = new BungeeCord("Bungee", serverVersions, serverTypeInfo[2], serverTypeInfo[3], serverTypeInfo[4], serverTypeInfo[5]); break; + case "Travertine": + newType = new Travertine("Travertine", serverVersions, serverTypeInfo[2], serverTypeInfo[3], + serverTypeInfo[4], serverTypeInfo[5]); + break; + case "Waterfall": + newType = new Waterfall("Waterfall", serverVersions, serverTypeInfo[2], serverTypeInfo[3], + serverTypeInfo[4], serverTypeInfo[5]); + break; case "SpongeVanilla": newType = new SpongeVanilla("SpongeVanilla", serverVersions, serverTypeInfo[2], serverTypeInfo[3], serverTypeInfo[4], serverTypeInfo[5], serverTypeInfo[6]); diff --git a/src/main/java/net/knarcraft/minecraftserverlauncher/server/servertypes/BungeeCord.java b/src/main/java/net/knarcraft/minecraftserverlauncher/server/servertypes/BungeeCord.java index 9a908d3..f239f42 100644 --- a/src/main/java/net/knarcraft/minecraftserverlauncher/server/servertypes/BungeeCord.java +++ b/src/main/java/net/knarcraft/minecraftserverlauncher/server/servertypes/BungeeCord.java @@ -16,11 +16,14 @@ public class BungeeCord extends AbstractServerType { private String srcEnd; /** - * Instantiates a new server type + * Instantiates a new BungeeCord server type * - * @param typeName

The typeName of the server type

- * @param versions

A list of one or more server versions for the type

- * @param downloadURL

The URL used for downloading .jar files

+ * @param typeName

The name of the server type

+ * @param versions

The available versions for the server type

+ * @param versionURL

The URL used to finding the newest version

+ * @param srcStart

The string after which the version id starts

+ * @param srcEnd

The string marking the end of the version id

+ * @param downloadURL

The URL used for downloading the latest version

*/ public BungeeCord(String typeName, String[] versions, String versionURL, String srcStart, String srcEnd, String downloadURL) { super(typeName, versions, downloadURL); diff --git a/src/main/java/net/knarcraft/minecraftserverlauncher/server/servertypes/Travertine.java b/src/main/java/net/knarcraft/minecraftserverlauncher/server/servertypes/Travertine.java index 929203b..1b27704 100644 --- a/src/main/java/net/knarcraft/minecraftserverlauncher/server/servertypes/Travertine.java +++ b/src/main/java/net/knarcraft/minecraftserverlauncher/server/servertypes/Travertine.java @@ -1,4 +1,19 @@ package net.knarcraft.minecraftserverlauncher.server.servertypes; -public class Travertine { +public class Travertine extends Waterfall { + + /** + * Instantiates a new Travertine server type + * + * @param typeName

The name of the server type

+ * @param versions

The available versions for the server type

+ * @param versionURL

The URL used to finding the newest version

+ * @param srcStart

The string after which the version id starts

+ * @param srcEnd

The string marking the end of the version id

+ * @param downloadURL

The URL used for downloading the latest version

+ */ + public Travertine(String typeName, String[] versions, String versionURL, String srcStart, String srcEnd, String downloadURL) { + super(typeName, versions, versionURL, srcStart, srcEnd, downloadURL); + } + } diff --git a/src/main/java/net/knarcraft/minecraftserverlauncher/server/servertypes/Waterfall.java b/src/main/java/net/knarcraft/minecraftserverlauncher/server/servertypes/Waterfall.java index 3c05f9d..f974ed2 100644 --- a/src/main/java/net/knarcraft/minecraftserverlauncher/server/servertypes/Waterfall.java +++ b/src/main/java/net/knarcraft/minecraftserverlauncher/server/servertypes/Waterfall.java @@ -1,4 +1,45 @@ package net.knarcraft.minecraftserverlauncher.server.servertypes; -public class Waterfall { +import java.io.File; +import java.io.IOException; +import java.nio.file.Paths; + +import static net.knarcraft.minecraftserverlauncher.utility.CommonFunctions.downloadFile; +import static net.knarcraft.minecraftserverlauncher.utility.CommonFunctions.readFile; +import static net.knarcraft.minecraftserverlauncher.utility.CommonFunctions.stringBetween; + +public class Waterfall extends AbstractServerType { + + private String srcStart; + private String srcEnd; + private String versionURL; + private String lastVersion; + + /** + * Instantiates a new Waterfall server type + * + * @param typeName

The name of the server type

+ * @param versions

The available versions for the server type

+ * @param versionURL

The URL used to finding the newest version

+ * @param srcStart

The string after which the version id starts

+ * @param srcEnd

The string marking the end of the version id

+ * @param downloadURL

The URL used for downloading the latest version

+ */ + public Waterfall(String typeName, String[] versions, String versionURL, String srcStart, String srcEnd, String downloadURL) { + super(typeName, versions, downloadURL); + this.srcStart = srcStart; + this.srcEnd = srcEnd; + this.versionURL = versionURL; + } + + @Override + public boolean downloadJar(String folder, String version) throws IOException { + String file = this.getName() + version + ".jar"; + File filePath = new File(folder + file); + String newestVersion = stringBetween(readFile(versionURL), srcStart, srcEnd); + String oldVersion = lastVersion; + lastVersion = newestVersion; + String fullURL = downloadURL + newestVersion + "/download"; + return (filePath.isFile() && newestVersion.equals(oldVersion)) || downloadFile(fullURL, Paths.get(filePath.toURI())); + } } diff --git a/src/main/resources/servertypes.csv b/src/main/resources/servertypes.csv index 62ab195..535be3b 100644 --- a/src/main/resources/servertypes.csv +++ b/src/main/resources/servertypes.csv @@ -3,7 +3,9 @@ Spigot;1.16.1,1.15.2,1.14.4,1.13.2,1.12.2,1.11.2,1.10.2,1.9.4,1.9.4,1.8.8,1.7.10 MCPCplus;1.6.4,1.6.2,1.5.2,1.4.7;https://static.knarcraft.net/archive/downloads/minecraftserverjars/MCPC+/;mcpcplus Craftbukkit;1.13.2,1.12.2,1.11.2,1.10.2,1.9.4,1.8.8,1.7.10-R0.1,1.6.4-R2.0,1.5.2-R1.0,1.4.6-R0.3,1.3.2-R3.0,1.2.5-R2.0,1.1-R6,1.0.1-R1;https://static.knarcraft.net/archive/downloads/minecraftserverjars/Bukkit/;craftbukkit- Paper;1.16.1,1.15.2,1.14.4,1.13.2,1.12.2,1.11.2,1.10.2,1.9.4,1.8.8;https://static.knarcraft.net/archive/downloads/minecraftserverjars/Paper/;Paper- -Bungee;Latest;https://ci.md-5.net/job/BungeeCord/lastSuccessfulBuild/artifact/bootstrap/target/;Artifacts of BungeeCord #; ;http://ci.md-5.net/job/BungeeCord/lastSuccessfulBuild/artifact/bootstrap/target/BungeeCord.jar; +Bungee;Latest;https://ci.md-5.net/job/BungeeCord/lastSuccessfulBuild/artifact/bootstrap/target/;Artifacts of BungeeCord #; ;http://ci.md-5.net/job/BungeeCord/lastSuccessfulBuild/artifact/bootstrap/target/BungeeCord.jar +Waterfall;Latest;https://papermc.io/api/v1/waterfall/1.16;"latest":";";https://papermc.io/api/v1/waterfall/1.16/ +Travertine;Latest;https://papermc.io/api/v1/travertine/1.16;"latest":";";https://papermc.io/api/v1/travertine/1.16/ Snapshot;Latest;https://launchermeta.mojang.com/mc/game/version_manifest.json;"snapshot":";";https://s3.amazonaws.com/Minecraft.Download/versions/ Vanilla;Latest,1.16.1,1.15.2,1.14.4,1.13.2,1.12.2,1.11.2,1.10.2,1.9.4,1.8.9,1.7.10,1.6.4,1.5.2,1.4.7,1.3.2,1.2.5;https://launchermeta.mojang.com/mc/game/version_manifest.json;"release":";";https://s3.amazonaws.com/Minecraft.Download/versions/ Custom;; \ No newline at end of file diff --git a/src/test/java/net/knarcraft/minecraftserverlauncher/DownloadTests.java b/src/test/java/net/knarcraft/minecraftserverlauncher/DownloadTests.java index d84ca1f..68d0e95 100644 --- a/src/test/java/net/knarcraft/minecraftserverlauncher/DownloadTests.java +++ b/src/test/java/net/knarcraft/minecraftserverlauncher/DownloadTests.java @@ -8,6 +8,7 @@ import java.io.File; import java.io.IOException; public class DownloadTests { + @Test public void downloadJarsTest() throws IOException { String targetDirectory = Main.getApplicationWorkDirectory() + File.separator + "files" + File.separator + "testjars" + File.separator;