Adds the SpongeForge server type

This commit is contained in:
Kristian Knarvik 2020-08-19 11:24:05 +02:00
parent d06cf4114a
commit 2008ec8fd1
6 changed files with 83 additions and 24 deletions

View File

@ -1,16 +1,6 @@
package net.knarcraft.minecraftserverlauncher.server; package net.knarcraft.minecraftserverlauncher.server;
import net.knarcraft.minecraftserverlauncher.server.servertypes.BungeeCord; import net.knarcraft.minecraftserverlauncher.server.servertypes.*;
import net.knarcraft.minecraftserverlauncher.server.servertypes.CraftBukkit;
import net.knarcraft.minecraftserverlauncher.server.servertypes.Custom;
import net.knarcraft.minecraftserverlauncher.server.servertypes.MCPCPlus;
import net.knarcraft.minecraftserverlauncher.server.servertypes.Paper;
import net.knarcraft.minecraftserverlauncher.server.servertypes.ServerType;
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 javax.naming.ConfigurationException;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
@ -146,6 +136,10 @@ public class ServerTypeHandler {
newType = new SpongeVanilla("SpongeVanilla", false, serverVersions, newType = new SpongeVanilla("SpongeVanilla", false, serverVersions,
serverTypeInfo[2], serverTypeInfo[3], serverTypeInfo[4], serverTypeInfo[5], serverTypeInfo[6]); serverTypeInfo[2], serverTypeInfo[3], serverTypeInfo[4], serverTypeInfo[5], serverTypeInfo[6]);
break; break;
case "SpongeForge":
newType = new SpongeForge("SpongeForge", false, serverVersions,
serverTypeInfo[2], serverTypeInfo[3], serverTypeInfo[4], serverTypeInfo[5], serverTypeInfo[6]);
break;
case "Custom": case "Custom":
newType = new Custom("Custom"); newType = new Custom("Custom");
break; break;

View File

@ -20,12 +20,14 @@ public class ServerVersionContainer {
private String waterfallVersion; private String waterfallVersion;
private String travertineVersion; private String travertineVersion;
private Map<String, String> spongeVanillaVersions; private Map<String, String> spongeVanillaVersions;
private Map<String, String> spongeForgeVersions;
/** /**
* Initializes a new server version container * Initializes a new server version container
*/ */
private ServerVersionContainer() { private ServerVersionContainer() {
spongeVanillaVersions = new HashMap<>(); spongeVanillaVersions = new HashMap<>();
spongeForgeVersions = new HashMap<>();
loadState(); loadState();
} }
@ -51,6 +53,7 @@ public class ServerVersionContainer {
this.waterfallVersion = null; this.waterfallVersion = null;
this.travertineVersion = null; this.travertineVersion = null;
this.spongeVanillaVersions = new HashMap<>(); this.spongeVanillaVersions = new HashMap<>();
this.spongeForgeVersions = new HashMap<>();
} }
@Override @Override
@ -60,8 +63,8 @@ public class ServerVersionContainer {
"bungeeVersion;" + bungeeVersion + "\n" + "bungeeVersion;" + bungeeVersion + "\n" +
"waterfallVersion;" + waterfallVersion + "\n" + "waterfallVersion;" + waterfallVersion + "\n" +
"travertineVersion;" + travertineVersion + "\n" + "travertineVersion;" + travertineVersion + "\n" +
"spongeVanillaVersions;" + "spongeVanillaVersions;" + mapToString(spongeVanillaVersions) + "\n" +
mapToString(spongeVanillaVersions); "spongeForgeVersions;" + mapToString(spongeForgeVersions);
} }
/** /**
@ -92,10 +95,8 @@ public class ServerVersionContainer {
PrintWriter file; PrintWriter file;
try { try {
if (!saveFile.exists()) { if (!saveFile.exists()) {
if (!saveFile.getParentFile().exists()) { if (!saveFile.getParentFile().exists() && !saveFile.getParentFile().mkdirs()) {
if (!saveFile.getParentFile().mkdirs()) { throw new FileNotFoundException("Unable to create folder for version file");
throw new FileNotFoundException("Unable to create folder for version file");
}
} }
if (!saveFile.createNewFile()) { if (!saveFile.createNewFile()) {
throw new FileNotFoundException("Unable to create version file"); throw new FileNotFoundException("Unable to create version file");
@ -157,7 +158,10 @@ public class ServerVersionContainer {
travertineVersion = variableValue; travertineVersion = variableValue;
break; break;
case "spongeVanillaVersions": case "spongeVanillaVersions":
parseSpongeVanillaVersions(variableValue); parseSpongeVersions(spongeVanillaVersions, variableValue);
break;
case "spongeForgeVersions":
parseSpongeVersions(spongeForgeVersions, variableValue);
break; break;
default: default:
throw new IllegalArgumentException("Invalid key encountered in the server version file."); throw new IllegalArgumentException("Invalid key encountered in the server version file.");
@ -165,15 +169,16 @@ public class ServerVersionContainer {
} }
/** /**
* Reads spongeVanilla versions from a text string and updates the version map * Reads sponge versions from a text string and updates the version map
* *
* @param targetMap <p>The map to update</p>
* @param data <p>The data string to parse</p> * @param data <p>The data string to parse</p>
*/ */
private void parseSpongeVanillaVersions(String data) { private void parseSpongeVersions(Map<String,String> targetMap, String data) {
String[] versions = data.split(","); String[] versions = data.split(",");
for (String version : versions) { for (String version : versions) {
String[] versionData = version.split("!"); String[] versionData = version.split("!");
spongeVanillaVersions.put(versionData[0], versionData[1]); targetMap.put(versionData[0], versionData[1]);
} }
} }
@ -294,5 +299,25 @@ public class ServerVersionContainer {
saveState(); saveState();
} }
/**
* Gets a specific sponge forge version
*
* @param versionKey <p>The version to check current version of</p>
* @return <p>The current sponge forge version</p>
*/
public String getSpongeForgeVersion(String versionKey) {
return spongeForgeVersions.get(versionKey);
}
/**
* Sets the current version for a given sponge forge version
*
* @param mapKey <p>The version key to set version for</p>
* @param newValue <p>The new current version</p>
*/
public void setSpongeForgeVersion(String mapKey, String newValue) {
spongeForgeVersions.put(mapKey, newValue);
saveState();
}
} }

View File

@ -0,0 +1,26 @@
package net.knarcraft.minecraftserverlauncher.server.servertypes;
/**
* This class represents the SpongeForge Minecraft server type
*/
public class SpongeForge extends SpongeVanilla {
/**
* Instantiates a new SpongeForge server type
*
* @param typeName <p>The name of this server type</p>
* @param isProxy <p>Whether this server type is a proxy server</p>
* @param versions <p>Available versions for this server type</p>
* @param versionURL <p>The URL used for downloading the version document</p>
* @param srcStart <p>The string to search for to determine newest version</p>
* @param srcEnd <p>The string marking the end of the newest version statement</p>
* @param downloadURL <p>The URL used for downloading the new file</p>
* @param downloadURLPart <p>A string used after the download url as an additional part of the URL</p>
*/
public SpongeForge(String typeName, boolean isProxy, String[] versions, String versionURL, String srcStart, String srcEnd, String downloadURL, String downloadURLPart) {
super(typeName, isProxy, versions, versionURL, srcStart, srcEnd, downloadURL, downloadURLPart);
this.oldVersionFunction = serverVersionContainer::getSpongeForgeVersion;
this.versionUpdateFunction = serverVersionContainer::setSpongeForgeVersion;
}
}

View File

@ -6,6 +6,9 @@ import net.knarcraft.minecraftserverlauncher.utility.CommonFunctions;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Paths; import java.nio.file.Paths;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import java.util.function.Function;
import static net.knarcraft.minecraftserverlauncher.utility.CommonFunctions.downloadFile; import static net.knarcraft.minecraftserverlauncher.utility.CommonFunctions.downloadFile;
@ -18,6 +21,9 @@ public class SpongeVanilla extends AbstractServerType {
private final String srcStart; private final String srcStart;
private final String srcEnd; private final String srcEnd;
private final String downloadURLPart; private final String downloadURLPart;
Function<String,String> oldVersionFunction;
BiConsumer<String,String> versionUpdateFunction;
final ServerVersionContainer serverVersionContainer;
/** /**
* Instantiates a new SpongeVanilla server type * Instantiates a new SpongeVanilla server type
@ -34,15 +40,17 @@ public class SpongeVanilla extends AbstractServerType {
public SpongeVanilla(String typeName, boolean isProxy, String[] versions, String versionURL, String srcStart, String srcEnd, public SpongeVanilla(String typeName, boolean isProxy, String[] versions, String versionURL, String srcStart, String srcEnd,
String downloadURL, String downloadURLPart) { String downloadURL, String downloadURLPart) {
super(typeName, isProxy, versions, downloadURL); super(typeName, isProxy, versions, downloadURL);
this.serverVersionContainer = ServerVersionContainer.getInstance();
this.versionURL = versionURL; this.versionURL = versionURL;
this.srcStart = srcStart; this.srcStart = srcStart;
this.srcEnd = srcEnd; this.srcEnd = srcEnd;
this.downloadURLPart = downloadURLPart; this.downloadURLPart = downloadURLPart;
this.oldVersionFunction = serverVersionContainer::getSpongeVanillaVersion;
this.versionUpdateFunction = serverVersionContainer::setSpongeVanillaVersion;
} }
@Override @Override
public boolean downloadJar(String folder, String version) throws IOException { public boolean downloadJar(String folder, String version) throws IOException {
ServerVersionContainer versionContainer = ServerVersionContainer.getInstance();
String file = this.getName() + version + ".jar"; String file = this.getName() + version + ".jar";
File filePath = new File(folder + file); File filePath = new File(folder + file);
@ -51,7 +59,7 @@ public class SpongeVanilla extends AbstractServerType {
String jarURL = downloadURL + newestVersion + downloadURLPart + newestVersion + ".jar"; String jarURL = downloadURL + newestVersion + downloadURLPart + newestVersion + ".jar";
String oldVersion = versionContainer.getSpongeVanillaVersion(version); String oldVersion = this.oldVersionFunction.apply(version);
//The file is already the newest version //The file is already the newest version
if (filePath.isFile() && newestVersion.equals(oldVersion)) { if (filePath.isFile() && newestVersion.equals(oldVersion)) {
return true; return true;
@ -60,7 +68,7 @@ public class SpongeVanilla extends AbstractServerType {
if (!downloadFile(jarURL, Paths.get(filePath.toURI()))) { if (!downloadFile(jarURL, Paths.get(filePath.toURI()))) {
return false; return false;
} }
versionContainer.setSpongeVanillaVersion(version, newestVersion); versionUpdateFunction.accept(version, newestVersion);
return true; return true;
} }
} }

View File

@ -1,4 +1,5 @@
SpongeVanilla;1.12.2,1.11.2,1.10.2,1.8.9;https://dl-api.spongepowered.org/v1/org.spongepowered/spongevanilla/downloads?type=stable&minecraft=;"version":";",;https://repo.spongepowered.org/maven/org/spongepowered/spongevanilla/;/spongevanilla- SpongeVanilla;1.12.2,1.11.2,1.10.2,1.8.9;https://dl-api.spongepowered.org/v1/org.spongepowered/spongevanilla/downloads?type=stable&minecraft=;"version":";",;https://repo.spongepowered.org/maven/org/spongepowered/spongevanilla/;/spongevanilla-
SpongeForge;1.12.2,1.11.2,1.10.2;https://dl-api.spongepowered.org/v1/org.spongepowered/spongeforge/downloads?type=stable&minecraft=;"version":";",;https://repo.spongepowered.org/maven/org/spongepowered/spongeforge/;/spongeforge-
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,1.6.4-R2.1,1.5.2-R1.1,1.4.7-R1.1;https://static.knarcraft.net/archive/downloads/minecraftserverjars/Spigot/;spigot- 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,1.6.4-R2.1,1.5.2-R1.1,1.4.7-R1.1;https://static.knarcraft.net/archive/downloads/minecraftserverjars/Spigot/;spigot-
MCPCplus;1.6.4,1.6.2,1.5.2,1.4.7;https://static.knarcraft.net/archive/downloads/minecraftserverjars/MCPC+/;mcpcplus 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- 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-

Can't render this file because it contains an unexpected character in line 1 and column 151.

View File

@ -41,6 +41,11 @@ public class JarDownloaderTest {
singleDownloadTest(ServerTypeHandler.getByName("SpongeVanilla")); singleDownloadTest(ServerTypeHandler.getByName("SpongeVanilla"));
} }
@Test
public void spongeForgeDownloadTest() throws IOException, ConfigurationException {
singleDownloadTest(ServerTypeHandler.getByName("SpongeForge"));
}
@Test @Test
public void spigotDownloadTest() throws ConfigurationException, IOException { public void spigotDownloadTest() throws ConfigurationException, IOException {
singleDownloadTest(ServerTypeHandler.getByName("Spigot")); singleDownloadTest(ServerTypeHandler.getByName("Spigot"));