5 Commits

Author SHA1 Message Date
998b901687 Merge remote-tracking branch 'origin/master' 2018-11-07 17:40:56 +01:00
21737b7549 Fixes downloading of jar files
Links to knarcraft.net updated.
Code for parsing the new minecraft vanilla json files added.
Adds auto updates
2018-11-07 17:40:39 +01:00
c88e90b5b5 Fixes jar downloading 2018-09-30 22:11:47 +02:00
a3a8e4f377 Fixes downloading of jar files
Links to knarcraft.net updated.
Code for parsing the new minecraft vanilla json files added.
2018-09-30 17:06:57 +02:00
5ac22babab Bugfixes and optimizations
Fixes a bug where the server version is not updated on load.
Optimized downloading of all jar files.
2018-03-29 16:09:08 +02:00
13 changed files with 281 additions and 225 deletions

1
.gitignore vendored
View File

@ -14,7 +14,6 @@
.mtj.tmp/
# Package Files #
*.jar
*.war
*.ear
*.zip

View File

@ -0,0 +1,2 @@
alpha
1.1.0
1 alpha
2 1.1.0

View File

@ -2,7 +2,7 @@ Vanilla;Latest,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
Snapshot;Latest;https://launchermeta.mojang.com/mc/game/version_manifest.json;"snapshot":";";https://s3.amazonaws.com/Minecraft.Download/versions/;/minecraft_server.
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-
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;
Spigot;1.12.2,1.11.2,1.10.2,1.9.4,1.9.4,1.8.8,1.7.10,1.6.4,1.5.2,1.4.7;https://knarcraft.net/Api/Download/bungeeminecraftserverlauncher/jars/Spigot/
MCPCplus;1.6.4,1.6.2,1.5.2,1.4.7;https://knarcraft.net/Api/Download/bungeeminecraftserverlauncher/jars/MCPC+/
Craftbukkit;1.12.2,1.11.2,1.10.2,1.9.4,1.8.8,1.7.10,1.6.4,1.5.2,1.4.6,1.3.2,1.2.5,1.1,1.0;https://knarcraft.net/Api/Download/bungeeminecraftserverlauncher/jars/Bukkit/
Spigot;1.13.1,1.12.2,1.11.2,1.10.2,1.9.4,1.9.4,1.8.8,1.7.10,1.6.4,1.5.2,1.4.7;https://static.knarcraft.net/public/jars/
MCPCplus;1.6.4,1.6.2,1.5.2,1.4.7;https://static.knarcraft.net/public/jars/
Craftbukkit;1.13.1,1.12.2,1.11.2,1.10.2,1.9.4,1.8.8,1.7.10,1.6.4,1.5.2,1.4.6,1.3.2,1.2.5,1.1,1.0;https://static.knarcraft.net/public/jars/
Custom;;
Can't render this file because it contains an unexpected character in line 1 and column 156.

0
git Normal file
View File

BIN
lib/gson-2.8.5.jar Normal file

Binary file not shown.

View File

@ -1,3 +1,4 @@
Manifest-Version: 1.0
Class-Path: gson-2.8.5.jar
Main-Class: net.knarcraft.serverlauncher.Main

View File

@ -1,5 +1,9 @@
package net.knarcraft.serverlauncher;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import net.knarcraft.serverlauncher.profile.Collection;
import net.knarcraft.serverlauncher.profile.Profile;
import net.knarcraft.serverlauncher.server.Server;
@ -7,13 +11,17 @@ import net.knarcraft.serverlauncher.server.ServerType;
import net.knarcraft.serverlauncher.userinterface.ServerConsoles;
import javax.naming.ConfigurationException;
import javax.swing.*;
import java.awt.*;
import java.io.*;
import java.net.URISyntaxException;
import java.util.Scanner;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import static net.knarcraft.serverlauncher.Shared.downloadFile;
import static net.knarcraft.serverlauncher.Shared.readFile;
import static net.knarcraft.serverlauncher.Shared.stringBetween;
//Java 8 required.
@ -26,25 +34,18 @@ import static net.knarcraft.serverlauncher.Shared.stringBetween;
*/
public class Main {
@SuppressWarnings("CanBeFinal")
private static String appDir;
private static boolean running = false;
private static final String updateChannel = "alpha";
private static final String updateURL = "https://api.knarcraft.net/minecraftserverlauncher";
static {
try {
appDir = String.valueOf(new File(Main.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath()).getParentFile());
} catch (URISyntaxException e) {
e.printStackTrace();
System.exit(1);
}
public static void main(String[] args) throws IOException {
checkForUpdate();
try (PrintWriter file = new PrintWriter(Main.getAppDir() + File.separator + "latestrun.log")) {
file.print("");
} catch (IOException e ) {
e.printStackTrace();
}
}
public static void main(String[] args) {
EventQueue.invokeLater(() -> {
try {
setup();
@ -58,6 +59,9 @@ public class Main {
});
}
/**
* Loads all server types, so that they are ready for use
*/
private static void setup() {
try {
ServerType.loadServerTypes();
@ -67,7 +71,20 @@ public class Main {
}
}
/**
* Retrieves the directory the .jar file is running from
*
* @return A string path
*/
public static String getAppDir() {
if (appDir == null) {
try {
appDir = String.valueOf(new File(Main.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath()).getParentFile());
} catch (URISyntaxException e) {
e.printStackTrace();
System.exit(1);
}
}
return appDir;
}
@ -165,4 +182,84 @@ public class Main {
}
return playerName;
}
/**
* Checks if a newer version is available
*
* @throws IOException
*/
private static void checkForUpdate() throws IOException {
Scanner file;
try {
file = new Scanner(new File("config/currentversion.csv"));
} catch (FileNotFoundException e) {
file = new Scanner(Main.class.getResourceAsStream("/config/currentversion.csv"));
}
String oldType = file.nextLine();
String oldVer = file.nextLine();
String data = readFile(updateURL);
JsonObject jsonObject = new JsonParser().parse(data).getAsJsonObject();
String latest = jsonObject.getAsJsonObject("latest").get(updateChannel).getAsString();
if (!oldType.equals(updateChannel) || !oldVer.equals(latest)) {
String dir = getAppDir() + File.separator;
JsonArray versionList = jsonObject.getAsJsonArray("versions");
String url = "";
for (JsonElement elem : versionList) {
JsonObject obj = elem.getAsJsonObject();
String ver = obj.get("id").getAsString();
String type = obj.get("type").getAsString();
if (ver.equals(latest) && type.equals(updateChannel)) {
url = obj.get("url").getAsString();
}
}
if (downloadFile(url, new File(dir + "update.jar").toPath())) {
doUpdate(dir);
} else {
JOptionPane.showMessageDialog(
null,
"An update is available, but could not be downloaded.",
"Update available",
JOptionPane.ERROR_MESSAGE
);
}
}
}
private static void doUpdate(String dir) {
int answer = JOptionPane.showConfirmDialog(
null,
"An update is available. Do you want to update?",
"Update available",
JOptionPane.YES_NO_OPTION
);
if (answer == JOptionPane.YES_NO_OPTION) {
if (new File (dir + "Minecraft-Server-Launcher.jar").renameTo(new File(dir + "Old.jar"))) {
if (new File(dir + "update.jar").renameTo(new File (dir + "Minecraft-Server-Launcher.jar"))) {
if (new File(dir + "Old.jar").delete()) {
JOptionPane.showMessageDialog(
null,
"Update finished. Please run the software again.",
"Update complete",
JOptionPane.INFORMATION_MESSAGE
);
System.exit(0);
}
} else {
if (!new File(dir + "Old.jar").renameTo(new File (dir + "Minecraft-Server-Launcher.jar"))) {
System.out.println("Shit");
}
}
}
JOptionPane.showMessageDialog(
null,
"Could not replace the main .jar with the downloaded .jar.",
"Update failed",
JOptionPane.ERROR_MESSAGE
);
}
}
}

View File

@ -1,5 +1,8 @@
package net.knarcraft.serverlauncher.profile;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import net.knarcraft.serverlauncher.server.AdvancedServerType;
import net.knarcraft.serverlauncher.server.Server;
import net.knarcraft.serverlauncher.server.ServerType;
@ -367,8 +370,10 @@ public class Profile {
"Error",
JOptionPane.ERROR_MESSAGE
);
throw new FileNotFoundException("Unable to save to the profiles file.");
} else {
System.out.println("Unable to save to file. Try running the software as an administrator.");
}
throw new FileNotFoundException("Unable to save to the profiles file.");
}
}
} catch (IOException e) {
@ -461,6 +466,12 @@ public class Profile {
}
}
/**
* Parses a profile, and creates a profile with the data.
*
* @param profileData The data of the new profile
* @return The new profile
*/
private static Profile parseProfile(String[] profileData) {
return new Profile(
profileData[0],
@ -470,6 +481,12 @@ public class Profile {
);
}
/**
* Parses a server, and creates a new collection.
*
* @param profile The profile which to add the collection
* @param serverData The data to parse
*/
private static void parseServer(Profile profile, String[] serverData) {
profile.collections.add(new Collection(
serverData[0],
@ -485,6 +502,11 @@ public class Profile {
);
}
/**
* Downloads all jars to the program directory.
*
* @throws IOException On version file failure or folder creation failure
*/
public static void downloadJars() throws IOException {
if (!new File(jarDir).exists() && !new File(jarDir).mkdirs()) {
JOptionPane.showMessageDialog(
@ -495,150 +517,87 @@ public class Profile {
);
throw new FileNotFoundException("Unable to create jars folder");
}
downloadSimple("Spigot");
downloadSimple("Craftbukkit");
downloadSimple("MCPCplus");
downloadMixed("Vanilla");
downloadMixed("Snapshot");
downloadSponge();
downloadBungee();
gui.setStatus("Finished downloading jars");
}
private static void downloadSimple(String typeName) throws FileNotFoundException {
ServerType type = ServerType.getByName(typeName);
String url = Objects.requireNonNull(type).getDownloadURL();
String name = type.getName();
Boolean success;
for (String version : type.getVersions()) {
File file = new File(jarDir + type.getName() + version + ".jar");
if (!file.isFile()) {
Path filePath = Paths.get(jarDir + type.getName() + version + ".jar");
if (gui != null) {
gui.setStatus("Downloading: " + name + version + ".jar");
}
success = downloadFile(url + name + version + ".jar", filePath);
if (!success) {
if (gui != null) {
gui.setStatus("Error downloading: " + name + version + ".jar");
}
throw new FileNotFoundException("Error downloading: " + name + version + ".jar");
}
}
}
}
private static void downloadMixed(String typeName) throws IOException {
AdvancedServerType type = (AdvancedServerType) ServerType.getByName(typeName);
String url = Objects.requireNonNull(type).getDownloadURL();
String name = type.getName();
String versionText;
String newestVersion;
Boolean success;
for (String version : type.getVersions()) {
File file = new File(jarDir + type.getName() + version + ".jar");
Path filePath = Paths.get(jarDir + type.getName() + version + ".jar");
if (gui != null) {
gui.setStatus("Downloading: " + name + version + ".jar");
}
if (version.equals("Latest")) {
try {
versionText = readFile(type.getVersionURL());
} catch (IOException e) {
throw new IOException("Error reading: " + type.getVersionURL());
downloadAll();
printToGui("Finished downloading jars");
} catch (FileNotFoundException e) {
throw new FileNotFoundException("One or more downloads failed: " + e.getMessage());
}
newestVersion = stringBetween(versionText, type.getSrcStart(), type.getSrcEnd());
if (!file.isFile() || !newestVersion.equals(getVersion(name))) {
success = downloadFile(
url + newestVersion + type.getDownloadURLPart() + newestVersion + ".jar",
filePath
);
setVersion(name, newestVersion);
if (!success) {
}
/**
* Prints something to the gui status field if the gui exists
* Otherwise it prints to the console
*
* @param str The string to show the user
*/
private static void printToGui(String str) {
if (gui != null) {
gui.setStatus("Error downloading: " + name + version + ".jar");
}
throw new FileNotFoundException("Error downloading: " + name + version + ".jar");
}
}
gui.setStatus(str);
} else {
if (!file.isFile()) {
success = downloadFile(url + version + type.getDownloadURLPart() + version + ".jar", filePath);
if (!success) {
if (gui != null) {
gui.setStatus("Error downloading: " + name + version + ".jar");
}
throw new FileNotFoundException("Error downloading: " + name + version + ".jar");
}
}
}
System.out.println(str);
}
}
private static void downloadSponge() throws IOException {
AdvancedServerType type = (AdvancedServerType) ServerType.getByName("SpongeVanilla");
String url = Objects.requireNonNull(type).getDownloadURL();
String name = type.getName();
String versionText;
String newestVersion;
Boolean success;
/**
* Downloads jar files for all possible server versions.
*
* @throws IOException If a jar fails to download.
*/
private static void downloadAll() throws IOException {
for (ServerType type : ServerType.getServerTypes()) {
String url = Objects.requireNonNull(type).getDownloadURL(), name = type.getName(), newestVersion;
AdvancedServerType advType = type instanceof AdvancedServerType ? (AdvancedServerType) type : null;
for (String version : type.getVersions()) {
File file = new File(jarDir + name + version + ".jar");
Path filePath = Paths.get(jarDir + name + version + ".jar");
if (gui != null) {
gui.setStatus("Downloading: " + name + version + ".jar");
Boolean success;
printToGui("Downloading: " + name + version + ".jar");
File file = new File(jarDir + type.getName() + version + ".jar");
Path filePath = Paths.get(jarDir + type.getName() + version + ".jar");
switch (type.getName()) {
case "Vanilla":
case "Snapshot":
if (version.equals("Latest")) {
String versionText = readFile(Objects.requireNonNull(advType).getVersionURL());
JsonObject jsonObject = new JsonParser().parse(versionText).getAsJsonObject();
String latest = jsonObject.getAsJsonObject("latest").get("release").getAsString();
JsonElement ver = jsonObject.getAsJsonArray("versions").get(0);
String versionFile = ver.getAsJsonObject().get("url").getAsString();
versionText = readFile(versionFile);
jsonObject = new JsonParser().parse(versionText).getAsJsonObject();
String jarFile = jsonObject.getAsJsonObject("downloads").getAsJsonObject("server").get("url").getAsString();
setVersion(name, latest);
success = (file.isFile() && latest.equals(getVersion(name))) || downloadFile(jarFile, filePath);
} else {
success = file.isFile() || downloadFile(url + version + Objects.requireNonNull(advType).getDownloadURLPart() + version + ".jar", filePath);
}
try {
versionText = readFile(type.getVersionURL() + version);
} catch (IOException e) {
throw new IOException("Error reading: " + type.getVersionURL());
break;
case "Spigot":
case "Craftbukkit":
case "MCPCplus":
success = file.isFile() || downloadFile(url + name + version + ".jar", filePath);
break;
case "SpongeVanilla":
newestVersion = stringBetween(readFile(Objects.requireNonNull(advType).getVersionURL() + version), advType.getSrcStart(), advType.getSrcEnd());
success = file.isFile() || downloadFile(url + newestVersion + advType.getDownloadURLPart() + newestVersion + ".jar", filePath);
break;
case "Bungee":
newestVersion = stringBetween(readFile(Objects.requireNonNull(advType).getVersionURL()), advType.getSrcStart(), advType.getSrcEnd());
setVersion(name, newestVersion);
success = (file.isFile() && newestVersion.equals(getVersion(name))) || downloadFile(url, filePath);
break;
default:
success = true;
}
newestVersion = stringBetween(versionText, type.getSrcStart(), type.getSrcEnd());
if (!file.isFile()) {
success = downloadFile(
url + newestVersion + type.getDownloadURLPart() + newestVersion + ".jar",
filePath
);
if (!success) {
if (gui != null) {
gui.setStatus("Error downloading: " + name + version + ".jar");
}
printToGui("Error downloading: " + name + version + ".jar");
throw new FileNotFoundException("Error downloading: " + name + version + ".jar");
}
}
}
}
private static void downloadBungee() throws IOException {
AdvancedServerType type = (AdvancedServerType) ServerType.getByName("Bungee");
String url = Objects.requireNonNull(type).getDownloadURL();
String name = type.getName();
String versionText;
String newestVersion;
Boolean success;
File file = new File(jarDir + type.getName() + ".jar");
Path filePath = Paths.get(jarDir + type.getName() + ".jar");
if (gui != null) {
gui.setStatus("Downloading: " + name + ".jar");
}
try {
versionText = readFile(type.getVersionURL());
} catch (IOException e) {
throw new IOException("Error reading: " + type.getVersionURL());
}
newestVersion = stringBetween(versionText, type.getSrcStart(), type.getSrcEnd());
if (!file.isFile() || !newestVersion.equals(getVersion(name))) {
success = downloadFile(url, filePath);
setVersion(name, newestVersion);
if (!success) {
if (gui != null) {
gui.setStatus("Error downloading: " + name + ".jar");
}
throw new FileNotFoundException("Error downloading: " + name + ".jar");
}
}
}
/**
* Returns the current version of a type
*

View File

@ -1,16 +1,19 @@
package net.knarcraft.serverlauncher.server;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import net.knarcraft.serverlauncher.Main;
import net.knarcraft.serverlauncher.profile.Collection;
import net.knarcraft.serverlauncher.profile.Profile;
import java.io.*;
import java.nio.file.*;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.concurrent.TimeUnit;
import static net.knarcraft.serverlauncher.Shared.downloadFile;
import static net.knarcraft.serverlauncher.Shared.readFile;
import static net.knarcraft.serverlauncher.Shared.stringBetween;
import static net.knarcraft.serverlauncher.Shared.*;
/**
@ -275,6 +278,7 @@ public class Server {
this.downloadJar();
Profile.getGUI().setStatus("File downloaded");
} catch (FileNotFoundException e) {
System.out.println(e.getMessage());
Profile.getGUI().setStatus("Error: Jar file not found");
e.printStackTrace();
this.started = false;
@ -351,12 +355,7 @@ public class Server {
AdvancedServerType type;
File file = new File(this.path + File.separator + this.getType());
Path filePath = Paths.get(this.path + File.separator + this.getType());
String versionText;
String newestVersion;
String url = this.type.getDownloadURL();
String name = this.type.getName();
String ver = this.serverVersion;
boolean success;
String versionText, newestVersion, url = this.type.getDownloadURL(), name = this.type.getName(), ver = this.serverVersion;
switch (this.type.getName()) {
case "Custom":
if (!file.isFile()) {
@ -366,12 +365,9 @@ public class Server {
case "Spigot":
case "Craftbukkit":
case "MCPCplus":
if (!file.isFile()) {
success = downloadFile(url + name + ver + ".jar", filePath);
if (!success) {
if (!(file.isFile() || downloadFile(url + name + ver + ".jar", filePath))) {
throw new FileNotFoundException("Jar file could not be downloaded.");
}
}
break;
case "Vanilla":
case "Snapshot":
@ -382,25 +378,32 @@ public class Server {
} catch (IOException e) {
throw new FileNotFoundException("Version file could not be downloaded.");
}
newestVersion = stringBetween(versionText, type.getSrcStart(), type.getSrcEnd());
if (!file.isFile() || !newestVersion.equals(this.getVersion(name))) {
success = downloadFile(
url + newestVersion + type.getDownloadURLPart() + newestVersion + ".jar",
filePath
);
this.setVersion(name, newestVersion);
if (!success) {
JsonObject jsonObject = new JsonParser().parse(versionText).getAsJsonObject();
String latest = jsonObject.getAsJsonObject("latest").get("release").getAsString();
JsonElement verElem = jsonObject.getAsJsonArray("versions").get(0);
String versionFile = verElem.getAsJsonObject().get("url").getAsString();
try {
versionText = readFile(versionFile);
} catch (IOException e) {
throw new FileNotFoundException("Version file could not be downloaded.");
}
if (!file.isFile() || !latest.equals(this.getVersion(name))) {
this.setVersion(name, latest);
jsonObject = new JsonParser().parse(versionText).getAsJsonObject();
String jarFile = jsonObject.getAsJsonObject("downloads").getAsJsonObject("server").get("url").getAsString();
if (!downloadFile(jarFile, filePath)) {
throw new FileNotFoundException("Jar file could not be downloaded.");
}
}
} else {
if (!file.isFile()) {
success = downloadFile(url + ver + type.getDownloadURLPart() + ver + ".jar", filePath);
if (!success) {
if (!(file.isFile() || downloadFile(url + ver + type.getDownloadURLPart() + ver + ".jar", filePath))) {
throw new FileNotFoundException("Jar file could not be downloaded.");
}
}
}
break;
case "SpongeVanilla":
type = (AdvancedServerType) this.type;
@ -411,12 +414,8 @@ public class Server {
}
newestVersion = stringBetween(versionText, type.getSrcStart(), type.getSrcEnd());
if (!file.isFile() || !newestVersion.equals(this.getVersion(name))) {
success = downloadFile(
url + newestVersion + type.getDownloadURLPart() + newestVersion + ".jar",
filePath
);
this.setVersion(name, newestVersion);
if (!success) {
if (!downloadFile(url + newestVersion + type.getDownloadURLPart() + newestVersion + ".jar", filePath)) {
throw new FileNotFoundException("Jar file could not be downloaded.");
}
}
@ -430,9 +429,8 @@ public class Server {
}
newestVersion = stringBetween(versionText, type.getSrcStart(), type.getSrcEnd());
if (!file.isFile() || !newestVersion.equals(this.getVersion(name))) {
success = downloadFile(url, filePath);
this.setVersion(name, newestVersion);
if (!success) {
if (!downloadFile(url, filePath)) {
throw new FileNotFoundException("Jar file could not be downloaded.");
}
}

View File

@ -552,7 +552,7 @@ public class GUI implements ActionListener {
} else if (e.getSource() == chckbxmntmDownloadJars) {
downloadJars();
} else if (e.getSource() == mntmErrors) {
goToURL("https://knarcraft.net/Bungeeminecraftserverlauncher/Info/");
goToURL("https://archive.knarcraft.net/BungeeMinecraftServerLauncherInfo/");
} else if (e.getSource() == mntmSetup) {
JOptionPane.showMessageDialog(
null,
@ -561,7 +561,7 @@ public class GUI implements ActionListener {
JOptionPane.INFORMATION_MESSAGE
);
} else if (e.getSource() == mntmManualUpdate) {
goToURL("https://knarcraft.net/Downloads/Bungeeminecraftserverlauncher/");
goToURL("https://git.knarcraft.net/EpicKnarvik97/Minecraft-Server-Launcher");
} else if (e.getSource() == mntmRunInBackground) {
JOptionPane.showMessageDialog(
null,
@ -591,7 +591,7 @@ public class GUI implements ActionListener {
JOptionPane.INFORMATION_MESSAGE
);
} else if (e.getSource() == mntmStory) {
goToURL("https://knarcraft.net/Bungeeminecraftserverlauncher/Story/");
goToURL("https://archive.knarcraft.net/BungeeminecraftserverlauncherStory/");
} else if (e.getSource() == btnStartServer) {
try {
Profile.getCurrent().save();

View File

@ -38,7 +38,7 @@ public class ServerTab implements ActionListener {
this.chckbxEnabled.setSelected(enabled);
this.serverTypes.setSelectedItem(typeName);
this.serverTypes();
this.serverTypes.setSelectedItem(serverVersion);
this.serverVersions.setSelectedItem(serverVersion);
this.maxRam.setSelectedItem(maxRam);
}

View File

@ -1,6 +1,6 @@
import net.knarcraft.serverlauncher.profile.Profile;
import net.knarcraft.serverlauncher.server.ServerType;
import org.junit.Test;
import org.junit.jupiter.api.Test;
import javax.naming.ConfigurationException;
import java.io.IOException;

View File

@ -1,12 +1,12 @@
import net.knarcraft.serverlauncher.profile.Profile;
import net.knarcraft.serverlauncher.server.ServerType;
import org.junit.Test;
import org.junit.jupiter.api.Test;
import javax.naming.ConfigurationException;
import java.io.FileNotFoundException;
import static net.knarcraft.serverlauncher.Shared.stringBetween;
import static org.junit.Assert.assertEquals;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class Tests {
@Test