From 04daf560f21489740aece081ba309e0942b7869e Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Thu, 29 Apr 2021 08:03:46 +0200
Subject: [PATCH 01/91] refactor(DI): Restructure and rewrite SPC for
 dependency injection. Removes Reference for now. Get rid of statics where
 possible.

---
 .../griefed/serverpackcreator/CLISetup.java   | 257 ------
 .../serverpackcreator/ConfigCheck.java        | 822 ++++++++++++++---
 .../griefed/serverpackcreator/CopyFiles.java  | 261 ------
 .../serverpackcreator/CreateServerPack.java   | 824 ++++++++++++++++++
 .../griefed/serverpackcreator/FilesSetup.java | 325 +++----
 .../de/griefed/serverpackcreator/Handler.java | 142 ---
 .../de/griefed/serverpackcreator/Main.java    | 106 ++-
 .../griefed/serverpackcreator/Reference.java  | 304 -------
 .../serverpackcreator/ServerSetup.java        | 143 ---
 .../serverpackcreator/ServerUtilities.java    | 362 --------
 ...teModpack.java => CurseCreateModpack.java} | 119 +--
 .../{Files.java => CurseFiles.java}           |   2 +-
 .../{Minecraft.java => CurseMinecraft.java}   |   8 +-
 .../{ModLoaders.java => CurseModLoaders.java} |   2 +-
 .../{Modpack.java => CurseModpack.java}       |  18 +-
 .../{Splines.java => CurseSplines.java}       |  14 +-
 .../gui/{About.java => AboutTab.java}         |  54 +-
 .../gui/{TabbedPane.java => CreateGui.java}   |  82 +-
 ...rverPack.java => CreateServerPackTab.java} | 255 +++---
 ...Log.java => ModloaderInstallerLogTab.java} |  25 +-
 ...rLog.java => ServerPackCreatorLogTab.java} |  24 +-
 .../i18n/LocalizationManager.java             | 131 ++-
 .../serverpackcreator/CLISetupTest.java       |  39 -
 .../serverpackcreator/ConfigCheckTest.java    |  77 +-
 .../serverpackcreator/CopyFilesTest.java      | 219 -----
 .../CreateServerPackTest.java                 | 428 +++++++++
 .../serverpackcreator/FilesSetupTest.java     |  62 +-
 .../serverpackcreator/ServerSetupTest.java    | 122 ---
 .../ServerUtilitiesTest.java                  | 136 ---
 ...kTest.java => CurseCreateModpackTest.java} |  22 +-
 .../resources/fabric_tests/server_pack.zip    | Bin 664 -> 148 bytes
 31 files changed, 2668 insertions(+), 2717 deletions(-)
 delete mode 100644 src/main/java/de/griefed/serverpackcreator/CLISetup.java
 delete mode 100644 src/main/java/de/griefed/serverpackcreator/CopyFiles.java
 create mode 100644 src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
 delete mode 100644 src/main/java/de/griefed/serverpackcreator/Handler.java
 delete mode 100644 src/main/java/de/griefed/serverpackcreator/Reference.java
 delete mode 100644 src/main/java/de/griefed/serverpackcreator/ServerSetup.java
 delete mode 100644 src/main/java/de/griefed/serverpackcreator/ServerUtilities.java
 rename src/main/java/de/griefed/serverpackcreator/curseforgemodpack/{CreateModpack.java => CurseCreateModpack.java} (78%)
 rename src/main/java/de/griefed/serverpackcreator/curseforgemodpack/{Files.java => CurseFiles.java} (96%)
 rename src/main/java/de/griefed/serverpackcreator/curseforgemodpack/{Minecraft.java => CurseMinecraft.java} (75%)
 rename src/main/java/de/griefed/serverpackcreator/curseforgemodpack/{ModLoaders.java => CurseModLoaders.java} (94%)
 rename src/main/java/de/griefed/serverpackcreator/curseforgemodpack/{Modpack.java => CurseModpack.java} (76%)
 rename src/main/java/de/griefed/serverpackcreator/curseforgemodpack/{Splines.java => CurseSplines.java} (92%)
 rename src/main/java/de/griefed/serverpackcreator/gui/{About.java => AboutTab.java} (73%)
 rename src/main/java/de/griefed/serverpackcreator/gui/{TabbedPane.java => CreateGui.java} (63%)
 rename src/main/java/de/griefed/serverpackcreator/gui/{CreateServerPack.java => CreateServerPackTab.java} (75%)
 rename src/main/java/de/griefed/serverpackcreator/gui/{ModloaderInstallerLog.java => ModloaderInstallerLogTab.java} (59%)
 rename src/main/java/de/griefed/serverpackcreator/gui/{ServerPackCreatorLog.java => ServerPackCreatorLogTab.java} (63%)
 delete mode 100644 src/test/java/de/griefed/serverpackcreator/CLISetupTest.java
 delete mode 100644 src/test/java/de/griefed/serverpackcreator/CopyFilesTest.java
 create mode 100644 src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
 delete mode 100644 src/test/java/de/griefed/serverpackcreator/ServerSetupTest.java
 delete mode 100644 src/test/java/de/griefed/serverpackcreator/ServerUtilitiesTest.java
 rename src/test/java/de/griefed/serverpackcreator/curseforgemodpack/{CreateModpackTest.java => CurseCreateModpackTest.java} (80%)

diff --git a/src/main/java/de/griefed/serverpackcreator/CLISetup.java b/src/main/java/de/griefed/serverpackcreator/CLISetup.java
deleted file mode 100644
index 24a76aa76..000000000
--- a/src/main/java/de/griefed/serverpackcreator/CLISetup.java
+++ /dev/null
@@ -1,257 +0,0 @@
-package de.griefed.serverpackcreator;
-
-import de.griefed.serverpackcreator.i18n.LocalizationManager;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Scanner;
-
-public class CLISetup {
-    private static final Logger appLogger = LogManager.getLogger(CLISetup.class);
-
-    /**
-     * CLI for config file generation. Prompts user to enter config file values and then generates a config file with values entered by user.
-     */
-    void setup() {
-        List<String> clientMods,
-                copyDirs;
-
-        clientMods = new ArrayList<>(0);
-        copyDirs = new ArrayList<>(0);
-
-        String[] tmpClientMods,
-                tmpCopyDirs;
-        boolean includeServerInstallation,
-                includeServerIcon,
-                includeServerProperties,
-                includeStartScripts,
-                includeZipCreation;
-        String modpackDir,
-                javaPath,
-                minecraftVersion,
-                modLoader,
-                modLoaderVersion,
-                tmpModpackDir;
-
-        Scanner reader = new Scanner(System.in);
-        appLogger.info(String.format(LocalizationManager.getLocalizedString("clisetup.log.info.start"), Reference.getConfigGenArgument()));
-        do {
-//--------------------------------------------------------------------------------------------MODPACK DIRECTORY---------
-            appLogger.info(LocalizationManager.getLocalizedString("clisetup.log.info.modpack.enter"));
-            appLogger.info(LocalizationManager.getLocalizedString("clisetup.log.info.modpack.example"));
-
-            do {
-                System.out.print(LocalizationManager.getLocalizedString("clisetup.log.info.modpack.cli"));
-                tmpModpackDir = reader.nextLine();
-            } while (!Reference.configCheck.checkModpackDir(tmpModpackDir));
-
-            modpackDir = tmpModpackDir.replace("\\", "/");
-            appLogger.info(String.format(LocalizationManager.getLocalizedString("clisetup.log.info.checkreturn"), modpackDir));
-            System.out.println();
-
-//-----------------------------------------------------------------------------------------CLIENTSIDE-ONLY MODS---------
-            appLogger.info(LocalizationManager.getLocalizedString("clisetup.log.info.clientmods.enter"));
-            do {
-                clientMods.addAll(readStringArray());
-                appLogger.info(String.format(LocalizationManager.getLocalizedString("clisetup.log.info.checkreturn"), clientMods));
-                appLogger.info(LocalizationManager.getLocalizedString("clisetup.log.info.clientmods.checkreturninfo"));
-                System.out.print(LocalizationManager.getLocalizedString("clisetup.log.info.answer"));
-            } while (!readBoolean());
-            appLogger.info(String.format(LocalizationManager.getLocalizedString("clisetup.log.info.checkreturn"), clientMods));
-            tmpClientMods = new String[clientMods.size()];
-            clientMods.toArray(tmpClientMods);
-            System.out.println();
-
-//---------------------------------------------------------------------------DIRECTORIES TO COPY TO SERVER PACK---------
-            appLogger.info(LocalizationManager.getLocalizedString("clisetup.log.info.copydirs.enter"));
-            do {
-                do {
-                    copyDirs.clear();
-                    appLogger.info(LocalizationManager.getLocalizedString("clisetup.log.info.copydirs.specify"));
-                    copyDirs.addAll(readStringArray());
-
-                } while (!Reference.configCheck.checkCopyDirs(copyDirs, modpackDir));
-
-                appLogger.info(String.format(LocalizationManager.getLocalizedString("clisetup.log.info.checkreturn"), copyDirs));
-                appLogger.info(LocalizationManager.getLocalizedString("clisetup.log.info.copydirs.checkreturninfo"));
-                System.out.print(LocalizationManager.getLocalizedString("clisetup.log.info.answer"));
-            } while (!readBoolean());
-            appLogger.info(String.format(LocalizationManager.getLocalizedString("clisetup.log.info.checkreturn"), copyDirs));
-            tmpCopyDirs = new String[copyDirs.size()];
-            copyDirs.toArray(tmpCopyDirs);
-            System.out.println();
-
-//-------------------------------------------------------------WHETHER TO INCLUDE MODLOADER SERVER INSTALLATION---------
-            appLogger.info(LocalizationManager.getLocalizedString("clisetup.log.info.server.enter"));
-            System.out.print(LocalizationManager.getLocalizedString("clisetup.log.info.server.include"));
-            includeServerInstallation = readBoolean();
-            appLogger.info(String.format(LocalizationManager.getLocalizedString("clisetup.log.info.checkreturn"), includeServerInstallation));
-
-//-------------------------------------------------------------------------------MINECRAFT VERSION MODPACK USES---------
-            appLogger.info(LocalizationManager.getLocalizedString("clisetup.log.info.minecraft.enter"));
-            do {
-                System.out.print(LocalizationManager.getLocalizedString("clisetup.log.info.minecraft.specify"));
-                minecraftVersion = reader.nextLine();
-            } while (!Reference.configCheck.isMinecraftVersionCorrect(minecraftVersion));
-            appLogger.info(String.format(LocalizationManager.getLocalizedString("clisetup.log.info.checkreturn"), minecraftVersion));
-            System.out.println();
-
-//---------------------------------------------------------------------------------------MODLOADER MODPACK USES---------
-            appLogger.info(LocalizationManager.getLocalizedString("clisetup.log.info.modloader.enter"));
-            do {
-                System.out.print(LocalizationManager.getLocalizedString("clisetup.log.info.modloader.cli"));
-                modLoader = reader.nextLine();
-            } while (!Reference.configCheck.checkModloader(modLoader));
-            modLoader = Reference.configCheck.setModloader(modLoader);
-            appLogger.info(String.format(LocalizationManager.getLocalizedString("clisetup.log.info.checkreturn"), modLoader));
-            System.out.println();
-
-//----------------------------------------------------------------------------VERSION OF MODLOADER MODPACK USES---------
-            appLogger.info(String.format(LocalizationManager.getLocalizedString("clisetup.log.info.modloaderversion.enter"), modLoader));
-            do {
-                System.out.print(LocalizationManager.getLocalizedString("clisetup.log.info.modloaderversion.cli"));
-                modLoaderVersion = reader.nextLine();
-            } while (!Reference.configCheck.checkModloaderVersion(modLoader, modLoaderVersion));
-            appLogger.info(String.format(LocalizationManager.getLocalizedString("clisetup.log.info.checkreturn"), modLoaderVersion));
-            System.out.println();
-
-//------------------------------------------------------------------------------------PATH TO JAVA INSTALLATION---------
-            appLogger.info(LocalizationManager.getLocalizedString("clisetup.log.info.java.enter"));
-            appLogger.info(LocalizationManager.getLocalizedString("clisetup.log.info.java.enter2"));
-            appLogger.info(LocalizationManager.getLocalizedString("clisetup.log.info.java.example"));
-            do {
-                System.out.print(LocalizationManager.getLocalizedString("clisetup.log.info.java.cli"));
-                String tmpJavaPath = reader.nextLine();
-                javaPath = Reference.configCheck.getJavaPath(tmpJavaPath);
-            } while (!Reference.configCheck.checkJavaPath(javaPath));
-            System.out.println();
-
-//------------------------------------------------------------WHETHER TO INCLUDE SERVER-ICON.PNG IN SERVER PACK---------
-            appLogger.info(LocalizationManager.getLocalizedString("clisetup.log.info.icon.enter"));
-            System.out.print(LocalizationManager.getLocalizedString("clisetup.log.info.icon.cli"));
-            includeServerIcon = readBoolean();
-            appLogger.info(String.format(LocalizationManager.getLocalizedString("clisetup.log.info.checkreturn"), includeServerIcon));
-            System.out.println();
-
-//----------------------------------------------------------WHETHER TO INCLUDE SERVER.PROPERTIES IN SERVER PACK---------
-            appLogger.info(LocalizationManager.getLocalizedString("clisetup.log.info.properties.enter"));
-            System.out.print(LocalizationManager.getLocalizedString("clisetup.log.info.properties.cli"));
-            includeServerProperties = readBoolean();
-            appLogger.info(String.format(LocalizationManager.getLocalizedString("clisetup.log.info.checkreturn"), includeServerProperties));
-            System.out.println();
-
-//--------------------------------------------------------------WHETHER TO INCLUDE START SCRIPTS IN SERVER PACK---------
-            appLogger.info(LocalizationManager.getLocalizedString("clisetup.log.info.scripts.enter"));
-            System.out.print(LocalizationManager.getLocalizedString("clisetup.log.info.scripts.cli"));
-            includeStartScripts = readBoolean();
-            appLogger.info(String.format(LocalizationManager.getLocalizedString("clisetup.log.info.checkreturn"), includeStartScripts));
-            System.out.println();
-
-//----------------------------------------------------WHETHER TO INCLUDE CREATION OF ZIP-ARCHIVE OF SERVER PACK---------
-            appLogger.info(LocalizationManager.getLocalizedString("clisetup.log.info.zip.enter"));
-            System.out.print(LocalizationManager.getLocalizedString("clisetup.log.info.zip.cli"));
-            includeZipCreation = readBoolean();
-            appLogger.info(String.format(LocalizationManager.getLocalizedString("clisetup.log.info.checkreturn"), includeZipCreation));
-
-//------------------------------------------------------------------------------PRINT CONFIG TO CONSOLE AND LOG---------
-            Reference.configCheck.printConfig(modpackDir,
-                    clientMods,
-                    copyDirs,
-                    includeServerInstallation,
-                    javaPath,
-                    minecraftVersion,
-                    modLoader,
-                    modLoaderVersion,
-                    includeServerIcon,
-                    includeServerProperties,
-                    includeStartScripts,
-                    includeZipCreation);
-            appLogger.info(LocalizationManager.getLocalizedString("clisetup.log.info.config.enter"));
-            System.out.print(LocalizationManager.getLocalizedString("clisetup.log.info.answer"));
-        } while (!readBoolean());
-        reader.close();
-
-//-----------------------------------------------------------------------------------------WRITE CONFIG TO FILE---------
-        if (Reference.filesSetup.writeConfigToFile(
-                modpackDir,
-                buildString(Arrays.toString(tmpClientMods)),
-                buildString(Arrays.toString(tmpCopyDirs)),
-                includeServerInstallation,
-                javaPath,
-                minecraftVersion,
-                modLoader,
-                modLoaderVersion,
-                includeServerIcon,
-                includeServerProperties,
-                includeStartScripts,
-                includeZipCreation,
-                Reference.getConfigFile(),
-                false
-        )) {
-            appLogger.info(LocalizationManager.getLocalizedString("clisetup.log.info.config.written"));
-        }
-    }
-
-    /** A helper method for config setup. Prompts user to enter the values that will be stored in arrays in config.
-     * @return String List. Returns list with user input values that will be stored in config.
-     */
-    private List<String> readStringArray() {
-        Scanner readerArray = new Scanner(System.in);
-        ArrayList<String> result = new ArrayList<>(1);
-        String stringArray;
-        while (true) {
-            stringArray = readerArray.nextLine();
-            if (stringArray.isEmpty()) {
-                return result;
-            } else {
-                result.add(stringArray);
-            }
-        }
-    }
-
-    /** Converts list of strings into concatenated string.
-     * @param args Strings that will be concatenated into one string
-     * @return String. Returns concatenated string that contains all provided values.
-     */
-    public String buildString(String... args) {
-        StringBuilder stringBuilder = new StringBuilder();
-        stringBuilder.append(Arrays.toString(args));
-        stringBuilder.delete(0, 2).reverse().delete(0,2).reverse();
-        return stringBuilder.toString();
-    }
-
-    /** A helper method for config setup. Prompts user to enter boolean values that will be stored in config and checks entered values to prevent storing non-boolean values in boolean variables.
-     * @return Boolean. Converts to boolean and returns value entered by user that will be stored in config.
-     */
-    private boolean readBoolean() {
-        Scanner readerBoolean = new Scanner(System.in);
-        String boolRead;
-        while (true) {
-            boolRead = readerBoolean.nextLine();
-            if (boolRead.matches("[Tt]rue") ||
-                    boolRead.matches("[Yy]es")  ||
-                    boolRead.matches("[Yy]")    ||
-                    boolRead.matches("1")                                                           ||
-                    boolRead.matches(LocalizationManager.getLocalizedString("cli.input.true")) ||
-                    boolRead.matches(LocalizationManager.getLocalizedString("cli.input.yes"))  ||
-                    boolRead.matches(LocalizationManager.getLocalizedString("cli.input.yes.short"))) {
-                return true;
-
-            } else if (boolRead.matches("[Ff]alse") ||
-                    boolRead.matches("[Nn]o")    ||
-                    boolRead.matches("[Nn]" )    ||
-                    boolRead.matches("0")                                                            ||
-                    boolRead.matches(LocalizationManager.getLocalizedString("cli.input.false")) ||
-                    boolRead.matches(LocalizationManager.getLocalizedString("cli.input.no"))    ||
-                    boolRead.matches(LocalizationManager.getLocalizedString("cli.input.no.short"))) {
-                return false;
-
-            } else {
-                appLogger.error(LocalizationManager.getLocalizedString("clisetup.log.error.answer"));
-            }
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/main/java/de/griefed/serverpackcreator/ConfigCheck.java b/src/main/java/de/griefed/serverpackcreator/ConfigCheck.java
index 40c5e52ef..65fa849e8 100644
--- a/src/main/java/de/griefed/serverpackcreator/ConfigCheck.java
+++ b/src/main/java/de/griefed/serverpackcreator/ConfigCheck.java
@@ -5,7 +5,8 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import com.therandomlabs.curseapi.CurseAPI;
 import com.therandomlabs.curseapi.CurseException;
 import com.typesafe.config.*;
-import de.griefed.serverpackcreator.curseforgemodpack.Modpack;
+import de.griefed.serverpackcreator.curseforgemodpack.CurseCreateModpack;
+import de.griefed.serverpackcreator.curseforgemodpack.CurseModpack;
 import de.griefed.serverpackcreator.i18n.LocalizationManager;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
@@ -28,7 +29,200 @@ import java.nio.file.Paths;
 import java.util.*;
 
 public class ConfigCheck {
+
     private static final Logger appLogger = LogManager.getLogger(ConfigCheck.class);
+    private final File oldConfigFile = new File("creator.conf");
+    private final File configFile = new File("serverpackcreator.conf");
+    private LocalizationManager localizationManager;
+
+    public ConfigCheck(LocalizationManager injectedLocalizationManager) {
+        if (injectedLocalizationManager == null) {
+            this.localizationManager = new LocalizationManager();
+        }
+        this.localizationManager = injectedLocalizationManager;
+    }
+
+    //-- If you wish to expand this list, fork this repository, make your changes, and submit a PR -------------------------
+    private final List<String> fallbackModsList = Arrays.asList(
+            "AmbientSounds",
+            "BackTools",
+            "BetterAdvancement",
+            "BetterPing",
+            "cherished",
+            "ClientTweaks",
+            "Controlling",
+            "DefaultOptions",
+            "durability",
+            "DynamicSurroundings",
+            "itemzoom",
+            "jei-professions",
+            "jeiintegration",
+            "JustEnoughResources",
+            "MouseTweaks",
+            "Neat",
+            "OldJavaWarning",
+            "PackMenu",
+            "preciseblockplacing",
+            "SimpleDiscordRichPresence",
+            "SpawnerFix",
+            "TipTheScales",
+            "WorldNameRandomizer"
+    );
+
+    private List<String>
+            clientMods,
+            copyDirs;
+
+    private String
+            modpackDir,
+            javaPath,
+            minecraftVersion,
+            modLoader,
+            modLoaderVersion;
+
+    private Boolean
+            includeServerInstallation,
+            includeServerIcon,
+            includeServerProperties,
+            includeStartScripts,
+            includeZipCreation;
+
+    private int
+            projectID,
+            projectFileID;
+
+    private Config config;
+
+    public File getOldConfigFile() {
+        return oldConfigFile;
+    }
+
+    public File getConfigFile() {
+        return configFile;
+    }
+
+    String getMinecraftManifestUrl() {
+        return "https://launchermeta.mojang.com/mc/game/version_manifest.json";
+    }
+
+    String getForgeManifestUrl() {
+        return "https://files.minecraftforge.net/net/minecraftforge/forge/maven-metadata.json";
+    }
+
+    String getFabricManifestUrl() {
+        return "https://maven.fabricmc.net/net/fabricmc/fabric-loader/maven-metadata.xml";
+    }
+
+    public com.typesafe.config.Config getConfig() {
+        return config;
+    }
+    public void setConfig(com.typesafe.config.Config newConfig) {
+        this.config = newConfig;
+    }
+
+    List<String> getFallbackModsList() {
+        return fallbackModsList;
+    }
+
+    List<String> getClientMods() {
+        return clientMods;
+    }
+    void setClientMods(List<String> newClientMods) {
+        this.clientMods = newClientMods;
+    }
+
+    List<String> getCopyDirs() {
+        return copyDirs;
+    }
+    void setCopyDirs(List<String> newCopyDirs) {
+        this.copyDirs = newCopyDirs;
+    }
+
+    String getModpackDir() {
+        return modpackDir;
+    }
+    void setModpackDir(String newModpackDir) {
+        newModpackDir = newModpackDir.replace("\\","/");
+        this.modpackDir = newModpackDir;
+    }
+
+    String getJavaPath() {
+        return javaPath;
+    }
+    void setJavaPath(String newJavaPath) {
+        newJavaPath = newJavaPath.replace("\\", "/");
+        this.javaPath = newJavaPath;
+    }
+
+    String getMinecraftVersion() {
+        return minecraftVersion;
+    }
+    void setMinecraftVersion(String newMinecraftVersion) {
+        this.minecraftVersion = newMinecraftVersion;
+    }
+
+    String getModLoader() {
+        return modLoader;
+    }
+    void setModLoader(String newModLoader) {
+        this.modLoader = newModLoader;
+    }
+
+    String getModLoaderVersion() {
+        return modLoaderVersion;
+    }
+    void setModLoaderVersion(String newModLoaderVersion) {
+        this.modLoaderVersion = newModLoaderVersion;
+    }
+
+    boolean getIncludeServerInstallation() {
+        return includeServerInstallation;
+    }
+    void setIncludeServerInstallation(boolean newIncludeServerInstallation) {
+        this.includeServerInstallation = newIncludeServerInstallation;
+    }
+
+    boolean getIncludeServerIcon() {
+        return includeServerIcon;
+    }
+    void setIncludeServerIcon(boolean newIncludeServerIcon) {
+        this.includeServerIcon = newIncludeServerIcon;
+    }
+
+    boolean getIncludeServerProperties() {
+        return includeServerProperties;
+    }
+    void setIncludeServerProperties(boolean newIncludeServerProperties) {
+        this.includeServerProperties = newIncludeServerProperties;
+    }
+
+    boolean getIncludeStartScripts() {
+        return includeStartScripts;
+    }
+    void setIncludeStartScripts(boolean newIncludeStartScripts) {
+        this.includeStartScripts = newIncludeStartScripts;
+    }
+
+    boolean getIncludeZipCreation() {
+        return includeZipCreation;
+    }
+    void setIncludeZipCreation(boolean newIncludeZipCreation) {
+        this.includeZipCreation = newIncludeZipCreation;
+    }
+
+    int getProjectID() {
+        return projectID;
+    }
+    void setProjectID(int newProjectID) {
+        this.projectID = newProjectID;
+    }
+
+    int getProjectFileID() {
+        return projectFileID;
+    }
+    void setProjectFileID(int newProjectFileID) {
+        this.projectFileID = newProjectFileID;
+    }
 
     /** Check the config file for configuration errors. If an error is found, the log file will tell the user where the error is, so they can fix their config.
      * @param configFile The configuration file to check. Must be a valid configuration file for serverpackcreator to work.
@@ -36,50 +230,50 @@ public class ConfigCheck {
      */
     public boolean checkConfigFile(File configFile) {
         boolean configHasError;
-        appLogger.info(LocalizationManager.getLocalizedString("configcheck.log.info.checkconfig.start"));
+        appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.checkconfig.start"));
         try {
-            Reference.setConfig(ConfigFactory.parseFile(configFile));
+            setConfig(ConfigFactory.parseFile(configFile));
         } catch (ConfigException ex) {
-            appLogger.error(LocalizationManager.getLocalizedString("configcheck.log.error.checkconfig.start"));
+            appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.checkconfig.start"));
         }
 
-        if (Reference.getConfig().getStringList("clientMods").isEmpty()) {
-            appLogger.warn(LocalizationManager.getLocalizedString("configcheck.log.warn.checkconfig.clientmods"));
-            Reference.setClientMods(Reference.getFallbackModsList());
+        if (getConfig().getStringList("clientMods").isEmpty()) {
+            appLogger.warn(localizationManager.getLocalizedString("configcheck.log.warn.checkconfig.clientmods"));
+            setClientMods(getFallbackModsList());
         } else {
-            Reference.setClientMods(Reference.getConfig().getStringList("clientMods"));
+            setClientMods(getConfig().getStringList("clientMods"));
         }
-        Reference.setIncludeServerInstallation(convertToBoolean(Reference.getConfig().getString("includeServerInstallation")));
-        Reference.setIncludeServerIcon(convertToBoolean(Reference.getConfig().getString("includeServerIcon")));
-        Reference.setIncludeServerProperties(convertToBoolean(Reference.getConfig().getString("includeServerProperties")));
-        Reference.setIncludeStartScripts(convertToBoolean(Reference.getConfig().getString("includeStartScripts")));
-        Reference.setIncludeZipCreation(convertToBoolean(Reference.getConfig().getString("includeZipCreation")));
-
-        if (checkModpackDir(Reference.getConfig().getString("modpackDir").replace("\\","/"))) {
-            configHasError = isDir(Reference.getConfig().getString("modpackDir").replace("\\","/"));
-        } else if (checkCurseForge(Reference.getConfig().getString("modpackDir").replace("\\","/"))) {
+        setIncludeServerInstallation(convertToBoolean(getConfig().getString("includeServerInstallation")));
+        setIncludeServerIcon(convertToBoolean(getConfig().getString("includeServerIcon")));
+        setIncludeServerProperties(convertToBoolean(getConfig().getString("includeServerProperties")));
+        setIncludeStartScripts(convertToBoolean(getConfig().getString("includeStartScripts")));
+        setIncludeZipCreation(convertToBoolean(getConfig().getString("includeZipCreation")));
+
+        if (checkModpackDir(getConfig().getString("modpackDir").replace("\\","/"))) {
+            configHasError = isDir(getConfig().getString("modpackDir").replace("\\","/"));
+        } else if (checkCurseForge(getConfig().getString("modpackDir").replace("\\","/"))) {
             configHasError = isCurse();
         } else {
             configHasError = true;
         }
 
-        printConfig(Reference.getModpackDir(),
-                Reference.getClientMods(),
-                Reference.getCopyDirs(),
-                Reference.getIncludeServerInstallation(),
-                Reference.getJavaPath(),
-                Reference.getMinecraftVersion(),
-                Reference.getModLoader(),
-                Reference.getModLoaderVersion(),
-                Reference.getIncludeServerIcon(),
-                Reference.getIncludeServerProperties(),
-                Reference.getIncludeStartScripts(),
-                Reference.getIncludeZipCreation());
+        printConfig(getModpackDir(),
+                getClientMods(),
+                getCopyDirs(),
+                getIncludeServerInstallation(),
+                getJavaPath(),
+                getMinecraftVersion(),
+                getModLoader(),
+                getModLoaderVersion(),
+                getIncludeServerIcon(),
+                getIncludeServerProperties(),
+                getIncludeStartScripts(),
+                getIncludeZipCreation());
 
         if (!configHasError) {
-            appLogger.info(LocalizationManager.getLocalizedString("configcheck.log.info.checkconfig.success"));
+            appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.checkconfig.success"));
         } else {
-            appLogger.error(LocalizationManager.getLocalizedString("configcheck.log.error.checkconfig.failure"));
+            appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.checkconfig.failure"));
         }
         return configHasError;
     }
@@ -90,39 +284,39 @@ public class ConfigCheck {
      */
     private boolean isDir(String modpackDir) {
         boolean configHasError = false;
-        Reference.setModpackDir(modpackDir);
+        setModpackDir(modpackDir);
 
-        if (checkCopyDirs(Reference.getConfig().getStringList("copyDirs"), Reference.getModpackDir())) {
-            Reference.setCopyDirs(Reference.getConfig().getStringList("copyDirs"));
+        if (checkCopyDirs(getConfig().getStringList("copyDirs"), getModpackDir())) {
+            setCopyDirs(getConfig().getStringList("copyDirs"));
         } else { configHasError = true; }
 
-        if (Reference.getIncludeServerInstallation()) {
-            if (checkJavaPath(Reference.getConfig().getString("javaPath"))) {
-                Reference.setJavaPath(Reference.getConfig().getString("javaPath"));
+        if (getIncludeServerInstallation()) {
+            if (checkJavaPath(getConfig().getString("javaPath"))) {
+                setJavaPath(getConfig().getString("javaPath"));
             } else {
-                String tmpJavaPath = getJavaPath(Reference.getConfig().getString("javaPath"));
+                String tmpJavaPath = getJavaPath(getConfig().getString("javaPath"));
                 if (checkJavaPath(tmpJavaPath)) {
-                    Reference.setJavaPath(tmpJavaPath);
+                    setJavaPath(tmpJavaPath);
                 } else { configHasError = true; } }
 
-            if (isMinecraftVersionCorrect(Reference.getConfig().getString("minecraftVersion"))) {
-                Reference.setMinecraftVersion(Reference.getConfig().getString("minecraftVersion"));
+            if (isMinecraftVersionCorrect(getConfig().getString("minecraftVersion"))) {
+                setMinecraftVersion(getConfig().getString("minecraftVersion"));
             } else { configHasError = true; }
 
-            if (checkModloader(Reference.getConfig().getString("modLoader"))) {
-                Reference.setModLoader(setModloader(Reference.getConfig().getString("modLoader")));
+            if (checkModloader(getConfig().getString("modLoader"))) {
+                setModLoader(setModloader(getConfig().getString("modLoader")));
             } else { configHasError = true; }
 
-            if (checkModloaderVersion(Reference.getModLoader(), Reference.getConfig().getString("modLoaderVersion"))) {
-                Reference.setModLoaderVersion(Reference.getConfig().getString("modLoaderVersion"));
+            if (checkModloaderVersion(getModLoader(), getConfig().getString("modLoaderVersion"))) {
+                setModLoaderVersion(getConfig().getString("modLoaderVersion"));
             } else { configHasError = true; }
 
         } else {
-            appLogger.info(LocalizationManager.getLocalizedString("configcheck.log.info.checkconfig.skipstart"));
-            appLogger.info(LocalizationManager.getLocalizedString("configcheck.log.info.checkconfig.skipjava"));
-            appLogger.info(LocalizationManager.getLocalizedString("configcheck.log.info.checkconfig.skipminecraft"));
-            appLogger.info(LocalizationManager.getLocalizedString("configcheck.log.info.checkconfig.skipmodlaoder"));
-            appLogger.info(LocalizationManager.getLocalizedString("configcheck.log.info.checkconfig.skipmodloaderversion"));
+            appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.checkconfig.skipstart"));
+            appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.checkconfig.skipjava"));
+            appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.checkconfig.skipminecraft"));
+            appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.checkconfig.skipmodlaoder"));
+            appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.checkconfig.skipmodloaderversion"));
         }
         return configHasError;
     }
@@ -133,28 +327,30 @@ public class ConfigCheck {
     private boolean isCurse() {
         boolean configHasError = false;
         try {
-            if (CurseAPI.project(Reference.getProjectID()).isPresent()) {
+            if (CurseAPI.project(getProjectID()).isPresent()) {
                 String projectName, displayName;
                 projectName = displayName = "";
-                try { projectName = CurseAPI.project(Reference.getProjectID()).get().name();
+                try { projectName = CurseAPI.project(getProjectID()).get().name();
+
+                    try { displayName = Objects.requireNonNull(CurseAPI.project(getProjectID()).get().files().fileWithID(getProjectFileID())).displayName(); }
+                    catch (NullPointerException npe) { appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.iscurse.display"));
 
-                    try { displayName = Objects.requireNonNull(CurseAPI.project(Reference.getProjectID()).get().files().fileWithID(Reference.getProjectFileID())).displayName(); }
-                    catch (NullPointerException npe) { appLogger.info(LocalizationManager.getLocalizedString("configcheck.log.info.iscurse.display"));
+                        try { displayName = Objects.requireNonNull(CurseAPI.project(getProjectID()).get().files().fileWithID(getProjectFileID())).nameOnDisk(); }
+                        catch (NullPointerException npe2) { displayName = String.format("%d", getProjectFileID()); } } }
 
-                        try { displayName = Objects.requireNonNull(CurseAPI.project(Reference.getProjectID()).get().files().fileWithID(Reference.getProjectFileID())).nameOnDisk(); }
-                        catch (NullPointerException npe2) { displayName = String.format("%d", Reference.getProjectFileID()); } } }
+                catch (CurseException cex) { appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.iscurse.curseforge")); }
 
-                catch (CurseException cex) { appLogger.error(LocalizationManager.getLocalizedString("configcheck.log.error.iscurse.curseforge")); }
+                setModpackDir(String.format("./%s/%s", projectName, displayName));
 
-                Reference.setModpackDir(String.format("./%s/%s", projectName, displayName));
+                CurseCreateModpack curseCreateModpack = new CurseCreateModpack(localizationManager);
 
-                if (Reference.createModpack.curseForgeModpack(Reference.getModpackDir(), Reference.getProjectID(), Reference.getProjectFileID())) {
+                if (curseCreateModpack.curseForgeModpack(getModpackDir(), getProjectID(), getProjectFileID())) {
                     try {
-                        byte[] jsonData = Files.readAllBytes(Paths.get(String.format("%s/manifest.json", Reference.getModpackDir())));
+                        byte[] jsonData = Files.readAllBytes(Paths.get(String.format("%s/manifest.json", getModpackDir())));
                         ObjectMapper objectMapper = new ObjectMapper();
                         objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
                         objectMapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
-                        Modpack modpack = objectMapper.readValue(jsonData, Modpack.class);
+                        CurseModpack modpack = objectMapper.readValue(jsonData, CurseModpack.class);
 
                         String[] minecraftLoaderVersions = modpack
                                 .getMinecraft()
@@ -164,45 +360,45 @@ public class ConfigCheck {
                                 .replace("[", "")
                                 .replace("]", "")
                                 .split("-");
-                        Reference.setMinecraftVersion(minecraftLoaderVersions[0]
+                        setMinecraftVersion(minecraftLoaderVersions[0]
                                 .replace("[", ""));
 
                         if (containsFabric(modpack)) {
-                            appLogger.info(LocalizationManager.getLocalizedString("configcheck.log.info.iscurse.fabric"));
-                            Reference.setModLoader("Fabric");
-                            Reference.setModLoaderVersion(latestFabricLoader(Reference.getModpackDir()));
+                            appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.iscurse.fabric"));
+                            setModLoader("Fabric");
+                            setModLoaderVersion(latestFabricLoader(getModpackDir()));
                         } else {
-                            Reference.setModLoader(setModloader(modLoaderVersion[0]));
-                            Reference.setModLoaderVersion(modLoaderVersion[1]);
+                            setModLoader(setModloader(modLoaderVersion[0]));
+                            setModLoaderVersion(modLoaderVersion[1]);
                         }
-                    } catch (IOException ex) { appLogger.error(LocalizationManager.getLocalizedString("configcheck.log.error.iscurse.json"), ex); }
+                    } catch (IOException ex) { appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.iscurse.json"), ex); }
 
-                    if (checkJavaPath(Reference.getConfig().getString("javaPath").replace("\\","/"))) {
-                        Reference.setJavaPath(Reference.getConfig().getString("javaPath").replace("\\","/"));
+                    if (checkJavaPath(getConfig().getString("javaPath").replace("\\","/"))) {
+                        setJavaPath(getConfig().getString("javaPath").replace("\\","/"));
                     } else {
-                        String tmpJavaPath = getJavaPath(Reference.getConfig().getString("javaPath").replace("\\","/"));
+                        String tmpJavaPath = getJavaPath(getConfig().getString("javaPath").replace("\\","/"));
                         if (checkJavaPath(tmpJavaPath)) {
-                            Reference.setJavaPath(tmpJavaPath);
+                            setJavaPath(tmpJavaPath);
                         }
                     }
-                    Reference.setCopyDirs(suggestCopyDirs(Reference.getModpackDir()));
-                    appLogger.info(LocalizationManager.getLocalizedString("configcheck.log.info.iscurse.replace"));
-                    Reference.filesSetup.writeConfigToFile(
-                            Reference.getModpackDir(),
-                            Reference.cliSetup.buildString(Reference.getClientMods().toString()),
-                            Reference.cliSetup.buildString(Reference.getCopyDirs().toString()),
-                            Reference.getIncludeServerInstallation(), Reference.getJavaPath(),
-                            Reference.getMinecraftVersion(), Reference.getModLoader(),
-                            Reference.getModLoaderVersion(), Reference.getIncludeServerIcon(),
-                            Reference.getIncludeServerProperties(), Reference.getIncludeStartScripts(),
-                            Reference.getIncludeZipCreation(),
-                            Reference.getConfigFile(),
+                    setCopyDirs(suggestCopyDirs(getModpackDir()));
+                    appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.iscurse.replace"));
+                    writeConfigToFile(
+                            getModpackDir(),
+                            buildString(getClientMods().toString()),
+                            buildString(getCopyDirs().toString()),
+                            getIncludeServerInstallation(), getJavaPath(),
+                            getMinecraftVersion(), getModLoader(),
+                            getModLoaderVersion(), getIncludeServerIcon(),
+                            getIncludeServerProperties(), getIncludeStartScripts(),
+                            getIncludeZipCreation(),
+                            getConfigFile(),
                             false
                     );
                 }
             }
         } catch (CurseException cex) {
-            appLogger.error(String.format(LocalizationManager.getLocalizedString("configcheck.log.error.iscurse.project"), Reference.getProjectID()), cex);
+            appLogger.error(String.format(localizationManager.getLocalizedString("configcheck.log.error.iscurse.project"), getProjectID()), cex);
             configHasError = true;
         }
         return configHasError;
@@ -212,13 +408,13 @@ public class ConfigCheck {
      * @param modpack Object. Contains information about our modpack. Used to get a list of all projects used in the modpack.
      * @return Boolean. Returns true if Jumploader is found, false if not found.
      */
-    private boolean containsFabric(Modpack modpack) {
+    private boolean containsFabric(CurseModpack modpack) {
         boolean hasJumploader = false;
         for (int i = 0; i < modpack.getFiles().size(); i++) {
             String[] mods;
             mods = modpack.getFiles().get(i).toString().split(",");
             if (mods[0].equalsIgnoreCase("361988") || mods[0].equalsIgnoreCase("306612")) {
-                appLogger.info(LocalizationManager.getLocalizedString("configcheck.log.info.containsfabric"));
+                appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.containsfabric"));
                 hasJumploader = true;
             }
         }
@@ -230,7 +426,7 @@ public class ConfigCheck {
      * @return List, String. Returns a list of directories inside the modpack, excluding well known client-side only directories which would not be needed by a server pack. If you have suggestions to this list, open an issue on https://github.com/Griefed/ServerPackCreator/issues
      */
     private List<String> suggestCopyDirs(String modpackDir) {
-        appLogger.info(LocalizationManager.getLocalizedString("configcheck.log.info.suggestcopydirs.start"));
+        appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.suggestcopydirs.start"));
 
         String[] dirsNotToCopy = {
                 "overrides",
@@ -250,11 +446,11 @@ public class ConfigCheck {
                 dirList.remove(doNotCopyList.get(i));
             }
             copyDirs = dirList.toArray(new String[0]);
-            appLogger.info(String.format(LocalizationManager.getLocalizedString("configcheck.log.info.suggestcopydirs.list"), dirList));
+            appLogger.info(String.format(localizationManager.getLocalizedString("configcheck.log.info.suggestcopydirs.list"), dirList));
 
             return Arrays.asList(copyDirs.clone());
 
-        } else { appLogger.error(LocalizationManager.getLocalizedString("configcheck.log.error.suggestcopydirs")); }
+        } else { appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.suggestcopydirs")); }
 
         return Arrays.asList(copyDirs.clone());
     }
@@ -269,16 +465,16 @@ public class ConfigCheck {
 
         if (modpackDir.matches("[0-9]{2,},[0-9]{5,}")) {
             projectFileIds = modpackDir.split(",");
-            Reference.setProjectID(Integer.parseInt(projectFileIds[0]));
-            Reference.setProjectFileID(Integer.parseInt(projectFileIds[1]));
+            setProjectID(Integer.parseInt(projectFileIds[0]));
+            setProjectFileID(Integer.parseInt(projectFileIds[1]));
 
-            appLogger.info(LocalizationManager.getLocalizedString("configcheck.log.info.checkcurseforge.info"));
-            appLogger.info(String.format(LocalizationManager.getLocalizedString("configcheck.log.info.checkcurseforge.return"), Reference.getProjectID(), Reference.getProjectFileID()));
-            appLogger.warn(LocalizationManager.getLocalizedString("configcheck.log.warn.checkcurseforge.warn"));
+            appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.checkcurseforge.info"));
+            appLogger.info(String.format(localizationManager.getLocalizedString("configcheck.log.info.checkcurseforge.return"), getProjectID(), getProjectFileID()));
+            appLogger.warn(localizationManager.getLocalizedString("configcheck.log.warn.checkcurseforge.warn"));
 
             configCorrect = true;
 
-        } else { appLogger.warn(LocalizationManager.getLocalizedString("configcheck.log.warn.checkcurseforge.warn2")); }
+        } else { appLogger.warn(localizationManager.getLocalizedString("configcheck.log.warn.checkcurseforge.warn2")); }
 
         return configCorrect;
     }
@@ -302,7 +498,7 @@ public class ConfigCheck {
 
             returnBoolean = false;
         } else {
-            appLogger.warn(LocalizationManager.getLocalizedString("configcheck.log.warn.converttoboolean.warn"));
+            appLogger.warn(localizationManager.getLocalizedString("configcheck.log.warn.converttoboolean.warn"));
             returnBoolean = false;
         }
         return returnBoolean;
@@ -334,31 +530,31 @@ public class ConfigCheck {
                      boolean includeProperties,
                      boolean includeScripts,
                      boolean includeZip) {
-        appLogger.info(LocalizationManager.getLocalizedString("configcheck.log.info.printconfig.start"));
-        appLogger.info(String.format(LocalizationManager.getLocalizedString("configcheck.log.info.printconfig.modpackdir"), modpackDirectory));
+        appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.printconfig.start"));
+        appLogger.info(String.format(localizationManager.getLocalizedString("configcheck.log.info.printconfig.modpackdir"), modpackDirectory));
         if (clientsideMods.size() == 0) {
-            appLogger.warn(LocalizationManager.getLocalizedString("configcheck.log.warn.printconfig.noclientmods"));
+            appLogger.warn(localizationManager.getLocalizedString("configcheck.log.warn.printconfig.noclientmods"));
         } else {
-            appLogger.info(LocalizationManager.getLocalizedString("configcheck.log.info.printconfig.clientmods"));
+            appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.printconfig.clientmods"));
             for (int i = 0; i < clientsideMods.size(); i++) {
                 appLogger.info(String.format("    %s", clientsideMods.get(i))); }
         }
 
-        appLogger.info(LocalizationManager.getLocalizedString("configcheck.log.info.printconfig.copydirs"));
+        appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.printconfig.copydirs"));
         if (copyDirectories != null) {
             for (int i = 0; i < copyDirectories.size(); i++) {
                 appLogger.info(String.format("    %s", copyDirectories.get(i))); }
-        } else { appLogger.error(LocalizationManager.getLocalizedString("configcheck.log.error.printconfig.copydirs")); }
-
-        appLogger.info(String.format(LocalizationManager.getLocalizedString("configcheck.log.info.printconfig.server"), installServer));
-        appLogger.info(String.format(LocalizationManager.getLocalizedString("configcheck.log.info.printconfig.javapath"), javaInstallPath));
-        appLogger.info(String.format(LocalizationManager.getLocalizedString("configcheck.log.info.printconfig.minecraftversion"), minecraftVer));
-        appLogger.info(String.format(LocalizationManager.getLocalizedString("configcheck.log.info.printconfig.modloader"), modloader));
-        appLogger.info(String.format(LocalizationManager.getLocalizedString("configcheck.log.info.printconfig.modloaderversion"), modloaderVersion));
-        appLogger.info(String.format(LocalizationManager.getLocalizedString("configcheck.log.info.printconfig.icon"), includeIcon));
-        appLogger.info(String.format(LocalizationManager.getLocalizedString("configcheck.log.info.printconfig.properties"), includeProperties));
-        appLogger.info(String.format(LocalizationManager.getLocalizedString("configcheck.log.info.printconfig.scripts"), includeScripts));
-        appLogger.info(String.format(LocalizationManager.getLocalizedString("configcheck.log.info.printconfig.zip"), includeZip));
+        } else { appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.printconfig.copydirs")); }
+
+        appLogger.info(String.format(localizationManager.getLocalizedString("configcheck.log.info.printconfig.server"), installServer));
+        appLogger.info(String.format(localizationManager.getLocalizedString("configcheck.log.info.printconfig.javapath"), javaInstallPath));
+        appLogger.info(String.format(localizationManager.getLocalizedString("configcheck.log.info.printconfig.minecraftversion"), minecraftVer));
+        appLogger.info(String.format(localizationManager.getLocalizedString("configcheck.log.info.printconfig.modloader"), modloader));
+        appLogger.info(String.format(localizationManager.getLocalizedString("configcheck.log.info.printconfig.modloaderversion"), modloaderVersion));
+        appLogger.info(String.format(localizationManager.getLocalizedString("configcheck.log.info.printconfig.icon"), includeIcon));
+        appLogger.info(String.format(localizationManager.getLocalizedString("configcheck.log.info.printconfig.properties"), includeProperties));
+        appLogger.info(String.format(localizationManager.getLocalizedString("configcheck.log.info.printconfig.scripts"), includeScripts));
+        appLogger.info(String.format(localizationManager.getLocalizedString("configcheck.log.info.printconfig.zip"), includeZip));
     }
 
     /** Check whether the specified modpack directory exists.
@@ -368,9 +564,9 @@ public class ConfigCheck {
     boolean checkModpackDir(String modpackDir) {
         boolean configCorrect = false;
         if (modpackDir.equals("")) {
-            appLogger.error(LocalizationManager.getLocalizedString("configcheck.log.error.checkmodpackdir"));
+            appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.checkmodpackdir"));
         } else if (!(new File(modpackDir).isDirectory())) {
-            appLogger.warn(String.format(LocalizationManager.getLocalizedString("configcheck.log.warn.checkmodpackdir"), modpackDir));
+            appLogger.warn(String.format(localizationManager.getLocalizedString("configcheck.log.warn.checkmodpackdir"), modpackDir));
         } else {
             configCorrect = true;
         }
@@ -385,13 +581,13 @@ public class ConfigCheck {
     boolean checkCopyDirs(List<String> copyDirs, String modpackDir) {
         boolean configCorrect = true;
         if (copyDirs.isEmpty()) {
-            appLogger.error(LocalizationManager.getLocalizedString("configcheck.log.error.checkcopydirs.empty"));
+            appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.checkcopydirs.empty"));
             configCorrect = false;
         } else {
             for (int i = 0; i < copyDirs.size(); i++) {
                 File directory = new File(String.format("%s/%s", modpackDir, copyDirs.get(i)));
                 if (!directory.exists() || !directory.isDirectory()) {
-                    appLogger.error(String.format(LocalizationManager.getLocalizedString("configcheck.log.error.checkcopydirs.notfound"), directory.getAbsolutePath()));
+                    appLogger.error(String.format(localizationManager.getLocalizedString("configcheck.log.error.checkcopydirs.notfound"), directory.getAbsolutePath()));
                     configCorrect = false;
                 }
             }
@@ -406,15 +602,15 @@ public class ConfigCheck {
     String getJavaPath(String enteredPath) {
         String autoJavaPath;
         if (enteredPath.equals("")) {
-            appLogger.warn(LocalizationManager.getLocalizedString("configcheck.log.warn.getjavapath.empty"));
+            appLogger.warn(localizationManager.getLocalizedString("configcheck.log.warn.getjavapath.empty"));
             autoJavaPath = String.format("%s/bin/java",System.getProperty("java.home").replace("\\", "/"));
             if (autoJavaPath.startsWith("C:")) {
                 autoJavaPath = String.format("%s.exe", autoJavaPath);
             }
-            appLogger.warn(String.format(LocalizationManager.getLocalizedString("configcheck.log.warn.getjavapath.set"), autoJavaPath));
+            appLogger.warn(String.format(localizationManager.getLocalizedString("configcheck.log.warn.getjavapath.set"), autoJavaPath));
             return autoJavaPath;
         } else {
-            appLogger.info(String.format(LocalizationManager.getLocalizedString("configcheck.log.warn.getjavapath.set"), enteredPath));
+            appLogger.info(String.format(localizationManager.getLocalizedString("configcheck.log.warn.getjavapath.set"), enteredPath));
             return enteredPath;
         }
     }
@@ -430,7 +626,7 @@ public class ConfigCheck {
         } else if (new File(pathToJava).exists() && pathToJava.endsWith("java")) {
             configCorrect = true;
         } else {
-            appLogger.error(LocalizationManager.getLocalizedString("configcheck.log.error.checkjavapath"));
+            appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.checkjavapath"));
         }
         return configCorrect;
     }
@@ -444,7 +640,7 @@ public class ConfigCheck {
         if (modloader.equalsIgnoreCase("Forge") || modloader.equalsIgnoreCase("Fabric")) {
             configCorrect = true;
         } else {
-            appLogger.error(LocalizationManager.getLocalizedString("configcheck.log.error.checkmodloader"));
+            appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.checkmodloader"));
         }
         return configCorrect;
     }
@@ -475,7 +671,7 @@ public class ConfigCheck {
         } else if (modloader.equalsIgnoreCase("Fabric") && isFabricVersionCorrect(modloaderVersion)) {
             isVersionCorrect = true;
         } else {
-            appLogger.error(LocalizationManager.getLocalizedString("configcheck.log.error.checkmodloaderversion"));
+            appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.checkmodloaderversion"));
         }
         return isVersionCorrect;
     }
@@ -487,22 +683,22 @@ public class ConfigCheck {
     boolean isMinecraftVersionCorrect(String minecraftVersion) {
         if (!minecraftVersion.equals("")) {
             try {
-                URL manifestJsonURL = new URL(Reference.getMinecraftManifestUrl());
+                URL manifestJsonURL = new URL(getMinecraftManifestUrl());
                 ReadableByteChannel readableByteChannel = Channels.newChannel(manifestJsonURL.openStream());
                 FileOutputStream downloadManifestOutputStream;
 
                 try {
                     downloadManifestOutputStream = new FileOutputStream("mcmanifest.json");
                 } catch (FileNotFoundException ex) {
-                    appLogger.debug(LocalizationManager.getLocalizedString("configcheck.log.debug.isminecraftversioncorrect"), ex);
+                    appLogger.debug(localizationManager.getLocalizedString("configcheck.log.debug.isminecraftversioncorrect"), ex);
                     File file = new File("mcmanifest.json");
                     if (!file.exists()) {
-                        appLogger.info(LocalizationManager.getLocalizedString("configcheck.log.info.isminecraftversioncorrect.create"));
+                        appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.isminecraftversioncorrect.create"));
                         boolean jsonCreated = file.createNewFile();
                         if (jsonCreated) {
-                            appLogger.info(LocalizationManager.getLocalizedString("configcheck.log.info.isminecraftversioncorrect.created"));
+                            appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.isminecraftversioncorrect.created"));
                         } else {
-                            appLogger.error(LocalizationManager.getLocalizedString("configcheck.log.error.isminecraftversioncorrect.parse"));
+                            appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.isminecraftversioncorrect.parse"));
                         }
                     }
                     downloadManifestOutputStream = new FileOutputStream("mcmanifest.json");
@@ -524,11 +720,11 @@ public class ConfigCheck {
                 manifestJsonFile.deleteOnExit();
                 return contains;
             } catch (Exception ex) {
-                appLogger.error(String.format(LocalizationManager.getLocalizedString("configcheck.log.error.isminecraftversioncorrect.validate"), minecraftVersion), ex);
+                appLogger.error(String.format(localizationManager.getLocalizedString("configcheck.log.error.isminecraftversioncorrect.validate"), minecraftVersion), ex);
                 return false;
             }
         } else {
-            appLogger.error(LocalizationManager.getLocalizedString("configcheck.log.error.isminecraftversioncorrect.empty"));
+            appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.isminecraftversioncorrect.empty"));
             return false;
         }
     }
@@ -539,22 +735,22 @@ public class ConfigCheck {
      */
     boolean isFabricVersionCorrect(String fabricVersion) {
         try {
-            URL manifestJsonURL = new URL(Reference.getFabricManifestUrl());
+            URL manifestJsonURL = new URL(getFabricManifestUrl());
             ReadableByteChannel readableByteChannel = Channels.newChannel(manifestJsonURL.openStream());
             FileOutputStream downloadManifestOutputStream;
 
             try {
                 downloadManifestOutputStream = new FileOutputStream("fabric-manifest.xml");
             } catch (FileNotFoundException ex) {
-                appLogger.debug(LocalizationManager.getLocalizedString("configcheck.log.debug.isfabricversioncorrect"), ex);
+                appLogger.debug(localizationManager.getLocalizedString("configcheck.log.debug.isfabricversioncorrect"), ex);
                 File file = new File("fabric-manifest.xml");
                 if (!file.exists()){
-                    appLogger.info(LocalizationManager.getLocalizedString("configcheck.log.info.isfabricversioncorrect.create"));
+                    appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.isfabricversioncorrect.create"));
                     boolean jsonCreated = file.createNewFile();
                     if (jsonCreated) {
-                        appLogger.info(LocalizationManager.getLocalizedString("configcheck.log.info.isfabricversioncorrect.created"));
+                        appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.isfabricversioncorrect.created"));
                     } else {
-                        appLogger.error(LocalizationManager.getLocalizedString("configcheck.log.error.isfabricversioncorrect.parse"));
+                        appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.isfabricversioncorrect.parse"));
                     }
                 }
                 downloadManifestOutputStream = new FileOutputStream("fabric-manifest.xml");
@@ -583,7 +779,7 @@ public class ConfigCheck {
             manifestXMLFile.deleteOnExit();
             return contains;
         } catch (Exception ex) {
-            appLogger.error(LocalizationManager.getLocalizedString("configcheck.log.error.isfabricversioncorrect.validate"), ex);
+            appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.isfabricversioncorrect.validate"), ex);
             return false;
         }
     }
@@ -594,22 +790,22 @@ public class ConfigCheck {
      */
     boolean isForgeVersionCorrect(String forgeVersion) {
         try {
-            URL manifestJsonURL = new URL(Reference.getForgeManifestUrl());
+            URL manifestJsonURL = new URL(getForgeManifestUrl());
             ReadableByteChannel readableByteChannel = Channels.newChannel(manifestJsonURL.openStream());
             FileOutputStream downloadManifestOutputStream;
 
             try {
                 downloadManifestOutputStream = new FileOutputStream("forge-manifest.json");
             } catch (FileNotFoundException ex) {
-                appLogger.debug(LocalizationManager.getLocalizedString("configcheck.log.debug.isforgeversioncorrect"), ex);
+                appLogger.debug(localizationManager.getLocalizedString("configcheck.log.debug.isforgeversioncorrect"), ex);
                 File file = new File("forge-manifest.json");
                 if (!file.exists()){
-                    appLogger.info(LocalizationManager.getLocalizedString("configcheck.log.info.isforgeversioncorrect.create"));
+                    appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.isforgeversioncorrect.create"));
                     boolean jsonCreated = file.createNewFile();
                     if (jsonCreated) {
-                        appLogger.info(LocalizationManager.getLocalizedString("configcheck.log.info.isforgeversioncorrect.created"));
+                        appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.isforgeversioncorrect.created"));
                     } else {
-                        appLogger.error(LocalizationManager.getLocalizedString("configcheck.log.error.isforgeversioncorrect.parse"));
+                        appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.isforgeversioncorrect.parse"));
                     }
                 }
                 downloadManifestOutputStream = new FileOutputStream("forge-manifest.json");
@@ -637,7 +833,7 @@ public class ConfigCheck {
 
             return manifestJSON.trim().contains(String.format("%s", forgeVersion));
         } catch (Exception ex) {
-            appLogger.error(LocalizationManager.getLocalizedString("configcheck.log.error.isforgeversioncorrect.validate"), ex);
+            appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.isforgeversioncorrect.validate"), ex);
             return false;
         }
     }
@@ -650,7 +846,7 @@ public class ConfigCheck {
     private String latestFabricLoader(String modpackDir) {
         String result = "0.11.3";
         try {
-            URL downloadFabricXml = new URL(Reference.getFabricManifestUrl());
+            URL downloadFabricXml = new URL(getFabricManifestUrl());
             ReadableByteChannel downloadFabricXmlReadableByteChannel = Channels.newChannel(downloadFabricXml.openStream());
 
             FileOutputStream downloadFabricXmlFileOutputStream = new FileOutputStream(String.format("%s/server_pack/fabric-loader.xml", modpackDir));
@@ -669,11 +865,347 @@ public class ConfigCheck {
             XPath xpath = xPathFactory.newXPath();
 
             result = (String) xpath.evaluate("/metadata/versioning/release", fabricXml, XPathConstants.STRING);
-            appLogger.info(LocalizationManager.getLocalizedString("configcheck.log.info.latestfabricloader.created"));
+            appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.latestfabricloader.created"));
         } catch (IOException | ParserConfigurationException | SAXException | XPathExpressionException ex) {
-            appLogger.error(LocalizationManager.getLocalizedString("configcheck.log.error.latestfabricloader.parse"), ex);
+            appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.latestfabricloader.parse"), ex);
         } finally {
             return result;
         }
     }
+
+    /**
+     * Generate new configuration file from CLI input. Prompts user to enter config file values and then generates a config file with values entered by user.
+     */
+    void createConfigurationFile() {
+        List<String> clientMods,
+                copyDirs;
+
+        clientMods = new ArrayList<>(0);
+        copyDirs = new ArrayList<>(0);
+
+        String[] tmpClientMods,
+                tmpCopyDirs;
+        boolean includeServerInstallation,
+                includeServerIcon,
+                includeServerProperties,
+                includeStartScripts,
+                includeZipCreation;
+        String modpackDir,
+                javaPath,
+                minecraftVersion,
+                modLoader,
+                modLoaderVersion,
+                tmpModpackDir;
+
+        Scanner reader = new Scanner(System.in);
+        appLogger.info(String.format(localizationManager.getLocalizedString("clisetup.log.info.start"), "-cgen"));
+        do {
+//--------------------------------------------------------------------------------------------MODPACK DIRECTORY---------
+            appLogger.info(localizationManager.getLocalizedString("clisetup.log.info.modpack.enter"));
+            appLogger.info(localizationManager.getLocalizedString("clisetup.log.info.modpack.example"));
+
+            do {
+                System.out.print(localizationManager.getLocalizedString("clisetup.log.info.modpack.cli"));
+                tmpModpackDir = reader.nextLine();
+            } while (!checkModpackDir(tmpModpackDir));
+
+            modpackDir = tmpModpackDir.replace("\\", "/");
+            appLogger.info(String.format(localizationManager.getLocalizedString("clisetup.log.info.checkreturn"), modpackDir));
+            System.out.println();
+
+//-----------------------------------------------------------------------------------------CLIENTSIDE-ONLY MODS---------
+            appLogger.info(localizationManager.getLocalizedString("clisetup.log.info.clientmods.enter"));
+            do {
+                clientMods.addAll(readStringArray());
+                appLogger.info(String.format(localizationManager.getLocalizedString("clisetup.log.info.checkreturn"), clientMods));
+                appLogger.info(localizationManager.getLocalizedString("clisetup.log.info.clientmods.checkreturninfo"));
+                System.out.print(localizationManager.getLocalizedString("clisetup.log.info.answer"));
+            } while (!readBoolean());
+            appLogger.info(String.format(localizationManager.getLocalizedString("clisetup.log.info.checkreturn"), clientMods));
+            tmpClientMods = new String[clientMods.size()];
+            clientMods.toArray(tmpClientMods);
+            System.out.println();
+
+//---------------------------------------------------------------------------DIRECTORIES TO COPY TO SERVER PACK---------
+            appLogger.info(localizationManager.getLocalizedString("clisetup.log.info.copydirs.enter"));
+            do {
+                do {
+                    copyDirs.clear();
+                    appLogger.info(localizationManager.getLocalizedString("clisetup.log.info.copydirs.specify"));
+                    copyDirs.addAll(readStringArray());
+
+                } while (!checkCopyDirs(copyDirs, modpackDir));
+
+                appLogger.info(String.format(localizationManager.getLocalizedString("clisetup.log.info.checkreturn"), copyDirs));
+                appLogger.info(localizationManager.getLocalizedString("clisetup.log.info.copydirs.checkreturninfo"));
+                System.out.print(localizationManager.getLocalizedString("clisetup.log.info.answer"));
+            } while (!readBoolean());
+            appLogger.info(String.format(localizationManager.getLocalizedString("clisetup.log.info.checkreturn"), copyDirs));
+            tmpCopyDirs = new String[copyDirs.size()];
+            copyDirs.toArray(tmpCopyDirs);
+            System.out.println();
+
+//-------------------------------------------------------------WHETHER TO INCLUDE MODLOADER SERVER INSTALLATION---------
+            appLogger.info(localizationManager.getLocalizedString("clisetup.log.info.server.enter"));
+            System.out.print(localizationManager.getLocalizedString("clisetup.log.info.server.include"));
+            includeServerInstallation = readBoolean();
+            appLogger.info(String.format(localizationManager.getLocalizedString("clisetup.log.info.checkreturn"), includeServerInstallation));
+
+//-------------------------------------------------------------------------------MINECRAFT VERSION MODPACK USES---------
+            appLogger.info(localizationManager.getLocalizedString("clisetup.log.info.minecraft.enter"));
+            do {
+                System.out.print(localizationManager.getLocalizedString("clisetup.log.info.minecraft.specify"));
+                minecraftVersion = reader.nextLine();
+            } while (!isMinecraftVersionCorrect(minecraftVersion));
+            appLogger.info(String.format(localizationManager.getLocalizedString("clisetup.log.info.checkreturn"), minecraftVersion));
+            System.out.println();
+
+//---------------------------------------------------------------------------------------MODLOADER MODPACK USES---------
+            appLogger.info(localizationManager.getLocalizedString("clisetup.log.info.modloader.enter"));
+            do {
+                System.out.print(localizationManager.getLocalizedString("clisetup.log.info.modloader.cli"));
+                modLoader = reader.nextLine();
+            } while (!checkModloader(modLoader));
+            modLoader = setModloader(modLoader);
+            appLogger.info(String.format(localizationManager.getLocalizedString("clisetup.log.info.checkreturn"), modLoader));
+            System.out.println();
+
+//----------------------------------------------------------------------------VERSION OF MODLOADER MODPACK USES---------
+            appLogger.info(String.format(localizationManager.getLocalizedString("clisetup.log.info.modloaderversion.enter"), modLoader));
+            do {
+                System.out.print(localizationManager.getLocalizedString("clisetup.log.info.modloaderversion.cli"));
+                modLoaderVersion = reader.nextLine();
+            } while (!checkModloaderVersion(modLoader, modLoaderVersion));
+            appLogger.info(String.format(localizationManager.getLocalizedString("clisetup.log.info.checkreturn"), modLoaderVersion));
+            System.out.println();
+
+//------------------------------------------------------------------------------------PATH TO JAVA INSTALLATION---------
+            appLogger.info(localizationManager.getLocalizedString("clisetup.log.info.java.enter"));
+            appLogger.info(localizationManager.getLocalizedString("clisetup.log.info.java.enter2"));
+            appLogger.info(localizationManager.getLocalizedString("clisetup.log.info.java.example"));
+            do {
+                System.out.print(localizationManager.getLocalizedString("clisetup.log.info.java.cli"));
+                String tmpJavaPath = reader.nextLine();
+                javaPath = getJavaPath(tmpJavaPath);
+            } while (!checkJavaPath(javaPath));
+            System.out.println();
+
+//------------------------------------------------------------WHETHER TO INCLUDE SERVER-ICON.PNG IN SERVER PACK---------
+            appLogger.info(localizationManager.getLocalizedString("clisetup.log.info.icon.enter"));
+            System.out.print(localizationManager.getLocalizedString("clisetup.log.info.icon.cli"));
+            includeServerIcon = readBoolean();
+            appLogger.info(String.format(localizationManager.getLocalizedString("clisetup.log.info.checkreturn"), includeServerIcon));
+            System.out.println();
+
+//----------------------------------------------------------WHETHER TO INCLUDE SERVER.PROPERTIES IN SERVER PACK---------
+            appLogger.info(localizationManager.getLocalizedString("clisetup.log.info.properties.enter"));
+            System.out.print(localizationManager.getLocalizedString("clisetup.log.info.properties.cli"));
+            includeServerProperties = readBoolean();
+            appLogger.info(String.format(localizationManager.getLocalizedString("clisetup.log.info.checkreturn"), includeServerProperties));
+            System.out.println();
+
+//--------------------------------------------------------------WHETHER TO INCLUDE START SCRIPTS IN SERVER PACK---------
+            appLogger.info(localizationManager.getLocalizedString("clisetup.log.info.scripts.enter"));
+            System.out.print(localizationManager.getLocalizedString("clisetup.log.info.scripts.cli"));
+            includeStartScripts = readBoolean();
+            appLogger.info(String.format(localizationManager.getLocalizedString("clisetup.log.info.checkreturn"), includeStartScripts));
+            System.out.println();
+
+//----------------------------------------------------WHETHER TO INCLUDE CREATION OF ZIP-ARCHIVE OF SERVER PACK---------
+            appLogger.info(localizationManager.getLocalizedString("clisetup.log.info.zip.enter"));
+            System.out.print(localizationManager.getLocalizedString("clisetup.log.info.zip.cli"));
+            includeZipCreation = readBoolean();
+            appLogger.info(String.format(localizationManager.getLocalizedString("clisetup.log.info.checkreturn"), includeZipCreation));
+
+//------------------------------------------------------------------------------PRINT CONFIG TO CONSOLE AND LOG---------
+            printConfig(modpackDir,
+                    clientMods,
+                    copyDirs,
+                    includeServerInstallation,
+                    javaPath,
+                    minecraftVersion,
+                    modLoader,
+                    modLoaderVersion,
+                    includeServerIcon,
+                    includeServerProperties,
+                    includeStartScripts,
+                    includeZipCreation);
+            appLogger.info(localizationManager.getLocalizedString("clisetup.log.info.config.enter"));
+            System.out.print(localizationManager.getLocalizedString("clisetup.log.info.answer"));
+        } while (!readBoolean());
+        reader.close();
+
+//-----------------------------------------------------------------------------------------WRITE CONFIG TO FILE---------
+        if (writeConfigToFile(
+                modpackDir,
+                buildString(Arrays.toString(tmpClientMods)),
+                buildString(Arrays.toString(tmpCopyDirs)),
+                includeServerInstallation,
+                javaPath,
+                minecraftVersion,
+                modLoader,
+                modLoaderVersion,
+                includeServerIcon,
+                includeServerProperties,
+                includeStartScripts,
+                includeZipCreation,
+                getConfigFile(),
+                false
+        )) {
+            appLogger.info(localizationManager.getLocalizedString("clisetup.log.info.config.written"));
+        }
+    }
+
+    /** A helper method for config setup. Prompts user to enter the values that will be stored in arrays in config.
+     * @return String List. Returns list with user input values that will be stored in config.
+     */
+    private List<String> readStringArray() {
+        Scanner readerArray = new Scanner(System.in);
+        ArrayList<String> result = new ArrayList<>(1);
+        String stringArray;
+        while (true) {
+            stringArray = readerArray.nextLine();
+            if (stringArray.isEmpty()) {
+                return result;
+            } else {
+                result.add(stringArray);
+            }
+        }
+    }
+
+    /** Converts list of strings into concatenated string.
+     * @param args Strings that will be concatenated into one string
+     * @return String. Returns concatenated string that contains all provided values.
+     */
+    public String buildString(String... args) {
+        StringBuilder stringBuilder = new StringBuilder();
+        stringBuilder.append(Arrays.toString(args));
+        stringBuilder.delete(0, 2).reverse().delete(0,2).reverse();
+        return stringBuilder.toString();
+    }
+
+    /** A helper method for config setup. Prompts user to enter boolean values that will be stored in config and checks entered values to prevent storing non-boolean values in boolean variables.
+     * @return Boolean. Converts to boolean and returns value entered by user that will be stored in config.
+     */
+    private boolean readBoolean() {
+        Scanner readerBoolean = new Scanner(System.in);
+        String boolRead;
+        while (true) {
+            boolRead = readerBoolean.nextLine();
+            if (boolRead.matches("[Tt]rue") ||
+                    boolRead.matches("[Yy]es")  ||
+                    boolRead.matches("[Yy]")    ||
+                    boolRead.matches("1")                                                           ||
+                    boolRead.matches(localizationManager.getLocalizedString("cli.input.true")) ||
+                    boolRead.matches(localizationManager.getLocalizedString("cli.input.yes"))  ||
+                    boolRead.matches(localizationManager.getLocalizedString("cli.input.yes.short"))) {
+                return true;
+
+            } else if (boolRead.matches("[Ff]alse") ||
+                    boolRead.matches("[Nn]o")    ||
+                    boolRead.matches("[Nn]" )    ||
+                    boolRead.matches("0")                                                            ||
+                    boolRead.matches(localizationManager.getLocalizedString("cli.input.false")) ||
+                    boolRead.matches(localizationManager.getLocalizedString("cli.input.no"))    ||
+                    boolRead.matches(localizationManager.getLocalizedString("cli.input.no.short"))) {
+                return false;
+
+            } else {
+                appLogger.error(localizationManager.getLocalizedString("clisetup.log.error.answer"));
+            }
+        }
+    }
+
+    /** Writes a new configuration file with the parameters passed to it.
+     * @param modpackDir String. The path to the modpack.
+     * @param clientMods List, String. List of clientside-only mods.
+     * @param copyDirs List, String. List of directories to include in server pack.
+     * @param includeServer Boolean. Whether to include a modloader server installation.
+     * @param javaPath String. Path to the java executable.
+     * @param minecraftVersion String. Minecraft version used by the modpack and server pack.
+     * @param modLoader String. Modloader used by the modpack and server pack. Ether Forge or Fabric.
+     * @param modLoaderVersion String. Modloader version used by the modpack and server pack.
+     * @param includeIcon Boolean. Whether to include a server-icon in the server pack.
+     * @param includeProperties Boolean. Whether to include a properties file in the server pack.
+     * @param includeScripts Boolean. Whether to include start scripts in the server pack.
+     * @param includeZip Boolean. Whether to create a ZIP-archive of the server pack, excluding Mojang's Minecraft server jar.
+     * @param fileName The name under which to write the new file.
+     * @param isTemporary Decides whether to delete existing config-file. If isTemporary is false, existing config files will be deleted before writing the new file.
+     * @return Boolean. Returns true if the configuration file has been successfully written and old ones replaced.
+     */
+    public boolean writeConfigToFile(String modpackDir,
+                                     String clientMods,
+                                     String copyDirs,
+                                     boolean includeServer,
+                                     String javaPath,
+                                     String minecraftVersion,
+                                     String modLoader,
+                                     String modLoaderVersion,
+                                     boolean includeIcon,
+                                     boolean includeProperties,
+                                     boolean includeScripts,
+                                     boolean includeZip,
+                                     File fileName,
+                                     boolean isTemporary) {
+
+        boolean configWritten = false;
+
+        String configString = String.format(
+                "%s\"%s\"\n\n%s[%s]\n\n%s[%s]\n\n%s%b\n\n%s\"%s\"\n\n%s\"%s\"\n\n%s\"%s\"\n\n%s\"%s\"\n\n%s%b\n\n%s%b\n\n%s%b\n\n%s%b",
+                localizationManager.getLocalizedString("filessetup.writeconfigtofile.modpackdir"),
+                modpackDir.replace("\\","/"),
+                localizationManager.getLocalizedString("filessetup.writeconfigtofile.clientmods"),
+                clientMods,
+                localizationManager.getLocalizedString("filessetup.writeconfigtofile.copydirs"),
+                copyDirs,
+                localizationManager.getLocalizedString("filessetup.writeconfigtofile.includeserverinstallation"),
+                includeServer,
+                localizationManager.getLocalizedString("filessetup.writeconfigtofile.javapath"),
+                javaPath.replace("\\","/"),
+                localizationManager.getLocalizedString("filessetup.writeconfigtofile.minecraftversion"),
+                minecraftVersion,
+                localizationManager.getLocalizedString("filessetup.writeconfigtofile.modloader"),
+                modLoader,
+                localizationManager.getLocalizedString("filessetup.writeconfigtofile.modloaderversion"),
+                modLoaderVersion,
+                localizationManager.getLocalizedString("filessetup.writeconfigtofile.includeservericon"),
+                includeIcon,
+                localizationManager.getLocalizedString("filessetup.writeconfigtofile.includeserverproperties"),
+                includeProperties,
+                localizationManager.getLocalizedString("filessetup.writeconfigtofile.includestartscripts"),
+                includeScripts,
+                localizationManager.getLocalizedString("filessetup.writeconfigtofile.includezipcreation"),
+                includeZip
+        );
+
+        if (!isTemporary) {
+            if (getConfigFile().exists()) {
+                boolean delConf = getConfigFile().delete();
+                if (delConf) {
+                    appLogger.info(localizationManager.getLocalizedString("filessetup.log.info.writeconfigtofile.config"));
+                } else {
+                    appLogger.error(localizationManager.getLocalizedString("filessetup.log.error.writeconfigtofile.config"));
+                }
+            }
+            if (getOldConfigFile().exists()) {
+                boolean delOldConf = getOldConfigFile().delete();
+                if (delOldConf) {
+                    appLogger.info(localizationManager.getLocalizedString("filessetup.log.info.writeconfigtofile.old"));
+                } else {
+                    appLogger.error(localizationManager.getLocalizedString("filessetup.log.error.writeconfigtofile.old"));
+                }
+            }
+        }
+
+        try {
+            BufferedWriter writer = new BufferedWriter(new FileWriter(fileName));
+            writer.write(configString);
+            writer.close();
+            configWritten = true;
+        } catch (IOException ex) {
+            appLogger.error(localizationManager.getLocalizedString("filessetup.log.error.writeconfigtofile"), ex);
+        }
+
+        return configWritten;
+    }
 }
\ No newline at end of file
diff --git a/src/main/java/de/griefed/serverpackcreator/CopyFiles.java b/src/main/java/de/griefed/serverpackcreator/CopyFiles.java
deleted file mode 100644
index 31d040995..000000000
--- a/src/main/java/de/griefed/serverpackcreator/CopyFiles.java
+++ /dev/null
@@ -1,261 +0,0 @@
-package de.griefed.serverpackcreator;
-
-import de.griefed.serverpackcreator.i18n.LocalizationManager;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
-import java.io.File;
-import java.io.IOException;
-import java.nio.file.*;
-import java.nio.file.attribute.BasicFileAttributes;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
-
-class CopyFiles {
-    private static final Logger appLogger = LogManager.getLogger(CopyFiles.class);
-
-    /** Deletes files from previous runs of serverpackcreator.
-     * @param modpackDir String. The directory in where to check for files from previous runs.
-     */
-    void cleanupEnvironment(String modpackDir) {
-        if (new File(String.format("%s/server_pack", modpackDir)).exists()) {
-            appLogger.info(LocalizationManager.getLocalizedString("copyfiles.log.info.cleanupenvironment.folder.enter"));
-            Path serverPack = Paths.get(String.format("%s/server_pack", modpackDir));
-            try {
-                Files.walkFileTree(serverPack,
-                        new SimpleFileVisitor<Path>() {
-                            @Override
-                            public FileVisitResult postVisitDirectory(
-                                    Path dir, IOException exc) throws IOException {
-                                Files.delete(dir);
-                                return FileVisitResult.CONTINUE;
-                            }
-                            @Override
-                            public FileVisitResult visitFile(
-                                    Path file, BasicFileAttributes attrs)
-                                    throws IOException {
-                                Files.delete(file);
-                                return FileVisitResult.CONTINUE;
-                            }
-                        });
-            } catch (IOException ex) {
-                appLogger.error(String.format(LocalizationManager.getLocalizedString("copyfiles.log.error.cleanupenvironment.folder.delete"), modpackDir));
-            } finally {
-                appLogger.info(LocalizationManager.getLocalizedString("copyfiles.log.info.cleanupenvironment.folder.complete"));
-            }
-        }
-        if (new File(String.format("%s/server_pack.zip", modpackDir)).exists()) {
-            appLogger.info(LocalizationManager.getLocalizedString("copyfiles.log.info.cleanupenvironment.zip.enter"));
-            boolean isZipDeleted = new File(String.format("%s/server_pack.zip", modpackDir)).delete();
-            if (isZipDeleted) {
-                appLogger.info(LocalizationManager.getLocalizedString("copyfiles.log.info.cleanupenvironment.zip.complete"));
-            } else {
-                appLogger.error(LocalizationManager.getLocalizedString("copyfiles.log.error.cleanupenvironment.zip.delete"));
-            }
-        }
-    }
-
-    /** Copies start scripts for Forge modloader into the server_pack folder.
-     * @param modpackDir String. Files will be copied into subfolder server_pack. Checks for valid modpackDir are in ConfigCheck.
-     * @param modLoader String. Determines whether start scripts for Forge or Fabric are copied to modpackDir. Checks for valid modLoader are in ConfigCheck.
-     * @param includeStartScripts Boolean. Whether to include start scripts in server_pack. Boolean.
-     */
-    void copyStartScripts(String modpackDir, String modLoader, boolean includeStartScripts) {
-        if (modLoader.equalsIgnoreCase("Forge") && includeStartScripts) {
-            appLogger.info(LocalizationManager.getLocalizedString("copyfiles.log.info.copystartscripts.forge"));
-            try {
-                Files.copy(
-                        Paths.get(String.format("./server_files/%s", Reference.getForgeWindowsFile())),
-                        Paths.get(String.format("%s/server_pack/%s", modpackDir, Reference.getForgeWindowsFile())),
-                        REPLACE_EXISTING
-                );
-                Files.copy(
-                        Paths.get(String.format("./server_files/%s", Reference.getForgeLinuxFile())),
-                        Paths.get(String.format("%s/server_pack/%s", modpackDir, Reference.getForgeLinuxFile())),
-                        REPLACE_EXISTING
-                );
-            } catch (IOException ex) {
-                appLogger.error(LocalizationManager.getLocalizedString("copyfiles.log.error.copystartscripts"), ex);
-            }
-        } else if (modLoader.equalsIgnoreCase("Fabric") && includeStartScripts) {
-            appLogger.info(LocalizationManager.getLocalizedString("copyfiles.log.info.copystartscripts.fabric"));
-            try {
-                Files.copy(
-                        Paths.get(String.format("./server_files/%s", Reference.getFabricWindowsFile())),
-                        Paths.get(String.format("%s/server_pack/%s", modpackDir, Reference.getFabricWindowsFile())),
-                        REPLACE_EXISTING
-                );
-                Files.copy(
-                        Paths.get(String.format("./server_files/%s", Reference.getFabricLinuxFile())),
-                        Paths.get(String.format("%s/server_pack/%s", modpackDir, Reference.getFabricLinuxFile())),
-                        REPLACE_EXISTING
-                );
-            } catch (IOException ex) {
-                appLogger.error(LocalizationManager.getLocalizedString("copyfiles.log.error.copystartscripts"), ex);
-            }
-        } else {
-            appLogger.error(LocalizationManager.getLocalizedString("configcheck.log.error.checkmodloader"));
-        }
-    }
-
-    /** Copies all specified folders and their files to the modpackDir.
-     * @param modpackDir String. /server_pack. Directory where all directories listed in copyDirs will be copied into.
-     * @param copyDirs String List. The folders and files within to copy.
-     * @param clientMods String List. List of clientside-only mods NOT to copy to server pack.
-     * @throws IOException Only print stacktrace if it does not start with java.nio.file.DirectoryNotEmptyException.
-     */
-    void copyFiles(String modpackDir, List<String> copyDirs, List<String> clientMods) throws IOException {
-        String serverPath = String.format("%s/server_pack", modpackDir);
-        Files.createDirectories(Paths.get(serverPath));
-        for (int i = 0; i < copyDirs.size(); i++) {
-            String clientDir = String.format("%s/%s", modpackDir,copyDirs.get(i));
-            String serverDir = String.format("%s/%s", serverPath,copyDirs.get(i));
-            appLogger.info(String.format(LocalizationManager.getLocalizedString("copyfiles.log.info.copyfiles.setup"), serverDir));
-            if (copyDirs.get(i).startsWith("saves/")) {
-                String savesDir = String.format("%s/%s", serverPath, copyDirs.get(i).substring(6));
-                try {
-                    Stream<Path> files = Files.walk(Paths.get(clientDir));
-                    files.forEach(file -> {
-                        try {
-
-                            Files.copy(
-                                    file,
-                                    Paths.get(savesDir).resolve(Paths.get(clientDir).relativize(file)),
-                                    REPLACE_EXISTING
-                            );
-
-                            appLogger.debug(String.format(LocalizationManager.getLocalizedString("copyfiles.log.debug.copyfiles"), file.toAbsolutePath().toString()));
-
-                        } catch (IOException ex) {
-                            if (!ex.toString().startsWith("java.nio.file.DirectoryNotEmptyException")) {
-                                appLogger.error(LocalizationManager.getLocalizedString("copyfiles.log.error.copyfiles.saves"), ex);
-                            }
-                        }
-                    });
-                } catch (IOException ex) {
-                    appLogger.error(LocalizationManager.getLocalizedString("copyfiles.log.error.copyfiles.saves.world"), ex);
-                }
-            } else if (copyDirs.get(i).startsWith("mods") && clientMods.size() > 0) {
-                List<String> listOfFiles = excludeClientMods(clientDir, clientMods);
-                Files.createDirectories(Paths.get(serverDir));
-                for (int in = 0; in < listOfFiles.size(); in++) {
-                    try {
-
-                        Files.copy(
-                                Paths.get(listOfFiles.get(in)),
-                                Paths.get(String.format("%s/%s",serverDir, new File(listOfFiles.get(in)).getName())),
-                                REPLACE_EXISTING
-                        );
-
-                        appLogger.debug(String.format(LocalizationManager.getLocalizedString("copyfiles.log.debug.copyfiles"), listOfFiles.get(in)));
-
-                    } catch (IOException ex) {
-                        if (!ex.toString().startsWith("java.nio.file.DirectoryNotEmptyException")) {
-                            appLogger.error(LocalizationManager.getLocalizedString("copyfiles.log.error.copyfiles.mods"), ex);
-                        }
-                    }
-                }
-            } else {
-                try {
-                    Stream<Path> files = Files.walk(Paths.get(clientDir));
-                    files.forEach(file -> {
-                        try {
-
-                            Files.copy(
-                                    file,
-                                    Paths.get(serverDir).resolve(Paths.get(clientDir).relativize(file)),
-                                    REPLACE_EXISTING
-                            );
-
-                            appLogger.debug(String.format(LocalizationManager.getLocalizedString("copyfiles.log.debug.copyfiles"), file.toAbsolutePath().toString()));
-                        } catch (IOException ex) {
-                            if (!ex.toString().startsWith("java.nio.file.DirectoryNotEmptyException")) {
-                                appLogger.error(LocalizationManager.getLocalizedString("copyfiles.log.error.copyfiles.mods"), ex);
-                            }
-                        }
-                    });
-                    files.close();
-                } catch (IOException ex) {
-                    appLogger.error(LocalizationManager.getLocalizedString("copyfiles.log.error.copyfiles"), ex);
-                }
-            }
-        }
-    }
-
-    /** Generate a list of all mods in a modpack EXCEPT clientside-only mods. This list is then used by copyFiles.
-     * @param modsDir String. /mods The directory in which to generate a list of all available mods.
-     * @param clientMods List String. A list of all clientside-only mods passed by copyFiles, which is then removed from the list generated in this method.
-     * @return List String. A list of all mods inside the modpack excluding the specified clientside-only mods.
-     */
-    @SuppressWarnings("UnusedAssignment")
-    private List<String> excludeClientMods(String modsDir, List<String> clientMods) {
-        appLogger.info(LocalizationManager.getLocalizedString("copyfiles.log.info.excludeclientmods"));
-        String[] copyMods = new String[0];
-        List<String> modpackModList = new ArrayList<>();
-
-        try (Stream<Path> walk = Files.walk(Paths.get(modsDir))) {
-
-            modpackModList = walk.filter(Files::isRegularFile).map(Path::toString).collect(Collectors.toList());
-
-            for (int in = 0; in < modpackModList.size(); in++) {
-
-                for (int i = 0; i < clientMods.size(); i++) {
-
-                    String modpackMod = modpackModList.get(in);
-                    String clientMod = clientMods.get(i);
-
-                    if (modpackMod.contains(clientMod)) {
-                        modpackModList.remove(in);
-                    }
-                }
-            }
-            copyMods = modpackModList.toArray(new String[0]);
-            return Arrays.asList(copyMods.clone());
-
-        } catch (IOException ex) {
-            appLogger.error(LocalizationManager.getLocalizedString("copyfiles.log.error.excludeclientmods"), ex);
-        }
-        return Arrays.asList(copyMods.clone());
-    }
-
-    /** Copies the server-icon.png into server_pack.
-     * @param modpackDir String. /server_pack. Directory where the server-icon.png will be copied to.
-     */
-    void copyIcon(String modpackDir) {
-        appLogger.info(LocalizationManager.getLocalizedString("copyfiles.log.info.copyicon"));
-        try {
-
-            Files.copy(
-                    Paths.get(String.format("./server_files/%s", Reference.getIconFile())),
-                    Paths.get(String.format("%s/server_pack/%s", modpackDir, Reference.getIconFile())),
-                    REPLACE_EXISTING
-            );
-
-        } catch (IOException ex) {
-            appLogger.error(LocalizationManager.getLocalizedString("copyfiles.log.error.copyicon"), ex);
-        }
-    }
-
-    /** Copies the server.properties into server_pack.
-     * @param modpackDir String. /server_pack. Directory where the server.properties. will be copied to.
-     */
-    void copyProperties(String modpackDir) {
-        appLogger.info(LocalizationManager.getLocalizedString("copyfiles.log.info.copyproperties"));
-        try {
-
-            Files.copy(
-                    Paths.get(String.format("./server_files/%s", Reference.getPropertiesFile())),
-                    Paths.get(String.format("%s/server_pack/%s", modpackDir, Reference.getPropertiesFile())),
-                    REPLACE_EXISTING
-            );
-
-        } catch (IOException ex) {
-            appLogger.error(LocalizationManager.getLocalizedString("copyfiles.log.error.copyproperties"), ex);
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java b/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
new file mode 100644
index 000000000..110e922d5
--- /dev/null
+++ b/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
@@ -0,0 +1,824 @@
+package de.griefed.serverpackcreator;
+
+import de.griefed.serverpackcreator.i18n.LocalizationManager;
+import net.fabricmc.installer.util.LauncherMeta;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.w3c.dom.Document;
+import org.xml.sax.SAXException;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.xpath.XPath;
+import javax.xml.xpath.XPathConstants;
+import javax.xml.xpath.XPathExpressionException;
+import javax.xml.xpath.XPathFactory;
+import java.io.*;
+import java.net.URI;
+import java.net.URL;
+import java.nio.channels.Channels;
+import java.nio.channels.FileChannel;
+import java.nio.channels.ReadableByteChannel;
+import java.nio.file.*;
+import java.nio.file.attribute.BasicFileAttributes;
+import java.util.*;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
+
+import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
+
+public class CreateServerPack {
+    private static final Logger appLogger = LogManager.getLogger(FilesSetup.class);
+    private static final Logger installerLogger = LogManager.getLogger("InstallerLogger");
+
+    private ConfigCheck configCheck;
+    private LocalizationManager localizationManager;
+    private final File propertiesFile    = new File("server.properties");
+    private final File iconFile          = new File("server-icon.png");
+    private final File forgeWindowsFile  = new File("start-forge.bat");
+    private final File forgeLinuxFile    = new File("start-forge.sh");
+    private final File fabricWindowsFile = new File("start-fabric.bat");
+    private final File fabricLinuxFile   = new File("start-fabric.sh");
+
+
+    public CreateServerPack(LocalizationManager injectedLocalizationManager, ConfigCheck injectedConfigCheck) {
+        if (injectedLocalizationManager == null) {
+            this.localizationManager = new LocalizationManager();
+        }
+
+        this.localizationManager = injectedLocalizationManager;
+
+        if (injectedConfigCheck == null) {
+            this.configCheck = new ConfigCheck(localizationManager);
+        }
+
+        this.configCheck = injectedConfigCheck;
+    }
+
+    public File getPropertiesFile() {
+        return propertiesFile;
+    }
+
+    public File getIconFile() {
+        return iconFile;
+    }
+
+    public File getForgeWindowsFile() {
+        return forgeWindowsFile;
+    }
+
+    public File getForgeLinuxFile() {
+        return forgeLinuxFile;
+    }
+
+    public File getFabricWindowsFile() {
+        return fabricWindowsFile;
+    }
+
+    public File getFabricLinuxFile() {
+        return fabricLinuxFile;
+    }
+
+    /**
+     * Run when serverpackcreator is run in either -cli or -cgen mode. Runs what used to be the main content in Main in pre-1.x.x. times. Inits config checks and, if config checks are successfull, calls methods to create the server pack.
+     * @return Return true if the serverpack was successfully generated, false if not.
+     */
+    public boolean run() {
+        if (!configCheck.checkConfigFile(configCheck.getConfigFile())) {
+            cleanupEnvironment(configCheck.getModpackDir());
+            try {
+                copyFiles(configCheck.getModpackDir(), configCheck.getCopyDirs(), configCheck.getClientMods());
+            } catch (IOException ex) {
+                appLogger.error(localizationManager.getLocalizedString("handler.log.error.runincli.copyfiles"), ex);
+            }
+            copyStartScripts(configCheck.getModpackDir(), configCheck.getModLoader(), configCheck.getIncludeStartScripts());
+            if (configCheck.getIncludeServerInstallation()) {
+                installServer(configCheck.getModLoader(), configCheck.getModpackDir(), configCheck.getMinecraftVersion(), configCheck.getModLoaderVersion(), configCheck.getJavaPath());
+            } else {
+                appLogger.info(localizationManager.getLocalizedString("handler.log.info.runincli.server"));
+            }
+            if (configCheck.getIncludeServerIcon()) {
+                copyIcon(configCheck.getModpackDir());
+            } else {
+                appLogger.info(localizationManager.getLocalizedString("handler.log.info.runincli.icon"));
+            }
+            if (configCheck.getIncludeServerProperties()) {
+                copyProperties(configCheck.getModpackDir());
+            } else {
+                appLogger.info(localizationManager.getLocalizedString("handler.log.info.runincli.properties"));
+            }
+            if (configCheck.getIncludeZipCreation()) {
+                zipBuilder(configCheck.getModpackDir(), configCheck.getModLoader(), configCheck.getIncludeServerInstallation());
+            } else {
+                appLogger.info(localizationManager.getLocalizedString("handler.log.info.runincli.zip"));
+            }
+            appLogger.info(String.format(localizationManager.getLocalizedString("handler.log.info.runincli.serverpack"), configCheck.getModpackDir()));
+            appLogger.info(String.format(localizationManager.getLocalizedString("handler.log.info.runincli.archive"), configCheck.getModpackDir()));
+            appLogger.info(localizationManager.getLocalizedString("handler.log.info.runincli.finish"));
+            return true;
+        } else {
+            appLogger.error(localizationManager.getLocalizedString("handler.log.error.runincli"));
+            return false;
+        }
+    }
+
+    /** Deletes files from previous runs of serverpackcreator.
+     * @param modpackDir String. The directory in where to check for files from previous runs.
+     */
+    void cleanupEnvironment(String modpackDir) {
+        if (new File(String.format("%s/server_pack", modpackDir)).exists()) {
+            appLogger.info(localizationManager.getLocalizedString("copyfiles.log.info.cleanupenvironment.folder.enter"));
+            Path serverPack = Paths.get(String.format("%s/server_pack", modpackDir));
+            try {
+                Files.walkFileTree(serverPack,
+                        new SimpleFileVisitor<Path>() {
+                            @Override
+                            public FileVisitResult postVisitDirectory(
+                                    Path dir, IOException exc) throws IOException {
+                                Files.delete(dir);
+                                return FileVisitResult.CONTINUE;
+                            }
+                            @Override
+                            public FileVisitResult visitFile(
+                                    Path file, BasicFileAttributes attrs)
+                                    throws IOException {
+                                Files.delete(file);
+                                return FileVisitResult.CONTINUE;
+                            }
+                        });
+            } catch (IOException ex) {
+                appLogger.error(String.format(localizationManager.getLocalizedString("copyfiles.log.error.cleanupenvironment.folder.delete"), modpackDir));
+            } finally {
+                appLogger.info(localizationManager.getLocalizedString("copyfiles.log.info.cleanupenvironment.folder.complete"));
+            }
+        }
+        if (new File(String.format("%s/server_pack.zip", modpackDir)).exists()) {
+            appLogger.info(localizationManager.getLocalizedString("copyfiles.log.info.cleanupenvironment.zip.enter"));
+            boolean isZipDeleted = new File(String.format("%s/server_pack.zip", modpackDir)).delete();
+            if (isZipDeleted) {
+                appLogger.info(localizationManager.getLocalizedString("copyfiles.log.info.cleanupenvironment.zip.complete"));
+            } else {
+                appLogger.error(localizationManager.getLocalizedString("copyfiles.log.error.cleanupenvironment.zip.delete"));
+            }
+        }
+    }
+
+    /** Copies start scripts for Forge modloader into the server_pack folder.
+     * @param modpackDir String. Files will be copied into subfolder server_pack. Checks for valid modpackDir are in ConfigCheck.
+     * @param modLoader String. Determines whether start scripts for Forge or Fabric are copied to modpackDir. Checks for valid modLoader are in ConfigCheck.
+     * @param includeStartScripts Boolean. Whether to include start scripts in server_pack. Boolean.
+     */
+    void copyStartScripts(String modpackDir, String modLoader, boolean includeStartScripts) {
+        if (modLoader.equalsIgnoreCase("Forge") && includeStartScripts) {
+            appLogger.info(localizationManager.getLocalizedString("copyfiles.log.info.copystartscripts.forge"));
+            try {
+                Files.copy(
+                        Paths.get(String.format("./server_files/%s", getForgeWindowsFile())),
+                        Paths.get(String.format("%s/server_pack/%s", modpackDir, getForgeWindowsFile())),
+                        REPLACE_EXISTING
+                );
+                Files.copy(
+                        Paths.get(String.format("./server_files/%s", getForgeLinuxFile())),
+                        Paths.get(String.format("%s/server_pack/%s", modpackDir, getForgeLinuxFile())),
+                        REPLACE_EXISTING
+                );
+            } catch (IOException ex) {
+                appLogger.error(localizationManager.getLocalizedString("copyfiles.log.error.copystartscripts"), ex);
+            }
+        } else if (modLoader.equalsIgnoreCase("Fabric") && includeStartScripts) {
+            appLogger.info(localizationManager.getLocalizedString("copyfiles.log.info.copystartscripts.fabric"));
+            try {
+                Files.copy(
+                        Paths.get(String.format("./server_files/%s", getFabricWindowsFile())),
+                        Paths.get(String.format("%s/server_pack/%s", modpackDir, getFabricWindowsFile())),
+                        REPLACE_EXISTING
+                );
+                Files.copy(
+                        Paths.get(String.format("./server_files/%s", getFabricLinuxFile())),
+                        Paths.get(String.format("%s/server_pack/%s", modpackDir, getFabricLinuxFile())),
+                        REPLACE_EXISTING
+                );
+            } catch (IOException ex) {
+                appLogger.error(localizationManager.getLocalizedString("copyfiles.log.error.copystartscripts"), ex);
+            }
+        } else {
+            appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.checkmodloader"));
+        }
+    }
+
+    /** Copies all specified folders and their files to the modpackDir.
+     * @param modpackDir String. /server_pack. Directory where all directories listed in copyDirs will be copied into.
+     * @param copyDirs String List. The folders and files within to copy.
+     * @param clientMods String List. List of clientside-only mods NOT to copy to server pack.
+     * @throws IOException Only print stacktrace if it does not start with java.nio.file.DirectoryNotEmptyException.
+     */
+    void copyFiles(String modpackDir, List<String> copyDirs, List<String> clientMods) throws IOException {
+        String serverPath = String.format("%s/server_pack", modpackDir);
+        Files.createDirectories(Paths.get(serverPath));
+        for (int i = 0; i < copyDirs.size(); i++) {
+            String clientDir = String.format("%s/%s", modpackDir,copyDirs.get(i));
+            String serverDir = String.format("%s/%s", serverPath,copyDirs.get(i));
+            appLogger.info(String.format(localizationManager.getLocalizedString("copyfiles.log.info.copyfiles.setup"), serverDir));
+            if (copyDirs.get(i).startsWith("saves/")) {
+                String savesDir = String.format("%s/%s", serverPath, copyDirs.get(i).substring(6));
+                try {
+                    Stream<Path> files = Files.walk(Paths.get(clientDir));
+                    files.forEach(file -> {
+                        try {
+
+                            Files.copy(
+                                    file,
+                                    Paths.get(savesDir).resolve(Paths.get(clientDir).relativize(file)),
+                                    REPLACE_EXISTING
+                            );
+
+                            appLogger.debug(String.format(localizationManager.getLocalizedString("copyfiles.log.debug.copyfiles"), file.toAbsolutePath().toString()));
+
+                        } catch (IOException ex) {
+                            if (!ex.toString().startsWith("java.nio.file.DirectoryNotEmptyException")) {
+                                appLogger.error(localizationManager.getLocalizedString("copyfiles.log.error.copyfiles.saves"), ex);
+                            }
+                        }
+                    });
+                } catch (IOException ex) {
+                    appLogger.error(localizationManager.getLocalizedString("copyfiles.log.error.copyfiles.saves.world"), ex);
+                }
+            } else if (copyDirs.get(i).startsWith("mods") && clientMods.size() > 0) {
+                List<String> listOfFiles = excludeClientMods(clientDir, clientMods);
+                Files.createDirectories(Paths.get(serverDir));
+                for (int in = 0; in < listOfFiles.size(); in++) {
+                    try {
+
+                        Files.copy(
+                                Paths.get(listOfFiles.get(in)),
+                                Paths.get(String.format("%s/%s",serverDir, new File(listOfFiles.get(in)).getName())),
+                                REPLACE_EXISTING
+                        );
+
+                        appLogger.debug(String.format(localizationManager.getLocalizedString("copyfiles.log.debug.copyfiles"), listOfFiles.get(in)));
+
+                    } catch (IOException ex) {
+                        if (!ex.toString().startsWith("java.nio.file.DirectoryNotEmptyException")) {
+                            appLogger.error(localizationManager.getLocalizedString("copyfiles.log.error.copyfiles.mods"), ex);
+                        }
+                    }
+                }
+            } else {
+                try {
+                    Stream<Path> files = Files.walk(Paths.get(clientDir));
+                    files.forEach(file -> {
+                        try {
+
+                            Files.copy(
+                                    file,
+                                    Paths.get(serverDir).resolve(Paths.get(clientDir).relativize(file)),
+                                    REPLACE_EXISTING
+                            );
+
+                            appLogger.debug(String.format(localizationManager.getLocalizedString("copyfiles.log.debug.copyfiles"), file.toAbsolutePath().toString()));
+                        } catch (IOException ex) {
+                            if (!ex.toString().startsWith("java.nio.file.DirectoryNotEmptyException")) {
+                                appLogger.error(localizationManager.getLocalizedString("copyfiles.log.error.copyfiles.mods"), ex);
+                            }
+                        }
+                    });
+                    files.close();
+                } catch (IOException ex) {
+                    appLogger.error(localizationManager.getLocalizedString("copyfiles.log.error.copyfiles"), ex);
+                }
+            }
+        }
+    }
+
+    /** Generate a list of all mods in a modpack EXCEPT clientside-only mods. This list is then used by copyFiles.
+     * @param modsDir String. /mods The directory in which to generate a list of all available mods.
+     * @param clientMods List String. A list of all clientside-only mods passed by copyFiles, which is then removed from the list generated in this method.
+     * @return List String. A list of all mods inside the modpack excluding the specified clientside-only mods.
+     */
+    @SuppressWarnings("UnusedAssignment")
+    List<String> excludeClientMods(String modsDir, List<String> clientMods) {
+        appLogger.info(localizationManager.getLocalizedString("copyfiles.log.info.excludeclientmods"));
+        String[] copyMods = new String[0];
+        List<String> modpackModList = new ArrayList<>();
+
+        try (Stream<Path> walk = Files.walk(Paths.get(modsDir))) {
+
+            modpackModList = walk.filter(Files::isRegularFile).map(Path::toString).collect(Collectors.toList());
+
+            for (int in = 0; in < modpackModList.size(); in++) {
+
+                for (int i = 0; i < clientMods.size(); i++) {
+
+                    String modpackMod = modpackModList.get(in);
+                    String clientMod = clientMods.get(i);
+
+                    if (modpackMod.contains(clientMod)) {
+                        modpackModList.remove(in);
+                    }
+                }
+            }
+            copyMods = modpackModList.toArray(new String[0]);
+            return Arrays.asList(copyMods.clone());
+
+        } catch (IOException ex) {
+            appLogger.error(localizationManager.getLocalizedString("copyfiles.log.error.excludeclientmods"), ex);
+        }
+        return Arrays.asList(copyMods.clone());
+    }
+
+    /** Copies the server-icon.png into server_pack.
+     * @param modpackDir String. /server_pack. Directory where the server-icon.png will be copied to.
+     */
+    void copyIcon(String modpackDir) {
+        appLogger.info(localizationManager.getLocalizedString("copyfiles.log.info.copyicon"));
+        try {
+
+            Files.copy(
+                    Paths.get(String.format("./server_files/%s", getIconFile())),
+                    Paths.get(String.format("%s/server_pack/%s", modpackDir, getIconFile())),
+                    REPLACE_EXISTING
+            );
+
+        } catch (IOException ex) {
+            appLogger.error(localizationManager.getLocalizedString("copyfiles.log.error.copyicon"), ex);
+        }
+    }
+
+    /** Copies the server.properties into server_pack.
+     * @param modpackDir String. /server_pack. Directory where the server.properties. will be copied to.
+     */
+    void copyProperties(String modpackDir) {
+        appLogger.info(localizationManager.getLocalizedString("copyfiles.log.info.copyproperties"));
+        try {
+
+            Files.copy(
+                    Paths.get(String.format("./server_files/%s", getPropertiesFile())),
+                    Paths.get(String.format("%s/server_pack/%s", modpackDir, getPropertiesFile())),
+                    REPLACE_EXISTING
+            );
+
+        } catch (IOException ex) {
+            appLogger.error(localizationManager.getLocalizedString("copyfiles.log.error.copyproperties"), ex);
+        }
+    }
+
+    /** Installs the files for a Forge/Fabric server.
+     * @param modLoader String. The modloader for which to install the server.
+     * @param modpackDir String. /server_pack The directory where the modloader server will be installed in.
+     * @param minecraftVersion String. The Minecraft version for which to install the modloader and Minecraft server.
+     * @param modLoaderVersion String. The modloader version for which to install the modloader and Minecraft server.
+     * @param javaPath String. Path to Java installation needed to execute the Fabric and Forge installers.
+     */
+    void installServer(String modLoader, String modpackDir, String minecraftVersion, String modLoaderVersion, String javaPath) {
+        File fabricInstaller = new File(String.format("%s/server_pack/fabric-installer.jar", modpackDir));
+        File forgeInstaller = new File(String.format("%s/server_pack/forge-installer.jar", modpackDir));
+        if (modLoader.equalsIgnoreCase("Fabric")) {
+            try {
+                appLogger.info(localizationManager.getLocalizedString("serversetup.log.info.installserver.fabric.enter"));
+                installerLogger.info(localizationManager.getLocalizedString("serversetup.log.info.installserver.fabric.enter"));
+                if (downloadFabricJar(modpackDir)) {
+                    appLogger.info(localizationManager.getLocalizedString("serversetup.log.info.installserver.fabric.download"));
+                    ProcessBuilder processBuilder = new ProcessBuilder(
+                            javaPath,
+                            "-jar",
+                            "fabric-installer.jar",
+                            "server",
+                            String.format("-mcversion %s", minecraftVersion),
+                            String.format("-loader %s", modLoaderVersion),
+                            "-downloadMinecraft").directory(new File(String.format("%s/server_pack", modpackDir)));
+                    processBuilder.redirectErrorStream(true);
+                    Process process = processBuilder.start();
+                    BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
+                    String line;
+                    while (true) {
+                        line = reader.readLine();
+                        if (line == null) { break; }
+                        installerLogger.info(line);
+                    }
+                    installerLogger.info(localizationManager.getLocalizedString("serversetup.log.info.installserver"));
+                    reader.close();
+                    appLogger.info(localizationManager.getLocalizedString("serversetup.log.info.installserver.fabric.details"));
+                    appLogger.info(localizationManager.getLocalizedString("serversetup.log.info.installserver"));
+                } else {
+                    appLogger.error(localizationManager.getLocalizedString("serversetup.log.error.installserver.fabric"));
+                }
+            } catch (IOException ex) {
+                appLogger.error(localizationManager.getLocalizedString("serversetup.log.error.installserver.fabricfail"), ex);
+            }
+        } else if (modLoader.equalsIgnoreCase("Forge")) {
+            try {
+                appLogger.info(localizationManager.getLocalizedString("serversetup.log.info.installserver.forge.enter"));
+                installerLogger.info(localizationManager.getLocalizedString("serversetup.log.info.installserver.forge.enter"));
+                if (downloadForgeJar(minecraftVersion, modLoaderVersion, modpackDir)) {
+                    appLogger.info(localizationManager.getLocalizedString("serversetup.log.info.installserver.forge.download"));
+                    ProcessBuilder processBuilder = new ProcessBuilder(
+                            javaPath,
+                            "-jar",
+                            "forge-installer.jar",
+                            "--installServer")
+                            .directory(new File(String.format("%s/server_pack", modpackDir)));
+                    processBuilder.redirectErrorStream(true);
+                    Process process = processBuilder.start();
+                    BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
+                    String line;
+                    while (true) {
+                        line = reader.readLine();
+                        if (line == null) { break; }
+                        installerLogger.info(line);
+                    }
+                    installerLogger.info(localizationManager.getLocalizedString("serversetup.log.info.installserver"));
+                    reader.close();
+                    appLogger.info(localizationManager.getLocalizedString("serversetup.log.info.installserver.forge.details"));
+                    appLogger.info(localizationManager.getLocalizedString("serversetup.log.info.installserver"));
+                    process.destroy();
+                } else {
+                    appLogger.error(localizationManager.getLocalizedString("serversetup.log.error.installserver.forge"));
+                }
+            } catch (IOException ex) {
+                appLogger.error(localizationManager.getLocalizedString("serversetup.log.error.installserver.forgefail"), ex);
+            }
+        } else {
+            appLogger.error(String.format(localizationManager.getLocalizedString("configcheck.log.error.checkmodloader"), modLoader));
+        }
+
+        generateDownloadScripts(modLoader, modpackDir, minecraftVersion);
+        cleanUpServerPack(
+                fabricInstaller,
+                forgeInstaller,
+                modLoader,
+                modpackDir,
+                minecraftVersion, modLoaderVersion);
+
+    }
+    /** Create a zip-archive of the serverpack, excluding Mojang's minecraft_server.jar.
+     * With help from https://stackoverflow.com/questions/1091788/how-to-create-a-zip-file-in-java
+     * @param modpackDir String. The directory where the zip-archive will be created and saved in.
+     * @param modLoader String. Determines the name of Minecraft#s server jar which will be deleted from the zip-archive.
+     * @param includeServerInstallation Boolean. Determines whether the Minecraft server jar needs to be deleted from the zip-archive.
+     */
+    void zipBuilder(String modpackDir, String modLoader, Boolean includeServerInstallation) {
+        final Path sourceDir = Paths.get(String.format("%s/server_pack", modpackDir));
+        String zipFileName = sourceDir.toString().concat(".zip");
+        appLogger.info(localizationManager.getLocalizedString("serversetup.log.info.zipbuilder.enter"));
+        try {
+            final ZipOutputStream outputStream = new ZipOutputStream(new FileOutputStream(zipFileName));
+            Files.walkFileTree(sourceDir, new SimpleFileVisitor<Path>() {
+                @Override
+                public FileVisitResult visitFile(Path file, BasicFileAttributes attributes) {
+                    try {
+                        Path targetFile = sourceDir.relativize(file);
+                        outputStream.putNextEntry(new ZipEntry(targetFile.toString()));
+                        byte[] bytes = Files.readAllBytes(file);
+                        outputStream.write(bytes, 0, bytes.length);
+                        outputStream.closeEntry();
+                    } catch (IOException ex) {
+                        appLogger.error(localizationManager.getLocalizedString("serversetup.log.error.zipbuilder.create"), ex);
+                    }
+                    return FileVisitResult.CONTINUE;
+                }
+            });
+            outputStream.close();
+        } catch (IOException ex) {
+            appLogger.error(localizationManager.getLocalizedString("serversetup.log.error.zipbuilder.create"), ex);
+        }
+        if (includeServerInstallation) {
+            deleteMinecraftJar(modLoader, modpackDir);
+            appLogger.warn(localizationManager.getLocalizedString("serversetup.log.warn.zipbuilder.minecraftjar1"));
+            appLogger.warn(localizationManager.getLocalizedString("serversetup.log.warn.zipbuilder.minecraftjar2"));
+            appLogger.warn(localizationManager.getLocalizedString("serversetup.log.warn.zipbuilder.minecraftjar3"));
+        }
+        appLogger.info(localizationManager.getLocalizedString("serversetup.log.info.zipbuilder.finish"));
+    }
+
+    /** Calls methods for generating download scripts for Mojang's Minecraft server depending on the specified versions and modloader.
+     * @param modLoader String. The specified modloader determines the name under which Mojang's server jar will be downloaded as.
+     * @param modpackDir String. /server_pack The directory where the scripts will be placed in.
+     * @param minecraftVersion String. The version of the Minecraft server jar to download.
+     */
+    void generateDownloadScripts(String modLoader, String modpackDir, String minecraftVersion) {
+        if (modLoader.equalsIgnoreCase("Fabric")) {
+            fabricShell(modpackDir, minecraftVersion);
+            fabricBatch(modpackDir, minecraftVersion);
+        } else if (modLoader.equalsIgnoreCase("Forge")) {
+            forgeShell(modpackDir, minecraftVersion);
+            forgeBatch(modpackDir, minecraftVersion);
+        } else {
+            appLogger.error(String.format(localizationManager.getLocalizedString("configcheck.log.error.checkmodloader"), modLoader));
+        }
+    }
+
+    /** Generates download scripts for Mojang's Minecraft server for Fabric,Linux.
+     * @param modpackDir String. /server_pack The directory where the scripts will be placed in.
+     * @param minecraftVersion String. The version of the Minecraft server jar to download.
+     */
+    void fabricShell(String modpackDir, String minecraftVersion) {
+        try {
+            String downloadMinecraftServer = (new URL(
+                    LauncherMeta
+                            .getLauncherMeta()
+                            .getVersion(minecraftVersion)
+                            .getVersionMeta()
+                            .downloads
+                            .get("server")
+                            .url))
+                    .toString();
+            String shFabric = String.format("#!/bin/bash\n#Download the Minecraft_server.jar for your modpack\n\nwget -O server.jar %s", downloadMinecraftServer);
+            Path pathSh = Paths.get(String.format("%s/server_pack/download_minecraft-server.jar_fabric.sh", modpackDir));
+            byte[] strToBytesSh = shFabric.getBytes();
+            Files.write(pathSh, strToBytesSh);
+            String readSh = Files.readAllLines(pathSh).get(0);
+            appLogger.debug(String.format(localizationManager.getLocalizedString("serverutilities.log.debug.fabricshell"), readSh));
+        } catch (IOException ex) {
+            appLogger.error(localizationManager.getLocalizedString("serverutilities.log.error.fabricshell"), ex);
+        }
+        appLogger.info(localizationManager.getLocalizedString("serverutilities.log.info.fabricshell"));
+    }
+
+    /** Generates download scripts for Mojang's Minecraft server for Fabric,Windows.
+     * @param modpackDir String. /server_pack The directory where the scripts will be placed in.
+     * @param minecraftVersion String. The version of the Minecraft server jar to download.
+     */
+    void fabricBatch(String modpackDir, String minecraftVersion) {
+        try {
+            String downloadMinecraftServer = (new URL(
+                    LauncherMeta
+                            .getLauncherMeta()
+                            .getVersion(minecraftVersion)
+                            .getVersionMeta()
+                            .downloads
+                            .get("server")
+                            .url))
+                    .toString();
+            String batFabric = String.format("powershell -Command \"(New-Object Net.WebClient).DownloadFile('%s', 'server.jar')\"", downloadMinecraftServer);
+            Path pathBat = Paths.get(String.format("%s/server_pack/download_minecraft-server.jar_fabric.bat", modpackDir));
+            byte[] strToBytesBat = batFabric.getBytes();
+            Files.write(pathBat, strToBytesBat);
+            String readBat = Files.readAllLines(pathBat).get(0);
+            appLogger.debug(String.format(localizationManager.getLocalizedString("serverutilities.log.debug.fabricbatch"), readBat));
+        } catch (IOException ex) {
+            appLogger.error(localizationManager.getLocalizedString("serverutilities.log.error.fabricbatch"), ex);
+        }
+        appLogger.info(localizationManager.getLocalizedString("serverutilities.log.info.fabricbatch"));
+    }
+
+    /** Generates download scripts for Mojang's Minecraft server for Forge,Linux.
+     * @param modpackDir String. /server_pack The directory where the scripts will be placed in.
+     * @param minecraftVersion String. The version of the Minecraft server jar to download.
+     */
+    void forgeShell(String modpackDir, String minecraftVersion) {
+        try {
+            String downloadMinecraftServer = (new URL(
+                    LauncherMeta
+                            .getLauncherMeta()
+                            .getVersion(minecraftVersion)
+                            .getVersionMeta()
+                            .downloads
+                            .get("server")
+                            .url))
+                    .toString();
+            String shForge = String.format("#!/bin/bash\n# Download the Minecraft_server.jar for your modpack\n\nwget -O minecraft_server.%s.jar %s", minecraftVersion, downloadMinecraftServer);
+            Path pathSh = Paths.get(String.format("%s/server_pack/download_minecraft-server.jar_forge.sh", modpackDir));
+            byte[] strToBytesSh = shForge.getBytes();
+            Files.write(pathSh, strToBytesSh);
+            String readSh = Files.readAllLines(pathSh).get(0);
+            appLogger.debug(String.format(localizationManager.getLocalizedString("serverutilities.log.debug.forgeshell"), readSh));
+        } catch (IOException ex) {
+            appLogger.error(localizationManager.getLocalizedString("serverutilities.log.error.forgeshell"), ex);
+        }
+        appLogger.info(localizationManager.getLocalizedString("serverutilities.log.info.forgeshell"));
+    }
+
+    /** Generates download scripts for Mojang's Minecraft server for Forge,Windows.
+     * @param modpackDir String. /server_pack The directory where the scripts will be placed in.
+     * @param minecraftVersion String. The version of the Minecraft server jar to download.
+     */
+    void forgeBatch(String modpackDir, String minecraftVersion) {
+        try {
+            String downloadMinecraftServer = (new URL(
+                    LauncherMeta
+                            .getLauncherMeta()
+                            .getVersion(minecraftVersion)
+                            .getVersionMeta()
+                            .downloads
+                            .get("server")
+                            .url))
+                    .toString();
+            String batForge = String.format("powershell -Command \"(New-Object Net.WebClient).DownloadFile('%s', 'minecraft_server.%s.jar')\"", downloadMinecraftServer, minecraftVersion);
+            Path pathBat = Paths.get(String.format("%s/server_pack/download_minecraft-server.jar_forge.bat", modpackDir));
+            byte[] strToBytesBat = batForge.getBytes();
+            Files.write(pathBat, strToBytesBat);
+            String readBat = Files.readAllLines(pathBat).get(0);
+            appLogger.debug(String.format(localizationManager.getLocalizedString("serverutilities.log.debug.forgebatch"), readBat));
+        } catch (IOException ex) {
+            appLogger.error(localizationManager.getLocalizedString("serverutilities.log.error.forgebatch"), ex);
+        }
+        appLogger.info(localizationManager.getLocalizedString("serverutilities.log.info.forgebatch"));
+    }
+
+    /** Downloads the specified version of Fabric.
+     * @param modpackDir String. /server_pack The directory where the Fabric installer will be placed in.
+     * @return Boolean. Returns true if the download was successful. False if not.
+     */
+    boolean downloadFabricJar(String modpackDir) {
+        boolean downloaded = false;
+        try {
+            appLogger.info(localizationManager.getLocalizedString("serverutilities.log.info.downloadfabricjar.enter"));
+            String latestFabricInstaller = latestFabricInstaller(modpackDir);
+            URL downloadFabric = new URL(String.format("https://maven.fabricmc.net/net/fabricmc/fabric-installer/%s/fabric-installer-%s.jar", latestFabricInstaller, latestFabricInstaller));
+
+            ReadableByteChannel readableByteChannel = Channels.newChannel(downloadFabric.openStream());
+            FileOutputStream downloadFabricFileOutputStream = new FileOutputStream(String.format("%s/server_pack/fabric-installer.jar", modpackDir));
+            FileChannel downloadFabricFileChannel = downloadFabricFileOutputStream.getChannel();
+            downloadFabricFileOutputStream.getChannel().transferFrom(readableByteChannel, 0, Long.MAX_VALUE);
+
+            downloadFabricFileOutputStream.flush();
+            downloadFabricFileOutputStream.close();
+            readableByteChannel.close();
+            downloadFabricFileChannel.close();
+
+        } catch (IOException e) {
+            appLogger.error(localizationManager.getLocalizedString("serverutilities.log.error.downloadfabricjar.download"), e);
+            if (new File(String.format("%s/server_pack/fabric-installer.jar", modpackDir)).exists()) {
+                try {
+                    Files.delete(Paths.get(String.format("%s/server_pack/fabric-installer.jar", modpackDir)));
+                } catch (IOException ex) {
+                    appLogger.error(localizationManager.getLocalizedString("serverutilities.log.error.downloadfabricjar.delete"), ex);
+                }
+            }
+        }
+        if (new File(String.format("%s/server_pack/fabric-installer.jar", modpackDir)).exists()) {
+            downloaded = true;
+        }
+        return downloaded;
+    }
+
+    /** Returns the latest installer version for the Fabric installer to be used in ServerSetup.installServer.
+     * @param modpackDir String. /server_pack The directory where the Fabric installer will be placed in.
+     * @return Boolean. Returns true if the download was successful. False if not.
+     */
+    String latestFabricInstaller(String modpackDir) {
+        String result;
+        try {
+            URL downloadFabricXml = new URL("https://maven.fabricmc.net/net/fabricmc/fabric-installer/maven-metadata.xml");
+
+            ReadableByteChannel downloadFabricXmlReadableByteChannel = Channels.newChannel(downloadFabricXml.openStream());
+            FileOutputStream downloadFabricXmlFileOutputStream = new FileOutputStream(String.format("%s/server_pack/fabric-installer.xml", modpackDir));
+            FileChannel downloadFabricXmlFileChannel = downloadFabricXmlFileOutputStream.getChannel();
+            downloadFabricXmlFileOutputStream.getChannel().transferFrom(downloadFabricXmlReadableByteChannel, 0, Long.MAX_VALUE);
+
+            downloadFabricXmlFileOutputStream.flush();
+            downloadFabricXmlFileOutputStream.close();
+            downloadFabricXmlReadableByteChannel.close();
+            downloadFabricXmlFileChannel.close();
+
+            DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
+            DocumentBuilder builder = domFactory.newDocumentBuilder();
+            Document fabricXml = builder.parse(new File(String.format("%s/server_pack/fabric-installer.xml",modpackDir)));
+            XPathFactory xPathFactory = XPathFactory.newInstance();
+            XPath xpath = xPathFactory.newXPath();
+
+            result = (String) xpath.evaluate("/metadata/versioning/release", fabricXml, XPathConstants.STRING);
+            appLogger.info(localizationManager.getLocalizedString("serverutilities.log.info.latestfabricinstaller"));
+        } catch (IOException | ParserConfigurationException | SAXException | XPathExpressionException ex) {
+            appLogger.error(localizationManager.getLocalizedString("serverutilities.log.error.latestfabricinstaller"), ex);
+            result = "0.7.2";
+        }
+        return result;
+    }
+
+    /** Downloads the specified version of the Forge installer to be used in ServerSetup.installServer.
+     * @param minecraftVersion String. The Minecraft version corresponding to the Forge version. Minecraft version and Forge version build a pair.
+     * @param modLoaderVersion String. The Forge version corresponding to the Minecraft version. Minecraft version and Forge version build a pair.
+     * @param modpackDir String. /server_pack The directory where the Forge installer will be placed in.
+     * @return Boolean. Returns true if the download was successful. False if not.
+     */
+    boolean downloadForgeJar(String minecraftVersion, String modLoaderVersion, String modpackDir) {
+        boolean downloaded = false;
+        try {
+            appLogger.info(localizationManager.getLocalizedString("serverutilities.log.info.downloadforgejar.enter"));
+            URL downloadForge = new URL(String.format("https://files.minecraftforge.net/maven/net/minecraftforge/forge/%s-%s/forge-%s-%s-installer.jar", minecraftVersion, modLoaderVersion, minecraftVersion, modLoaderVersion));
+
+            ReadableByteChannel readableByteChannel = Channels.newChannel(downloadForge.openStream());
+            FileOutputStream downloadForgeFileOutputStream = new FileOutputStream(String.format("%s/server_pack/forge-installer.jar", modpackDir));
+            FileChannel downloadForgeFileChannel = downloadForgeFileOutputStream.getChannel();
+            downloadForgeFileOutputStream.getChannel().transferFrom(readableByteChannel, 0, Long.MAX_VALUE);
+
+            downloadForgeFileOutputStream.flush();
+            downloadForgeFileOutputStream.close();
+            readableByteChannel.close();
+            downloadForgeFileChannel.close();
+
+        } catch (IOException e) {
+            appLogger.error(localizationManager.getLocalizedString("serverutilities.log.error.downloadforgejar.download"), e);
+            if (new File(String.format("%s/server_pack/forge-installer.jar", modpackDir)).exists()) {
+                if (new File(String.format("%s/server_pack/forge-installer.jar", modpackDir)).delete()) {
+                    appLogger.error(localizationManager.getLocalizedString("serverutilities.log.debug.downloadforgejar"));
+                }
+            }
+        }
+        if (new File(String.format("%s/server_pack/forge-installer.jar", modpackDir)).exists()) {
+            downloaded = true;
+        }
+        return downloaded;
+    }
+
+    /** Deletes Mojang's minecraft_server.jar from the zip-archive so users do not accidentally upload a file containing software from Mojang.
+     * With help from https://stackoverflow.com/questions/5244963/delete-files-from-a-zip-archive-without-decompressing-in-java-or-maybe-python and https://bugs.openjdk.java.net/browse/JDK-8186227
+     * @param modLoader String. Determines the name of the file to delete.
+     * @param modpackDir String. /server_pack The directory in which the file will be deleted.
+     */
+    void deleteMinecraftJar(String modLoader, String modpackDir) {
+        if (modLoader.equalsIgnoreCase("Forge")) {
+            appLogger.info(localizationManager.getLocalizedString("serverutilities.log.info.deleteminecraftjar.enter"));
+
+            Map<String, String> zip_properties = new HashMap<>();
+            zip_properties.put("create", "false");
+            zip_properties.put("encoding", "UTF-8");
+
+            Path serverpackZip = Paths.get(String.format("%s/server_pack.zip", modpackDir));
+            URI zipUri = URI.create("jar:" + serverpackZip.toUri());
+
+            try (FileSystem zipfs = FileSystems.newFileSystem(zipUri, zip_properties)) {
+                Path pathInZipfile = zipfs.getPath("minecraft_server.1.16.5.jar");
+                Files.delete(pathInZipfile);
+                appLogger.info(localizationManager.getLocalizedString("serverutilities.log.info.deleteminecraftjar.success"));
+            } catch (IOException ex) {
+                appLogger.error(localizationManager.getLocalizedString("serverutilities.log.error.deleteminecraftjar.delete"), ex);
+            }
+        } else if (modLoader.equalsIgnoreCase("Fabric")) {
+            appLogger.info(localizationManager.getLocalizedString("serverutilities.log.info.deleteminecraftjar.enter"));
+
+            Map<String, String> zip_properties = new HashMap<>();
+            zip_properties.put("create", "false");
+            zip_properties.put("encoding", "UTF-8");
+
+            Path serverpackZip = Paths.get(String.format("%s/server_pack.zip", modpackDir));
+            URI zipUri = URI.create(String.format("jar:%s", serverpackZip.toUri()));
+
+            try (FileSystem zipfs = FileSystems.newFileSystem(zipUri, zip_properties)) {
+                Path pathInZipfile = zipfs.getPath("server.jar");
+                Files.delete(pathInZipfile);
+                appLogger.info(localizationManager.getLocalizedString("serverutilities.log.info.deleteminecraftjar.success"));
+            } catch (IOException ex) {
+                appLogger.error(localizationManager.getLocalizedString("serverutilities.log.error.deleteminecraftjar.delete"), ex);
+            }
+        } else {
+            appLogger.error(String.format(localizationManager.getLocalizedString("configcheck.log.error.checkmodloader"), modLoader));
+        }
+    }
+
+    /** Deletes remnant files from Fabric/Forge installation no longer needed.
+     * @param fabricInstaller File. Fabric installer to be deleted.
+     * @param forgeInstaller File. Forge installer to be deleted.
+     * @param modLoader String. Whether Forge or Fabric files are to be deleted.
+     * @param modpackDir String. /server_pack The directory where files are to be deleted.
+     * @param minecraftVersion String. Needed for renaming the Forge server jar to work with launch scripts provided by serverpackcreator.
+     * @param modLoaderVersion String. Needed for renaming the Forge server jar to work with launch scripts provided by serverpackcreator.
+     */
+    void cleanUpServerPack(File fabricInstaller, File forgeInstaller, String modLoader, String modpackDir, String minecraftVersion, String modLoaderVersion) {
+        appLogger.info(localizationManager.getLocalizedString("serverutilities.log.info.cleanupserverpack.enter"));
+        if (modLoader.equalsIgnoreCase("Fabric")) {
+            File fabricXML = new File(String.format("%s/server_pack/fabric-installer.xml", modpackDir));
+            boolean isXmlDeleted = fabricXML.delete();
+            boolean isInstallerDeleted = fabricInstaller.delete();
+            if (isXmlDeleted)
+            { appLogger.info(String.format(localizationManager.getLocalizedString("serverutilities.log.info.cleanupserverpack.deleted"), fabricXML.getName())); }
+            else
+            { appLogger.error(String.format(localizationManager.getLocalizedString("serverutilities.log.error.cleanupserverpack.delete"), fabricXML.getName())); }
+
+            if (isInstallerDeleted)
+            { appLogger.info(String.format(localizationManager.getLocalizedString("serverutilities.log.info.cleanupserverpack.deleted"), fabricInstaller.getName())); }
+            else
+            { appLogger.error(String.format(localizationManager.getLocalizedString("serverutilities.log.error.cleanupserverpack.delete"), fabricInstaller.getName())); }
+
+        } else if (modLoader.equalsIgnoreCase("Forge")) {
+            try {
+                Files.copy(
+                        Paths.get(String.format("%s/server_pack/forge-%s-%s.jar", modpackDir, minecraftVersion, modLoaderVersion)),
+                        Paths.get(String.format("%s/server_pack/forge.jar", modpackDir)),
+                        REPLACE_EXISTING);
+                boolean isOldJarDeleted = (new File(
+                        String.format("%s/server_pack/forge-%s-%s.jar", modpackDir, minecraftVersion, modLoaderVersion))).delete();
+                boolean isInstallerDeleted = forgeInstaller.delete();
+
+                if ((isOldJarDeleted) && (new File(String.format("%s/server_pack/forge.jar", modpackDir)).exists()))
+                { appLogger.info(localizationManager.getLocalizedString("serverutilities.log.info.cleanupserverpack.rename")); }
+                else
+                { appLogger.error(localizationManager.getLocalizedString("serverutilities.log.error.cleanupserverpack.rename")); }
+
+                if (isInstallerDeleted)
+                { appLogger.info(String.format(localizationManager.getLocalizedString("serverutilities.log.info.cleanupserverpack.deleted"), forgeInstaller.getName())); }
+                else
+                { appLogger.error(String.format(localizationManager.getLocalizedString("serverutilities.log.error.cleanupserverpack.delete"), forgeInstaller.getName())); }
+
+            } catch (IOException ex) {
+                appLogger.error(localizationManager.getLocalizedString("serverutilities.log.error.cleanupserverpack"), ex);
+            }
+        } else {
+            appLogger.error(String.format(localizationManager.getLocalizedString("configcheck.log.error.checkmodloader"), modLoader));
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/de/griefed/serverpackcreator/FilesSetup.java b/src/main/java/de/griefed/serverpackcreator/FilesSetup.java
index 05cfc37a0..66c0e46c6 100644
--- a/src/main/java/de/griefed/serverpackcreator/FilesSetup.java
+++ b/src/main/java/de/griefed/serverpackcreator/FilesSetup.java
@@ -1,24 +1,74 @@
 package de.griefed.serverpackcreator;
 
-import de.griefed.serverpackcreator.i18n.IncorrectLanguageException;
 import de.griefed.serverpackcreator.i18n.LocalizationManager;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import java.io.*;
 import java.nio.file.Files;
 import java.nio.file.Paths;
-import java.util.Arrays;
 
 public class FilesSetup {
-    private static final Logger appLogger = LogManager.getLogger(FilesSetup.class);
+
+    private final Logger appLogger = LogManager.getLogger(FilesSetup.class);
+
+    private final File configFile = new File("serverpackcreator.conf");
+    private final File oldConfigFile     = new File("creator.conf");
+    private final File propertiesFile    = new File("server.properties");
+    private final File iconFile          = new File("server-icon.png");
+    private final File forgeWindowsFile  = new File("start-forge.bat");
+    private final File forgeLinuxFile    = new File("start-forge.sh");
+    private final File fabricWindowsFile = new File("start-fabric.bat");
+    private final File fabricLinuxFile   = new File("start-fabric.sh");
+
+    private LocalizationManager localizationManager;
+
+    public FilesSetup(LocalizationManager injectedLocalizationManager) {
+        if (injectedLocalizationManager == null) {
+            this.localizationManager = new LocalizationManager();
+        }
+        this.localizationManager = injectedLocalizationManager;
+    }
+
+    public File getConfigFile() {
+        return configFile;
+    }
+
+    public File getOldConfigFile() {
+        return oldConfigFile;
+    }
+
+    public File getPropertiesFile() {
+        return propertiesFile;
+    }
+
+    public File getIconFile() {
+        return iconFile;
+    }
+
+    public File getForgeWindowsFile() {
+        return forgeWindowsFile;
+    }
+
+    public File getForgeLinuxFile() {
+        return forgeLinuxFile;
+    }
+
+    public File getFabricWindowsFile() {
+        return fabricWindowsFile;
+    }
+
+    public File getFabricLinuxFile() {
+        return fabricLinuxFile;
+    }
+
     /** Calls individual methods which check for existence of default files. If any of these methods return true, serverpackcreator will exit, giving the user the chance to customize it before the program runs in production.
      */
     void filesSetup() {
-        appLogger.info(LocalizationManager.getLocalizedString("filessetup.log.info.filessetup.enter"));
+        appLogger.info(localizationManager.getLocalizedString("filessetup.log.info.filessetup.enter"));
         try {
             Files.createDirectories(Paths.get("./server_files"));
         } catch (IOException ex) {
-            appLogger.error(LocalizationManager.getLocalizedString("filessetup.log.error.filessetup"), ex);
+            appLogger.error(localizationManager.getLocalizedString("filessetup.log.error.filessetup"), ex);
         }
         boolean doesConfigExist         = checkForConfig();
         boolean doesFabricLinuxExist    = checkForFabricLinux();
@@ -36,14 +86,14 @@ public class FilesSetup {
                 doesPropertiesExist    ||
                 doesIconExist) {
 
-            appLogger.warn(LocalizationManager.getLocalizedString("filessetup.log.warn.filessetup.warning0"));
-            appLogger.warn(LocalizationManager.getLocalizedString("filessetup.log.warn.filessetup.warning1"));
-            appLogger.warn(LocalizationManager.getLocalizedString("filessetup.log.warn.filessetup.warning2"));
-            appLogger.warn(LocalizationManager.getLocalizedString("filessetup.log.warn.filessetup.warning3"));
-            appLogger.warn(LocalizationManager.getLocalizedString("filessetup.log.warn.filessetup.warning0"));
+            appLogger.warn(localizationManager.getLocalizedString("filessetup.log.warn.filessetup.warning0"));
+            appLogger.warn(localizationManager.getLocalizedString("filessetup.log.warn.filessetup.warning1"));
+            appLogger.warn(localizationManager.getLocalizedString("filessetup.log.warn.filessetup.warning2"));
+            appLogger.warn(localizationManager.getLocalizedString("filessetup.log.warn.filessetup.warning3"));
+            appLogger.warn(localizationManager.getLocalizedString("filessetup.log.warn.filessetup.warning0"));
 
         } else {
-            appLogger.info(LocalizationManager.getLocalizedString("filessetup.log.info.filessetup.finish"));
+            appLogger.info(localizationManager.getLocalizedString("filessetup.log.info.filessetup.finish"));
         }
     }
     /** Check for old config file, if found rename to new name. If neither old nor new config file can be found, a new config file is generated.
@@ -51,33 +101,33 @@ public class FilesSetup {
      */
     boolean checkForConfig() {
         boolean firstRun = false;
-        if (Reference.getOldConfigFile().exists()) {
+        if (getOldConfigFile().exists()) {
             try {
-                Files.copy(Reference.getOldConfigFile().getAbsoluteFile().toPath(), Reference.getConfigFile().getAbsoluteFile().toPath());
+                Files.copy(getOldConfigFile().getAbsoluteFile().toPath(), getConfigFile().getAbsoluteFile().toPath());
 
-                boolean isOldConfigDeleted = Reference.getOldConfigFile().delete();
+                boolean isOldConfigDeleted = getOldConfigFile().delete();
                 if (isOldConfigDeleted) {
-                    appLogger.info(LocalizationManager.getLocalizedString("filessetup.log.info.chechforconfig.old"));
+                    appLogger.info(localizationManager.getLocalizedString("filessetup.log.info.chechforconfig.old"));
                 }
 
             } catch (IOException ex) {
-                appLogger.error(LocalizationManager.getLocalizedString("filessetup.log.error.checkforconfig.old"), ex);
+                appLogger.error(localizationManager.getLocalizedString("filessetup.log.error.checkforconfig.old"), ex);
             }
-        } else if (!Reference.getConfigFile().exists()) {
+        } else if (!getConfigFile().exists()) {
             try {
-                InputStream link = (CopyFiles.class.getResourceAsStream(String.format("/de/griefed/resources/%s", Reference.getConfigFile().getName())));
+                InputStream link = (FilesSetup.class.getResourceAsStream(String.format("/de/griefed/resources/%s", getConfigFile().getName())));
 
                 if (link != null) {
-                    Files.copy(link, Reference.getConfigFile().getAbsoluteFile().toPath());
+                    Files.copy(link, getConfigFile().getAbsoluteFile().toPath());
                     link.close();
                 }
 
-                appLogger.info(LocalizationManager.getLocalizedString("filessetup.log.info.checkforconfig.config"));
+                appLogger.info(localizationManager.getLocalizedString("filessetup.log.info.checkforconfig.config"));
                 firstRun = true;
 
             } catch (IOException ex) {
                 if (!ex.toString().startsWith("java.nio.file.FileAlreadyExistsException")) {
-                    appLogger.error(LocalizationManager.getLocalizedString("filessetup.log.error.checkforconfig.config"), ex);
+                    appLogger.error(localizationManager.getLocalizedString("filessetup.log.error.checkforconfig.config"), ex);
                     firstRun = true;
                 }
             }
@@ -90,20 +140,20 @@ public class FilesSetup {
      */
     boolean checkForFabricLinux() {
         boolean firstRun = false;
-        if (!Reference.getFabricLinuxFile().exists()) {
+        if (!getFabricLinuxFile().exists()) {
             try {
-                InputStream link = (CopyFiles.class.getResourceAsStream(String.format("/de/griefed/resources/server_files/%s", Reference.getFabricLinuxFile().getName())));
+                InputStream link = (FilesSetup.class.getResourceAsStream(String.format("/de/griefed/resources/server_files/%s", getFabricLinuxFile().getName())));
                 if (link != null) {
-                    Files.copy(link, Paths.get(String.format("./server_files/%s", Reference.getFabricLinuxFile())));
+                    Files.copy(link, Paths.get(String.format("./server_files/%s", getFabricLinuxFile())));
                     link.close();
                 }
 
-                appLogger.info(LocalizationManager.getLocalizedString("filessetup.log.info.checkforfabriclinux"));
+                appLogger.info(localizationManager.getLocalizedString("filessetup.log.info.checkforfabriclinux"));
                 firstRun = true;
 
             } catch (IOException ex) {
                 if (!ex.toString().startsWith("java.nio.file.FileAlreadyExistsException")) {
-                    appLogger.error(LocalizationManager.getLocalizedString("filessetup.log.error.checkforfabriclinux"), ex);
+                    appLogger.error(localizationManager.getLocalizedString("filessetup.log.error.checkforfabriclinux"), ex);
                     firstRun = true;
                 }
             }
@@ -116,20 +166,20 @@ public class FilesSetup {
      */
     boolean checkForFabricWindows() {
         boolean firstRun = false;
-        if (!Reference.getFabricWindowsFile().exists()) {
+        if (!getFabricWindowsFile().exists()) {
             try {
-                InputStream link = (CopyFiles.class.getResourceAsStream(String.format("/de/griefed/resources/server_files/%s", Reference.getFabricWindowsFile().getName())));
+                InputStream link = (FilesSetup.class.getResourceAsStream(String.format("/de/griefed/resources/server_files/%s", getFabricWindowsFile().getName())));
                 if (link != null) {
-                    Files.copy(link, Paths.get(String.format("./server_files/%s", Reference.getFabricWindowsFile())));
+                    Files.copy(link, Paths.get(String.format("./server_files/%s", getFabricWindowsFile())));
                     link.close();
                 }
 
-                appLogger.info(LocalizationManager.getLocalizedString("filessetup.log.info.checkforfabricwindows"));
+                appLogger.info(localizationManager.getLocalizedString("filessetup.log.info.checkforfabricwindows"));
                 firstRun = true;
 
             } catch (IOException ex) {
                 if (!ex.toString().startsWith("java.nio.file.FileAlreadyExistsException")) {
-                    appLogger.error(LocalizationManager.getLocalizedString("filessetup.log.error.checkforfabricwindows"), ex);
+                    appLogger.error(localizationManager.getLocalizedString("filessetup.log.error.checkforfabricwindows"), ex);
                     firstRun = true;
                 }
             }
@@ -142,20 +192,20 @@ public class FilesSetup {
      */
     boolean checkForForgeLinux() {
         boolean firstRun = false;
-        if (!Reference.getForgeLinuxFile().exists()) {
+        if (!getForgeLinuxFile().exists()) {
             try {
-                InputStream link = (CopyFiles.class.getResourceAsStream(String.format("/de/griefed/resources/server_files/%s", Reference.getForgeLinuxFile().getName())));
+                InputStream link = (FilesSetup.class.getResourceAsStream(String.format("/de/griefed/resources/server_files/%s", getForgeLinuxFile().getName())));
                 if (link != null) {
-                    Files.copy(link, Paths.get(String.format("./server_files/%s", Reference.getForgeLinuxFile())));
+                    Files.copy(link, Paths.get(String.format("./server_files/%s", getForgeLinuxFile())));
                     link.close();
                 }
 
-                appLogger.info(LocalizationManager.getLocalizedString("filessetup.log.info.checkforforgelinux"));
+                appLogger.info(localizationManager.getLocalizedString("filessetup.log.info.checkforforgelinux"));
                 firstRun = true;
 
             } catch (IOException ex) {
                 if (!ex.toString().startsWith("java.nio.file.FileAlreadyExistsException")) {
-                    appLogger.error(LocalizationManager.getLocalizedString("filessetup.log.error.checkforforgelinux"), ex);
+                    appLogger.error(localizationManager.getLocalizedString("filessetup.log.error.checkforforgelinux"), ex);
                     firstRun = true;
                 }
             }
@@ -168,20 +218,20 @@ public class FilesSetup {
      */
     boolean checkForForgeWindows() {
         boolean firstRun = false;
-        if (!Reference.getForgeWindowsFile().exists()) {
+        if (!getForgeWindowsFile().exists()) {
             try {
-                InputStream link = (CopyFiles.class.getResourceAsStream(String.format("/de/griefed/resources/server_files/%s", Reference.getForgeWindowsFile().getName())));
+                InputStream link = (FilesSetup.class.getResourceAsStream(String.format("/de/griefed/resources/server_files/%s", getForgeWindowsFile().getName())));
                 if (link != null) {
-                    Files.copy(link, Paths.get(String.format("./server_files/%s", Reference.getForgeWindowsFile())));
+                    Files.copy(link, Paths.get(String.format("./server_files/%s", getForgeWindowsFile())));
                     link.close();
                 }
 
-                appLogger.info(LocalizationManager.getLocalizedString("filessetup.log.info.checkforforgewindows"));
+                appLogger.info(localizationManager.getLocalizedString("filessetup.log.info.checkforforgewindows"));
                 firstRun = true;
 
             } catch (IOException ex) {
                 if (!ex.toString().startsWith("java.nio.file.FileAlreadyExistsException")) {
-                    appLogger.error(LocalizationManager.getLocalizedString("filessetup.log.error.checkforforgewindows"), ex);
+                    appLogger.error(localizationManager.getLocalizedString("filessetup.log.error.checkforforgewindows"), ex);
                     firstRun = true;
                 }
             }
@@ -194,20 +244,20 @@ public class FilesSetup {
      */
     boolean checkForProperties() {
         boolean firstRun = false;
-        if (!Reference.getPropertiesFile().exists()) {
+        if (!getPropertiesFile().exists()) {
             try {
-                InputStream link = (CopyFiles.class.getResourceAsStream(String.format("/de/griefed/resources/server_files/%s", Reference.getPropertiesFile().getName())));
+                InputStream link = (FilesSetup.class.getResourceAsStream(String.format("/de/griefed/resources/server_files/%s", getPropertiesFile().getName())));
                 if (link != null) {
-                    Files.copy(link, Paths.get(String.format("./server_files/%s", Reference.getPropertiesFile())));
+                    Files.copy(link, Paths.get(String.format("./server_files/%s", getPropertiesFile())));
                     link.close();
                 }
 
-                appLogger.info(LocalizationManager.getLocalizedString("filessetup.log.info.checkforproperties"));
+                appLogger.info(localizationManager.getLocalizedString("filessetup.log.info.checkforproperties"));
                 firstRun = true;
 
             } catch (IOException ex) {
                 if (!ex.toString().startsWith("java.nio.file.FileAlreadyExistsException")) {
-                    appLogger.error(LocalizationManager.getLocalizedString("filessetup.log.error.checkforproperties"), ex);
+                    appLogger.error(localizationManager.getLocalizedString("filessetup.log.error.checkforproperties"), ex);
                     firstRun = true;
                 }
             }
@@ -220,197 +270,24 @@ public class FilesSetup {
      */
     boolean checkForIcon() {
         boolean firstRun = false;
-        if (!Reference.getIconFile().exists()) {
+        if (!getIconFile().exists()) {
             try {
-                InputStream link = (CopyFiles.class.getResourceAsStream(String.format("/de/griefed/resources/server_files/%s", Reference.getIconFile().getName())));
+                InputStream link = (FilesSetup.class.getResourceAsStream(String.format("/de/griefed/resources/server_files/%s", getIconFile().getName())));
                 if (link != null) {
-                    Files.copy(link, Paths.get(String.format("./server_files/%s", Reference.getIconFile())));
+                    Files.copy(link, Paths.get(String.format("./server_files/%s", getIconFile())));
                     link.close();
                 }
 
-                appLogger.info(LocalizationManager.getLocalizedString("filessetup.log.info.checkforicon"));
+                appLogger.info(localizationManager.getLocalizedString("filessetup.log.info.checkforicon"));
                 firstRun = true;
 
             } catch (IOException ex) {
                 if (!ex.toString().startsWith("java.nio.file.FileAlreadyExistsException")) {
-                    appLogger.error(LocalizationManager.getLocalizedString("filessetup.log.error.checkforicon"), ex);
+                    appLogger.error(localizationManager.getLocalizedString("filessetup.log.error.checkforicon"), ex);
                     firstRun = true;
                 }
             }
         }
         return firstRun;
     }
-
-    /**
-     * Check for existence of a lang.properties-file and if found assign language specified therein. If assigning the specified language fails because it is not supported, default to en_US.
-     * This method should not contain the LocalizationManager, as the initialization of said manager is called from here. Therefore, localized string are not yet available.
-     * @return Always returns true. Dirty hack until I one day figure out how to init Localization before UI start correctly.
-     */
-    @SuppressWarnings("UnusedReturnValue")
-    public static boolean checkLocaleFile() {
-        if (Reference.getLangPropertiesFile().exists()) {
-            try {
-                LocalizationManager.init(Reference.getLangPropertiesFile());
-            } catch (IncorrectLanguageException e) {
-
-                appLogger.error("Incorrect language specified, falling back to English (United States)...");
-                try (BufferedWriter writer = new BufferedWriter(new FileWriter(Reference.getLangPropertiesFile()))) {
-
-                    if (!Reference.getLangPropertiesFile().exists()) {
-                        boolean langCreated = Reference.getLangPropertiesFile().createNewFile();
-                        if (langCreated) {
-                            appLogger.debug("Lang properties file created successfully.");
-                        } else {
-                            appLogger.debug("Lang properties file not created.");
-                        }
-                    }
-
-                    writer.write(String.format("# Supported languages: %s%n", Arrays.toString(LocalizationManager.getSupportedLanguages())));
-                    writer.write(String.format("lang=en_us%n"));
-
-                } catch (IOException ex) {
-                    appLogger.error("Error: There was an error writing the localization properties file.", ex);
-                }
-                LocalizationManager.init();
-            }
-        } else {
-            try (BufferedWriter writer = new BufferedWriter(new FileWriter(Reference.getLangPropertiesFile()))) {
-
-                if (!Reference.getLangPropertiesFile().exists()) {
-                    boolean langCreated = Reference.getLangPropertiesFile().createNewFile();
-                    if (langCreated) {
-                        appLogger.debug("Lang properties file created successfully.");
-                    } else {
-                        appLogger.debug("Lang properties file not created.");
-                    }
-                }
-
-                writer.write(String.format("# Supported languages: %s%n", Arrays.toString(LocalizationManager.getSupportedLanguages())));
-                writer.write(String.format("lang=en_us%n"));
-
-            } catch (IOException ex) {
-                appLogger.error("Error: There was an error writing the localization properties file.", ex);
-            }
-            LocalizationManager.init();
-        }
-        return true;
-    }
-
-    /**
-     * Writes the specified locale from -lang your_locale to a lang.properties file to ensure every subsequent start of serverpackcreator is executed using said locale.
-     * @param locale The locale the user specified when they ran serverpackcreator with -lang -your_locale.
-     * This method should not contain the LocalizationManager, as the initialization of said manager is called from here. Therefore, localized string are not yet available.
-     */
-    public static void writeLocaleToFile(String locale) {
-        try (BufferedWriter writer = new BufferedWriter(new FileWriter(Reference.getLangPropertiesFile()))) {
-
-            if (!Reference.getLangPropertiesFile().exists()) {
-                boolean langCreated = Reference.getLangPropertiesFile().createNewFile();
-                if (langCreated) {
-                    appLogger.debug("Lang properties file created successfully.");
-                } else {
-                    appLogger.debug("Lang properties file not created.");
-                }
-            }
-
-            writer.write(String.format("# Supported languages: %s%n", Arrays.toString(LocalizationManager.getSupportedLanguages())));
-            writer.write(String.format("lang=%s%n", locale));
-
-        } catch (IOException ex) {
-            appLogger.error("Error: There was an error writing the localization properties file.", ex);
-        }
-    }
-
-    /** Writes a new configuration file with the parameters passed to it.
-     * @param modpackDir String. The path to the modpack.
-     * @param clientMods List, String. List of clientside-only mods.
-     * @param copyDirs List, String. List of directories to include in server pack.
-     * @param includeServer Boolean. Whether to include a modloader server installation.
-     * @param javaPath String. Path to the java executable.
-     * @param minecraftVersion String. Minecraft version used by the modpack and server pack.
-     * @param modLoader String. Modloader used by the modpack and server pack. Ether Forge or Fabric.
-     * @param modLoaderVersion String. Modloader version used by the modpack and server pack.
-     * @param includeIcon Boolean. Whether to include a server-icon in the server pack.
-     * @param includeProperties Boolean. Whether to include a properties file in the server pack.
-     * @param includeScripts Boolean. Whether to include start scripts in the server pack.
-     * @param includeZip Boolean. Whether to create a ZIP-archive of the server pack, excluding Mojang's Minecraft server jar.
-     * @param fileName The name under which to write the new file.
-     * @param isTemporary Decides whether to delete existing config-file. If isTemporary is false, existing config files will be deleted before writing the new file.
-     * @return Boolean. Returns true if the configuration file has been successfully written and old ones replaced.
-     */
-    public boolean writeConfigToFile(String modpackDir,
-                                     String clientMods,
-                                     String copyDirs,
-                                     boolean includeServer,
-                                     String javaPath,
-                                     String minecraftVersion,
-                                     String modLoader,
-                                     String modLoaderVersion,
-                                     boolean includeIcon,
-                                     boolean includeProperties,
-                                     boolean includeScripts,
-                                     boolean includeZip,
-                                     File fileName,
-                                     boolean isTemporary) {
-
-        boolean configWritten = false;
-
-        String configString = String.format(
-                "%s\"%s\"\n\n%s[%s]\n\n%s[%s]\n\n%s%b\n\n%s\"%s\"\n\n%s\"%s\"\n\n%s\"%s\"\n\n%s\"%s\"\n\n%s%b\n\n%s%b\n\n%s%b\n\n%s%b",
-                LocalizationManager.getLocalizedString("filessetup.writeconfigtofile.modpackdir"),
-                modpackDir.replace("\\","/"),
-                LocalizationManager.getLocalizedString("filessetup.writeconfigtofile.clientmods"),
-                clientMods,
-                LocalizationManager.getLocalizedString("filessetup.writeconfigtofile.copydirs"),
-                copyDirs,
-                LocalizationManager.getLocalizedString("filessetup.writeconfigtofile.includeserverinstallation"),
-                includeServer,
-                LocalizationManager.getLocalizedString("filessetup.writeconfigtofile.javapath"),
-                javaPath.replace("\\","/"),
-                LocalizationManager.getLocalizedString("filessetup.writeconfigtofile.minecraftversion"),
-                minecraftVersion,
-                LocalizationManager.getLocalizedString("filessetup.writeconfigtofile.modloader"),
-                modLoader,
-                LocalizationManager.getLocalizedString("filessetup.writeconfigtofile.modloaderversion"),
-                modLoaderVersion,
-                LocalizationManager.getLocalizedString("filessetup.writeconfigtofile.includeservericon"),
-                includeIcon,
-                LocalizationManager.getLocalizedString("filessetup.writeconfigtofile.includeserverproperties"),
-                includeProperties,
-                LocalizationManager.getLocalizedString("filessetup.writeconfigtofile.includestartscripts"),
-                includeScripts,
-                LocalizationManager.getLocalizedString("filessetup.writeconfigtofile.includezipcreation"),
-                includeZip
-        );
-
-        if (!isTemporary) {
-            if (Reference.getConfigFile().exists()) {
-                boolean delConf = Reference.getConfigFile().delete();
-                if (delConf) {
-                    appLogger.info(LocalizationManager.getLocalizedString("filessetup.log.info.writeconfigtofile.config"));
-                } else {
-                    appLogger.error(LocalizationManager.getLocalizedString("filessetup.log.error.writeconfigtofile.config"));
-                }
-            }
-            if (Reference.getOldConfigFile().exists()) {
-                boolean delOldConf = Reference.getOldConfigFile().delete();
-                if (delOldConf) {
-                    appLogger.info(LocalizationManager.getLocalizedString("filessetup.log.info.writeconfigtofile.old"));
-                } else {
-                    appLogger.error(LocalizationManager.getLocalizedString("filessetup.log.error.writeconfigtofile.old"));
-                }
-            }
-        }
-
-        try {
-            BufferedWriter writer = new BufferedWriter(new FileWriter(fileName));
-            writer.write(configString);
-            writer.close();
-            configWritten = true;
-        } catch (IOException ex) {
-            appLogger.error(LocalizationManager.getLocalizedString("filessetup.log.error.writeconfigtofile"), ex);
-        }
-
-        return configWritten;
-    }
 }
\ No newline at end of file
diff --git a/src/main/java/de/griefed/serverpackcreator/Handler.java b/src/main/java/de/griefed/serverpackcreator/Handler.java
deleted file mode 100644
index e296dcefb..000000000
--- a/src/main/java/de/griefed/serverpackcreator/Handler.java
+++ /dev/null
@@ -1,142 +0,0 @@
-package de.griefed.serverpackcreator;
-
-import de.griefed.serverpackcreator.gui.TabbedPane;
-import de.griefed.serverpackcreator.i18n.LocalizationManager;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
-import java.awt.*;
-import java.io.IOException;
-import java.net.URISyntaxException;
-import java.util.Arrays;
-
-public class Handler {
-    private static final Logger appLogger = LogManager.getLogger(Handler.class);
-
-    /** Handler-class makes the calls to every other class where the actual magic is happening. The main class of serverpackcreator should never contain code which does work on the server pack itself.
-     * @param args Command Line Argument determines whether serverpackcreator will start into normal operation mode or with a step-by-step generation of a configuration file.
-     */
-    static void main(String[] args) {
-        String jarPath = null,
-                jarName = null,
-                javaVersion = null,
-                osArch = null,
-                osName = null,
-                osVersion = null;
-
-        appLogger.warn(LocalizationManager.getLocalizedString("handler.log.warn.wip0"));
-        appLogger.warn(LocalizationManager.getLocalizedString("handler.log.warn.wip1"));
-        appLogger.warn(LocalizationManager.getLocalizedString("handler.log.warn.wip2"));
-        appLogger.warn(LocalizationManager.getLocalizedString("handler.log.warn.wip3"));
-        appLogger.warn(LocalizationManager.getLocalizedString("handler.log.warn.wip4"));
-        appLogger.warn(LocalizationManager.getLocalizedString("handler.log.warn.wip0"));
-
-        try {
-            jarPath = Main.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath();
-            jarName = jarPath.substring(jarPath.lastIndexOf("/") + 1);
-            javaVersion = System.getProperty("java.version");
-            osArch = System.getProperty("os.arch");
-            osName = System.getProperty("os.name");
-            osVersion = System.getProperty("os.version");
-            appLogger.info(LocalizationManager.getLocalizedString("handler.log.info.system.enter"));
-            appLogger.info(String.format(LocalizationManager.getLocalizedString("handler.log.info.system.jarpath"), jarPath));
-            appLogger.info(String.format(LocalizationManager.getLocalizedString("handler.log.info.system.jarname"), jarName));
-            appLogger.info(String.format(LocalizationManager.getLocalizedString("handler.log.info.system.java"), javaVersion));
-            appLogger.info(String.format(LocalizationManager.getLocalizedString("handler.log.info.system.osarchitecture"), osArch));
-            appLogger.info(String.format(LocalizationManager.getLocalizedString("handler.log.info.system.osname"), osName));
-            appLogger.info(String.format(LocalizationManager.getLocalizedString("handler.log.info.system.osversion"), osVersion));
-            appLogger.info(LocalizationManager.getLocalizedString("handler.log.info.system.include"));
-
-        } catch (URISyntaxException ex) {
-            appLogger.error(LocalizationManager.getLocalizedString("handler.log.error.system.properties"), ex);
-        }
-
-        if (Arrays.asList(args).contains(Reference.getConfigGenArgument())){
-
-            Reference.cliSetup.setup();
-            Reference.filesSetup.filesSetup();
-
-            if (run()) {
-                System.exit(0);
-            } else {
-                System.exit(1);
-            }
-
-        } else if (Arrays.asList(args).contains(Reference.getRunCliArgument())) {
-
-            if (!Reference.getOldConfigFile().exists() && !Reference.getConfigFile().exists()) {
-
-                Reference.cliSetup.setup();
-            }
-            Reference.filesSetup.filesSetup();
-
-            if (run()) {
-                System.exit(0);
-            } else {
-                System.exit(1);
-            }
-        } else if (GraphicsEnvironment.isHeadless()) {
-
-            if (!Reference.getOldConfigFile().exists() && !Reference.getConfigFile().exists()) {
-
-                Reference.cliSetup.setup();
-            }
-            Reference.filesSetup.filesSetup();
-
-            if (run()) {
-                System.exit(0);
-            } else {
-                System.exit(1);
-            }
-
-        } else {
-            Reference.filesSetup.filesSetup();
-
-            TabbedPane tabbedPane = new TabbedPane();
-            tabbedPane.mainGUI();
-        }
-    }
-
-    /**
-     * Run when serverpackcreator is run in either -cli or -cgen mode. Runs what used to be the main content in Main in pre-1.x.x. times. Inits config checks and, if config checks are successfull, calls methods to create the server pack.
-     * @return Return true if the serverpack was successfully generated, false if not.
-     */
-    public static boolean run() {
-        if (!Reference.configCheck.checkConfigFile(Reference.getConfigFile())) {
-            Reference.copyFiles.cleanupEnvironment(Reference.getModpackDir());
-            try {
-                Reference.copyFiles.copyFiles(Reference.getModpackDir(), Reference.getCopyDirs(), Reference.getClientMods());
-            } catch (IOException ex) {
-                appLogger.error(LocalizationManager.getLocalizedString("handler.log.error.runincli.copyfiles"), ex);
-            }
-            Reference.copyFiles.copyStartScripts(Reference.getModpackDir(), Reference.getModLoader(), Reference.getIncludeStartScripts());
-            if (Reference.getIncludeServerInstallation()) {
-                Reference.serverSetup.installServer(Reference.getModLoader(), Reference.getModpackDir(), Reference.getMinecraftVersion(), Reference.getModLoaderVersion(), Reference.getJavaPath());
-            } else {
-                appLogger.info(LocalizationManager.getLocalizedString("handler.log.info.runincli.server"));
-            }
-            if (Reference.getIncludeServerIcon()) {
-                Reference.copyFiles.copyIcon(Reference.getModpackDir());
-            } else {
-                appLogger.info(LocalizationManager.getLocalizedString("handler.log.info.runincli.icon"));
-            }
-            if (Reference.getIncludeServerProperties()) {
-                Reference.copyFiles.copyProperties(Reference.getModpackDir());
-            } else {
-                appLogger.info(LocalizationManager.getLocalizedString("handler.log.info.runincli.properties"));
-            }
-            if (Reference.getIncludeZipCreation()) {
-                Reference.serverSetup.zipBuilder(Reference.getModpackDir(), Reference.getModLoader(), Reference.getIncludeServerInstallation());
-            } else {
-                appLogger.info(LocalizationManager.getLocalizedString("handler.log.info.runincli.zip"));
-            }
-            appLogger.info(String.format(LocalizationManager.getLocalizedString("handler.log.info.runincli.serverpack"), Reference.getModpackDir()));
-            appLogger.info(String.format(LocalizationManager.getLocalizedString("handler.log.info.runincli.archive"), Reference.getModpackDir()));
-            appLogger.info(LocalizationManager.getLocalizedString("handler.log.info.runincli.finish"));
-            return true;
-        } else {
-            appLogger.error(LocalizationManager.getLocalizedString("handler.log.error.runincli"));
-            return false;
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/main/java/de/griefed/serverpackcreator/Main.java b/src/main/java/de/griefed/serverpackcreator/Main.java
index 407f4167f..00f18f5da 100644
--- a/src/main/java/de/griefed/serverpackcreator/Main.java
+++ b/src/main/java/de/griefed/serverpackcreator/Main.java
@@ -1,10 +1,14 @@
 package de.griefed.serverpackcreator;
 
+import de.griefed.serverpackcreator.gui.CreateGui;
 import de.griefed.serverpackcreator.i18n.IncorrectLanguageException;
 import de.griefed.serverpackcreator.i18n.LocalizationManager;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
+import java.awt.*;
+import java.io.File;
+import java.net.URISyntaxException;
 import java.util.Arrays;
 import java.util.List;
 
@@ -12,24 +16,106 @@ public class Main {
     private static final Logger appLogger = LogManager.getLogger(Main.class);
 
     /**
-     * Init and "main" has been moved to Handler-class. Main now only inits the Localizationmanager and passes the cli args, if any,  to Handler, which then runs the usual operations as they used to be in pre-2.x.x
-     * @param args Commandline arguments with which serverpackcreator is run. Passed to Handler-class which then decides what to do corresponding to input.
+     * Init and "main" has been moved to Handler-class. Main now only inits the LocalizationManager and passes the cli args, if any,  to Handler, which then runs the usual operations as they used to be in pre-2.x.x
+     * @param args Commandline arguments with which ServerPackCreator is run. Passed to Handler-class which then decides what to do corresponding to input.
      */
     public static void main(String[] args) {
+        LocalizationManager localizationManager = new LocalizationManager();
+        ConfigCheck configCheck = new ConfigCheck(localizationManager);
+        FilesSetup filesSetup = new FilesSetup(localizationManager);
+        CreateServerPack createServerPack = new CreateServerPack(localizationManager, configCheck);
+
         List<String> programArgs = Arrays.asList(args);
-        if (Arrays.asList(args).contains(Reference.getLangArgument())) {
+
+        String jarPath = null,
+                jarName = null,
+                javaVersion = null,
+                osArch = null,
+                osName = null,
+                osVersion = null;
+
+        if (Arrays.asList(args).contains("-lang")) {
             try {
-                LocalizationManager.init(programArgs.get(programArgs.indexOf(Reference.getLangArgument()) + 1));
+                localizationManager.init(programArgs.get(programArgs.indexOf("-lang" + 1)));
             } catch (IncorrectLanguageException e) {
-                appLogger.info(programArgs.get(programArgs.indexOf(Reference.getLangArgument()) + 1));
+                appLogger.info(programArgs.get(programArgs.indexOf("-lang" + 1)));
                 appLogger.error("Incorrect language specified, falling back to English (United States)...");
-                LocalizationManager.init();
-            } finally {
-                Handler.main(args);
+                localizationManager.init();
             }
         } else {
-            FilesSetup.checkLocaleFile();
-            Handler.main(args);
+            localizationManager.checkLocaleFile();
+        }
+
+        appLogger.warn(localizationManager.getLocalizedString("handler.log.warn.wip0"));
+        appLogger.warn(localizationManager.getLocalizedString("handler.log.warn.wip1"));
+        appLogger.warn(localizationManager.getLocalizedString("handler.log.warn.wip2"));
+        appLogger.warn(localizationManager.getLocalizedString("handler.log.warn.wip3"));
+        appLogger.warn(localizationManager.getLocalizedString("handler.log.warn.wip4"));
+        appLogger.warn(localizationManager.getLocalizedString("handler.log.warn.wip0"));
+
+        try {
+            jarPath = Main.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath();
+            jarName = jarPath.substring(jarPath.lastIndexOf("/") + 1);
+            javaVersion = System.getProperty("java.version");
+            osArch = System.getProperty("os.arch");
+            osName = System.getProperty("os.name");
+            osVersion = System.getProperty("os.version");
+            appLogger.info(localizationManager.getLocalizedString("handler.log.info.system.enter"));
+            appLogger.info(String.format(localizationManager.getLocalizedString("handler.log.info.system.jarpath"), jarPath));
+            appLogger.info(String.format(localizationManager.getLocalizedString("handler.log.info.system.jarname"), jarName));
+            appLogger.info(String.format(localizationManager.getLocalizedString("handler.log.info.system.java"), javaVersion));
+            appLogger.info(String.format(localizationManager.getLocalizedString("handler.log.info.system.osarchitecture"), osArch));
+            appLogger.info(String.format(localizationManager.getLocalizedString("handler.log.info.system.osname"), osName));
+            appLogger.info(String.format(localizationManager.getLocalizedString("handler.log.info.system.osversion"), osVersion));
+            appLogger.info(localizationManager.getLocalizedString("handler.log.info.system.include"));
+
+        } catch (URISyntaxException ex) {
+            appLogger.error(localizationManager.getLocalizedString("handler.log.error.system.properties"), ex);
+        }
+
+        filesSetup.filesSetup();
+
+
+        if (Arrays.asList(args).contains("-cgen")) {
+
+            configCheck.createConfigurationFile();
+
+            if (createServerPack.run()) {
+                System.exit(0);
+            } else {
+                System.exit(1);
+            }
+
+        } else if (Arrays.asList(args).contains("-cli")) {
+
+            if (!new File("creator.conf").exists() && !new File("serverpackcreator.conf").exists()) {
+
+                configCheck.createConfigurationFile();
+            }
+
+            if (createServerPack.run()) {
+                System.exit(0);
+            } else {
+                System.exit(1);
+            }
+        } else if (GraphicsEnvironment.isHeadless()) {
+
+            if (!new File("creator.conf").exists() && !new File("serverpackcreator.conf").exists()) {
+
+                configCheck.createConfigurationFile();
+            }
+
+            if (createServerPack.run()) {
+                System.exit(0);
+            } else {
+                System.exit(1);
+            }
+
+        } else {
+
+            CreateGui tabbedPane = new CreateGui(localizationManager, configCheck);
+            tabbedPane.mainGUI();
+
         }
     }
 }
\ No newline at end of file
diff --git a/src/main/java/de/griefed/serverpackcreator/Reference.java b/src/main/java/de/griefed/serverpackcreator/Reference.java
deleted file mode 100644
index a466666a0..000000000
--- a/src/main/java/de/griefed/serverpackcreator/Reference.java
+++ /dev/null
@@ -1,304 +0,0 @@
-package de.griefed.serverpackcreator;
-
-import com.typesafe.config.Config;
-import de.griefed.serverpackcreator.curseforgemodpack.CreateModpack;
-
-import java.io.File;
-import java.util.Arrays;
-import java.util.List;
-
-public class Reference {
-    private static final String MINECRAFT_MANIFEST_URL = "https://launchermeta.mojang.com/mc/game/version_manifest.json";
-    private static final String FORGE_MANIFEST_URL     = "https://files.minecraftforge.net/net/minecraftforge/forge/maven-metadata.json";
-    private static final String FABRIC_MANIFEST_URL    = "https://maven.fabricmc.net/net/fabricmc/fabric-loader/maven-metadata.xml";
-
-    private static final String LANG_ARGUMENT       = "-lang";
-    private static final String CONFIG_GEN_ARGUMENT = "-cgen";
-    private static final String RUN_CLI_ARGUMENT    = "-cli";
-
-    private static final File configFile        = new File("serverpackcreator.conf");
-    private static final File oldConfigFile     = new File("creator.conf");
-
-
-    private static final File propertiesFile    = new File("server.properties");
-    private static final File iconFile          = new File("server-icon.png");
-    private static final File forgeWindowsFile  = new File("start-forge.bat");
-    private static final File forgeLinuxFile    = new File("start-forge.sh");
-    private static final File fabricWindowsFile = new File("start-fabric.bat");
-    private static final File fabricLinuxFile   = new File("start-fabric.sh");
-
-    private static final File langPropertiesFile = new File("lang.properties");
-
-    //-- If you wish to expand this list, fork this repository, make your changes, and submit a PR -------------------------
-    private static final String[] SUPPORTED_LANGUAGES = {
-            "en_us",
-            "uk_ua",
-            "de_de"
-    };
-
-    public static final CreateModpack createModpack = new CreateModpack();
-
-    public static final FilesSetup      filesSetup      = new FilesSetup();
-    public static final CLISetup        cliSetup        = new CLISetup();
-    public static final ConfigCheck     configCheck     = new ConfigCheck();
-           static final CopyFiles       copyFiles       = new CopyFiles();
-           static final ServerSetup     serverSetup     = new ServerSetup();
-           static final ServerUtilities serverUtilities = new ServerUtilities();
-
-    private static Config config;
-
-    //-- If you wish to expand this list, fork this repository, make your changes, and submit a PR -------------------------
-    private static final List<String> fallbackModsList = Arrays.asList(
-            "AmbientSounds",
-            "BackTools",
-            "BetterAdvancement",
-            "BetterPing",
-            "cherished",
-            "ClientTweaks",
-            "Controlling",
-            "DefaultOptions",
-            "durability",
-            "DynamicSurroundings",
-            "itemzoom",
-            "jei-professions",
-            "jeiintegration",
-            "JustEnoughResources",
-            "MouseTweaks",
-            "Neat",
-            "OldJavaWarning",
-            "PackMenu",
-            "preciseblockplacing",
-            "SimpleDiscordRichPresence",
-            "SpawnerFix",
-            "TipTheScales",
-            "WorldNameRandomizer"
-    );
-
-    private static List<String>
-            clientMods,
-            copyDirs;
-
-    private static String
-            modpackDir,
-            javaPath,
-            minecraftVersion,
-            modLoader,
-            modLoaderVersion;
-
-    private static Boolean
-            includeServerInstallation,
-            includeServerIcon,
-            includeServerProperties,
-            includeStartScripts,
-            includeZipCreation;
-
-    private static int
-            projectID,
-            projectFileID;
-
-    static String getMinecraftManifestUrl() {
-        return MINECRAFT_MANIFEST_URL;
-    }
-
-
-    static String getForgeManifestUrl() {
-        return FORGE_MANIFEST_URL;
-    }
-
-
-    static String getFabricManifestUrl() {
-        return FABRIC_MANIFEST_URL;
-    }
-
-
-    static String getLangArgument() {
-        return LANG_ARGUMENT;
-    }
-
-
-    static String getConfigGenArgument() {
-        return CONFIG_GEN_ARGUMENT;
-    }
-
-
-    static String getRunCliArgument() {
-        return RUN_CLI_ARGUMENT;
-    }
-
-
-    public static File getConfigFile() {
-        return configFile;
-    }
-
-
-    static File getOldConfigFile() {
-        return oldConfigFile;
-    }
-
-
-    static File getPropertiesFile() {
-        return propertiesFile;
-    }
-
-
-    static File getIconFile() {
-        return iconFile;
-    }
-
-
-    static File getForgeWindowsFile() {
-        return forgeWindowsFile;
-    }
-
-
-    static File getForgeLinuxFile() {
-        return forgeLinuxFile;
-    }
-
-
-    static File getFabricWindowsFile() {
-        return fabricWindowsFile;
-    }
-
-
-    static File getFabricLinuxFile() {
-        return fabricLinuxFile;
-    }
-
-
-    static File getLangPropertiesFile() {
-        return langPropertiesFile;
-    }
-
-
-    protected static String[] getSupportedLanguages() {
-        return SUPPORTED_LANGUAGES;
-    }
-
-
-    public static Config getConfig() {
-        return config;
-    }
-    public static void setConfig(Config newConfig) {
-        config = newConfig;
-    }
-
-
-    static List<String> getFallbackModsList() {
-        return fallbackModsList;
-    }
-
-
-    static List<String> getClientMods() {
-        return clientMods;
-    }
-    static void setClientMods(List<String> newClientMods) {
-        clientMods = newClientMods;
-    }
-
-
-    static List<String> getCopyDirs() {
-        return copyDirs;
-    }
-    static void setCopyDirs(List<String> newCopyDirs) {
-        copyDirs = newCopyDirs;
-    }
-
-
-    static String getModpackDir() {
-        return modpackDir;
-    }
-    static void setModpackDir(String newModpackDir) {
-        newModpackDir = newModpackDir.replace("\\","/");
-        modpackDir = newModpackDir;
-    }
-
-
-    static String getJavaPath() {
-        return javaPath;
-    }
-    static void setJavaPath(String newJavaPath) {
-        newJavaPath = newJavaPath.replace("\\", "/");
-        javaPath = newJavaPath;
-    }
-
-
-    static String getMinecraftVersion() {
-        return minecraftVersion;
-    }
-    static void setMinecraftVersion(String newMinecraftVersion) {
-        minecraftVersion = newMinecraftVersion;
-    }
-
-
-    static String getModLoader() {
-        return modLoader;
-    }
-    static void setModLoader(String newModLoader) {
-        modLoader = newModLoader;
-    }
-
-
-    static String getModLoaderVersion() {
-        return modLoaderVersion;
-    }
-    static void setModLoaderVersion(String newModLoaderVersion) {
-        modLoaderVersion = newModLoaderVersion;
-    }
-
-
-    static boolean getIncludeServerInstallation() {
-        return includeServerInstallation;
-    }
-    static void setIncludeServerInstallation(boolean newIncludeServerInstallation) {
-        includeServerInstallation = newIncludeServerInstallation;
-    }
-
-
-    static boolean getIncludeServerIcon() {
-        return includeServerIcon;
-    }
-    static void setIncludeServerIcon(boolean newIncludeServerIcon) {
-        includeServerIcon = newIncludeServerIcon;
-    }
-
-
-    static boolean getIncludeServerProperties() {
-        return includeServerProperties;
-    }
-    static void setIncludeServerProperties(boolean newIncludeServerProperties) {
-        includeServerProperties = newIncludeServerProperties;
-    }
-
-
-    static boolean getIncludeStartScripts() {
-        return includeStartScripts;
-    }
-    static void setIncludeStartScripts(boolean newIncludeStartScripts) {
-        includeStartScripts = newIncludeStartScripts;
-    }
-
-
-    static boolean getIncludeZipCreation() {
-        return includeZipCreation;
-    }
-    static void setIncludeZipCreation(boolean newIncludeZipCreation) {
-        includeZipCreation = newIncludeZipCreation;
-    }
-
-
-    static int getProjectID() {
-        return projectID;
-    }
-    static void setProjectID(int newProjectID) {
-        projectID = newProjectID;
-    }
-
-
-    static int getProjectFileID() {
-        return projectFileID;
-    }
-    static void setProjectFileID(int newProjectFileID) {
-        projectFileID = newProjectFileID;
-    }
-}
\ No newline at end of file
diff --git a/src/main/java/de/griefed/serverpackcreator/ServerSetup.java b/src/main/java/de/griefed/serverpackcreator/ServerSetup.java
deleted file mode 100644
index b82395c4e..000000000
--- a/src/main/java/de/griefed/serverpackcreator/ServerSetup.java
+++ /dev/null
@@ -1,143 +0,0 @@
-package de.griefed.serverpackcreator;
-
-import de.griefed.serverpackcreator.i18n.LocalizationManager;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
-import java.io.*;
-import java.nio.file.*;
-import java.nio.file.attribute.BasicFileAttributes;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipOutputStream;
-
-class ServerSetup {
-    private static final Logger appLogger = LogManager.getLogger(FilesSetup.class);
-    private static final Logger installerLogger = LogManager.getLogger("InstallerLogger");
-    /** Installs the files for a Forge/Fabric server.
-     * @param modLoader String. The modloader for which to install the server.
-     * @param modpackDir String. /server_pack The directory where the modloader server will be installed in.
-     * @param minecraftVersion String. The Minecraft version for which to install the modloader and Minecraft server.
-     * @param modLoaderVersion String. The modloader version for which to install the modloader and Minecraft server.
-     * @param javaPath String. Path to Java installation needed to execute the Fabric and Forge installers.
-     */
-    void installServer(String modLoader, String modpackDir, String minecraftVersion, String modLoaderVersion, String javaPath) {
-        File fabricInstaller = new File(String.format("%s/server_pack/fabric-installer.jar", modpackDir));
-        File forgeInstaller = new File(String.format("%s/server_pack/forge-installer.jar", modpackDir));
-        if (modLoader.equalsIgnoreCase("Fabric")) {
-            try {
-                appLogger.info(LocalizationManager.getLocalizedString("serversetup.log.info.installserver.fabric.enter"));
-                installerLogger.info(LocalizationManager.getLocalizedString("serversetup.log.info.installserver.fabric.enter"));
-                if (Reference.serverUtilities.downloadFabricJar(modpackDir)) {
-                    appLogger.info(LocalizationManager.getLocalizedString("serversetup.log.info.installserver.fabric.download"));
-                    ProcessBuilder processBuilder = new ProcessBuilder(
-                            javaPath,
-                            "-jar",
-                            "fabric-installer.jar",
-                            "server",
-                            String.format("-mcversion %s", minecraftVersion),
-                            String.format("-loader %s", modLoaderVersion),
-                            "-downloadMinecraft").directory(new File(String.format("%s/server_pack", modpackDir)));
-                    processBuilder.redirectErrorStream(true);
-                    Process process = processBuilder.start();
-                    BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
-                    String line;
-                    while (true) {
-                        line = reader.readLine();
-                        if (line == null) { break; }
-                        installerLogger.info(line);
-                    }
-                    installerLogger.info(LocalizationManager.getLocalizedString("serversetup.log.info.installserver"));
-                    reader.close();
-                    appLogger.info(LocalizationManager.getLocalizedString("serversetup.log.info.installserver.fabric.details"));
-                    appLogger.info(LocalizationManager.getLocalizedString("serversetup.log.info.installserver"));
-                } else {
-                    appLogger.error(LocalizationManager.getLocalizedString("serversetup.log.error.installserver.fabric"));
-                }
-            } catch (IOException ex) {
-                appLogger.error(LocalizationManager.getLocalizedString("serversetup.log.error.installserver.fabricfail"), ex);
-            }
-        } else if (modLoader.equalsIgnoreCase("Forge")) {
-            try {
-                appLogger.info(LocalizationManager.getLocalizedString("serversetup.log.info.installserver.forge.enter"));
-                installerLogger.info(LocalizationManager.getLocalizedString("serversetup.log.info.installserver.forge.enter"));
-                if (Reference.serverUtilities.downloadForgeJar(minecraftVersion, modLoaderVersion, modpackDir)) {
-                    appLogger.info(LocalizationManager.getLocalizedString("serversetup.log.info.installserver.forge.download"));
-                    ProcessBuilder processBuilder = new ProcessBuilder(
-                            javaPath,
-                            "-jar",
-                            "forge-installer.jar",
-                            "--installServer")
-                            .directory(new File(String.format("%s/server_pack", modpackDir)));
-                    processBuilder.redirectErrorStream(true);
-                    Process process = processBuilder.start();
-                    BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
-                    String line;
-                    while (true) {
-                        line = reader.readLine();
-                        if (line == null) { break; }
-                        installerLogger.info(line);
-                    }
-                    installerLogger.info(LocalizationManager.getLocalizedString("serversetup.log.info.installserver"));
-                    reader.close();
-                    appLogger.info(LocalizationManager.getLocalizedString("serversetup.log.info.installserver.forge.details"));
-                    appLogger.info(LocalizationManager.getLocalizedString("serversetup.log.info.installserver"));
-                    process.destroy();
-                } else {
-                    appLogger.error(LocalizationManager.getLocalizedString("serversetup.log.error.installserver.forge"));
-                }
-            } catch (IOException ex) {
-                appLogger.error(LocalizationManager.getLocalizedString("serversetup.log.error.installserver.forgefail"), ex);
-            }
-        } else {
-            appLogger.error(String.format(LocalizationManager.getLocalizedString("configcheck.log.error.checkmodloader"), modLoader));
-        }
-
-        Reference.serverUtilities.generateDownloadScripts(modLoader, modpackDir, minecraftVersion);
-        Reference.serverUtilities.cleanUpServerPack(
-                fabricInstaller,
-                forgeInstaller,
-                modLoader,
-                modpackDir,
-                minecraftVersion, modLoaderVersion);
-
-    }
-    /** Create a zip-archive of the serverpack, excluding Mojang's minecraft_server.jar.
-     * With help from https://stackoverflow.com/questions/1091788/how-to-create-a-zip-file-in-java
-     * @param modpackDir String. The directory where the zip-archive will be created and saved in.
-     * @param modLoader String. Determines the name of Minecraft#s server jar which will be deleted from the zip-archive.
-     * @param includeServerInstallation Boolean. Determines whether the Minecraft server jar needs to be deleted from the zip-archive.
-     */
-    void zipBuilder(String modpackDir, String modLoader, Boolean includeServerInstallation) {
-        final Path sourceDir = Paths.get(String.format("%s/server_pack", modpackDir));
-        String zipFileName = sourceDir.toString().concat(".zip");
-        appLogger.info(LocalizationManager.getLocalizedString("serversetup.log.info.zipbuilder.enter"));
-        try {
-            final ZipOutputStream outputStream = new ZipOutputStream(new FileOutputStream(zipFileName));
-            Files.walkFileTree(sourceDir, new SimpleFileVisitor<Path>() {
-                @Override
-                public FileVisitResult visitFile(Path file, BasicFileAttributes attributes) {
-                    try {
-                        Path targetFile = sourceDir.relativize(file);
-                        outputStream.putNextEntry(new ZipEntry(targetFile.toString()));
-                        byte[] bytes = Files.readAllBytes(file);
-                        outputStream.write(bytes, 0, bytes.length);
-                        outputStream.closeEntry();
-                    } catch (IOException ex) {
-                        appLogger.error(LocalizationManager.getLocalizedString("serversetup.log.error.zipbuilder.create"), ex);
-                    }
-                    return FileVisitResult.CONTINUE;
-                }
-            });
-            outputStream.close();
-        } catch (IOException ex) {
-            appLogger.error(LocalizationManager.getLocalizedString("serversetup.log.error.zipbuilder.create"), ex);
-        }
-        if (includeServerInstallation) {
-            Reference.serverUtilities.deleteMinecraftJar(modLoader, modpackDir);
-            appLogger.warn(LocalizationManager.getLocalizedString("serversetup.log.warn.zipbuilder.minecraftjar1"));
-            appLogger.warn(LocalizationManager.getLocalizedString("serversetup.log.warn.zipbuilder.minecraftjar2"));
-            appLogger.warn(LocalizationManager.getLocalizedString("serversetup.log.warn.zipbuilder.minecraftjar3"));
-        }
-        appLogger.info(LocalizationManager.getLocalizedString("serversetup.log.info.zipbuilder.finish"));
-    }
-}
\ No newline at end of file
diff --git a/src/main/java/de/griefed/serverpackcreator/ServerUtilities.java b/src/main/java/de/griefed/serverpackcreator/ServerUtilities.java
deleted file mode 100644
index a5e0713df..000000000
--- a/src/main/java/de/griefed/serverpackcreator/ServerUtilities.java
+++ /dev/null
@@ -1,362 +0,0 @@
-package de.griefed.serverpackcreator;
-
-import de.griefed.serverpackcreator.i18n.LocalizationManager;
-import net.fabricmc.installer.util.LauncherMeta;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.w3c.dom.Document;
-import org.xml.sax.SAXException;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.xpath.XPath;
-import javax.xml.xpath.XPathConstants;
-import javax.xml.xpath.XPathExpressionException;
-import javax.xml.xpath.XPathFactory;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.net.URI;
-import java.net.URL;
-import java.nio.channels.Channels;
-import java.nio.channels.FileChannel;
-import java.nio.channels.ReadableByteChannel;
-import java.nio.file.*;
-import java.util.HashMap;
-import java.util.Map;
-
-import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
-
-class ServerUtilities {
-    private static final Logger appLogger = LogManager.getLogger(FilesSetup.class);
-
-    /** Calls methods for generating download scripts for Mojang's Minecraft server depending on the specified versions and modloader.
-     * @param modLoader String. The specified modloader determines the name under which Mojang's server jar will be downloaded as.
-     * @param modpackDir String. /server_pack The directory where the scripts will be placed in.
-     * @param minecraftVersion String. The version of the Minecraft server jar to download.
-     */
-    void generateDownloadScripts(String modLoader, String modpackDir, String minecraftVersion) {
-        if (modLoader.equalsIgnoreCase("Fabric")) {
-            fabricShell(modpackDir, minecraftVersion);
-            fabricBatch(modpackDir, minecraftVersion);
-        } else if (modLoader.equalsIgnoreCase("Forge")) {
-            forgeShell(modpackDir, minecraftVersion);
-            forgeBatch(modpackDir, minecraftVersion);
-        } else {
-            appLogger.error(String.format(LocalizationManager.getLocalizedString("configcheck.log.error.checkmodloader"), modLoader));
-        }
-    }
-
-    /** Generates download scripts for Mojang's Minecraft server for Fabric,Linux.
-     * @param modpackDir String. /server_pack The directory where the scripts will be placed in.
-     * @param minecraftVersion String. The version of the Minecraft server jar to download.
-     */
-    private void fabricShell(String modpackDir, String minecraftVersion) {
-        try {
-            String downloadMinecraftServer = (new URL(
-                    LauncherMeta
-                            .getLauncherMeta()
-                            .getVersion(minecraftVersion)
-                            .getVersionMeta()
-                            .downloads
-                            .get("server")
-                            .url))
-                    .toString();
-            String shFabric = String.format("#!/bin/bash\n#Download the Minecraft_server.jar for your modpack\n\nwget -O server.jar %s", downloadMinecraftServer);
-            Path pathSh = Paths.get(String.format("%s/server_pack/download_minecraft-server.jar_fabric.sh", modpackDir));
-            byte[] strToBytesSh = shFabric.getBytes();
-            Files.write(pathSh, strToBytesSh);
-            String readSh = Files.readAllLines(pathSh).get(0);
-            appLogger.debug(String.format(LocalizationManager.getLocalizedString("serverutilities.log.debug.fabricshell"), readSh));
-        } catch (IOException ex) {
-            appLogger.error(LocalizationManager.getLocalizedString("serverutilities.log.error.fabricshell"), ex);
-        }
-        appLogger.info(LocalizationManager.getLocalizedString("serverutilities.log.info.fabricshell"));
-    }
-
-    /** Generates download scripts for Mojang's Minecraft server for Fabric,Windows.
-     * @param modpackDir String. /server_pack The directory where the scripts will be placed in.
-     * @param minecraftVersion String. The version of the Minecraft server jar to download.
-     */
-    private void fabricBatch(String modpackDir, String minecraftVersion) {
-        try {
-            String downloadMinecraftServer = (new URL(
-                    LauncherMeta
-                            .getLauncherMeta()
-                            .getVersion(minecraftVersion)
-                            .getVersionMeta()
-                            .downloads
-                            .get("server")
-                            .url))
-                    .toString();
-            String batFabric = String.format("powershell -Command \"(New-Object Net.WebClient).DownloadFile('%s', 'server.jar')\"", downloadMinecraftServer);
-            Path pathBat = Paths.get(String.format("%s/server_pack/download_minecraft-server.jar_fabric.bat", modpackDir));
-            byte[] strToBytesBat = batFabric.getBytes();
-            Files.write(pathBat, strToBytesBat);
-            String readBat = Files.readAllLines(pathBat).get(0);
-            appLogger.debug(String.format(LocalizationManager.getLocalizedString("serverutilities.log.debug.fabricbatch"), readBat));
-        } catch (IOException ex) {
-            appLogger.error(LocalizationManager.getLocalizedString("serverutilities.log.error.fabricbatch"), ex);
-        }
-        appLogger.info(LocalizationManager.getLocalizedString("serverutilities.log.info.fabricbatch"));
-    }
-
-    /** Generates download scripts for Mojang's Minecraft server for Forge,Linux.
-     * @param modpackDir String. /server_pack The directory where the scripts will be placed in.
-     * @param minecraftVersion String. The version of the Minecraft server jar to download.
-     */
-    private void forgeShell(String modpackDir, String minecraftVersion) {
-        try {
-            String downloadMinecraftServer = (new URL(
-                    LauncherMeta
-                            .getLauncherMeta()
-                            .getVersion(minecraftVersion)
-                            .getVersionMeta()
-                            .downloads
-                            .get("server")
-                            .url))
-                    .toString();
-            String shForge = String.format("#!/bin/bash\n# Download the Minecraft_server.jar for your modpack\n\nwget -O minecraft_server.%s.jar %s", minecraftVersion, downloadMinecraftServer);
-            Path pathSh = Paths.get(String.format("%s/server_pack/download_minecraft-server.jar_forge.sh", modpackDir));
-            byte[] strToBytesSh = shForge.getBytes();
-            Files.write(pathSh, strToBytesSh);
-            String readSh = Files.readAllLines(pathSh).get(0);
-            appLogger.debug(String.format(LocalizationManager.getLocalizedString("serverutilities.log.debug.forgeshell"), readSh));
-        } catch (IOException ex) {
-            appLogger.error(LocalizationManager.getLocalizedString("serverutilities.log.error.forgeshell"), ex);
-        }
-        appLogger.info(LocalizationManager.getLocalizedString("serverutilities.log.info.forgeshell"));
-    }
-
-    /** Generates download scripts for Mojang's Minecraft server for Forge,Windows.
-     * @param modpackDir String. /server_pack The directory where the scripts will be placed in.
-     * @param minecraftVersion String. The version of the Minecraft server jar to download.
-     */
-    private void forgeBatch(String modpackDir, String minecraftVersion) {
-        try {
-            String downloadMinecraftServer = (new URL(
-                    LauncherMeta
-                            .getLauncherMeta()
-                            .getVersion(minecraftVersion)
-                            .getVersionMeta()
-                            .downloads
-                            .get("server")
-                            .url))
-                    .toString();
-            String batForge = String.format("powershell -Command \"(New-Object Net.WebClient).DownloadFile('%s', 'minecraft_server.%s.jar')\"", downloadMinecraftServer, minecraftVersion);
-            Path pathBat = Paths.get(String.format("%s/server_pack/download_minecraft-server.jar_forge.bat", modpackDir));
-            byte[] strToBytesBat = batForge.getBytes();
-            Files.write(pathBat, strToBytesBat);
-            String readBat = Files.readAllLines(pathBat).get(0);
-            appLogger.debug(String.format(LocalizationManager.getLocalizedString("serverutilities.log.debug.forgebatch"), readBat));
-        } catch (IOException ex) {
-            appLogger.error(LocalizationManager.getLocalizedString("serverutilities.log.error.forgebatch"), ex);
-        }
-        appLogger.info(LocalizationManager.getLocalizedString("serverutilities.log.info.forgebatch"));
-    }
-
-    /** Downloads the specified version of Fabric.
-     * @param modpackDir String. /server_pack The directory where the Fabric installer will be placed in.
-     * @return Boolean. Returns true if the download was successful. False if not.
-     */
-    boolean downloadFabricJar(String modpackDir) {
-        boolean downloaded = false;
-        try {
-            appLogger.info(LocalizationManager.getLocalizedString("serverutilities.log.info.downloadfabricjar.enter"));
-            String latestFabricInstaller = latestFabricInstaller(modpackDir);
-            URL downloadFabric = new URL(String.format("https://maven.fabricmc.net/net/fabricmc/fabric-installer/%s/fabric-installer-%s.jar", latestFabricInstaller, latestFabricInstaller));
-
-            ReadableByteChannel readableByteChannel = Channels.newChannel(downloadFabric.openStream());
-            FileOutputStream downloadFabricFileOutputStream = new FileOutputStream(String.format("%s/server_pack/fabric-installer.jar", modpackDir));
-            FileChannel downloadFabricFileChannel = downloadFabricFileOutputStream.getChannel();
-            downloadFabricFileOutputStream.getChannel().transferFrom(readableByteChannel, 0, Long.MAX_VALUE);
-
-            downloadFabricFileOutputStream.flush();
-            downloadFabricFileOutputStream.close();
-            readableByteChannel.close();
-            downloadFabricFileChannel.close();
-
-        } catch (IOException e) {
-            appLogger.error(LocalizationManager.getLocalizedString("serverutilities.log.error.downloadfabricjar.download"), e);
-            if (new File(String.format("%s/server_pack/fabric-installer.jar", modpackDir)).exists()) {
-                try {
-                    Files.delete(Paths.get(String.format("%s/server_pack/fabric-installer.jar", modpackDir)));
-                } catch (IOException ex) {
-                    appLogger.error(LocalizationManager.getLocalizedString("serverutilities.log.error.downloadfabricjar.delete"), ex);
-                }
-            }
-        }
-        if (new File(String.format("%s/server_pack/fabric-installer.jar", modpackDir)).exists()) {
-            downloaded = true;
-        }
-        return downloaded;
-    }
-
-    /** Returns the latest installer version for the Fabric installer to be used in ServerSetup.installServer.
-     * @param modpackDir String. /server_pack The directory where the Fabric installer will be placed in.
-     * @return Boolean. Returns true if the download was successful. False if not.
-     */
-    private String latestFabricInstaller(String modpackDir) {
-        String result;
-        try {
-            URL downloadFabricXml = new URL("https://maven.fabricmc.net/net/fabricmc/fabric-installer/maven-metadata.xml");
-
-            ReadableByteChannel downloadFabricXmlReadableByteChannel = Channels.newChannel(downloadFabricXml.openStream());
-            FileOutputStream downloadFabricXmlFileOutputStream = new FileOutputStream(String.format("%s/server_pack/fabric-installer.xml", modpackDir));
-            FileChannel downloadFabricXmlFileChannel = downloadFabricXmlFileOutputStream.getChannel();
-            downloadFabricXmlFileOutputStream.getChannel().transferFrom(downloadFabricXmlReadableByteChannel, 0, Long.MAX_VALUE);
-
-            downloadFabricXmlFileOutputStream.flush();
-            downloadFabricXmlFileOutputStream.close();
-            downloadFabricXmlReadableByteChannel.close();
-            downloadFabricXmlFileChannel.close();
-
-            DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
-            DocumentBuilder builder = domFactory.newDocumentBuilder();
-            Document fabricXml = builder.parse(new File(String.format("%s/server_pack/fabric-installer.xml",modpackDir)));
-            XPathFactory xPathFactory = XPathFactory.newInstance();
-            XPath xpath = xPathFactory.newXPath();
-
-            result = (String) xpath.evaluate("/metadata/versioning/release", fabricXml, XPathConstants.STRING);
-            appLogger.info(LocalizationManager.getLocalizedString("serverutilities.log.info.latestfabricinstaller"));
-        } catch (IOException | ParserConfigurationException | SAXException | XPathExpressionException ex) {
-            appLogger.error(LocalizationManager.getLocalizedString("serverutilities.log.error.latestfabricinstaller"), ex);
-            result = "0.7.2";
-        }
-        return result;
-    }
-
-    /** Downloads the specified version of the Forge installer to be used in ServerSetup.installServer.
-     * @param minecraftVersion String. The Minecraft version corresponding to the Forge version. Minecraft version and Forge version build a pair.
-     * @param modLoaderVersion String. The Forge version corresponding to the Minecraft version. Minecraft version and Forge version build a pair.
-     * @param modpackDir String. /server_pack The directory where the Forge installer will be placed in.
-     * @return Boolean. Returns true if the download was successful. False if not.
-     */
-    boolean downloadForgeJar(String minecraftVersion, String modLoaderVersion, String modpackDir) {
-        boolean downloaded = false;
-        try {
-            appLogger.info(LocalizationManager.getLocalizedString("serverutilities.log.info.downloadforgejar.enter"));
-            URL downloadForge = new URL(String.format("https://files.minecraftforge.net/maven/net/minecraftforge/forge/%s-%s/forge-%s-%s-installer.jar", minecraftVersion, modLoaderVersion, minecraftVersion, modLoaderVersion));
-
-            ReadableByteChannel readableByteChannel = Channels.newChannel(downloadForge.openStream());
-            FileOutputStream downloadForgeFileOutputStream = new FileOutputStream(String.format("%s/server_pack/forge-installer.jar", modpackDir));
-            FileChannel downloadForgeFileChannel = downloadForgeFileOutputStream.getChannel();
-            downloadForgeFileOutputStream.getChannel().transferFrom(readableByteChannel, 0, Long.MAX_VALUE);
-
-            downloadForgeFileOutputStream.flush();
-            downloadForgeFileOutputStream.close();
-            readableByteChannel.close();
-            downloadForgeFileChannel.close();
-
-        } catch (IOException e) {
-            appLogger.error(LocalizationManager.getLocalizedString("serverutilities.log.error.downloadforgejar.download"), e);
-            if (new File(String.format("%s/server_pack/forge-installer.jar", modpackDir)).exists()) {
-                if (new File(String.format("%s/server_pack/forge-installer.jar", modpackDir)).delete()) {
-                    appLogger.error(LocalizationManager.getLocalizedString("serverutilities.log.debug.downloadforgejar"));
-                }
-            }
-        }
-        if (new File(String.format("%s/server_pack/forge-installer.jar", modpackDir)).exists()) {
-            downloaded = true;
-        }
-        return downloaded;
-    }
-
-    /** Deletes Mojang's minecraft_server.jar from the zip-archive so users do not accidentally upload a file containing software from Mojang.
-     * With help from https://stackoverflow.com/questions/5244963/delete-files-from-a-zip-archive-without-decompressing-in-java-or-maybe-python and https://bugs.openjdk.java.net/browse/JDK-8186227
-     * @param modLoader String. Determines the name of the file to delete.
-     * @param modpackDir String. /server_pack The directory in which the file will be deleted.
-     */
-    void deleteMinecraftJar(String modLoader, String modpackDir) {
-        if (modLoader.equalsIgnoreCase("Forge")) {
-            appLogger.info(LocalizationManager.getLocalizedString("serverutilities.log.info.deleteminecraftjar.enter"));
-
-            Map<String, String> zip_properties = new HashMap<>();
-            zip_properties.put("create", "false");
-            zip_properties.put("encoding", "UTF-8");
-
-            Path serverpackZip = Paths.get(String.format("%s/server_pack.zip", modpackDir));
-            URI zipUri = URI.create("jar:" + serverpackZip.toUri());
-
-            try (FileSystem zipfs = FileSystems.newFileSystem(zipUri, zip_properties)) {
-                Path pathInZipfile = zipfs.getPath("minecraft_server.1.16.5.jar");
-                Files.delete(pathInZipfile);
-                appLogger.info(LocalizationManager.getLocalizedString("serverutilities.log.info.deleteminecraftjar.success"));
-            } catch (IOException ex) {
-                appLogger.error(LocalizationManager.getLocalizedString("serverutilities.log.error.deleteminecraftjar.delete"), ex);
-            }
-        } else if (modLoader.equalsIgnoreCase("Fabric")) {
-            appLogger.info(LocalizationManager.getLocalizedString("serverutilities.log.info.deleteminecraftjar.enter"));
-
-            Map<String, String> zip_properties = new HashMap<>();
-            zip_properties.put("create", "false");
-            zip_properties.put("encoding", "UTF-8");
-
-            Path serverpackZip = Paths.get(String.format("%s/server_pack.zip", modpackDir));
-            URI zipUri = URI.create(String.format("jar:%s", serverpackZip.toUri()));
-
-            try (FileSystem zipfs = FileSystems.newFileSystem(zipUri, zip_properties)) {
-                Path pathInZipfile = zipfs.getPath("server.jar");
-                Files.delete(pathInZipfile);
-                appLogger.info(LocalizationManager.getLocalizedString("serverutilities.log.info.deleteminecraftjar.success"));
-            } catch (IOException ex) {
-                appLogger.error(LocalizationManager.getLocalizedString("serverutilities.log.error.deleteminecraftjar.delete"), ex);
-            }
-        } else {
-            appLogger.error(String.format(LocalizationManager.getLocalizedString("configcheck.log.error.checkmodloader"), modLoader));
-        }
-    }
-
-    /** Deletes remnant files from Fabric/Forge installation no longer needed.
-     * @param fabricInstaller File. Fabric installer to be deleted.
-     * @param forgeInstaller File. Forge installer to be deleted.
-     * @param modLoader String. Whether Forge or Fabric files are to be deleted.
-     * @param modpackDir String. /server_pack The directory where files are to be deleted.
-     * @param minecraftVersion String. Needed for renaming the Forge server jar to work with launch scripts provided by serverpackcreator.
-     * @param modLoaderVersion String. Needed for renaming the Forge server jar to work with launch scripts provided by serverpackcreator.
-     */
-    void cleanUpServerPack(File fabricInstaller, File forgeInstaller, String modLoader, String modpackDir, String minecraftVersion, String modLoaderVersion) {
-        appLogger.info(LocalizationManager.getLocalizedString("serverutilities.log.info.cleanupserverpack.enter"));
-        if (modLoader.equalsIgnoreCase("Fabric")) {
-            File fabricXML = new File(String.format("%s/server_pack/fabric-installer.xml", modpackDir));
-            boolean isXmlDeleted = fabricXML.delete();
-            boolean isInstallerDeleted = fabricInstaller.delete();
-            if (isXmlDeleted)
-            { appLogger.info(String.format(LocalizationManager.getLocalizedString("serverutilities.log.info.cleanupserverpack.deleted"), fabricXML.getName())); }
-            else
-            { appLogger.error(String.format(LocalizationManager.getLocalizedString("serverutilities.log.error.cleanupserverpack.delete"), fabricXML.getName())); }
-
-            if (isInstallerDeleted)
-            { appLogger.info(String.format(LocalizationManager.getLocalizedString("serverutilities.log.info.cleanupserverpack.deleted"), fabricInstaller.getName())); }
-            else
-            { appLogger.error(String.format(LocalizationManager.getLocalizedString("serverutilities.log.error.cleanupserverpack.delete"), fabricInstaller.getName())); }
-
-        } else if (modLoader.equalsIgnoreCase("Forge")) {
-            try {
-                Files.copy(
-                        Paths.get(String.format("%s/server_pack/forge-%s-%s.jar", modpackDir, minecraftVersion, modLoaderVersion)),
-                        Paths.get(String.format("%s/server_pack/forge.jar", modpackDir)),
-                        REPLACE_EXISTING);
-                boolean isOldJarDeleted = (new File(
-                        String.format("%s/server_pack/forge-%s-%s.jar", modpackDir, minecraftVersion, modLoaderVersion))).delete();
-                boolean isInstallerDeleted = forgeInstaller.delete();
-
-                if ((isOldJarDeleted) && (new File(String.format("%s/server_pack/forge.jar", modpackDir)).exists()))
-                { appLogger.info(LocalizationManager.getLocalizedString("serverutilities.log.info.cleanupserverpack.rename")); }
-                else
-                { appLogger.error(LocalizationManager.getLocalizedString("serverutilities.log.error.cleanupserverpack.rename")); }
-
-                if (isInstallerDeleted)
-                { appLogger.info(String.format(LocalizationManager.getLocalizedString("serverutilities.log.info.cleanupserverpack.deleted"), forgeInstaller.getName())); }
-                else
-                { appLogger.error(String.format(LocalizationManager.getLocalizedString("serverutilities.log.error.cleanupserverpack.delete"), forgeInstaller.getName())); }
-
-            } catch (IOException ex) {
-                appLogger.error(LocalizationManager.getLocalizedString("serverutilities.log.error.cleanupserverpack"), ex);
-            }
-        } else {
-            appLogger.error(String.format(LocalizationManager.getLocalizedString("configcheck.log.error.checkmodloader"), modLoader));
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.java b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.java
similarity index 78%
rename from src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.java
rename to src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.java
index 0104c3d90..f226cd96e 100644
--- a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.java
+++ b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.java
@@ -23,11 +23,21 @@ import java.util.zip.ZipInputStream;
 
 import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
 
-public class CreateModpack {
-    private static final Logger appLogger = LogManager.getLogger(CreateModpack.class);
-    private static String projectName;
-    private static String fileName;
-    private static String fileDiskName;
+public class CurseCreateModpack {
+    private static final Logger appLogger = LogManager.getLogger(CurseCreateModpack.class);
+    private String projectName;
+    private String fileName;
+    private String fileDiskName;
+
+    private LocalizationManager localizationManager;
+
+    public CurseCreateModpack(LocalizationManager injectedLocalizationManager) {
+        if (injectedLocalizationManager == null) {
+            this.localizationManager = new LocalizationManager();
+        } else {
+            this.localizationManager = injectedLocalizationManager;
+        }
+    }
 
     /** Gets the names of the specified project and file and makes calls to methods which create the modpack so we can then create a server pack from it.
      * @param modpackDir String. Combination of project name and file name. Created during download procedure and later added to config file.
@@ -42,18 +52,18 @@ public class CreateModpack {
             if (CurseAPI.project(projectID).isPresent()) {
                 Optional<CurseProject> curseProject = CurseAPI.project(projectID);
 
-                projectName = curseProject.get().name();
-                try { fileName = curseProject.get().files().fileWithID(fileID).displayName(); }
-                catch (NullPointerException npe) { fileName = curseProject.get().files().fileWithID(fileID).nameOnDisk(); }
-                fileDiskName = curseProject.get().files().fileWithID(fileID).nameOnDisk();
+                this.projectName = curseProject.get().name();
+                try { this.fileName = curseProject.get().files().fileWithID(fileID).displayName(); }
+                catch (NullPointerException npe) { this.fileName = curseProject.get().files().fileWithID(fileID).nameOnDisk(); }
+                this.fileDiskName = curseProject.get().files().fileWithID(fileID).nameOnDisk();
 
             } else {
-                projectName = projectID.toString();
-                fileName = fileID.toString();
-                fileDiskName = fileID.toString();
+                this.projectName = projectID.toString();
+                this.fileName = fileID.toString();
+                this.fileDiskName = fileID.toString();
             }
 
-        } catch (CurseException cex) { appLogger.error(String.format(LocalizationManager.getLocalizedString("createmodpack.log.error.curseforgemodpack"), projectID, fileID), cex); }
+        } catch (CurseException cex) { appLogger.error(String.format(localizationManager.getLocalizedString("createmodpack.log.error.curseforgemodpack"), projectID, fileID), cex); }
 
         if (!checkCurseForgeDir(modpackDir)) {
             initializeModpack(modpackDir, projectID, fileID);
@@ -70,36 +80,36 @@ public class CreateModpack {
     @SuppressWarnings("ResultOfMethodCallIgnored")
     private void initializeModpack(String modpackDir, Integer projectID, Integer fileID) {
         try {
-            appLogger.info(String.format(LocalizationManager.getLocalizedString("createmodpack.log.info.initializemodpack.download"), projectName, fileName));
+            appLogger.info(String.format(localizationManager.getLocalizedString("createmodpack.log.info.initializemodpack.download"), projectName, fileName));
 
             CurseAPI.downloadFileToDirectory(projectID, fileID, Paths.get(modpackDir));
         } catch (CurseException cex) {
-            appLogger.error(String.format(LocalizationManager.getLocalizedString("createmodpack.log.error.initializemodpack.download"), fileName, projectName, modpackDir));
+            appLogger.error(String.format(localizationManager.getLocalizedString("createmodpack.log.error.initializemodpack.download"), fileName, projectName, modpackDir));
         }
 
         unzipArchive(String.format("%s/%s", modpackDir, fileDiskName), modpackDir);
         boolean isFileDeleted = new File(String.format("%s/%s", modpackDir, fileDiskName)).delete();
-        if (isFileDeleted) { appLogger.info(LocalizationManager.getLocalizedString("createmodpack.log.info.initializemodpack.deletezip")); }
+        if (isFileDeleted) { appLogger.info(localizationManager.getLocalizedString("createmodpack.log.info.initializemodpack.deletezip")); }
 
         try {
             byte[] jsonData = Files.readAllBytes(Paths.get(String.format("%s/manifest.json", modpackDir)));
             ObjectMapper objectMapper = new ObjectMapper();
             objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
             objectMapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
-            Modpack modpack = objectMapper.readValue(jsonData, Modpack.class);
+            CurseModpack modpack = objectMapper.readValue(jsonData, CurseModpack.class);
 
             String[] minecraftLoaderVersions = modpack.getMinecraft().toString().split(",");
             String[] modLoaderVersion = minecraftLoaderVersions[1].replace("[", "").replace("]", "").split("-");
 
-            appLogger.info(LocalizationManager.getLocalizedString("createmodpack.log.info.initializemodpack.infoheader"));
-            appLogger.info(String.format(LocalizationManager.getLocalizedString("createmodpack.log.info.initializemodpack.modpackname"), modpack.getName()));
-            appLogger.info(String.format(LocalizationManager.getLocalizedString("createmodpack.log.info.initializemodpack.modpackversion"), modpack.getVersion()));
-            appLogger.info(String.format(LocalizationManager.getLocalizedString("createmodpack.log.info.initializemodpack.modpackauthor"), modpack.getAuthor()));
-            appLogger.info(String.format(LocalizationManager.getLocalizedString("createmodpack.log.info.initializemodpack.modpackminecraftversion"), minecraftLoaderVersions[0].replace("[", "")));
-            appLogger.info(String.format(LocalizationManager.getLocalizedString("createmodpack.log.info.initializemodpack.modloader"), setModloader(modLoaderVersion[0])));
-            appLogger.info(String.format(LocalizationManager.getLocalizedString("createmodpack.log.info.initializemodpack.modloaderversion"), modLoaderVersion[1]));
+            appLogger.info(localizationManager.getLocalizedString("createmodpack.log.info.initializemodpack.infoheader"));
+            appLogger.info(String.format(localizationManager.getLocalizedString("createmodpack.log.info.initializemodpack.modpackname"), modpack.getName()));
+            appLogger.info(String.format(localizationManager.getLocalizedString("createmodpack.log.info.initializemodpack.modpackversion"), modpack.getVersion()));
+            appLogger.info(String.format(localizationManager.getLocalizedString("createmodpack.log.info.initializemodpack.modpackauthor"), modpack.getAuthor()));
+            appLogger.info(String.format(localizationManager.getLocalizedString("createmodpack.log.info.initializemodpack.modpackminecraftversion"), minecraftLoaderVersions[0].replace("[", "")));
+            appLogger.info(String.format(localizationManager.getLocalizedString("createmodpack.log.info.initializemodpack.modloader"), setModloader(modLoaderVersion[0])));
+            appLogger.info(String.format(localizationManager.getLocalizedString("createmodpack.log.info.initializemodpack.modloaderversion"), modLoaderVersion[1]));
 
-        } catch (IOException ex) { appLogger.error(LocalizationManager.getLocalizedString("createmodpack.log.error.initializemodpack.readmodpack"), ex); }
+        } catch (IOException ex) { appLogger.error(localizationManager.getLocalizedString("createmodpack.log.error.initializemodpack.readmodpack"), ex); }
 
         copyOverride(modpackDir);
         if (new File(String.format("%s/overrides", modpackDir)).isDirectory()) {
@@ -107,7 +117,7 @@ public class CreateModpack {
                 Path pathToBeDeleted = Paths.get(String.format("%s/overrides", modpackDir));
                 Files.walk(pathToBeDeleted).sorted(Comparator.reverseOrder()).map(Path::toFile).forEach(File::delete);
             } catch (IOException ex) {
-                appLogger.info(LocalizationManager.getLocalizedString("createmodpack.log.info.initializemodpack.overrides"));
+                appLogger.info(localizationManager.getLocalizedString("createmodpack.log.info.initializemodpack.overrides"));
             }
         }
 
@@ -119,7 +129,7 @@ public class CreateModpack {
      */
     @SuppressWarnings({"OptionalGetWithoutIsPresent", "BusyWait"})
     private void downloadMods(String modpackDir) {
-        appLogger.info(LocalizationManager.getLocalizedString("createmodpack.log.info.downloadmods.info"));
+        appLogger.info(localizationManager.getLocalizedString("createmodpack.log.info.downloadmods.info"));
         List<String> failedDownloads = new ArrayList<>();
 
         try {
@@ -129,13 +139,14 @@ public class CreateModpack {
             objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
             objectMapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
 
-            Modpack modpack = objectMapper.readValue(jsonData, Modpack.class);
+            CurseModpack curseModpack = objectMapper.readValue(jsonData, CurseModpack.class);
             Random randInt = new Random();
-            for (int i = 0; i < modpack.getFiles().size(); i++) {
-                if (randInt.nextInt(modpack.getFiles().size())==i) {
-                    appLogger.info(String.format("%s", Splines.getSplines()));
+            CurseSplines curseSplines = new CurseSplines();
+            for (int i = 0; i < curseModpack.getFiles().size(); i++) {
+                if (randInt.nextInt(curseModpack.getFiles().size())==i) {
+                    appLogger.info(curseSplines.reticulate());
                 }
-                String[] mods = modpack.getFiles().get(i).toString().split(",");
+                String[] mods = curseModpack.getFiles().get(i).toString().split(",");
 
                 String modName, modFileName;
                 modName = modFileName = "";
@@ -148,33 +159,33 @@ public class CreateModpack {
                     modName = CurseAPI.project(modID).get().name();
                     modFileName = Objects.requireNonNull(CurseAPI.project(modID).get().files().fileWithID(fileID)).nameOnDisk();
                 } catch (CurseException cex) {
-                    appLogger.error(LocalizationManager.getLocalizedString("createmodpack.log.error.downloadmods.curseforgeinfo"), cex);
+                    appLogger.error(localizationManager.getLocalizedString("createmodpack.log.error.downloadmods.curseforgeinfo"), cex);
                 }
                 try {
-                    appLogger.info(String.format(LocalizationManager.getLocalizedString("createmodpack.log.info.downloadmods.specificmod"), i+1, modpack.getFiles().size(), modName, modFileName));
+                    appLogger.info(String.format(localizationManager.getLocalizedString("createmodpack.log.info.downloadmods.specificmod"), i+1, curseModpack.getFiles().size(), modName, modFileName));
                     CurseAPI.downloadFileToDirectory(modID, fileID, Paths.get(String.format("%s/mods", modpackDir)));
                     try { Thread.sleep(1000); }
-                    catch (InterruptedException iex) { appLogger.debug(LocalizationManager.getLocalizedString("createmodpack.log.debug.downloadmods.sleep"), iex); }
-                } catch (CurseException cex) { appLogger.error(String.format(LocalizationManager.getLocalizedString("createmodpack.log.error.downloadmods.errordownload"), modName, modID, modFileName, fileID));
+                    catch (InterruptedException iex) { appLogger.debug(localizationManager.getLocalizedString("createmodpack.log.debug.downloadmods.sleep"), iex); }
+                } catch (CurseException cex) { appLogger.error(String.format(localizationManager.getLocalizedString("createmodpack.log.error.downloadmods.errordownload"), modName, modID, modFileName, fileID));
                     try {
-                        appLogger.info(String.format(LocalizationManager.getLocalizedString("createmodpack.log.info.downloadmods.tryagain"), modName, modID, modFileName, fileID));
+                        appLogger.info(String.format(localizationManager.getLocalizedString("createmodpack.log.info.downloadmods.tryagain"), modName, modID, modFileName, fileID));
                         CurseAPI.downloadFileToDirectory(modID, fileID, Paths.get(String.format("%s/mods", modpackDir)));
                     } catch (CurseException cex2) {
-                        appLogger.error(String.format(LocalizationManager.getLocalizedString("createmodpack.log.error.downloadmods.retryfail"), modName, modID, modFileName, fileID));
+                        appLogger.error(String.format(localizationManager.getLocalizedString("createmodpack.log.error.downloadmods.retryfail"), modName, modID, modFileName, fileID));
                         try {
                             failedDownloads.add(String.format("Mod: %s, ID: %d. File: %s, ID: %d, URL: %s", modName, modID, modFileName, fileID, CurseAPI.fileDownloadURL(modID, fileID)));
                         } catch (CurseException cex3) {
-                            appLogger.error(LocalizationManager.getLocalizedString("createmodpack.log.error.downloadmods.urlfail"));
+                            appLogger.error(localizationManager.getLocalizedString("createmodpack.log.error.downloadmods.urlfail"));
                         }
                     }
                 }
             }
         } catch (IOException ex) {
-            appLogger.error(LocalizationManager.getLocalizedString("createmodpack.log.error.downloadmods.fail"));
+            appLogger.error(localizationManager.getLocalizedString("createmodpack.log.error.downloadmods.fail"));
         }
         if (failedDownloads.size() != 0) {
             for (int i = 0; i <= failedDownloads.size(); i++) {
-                appLogger.error(String.format(LocalizationManager.getLocalizedString("createmodpack.log.error.downloadmods.urllist"), failedDownloads.get(i)));
+                appLogger.error(String.format(localizationManager.getLocalizedString("createmodpack.log.error.downloadmods.urllist"), failedDownloads.get(i)));
             }
         }
     }
@@ -183,22 +194,22 @@ public class CreateModpack {
      * @param modpackDir String. The overrides directory resides in this directory. All folders and files within overrides are copied here.
      */
     private void copyOverride(String modpackDir) {
-        appLogger.info(LocalizationManager.getLocalizedString("createmodpack.log.info.copyoverrides.info"));
+        appLogger.info(localizationManager.getLocalizedString("createmodpack.log.info.copyoverrides.info"));
         try {
             Stream<Path> files = java.nio.file.Files.walk(Paths.get(String.format("%s/overrides", modpackDir)));
             files.forEach(file -> {
                 try {
                     Files.copy(file, Paths.get(modpackDir).resolve(Paths.get(String.format("%s/overrides", modpackDir)).relativize(file)), REPLACE_EXISTING);
-                    appLogger.debug(String.format(LocalizationManager.getLocalizedString("createmodpack.log.debug.copyoverrides.status"), file.toAbsolutePath().toString()));
+                    appLogger.debug(String.format(localizationManager.getLocalizedString("createmodpack.log.debug.copyoverrides.status"), file.toAbsolutePath().toString()));
                 } catch (IOException ex) {
                     if (!ex.toString().startsWith("java.nio.file.DirectoryNotEmptyException")) {
-                        appLogger.error(LocalizationManager.getLocalizedString("createmodpack.log.error.copyoverrides.copy"), ex);
+                        appLogger.error(localizationManager.getLocalizedString("createmodpack.log.error.copyoverrides.copy"), ex);
                     }
                 }
             });
             files.close();
         } catch (IOException ex) {
-            appLogger.error(LocalizationManager.getLocalizedString("createmodpack.log.error.copyoverrides.copy"), ex);
+            appLogger.error(localizationManager.getLocalizedString("createmodpack.log.error.copyoverrides.copy"), ex);
         }
     }
 
@@ -209,9 +220,9 @@ public class CreateModpack {
     private boolean checkCurseForgeDir(String modpackDir) {
         boolean isModpackPresent = false;
         if (!(new File(modpackDir).isDirectory()) && !(new File(String.format("%s/manifest.json", modpackDir)).exists())) {
-            appLogger.info(LocalizationManager.getLocalizedString("createmodpack.log.info.checkcurseforgedir.create"));
+            appLogger.info(localizationManager.getLocalizedString("createmodpack.log.info.checkcurseforgedir.create"));
         } else {
-            appLogger.info(LocalizationManager.getLocalizedString("createmodpack.log.info.checkcurseforgedir"));
+            appLogger.info(localizationManager.getLocalizedString("createmodpack.log.info.checkcurseforgedir"));
             isModpackPresent = true;
         }
         return isModpackPresent;
@@ -223,7 +234,7 @@ public class CreateModpack {
      * @param modpackDir The directory where the archive resides in and will be extracted to.
      */
     private void unzipArchive(String zipFile, String modpackDir) {
-        appLogger.info(LocalizationManager.getLocalizedString("createmodpack.log.info.unziparchive"));
+        appLogger.info(localizationManager.getLocalizedString("createmodpack.log.info.unziparchive"));
         File destDir = new File(modpackDir);
         byte[] buffer = new byte[1024];
         try {
@@ -233,12 +244,12 @@ public class CreateModpack {
                 final File newFile = newFile(destDir, zipEntry);
                 if (zipEntry.isDirectory()) {
                     if (!newFile.isDirectory() && !newFile.mkdirs()) {
-                        appLogger.error(String.format(LocalizationManager.getLocalizedString("createmodpack.log.error.unziparchive.createdir"), newFile));
+                        appLogger.error(String.format(localizationManager.getLocalizedString("createmodpack.log.error.unziparchive.createdir"), newFile));
                     }
                 } else {
                     File parent = newFile.getParentFile();
                     if (!parent.isDirectory() && !parent.mkdirs()) {
-                        appLogger.error(String.format(LocalizationManager.getLocalizedString("createmodpack.log.error.unziparchive.createdir"), parent));
+                        appLogger.error(String.format(localizationManager.getLocalizedString("createmodpack.log.error.unziparchive.createdir"), parent));
                     }
                     final FileOutputStream output = new FileOutputStream(newFile);
                     int length;
@@ -252,7 +263,7 @@ public class CreateModpack {
             input.closeEntry();
             input.close();
         } catch (IOException ex) {
-            appLogger.error(String.format(LocalizationManager.getLocalizedString("createmodpack.log.error.unziparchive.extract"), zipFile), ex);
+            appLogger.error(String.format(localizationManager.getLocalizedString("createmodpack.log.error.unziparchive.extract"), zipFile), ex);
         }
     }
 
@@ -270,15 +281,15 @@ public class CreateModpack {
             destDirPath = destinationDir.getCanonicalPath();
 
         } catch (IOException ex) {
-            appLogger.error(String.format(LocalizationManager.getLocalizedString("createmodpack.log.error.newfile.path"), destinationDir), ex);
+            appLogger.error(String.format(localizationManager.getLocalizedString("createmodpack.log.error.newfile.path"), destinationDir), ex);
         }
         try {
             destFilePath = destFile.getCanonicalPath();
         } catch (IOException ex) {
-            appLogger.error(String.format(LocalizationManager.getLocalizedString("createmodpack.log.error.newfile.path"), destFile.toString()), ex);
+            appLogger.error(String.format(localizationManager.getLocalizedString("createmodpack.log.error.newfile.path"), destFile.toString()), ex);
         }
         if (destFilePath != null && !destFilePath.startsWith(destDirPath + File.separator)) {
-            appLogger.error(String.format(LocalizationManager.getLocalizedString("createmodpack.log.error.newfile.outside"), zipEntry.getName()));
+            appLogger.error(String.format(localizationManager.getLocalizedString("createmodpack.log.error.newfile.outside"), zipEntry.getName()));
         }
         return destFile;
     }
diff --git a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/Files.java b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.java
similarity index 96%
rename from src/main/java/de/griefed/serverpackcreator/curseforgemodpack/Files.java
rename to src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.java
index f81f5ddfb..7f9437a75 100644
--- a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/Files.java
+++ b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.java
@@ -2,7 +2,7 @@ package de.griefed.serverpackcreator.curseforgemodpack;
 
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 
-public class Files {
+public class CurseFiles {
     @JsonIgnoreProperties(ignoreUnknown = true)
     private String projectID;
     private String fileID;
diff --git a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/Minecraft.java b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.java
similarity index 75%
rename from src/main/java/de/griefed/serverpackcreator/curseforgemodpack/Minecraft.java
rename to src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.java
index 7afbda309..e40d86573 100644
--- a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/Minecraft.java
+++ b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.java
@@ -4,10 +4,10 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 
 import java.util.List;
 
-class Minecraft {
+class CurseMinecraft {
     @JsonIgnoreProperties(ignoreUnknown = true)
     private String version;
-    private List<ModLoaders> modLoaders;
+    private List<CurseModLoaders> modLoaders;
 
     public String getVersion() {
         return version;
@@ -17,11 +17,11 @@ class Minecraft {
         this.version = version;
     }
 
-    public List<ModLoaders> getModLoaders() {
+    public List<CurseModLoaders> getModLoaders() {
         return modLoaders;
     }
 
-    public void setModLoaders(List<ModLoaders> modLoaders) {
+    public void setModLoaders(List<CurseModLoaders> modLoaders) {
         this.modLoaders = modLoaders;
     }
 
diff --git a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/ModLoaders.java b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.java
similarity index 94%
rename from src/main/java/de/griefed/serverpackcreator/curseforgemodpack/ModLoaders.java
rename to src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.java
index 25978d2ca..b7f2f2e54 100644
--- a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/ModLoaders.java
+++ b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.java
@@ -2,7 +2,7 @@ package de.griefed.serverpackcreator.curseforgemodpack;
 
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 
-class ModLoaders {
+class CurseModLoaders {
     @JsonIgnoreProperties(ignoreUnknown = true)
     private String id;
 
diff --git a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/Modpack.java b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.java
similarity index 76%
rename from src/main/java/de/griefed/serverpackcreator/curseforgemodpack/Modpack.java
rename to src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.java
index a7d2463b1..5eb52557a 100644
--- a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/Modpack.java
+++ b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.java
@@ -4,19 +4,19 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 
 import java.util.List;
 
-public class Modpack {
+public class CurseModpack {
     @JsonIgnoreProperties(ignoreUnknown = true)
-    private List<Minecraft> minecraft;
+    private List<CurseMinecraft> minecraft;
     private String name;
     private String version;
     private String author;
-    private List<Files> files;
+    private List<CurseFiles> files;
 
-    public List<Minecraft> getMinecraft() {
+    public List<CurseMinecraft> getMinecraft() {
         return minecraft;
     }
 
-    public void setMinecraft(List<Minecraft> minecraft) {
+    public void setMinecraft(List<CurseMinecraft> minecraft) {
         this.minecraft = minecraft;
     }
 
@@ -40,15 +40,11 @@ public class Modpack {
         return author;
     }
 
-    public void setAuthor(String author) {
-        this.author = author;
-    }
-
-    public List<Files> getFiles() {
+    public List<CurseFiles> getFiles() {
         return files;
     }
 
-    public void setFiles(List<Files> files) {
+    public void setFiles(List<CurseFiles> files) {
         this.files = files;
     }
 
diff --git a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/Splines.java b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.java
similarity index 92%
rename from src/main/java/de/griefed/serverpackcreator/curseforgemodpack/Splines.java
rename to src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.java
index bc23ab7ba..145cd7ac0 100644
--- a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/Splines.java
+++ b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.java
@@ -2,12 +2,12 @@ package de.griefed.serverpackcreator.curseforgemodpack;
 
 import java.util.Random;
 
-class Splines {
+class CurseSplines {
     /*
     Thanks go out to MAXIS and Sim City, for the ridiculous messages these games contained.
     Additional thanks to Larsz on GameFAQs for providing a list of all these messages: https://gamefaqs.gamespot.com/pc/561176-simcity-4/faqs/22135
      */
-    private static final String[] reticulating = {"Adding Hidden Agendas","Adjusting Bell Curves","Aesthesizing Industrial Areas",
+    private final String[] reticulating = {"Adding Hidden Agendas","Adjusting Bell Curves","Aesthesizing Industrial Areas",
             "Aligning Covariance Matrices","Applying Feng Shui Shaders","Applying Theatre Soda Layer",
             "Asserting Packed Exemplars","Attempting to Lock Back-Buffer","Binding Sapling Root System","Breeding Fauna",
             "Building Data Trees","Bureacritizing Bureaucracies","Calculating Inverse Probability Matrices",
@@ -45,16 +45,16 @@ class Splines {
             "Synthesizing Wavelets","Time-Compressing Simulator Clock","Unable to Reveal Current Activity",
             "Weathering Buildings","Zeroing Crime Network"};
 
-    private static int getRandomInt() {
+    private int getRandomInt() {
         Random randInt = new Random();
         return randInt.nextInt(reticulating.length);
     }
 
-    private static String setSplines() {
-        return Splines.reticulating[getRandomInt()];
+    private String getSpline() {
+        return reticulating[getRandomInt()];
     }
 
-    public static String getSplines() {
-        return setSplines();
+    public String reticulate() {
+        return getSpline();
     }
 }
\ No newline at end of file
diff --git a/src/main/java/de/griefed/serverpackcreator/gui/About.java b/src/main/java/de/griefed/serverpackcreator/gui/AboutTab.java
similarity index 73%
rename from src/main/java/de/griefed/serverpackcreator/gui/About.java
rename to src/main/java/de/griefed/serverpackcreator/gui/AboutTab.java
index 5610ae855..0107fd9ee 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/About.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/AboutTab.java
@@ -11,17 +11,27 @@ import java.io.IOException;
 import java.net.URI;
 import java.util.Objects;
 
-class About extends Component {
-    private static final Logger appLogger = LogManager.getLogger(About.class);
+class AboutTab extends Component {
+    private static final Logger appLogger = LogManager.getLogger(AboutTab.class);
 
     private final Dimension miscButtonDimension = new Dimension(50,50);
-    private final ImageIcon issueIcon           = new ImageIcon(Objects.requireNonNull(TabbedPane.class.getResource("/de/griefed/resources/gui/issue.png")));
-    private final ImageIcon pastebinIcon        = new ImageIcon(Objects.requireNonNull(TabbedPane.class.getResource("/de/griefed/resources/gui/pastebin.png")));
-    private final ImageIcon prosperIcon         = new ImageIcon(Objects.requireNonNull(TabbedPane.class.getResource("/de/griefed/resources/gui/prosper.png")));
+    private final ImageIcon issueIcon           = new ImageIcon(Objects.requireNonNull(CreateGui.class.getResource("/de/griefed/resources/gui/issue.png")));
+    private final ImageIcon pastebinIcon        = new ImageIcon(Objects.requireNonNull(CreateGui.class.getResource("/de/griefed/resources/gui/pastebin.png")));
+    private final ImageIcon prosperIcon         = new ImageIcon(Objects.requireNonNull(CreateGui.class.getResource("/de/griefed/resources/gui/prosper.png")));
 
-    JComponent about() {
-        JComponent about = new JPanel(false);
-        about.setLayout(new GridBagLayout());
+    private LocalizationManager localizationManager;
+
+    public AboutTab(LocalizationManager injectedLocalizationManager) {
+        if (injectedLocalizationManager == null) {
+            this.localizationManager = new LocalizationManager();
+        } else {
+            this.localizationManager = injectedLocalizationManager;
+        }
+    }
+
+    JComponent aboutTab() {
+        JComponent aboutPanel = new JPanel(false);
+        aboutPanel.setLayout(new GridBagLayout());
         GridBagConstraints constraints = new GridBagConstraints();
 
         constraints.anchor = GridBagConstraints.CENTER;
@@ -50,17 +60,17 @@ class About extends Component {
         try {
             document.insertString(
                     document.getLength(),
-                    LocalizationManager.getLocalizedString("createserverpack.gui.about.text"),
+                    localizationManager.getLocalizedString("createserverpack.gui.about.text"),
                     attributeSet
             ); } catch (BadLocationException ex) {
-            appLogger.error(LocalizationManager.getLocalizedString("about.log.error.document"), ex);
+            appLogger.error(localizationManager.getLocalizedString("about.log.error.document"), ex);
         }
-        about.add(textPane, constraints);
+        aboutPanel.add(textPane, constraints);
 
         constraints.gridx = 0;
         constraints.gridy = 1;
         constraints.fill = GridBagConstraints.HORIZONTAL;
-        about.add(new JSeparator(JSeparator.HORIZONTAL), constraints);
+        aboutPanel.add(new JSeparator(JSeparator.HORIZONTAL), constraints);
 
         //Buttons
         constraints.anchor = GridBagConstraints.CENTER;
@@ -72,7 +82,7 @@ class About extends Component {
 
         //Button to upload log file to pastebin
         JButton buttonCreatePasteBin = new JButton();
-        buttonCreatePasteBin.setToolTipText(LocalizationManager.getLocalizedString("createserverpack.gui.about.pastebin"));
+        buttonCreatePasteBin.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.about.pastebin"));
         buttonCreatePasteBin.setIcon(pastebinIcon);
         buttonCreatePasteBin.setPreferredSize(miscButtonDimension);
         buttonCreatePasteBin.addActionListener(e -> {
@@ -82,17 +92,17 @@ class About extends Component {
                     Desktop.getDesktop().browse(URI.create("https://pastebin.com"));
                 }
             } catch (IOException ex) {
-                appLogger.error(LocalizationManager.getLocalizedString("about.log.error.browser"), ex);
+                appLogger.error(localizationManager.getLocalizedString("about.log.error.browser"), ex);
             }
 
         });
         constraints.gridx = 0;
         constraints.gridy = 2;
-        about.add(buttonCreatePasteBin, constraints);
+        aboutPanel.add(buttonCreatePasteBin, constraints);
 
         //Button to open a new issue on GitHub
         JButton buttonOpenIssue = new JButton();
-        buttonOpenIssue.setToolTipText(LocalizationManager.getLocalizedString("createserverpack.gui.about.issue"));
+        buttonOpenIssue.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.about.issue"));
         buttonOpenIssue.setIcon(issueIcon);
         buttonOpenIssue.setPreferredSize(miscButtonDimension);
         buttonOpenIssue.addActionListener(e -> {
@@ -102,17 +112,17 @@ class About extends Component {
                     Desktop.getDesktop().browse(URI.create("https://github.com/Griefed/ServerPackCreator/issues"));
                 }
             } catch (IOException ex) {
-                appLogger.error(LocalizationManager.getLocalizedString("about.log.error.browser"), ex);
+                appLogger.error(localizationManager.getLocalizedString("about.log.error.browser"), ex);
             }
 
         });
         constraints.gridx = 1;
         constraints.gridy = 2;
-        about.add(buttonOpenIssue, constraints);
+        aboutPanel.add(buttonOpenIssue, constraints);
 
         //Button to open the invite link to the discord server
         JButton buttonDiscord = new JButton();
-        buttonDiscord.setToolTipText(LocalizationManager.getLocalizedString("createserverpack.gui.about.discord"));
+        buttonDiscord.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.about.discord"));
         buttonDiscord.setIcon(prosperIcon);
         buttonDiscord.setPreferredSize(miscButtonDimension);
         buttonDiscord.addActionListener(e -> {
@@ -122,15 +132,15 @@ class About extends Component {
                     Desktop.getDesktop().browse(URI.create("https://discord.griefed.de"));
                 }
             } catch (IOException ex) {
-                appLogger.error(LocalizationManager.getLocalizedString("about.log.error.browser"), ex);
+                appLogger.error(localizationManager.getLocalizedString("about.log.error.browser"), ex);
             }
 
         });
         constraints.gridx = 2;
         constraints.gridy = 2;
-        about.add(buttonDiscord, constraints);
+        aboutPanel.add(buttonDiscord, constraints);
 
-        return about;
+        return aboutPanel;
     }
 
 }
\ No newline at end of file
diff --git a/src/main/java/de/griefed/serverpackcreator/gui/TabbedPane.java b/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java
similarity index 63%
rename from src/main/java/de/griefed/serverpackcreator/gui/TabbedPane.java
rename to src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java
index f8b17d637..3a6cd483e 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/TabbedPane.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java
@@ -3,6 +3,7 @@ package de.griefed.serverpackcreator.gui;
 import com.typesafe.config.Config;
 import com.typesafe.config.ConfigException;
 import com.typesafe.config.ConfigFactory;
+import de.griefed.serverpackcreator.ConfigCheck;
 import de.griefed.serverpackcreator.i18n.LocalizationManager;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
@@ -13,13 +14,52 @@ import java.awt.event.KeyEvent;
 import java.io.File;
 import java.util.Objects;
 
-public class TabbedPane extends JPanel {
-    private static final Logger appLogger = LogManager.getLogger(TabbedPane.class);
+public class CreateGui extends JPanel {
+    private static final Logger appLogger = LogManager.getLogger(CreateGui.class);
 
-    private final ImageIcon bannerIcon      = new ImageIcon(Objects.requireNonNull(TabbedPane.class.getResource("/de/griefed/resources/gui/banner.png")));
-    private final Image icon                = Toolkit.getDefaultToolkit().getImage(Objects.requireNonNull(TabbedPane.class.getResource("/de/griefed/resources/gui/app.png")));
+    private final ImageIcon bannerIcon      = new ImageIcon(Objects.requireNonNull(CreateGui.class.getResource("/de/griefed/resources/gui/banner.png")));
+    private final Image icon                = Toolkit.getDefaultToolkit().getImage(Objects.requireNonNull(CreateGui.class.getResource("/de/griefed/resources/gui/app.png")));
     private final Dimension windowDimension = new Dimension(800,860);
 
+    private LocalizationManager localizationManager;
+    private ConfigCheck configCheck;
+
+    public CreateGui(LocalizationManager injectedLocalizationManager, ConfigCheck injectedConfigCheck) {
+        super(new GridLayout(1, 1));
+
+        if (injectedLocalizationManager == null) {
+            this.localizationManager = new LocalizationManager();
+        } else {
+            this.localizationManager = injectedLocalizationManager;
+        }
+
+        if (injectedConfigCheck == null) {
+            this.configCheck = new ConfigCheck(localizationManager);
+        } else {
+            this.configCheck = injectedConfigCheck;
+        }
+
+        JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
+
+        tabbedPane.addTab(localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.createserverpack.title"), null, new CreateServerPackTab(localizationManager, configCheck).createServerPackTab(), localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.createserverpack.tip"));
+        tabbedPane.setMnemonicAt(0, KeyEvent.VK_1);
+
+        tabbedPane.addTab(localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.serverpackcreatorlog.title"), null, new ServerPackCreatorLogTab(localizationManager).serverPackCreatorLogTab(), localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.serverpackcreatorlog.tip"));
+        tabbedPane.setMnemonicAt(1, KeyEvent.VK_2);
+
+        tabbedPane.addTab(localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.modloaderinstallerlog.title"), null, new ModloaderInstallerLogTab(localizationManager).modloaderInstallerLogTab(), localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.modloaderinstallerlog.tip"));
+        tabbedPane.setMnemonicAt(2, KeyEvent.VK_3);
+
+        tabbedPane.addTab(localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.about.title"), null, new AboutTab(localizationManager).aboutTab(), localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.about.tip"));
+        tabbedPane.setMnemonicAt(3, KeyEvent.VK_4);
+
+        //Add the tabbed pane to this panel.
+        add(tabbedPane);
+
+        //The following line enables to use scrolling tabs.
+        tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
+    }
+
     public void mainGUI() {
         SwingUtilities.invokeLater(() -> {
             //Bold fonts = true, else false
@@ -33,8 +73,8 @@ public class TabbedPane extends JPanel {
 
                     if (secret.getString("topsicrets") != null && !secret.getString("topsicrets").equals("") && secret.getString("topsicrets").length() > 0) {
 
-                        appLogger.info(LocalizationManager.getLocalizedString("topsicrets"));
-                        appLogger.info(LocalizationManager.getLocalizedString("topsicrets.moar"));
+                        appLogger.info(localizationManager.getLocalizedString("topsicrets"));
+                        appLogger.info(localizationManager.getLocalizedString("topsicrets.moar"));
                         for (UIManager.LookAndFeelInfo look : UIManager.getInstalledLookAndFeels()) {
                             appLogger.info(look.getClassName());
                         }
@@ -53,7 +93,7 @@ public class TabbedPane extends JPanel {
                 try {
                     UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                 } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
-                    appLogger.error(LocalizationManager.getLocalizedString("tabbedpane.log.error"), ex);
+                    appLogger.error(localizationManager.getLocalizedString("tabbedpane.log.error"), ex);
                 }
             }
             createAndShowGUI();
@@ -62,7 +102,7 @@ public class TabbedPane extends JPanel {
 
     private void createAndShowGUI() {
 
-        JFrame frame = new JFrame(LocalizationManager.getLocalizedString("createserverpack.gui.createandshowgui"));
+        JFrame frame = new JFrame(localizationManager.getLocalizedString("createserverpack.gui.createandshowgui"));
         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
         frame.setIconImage(icon);
@@ -70,7 +110,7 @@ public class TabbedPane extends JPanel {
         banner.setOpaque(false);
 
         frame.add(banner, BorderLayout.PAGE_START);
-        frame.add(new TabbedPane(), BorderLayout.CENTER);
+        frame.add(new CreateGui(localizationManager, configCheck), BorderLayout.CENTER);
 
         frame.setPreferredSize(windowDimension);
         frame.setMaximumSize(windowDimension);
@@ -80,28 +120,4 @@ public class TabbedPane extends JPanel {
 
         frame.setVisible(true);
     }
-
-    public TabbedPane() {
-        super(new GridLayout(1, 1));
-
-        JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
-
-        tabbedPane.addTab(LocalizationManager.getLocalizedString("createserverpack.gui.tabbedpane.createserverpack.title"), null, new CreateServerPack().createServerPack(), LocalizationManager.getLocalizedString("createserverpack.gui.tabbedpane.createserverpack.tip"));
-        tabbedPane.setMnemonicAt(0, KeyEvent.VK_1);
-
-        tabbedPane.addTab(LocalizationManager.getLocalizedString("createserverpack.gui.tabbedpane.serverpackcreatorlog.title"), null, new ServerPackCreatorLog().serverPackCreatorLog(), LocalizationManager.getLocalizedString("createserverpack.gui.tabbedpane.serverpackcreatorlog.tip"));
-        tabbedPane.setMnemonicAt(1, KeyEvent.VK_2);
-
-        tabbedPane.addTab(LocalizationManager.getLocalizedString("createserverpack.gui.tabbedpane.modloaderinstallerlog.title"), null, new ModloaderInstallerLog().modloaderInstallerLog(), "createserverpack.gui.tabbedpane.modloaderinstallerlog.tip");
-        tabbedPane.setMnemonicAt(2, KeyEvent.VK_3);
-
-        tabbedPane.addTab(LocalizationManager.getLocalizedString("createserverpack.gui.tabbedpane.about.title"), null, new About().about(), LocalizationManager.getLocalizedString("createserverpack.gui.tabbedpane.about.tip"));
-        tabbedPane.setMnemonicAt(3, KeyEvent.VK_4);
-
-        //Add the tabbed pane to this panel.
-        add(tabbedPane);
-
-        //The following line enables to use scrolling tabs.
-        tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
-    }
 }
\ No newline at end of file
diff --git a/src/main/java/de/griefed/serverpackcreator/gui/CreateServerPack.java b/src/main/java/de/griefed/serverpackcreator/gui/CreateServerPackTab.java
similarity index 75%
rename from src/main/java/de/griefed/serverpackcreator/gui/CreateServerPack.java
rename to src/main/java/de/griefed/serverpackcreator/gui/CreateServerPackTab.java
index 2c39d0c04..358e57324 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/CreateServerPack.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/CreateServerPackTab.java
@@ -2,8 +2,8 @@ package de.griefed.serverpackcreator.gui;
 
 import com.typesafe.config.Config;
 import com.typesafe.config.ConfigFactory;
-import de.griefed.serverpackcreator.Handler;
-import de.griefed.serverpackcreator.Reference;
+import de.griefed.serverpackcreator.ConfigCheck;
+import de.griefed.serverpackcreator.CreateServerPack;
 import de.griefed.serverpackcreator.i18n.LocalizationManager;
 import org.apache.commons.io.input.Tailer;
 import org.apache.commons.io.input.TailerListenerAdapter;
@@ -23,18 +23,36 @@ import java.util.Objects;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
-class CreateServerPack extends Component {
-    private static final Logger appLogger = LogManager.getLogger(CreateServerPack.class);
+public class CreateServerPackTab extends Component {
+    private static final Logger appLogger = LogManager.getLogger(CreateServerPackTab.class);
 
-    private final ImageIcon loadIcon              = new ImageIcon(Objects.requireNonNull(TabbedPane.class.getResource("/de/griefed/resources/gui/load.png")));
-    private final ImageIcon folderIcon            = new ImageIcon(Objects.requireNonNull(TabbedPane.class.getResource("/de/griefed/resources/gui/folder.png")));
-    private final ImageIcon startGeneration       = new ImageIcon(Objects.requireNonNull(TabbedPane.class.getResource("/de/griefed/resources/gui/start_generation.png")));
-    private final ImageIcon helpIcon              = new ImageIcon(Objects.requireNonNull(TabbedPane.class.getResource("/de/griefed/resources/gui/help.png")));
+    private final ImageIcon loadIcon              = new ImageIcon(Objects.requireNonNull(CreateGui.class.getResource("/de/griefed/resources/gui/load.png")));
+    private final ImageIcon folderIcon            = new ImageIcon(Objects.requireNonNull(CreateGui.class.getResource("/de/griefed/resources/gui/folder.png")));
+    private final ImageIcon startGeneration       = new ImageIcon(Objects.requireNonNull(CreateGui.class.getResource("/de/griefed/resources/gui/start_generation.png")));
+    private final ImageIcon helpIcon              = new ImageIcon(Objects.requireNonNull(CreateGui.class.getResource("/de/griefed/resources/gui/help.png")));
     private final Dimension folderButtonDimension = new Dimension(24,24);
     private final Dimension miscButtonDimension   = new Dimension(50,50);
     private final Dimension chooserDimension      = new Dimension(750,450);
 
-    JComponent createServerPack() {
+    private ConfigCheck configCheck;
+    private LocalizationManager localizationManager;
+
+    public CreateServerPackTab(LocalizationManager injectedLocalizationManager, ConfigCheck injectedConfigCheck) {
+        if (injectedLocalizationManager == null) {
+            this.localizationManager = new LocalizationManager();
+        } else {
+            this.localizationManager = injectedLocalizationManager;
+        }
+
+        if (injectedConfigCheck == null) {
+            this.configCheck = new ConfigCheck(localizationManager);
+        } else {
+            this.configCheck = injectedConfigCheck;
+        }
+
+    }
+
+    JComponent createServerPackTab() {
         JComponent createServerPackPanel = new JPanel(false);
         createServerPackPanel.setLayout(new GridBagLayout());
         GridBagConstraints constraints = new GridBagConstraints();
@@ -45,98 +63,98 @@ class CreateServerPack extends Component {
         constraints.weightx = 0.7;
 
         //Label and textfield modpackDir
-        JLabel labelModpackDir = new JLabel(LocalizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelmodpackdir"));
-        labelModpackDir.setToolTipText(LocalizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelmodpackdir.tip"));
+        JLabel labelModpackDir = new JLabel(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelmodpackdir"));
+        labelModpackDir.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelmodpackdir.tip"));
         constraints.gridx = 0;
         constraints.gridy = 0;
         constraints.insets = new Insets(20,10,0,0);
         createServerPackPanel.add(labelModpackDir, constraints);
         JTextField textModpackDir = new JTextField("");
-        textModpackDir.setToolTipText(LocalizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelmodpackdir.tip"));
+        textModpackDir.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelmodpackdir.tip"));
         constraints.gridx = 0;
         constraints.gridy = 1;
         constraints.insets = new Insets(0,10,0,0);
         createServerPackPanel.add(textModpackDir, constraints);
 
         //Label and textfield clientMods
-        JLabel labelClientMods = new JLabel(LocalizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelclientmods"));
-        labelClientMods.setToolTipText(LocalizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelclientmods.tip"));
+        JLabel labelClientMods = new JLabel(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelclientmods"));
+        labelClientMods.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelclientmods.tip"));
         constraints.gridx = 0;
         constraints.gridy = 2;
         constraints.insets = new Insets(20,10,0,0);
         createServerPackPanel.add(labelClientMods, constraints);
         JTextField textClientMods = new JTextField("");
-        textClientMods.setToolTipText(LocalizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelclientmods.tip"));
+        textClientMods.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelclientmods.tip"));
         constraints.gridx = 0;
         constraints.gridy = 3;
         constraints.insets = new Insets(0,10,0,0);
         createServerPackPanel.add(textClientMods, constraints);
 
         //Label and textfield copyDirs
-        JLabel labelCopyDirs = new JLabel(LocalizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelcopydirs"));
-        labelCopyDirs.setToolTipText(LocalizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelcopydirs.tip"));
+        JLabel labelCopyDirs = new JLabel(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelcopydirs"));
+        labelCopyDirs.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelcopydirs.tip"));
         constraints.gridx = 0;
         constraints.gridy = 4;
         constraints.insets = new Insets(20,10,0,0);
         createServerPackPanel.add(labelCopyDirs, constraints);
         JTextField textCopyDirs = new JTextField("");
-        textCopyDirs.setToolTipText(LocalizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelcopydirs.tip"));
+        textCopyDirs.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelcopydirs.tip"));
         constraints.gridx = 0;
         constraints.gridy = 5;
         constraints.insets = new Insets(0,10,0,0);
         createServerPackPanel.add(textCopyDirs, constraints);
 
         //Label and textfield javaPath
-        JLabel labelJavaPath = new JLabel(LocalizationManager.getLocalizedString("createserverpack.gui.createserverpack.labeljavapath"));
-        labelJavaPath.setToolTipText(LocalizationManager.getLocalizedString("createserverpack.gui.createserverpack.labeljavapath.tip"));
+        JLabel labelJavaPath = new JLabel(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labeljavapath"));
+        labelJavaPath.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labeljavapath.tip"));
         constraints.gridx = 0;
         constraints.gridy = 6;
         constraints.insets = new Insets(20,10,0,0);
         createServerPackPanel.add(labelJavaPath, constraints);
         JTextField textJavaPath = new JTextField("");
-        textJavaPath.setToolTipText(LocalizationManager.getLocalizedString("createserverpack.gui.createserverpack.labeljavapath.tip"));
+        textJavaPath.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labeljavapath.tip"));
         constraints.gridx = 0;
         constraints.gridy = 7;
         constraints.insets = new Insets(0,10,0,0);
         createServerPackPanel.add(textJavaPath, constraints);
 
         //Label and textfield minecraftVersion
-        JLabel labelMinecraftVersion = new JLabel(LocalizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelminecraft"));
-        labelMinecraftVersion.setToolTipText(LocalizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelminecraft.tip"));
+        JLabel labelMinecraftVersion = new JLabel(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelminecraft"));
+        labelMinecraftVersion.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelminecraft.tip"));
         constraints.gridx = 0;
         constraints.gridy = 8;
         constraints.insets = new Insets(20,10,0,0);
         createServerPackPanel.add(labelMinecraftVersion, constraints);
         JTextField textMinecraftVersion = new JTextField("");
-        textMinecraftVersion.setToolTipText(LocalizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelminecraft.tip"));
+        textMinecraftVersion.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelminecraft.tip"));
         constraints.gridx = 0;
         constraints.gridy = 9;
         constraints.insets = new Insets(0,10,0,0);
         createServerPackPanel.add(textMinecraftVersion, constraints);
 
         //Label and textfield Modloader
-        JLabel labelModloader = new JLabel(LocalizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelmodloader"));
-        labelModloader.setToolTipText(LocalizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelmodloader.tip"));
+        JLabel labelModloader = new JLabel(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelmodloader"));
+        labelModloader.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelmodloader.tip"));
         constraints.gridx = 0;
         constraints.gridy = 10;
         constraints.insets = new Insets(20,10,0,0);
         createServerPackPanel.add(labelModloader, constraints);
         JTextField textModloader = new JTextField("");
-        textModloader.setToolTipText(LocalizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelmodloader.tip"));
+        textModloader.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelmodloader.tip"));
         constraints.gridx = 0;
         constraints.gridy = 11;
         constraints.insets = new Insets(0,10,0,0);
         createServerPackPanel.add(textModloader, constraints);
 
         //Label and textfield modloaderVersion
-        JLabel labelModloaderVersion = new JLabel(LocalizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelmodloaderversion"));
-        labelModloaderVersion.setToolTipText(LocalizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelmodloaderversion.tip"));
+        JLabel labelModloaderVersion = new JLabel(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelmodloaderversion"));
+        labelModloaderVersion.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelmodloaderversion.tip"));
         constraints.gridx = 0;
         constraints.gridy = 12;
         constraints.insets = new Insets(20,10,0,0);
         createServerPackPanel.add(labelModloaderVersion, constraints);
         JTextField textModloaderVersion = new JTextField("");
-        textModloaderVersion.setToolTipText(LocalizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelmodloaderversion.tip"));
+        textModloaderVersion.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelmodloaderversion.tip"));
         constraints.gridx = 0;
         constraints.gridy = 13;
         constraints.insets = new Insets(0,10,0,0);
@@ -151,36 +169,36 @@ class CreateServerPack extends Component {
         constraints.fill = GridBagConstraints.NONE;
 
         //Checkbox installServer
-        JCheckBox checkBoxServer = new JCheckBox(LocalizationManager.getLocalizedString("createserverpack.gui.createserverpack.checkboxserver"),true);
-        checkBoxServer.setToolTipText(LocalizationManager.getLocalizedString("createserverpack.gui.createserverpack.checkboxserver.tip"));
+        JCheckBox checkBoxServer = new JCheckBox(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.checkboxserver"),true);
+        checkBoxServer.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.checkboxserver.tip"));
         constraints.gridx = 0;
         constraints.gridy = 14;
         createServerPackPanel.add(checkBoxServer, constraints);
 
         //Checkbox copyIcon
-        JCheckBox checkBoxIcon = new JCheckBox(LocalizationManager.getLocalizedString("createserverpack.gui.createserverpack.checkboxicon"),true);
-        checkBoxIcon.setToolTipText(LocalizationManager.getLocalizedString("createserverpack.gui.createserverpack.checkboxicon.tip"));
+        JCheckBox checkBoxIcon = new JCheckBox(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.checkboxicon"),true);
+        checkBoxIcon.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.checkboxicon.tip"));
         constraints.gridx = 1;
         constraints.gridy = 14;
         createServerPackPanel.add(checkBoxIcon, constraints);
 
         //Checkbox copyProperties
-        JCheckBox checkBoxProperties = new JCheckBox(LocalizationManager.getLocalizedString("createserverpack.gui.createserverpack.checkboxproperties"),true);
-        checkBoxProperties.setToolTipText(LocalizationManager.getLocalizedString("createserverpack.gui.createserverpack.checkboxproperties.tip"));
+        JCheckBox checkBoxProperties = new JCheckBox(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.checkboxproperties"),true);
+        checkBoxProperties.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.checkboxproperties.tip"));
         constraints.gridx = 0;
         constraints.gridy = 15;
         createServerPackPanel.add(checkBoxProperties, constraints);
 
         //Checkbox copyScripts
-        JCheckBox checkBoxScripts = new JCheckBox(LocalizationManager.getLocalizedString("createserverpack.gui.createserverpack.checkboxscripts"),true);
-        checkBoxScripts.setToolTipText(LocalizationManager.getLocalizedString("createserverpack.gui.createserverpack.checkboxscripts.tip"));
+        JCheckBox checkBoxScripts = new JCheckBox(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.checkboxscripts"),true);
+        checkBoxScripts.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.checkboxscripts.tip"));
         constraints.gridx = 1;
         constraints.gridy = 15;
         createServerPackPanel.add(checkBoxScripts, constraints);
 
         //Checkbox createZIP
-        JCheckBox checkBoxZIP = new JCheckBox(LocalizationManager.getLocalizedString("createserverpack.gui.createserverpack.checkboxzip"),true);
-        checkBoxZIP.setToolTipText(LocalizationManager.getLocalizedString("createserverpack.gui.createserverpack.checkboxzip.tip"));
+        JCheckBox checkBoxZIP = new JCheckBox(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.checkboxzip"),true);
+        checkBoxZIP.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.checkboxzip.tip"));
         constraints.gridx = 0;
         constraints.gridy = 16;
         createServerPackPanel.add(checkBoxZIP, constraints);
@@ -193,7 +211,7 @@ class CreateServerPack extends Component {
 
         //Select modpackDir button
         JButton buttonModpackDir = new JButton();
-        buttonModpackDir.setToolTipText(LocalizationManager.getLocalizedString("createserverpack.gui.buttonmodpackdir"));
+        buttonModpackDir.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.buttonmodpackdir"));
         buttonModpackDir.setIcon(folderIcon);
         buttonModpackDir.setMinimumSize(folderButtonDimension);
         buttonModpackDir.setPreferredSize(folderButtonDimension);
@@ -202,7 +220,7 @@ class CreateServerPack extends Component {
             JFileChooser folderChooser = new JFileChooser();
 
             folderChooser.setCurrentDirectory(new File("."));
-            folderChooser.setDialogTitle(LocalizationManager.getLocalizedString("createserverpack.gui.buttonmodpackdir.title"));
+            folderChooser.setDialogTitle(localizationManager.getLocalizedString("createserverpack.gui.buttonmodpackdir.title"));
             folderChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
             folderChooser.setAcceptAllFileFilterUsed(false);
             folderChooser.setMultiSelectionEnabled(false);
@@ -211,9 +229,9 @@ class CreateServerPack extends Component {
             if (folderChooser.showOpenDialog(folderChooser) == JFileChooser.APPROVE_OPTION) {
                 try {
                     textModpackDir.setText(folderChooser.getSelectedFile().getCanonicalPath().replace("\\","/"));
-                    appLogger.info(String.format(LocalizationManager.getLocalizedString("createserverpack.log.info.buttonmodpack"), folderChooser.getSelectedFile().getCanonicalPath().replace("\\","/")));
+                    appLogger.info(String.format(localizationManager.getLocalizedString("createserverpack.log.info.buttonmodpack"), folderChooser.getSelectedFile().getCanonicalPath().replace("\\","/")));
                 } catch (IOException ex) {
-                    appLogger.error(LocalizationManager.getLocalizedString("createserverpack.log.error.buttonmodpack"),ex);
+                    appLogger.error(localizationManager.getLocalizedString("createserverpack.log.error.buttonmodpack"),ex);
                 }
             }
         });
@@ -223,7 +241,7 @@ class CreateServerPack extends Component {
 
         //Select clientside-mods button
         JButton buttonClientMods = new JButton();
-        buttonClientMods.setToolTipText(LocalizationManager.getLocalizedString("createserverpack.gui.buttonclientmods"));
+        buttonClientMods.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.buttonclientmods"));
         buttonClientMods.setIcon(folderIcon);
         buttonClientMods.setMinimumSize(folderButtonDimension);
         buttonClientMods.setPreferredSize(folderButtonDimension);
@@ -239,9 +257,9 @@ class CreateServerPack extends Component {
             } else {
                 fileChooser.setCurrentDirectory(new File("."));
             }
-            fileChooser.setDialogTitle(LocalizationManager.getLocalizedString("createserverpack.gui.buttonclientmods.title"));
+            fileChooser.setDialogTitle(localizationManager.getLocalizedString("createserverpack.gui.buttonclientmods.title"));
             fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
-            fileChooser.setFileFilter(new FileNameExtensionFilter(LocalizationManager.getLocalizedString("createserverpack.gui.buttonclientmods.filter"),"jar"));
+            fileChooser.setFileFilter(new FileNameExtensionFilter(localizationManager.getLocalizedString("createserverpack.gui.buttonclientmods.filter"),"jar"));
             fileChooser.setAcceptAllFileFilterUsed(false);
             fileChooser.setMultiSelectionEnabled(true);
             fileChooser.setPreferredSize(chooserDimension);
@@ -254,8 +272,8 @@ class CreateServerPack extends Component {
                     clientModsFilenames.add(clientMods[i].getName());
                 }
 
-                textClientMods.setText(Reference.cliSetup.buildString(Arrays.toString(clientModsFilenames.toArray(new String[0]))));
-                appLogger.info(String.format(LocalizationManager.getLocalizedString("createserverpack.log.info.buttonclientmods"), clientModsFilenames));
+                textClientMods.setText(configCheck.buildString(Arrays.toString(clientModsFilenames.toArray(new String[0]))));
+                appLogger.info(String.format(localizationManager.getLocalizedString("createserverpack.log.info.buttonclientmods"), clientModsFilenames));
             }
         });
         constraints.gridx = 2;
@@ -264,7 +282,7 @@ class CreateServerPack extends Component {
 
         //Select directories to copy to server pack button
         JButton buttonCopyDirs = new JButton();
-        buttonCopyDirs.setToolTipText(LocalizationManager.getLocalizedString("createserverpack.gui.buttoncopydirs"));
+        buttonCopyDirs.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.buttoncopydirs"));
         buttonCopyDirs.setIcon(folderIcon);
         buttonCopyDirs.setMinimumSize(folderButtonDimension);
         buttonCopyDirs.setPreferredSize(folderButtonDimension);
@@ -279,7 +297,7 @@ class CreateServerPack extends Component {
             } else {
                 fileChooser.setCurrentDirectory(new File("."));
             }
-            fileChooser.setDialogTitle(LocalizationManager.getLocalizedString("createserverpack.gui.buttoncopydirs.title"));
+            fileChooser.setDialogTitle(localizationManager.getLocalizedString("createserverpack.gui.buttoncopydirs.title"));
             fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
             fileChooser.setAcceptAllFileFilterUsed(false);
             fileChooser.setMultiSelectionEnabled(true);
@@ -293,8 +311,8 @@ class CreateServerPack extends Component {
                     copyDirsNames.add(copyDirs[i].getName());
                 }
 
-                textCopyDirs.setText(Reference.cliSetup.buildString(Arrays.toString(copyDirsNames.toArray(new String[0]))));
-                appLogger.info(String.format(LocalizationManager.getLocalizedString("createserverpack.log.info.buttoncopydirs"), copyDirsNames));
+                textCopyDirs.setText(configCheck.buildString(Arrays.toString(copyDirsNames.toArray(new String[0]))));
+                appLogger.info(String.format(localizationManager.getLocalizedString("createserverpack.log.info.buttoncopydirs"), copyDirsNames));
             }
         });
         constraints.gridx = 2;
@@ -303,7 +321,7 @@ class CreateServerPack extends Component {
 
         //Select javaPath button
         JButton buttonJavaPath = new JButton();
-        buttonJavaPath.setToolTipText(LocalizationManager.getLocalizedString("createserverpack.gui.buttonjavapath"));
+        buttonJavaPath.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.buttonjavapath"));
         buttonJavaPath.setIcon(folderIcon);
         buttonJavaPath.setMinimumSize(folderButtonDimension);
         buttonJavaPath.setPreferredSize(folderButtonDimension);
@@ -317,7 +335,7 @@ class CreateServerPack extends Component {
                 fileChooser.setCurrentDirectory(new File("."));
             }
 
-            fileChooser.setDialogTitle(LocalizationManager.getLocalizedString("createserverpack.gui.buttonjavapath.tile"));
+            fileChooser.setDialogTitle(localizationManager.getLocalizedString("createserverpack.gui.buttonjavapath.tile"));
 
             fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
             fileChooser.setAcceptAllFileFilterUsed(true);
@@ -328,9 +346,9 @@ class CreateServerPack extends Component {
             if (fileChooser.showOpenDialog(fileChooser) == JFileChooser.APPROVE_OPTION) {
                 try {
                     textJavaPath.setText(fileChooser.getSelectedFile().getCanonicalPath().replace("\\","/"));
-                    appLogger.info(String.format(LocalizationManager.getLocalizedString("createserverpack.log.info.buttonjavapath"), fileChooser.getSelectedFile().getCanonicalPath().replace("\\","/")));
+                    appLogger.info(String.format(localizationManager.getLocalizedString("createserverpack.log.info.buttonjavapath"), fileChooser.getSelectedFile().getCanonicalPath().replace("\\","/")));
                 } catch (IOException ex) {
-                    appLogger.error(LocalizationManager.getLocalizedString("createserverpack.log.error.buttonjavapath"),ex);
+                    appLogger.error(localizationManager.getLocalizedString("createserverpack.log.error.buttonjavapath"),ex);
                 }
             }
         });
@@ -340,7 +358,7 @@ class CreateServerPack extends Component {
 
         //Load config from file
         JButton buttonLoadConfigFromFile = new JButton();
-        buttonLoadConfigFromFile.setToolTipText(LocalizationManager.getLocalizedString("createserverpack.gui.buttonloadconfig"));
+        buttonLoadConfigFromFile.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.buttonloadconfig"));
         buttonLoadConfigFromFile.setIcon(loadIcon);
         buttonLoadConfigFromFile.setMinimumSize(miscButtonDimension);
         buttonLoadConfigFromFile.setPreferredSize(miscButtonDimension);
@@ -349,9 +367,9 @@ class CreateServerPack extends Component {
 
             JFileChooser fileChooser = new JFileChooser();
             fileChooser.setCurrentDirectory(new File("."));
-            fileChooser.setDialogTitle(LocalizationManager.getLocalizedString("createserverpack.gui.buttonloadconfig.title"));
+            fileChooser.setDialogTitle(localizationManager.getLocalizedString("createserverpack.gui.buttonloadconfig.title"));
             fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
-            fileChooser.setFileFilter(new FileNameExtensionFilter(LocalizationManager.getLocalizedString("createserverpack.gui.buttonloadconfig.filter"),"conf"));
+            fileChooser.setFileFilter(new FileNameExtensionFilter(localizationManager.getLocalizedString("createserverpack.gui.buttonloadconfig.filter"),"conf"));
             fileChooser.setAcceptAllFileFilterUsed(false);
             fileChooser.setMultiSelectionEnabled(false);
             fileChooser.setPreferredSize(chooserDimension);
@@ -362,18 +380,18 @@ class CreateServerPack extends Component {
 
                 try {
                     newConfigFile = ConfigFactory.parseFile(new File(fileChooser.getSelectedFile().getCanonicalPath()));
-                    appLogger.info(String.format(LocalizationManager.getLocalizedString("createserverpack.log.info.buttonloadconfigfromfile"), fileChooser.getSelectedFile().getCanonicalPath()));
+                    appLogger.info(String.format(localizationManager.getLocalizedString("createserverpack.log.info.buttonloadconfigfromfile"), fileChooser.getSelectedFile().getCanonicalPath()));
                 } catch (IOException ex) {
-                    appLogger.error(LocalizationManager.getLocalizedString("createserverpack.log.error.buttonloadconfigfromfile"),ex);
+                    appLogger.error(localizationManager.getLocalizedString("createserverpack.log.error.buttonloadconfigfromfile"),ex);
                 }
 
                 if (newConfigFile != null) {
 
                     textModpackDir.setText(newConfigFile.getString("modpackDir"));
 
-                    textClientMods.setText(Reference.cliSetup.buildString(newConfigFile.getStringList("clientMods").toString()));
+                    textClientMods.setText(configCheck.buildString(newConfigFile.getStringList("clientMods").toString()));
 
-                    textCopyDirs.setText(Reference.cliSetup.buildString(newConfigFile.getStringList("copyDirs").toString()));
+                    textCopyDirs.setText(configCheck.buildString(newConfigFile.getStringList("copyDirs").toString()));
 
                     textJavaPath.setText(newConfigFile.getString("javaPath"));
 
@@ -383,17 +401,17 @@ class CreateServerPack extends Component {
 
                     textModloaderVersion.setText(newConfigFile.getString("modLoaderVersion"));
 
-                    checkBoxServer.setSelected(Reference.configCheck.convertToBoolean(newConfigFile.getString("includeServerInstallation")));
+                    checkBoxServer.setSelected(configCheck.convertToBoolean(newConfigFile.getString("includeServerInstallation")));
 
-                    checkBoxIcon.setSelected(Reference.configCheck.convertToBoolean(newConfigFile.getString("includeServerIcon")));
+                    checkBoxIcon.setSelected(configCheck.convertToBoolean(newConfigFile.getString("includeServerIcon")));
 
-                    checkBoxProperties.setSelected(Reference.configCheck.convertToBoolean(newConfigFile.getString("includeServerProperties")));
+                    checkBoxProperties.setSelected(configCheck.convertToBoolean(newConfigFile.getString("includeServerProperties")));
 
-                    checkBoxScripts.setSelected(Reference.configCheck.convertToBoolean(newConfigFile.getString("includeStartScripts")));
+                    checkBoxScripts.setSelected(configCheck.convertToBoolean(newConfigFile.getString("includeStartScripts")));
 
-                    checkBoxZIP.setSelected(Reference.configCheck.convertToBoolean(newConfigFile.getString("includeZipCreation")));
+                    checkBoxZIP.setSelected(configCheck.convertToBoolean(newConfigFile.getString("includeZipCreation")));
 
-                    appLogger.info(LocalizationManager.getLocalizedString("createserverpack.log.info.buttonloadconfigfromfile.finish"));
+                    appLogger.info(localizationManager.getLocalizedString("createserverpack.log.info.buttonloadconfigfromfile.finish"));
                 }
             }
         });
@@ -405,7 +423,7 @@ class CreateServerPack extends Component {
 
         //Load config from file
         JButton buttonInfoWindow = new JButton();
-        buttonInfoWindow.setToolTipText(LocalizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.button"));
+        buttonInfoWindow.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.button"));
         buttonInfoWindow.setIcon(helpIcon);
         buttonInfoWindow.setMinimumSize(miscButtonDimension);
         buttonInfoWindow.setPreferredSize(miscButtonDimension);
@@ -414,18 +432,18 @@ class CreateServerPack extends Component {
 
             JTextArea textArea = new JTextArea(String.format(
                     "%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s",
-                    LocalizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.modpackdir"),
-                    LocalizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.clientsidemods"),
-                    LocalizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.directories"),
-                    LocalizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.pathtojava"),
-                    LocalizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.minecraftversion"),
-                    LocalizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.modloader"),
-                    LocalizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.modloaderversion"),
-                    LocalizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.installserver"),
-                    LocalizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.copypropertires"),
-                    LocalizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.copyscripts"),
-                    LocalizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.copyicon"),
-                    LocalizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.createzip")
+                    localizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.modpackdir"),
+                    localizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.clientsidemods"),
+                    localizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.directories"),
+                    localizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.pathtojava"),
+                    localizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.minecraftversion"),
+                    localizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.modloader"),
+                    localizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.modloaderversion"),
+                    localizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.installserver"),
+                    localizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.copypropertires"),
+                    localizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.copyscripts"),
+                    localizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.copyicon"),
+                    localizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.createzip")
             ));
             textArea.setEditable(false);
             textArea.setOpaque(false);
@@ -451,7 +469,7 @@ class CreateServerPack extends Component {
                         }
                     });
 
-            JOptionPane.showMessageDialog(new JFrame(), scrollPane, LocalizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.title"), JOptionPane.INFORMATION_MESSAGE, helpIcon);
+            JOptionPane.showMessageDialog(new JFrame(), scrollPane, localizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.title"), JOptionPane.INFORMATION_MESSAGE, helpIcon);
 
         });
         constraints.anchor = GridBagConstraints.CENTER;
@@ -464,7 +482,7 @@ class CreateServerPack extends Component {
         constraints.fill = GridBagConstraints.NONE;
         constraints.insets = new Insets(5,0,5,0);
 
-        JLabel labelGenerateServerPack = new JLabel(LocalizationManager.getLocalizedString("createserverpack.gui.buttongenerateserverpack.ready"));
+        JLabel labelGenerateServerPack = new JLabel(localizationManager.getLocalizedString("createserverpack.gui.buttongenerateserverpack.ready"));
         constraints.gridx = 0;
         constraints.gridy = 18;
         constraints.gridwidth = 4;
@@ -474,16 +492,16 @@ class CreateServerPack extends Component {
         createServerPackPanel.add(labelGenerateServerPack, constraints);
 
         JButton buttonGenerateServerPack = new JButton();
-        buttonGenerateServerPack.setToolTipText(LocalizationManager.getLocalizedString("createserverpack.gui.buttongenerateserverpack.tip"));
+        buttonGenerateServerPack.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.buttongenerateserverpack.tip"));
         buttonGenerateServerPack.setIcon(startGeneration);
         buttonGenerateServerPack.addActionListener(e -> {
 
             buttonGenerateServerPack.setEnabled(false);
 
-            appLogger.info(LocalizationManager.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.start"));
-            labelGenerateServerPack.setText(LocalizationManager.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.start"));
+            appLogger.info(localizationManager.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.start"));
+            labelGenerateServerPack.setText(localizationManager.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.start"));
 
-            Reference.filesSetup.writeConfigToFile(
+            configCheck.writeConfigToFile(
                     textModpackDir.getText(),
                     textClientMods.getText(),
                     textCopyDirs.getText(),
@@ -499,24 +517,24 @@ class CreateServerPack extends Component {
                     new File("serverpackcreator.tmp"),
                     true
             );
-            if (!Reference.configCheck.checkConfigFile(new File("serverpackcreator.tmp"))) {
-                appLogger.info(LocalizationManager.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.checked"));
-                labelGenerateServerPack.setText(LocalizationManager.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.checked"));
+            if (!configCheck.checkConfigFile(new File("serverpackcreator.tmp"))) {
+                appLogger.info(localizationManager.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.checked"));
+                labelGenerateServerPack.setText(localizationManager.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.checked"));
 
                 if (new File("serverpackcreator.tmp").exists()) {
                     boolean delTmp = new File("serverpackcreator.tmp").delete();
                     if (delTmp) {
-                        labelGenerateServerPack.setText(LocalizationManager.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.tempfile"));
-                        appLogger.info(LocalizationManager.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.tempfile"));
+                        labelGenerateServerPack.setText(localizationManager.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.tempfile"));
+                        appLogger.info(localizationManager.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.tempfile"));
                     } else {
-                        labelGenerateServerPack.setText(LocalizationManager.getLocalizedString("createserverpack.log.error.buttoncreateserverpack.tempfile"));
-                        appLogger.error(LocalizationManager.getLocalizedString("createserverpack.log.error.buttoncreateserverpack.tempfile"));
+                        labelGenerateServerPack.setText(localizationManager.getLocalizedString("createserverpack.log.error.buttoncreateserverpack.tempfile"));
+                        appLogger.error(localizationManager.getLocalizedString("createserverpack.log.error.buttoncreateserverpack.tempfile"));
                     }
                 }
 
-                appLogger.info(LocalizationManager.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.writing"));
-                labelGenerateServerPack.setText(LocalizationManager.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.writing"));
-                Reference.filesSetup.writeConfigToFile(
+                appLogger.info(localizationManager.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.writing"));
+                labelGenerateServerPack.setText(localizationManager.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.writing"));
+                configCheck.writeConfigToFile(
                         textModpackDir.getText(),
                         textClientMods.getText(),
                         textCopyDirs.getText(),
@@ -529,12 +547,12 @@ class CreateServerPack extends Component {
                         checkBoxProperties.isSelected(),
                         checkBoxScripts.isSelected(),
                         checkBoxZIP.isSelected(),
-                        Reference.getConfigFile(),
+                        configCheck.getConfigFile(),
                         false
                 );
 
-                appLogger.info(LocalizationManager.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.generating"));
-                labelGenerateServerPack.setText(LocalizationManager.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.generating"));
+                appLogger.info(localizationManager.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.generating"));
+                labelGenerateServerPack.setText(localizationManager.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.generating"));
 
 
                 Tailer tailer = Tailer.create(new File("./logs/serverpackcreator.log"), new TailerListenerAdapter() {
@@ -547,20 +565,21 @@ class CreateServerPack extends Component {
 
                 final ExecutorService executorService = Executors.newSingleThreadExecutor();
                 executorService.execute(() -> {
-                    if (Handler.run()) {
+                    CreateServerPack createServerPack = new CreateServerPack(localizationManager, configCheck);
+                    if (createServerPack.run()) {
                         tailer.stop();
 
                         System.gc();
                         System.runFinalization();
 
                         buttonGenerateServerPack.setEnabled(true);
-                        labelGenerateServerPack.setText(LocalizationManager.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.ready"));
+                        labelGenerateServerPack.setText(localizationManager.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.ready"));
 
                         JTextArea textArea = new JTextArea();
                         textArea.setOpaque(false);
                         textArea.setText(String.format(
                                 "%s\n%s",
-                                LocalizationManager.getLocalizedString("createserverpack.gui.createserverpack.openfolder.browse"),
+                                localizationManager.getLocalizedString("createserverpack.gui.createserverpack.openfolder.browse"),
                                 String.format(
                                         "%s/server_pack",
                                         textModpackDir.getText()
@@ -571,13 +590,13 @@ class CreateServerPack extends Component {
                         if (JOptionPane.showConfirmDialog(
                                 createServerPackPanel,
                                 textArea,
-                                LocalizationManager.getLocalizedString("createserverpack.gui.createserverpack.openfolder.title"),
+                                localizationManager.getLocalizedString("createserverpack.gui.createserverpack.openfolder.title"),
                                 JOptionPane.YES_NO_OPTION,
                                 JOptionPane.INFORMATION_MESSAGE) == 0) {
                             try {
                                 Desktop.getDesktop().open(new File(String.format("%s/server_pack",textModpackDir.getText())));
                             } catch (IOException ex) {
-                                appLogger.error(LocalizationManager.getLocalizedString("createserverpack.log.error.browserserverpack"));
+                                appLogger.error(localizationManager.getLocalizedString("createserverpack.log.error.browserserverpack"));
                             }
                         }
                         executorService.shutdown();
@@ -592,13 +611,13 @@ class CreateServerPack extends Component {
                         System.runFinalization();
 
                         buttonGenerateServerPack.setEnabled(true);
-                        labelGenerateServerPack.setText(LocalizationManager.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.ready"));
+                        labelGenerateServerPack.setText(localizationManager.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.ready"));
 
                         executorService.shutdown();
                     }
                 });
             } else {
-                labelGenerateServerPack.setText(LocalizationManager.getLocalizedString("createserverpack.gui.buttongenerateserverpack.fail"));
+                labelGenerateServerPack.setText(localizationManager.getLocalizedString("createserverpack.gui.buttongenerateserverpack.fail"));
                 buttonGenerateServerPack.setEnabled(true);
             }
         });
@@ -619,13 +638,13 @@ class CreateServerPack extends Component {
                 File configFile = new File("serverpackcreator.conf");
                 Config config = ConfigFactory.parseFile(configFile);
 
-                appLogger.info(String.format(LocalizationManager.getLocalizedString("createserverpack.log.info.buttonloadconfigfromfile"), configFile));
+                appLogger.info(String.format(localizationManager.getLocalizedString("createserverpack.log.info.buttonloadconfigfromfile"), configFile));
 
                 textModpackDir.setText(config.getString("modpackDir"));
 
-                textClientMods.setText(Reference.cliSetup.buildString(config.getStringList("clientMods").toString()));
+                textClientMods.setText(configCheck.buildString(config.getStringList("clientMods").toString()));
 
-                textCopyDirs.setText(Reference.cliSetup.buildString(config.getStringList("copyDirs").toString()));
+                textCopyDirs.setText(configCheck.buildString(config.getStringList("copyDirs").toString()));
 
                 textJavaPath.setText(config.getString("javaPath"));
 
@@ -635,17 +654,17 @@ class CreateServerPack extends Component {
 
                 textModloaderVersion.setText(config.getString("modLoaderVersion"));
 
-                checkBoxServer.setSelected(Reference.configCheck.convertToBoolean(config.getString("includeServerInstallation")));
+                checkBoxServer.setSelected(configCheck.convertToBoolean(config.getString("includeServerInstallation")));
 
-                checkBoxIcon.setSelected(Reference.configCheck.convertToBoolean(config.getString("includeServerIcon")));
+                checkBoxIcon.setSelected(configCheck.convertToBoolean(config.getString("includeServerIcon")));
 
-                checkBoxProperties.setSelected(Reference.configCheck.convertToBoolean(config.getString("includeServerProperties")));
+                checkBoxProperties.setSelected(configCheck.convertToBoolean(config.getString("includeServerProperties")));
 
-                checkBoxScripts.setSelected(Reference.configCheck.convertToBoolean(config.getString("includeStartScripts")));
+                checkBoxScripts.setSelected(configCheck.convertToBoolean(config.getString("includeStartScripts")));
 
-                checkBoxZIP.setSelected(Reference.configCheck.convertToBoolean(config.getString("includeZipCreation")));
+                checkBoxZIP.setSelected(configCheck.convertToBoolean(config.getString("includeZipCreation")));
 
-                appLogger.info(LocalizationManager.getLocalizedString("createserverpack.log.info.buttonloadconfigfromfile.finish"));
+                appLogger.info(localizationManager.getLocalizedString("createserverpack.log.info.buttonloadconfigfromfile.finish"));
             }
         } catch (NullPointerException ignored) {
 
diff --git a/src/main/java/de/griefed/serverpackcreator/gui/ModloaderInstallerLog.java b/src/main/java/de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.java
similarity index 59%
rename from src/main/java/de/griefed/serverpackcreator/gui/ModloaderInstallerLog.java
rename to src/main/java/de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.java
index 63c6b5477..7cb474cf3 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/ModloaderInstallerLog.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.java
@@ -8,11 +8,21 @@ import javax.swing.*;
 import java.awt.*;
 import java.io.File;
 
-class ModloaderInstallerLog extends Component {
+class ModloaderInstallerLogTab extends Component {
 
-    JComponent modloaderInstallerLog() {
-        JComponent modloaderInstallerLog = new JPanel(false);
-        modloaderInstallerLog.setLayout(new GridBagLayout());
+    private LocalizationManager localizationManager;
+
+    public ModloaderInstallerLogTab(LocalizationManager injectedLocalizationManager) {
+        if (injectedLocalizationManager == null) {
+            this.localizationManager = new LocalizationManager();
+        } else {
+            this.localizationManager = injectedLocalizationManager;
+        }
+    }
+
+    JComponent modloaderInstallerLogTab() {
+        JComponent modloaderInstallerLogPanel = new JPanel(false);
+        modloaderInstallerLogPanel.setLayout(new GridBagLayout());
         GridBagConstraints constraints = new GridBagConstraints();
 
         constraints.anchor = GridBagConstraints.CENTER;
@@ -29,7 +39,8 @@ class ModloaderInstallerLog extends Component {
         Tailer.create(new File("./logs/modloader_installer.log"), new TailerListenerAdapter() {
             public void handle(String line) {
                 synchronized (this) {
-                    if (line.contains(LocalizationManager.getLocalizedString("serversetup.log.info.installserver.fabric.enter")) || line.contains(LocalizationManager.getLocalizedString("serversetup.log.info.installserver.forge.enter"))) {
+                    if (line.contains(localizationManager.getLocalizedString("serversetup.log.info.installserver.fabric.enter")) ||
+                            line.contains(localizationManager.getLocalizedString("serversetup.log.info.installserver.forge.enter"))) {
                         textArea.setText("");
                     }
                     textArea.append(line + "\n");
@@ -42,8 +53,8 @@ class ModloaderInstallerLog extends Component {
                 JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
                 JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
 
-        modloaderInstallerLog.add(scrollPane, constraints);
+        modloaderInstallerLogPanel.add(scrollPane, constraints);
 
-        return modloaderInstallerLog;
+        return modloaderInstallerLogPanel;
     }
 }
\ No newline at end of file
diff --git a/src/main/java/de/griefed/serverpackcreator/gui/ServerPackCreatorLog.java b/src/main/java/de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.java
similarity index 63%
rename from src/main/java/de/griefed/serverpackcreator/gui/ServerPackCreatorLog.java
rename to src/main/java/de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.java
index 8f323d702..129cf9f88 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/ServerPackCreatorLog.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.java
@@ -8,11 +8,21 @@ import javax.swing.*;
 import java.awt.*;
 import java.io.File;
 
-class ServerPackCreatorLog extends Component {
+class ServerPackCreatorLogTab extends Component {
 
-    JComponent serverPackCreatorLog() {
-        JComponent serverPackCreatorLog = new JPanel(false);
-        serverPackCreatorLog.setLayout(new GridBagLayout());
+    private LocalizationManager localizationManager;
+
+    public ServerPackCreatorLogTab(LocalizationManager injectedLocalizationManager) {
+        if (injectedLocalizationManager == null) {
+            this.localizationManager = new LocalizationManager();
+        } else {
+            this.localizationManager = injectedLocalizationManager;
+        }
+    }
+
+    JComponent serverPackCreatorLogTab() {
+        JComponent serverPackCreatorLogPanel = new JPanel(false);
+        serverPackCreatorLogPanel.setLayout(new GridBagLayout());
         GridBagConstraints constraints = new GridBagConstraints();
 
         constraints.anchor = GridBagConstraints.CENTER;
@@ -29,7 +39,7 @@ class ServerPackCreatorLog extends Component {
         Tailer.create(new File("./logs/serverpackcreator.log"), new TailerListenerAdapter() {
             public void handle(String line) {
                 synchronized (this) {
-                    if (line.contains(LocalizationManager.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.start"))) {
+                    if (line.contains(localizationManager.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.start"))) {
                         textArea.setText("");
                     }
                     textArea.append(line + "\n");
@@ -42,8 +52,8 @@ class ServerPackCreatorLog extends Component {
                 JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
                 JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
 
-        serverPackCreatorLog.add(scrollPane, constraints);
+        serverPackCreatorLogPanel.add(scrollPane, constraints);
 
-        return serverPackCreatorLog;
+        return serverPackCreatorLogPanel;
     }
 }
\ No newline at end of file
diff --git a/src/main/java/de/griefed/serverpackcreator/i18n/LocalizationManager.java b/src/main/java/de/griefed/serverpackcreator/i18n/LocalizationManager.java
index 392024eb8..f946a950d 100644
--- a/src/main/java/de/griefed/serverpackcreator/i18n/LocalizationManager.java
+++ b/src/main/java/de/griefed/serverpackcreator/i18n/LocalizationManager.java
@@ -1,14 +1,9 @@
 package de.griefed.serverpackcreator.i18n;
 
-import de.griefed.serverpackcreator.FilesSetup;
-import de.griefed.serverpackcreator.Reference;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStreamReader;
+import java.io.*;
 import java.nio.charset.StandardCharsets;
 import java.util.*;
 
@@ -21,33 +16,51 @@ import java.util.*;
  * For example: lang_en_us.lang.</p>
  * Currently supports only strings to be used in localized fields.
  */
-public class LocalizationManager extends Reference {
-
+public class LocalizationManager {
 
     private static final Logger localeLogger = LogManager.getLogger(LocalizationManager.class);
+    private final File langPropertiesFile = new File("lang.properties");
+
     /**
      * Current language of application, mapped for easier further reference.
      */
-    private static Map<String, String> currentLanguage = new HashMap<>();
+    private Map<String, String> currentLanguage = new HashMap<>();
 
     /**
      * Localized strings that application uses.
      */
-    private static ResourceBundle localeResources;
+    private ResourceBundle localeResources;
 
     /**
      * Keys that used for current language mapping.
      */
-    private static final String LANGUAGE_MAP_PATH = "language";
-    private static final String COUNTRY_MAP_PATH = "country";
+    private final String LANGUAGE_MAP_PATH = "language";
+    private final String COUNTRY_MAP_PATH = "country";
+    private final String[] SUPPORTED_LANGUAGES = {
+            "en_us",
+            "uk_ua",
+            "de_de"
+    };
+
+    String[] getSupportedLanguages() {
+        return SUPPORTED_LANGUAGES;
+    }
+
+    File getLangPropertiesFile() {
+        return langPropertiesFile;
+    }
+
+    public String getLocale() {
+        return String.format("%s_%s", currentLanguage.get(LANGUAGE_MAP_PATH), currentLanguage.get(COUNTRY_MAP_PATH));
+    }
 
     /**
      * @throws IncorrectLanguageException Thrown if the language specified in the properties file is not supported by SPC or specified in the invalid format.
      * @param locale Locale to be used by application in this run.
      */
-    public static void init(String locale) throws IncorrectLanguageException {
+    public void init(String locale) throws IncorrectLanguageException {
         boolean isLanguageExists = false;
-        for (String lang: Reference.getSupportedLanguages()) {
+        for (String lang: getSupportedLanguages()) {
             if (lang.equalsIgnoreCase(locale)) {
                 localeLogger.debug("Lang is correct");
                 isLanguageExists = true;
@@ -68,14 +81,14 @@ public class LocalizationManager extends Reference {
         if (!currentLanguage.get(LANGUAGE_MAP_PATH).equalsIgnoreCase("en")) {
             localeLogger.info(String.format("%s %s", getLocalizedString("cli.usingLanguage"), getLocalizedString("localeName")));
         }
-        FilesSetup.writeLocaleToFile(locale);
+        writeLocaleToFile(locale);
     }
 
     /**
      * @param localePropertiesFile Path to the properties file with the language specified.
      * @throws IncorrectLanguageException Thrown if the language specified in the properties file is not supported by SPC or specified in the invalid format.
      */
-    public static void init(File localePropertiesFile) throws IncorrectLanguageException{
+    public void init(File localePropertiesFile) throws IncorrectLanguageException{
         Properties langProperties = new Properties();
         try (FileInputStream fis = new FileInputStream(localePropertiesFile)){
             BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fis, StandardCharsets.UTF_8));
@@ -89,7 +102,7 @@ public class LocalizationManager extends Reference {
 
         boolean isLanguageExists = false;
 
-        for (String lang: Reference.getSupportedLanguages()) {
+        for (String lang: getSupportedLanguages()) {
             if (lang.equalsIgnoreCase(langProp)) {
                 localeLogger.debug("Lang is correct");
                 isLanguageExists = true;
@@ -119,7 +132,7 @@ public class LocalizationManager extends Reference {
     /**
      * Initializer with default localization properties path.
      */
-    public static void init() {
+    public void init() {
         try {
             init("en_us");
         } catch (IncorrectLanguageException e) {
@@ -132,7 +145,7 @@ public class LocalizationManager extends Reference {
      * @param languageKey The language key to search for.
      * @return Localized string that is referred by the language key.
      */
-    public static String getLocalizedString(String languageKey) {
+    public String getLocalizedString(String languageKey) {
         try {
             String value =  localeResources.getString(languageKey);
             return new String(value.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
@@ -143,11 +156,83 @@ public class LocalizationManager extends Reference {
         return null;
     }
 
-    public static String getLocale() {
-        return String.format("%s_%s", currentLanguage.get(LANGUAGE_MAP_PATH), currentLanguage.get(COUNTRY_MAP_PATH));
+    /**
+     * Check for existence of a lang.properties-file and if found assign language specified therein. If assigning the specified language fails because it is not supported, default to en_US.
+     * This method should not contain the LocalizationManager, as the initialization of said manager is called from here. Therefore, localized string are not yet available.
+     * @return Always returns true. Dirty hack until I one day figure out how to init Localization before UI start correctly.
+     */
+    @SuppressWarnings("UnusedReturnValue")
+    public boolean checkLocaleFile() {
+        if (getLangPropertiesFile().exists()) {
+            try {
+                init(getLangPropertiesFile());
+            } catch (IncorrectLanguageException e) {
+
+                localeLogger.error("Incorrect language specified, falling back to English (United States)...");
+                try (BufferedWriter writer = new BufferedWriter(new FileWriter(getLangPropertiesFile()))) {
+
+                    if (!getLangPropertiesFile().exists()) {
+                        boolean langCreated = getLangPropertiesFile().createNewFile();
+                        if (langCreated) {
+                            localeLogger.debug("Lang properties file created successfully.");
+                        } else {
+                            localeLogger.debug("Lang properties file not created.");
+                        }
+                    }
+
+                    writer.write(String.format("# Supported languages: %s%n", Arrays.toString(getSupportedLanguages())));
+                    writer.write(String.format("lang=en_us%n"));
+
+                } catch (IOException ex) {
+                    localeLogger.error("Error: There was an error writing the localization properties file.", ex);
+                }
+                init();
+            }
+        } else {
+            try (BufferedWriter writer = new BufferedWriter(new FileWriter(getLangPropertiesFile()))) {
+
+                if (!getLangPropertiesFile().exists()) {
+                    boolean langCreated = getLangPropertiesFile().createNewFile();
+                    if (langCreated) {
+                        localeLogger.debug("Lang properties file created successfully.");
+                    } else {
+                        localeLogger.debug("Lang properties file not created.");
+                    }
+                }
+
+                writer.write(String.format("# Supported languages: %s%n", Arrays.toString(getSupportedLanguages())));
+                writer.write(String.format("lang=en_us%n"));
+
+            } catch (IOException ex) {
+                localeLogger.error("Error: There was an error writing the localization properties file.", ex);
+            }
+            init();
+        }
+        return true;
     }
 
-    public static String[] getSupportedLanguages() {
-        return Reference.getSupportedLanguages();
+    /**
+     * Writes the specified locale from -lang your_locale to a lang.properties file to ensure every subsequent start of serverpackcreator is executed using said locale.
+     * @param locale The locale the user specified when they ran serverpackcreator with -lang -your_locale.
+     * This method should not contain the LocalizationManager, as the initialization of said manager is called from here. Therefore, localized string are not yet available.
+     */
+    void writeLocaleToFile(String locale) {
+        try (BufferedWriter writer = new BufferedWriter(new FileWriter(getLangPropertiesFile()))) {
+
+            if (!getLangPropertiesFile().exists()) {
+                boolean langCreated = getLangPropertiesFile().createNewFile();
+                if (langCreated) {
+                    localeLogger.debug("Lang properties file created successfully.");
+                } else {
+                    localeLogger.debug("Lang properties file not created.");
+                }
+            }
+
+            writer.write(String.format("# Supported languages: %s%n", Arrays.toString(getSupportedLanguages())));
+            writer.write(String.format("lang=%s%n", locale));
+
+        } catch (IOException ex) {
+            localeLogger.error("Error: There was an error writing the localization properties file.", ex);
+        }
     }
 }
\ No newline at end of file
diff --git a/src/test/java/de/griefed/serverpackcreator/CLISetupTest.java b/src/test/java/de/griefed/serverpackcreator/CLISetupTest.java
deleted file mode 100644
index 67489d53b..000000000
--- a/src/test/java/de/griefed/serverpackcreator/CLISetupTest.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package de.griefed.serverpackcreator;
-
-import org.apache.logging.log4j.Logger;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-import java.util.Arrays;
-import java.util.List;
-
-class CLISetupTest {
-    @Mock
-    Logger appLogger;
-
-    @InjectMocks
-    CLISetup cLISetup;
-
-    @BeforeEach
-    void setUp() {
-        FilesSetup.checkLocaleFile();
-        MockitoAnnotations.openMocks(this);
-    }
-
-    @Test
-    void testBuildString() {
-        List<String> args = Arrays.asList(
-                "config",
-                "mods",
-                "scripts",
-                "seeds",
-                "defaultconfigs"
-        );
-        String result = Reference.cliSetup.buildString(args.toString());
-        Assertions.assertEquals(args.toString(), String.format("[%s]",result));
-    }
-}
diff --git a/src/test/java/de/griefed/serverpackcreator/ConfigCheckTest.java b/src/test/java/de/griefed/serverpackcreator/ConfigCheckTest.java
index c8f22a304..fa9ed5e99 100644
--- a/src/test/java/de/griefed/serverpackcreator/ConfigCheckTest.java
+++ b/src/test/java/de/griefed/serverpackcreator/ConfigCheckTest.java
@@ -1,6 +1,7 @@
 package de.griefed.serverpackcreator;
 
 import com.typesafe.config.ConfigFactory;
+import de.griefed.serverpackcreator.i18n.LocalizationManager;
 import org.apache.logging.log4j.Logger;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
@@ -22,21 +23,39 @@ class ConfigCheckTest {
     @Mock
     Logger appLogger;
 
-    @InjectMocks
-    ConfigCheck configCheck;
+    private ConfigCheck configCheck;
+    private LocalizationManager localizationManager;
+
+    ConfigCheckTest() {
+        localizationManager = new LocalizationManager();
+        configCheck = new ConfigCheck(localizationManager);
+    }
 
     @BeforeEach
     void setUp() {
-        FilesSetup.checkLocaleFile();
+        localizationManager.checkLocaleFile();
         MockitoAnnotations.openMocks(this);
     }
 
+    @Test
+    void testBuildString() {
+        List<String> args = Arrays.asList(
+                "config",
+                "mods",
+                "scripts",
+                "seeds",
+                "defaultconfigs"
+        );
+        String result = configCheck.buildString(args.toString());
+        Assertions.assertEquals(args.toString(), String.format("[%s]",result));
+    }
+
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
     void testCheckConfig() throws IOException {
         Files.copy(Paths.get("./src/test/resources/testresources/serverpackcreator.conf"), Paths.get("./serverpackcreator.conf"), REPLACE_EXISTING);
-        Reference.setConfig(ConfigFactory.parseFile(Reference.getConfigFile()));
-        boolean result = Reference.configCheck.checkConfigFile(Reference.getConfigFile());
+        configCheck.setConfig(ConfigFactory.parseFile(configCheck.getConfigFile()));
+        boolean result = configCheck.checkConfigFile(configCheck.getConfigFile());
         Assertions.assertFalse(result);
         new File("./serverpackcreator.conf").delete();
     }
@@ -44,14 +63,14 @@ class ConfigCheckTest {
     @Test
     void testCheckCurseForgeCorrect() {
         String modpackDir = "238298,3174854";
-        boolean result = Reference.configCheck.checkCurseForge(modpackDir);
+        boolean result = configCheck.checkCurseForge(modpackDir);
         Assertions.assertTrue(result);
     }
 
     @Test
     void testCheckCurseForgeFalse() {
         String modpackDir = "1,1234";
-        boolean result = Reference.configCheck.checkCurseForge(modpackDir);
+        boolean result = configCheck.checkCurseForge(modpackDir);
         Assertions.assertFalse(result);
     }
 
@@ -100,7 +119,7 @@ class ConfigCheckTest {
         boolean includeServerProperties = true;
         boolean includeStartScripts = true;
         boolean includeZipCreation = true;
-        Reference.configCheck.printConfig(
+        configCheck.printConfig(
                 modpackDir,
                 clientMods,
                 copyDirs,
@@ -118,13 +137,13 @@ class ConfigCheckTest {
     @Test
     void testCheckModpackDirCorrect() {
         String modpackDir = "./src/test/resources/forge_tests";
-        boolean result = Reference.configCheck.checkModpackDir(modpackDir);
+        boolean result = configCheck.checkModpackDir(modpackDir);
         Assertions.assertTrue(result);
     }
 
     @Test
     void testCheckModpackDirFalse() {
-        boolean result = Reference.configCheck.checkModpackDir("modpackDir");
+        boolean result = configCheck.checkModpackDir("modpackDir");
         Assertions.assertFalse(result);
     }
 
@@ -138,7 +157,7 @@ class ConfigCheckTest {
                 "seeds",
                 "defaultconfigs"
         );
-        boolean result = Reference.configCheck.checkCopyDirs(copyDirs, modpackDir);
+        boolean result = configCheck.checkCopyDirs(copyDirs, modpackDir);
         Assertions.assertTrue(result);
     }
 
@@ -152,13 +171,13 @@ class ConfigCheckTest {
                 "seedss",
                 "defaultconfigss"
         );
-        boolean result = Reference.configCheck.checkCopyDirs(copyDirs, modpackDir);
+        boolean result = configCheck.checkCopyDirs(copyDirs, modpackDir);
         Assertions.assertFalse(result);
     }
 
     @Test
     void testGetJavaPath() {
-        String result = Reference.configCheck.getJavaPath("");
+        String result = configCheck.getJavaPath("");
         String autoJavaPath = System.getProperty("java.home").replace("\\", "/") + "/bin/java";
         if (autoJavaPath.startsWith("C:")) {
             autoJavaPath = String.format("%s.exe", autoJavaPath);
@@ -180,39 +199,39 @@ class ConfigCheckTest {
         } else {
             javaPath = autoJavaPath;
         }
-        boolean result = Reference.configCheck.checkJavaPath(javaPath);
+        boolean result = configCheck.checkJavaPath(javaPath);
         Assertions.assertTrue(result);
     }
 
     @Test
     void testCheckModloaderFabric() {
         String modLoader = "Fabric";
-        boolean result = Reference.configCheck.checkModloader(modLoader);
+        boolean result = configCheck.checkModloader(modLoader);
         Assertions.assertTrue(result);
     }
 
     @Test
     void testCheckModloaderForge() {
         String modLoader = "Forge";
-        boolean result = Reference.configCheck.checkModloader(modLoader);
+        boolean result = configCheck.checkModloader(modLoader);
         Assertions.assertTrue(result);
     }
 
     @Test
     void testCheckModloaderFalse() {
-        boolean result = Reference.configCheck.checkModloader("modloader");
+        boolean result = configCheck.checkModloader("modloader");
         Assertions.assertFalse(result);
     }
 
     @Test
     void testSetModloaderFabric() {
-        String result = Reference.configCheck.setModloader("fAbRiC");
+        String result = configCheck.setModloader("fAbRiC");
         Assertions.assertEquals("Fabric", result);
     }
 
     @Test
     void testSetModloaderForge() {
-        String result = Reference.configCheck.setModloader("fOrGe");
+        String result = configCheck.setModloader("fOrGe");
         Assertions.assertEquals("Forge", result);
     }
 
@@ -221,7 +240,7 @@ class ConfigCheckTest {
     void testCheckModloaderVersionFabric() {
         String modLoader = "Fabric";
         String modLoaderVersion = "0.11.3";
-        boolean result = Reference.configCheck.checkModloaderVersion(modLoader, modLoaderVersion);
+        boolean result = configCheck.checkModloaderVersion(modLoader, modLoaderVersion);
         Assertions.assertTrue(result);
         new File("fabric-manifest.xml").delete();
     }
@@ -231,7 +250,7 @@ class ConfigCheckTest {
     void testCheckModloaderVersionFabricIncorrect() {
         String modLoader = "Fabric";
         String modLoaderVersion = "0.90.3";
-        boolean result = Reference.configCheck.checkModloaderVersion(modLoader, modLoaderVersion);
+        boolean result = configCheck.checkModloaderVersion(modLoader, modLoaderVersion);
         Assertions.assertFalse(result);
         new File("fabric-manifest.xml").delete();
     }
@@ -241,7 +260,7 @@ class ConfigCheckTest {
     void testCheckModloaderVersionForge() {
         String modLoader = "Forge";
         String modLoaderVersion = "36.1.2";
-        boolean result = Reference.configCheck.checkModloaderVersion(modLoader, modLoaderVersion);
+        boolean result = configCheck.checkModloaderVersion(modLoader, modLoaderVersion);
         Assertions.assertTrue(result);
         new File("forge-manifest.json").delete();
     }
@@ -251,7 +270,7 @@ class ConfigCheckTest {
     void testCheckModloaderVersionForgeIncorrect() {
         String modLoader = "Forge";
         String modLoaderVersion = "90.0.0";
-        boolean result = Reference.configCheck.checkModloaderVersion(modLoader, modLoaderVersion);
+        boolean result = configCheck.checkModloaderVersion(modLoader, modLoaderVersion);
         Assertions.assertFalse(result);
         new File("forge-manifest.json").delete();
     }
@@ -260,7 +279,7 @@ class ConfigCheckTest {
     @Test
     void testIsMinecraftVersionCorrect() {
         String minecraftVersion = "1.16.5";
-        boolean result = Reference.configCheck.isMinecraftVersionCorrect(minecraftVersion);
+        boolean result = configCheck.isMinecraftVersionCorrect(minecraftVersion);
         Assertions.assertTrue(result);
         new File("mcmanifest.json").delete();
     }
@@ -269,7 +288,7 @@ class ConfigCheckTest {
     @Test
     void testIsMinecraftVersionFalse() {
         String minecraftVersion = "1.99.5";
-        boolean result = Reference.configCheck.isMinecraftVersionCorrect(minecraftVersion);
+        boolean result = configCheck.isMinecraftVersionCorrect(minecraftVersion);
         Assertions.assertFalse(result);
         new File("mcmanifest.json").delete();
     }
@@ -278,7 +297,7 @@ class ConfigCheckTest {
     @Test
     void testIsFabricVersionCorrect() {
         String fabricVersion = "0.11.3";
-        boolean result = Reference.configCheck.isFabricVersionCorrect(fabricVersion);
+        boolean result = configCheck.isFabricVersionCorrect(fabricVersion);
         Assertions.assertTrue(result);
         new File("fabric-manifest.xml").delete();
     }
@@ -287,7 +306,7 @@ class ConfigCheckTest {
     @Test
     void testIsFabricVersionFalse() {
         String fabricVersion = "0.90.3";
-        boolean result = Reference.configCheck.isFabricVersionCorrect(fabricVersion);
+        boolean result = configCheck.isFabricVersionCorrect(fabricVersion);
         Assertions.assertFalse(result);
         new File("fabric-manifest.xml").delete();
     }
@@ -296,7 +315,7 @@ class ConfigCheckTest {
     @Test
     void testIsForgeVersionCorrect() {
         String forgeVersion = "36.1.2";
-        boolean result = Reference.configCheck.isForgeVersionCorrect(forgeVersion);
+        boolean result = configCheck.isForgeVersionCorrect(forgeVersion);
         Assertions.assertTrue(result);
         new File("forge-manifest.json").delete();
     }
@@ -305,7 +324,7 @@ class ConfigCheckTest {
     @Test
     void testIsForgeVersionFalse() {
         String forgeVersion = "99.0.0";
-        boolean result = Reference.configCheck.isForgeVersionCorrect(forgeVersion);
+        boolean result = configCheck.isForgeVersionCorrect(forgeVersion);
         Assertions.assertFalse(result);
         new File("forge-manifest.json").delete();
     }
diff --git a/src/test/java/de/griefed/serverpackcreator/CopyFilesTest.java b/src/test/java/de/griefed/serverpackcreator/CopyFilesTest.java
deleted file mode 100644
index c3e41446f..000000000
--- a/src/test/java/de/griefed/serverpackcreator/CopyFilesTest.java
+++ /dev/null
@@ -1,219 +0,0 @@
-package de.griefed.serverpackcreator;
-
-import org.apache.logging.log4j.Logger;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-import java.io.File;
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Comparator;
-import java.util.List;
-
-import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
-
-class CopyFilesTest {
-    @Mock
-    Logger appLogger;
-
-    @InjectMocks
-    CopyFiles copyFiles;
-
-    @BeforeEach
-    void setUp() {
-        FilesSetup.checkLocaleFile();
-        MockitoAnnotations.openMocks(this);
-    }
-
-    @Test
-    static void testCleanupEnvironment() throws IOException {
-        String modpackDir = "./src/test/resources/cleanup_tests";
-        Files.copy(Paths.get("./src/test/resources/testresources/server_pack.zip"), Paths.get("./src/test/resources/cleanup_tests/server_pack.zip"), REPLACE_EXISTING);
-        Files.createDirectories(Paths.get(String.format("%s/server_pack",modpackDir)));
-        Reference.copyFiles.cleanupEnvironment(modpackDir);
-    }
-
-    @SuppressWarnings("ResultOfMethodCallIgnored")
-    @Test
-    void testCopyStartScriptsFabric() throws IOException {
-        //TODO: Figure out how to run this test on GitHub Runners
-        if (!new File("/home/runner").isDirectory()) {
-            String modpackDir = "./src/test/resources/fabric_tests";
-            String modLoader = "Fabric";
-            Reference.filesSetup.filesSetup();
-            Reference.copyFiles.copyStartScripts(modpackDir, modLoader, true);
-            Assertions.assertTrue(new File(String.format("%s/server_pack/start-fabric.bat", modpackDir)).exists());
-            Assertions.assertTrue(new File(String.format("%s/server_pack/start-fabric.sh", modpackDir)).exists());
-            new File(String.format("%s/server_pack/start-fabric.bat", modpackDir)).delete();
-            new File(String.format("%s/server_pack/start-fabric.sh", modpackDir)).delete();
-            String delete = "./server_files";
-            if (new File(delete).isDirectory()) {
-                Path pathToBeDeleted = Paths.get(delete);
-                Files.walk(pathToBeDeleted).sorted(Comparator.reverseOrder()).map(Path::toFile).forEach(File::delete);
-            }
-            new File("./serverpackcreator.conf").delete();
-        }
-    }
-
-    @SuppressWarnings("ResultOfMethodCallIgnored")
-    @Test
-    void testCopyStartScriptsForge() throws IOException {
-        String modpackDir = "./src/test/resources/forge_tests";
-        String modLoader = "Forge";
-        Reference.filesSetup.filesSetup();
-        Reference.copyFiles.copyStartScripts(modpackDir, modLoader, true);
-        Assertions.assertTrue(new File(String.format("%s/server_pack/start-forge.bat",modpackDir)).exists());
-        Assertions.assertTrue(new File(String.format("%s/server_pack/start-forge.sh",modpackDir)).exists());
-        new File(String.format("%s/server_pack/start-forge.bat",modpackDir)).delete();
-        new File(String.format("%s/server_pack/start-forge.sh",modpackDir)).delete();
-        String delete = "./server_files";
-        if (new File(delete).isDirectory()) {
-            Path pathToBeDeleted = Paths.get(delete);
-            Files.walk(pathToBeDeleted)
-                    .sorted(Comparator.reverseOrder())
-                    .map(Path::toFile)
-                    .forEach(File::delete);
-        }
-        new File("./serverpackcreator.conf").delete();
-    }
-
-    @SuppressWarnings("ResultOfMethodCallIgnored")
-    @Test
-    void testCopyFiles() throws IOException {
-        String modpackDir = "./src/test/resources/forge_tests";
-        List<String> clientMods = Arrays.asList(
-                "AmbientSounds",
-                "BackTools",
-                "BetterAdvancement",
-                "BetterPing",
-                "cherished",
-                "ClientTweaks",
-                "Controlling",
-                "DefaultOptions",
-                "durability",
-                "DynamicSurroundings",
-                "itemzoom",
-                "jei-professions",
-                "jeiintegration",
-                "JustEnoughResources",
-                "MouseTweaks",
-                "Neat",
-                "OldJavaWarning",
-                "PackMenu",
-                "preciseblockplacing",
-                "SimpleDiscordRichPresence",
-                "SpawnerFix",
-                "TipTheScales",
-                "WorldNameRandomizer"
-        );
-        List<String> copyDirs = Arrays.asList(
-                "config",
-                "mods",
-                "scripts",
-                "seeds",
-                "defaultconfigs"
-        );
-        Reference.copyFiles.copyFiles(modpackDir, copyDirs, clientMods);
-        Assertions.assertTrue(new File(String.format("%s/server_pack/config",modpackDir)).isDirectory());
-        Assertions.assertTrue(new File(String.format("%s/server_pack/mods",modpackDir)).isDirectory());
-        Assertions.assertTrue(new File(String.format("%s/server_pack/scripts",modpackDir)).isDirectory());
-        Assertions.assertTrue(new File(String.format("%s/server_pack/seeds",modpackDir)).isDirectory());
-        Assertions.assertTrue(new File(String.format("%s/server_pack/defaultconfigs",modpackDir)).isDirectory());
-        Assertions.assertTrue(new File(String.format("%s/server_pack/config/testfile.txt",modpackDir)).exists());
-        Assertions.assertTrue(new File(String.format("%s/server_pack/defaultconfigs/testfile.txt",modpackDir)).exists());
-        Assertions.assertTrue(new File(String.format("%s/server_pack/mods/testmod.jar",modpackDir)).exists());
-        Assertions.assertTrue(new File(String.format("%s/server_pack/scripts/testscript.zs",modpackDir)).exists());
-        Assertions.assertTrue(new File(String.format("%s/server_pack/seeds/testjson.json",modpackDir)).exists());
-        for (String s : copyDirs) {
-            String deleteMe = (String.format("%s/server_pack/%s",modpackDir,s));
-            if (new File(deleteMe).isDirectory()) {
-                    Path pathToBeDeleted = Paths.get(deleteMe);
-                    Files.walk(pathToBeDeleted)
-                            .sorted(Comparator.reverseOrder())
-                            .map(Path::toFile)
-                            .forEach(File::delete);
-            }
-        }
-    }
-
-    @SuppressWarnings("ResultOfMethodCallIgnored")
-    @Test
-    void testCopyFilesEmptyClients() throws IOException {
-        String modpackDir = "./src/test/resources/forge_tests";
-        List<String> clientMods = new ArrayList<>();
-        List<String> copyDirs = Arrays.asList(
-                "config",
-                "mods",
-                "scripts",
-                "seeds",
-                "defaultconfigs"
-        );
-        Reference.copyFiles.copyFiles(modpackDir, copyDirs, clientMods);
-        Assertions.assertTrue(new File(String.format("%s/server_pack/config",modpackDir)).isDirectory());
-        Assertions.assertTrue(new File(String.format("%s/server_pack/mods",modpackDir)).isDirectory());
-        Assertions.assertTrue(new File(String.format("%s/server_pack/scripts",modpackDir)).isDirectory());
-        Assertions.assertTrue(new File(String.format("%s/server_pack/seeds",modpackDir)).isDirectory());
-        Assertions.assertTrue(new File(String.format("%s/server_pack/defaultconfigs",modpackDir)).isDirectory());
-        Assertions.assertTrue(new File(String.format("%s/server_pack/config/testfile.txt",modpackDir)).exists());
-        Assertions.assertTrue(new File(String.format("%s/server_pack/defaultconfigs/testfile.txt",modpackDir)).exists());
-        Assertions.assertTrue(new File(String.format("%s/server_pack/mods/testmod.jar",modpackDir)).exists());
-        Assertions.assertTrue(new File(String.format("%s/server_pack/scripts/testscript.zs",modpackDir)).exists());
-        Assertions.assertTrue(new File(String.format("%s/server_pack/seeds/testjson.json",modpackDir)).exists());
-        for (String s : copyDirs) {
-            String deleteMe = (String.format("%s/server_pack/%s",modpackDir,s));
-            if (new File(deleteMe).isDirectory()) {
-                Path pathToBeDeleted = Paths.get(deleteMe);
-                Files.walk(pathToBeDeleted)
-                        .sorted(Comparator.reverseOrder())
-                        .map(Path::toFile)
-                        .forEach(File::delete);
-            }
-        }
-    }
-
-    @SuppressWarnings("ResultOfMethodCallIgnored")
-    @Test
-    void testCopyIcon() throws IOException {
-        Reference.filesSetup.filesSetup();
-        String modpackDir = "./src/test/resources/forge_tests";
-        Reference.copyFiles.copyIcon(modpackDir);
-        Assertions.assertTrue(new File(String.format("%s/server_pack/server-icon.png",modpackDir)).exists());
-        new File(String.format("%s/server_pack/server-icon.png",modpackDir)).delete();
-        String delete = "./server_files";
-        if (new File(delete).isDirectory()) {
-            Path pathToBeDeleted = Paths.get(delete);
-            Files.walk(pathToBeDeleted)
-                    .sorted(Comparator.reverseOrder())
-                    .map(Path::toFile)
-                    .forEach(File::delete);
-        }
-        new File("./serverpackcreator.conf").delete();
-    }
-
-    @SuppressWarnings("ResultOfMethodCallIgnored")
-    @Test
-    void testCopyProperties() throws IOException {
-        Reference.filesSetup.filesSetup();
-        String modpackDir = "./src/test/resources/forge_tests";
-        Reference.copyFiles.copyProperties(modpackDir);
-        Assertions.assertTrue(new File(String.format("%s/server_pack/server.properties",modpackDir)).exists());
-        new File(String.format("%s/server_pack/server.properties",modpackDir)).delete();
-        String delete = "./server_files";
-        if (new File(delete).isDirectory()) {
-            Path pathToBeDeleted = Paths.get(delete);
-            Files.walk(pathToBeDeleted)
-                    .sorted(Comparator.reverseOrder())
-                    .map(Path::toFile)
-                    .forEach(File::delete);
-        }
-        new File("./serverpackcreator.conf").delete();
-    }
-}
diff --git a/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java b/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
new file mode 100644
index 000000000..e7bf95237
--- /dev/null
+++ b/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
@@ -0,0 +1,428 @@
+package de.griefed.serverpackcreator;
+
+import de.griefed.serverpackcreator.i18n.LocalizationManager;
+import org.apache.logging.log4j.Logger;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.List;
+
+import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
+
+class CreateServerPackTest {
+    @Mock
+    Logger appLogger;
+
+    private CreateServerPack createServerPack;
+    private FilesSetup filesSetup;
+    private LocalizationManager localizationManager;
+    private ConfigCheck configCheck;
+
+    CreateServerPackTest() {
+        localizationManager = new LocalizationManager();
+        configCheck = new ConfigCheck(localizationManager);
+        createServerPack = new CreateServerPack(localizationManager, configCheck);
+        filesSetup = new FilesSetup(localizationManager);
+    }
+
+    @BeforeEach
+    void setUp() {
+        localizationManager.checkLocaleFile();
+        MockitoAnnotations.openMocks(this);
+    }
+
+    @Mock
+    Logger installerLogger;
+
+
+    @Test
+    void testCleanupEnvironment() throws IOException {
+        String modpackDir = "./src/test/resources/cleanup_tests";
+        Files.copy(Paths.get("./src/test/resources/testresources/server_pack.zip"), Paths.get("./src/test/resources/cleanup_tests/server_pack.zip"), REPLACE_EXISTING);
+        Files.createDirectories(Paths.get(String.format("%s/server_pack",modpackDir)));
+        createServerPack.cleanupEnvironment(modpackDir);
+    }
+
+    @SuppressWarnings("ResultOfMethodCallIgnored")
+    @Test
+    void testCopyStartScriptsFabric() throws IOException {
+        //TODO: Figure out how to run this test on GitHub Runners
+        if (!new File("/home/runner").isDirectory()) {
+            String modpackDir = "./src/test/resources/fabric_tests";
+            String modLoader = "Fabric";
+            filesSetup.filesSetup();
+            createServerPack.copyStartScripts(modpackDir, modLoader, true);
+            Assertions.assertTrue(new File(String.format("%s/server_pack/start-fabric.bat", modpackDir)).exists());
+            Assertions.assertTrue(new File(String.format("%s/server_pack/start-fabric.sh", modpackDir)).exists());
+            new File(String.format("%s/server_pack/start-fabric.bat", modpackDir)).delete();
+            new File(String.format("%s/server_pack/start-fabric.sh", modpackDir)).delete();
+            String delete = "./server_files";
+            if (new File(delete).isDirectory()) {
+                Path pathToBeDeleted = Paths.get(delete);
+                Files.walk(pathToBeDeleted).sorted(Comparator.reverseOrder()).map(Path::toFile).forEach(File::delete);
+            }
+            new File("./serverpackcreator.conf").delete();
+        }
+    }
+
+    @SuppressWarnings("ResultOfMethodCallIgnored")
+    @Test
+    void testCopyStartScriptsForge() throws IOException {
+        String modpackDir = "./src/test/resources/forge_tests";
+        String modLoader = "Forge";
+        filesSetup.filesSetup();
+        createServerPack.copyStartScripts(modpackDir, modLoader, true);
+        Assertions.assertTrue(new File(String.format("%s/server_pack/start-forge.bat",modpackDir)).exists());
+        Assertions.assertTrue(new File(String.format("%s/server_pack/start-forge.sh",modpackDir)).exists());
+        new File(String.format("%s/server_pack/start-forge.bat",modpackDir)).delete();
+        new File(String.format("%s/server_pack/start-forge.sh",modpackDir)).delete();
+        String delete = "./server_files";
+        if (new File(delete).isDirectory()) {
+            Path pathToBeDeleted = Paths.get(delete);
+            Files.walk(pathToBeDeleted)
+                    .sorted(Comparator.reverseOrder())
+                    .map(Path::toFile)
+                    .forEach(File::delete);
+        }
+        new File("./serverpackcreator.conf").delete();
+    }
+
+    @SuppressWarnings("ResultOfMethodCallIgnored")
+    @Test
+    void testCopyFiles() throws IOException {
+        String modpackDir = "./src/test/resources/forge_tests";
+        List<String> clientMods = Arrays.asList(
+                "AmbientSounds",
+                "BackTools",
+                "BetterAdvancement",
+                "BetterPing",
+                "cherished",
+                "ClientTweaks",
+                "Controlling",
+                "DefaultOptions",
+                "durability",
+                "DynamicSurroundings",
+                "itemzoom",
+                "jei-professions",
+                "jeiintegration",
+                "JustEnoughResources",
+                "MouseTweaks",
+                "Neat",
+                "OldJavaWarning",
+                "PackMenu",
+                "preciseblockplacing",
+                "SimpleDiscordRichPresence",
+                "SpawnerFix",
+                "TipTheScales",
+                "WorldNameRandomizer"
+        );
+        List<String> copyDirs = Arrays.asList(
+                "config",
+                "mods",
+                "scripts",
+                "seeds",
+                "defaultconfigs"
+        );
+        createServerPack.copyFiles(modpackDir, copyDirs, clientMods);
+        Assertions.assertTrue(new File(String.format("%s/server_pack/config",modpackDir)).isDirectory());
+        Assertions.assertTrue(new File(String.format("%s/server_pack/mods",modpackDir)).isDirectory());
+        Assertions.assertTrue(new File(String.format("%s/server_pack/scripts",modpackDir)).isDirectory());
+        Assertions.assertTrue(new File(String.format("%s/server_pack/seeds",modpackDir)).isDirectory());
+        Assertions.assertTrue(new File(String.format("%s/server_pack/defaultconfigs",modpackDir)).isDirectory());
+        Assertions.assertTrue(new File(String.format("%s/server_pack/config/testfile.txt",modpackDir)).exists());
+        Assertions.assertTrue(new File(String.format("%s/server_pack/defaultconfigs/testfile.txt",modpackDir)).exists());
+        Assertions.assertTrue(new File(String.format("%s/server_pack/mods/testmod.jar",modpackDir)).exists());
+        Assertions.assertTrue(new File(String.format("%s/server_pack/scripts/testscript.zs",modpackDir)).exists());
+        Assertions.assertTrue(new File(String.format("%s/server_pack/seeds/testjson.json",modpackDir)).exists());
+        for (String s : copyDirs) {
+            String deleteMe = (String.format("%s/server_pack/%s",modpackDir,s));
+            if (new File(deleteMe).isDirectory()) {
+                Path pathToBeDeleted = Paths.get(deleteMe);
+                Files.walk(pathToBeDeleted)
+                        .sorted(Comparator.reverseOrder())
+                        .map(Path::toFile)
+                        .forEach(File::delete);
+            }
+        }
+    }
+
+    @SuppressWarnings("ResultOfMethodCallIgnored")
+    @Test
+    void testCopyFilesEmptyClients() throws IOException {
+        String modpackDir = "./src/test/resources/forge_tests";
+        List<String> clientMods = new ArrayList<>();
+        List<String> copyDirs = Arrays.asList(
+                "config",
+                "mods",
+                "scripts",
+                "seeds",
+                "defaultconfigs"
+        );
+        createServerPack.copyFiles(modpackDir, copyDirs, clientMods);
+        Assertions.assertTrue(new File(String.format("%s/server_pack/config",modpackDir)).isDirectory());
+        Assertions.assertTrue(new File(String.format("%s/server_pack/mods",modpackDir)).isDirectory());
+        Assertions.assertTrue(new File(String.format("%s/server_pack/scripts",modpackDir)).isDirectory());
+        Assertions.assertTrue(new File(String.format("%s/server_pack/seeds",modpackDir)).isDirectory());
+        Assertions.assertTrue(new File(String.format("%s/server_pack/defaultconfigs",modpackDir)).isDirectory());
+        Assertions.assertTrue(new File(String.format("%s/server_pack/config/testfile.txt",modpackDir)).exists());
+        Assertions.assertTrue(new File(String.format("%s/server_pack/defaultconfigs/testfile.txt",modpackDir)).exists());
+        Assertions.assertTrue(new File(String.format("%s/server_pack/mods/testmod.jar",modpackDir)).exists());
+        Assertions.assertTrue(new File(String.format("%s/server_pack/scripts/testscript.zs",modpackDir)).exists());
+        Assertions.assertTrue(new File(String.format("%s/server_pack/seeds/testjson.json",modpackDir)).exists());
+        for (String s : copyDirs) {
+            String deleteMe = (String.format("%s/server_pack/%s",modpackDir,s));
+            if (new File(deleteMe).isDirectory()) {
+                Path pathToBeDeleted = Paths.get(deleteMe);
+                Files.walk(pathToBeDeleted)
+                        .sorted(Comparator.reverseOrder())
+                        .map(Path::toFile)
+                        .forEach(File::delete);
+            }
+        }
+    }
+
+    @SuppressWarnings("ResultOfMethodCallIgnored")
+    @Test
+    void testCopyIcon() throws IOException {
+        filesSetup.filesSetup();
+        String modpackDir = "./src/test/resources/forge_tests";
+        createServerPack.copyIcon(modpackDir);
+        Assertions.assertTrue(new File(String.format("%s/server_pack/server-icon.png",modpackDir)).exists());
+        new File(String.format("%s/server_pack/server-icon.png",modpackDir)).delete();
+        String delete = "./server_files";
+        if (new File(delete).isDirectory()) {
+            Path pathToBeDeleted = Paths.get(delete);
+            Files.walk(pathToBeDeleted)
+                    .sorted(Comparator.reverseOrder())
+                    .map(Path::toFile)
+                    .forEach(File::delete);
+        }
+        new File("./serverpackcreator.conf").delete();
+    }
+
+    @SuppressWarnings("ResultOfMethodCallIgnored")
+    @Test
+    void testCopyProperties() throws IOException {
+        filesSetup.filesSetup();
+        String modpackDir = "./src/test/resources/forge_tests";
+        createServerPack.copyProperties(modpackDir);
+        Assertions.assertTrue(new File(String.format("%s/server_pack/server.properties",modpackDir)).exists());
+        new File(String.format("%s/server_pack/server.properties",modpackDir)).delete();
+        String delete = "./server_files";
+        if (new File(delete).isDirectory()) {
+            Path pathToBeDeleted = Paths.get(delete);
+            Files.walk(pathToBeDeleted)
+                    .sorted(Comparator.reverseOrder())
+                    .map(Path::toFile)
+                    .forEach(File::delete);
+        }
+        new File("./serverpackcreator.conf").delete();
+    }
+
+    @SuppressWarnings("ResultOfMethodCallIgnored")
+    @Test
+    void testInstallServerFabric() {
+        //TODO: Figure out how to run this test on GitHub Runners
+        if (!new File("/home/runner").isDirectory()) {
+            String modLoader = "Fabric";
+            String modpackDir = "./src/test/resources/fabric_tests";
+            String minecraftVersion = "1.16.5";
+            String modLoaderVersion = "0.7.3";
+            String javaPath;
+            String autoJavaPath = System.getProperty("java.home").replace("\\", "/") + "/bin/java";
+            if (autoJavaPath.startsWith("C:")) {
+                autoJavaPath = String.format("%s.exe", autoJavaPath);
+            }
+            if (new File("/usr/bin/java").exists()) {
+                javaPath = "/usr/bin/java";
+            } else {
+                javaPath = autoJavaPath;
+            }
+            createServerPack.downloadFabricJar(modpackDir);
+            createServerPack.installServer(modLoader, modpackDir, minecraftVersion, modLoaderVersion, javaPath);
+            Assertions.assertTrue(new File(String.format("%s/server_pack/fabric-server-launch.jar", modpackDir)).exists());
+            Assertions.assertTrue(new File(String.format("%s/server_pack/server.jar", modpackDir)).exists());
+            new File(String.format("%s/server_pack/fabric-server-launch.jar", modpackDir)).delete();
+            new File(String.format("%s/server_pack/server.jar", modpackDir)).delete();
+        }
+    }
+
+    @SuppressWarnings("ResultOfMethodCallIgnored")
+    @Test
+    void testInstallServerForge() throws IOException {
+        //TODO: Figure out how to run this test on GitHub Runners
+        if (!new File("/home/runner").isDirectory()) {
+            String modLoader = "Forge";
+            String modpackDir = "./src/test/resources/forge_tests";
+            String minecraftVersion = "1.16.5";
+            String modLoaderVersion = "36.1.2";
+            String javaPath;
+            String autoJavaPath = System.getProperty("java.home").replace("\\", "/") + "/bin/java";
+            if (autoJavaPath.startsWith("C:")) {
+                autoJavaPath = String.format("%s.exe", autoJavaPath);
+            }
+            if (new File("/usr/bin/java").exists()) {
+                javaPath = "/usr/bin/java";
+            } else {
+                javaPath = autoJavaPath;
+            }
+            createServerPack.downloadForgeJar(minecraftVersion, modLoaderVersion, modpackDir);
+            createServerPack.installServer(modLoader, modpackDir, minecraftVersion, modLoaderVersion, javaPath);
+            Assertions.assertTrue(new File(String.format("%s/server_pack/1.16.5.json", modpackDir)).exists());
+            Assertions.assertTrue(new File(String.format("%s/server_pack/forge.jar", modpackDir)).exists());
+            Assertions.assertTrue(new File(String.format("%s/server_pack/minecraft_server.1.16.5.jar", modpackDir)).exists());
+            Assertions.assertTrue(new File(String.format("%s/server_pack/download_minecraft-server.jar_forge.bat", modpackDir)).exists());
+            Assertions.assertTrue(new File(String.format("%s/server_pack/download_minecraft-server.jar_forge.sh", modpackDir)).exists());
+            new File(String.format("%s/server_pack/1.16.5.json", modpackDir)).delete();
+            new File(String.format("%s/server_pack/forge.jar", modpackDir)).delete();
+            new File(String.format("%s/server_pack/forge-installer.jar", modpackDir)).delete();
+            new File(String.format("%s/server_pack/forge-installer.jar.log", modpackDir)).delete();
+            new File(String.format("%s/server_pack/minecraft_server.1.16.5.jar", modpackDir)).delete();
+            new File(String.format("%s/server_pack/download_minecraft-server.jar_forge.bat", modpackDir)).delete();
+            new File(String.format("%s/server_pack/download_minecraft-server.jar_forge.sh", modpackDir)).delete();
+            String delete = String.format("%s/server_pack/libraries", modpackDir);
+            if (new File(delete).isDirectory()) {
+                Path pathToBeDeleted = Paths.get(delete);
+                Files.walk(pathToBeDeleted).sorted(Comparator.reverseOrder()).map(Path::toFile).forEach(File::delete);
+            }
+        }
+    }
+
+    @Test
+    void testZipBuilderFabric() {
+        //TODO: Figure out how to run this test on GitHub Runners
+        if (!new File("/home/runner").isDirectory()) {
+            String modLoader = "Fabric";
+            String modpackDir = "./src/test/resources/fabric_tests";
+            createServerPack.zipBuilder(modpackDir, modLoader, Boolean.TRUE);
+        }
+    }
+
+    @Test
+    void testZipBuilderForge() {
+        //TODO: Figure out how to run this test on GitHub Runners
+        if (!new File("/home/runner").isDirectory()) {
+            String modLoader = "Forge";
+            String modpackDir = "./src/test/resources/forge_tests";
+            createServerPack.zipBuilder(modpackDir, modLoader, Boolean.TRUE);
+        }
+    }
+
+    @SuppressWarnings("ResultOfMethodCallIgnored")
+    @Test
+    void testGenerateDownloadScriptsFabric() {
+        //TODO: Figure out how to run this test on GitHub Runners
+        if (!new File("/home/runner").isDirectory()) {
+            String modLoader = "Fabric";
+            String modpackDir = "./src/test/resources/fabric_tests";
+            String minecraftVersion = "1.16.5";
+            createServerPack.generateDownloadScripts(modLoader, modpackDir, minecraftVersion);
+            Assertions.assertTrue(new File(String.format("%s/server_pack/download_minecraft-server.jar_fabric.bat", modpackDir)).exists());
+            Assertions.assertTrue(new File(String.format("%s/server_pack/download_minecraft-server.jar_fabric.sh", modpackDir)).exists());
+            new File(String.format("%s/server_pack/download_minecraft-server.jar_fabric.bat", modpackDir)).delete();
+            new File(String.format("%s/server_pack/download_minecraft-server.jar_fabric.sh", modpackDir)).delete();
+        }
+    }
+
+    @SuppressWarnings("ResultOfMethodCallIgnored")
+    @Test
+    void testGenerateDownloadScriptsForge() {
+        //TODO: Figure out how to run this test on GitHub Runners
+        if (!new File("/home/runner").isDirectory()) {
+            String modLoader = "Forge";
+            String modpackDir = "./src/test/resources/forge_tests";
+            String minecraftVersion = "1.16.5";
+            createServerPack.generateDownloadScripts(modLoader, modpackDir, minecraftVersion);
+            Assertions.assertTrue(new File(String.format("%s/server_pack/download_minecraft-server.jar_forge.bat", modpackDir)).exists());
+            Assertions.assertTrue(new File(String.format("%s/server_pack/download_minecraft-server.jar_forge.sh", modpackDir)).exists());
+            new File(String.format("%s/server_pack/download_minecraft-server.jar_forge.bat", modpackDir)).delete();
+            new File(String.format("%s/server_pack/download_minecraft-server.jar_forge.sh", modpackDir)).delete();
+        }
+    }
+
+    @SuppressWarnings("ResultOfMethodCallIgnored")
+    @Test
+    void testDownloadFabricJar() {
+        //TODO: Figure out how to run this test on GitHub Runners
+        if (!new File("/home/runner").isDirectory()) {
+            String modpackDir = "./src/test/resources/fabric_tests";
+            boolean result = createServerPack.downloadFabricJar(modpackDir);
+            Assertions.assertTrue(result);
+            Assertions.assertTrue(new File(String.format("%s/server_pack/fabric-installer.jar", modpackDir)).exists());
+            new File(String.format("%s/server_pack/fabric-installer.jar", modpackDir)).delete();
+            new File(String.format("%s/server_pack/fabric-installer.xml", modpackDir)).delete();
+        }
+    }
+
+    @SuppressWarnings("ResultOfMethodCallIgnored")
+    @Test
+    void testDownloadForgeJar() {
+        //TODO: Figure out how to run this test on GitHub Runners
+        if (!new File("/home/runner").isDirectory()) {
+            String modLoaderVersion = "36.1.2";
+            String modpackDir = "./src/test/resources/forge_tests";
+            String minecraftVersion = "1.16.5";
+            boolean result = createServerPack.downloadForgeJar(minecraftVersion, modLoaderVersion, modpackDir);
+            Assertions.assertTrue(result);
+            Assertions.assertTrue(new File(String.format("%s/server_pack/forge-installer.jar", modpackDir)).exists());
+            new File(String.format("%s/server_pack/forge-installer.jar", modpackDir)).delete();
+        }
+    }
+
+    @Test
+    void testDeleteMinecraftJarFabric() throws IOException {
+        Files.copy(Paths.get("./src/test/resources/testresources/server_pack.zip"), Paths.get("./src/test/resources/fabric_tests/server_pack.zip"), REPLACE_EXISTING);
+        String modLoader = "Fabric";
+        String modpackDir = "./src/test/resources/forge_tests";
+        createServerPack.deleteMinecraftJar(modLoader, modpackDir);
+    }
+
+    @Test
+    void testDeleteMinecraftJarForge() throws IOException {
+        Files.copy(Paths.get("./src/test/resources/testresources/server_pack.zip"), Paths.get("./src/test/resources/forge_tests/server_pack.zip"), REPLACE_EXISTING);
+        String modLoader = "Forge";
+        String modpackDir = "./src/test/resources/forge_tests";
+        createServerPack.deleteMinecraftJar(modLoader, modpackDir);
+    }
+
+    @Test
+    void testCleanUpServerPackForge() {
+        String modLoader = "Forge";
+        String modpackDir = "./src/test/resources/forge_tests";
+        String minecraftVersion = "1.16.5";
+        String modLoaderVersion = "36.1.2";
+        createServerPack.cleanUpServerPack(
+                new File(String.format("%s/server_pack/fabric-installer.jar", modpackDir)),
+                new File(String.format("%s/server_pack/forge-%s-%s.jar", modpackDir, minecraftVersion, modLoaderVersion)),
+                modLoader,
+                modpackDir,
+                minecraftVersion,
+                modLoaderVersion);
+    }
+
+    @Test
+    void testCleanUpServerPackFabric() {
+        String modLoader = "Fabric";
+        String modpackDir = "./src/test/resources/fabric_tests";
+        String minecraftVersion = "1.16.5";
+        String modLoaderVersion = "36.1.2";
+        createServerPack.cleanUpServerPack(
+                new File(String.format("%s/server_pack/fabric-installer.jar", modpackDir)),
+                new File(String.format("%s/server_pack/forge-%s-%s.jar", modpackDir, minecraftVersion, modLoaderVersion)),
+                modLoader,
+                modpackDir,
+                minecraftVersion,
+                modLoaderVersion);
+    }
+}
diff --git a/src/test/java/de/griefed/serverpackcreator/FilesSetupTest.java b/src/test/java/de/griefed/serverpackcreator/FilesSetupTest.java
index 5af1ca676..0b60fcab3 100644
--- a/src/test/java/de/griefed/serverpackcreator/FilesSetupTest.java
+++ b/src/test/java/de/griefed/serverpackcreator/FilesSetupTest.java
@@ -1,5 +1,6 @@
 package de.griefed.serverpackcreator;
 
+import de.griefed.serverpackcreator.i18n.LocalizationManager;
 import org.apache.logging.log4j.Logger;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
@@ -21,12 +22,19 @@ class FilesSetupTest {
     @Mock
     Logger appLogger;
 
-    @InjectMocks
-    FilesSetup filesSetup;
+    private FilesSetup filesSetup;
+    private ConfigCheck configCheck;
+    private LocalizationManager localizationManager;
+
+    FilesSetupTest() {
+        localizationManager = new LocalizationManager();
+        filesSetup = new FilesSetup(localizationManager);
+        configCheck = new ConfigCheck(localizationManager);
+    }
 
     @BeforeEach
     void setUp() {
-        FilesSetup.checkLocaleFile();
+        localizationManager.checkLocaleFile();
         MockitoAnnotations.openMocks(this);
     }
 
@@ -35,7 +43,7 @@ class FilesSetupTest {
     void testRenameOldConfig() throws IOException {
         File oldConfigFile = new File("creator.conf");
         oldConfigFile.createNewFile();
-        Assertions.assertFalse(Reference.filesSetup.checkForConfig());
+        Assertions.assertFalse(filesSetup.checkForConfig());
         Assertions.assertTrue(new File("serverpackcreator.conf").exists());
         new File("serverpackcreator.conf").delete();
         new File("creator.conf").delete();
@@ -46,7 +54,7 @@ class FilesSetupTest {
     void testCheckForConfig() throws IOException {
         File configFile = new File("serverpackcreator.conf");
         configFile.createNewFile();
-        Assertions.assertFalse(Reference.filesSetup.checkForConfig());
+        Assertions.assertFalse(filesSetup.checkForConfig());
         configFile.delete();
     }
 
@@ -54,7 +62,7 @@ class FilesSetupTest {
     @Test
     void testCheckForConfigNew() {
         File configFile = new File("serverpackcreator.conf");
-        Assertions.assertTrue(Reference.filesSetup.checkForConfig());
+        Assertions.assertTrue(filesSetup.checkForConfig());
         configFile.delete();
     }
 
@@ -63,7 +71,7 @@ class FilesSetupTest {
     void testCheckForFabricLinux() throws IOException {
         File fabricLinux = new File("start-fabric.sh");
         fabricLinux.createNewFile();
-        Assertions.assertFalse(Reference.filesSetup.checkForFabricLinux());
+        Assertions.assertFalse(filesSetup.checkForFabricLinux());
         fabricLinux.delete();
     }
 
@@ -71,7 +79,7 @@ class FilesSetupTest {
     @Test
     void testCheckForFabricLinuxNew() {
         File fabricLinux = new File("start-fabric.sh");
-        Assertions.assertTrue(Reference.filesSetup.checkForFabricLinux());
+        Assertions.assertTrue(filesSetup.checkForFabricLinux());
         fabricLinux.delete();
     }
 
@@ -80,7 +88,7 @@ class FilesSetupTest {
     void testCheckForFabricWindows() throws IOException {
         File fabricWindows = new File("start-fabric.bat");
         fabricWindows.createNewFile();
-        Assertions.assertFalse(Reference.filesSetup.checkForFabricWindows());
+        Assertions.assertFalse(filesSetup.checkForFabricWindows());
         fabricWindows.delete();
     }
 
@@ -88,7 +96,7 @@ class FilesSetupTest {
     @Test
     void testCheckForFabricWindowsNew() {
         File fabricWindows = new File("start-fabric.bat");
-        Assertions.assertTrue(Reference.filesSetup.checkForFabricWindows());
+        Assertions.assertTrue(filesSetup.checkForFabricWindows());
         fabricWindows.delete();
     }
 
@@ -97,7 +105,7 @@ class FilesSetupTest {
     void testCheckForForgeLinux() throws IOException {
         File forgeLinux = new File("start-forge.sh");
         forgeLinux.createNewFile();
-        Assertions.assertFalse(Reference.filesSetup.checkForForgeLinux());
+        Assertions.assertFalse(filesSetup.checkForForgeLinux());
         forgeLinux.delete();
     }
 
@@ -105,7 +113,7 @@ class FilesSetupTest {
     @Test
     void testCheckForForgeLinuxNew() {
         File forgeLinux = new File("start-forge.sh");
-        Assertions.assertTrue(Reference.filesSetup.checkForForgeLinux());
+        Assertions.assertTrue(filesSetup.checkForForgeLinux());
         forgeLinux.delete();
     }
 
@@ -114,7 +122,7 @@ class FilesSetupTest {
     void testCheckForForgeWindows() throws IOException {
         File forgeWindows = new File("start-forge.bat");
         forgeWindows.createNewFile();
-        Assertions.assertFalse(Reference.filesSetup.checkForForgeWindows());
+        Assertions.assertFalse(filesSetup.checkForForgeWindows());
         forgeWindows.delete();
     }
 
@@ -122,7 +130,7 @@ class FilesSetupTest {
     @Test
     void testCheckForForgeWindowsNew() {
         File forgeWindows = new File("start-forge.bat");
-        Assertions.assertTrue(Reference.filesSetup.checkForForgeWindows());
+        Assertions.assertTrue(filesSetup.checkForForgeWindows());
         forgeWindows.delete();
     }
 
@@ -131,7 +139,7 @@ class FilesSetupTest {
     void testCheckForProperties() throws IOException {
         File properties = new File("server.properties");
         properties.createNewFile();
-        Assertions.assertFalse(Reference.filesSetup.checkForProperties());
+        Assertions.assertFalse(filesSetup.checkForProperties());
         properties.delete();
     }
 
@@ -139,7 +147,7 @@ class FilesSetupTest {
     @Test
     void testCheckForPropertiesNew() {
         File properties = new File("server.properties");
-        Assertions.assertTrue(Reference.filesSetup.checkForProperties());
+        Assertions.assertTrue(filesSetup.checkForProperties());
         properties.delete();
     }
 
@@ -148,7 +156,7 @@ class FilesSetupTest {
     void testCheckForIcon() throws IOException {
         File icon = new File("server-icon.png");
         icon.createNewFile();
-        Assertions.assertFalse(Reference.filesSetup.checkForIcon());
+        Assertions.assertFalse(filesSetup.checkForIcon());
         icon.delete();
     }
 
@@ -156,14 +164,14 @@ class FilesSetupTest {
     @Test
     void testCheckForIconNew() {
         File icon = new File("server-icon.png");
-        Assertions.assertTrue(Reference.filesSetup.checkForIcon());
+        Assertions.assertTrue(filesSetup.checkForIcon());
         icon.delete();
     }
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
     void testFilesSetup() throws IOException {
-        Reference.filesSetup.filesSetup();
+        filesSetup.filesSetup();
         Assertions.assertTrue(new File("./server_files").isDirectory());
         Assertions.assertTrue(new File("./server_files/server.properties").exists());
         Assertions.assertTrue(new File("./server_files/server-icon.png").exists());
@@ -232,10 +240,10 @@ class FilesSetupTest {
         String minecraftVersion = "1.16.5";
         String modLoader = "Fabric";
         String modLoaderVersion = "0.11.3";
-        boolean result = Reference.filesSetup.writeConfigToFile(
+        boolean result = configCheck.writeConfigToFile(
                 modpackDir,
-                Reference.cliSetup.buildString(clientMods.toString()),
-                Reference.cliSetup.buildString(copyDirs.toString()),
+                configCheck.buildString(clientMods.toString()),
+                configCheck.buildString(copyDirs.toString()),
                 true,
                 javaPath,
                 minecraftVersion,
@@ -245,7 +253,7 @@ class FilesSetupTest {
                 true,
                 true,
                 true,
-                Reference.getConfigFile(),
+                configCheck.getConfigFile(),
                 false
         );
         Assertions.assertTrue(result);
@@ -293,10 +301,10 @@ class FilesSetupTest {
         String minecraftVersion = "1.16.5";
         String modLoader = "Forge";
         String modLoaderVersion = "36.1.2";
-        boolean result = Reference.filesSetup.writeConfigToFile(
+        boolean result = configCheck.writeConfigToFile(
                 modpackDir,
-                Reference.cliSetup.buildString(clientMods.toString()),
-                Reference.cliSetup.buildString(copyDirs.toString()),
+                configCheck.buildString(clientMods.toString()),
+                configCheck.buildString(copyDirs.toString()),
                 true,
                 javaPath,
                 minecraftVersion,
@@ -306,7 +314,7 @@ class FilesSetupTest {
                 true,
                 true,
                 true,
-                Reference.getConfigFile(),
+                configCheck.getConfigFile(),
                 false
         );
         Assertions.assertTrue(result);
diff --git a/src/test/java/de/griefed/serverpackcreator/ServerSetupTest.java b/src/test/java/de/griefed/serverpackcreator/ServerSetupTest.java
deleted file mode 100644
index 0da4b21e1..000000000
--- a/src/test/java/de/griefed/serverpackcreator/ServerSetupTest.java
+++ /dev/null
@@ -1,122 +0,0 @@
-package de.griefed.serverpackcreator;
-
-import org.apache.logging.log4j.Logger;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-import java.io.File;
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.Comparator;
-
-class ServerSetupTest {
-    @Mock
-    Logger appLogger;
-
-    @Mock
-    Logger installerLogger;
-
-    @InjectMocks
-    ServerSetup serverSetup;
-
-    @BeforeEach
-    void setUp() {
-        FilesSetup.checkLocaleFile();
-        MockitoAnnotations.openMocks(this);
-    }
-
-    @SuppressWarnings("ResultOfMethodCallIgnored")
-    @Test
-    void testInstallServerFabric() {
-        //TODO: Figure out how to run this test on GitHub Runners
-        if (!new File("/home/runner").isDirectory()) {
-            String modLoader = "Fabric";
-            String modpackDir = "./src/test/resources/fabric_tests";
-            String minecraftVersion = "1.16.5";
-            String modLoaderVersion = "0.7.3";
-            String javaPath;
-            String autoJavaPath = System.getProperty("java.home").replace("\\", "/") + "/bin/java";
-            if (autoJavaPath.startsWith("C:")) {
-                autoJavaPath = String.format("%s.exe", autoJavaPath);
-            }
-            if (new File("/usr/bin/java").exists()) {
-                javaPath = "/usr/bin/java";
-            } else {
-                javaPath = autoJavaPath;
-            }
-            Reference.serverUtilities.downloadFabricJar(modpackDir);
-            Reference.serverSetup.installServer(modLoader, modpackDir, minecraftVersion, modLoaderVersion, javaPath);
-            Assertions.assertTrue(new File(String.format("%s/server_pack/fabric-server-launch.jar", modpackDir)).exists());
-            Assertions.assertTrue(new File(String.format("%s/server_pack/server.jar", modpackDir)).exists());
-            new File(String.format("%s/server_pack/fabric-server-launch.jar", modpackDir)).delete();
-            new File(String.format("%s/server_pack/server.jar", modpackDir)).delete();
-        }
-    }
-
-    @SuppressWarnings("ResultOfMethodCallIgnored")
-    @Test
-    void testInstallServerForge() throws IOException {
-        //TODO: Figure out how to run this test on GitHub Runners
-        if (!new File("/home/runner").isDirectory()) {
-            String modLoader = "Forge";
-            String modpackDir = "./src/test/resources/forge_tests";
-            String minecraftVersion = "1.16.5";
-            String modLoaderVersion = "36.1.2";
-            String javaPath;
-            String autoJavaPath = System.getProperty("java.home").replace("\\", "/") + "/bin/java";
-            if (autoJavaPath.startsWith("C:")) {
-                autoJavaPath = String.format("%s.exe", autoJavaPath);
-            }
-            if (new File("/usr/bin/java").exists()) {
-                javaPath = "/usr/bin/java";
-            } else {
-                javaPath = autoJavaPath;
-            }
-            Reference.serverUtilities.downloadForgeJar(minecraftVersion, modLoaderVersion, modpackDir);
-            Reference.serverSetup.installServer(modLoader, modpackDir, minecraftVersion, modLoaderVersion, javaPath);
-            Assertions.assertTrue(new File(String.format("%s/server_pack/1.16.5.json", modpackDir)).exists());
-            Assertions.assertTrue(new File(String.format("%s/server_pack/forge.jar", modpackDir)).exists());
-            Assertions.assertTrue(new File(String.format("%s/server_pack/minecraft_server.1.16.5.jar", modpackDir)).exists());
-            Assertions.assertTrue(new File(String.format("%s/server_pack/download_minecraft-server.jar_forge.bat", modpackDir)).exists());
-            Assertions.assertTrue(new File(String.format("%s/server_pack/download_minecraft-server.jar_forge.sh", modpackDir)).exists());
-            new File(String.format("%s/server_pack/1.16.5.json", modpackDir)).delete();
-            new File(String.format("%s/server_pack/forge.jar", modpackDir)).delete();
-            new File(String.format("%s/server_pack/forge-installer.jar", modpackDir)).delete();
-            new File(String.format("%s/server_pack/forge-installer.jar.log", modpackDir)).delete();
-            new File(String.format("%s/server_pack/minecraft_server.1.16.5.jar", modpackDir)).delete();
-            new File(String.format("%s/server_pack/download_minecraft-server.jar_forge.bat", modpackDir)).delete();
-            new File(String.format("%s/server_pack/download_minecraft-server.jar_forge.sh", modpackDir)).delete();
-            String delete = String.format("%s/server_pack/libraries", modpackDir);
-            if (new File(delete).isDirectory()) {
-                Path pathToBeDeleted = Paths.get(delete);
-                Files.walk(pathToBeDeleted).sorted(Comparator.reverseOrder()).map(Path::toFile).forEach(File::delete);
-            }
-        }
-    }
-
-    @Test
-    void testZipBuilderFabric() {
-        //TODO: Figure out how to run this test on GitHub Runners
-        if (!new File("/home/runner").isDirectory()) {
-            String modLoader = "Fabric";
-            String modpackDir = "./src/test/resources/fabric_tests";
-            Reference.serverSetup.zipBuilder(modpackDir, modLoader, Boolean.TRUE);
-        }
-    }
-
-    @Test
-    void testZipBuilderForge() {
-        //TODO: Figure out how to run this test on GitHub Runners
-        if (!new File("/home/runner").isDirectory()) {
-            String modLoader = "Forge";
-            String modpackDir = "./src/test/resources/forge_tests";
-            Reference.serverSetup.zipBuilder(modpackDir, modLoader, Boolean.TRUE);
-        }
-    }
-}
diff --git a/src/test/java/de/griefed/serverpackcreator/ServerUtilitiesTest.java b/src/test/java/de/griefed/serverpackcreator/ServerUtilitiesTest.java
deleted file mode 100644
index fb8240e98..000000000
--- a/src/test/java/de/griefed/serverpackcreator/ServerUtilitiesTest.java
+++ /dev/null
@@ -1,136 +0,0 @@
-package de.griefed.serverpackcreator;
-
-import org.apache.logging.log4j.Logger;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.mockito.InjectMocks;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import java.io.File;
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Paths;
-
-import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
-
-class ServerUtilitiesTest {
-    @Mock
-    Logger appLogger;
-
-    @InjectMocks
-    ServerUtilities serverUtilities;
-
-    @BeforeEach
-    void setUp() {
-        FilesSetup.checkLocaleFile();
-        MockitoAnnotations.openMocks(this);
-    }
-
-    @SuppressWarnings("ResultOfMethodCallIgnored")
-    @Test
-    void testGenerateDownloadScriptsFabric() {
-        //TODO: Figure out how to run this test on GitHub Runners
-        if (!new File("/home/runner").isDirectory()) {
-            String modLoader = "Fabric";
-            String modpackDir = "./src/test/resources/fabric_tests";
-            String minecraftVersion = "1.16.5";
-            Reference.serverUtilities.generateDownloadScripts(modLoader, modpackDir, minecraftVersion);
-            Assertions.assertTrue(new File(String.format("%s/server_pack/download_minecraft-server.jar_fabric.bat", modpackDir)).exists());
-            Assertions.assertTrue(new File(String.format("%s/server_pack/download_minecraft-server.jar_fabric.sh", modpackDir)).exists());
-            new File(String.format("%s/server_pack/download_minecraft-server.jar_fabric.bat", modpackDir)).delete();
-            new File(String.format("%s/server_pack/download_minecraft-server.jar_fabric.sh", modpackDir)).delete();
-        }
-    }
-
-    @SuppressWarnings("ResultOfMethodCallIgnored")
-    @Test
-    void testGenerateDownloadScriptsForge() {
-        //TODO: Figure out how to run this test on GitHub Runners
-        if (!new File("/home/runner").isDirectory()) {
-            String modLoader = "Forge";
-            String modpackDir = "./src/test/resources/forge_tests";
-            String minecraftVersion = "1.16.5";
-            Reference.serverUtilities.generateDownloadScripts(modLoader, modpackDir, minecraftVersion);
-            Assertions.assertTrue(new File(String.format("%s/server_pack/download_minecraft-server.jar_forge.bat", modpackDir)).exists());
-            Assertions.assertTrue(new File(String.format("%s/server_pack/download_minecraft-server.jar_forge.sh", modpackDir)).exists());
-            new File(String.format("%s/server_pack/download_minecraft-server.jar_forge.bat", modpackDir)).delete();
-            new File(String.format("%s/server_pack/download_minecraft-server.jar_forge.sh", modpackDir)).delete();
-        }
-    }
-
-    @SuppressWarnings("ResultOfMethodCallIgnored")
-    @Test
-    void testDownloadFabricJar() {
-        //TODO: Figure out how to run this test on GitHub Runners
-        if (!new File("/home/runner").isDirectory()) {
-            String modpackDir = "./src/test/resources/fabric_tests";
-            boolean result = Reference.serverUtilities.downloadFabricJar(modpackDir);
-            Assertions.assertTrue(result);
-            Assertions.assertTrue(new File(String.format("%s/server_pack/fabric-installer.jar", modpackDir)).exists());
-            new File(String.format("%s/server_pack/fabric-installer.jar", modpackDir)).delete();
-            new File(String.format("%s/server_pack/fabric-installer.xml", modpackDir)).delete();
-        }
-    }
-
-    @SuppressWarnings("ResultOfMethodCallIgnored")
-    @Test
-    void testDownloadForgeJar() {
-        //TODO: Figure out how to run this test on GitHub Runners
-        if (!new File("/home/runner").isDirectory()) {
-            String modLoaderVersion = "36.1.2";
-            String modpackDir = "./src/test/resources/forge_tests";
-            String minecraftVersion = "1.16.5";
-            boolean result = Reference.serverUtilities.downloadForgeJar(minecraftVersion, modLoaderVersion, modpackDir);
-            Assertions.assertTrue(result);
-            Assertions.assertTrue(new File(String.format("%s/server_pack/forge-installer.jar", modpackDir)).exists());
-            new File(String.format("%s/server_pack/forge-installer.jar", modpackDir)).delete();
-        }
-    }
-
-    @Test
-    void testDeleteMinecraftJarFabric() throws IOException {
-        Files.copy(Paths.get("./src/test/resources/testresources/server_pack.zip"), Paths.get("./src/test/resources/fabric_tests/server_pack.zip"), REPLACE_EXISTING);
-        String modLoader = "Fabric";
-        String modpackDir = "./src/test/resources/forge_tests";
-        Reference.serverUtilities.deleteMinecraftJar(modLoader, modpackDir);
-    }
-
-    @Test
-    void testDeleteMinecraftJarForge() throws IOException {
-        Files.copy(Paths.get("./src/test/resources/testresources/server_pack.zip"), Paths.get("./src/test/resources/forge_tests/server_pack.zip"), REPLACE_EXISTING);
-        String modLoader = "Forge";
-        String modpackDir = "./src/test/resources/forge_tests";
-        Reference.serverUtilities.deleteMinecraftJar(modLoader, modpackDir);
-    }
-
-    @Test
-    void testCleanUpServerPackForge() {
-        String modLoader = "Forge";
-        String modpackDir = "./src/test/resources/forge_tests";
-        String minecraftVersion = "1.16.5";
-        String modLoaderVersion = "36.1.2";
-        Reference.serverUtilities.cleanUpServerPack(
-                new File(String.format("%s/server_pack/fabric-installer.jar", modpackDir)),
-                new File(String.format("%s/server_pack/forge-%s-%s.jar", modpackDir, minecraftVersion, modLoaderVersion)),
-                modLoader,
-                modpackDir,
-                minecraftVersion,
-                modLoaderVersion);
-    }
-
-    @Test
-    void testCleanUpServerPackFabric() {
-        String modLoader = "Fabric";
-        String modpackDir = "./src/test/resources/fabric_tests";
-        String minecraftVersion = "1.16.5";
-        String modLoaderVersion = "36.1.2";
-        Reference.serverUtilities.cleanUpServerPack(
-                new File(String.format("%s/server_pack/fabric-installer.jar", modpackDir)),
-                new File(String.format("%s/server_pack/forge-%s-%s.jar", modpackDir, minecraftVersion, modLoaderVersion)),
-                modLoader,
-                modpackDir,
-                minecraftVersion,
-                modLoaderVersion);
-    }
-}
diff --git a/src/test/java/de/griefed/serverpackcreator/curseforgemodpack/CreateModpackTest.java b/src/test/java/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpackTest.java
similarity index 80%
rename from src/test/java/de/griefed/serverpackcreator/curseforgemodpack/CreateModpackTest.java
rename to src/test/java/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpackTest.java
index 10fbb9506..e48422806 100644
--- a/src/test/java/de/griefed/serverpackcreator/curseforgemodpack/CreateModpackTest.java
+++ b/src/test/java/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpackTest.java
@@ -3,12 +3,11 @@ package de.griefed.serverpackcreator.curseforgemodpack;
 import com.therandomlabs.curseapi.CurseAPI;
 import com.therandomlabs.curseapi.CurseException;
 import de.griefed.serverpackcreator.FilesSetup;
-import de.griefed.serverpackcreator.Reference;
+import de.griefed.serverpackcreator.i18n.LocalizationManager;
 import org.apache.logging.log4j.Logger;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
-import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
@@ -21,16 +20,21 @@ import java.nio.file.Paths;
 import java.util.Comparator;
 import java.util.Objects;
 
-class CreateModpackTest {
+class CurseCreateModpackTest {
     @Mock
     Logger appLogger;
 
-    @InjectMocks
-    CreateModpack createModpack;
+    private CurseCreateModpack curseCreateModpack;
+    private LocalizationManager localizationManager;
+
+    CurseCreateModpackTest() {
+        localizationManager = new LocalizationManager();
+        curseCreateModpack = new CurseCreateModpack(localizationManager);
+    }
 
     @BeforeEach
     void setUp() {
-        FilesSetup.checkLocaleFile();
+        localizationManager.checkLocaleFile();
         MockitoAnnotations.openMocks(this);
     }
 
@@ -49,7 +53,7 @@ class CreateModpackTest {
                     .fileWithID(fileID))
                     .displayName();
             String modpackDir = String.format("./src/test/resources/forge_tests/%s/%s", projectName, displayName);
-            boolean result = Reference.createModpack.curseForgeModpack(modpackDir, projectID, fileID);
+            boolean result = curseCreateModpack.curseForgeModpack(modpackDir, projectID, fileID);
             Assertions.assertTrue(result);
             String deleteFile = String.format("./src/test/resources/forge_tests/%s/%s", projectName, displayName);
             if (new File(deleteFile).isDirectory()) {
@@ -72,13 +76,13 @@ class CreateModpackTest {
 
     @Test
     void testSetModloaderFabric() {
-        String result = Reference.createModpack.setModloader("fAbRiC");
+        String result = curseCreateModpack.setModloader("fAbRiC");
         Assertions.assertEquals("Fabric", result);
     }
 
     @Test
     void testSetModloaderForge() {
-        String result = Reference.createModpack.setModloader("fOrGe");
+        String result = curseCreateModpack.setModloader("fOrGe");
         Assertions.assertEquals("Forge", result);
     }
 }
diff --git a/src/test/resources/fabric_tests/server_pack.zip b/src/test/resources/fabric_tests/server_pack.zip
index 79933a2500c90e22474ca1a4073a6d5a130d06bc..d3dce8dc45057dd459f3df33f11ae45c61fa3e81 100644
GIT binary patch
literal 148
zcmWIWW@Zs#;Nak3=(Cv{#DD|@fb87-l;W6@)Z!8#LoX|_h?yb4o1FushzY7Pz?+dt
fgaOqAm>kFiRDf<?fHx}}NChJh+5u??5QhN(7jzT~

literal 664
zcmWIWW@Zs#;Nak3xZTwn#DE0Uf$Wt0^1Ph<#FY5l%)Hd(qQtZk-Qv`uveY8Iti+=D
zwEUv<RK29c65TVq`I-zQ93F;eMl`rYOXp~>lW>=j_0_j$dfB=~G%nsb=Dg=V)f|D#
z9M={li_e*SZ^5EhiPm;kc&rx78Pzqtdc$IO{fC%YezVE<lTM+1mijNfI;P66ckj5-
z8u`oo+QEraCv6b!3^+Q2VWFSz;u}jZE|awoPhZ!Pvvkn{P4QkfXQ3lsm!C13#vZck
zWOHB9iS_l%XB3_J7Aqbf;LXmV^XKux*+Ady0^$Ii{#7H=zr`7`eH-}>DTpw9uVY=d
zS;6su)ov;KgEkMgMsS-r-2U-hN?iE)Ztrz>4L^6Baro%#t(Vyy%;dhxy{Oh@i{!5=
z{TbnBN?Lq=O*yHpJG13U+J^JXZnCXOsaJj&|9pzJ*8ZvMOZC!^sYNXMDlc}4qi}&4
z>$ak4XF9ft9qXMUwbha%@rh@|^{-wp7aK`g8OZ2{M@5vpG5^8_^5{pgWpPu1-Z%jE
zC?k^y10rgX0|6AZsDQ|b4)8`b6xl*h_#watAd?tFi!%beS=m7Pn1FC4kiN+X;sF5c
C*6HK`

-- 
GitLab


From b2a8dcef2c7365e6937648a030bcdc7fe6452c2a Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Thu, 29 Apr 2021 08:30:35 +0200
Subject: [PATCH 02/91] refactor(DI): Fix passing locale to LocalizationManager

---
 src/main/java/de/griefed/serverpackcreator/Main.java | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/Main.java b/src/main/java/de/griefed/serverpackcreator/Main.java
index 00f18f5da..9e1ccb157 100644
--- a/src/main/java/de/griefed/serverpackcreator/Main.java
+++ b/src/main/java/de/griefed/serverpackcreator/Main.java
@@ -36,9 +36,9 @@ public class Main {
 
         if (Arrays.asList(args).contains("-lang")) {
             try {
-                localizationManager.init(programArgs.get(programArgs.indexOf("-lang" + 1)));
+                localizationManager.init(programArgs.get(programArgs.indexOf("-lang") + 1));
             } catch (IncorrectLanguageException e) {
-                appLogger.info(programArgs.get(programArgs.indexOf("-lang" + 1)));
+                appLogger.info(programArgs.get(programArgs.indexOf("-lang") + 1));
                 appLogger.error("Incorrect language specified, falling back to English (United States)...");
                 localizationManager.init();
             }
-- 
GitLab


From 500e96e8d146367b0f1b554138a2220a2e726f28 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Thu, 29 Apr 2021 08:30:55 +0200
Subject: [PATCH 03/91] refactor(DI): gitignore stuff

---
 .gitignore                                      |   2 ++
 src/test/resources/fabric_tests/server_pack.zip | Bin 148 -> 148 bytes
 2 files changed, 2 insertions(+)

diff --git a/.gitignore b/.gitignore
index d62867177..6438f6626 100644
--- a/.gitignore
+++ b/.gitignore
@@ -144,6 +144,8 @@ eclipse
 /src/test/resources/tests/server_pack/fabric-installer.jar
 /src/test/resources/tests/server_pack/forge-installer.jar
 /src/test/resources/forge_tests/Vanilla Forge
+/src/test/resources/fabric_tests/server_pack.zip
+/src/test/resources/forge_tests/server_pack.zip
 /serverpackcreator.conf
 /serverpackcreator.tmp
 /server_files
diff --git a/src/test/resources/fabric_tests/server_pack.zip b/src/test/resources/fabric_tests/server_pack.zip
index d3dce8dc45057dd459f3df33f11ae45c61fa3e81..067c3d76f899d289de92f8706d018008ae79ef46 100644
GIT binary patch
delta 26
gcmbQjIE9fXz?+#xgn@&DgJG)EL>>nwAnE4@07Q`mw*UYD

delta 26
gcmbQjIE9fXz?+#xgn@&DgQ3r6B98+Tko0o{07K0Mod5s;

-- 
GitLab


From ef8d1618eeecf22111dbda90381448ed8cd92236 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Thu, 29 Apr 2021 10:30:01 +0200
Subject: [PATCH 04/91] refactor(DI): Update CONTRIBUTING.md and README.md

---
 CONTRIBUTING.md                                |   8 ++++----
 README.md                                      |  10 +---------
 .../resources/fabric_tests/server_pack.zip     | Bin 148 -> 0 bytes
 .../fabric_tests/server_pack/mods/testmod.jar  |   0
 src/test/resources/forge_tests/server_pack.zip | Bin 664 -> 5418 bytes
 .../resources/testresources/server_pack.zip    | Bin 664 -> 5418 bytes
 6 files changed, 5 insertions(+), 13 deletions(-)
 delete mode 100644 src/test/resources/fabric_tests/server_pack.zip
 delete mode 100644 src/test/resources/fabric_tests/server_pack/mods/testmod.jar

diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index dae428839..ef6701259 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -4,14 +4,14 @@
 
 - **The Main-class:** The Main-class of ServerPackCreator only passes the arguments from execution to the Handler-class.
 
-- **Config file:** If you want to contribute to SPC, please make sure you do not change the `serverpackcreator.conf`-file. Ideally, any version of SPC will work with any config file, as they all have the same content. Chaning what's inside the `serverpackcreator.conf`-file would make versions incompatible to each other, but I want users to be able to simply download the newest version **without** having to migrate their config file or even worrying about such a thing.
-Therefor, I ask that you do not touch the `serverpackcreator.conf`-file.
+- **Config file:** If you want to contribute to SPC, please make sure you do not change the `serverpackcreator.conf`-file. Ideally, any version of SPC will work with any config file, as they all have the same content. Changing what's inside the `serverpackcreator.conf`-file would make versions incompatible to each other, but I want users to be able to simply download the newest version **without** having to migrate their config file or even worrying about such a thing.
+Therefore, I ask that you do not touch the `serverpackcreator.conf`-file.
   
 - **Variable names:** Please keep variable names verbose i.e. `thisStoresSomething` or `checkForStuff` or some such. Variables like `a` and `tmpA` make code harder to read. We're not aiming for best performance or whatever, so we can have longer variable names if we want to.
 
-- **Files:** If your changes introduce additional files to the ecosystem of ServerPackCreator, please define them in `Reference.java`. I reserve the right to reject PRs which introduce additional files to ServerPackCreator, depending on what they are for.
+- **Access modifiers:** Because the files generated by this program are supposed to be distributed to multiple people, I try to keep methods and classes as closed-off as possible. It's not much, but it's something. Therefore, unless your method or class *absolutely* must be public, keep it package private or make it private completely. I reserve the right to refactor any such classes or methods.  
 
-- **Visibility:** Because the files generated by this program are supposed to be distributed to multiple people, I try to keep methods and classes as closed-off as possible. It's not much, but it's something. Therefor, unless your method or class *absolutely* must be public, keep it package private or make it private completely. I reserve the right to refactor any such classes or methods.  
+- **Translating:** If you wish to contribute to translating ServerPackCreator, have a look at the [resource bundles](https://github.com/Griefed/ServerPackCreator/tree/main/src/main/resources/de/griefed/resources/lang). Should you want to **add** a language to ServerPackCreator, add your locale in [LocalizationManager](https://github.com/Griefed/ServerPackCreator/blob/main/src/main/java/de/griefed/serverpackcreator/i18n/LocalizationManager.java), copy the [lang_en_us.properties](https://github.com/Griefed/ServerPackCreator/blob/main/src/main/resources/de/griefed/resources/lang/lang_en_us.properties) to lang_your_locale.properties and start translating!  
 
 ## Commits
 
diff --git a/README.md b/README.md
index a54f7b93a..f253af904 100644
--- a/README.md
+++ b/README.md
@@ -200,12 +200,4 @@ docker create \
 # Contributing
 
 If you're a Java Pro and your eyes bulge when looking at my code, by all means, you're welcome to help me improve it in any way, shape, or form.
-You're welcome to make [contributions](https://github.com/Griefed/ServerPackCreator/blob/main/CONTRIBUTING.md), or fork it and make your own version of it. It's LGPL-2.1 License for a reason. Do what you want with it.
-
-## Translating ServerPackCreator
-
-To add a new language to the app you need:
-
-Create resources/de/griefed/resources/lang/lang_language code.lang file.
-Add language code to the SUPPORTED_LANGUAGES list in Reference.
-Translate the app!
\ No newline at end of file
+You're welcome to make [contributions](https://github.com/Griefed/ServerPackCreator/blob/main/CONTRIBUTING.md), or fork it and make your own version of it. It's LGPL-2.1 License for a reason. Do what you want with it.
\ No newline at end of file
diff --git a/src/test/resources/fabric_tests/server_pack.zip b/src/test/resources/fabric_tests/server_pack.zip
deleted file mode 100644
index 067c3d76f899d289de92f8706d018008ae79ef46..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 148
zcmWIWW@Zs#;Nak3nCdh)hye)*0NJ_uDaA1*sl_EghF(@;5i>)8H#-MN5ffBpfHxzP
f2m`7KFgcJ3r~uu(0B=?{kP1d1v;)!(APxfnA`%oN

diff --git a/src/test/resources/fabric_tests/server_pack/mods/testmod.jar b/src/test/resources/fabric_tests/server_pack/mods/testmod.jar
deleted file mode 100644
index e69de29bb..000000000
diff --git a/src/test/resources/forge_tests/server_pack.zip b/src/test/resources/forge_tests/server_pack.zip
index 79933a2500c90e22474ca1a4073a6d5a130d06bc..67e2c55730c7e43cd126257d3e8e4225ca41c77c 100644
GIT binary patch
literal 5418
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%0D%7jWvNds

delta 32
hcmZ3bHG_4-ZN|x~g;$EOvM~Sw6A-Qh(l;4FJOGqS2A%)_

diff --git a/src/test/resources/testresources/server_pack.zip b/src/test/resources/testresources/server_pack.zip
index 79933a2500c90e22474ca1a4073a6d5a130d06bc..67e2c55730c7e43cd126257d3e8e4225ca41c77c 100644
GIT binary patch
literal 5418
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%0D%7jWvNds

delta 32
hcmZ3bHG_4-ZN|x~g;$EOvM~Sw6A-Qh(l;4FJOGqS2A%)_

-- 
GitLab


From 3e2571c1d862c8c314efbe68d0968ca9e7506133 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Thu, 29 Apr 2021 10:31:08 +0200
Subject: [PATCH 05/91] refactor(DI): Include Minecraft version if modloader is
 Forge so Minecraft server jar is always deleted

---
 .../serverpackcreator/CreateServerPack.java   | 15 ++++++++-----
 .../CreateServerPackTest.java                 | 22 ++++++++++++-------
 2 files changed, 23 insertions(+), 14 deletions(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java b/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
index 110e922d5..e52ad0214 100644
--- a/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
+++ b/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
@@ -111,7 +111,7 @@ public class CreateServerPack {
                 appLogger.info(localizationManager.getLocalizedString("handler.log.info.runincli.properties"));
             }
             if (configCheck.getIncludeZipCreation()) {
-                zipBuilder(configCheck.getModpackDir(), configCheck.getModLoader(), configCheck.getIncludeServerInstallation());
+                zipBuilder(configCheck.getModpackDir(), configCheck.getModLoader(), configCheck.getIncludeServerInstallation(), configCheck.getMinecraftVersion());
             } else {
                 appLogger.info(localizationManager.getLocalizedString("handler.log.info.runincli.zip"));
             }
@@ -450,7 +450,8 @@ public class CreateServerPack {
                 forgeInstaller,
                 modLoader,
                 modpackDir,
-                minecraftVersion, modLoaderVersion);
+                minecraftVersion,
+                modLoaderVersion);
 
     }
     /** Create a zip-archive of the serverpack, excluding Mojang's minecraft_server.jar.
@@ -458,8 +459,9 @@ public class CreateServerPack {
      * @param modpackDir String. The directory where the zip-archive will be created and saved in.
      * @param modLoader String. Determines the name of Minecraft#s server jar which will be deleted from the zip-archive.
      * @param includeServerInstallation Boolean. Determines whether the Minecraft server jar needs to be deleted from the zip-archive.
+     * @param minecraftVersion String. The Minecraft version of which to delete the server jar. Used if modloader is Forge.
      */
-    void zipBuilder(String modpackDir, String modLoader, Boolean includeServerInstallation) {
+    void zipBuilder(String modpackDir, String modLoader, Boolean includeServerInstallation, String minecraftVersion) {
         final Path sourceDir = Paths.get(String.format("%s/server_pack", modpackDir));
         String zipFileName = sourceDir.toString().concat(".zip");
         appLogger.info(localizationManager.getLocalizedString("serversetup.log.info.zipbuilder.enter"));
@@ -485,7 +487,7 @@ public class CreateServerPack {
             appLogger.error(localizationManager.getLocalizedString("serversetup.log.error.zipbuilder.create"), ex);
         }
         if (includeServerInstallation) {
-            deleteMinecraftJar(modLoader, modpackDir);
+            deleteMinecraftJar(modLoader, modpackDir, minecraftVersion);
             appLogger.warn(localizationManager.getLocalizedString("serversetup.log.warn.zipbuilder.minecraftjar1"));
             appLogger.warn(localizationManager.getLocalizedString("serversetup.log.warn.zipbuilder.minecraftjar2"));
             appLogger.warn(localizationManager.getLocalizedString("serversetup.log.warn.zipbuilder.minecraftjar3"));
@@ -729,8 +731,9 @@ public class CreateServerPack {
      * With help from https://stackoverflow.com/questions/5244963/delete-files-from-a-zip-archive-without-decompressing-in-java-or-maybe-python and https://bugs.openjdk.java.net/browse/JDK-8186227
      * @param modLoader String. Determines the name of the file to delete.
      * @param modpackDir String. /server_pack The directory in which the file will be deleted.
+     * @param minecraftVersion String. The Minecraft version of which to delete the server jar. Used if modloader is Forge.
      */
-    void deleteMinecraftJar(String modLoader, String modpackDir) {
+    void deleteMinecraftJar(String modLoader, String modpackDir, String minecraftVersion) {
         if (modLoader.equalsIgnoreCase("Forge")) {
             appLogger.info(localizationManager.getLocalizedString("serverutilities.log.info.deleteminecraftjar.enter"));
 
@@ -742,7 +745,7 @@ public class CreateServerPack {
             URI zipUri = URI.create("jar:" + serverpackZip.toUri());
 
             try (FileSystem zipfs = FileSystems.newFileSystem(zipUri, zip_properties)) {
-                Path pathInZipfile = zipfs.getPath("minecraft_server.1.16.5.jar");
+                Path pathInZipfile = zipfs.getPath(String.format("minecraft_server.%s.jar", minecraftVersion));
                 Files.delete(pathInZipfile);
                 appLogger.info(localizationManager.getLocalizedString("serverutilities.log.info.deleteminecraftjar.success"));
             } catch (IOException ex) {
diff --git a/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java b/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
index e7bf95237..bbbda042b 100644
--- a/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
+++ b/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
@@ -300,22 +300,26 @@ class CreateServerPackTest {
     }
 
     @Test
-    void testZipBuilderFabric() {
+    void testZipBuilderFabric() throws IOException {
         //TODO: Figure out how to run this test on GitHub Runners
         if (!new File("/home/runner").isDirectory()) {
+            Files.copy(Paths.get("./src/test/resources/testresources/server_pack.zip"), Paths.get("./src/test/resources/fabric_tests/server_pack.zip"), REPLACE_EXISTING);
+            String minecraftVersion = "1.16.5";
             String modLoader = "Fabric";
-            String modpackDir = "./src/test/resources/fabric_tests";
-            createServerPack.zipBuilder(modpackDir, modLoader, Boolean.TRUE);
+            String modpackDir = "src/test/resources/fabric_tests";
+            createServerPack.zipBuilder(modpackDir, modLoader, Boolean.TRUE, minecraftVersion);
         }
     }
 
     @Test
-    void testZipBuilderForge() {
+    void testZipBuilderForge() throws IOException {
         //TODO: Figure out how to run this test on GitHub Runners
         if (!new File("/home/runner").isDirectory()) {
+            Files.copy(Paths.get("./src/test/resources/testresources/server_pack.zip"), Paths.get("./src/test/resources/forge_tests/server_pack.zip"), REPLACE_EXISTING);
+            String minecraftVersion = "1.16.5";
             String modLoader = "Forge";
             String modpackDir = "./src/test/resources/forge_tests";
-            createServerPack.zipBuilder(modpackDir, modLoader, Boolean.TRUE);
+            createServerPack.zipBuilder(modpackDir, modLoader, Boolean.TRUE, minecraftVersion);
         }
     }
 
@@ -383,17 +387,19 @@ class CreateServerPackTest {
     @Test
     void testDeleteMinecraftJarFabric() throws IOException {
         Files.copy(Paths.get("./src/test/resources/testresources/server_pack.zip"), Paths.get("./src/test/resources/fabric_tests/server_pack.zip"), REPLACE_EXISTING);
+        String minecraftVersion = "1.16.5";
         String modLoader = "Fabric";
-        String modpackDir = "./src/test/resources/forge_tests";
-        createServerPack.deleteMinecraftJar(modLoader, modpackDir);
+        String modpackDir = "./src/test/resources/fabric_tests";
+        createServerPack.deleteMinecraftJar(modLoader, modpackDir, minecraftVersion);
     }
 
     @Test
     void testDeleteMinecraftJarForge() throws IOException {
         Files.copy(Paths.get("./src/test/resources/testresources/server_pack.zip"), Paths.get("./src/test/resources/forge_tests/server_pack.zip"), REPLACE_EXISTING);
+        String minecraftVersion = "1.16.5";
         String modLoader = "Forge";
         String modpackDir = "./src/test/resources/forge_tests";
-        createServerPack.deleteMinecraftJar(modLoader, modpackDir);
+        createServerPack.deleteMinecraftJar(modLoader, modpackDir, minecraftVersion);
     }
 
     @Test
-- 
GitLab


From c6dbf8c2455c50315f3d260b611a0c6a5b78a253 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Thu, 29 Apr 2021 10:31:25 +0200
Subject: [PATCH 06/91] refactor(DI): Make logger static again (whoops)

---
 src/main/java/de/griefed/serverpackcreator/FilesSetup.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/FilesSetup.java b/src/main/java/de/griefed/serverpackcreator/FilesSetup.java
index 66c0e46c6..69b511d5f 100644
--- a/src/main/java/de/griefed/serverpackcreator/FilesSetup.java
+++ b/src/main/java/de/griefed/serverpackcreator/FilesSetup.java
@@ -9,7 +9,7 @@ import java.nio.file.Paths;
 
 public class FilesSetup {
 
-    private final Logger appLogger = LogManager.getLogger(FilesSetup.class);
+    private static final Logger appLogger = LogManager.getLogger(FilesSetup.class);
 
     private final File configFile = new File("serverpackcreator.conf");
     private final File oldConfigFile     = new File("creator.conf");
-- 
GitLab


From 09ab7850a2814ace67c69da71fa9ceb00f07a2c8 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Thu, 29 Apr 2021 12:31:40 +0200
Subject: [PATCH 07/91] refactor(DI): Update docs

---
 docs/allclasses-frame.html                    |   31 +-
 docs/allclasses-noframe.html                  |   31 +-
 docs/constant-values.html                     |   60 +-
 .../griefed/serverpackcreator/CLISetup.html   |  369 ----
 .../serverpackcreator/ConfigCheck.html        |  744 --------
 .../serverpackcreator/Configuration.html      | 1598 +++++++++++++++++
 .../griefed/serverpackcreator/CopyFiles.html  |  431 -----
 .../serverpackcreator/CreateServerPack.html   |  962 ++++++++++
 .../griefed/serverpackcreator/FilesSetup.html |  340 ++--
 .../de/griefed/serverpackcreator/Handler.html |  331 ----
 docs/de/griefed/serverpackcreator/Main.html   |   12 +-
 .../griefed/serverpackcreator/Reference.html  | 1424 ---------------
 .../serverpackcreator/ServerSetup.html        |  363 ----
 .../serverpackcreator/ServerUtilities.html    |  540 ------
 ...teModpack.html => CurseCreateModpack.html} |   81 +-
 .../{Files.html => CurseFiles.html}           |   48 +-
 .../{Minecraft.html => CurseMinecraft.html}   |   58 +-
 .../{ModLoaders.html => CurseModLoaders.html} |   42 +-
 .../{Modpack.html => CurseModpack.html}       |   99 +-
 .../{Splines.html => CurseSplines.html}       |   68 +-
 .../curseforgemodpack/package-frame.html      |   12 +-
 .../curseforgemodpack/package-summary.html    |   12 +-
 .../curseforgemodpack/package-tree.html       |   12 +-
 .../gui/{About.html => AboutTab.html}         |   67 +-
 .../gui/{TabbedPane.html => CreateGui.html}   |   78 +-
 ...rverPack.html => CreateServerPackTab.html} |  105 +-
 ...Log.html => ModloaderInstallerLogTab.html} |   78 +-
 ...rLog.html => ServerPackCreatorLogTab.html} |   78 +-
 .../serverpackcreator/gui/package-frame.html  |   10 +-
 .../gui/package-summary.html                  |   10 +-
 .../serverpackcreator/gui/package-tree.html   |   10 +-
 .../i18n/LocalizationManager.html             |  176 +-
 .../serverpackcreator/i18n/package-tree.html  |    4 -
 .../serverpackcreator/package-frame.html      |    9 +-
 .../serverpackcreator/package-summary.html    |   24 +-
 .../serverpackcreator/package-tree.html       |    9 +-
 docs/index-all.html                           |  592 +++---
 docs/overview-tree.html                       |   36 +-
 docs/serialized-form.html                     |   62 +-
 .../{ConfigCheck.java => Configuration.java}  |    6 +-
 .../serverpackcreator/CreateServerPack.java   |   36 +-
 .../de/griefed/serverpackcreator/Main.java    |   12 +-
 .../serverpackcreator/gui/CreateGui.java      |   14 +-
 .../gui/CreateServerPackTab.java              |   52 +-
 .../serverpackcreator/ConfigCheckTest.java    |    5 +-
 .../CreateServerPackTest.java                 |    4 +-
 .../serverpackcreator/FilesSetupTest.java     |    5 +-
 47 files changed, 3883 insertions(+), 5267 deletions(-)
 delete mode 100644 docs/de/griefed/serverpackcreator/CLISetup.html
 delete mode 100644 docs/de/griefed/serverpackcreator/ConfigCheck.html
 create mode 100644 docs/de/griefed/serverpackcreator/Configuration.html
 delete mode 100644 docs/de/griefed/serverpackcreator/CopyFiles.html
 create mode 100644 docs/de/griefed/serverpackcreator/CreateServerPack.html
 delete mode 100644 docs/de/griefed/serverpackcreator/Handler.html
 delete mode 100644 docs/de/griefed/serverpackcreator/Reference.html
 delete mode 100644 docs/de/griefed/serverpackcreator/ServerSetup.html
 delete mode 100644 docs/de/griefed/serverpackcreator/ServerUtilities.html
 rename docs/de/griefed/serverpackcreator/curseforgemodpack/{CreateModpack.html => CurseCreateModpack.html} (78%)
 rename docs/de/griefed/serverpackcreator/curseforgemodpack/{Files.html => CurseFiles.html} (81%)
 rename docs/de/griefed/serverpackcreator/curseforgemodpack/{Minecraft.html => CurseMinecraft.html} (75%)
 rename docs/de/griefed/serverpackcreator/curseforgemodpack/{ModLoaders.html => CurseModLoaders.html} (82%)
 rename docs/de/griefed/serverpackcreator/curseforgemodpack/{Modpack.html => CurseModpack.html} (70%)
 rename docs/de/griefed/serverpackcreator/curseforgemodpack/{Splines.html => CurseSplines.html} (76%)
 rename docs/de/griefed/serverpackcreator/gui/{About.html => AboutTab.html} (83%)
 rename docs/de/griefed/serverpackcreator/gui/{TabbedPane.html => CreateGui.html} (81%)
 rename docs/de/griefed/serverpackcreator/gui/{CreateServerPack.html => CreateServerPackTab.html} (73%)
 rename docs/de/griefed/serverpackcreator/gui/{ModloaderInstallerLog.html => ModloaderInstallerLogTab.html} (78%)
 rename docs/de/griefed/serverpackcreator/gui/{ServerPackCreatorLog.html => ServerPackCreatorLogTab.html} (78%)
 rename src/main/java/de/griefed/serverpackcreator/{ConfigCheck.java => Configuration.java} (99%)

diff --git a/docs/allclasses-frame.html b/docs/allclasses-frame.html
index 7b6e1fd9f..9386895c2 100644
--- a/docs/allclasses-frame.html
+++ b/docs/allclasses-frame.html
@@ -11,28 +11,23 @@
 <h1 class="bar">All&nbsp;Classes</h1>
 <div class="indexContainer">
 <ul>
-<li><a href="de/griefed/serverpackcreator/gui/About.html" title="class in de.griefed.serverpackcreator.gui" target="classFrame">About</a></li>
-<li><a href="de/griefed/serverpackcreator/CLISetup.html" title="class in de.griefed.serverpackcreator" target="classFrame">CLISetup</a></li>
-<li><a href="de/griefed/serverpackcreator/ConfigCheck.html" title="class in de.griefed.serverpackcreator" target="classFrame">ConfigCheck</a></li>
-<li><a href="de/griefed/serverpackcreator/CopyFiles.html" title="class in de.griefed.serverpackcreator" target="classFrame">CopyFiles</a></li>
-<li><a href="de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack" target="classFrame">CreateModpack</a></li>
-<li><a href="de/griefed/serverpackcreator/gui/CreateServerPack.html" title="class in de.griefed.serverpackcreator.gui" target="classFrame">CreateServerPack</a></li>
-<li><a href="de/griefed/serverpackcreator/curseforgemodpack/Files.html" title="class in de.griefed.serverpackcreator.curseforgemodpack" target="classFrame">Files</a></li>
+<li><a href="de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui" target="classFrame">AboutTab</a></li>
+<li><a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator" target="classFrame">Configuration</a></li>
+<li><a href="de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui" target="classFrame">CreateGui</a></li>
+<li><a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator" target="classFrame">CreateServerPack</a></li>
+<li><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui" target="classFrame">CreateServerPackTab</a></li>
+<li><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack" target="classFrame">CurseCreateModpack</a></li>
+<li><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html" title="class in de.griefed.serverpackcreator.curseforgemodpack" target="classFrame">CurseFiles</a></li>
+<li><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack" target="classFrame">CurseMinecraft</a></li>
+<li><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack" target="classFrame">CurseModLoaders</a></li>
+<li><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack" target="classFrame">CurseModpack</a></li>
+<li><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html" title="class in de.griefed.serverpackcreator.curseforgemodpack" target="classFrame">CurseSplines</a></li>
 <li><a href="de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator" target="classFrame">FilesSetup</a></li>
-<li><a href="de/griefed/serverpackcreator/Handler.html" title="class in de.griefed.serverpackcreator" target="classFrame">Handler</a></li>
 <li><a href="de/griefed/serverpackcreator/i18n/IncorrectLanguageException.html" title="class in de.griefed.serverpackcreator.i18n" target="classFrame">IncorrectLanguageException</a></li>
 <li><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n" target="classFrame">LocalizationManager</a></li>
 <li><a href="de/griefed/serverpackcreator/Main.html" title="class in de.griefed.serverpackcreator" target="classFrame">Main</a></li>
-<li><a href="de/griefed/serverpackcreator/curseforgemodpack/Minecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack" target="classFrame">Minecraft</a></li>
-<li><a href="de/griefed/serverpackcreator/gui/ModloaderInstallerLog.html" title="class in de.griefed.serverpackcreator.gui" target="classFrame">ModloaderInstallerLog</a></li>
-<li><a href="de/griefed/serverpackcreator/curseforgemodpack/ModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack" target="classFrame">ModLoaders</a></li>
-<li><a href="de/griefed/serverpackcreator/curseforgemodpack/Modpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack" target="classFrame">Modpack</a></li>
-<li><a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator" target="classFrame">Reference</a></li>
-<li><a href="de/griefed/serverpackcreator/gui/ServerPackCreatorLog.html" title="class in de.griefed.serverpackcreator.gui" target="classFrame">ServerPackCreatorLog</a></li>
-<li><a href="de/griefed/serverpackcreator/ServerSetup.html" title="class in de.griefed.serverpackcreator" target="classFrame">ServerSetup</a></li>
-<li><a href="de/griefed/serverpackcreator/ServerUtilities.html" title="class in de.griefed.serverpackcreator" target="classFrame">ServerUtilities</a></li>
-<li><a href="de/griefed/serverpackcreator/curseforgemodpack/Splines.html" title="class in de.griefed.serverpackcreator.curseforgemodpack" target="classFrame">Splines</a></li>
-<li><a href="de/griefed/serverpackcreator/gui/TabbedPane.html" title="class in de.griefed.serverpackcreator.gui" target="classFrame">TabbedPane</a></li>
+<li><a href="de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html" title="class in de.griefed.serverpackcreator.gui" target="classFrame">ModloaderInstallerLogTab</a></li>
+<li><a href="de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html" title="class in de.griefed.serverpackcreator.gui" target="classFrame">ServerPackCreatorLogTab</a></li>
 </ul>
 </div>
 </body>
diff --git a/docs/allclasses-noframe.html b/docs/allclasses-noframe.html
index 8cd96da41..ea3196e74 100644
--- a/docs/allclasses-noframe.html
+++ b/docs/allclasses-noframe.html
@@ -11,28 +11,23 @@
 <h1 class="bar">All&nbsp;Classes</h1>
 <div class="indexContainer">
 <ul>
-<li><a href="de/griefed/serverpackcreator/gui/About.html" title="class in de.griefed.serverpackcreator.gui">About</a></li>
-<li><a href="de/griefed/serverpackcreator/CLISetup.html" title="class in de.griefed.serverpackcreator">CLISetup</a></li>
-<li><a href="de/griefed/serverpackcreator/ConfigCheck.html" title="class in de.griefed.serverpackcreator">ConfigCheck</a></li>
-<li><a href="de/griefed/serverpackcreator/CopyFiles.html" title="class in de.griefed.serverpackcreator">CopyFiles</a></li>
-<li><a href="de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CreateModpack</a></li>
-<li><a href="de/griefed/serverpackcreator/gui/CreateServerPack.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPack</a></li>
-<li><a href="de/griefed/serverpackcreator/curseforgemodpack/Files.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Files</a></li>
+<li><a href="de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui">AboutTab</a></li>
+<li><a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></li>
+<li><a href="de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui">CreateGui</a></li>
+<li><a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></li>
+<li><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></li>
+<li><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseCreateModpack</a></li>
+<li><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseFiles</a></li>
+<li><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseMinecraft</a></li>
+<li><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModLoaders</a></li>
+<li><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModpack</a></li>
+<li><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseSplines</a></li>
 <li><a href="de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator">FilesSetup</a></li>
-<li><a href="de/griefed/serverpackcreator/Handler.html" title="class in de.griefed.serverpackcreator">Handler</a></li>
 <li><a href="de/griefed/serverpackcreator/i18n/IncorrectLanguageException.html" title="class in de.griefed.serverpackcreator.i18n">IncorrectLanguageException</a></li>
 <li><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></li>
 <li><a href="de/griefed/serverpackcreator/Main.html" title="class in de.griefed.serverpackcreator">Main</a></li>
-<li><a href="de/griefed/serverpackcreator/curseforgemodpack/Minecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Minecraft</a></li>
-<li><a href="de/griefed/serverpackcreator/gui/ModloaderInstallerLog.html" title="class in de.griefed.serverpackcreator.gui">ModloaderInstallerLog</a></li>
-<li><a href="de/griefed/serverpackcreator/curseforgemodpack/ModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">ModLoaders</a></li>
-<li><a href="de/griefed/serverpackcreator/curseforgemodpack/Modpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Modpack</a></li>
-<li><a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></li>
-<li><a href="de/griefed/serverpackcreator/gui/ServerPackCreatorLog.html" title="class in de.griefed.serverpackcreator.gui">ServerPackCreatorLog</a></li>
-<li><a href="de/griefed/serverpackcreator/ServerSetup.html" title="class in de.griefed.serverpackcreator">ServerSetup</a></li>
-<li><a href="de/griefed/serverpackcreator/ServerUtilities.html" title="class in de.griefed.serverpackcreator">ServerUtilities</a></li>
-<li><a href="de/griefed/serverpackcreator/curseforgemodpack/Splines.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Splines</a></li>
-<li><a href="de/griefed/serverpackcreator/gui/TabbedPane.html" title="class in de.griefed.serverpackcreator.gui">TabbedPane</a></li>
+<li><a href="de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html" title="class in de.griefed.serverpackcreator.gui">ModloaderInstallerLogTab</a></li>
+<li><a href="de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html" title="class in de.griefed.serverpackcreator.gui">ServerPackCreatorLogTab</a></li>
 </ul>
 </div>
 </body>
diff --git a/docs/constant-values.html b/docs/constant-values.html
index af6c06b9b..c98ea627c 100644
--- a/docs/constant-values.html
+++ b/docs/constant-values.html
@@ -81,62 +81,6 @@
 <ul class="blockList">
 <li class="blockList">
 <table class="constantsSummary" border="0" cellpadding="3" cellspacing="0" summary="Constant Field Values table, listing constant fields, and values">
-<caption><span>de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th scope="col">Constant Field</th>
-<th class="colLast" scope="col">Value</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><a name="de.griefed.serverpackcreator.Reference.CONFIG_GEN_ARGUMENT">
-<!--   -->
-</a><code>private&nbsp;static&nbsp;final&nbsp;java.lang.String</code></td>
-<td><code><a href="de/griefed/serverpackcreator/Reference.html#CONFIG_GEN_ARGUMENT">CONFIG_GEN_ARGUMENT</a></code></td>
-<td class="colLast"><code>"-cgen"</code></td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><a name="de.griefed.serverpackcreator.Reference.FABRIC_MANIFEST_URL">
-<!--   -->
-</a><code>private&nbsp;static&nbsp;final&nbsp;java.lang.String</code></td>
-<td><code><a href="de/griefed/serverpackcreator/Reference.html#FABRIC_MANIFEST_URL">FABRIC_MANIFEST_URL</a></code></td>
-<td class="colLast"><code>"https://maven.fabricmc.net/net/fabricmc/fabric-loader/maven-metadata.xml"</code></td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><a name="de.griefed.serverpackcreator.Reference.FORGE_MANIFEST_URL">
-<!--   -->
-</a><code>private&nbsp;static&nbsp;final&nbsp;java.lang.String</code></td>
-<td><code><a href="de/griefed/serverpackcreator/Reference.html#FORGE_MANIFEST_URL">FORGE_MANIFEST_URL</a></code></td>
-<td class="colLast"><code>"https://files.minecraftforge.net/net/minecraftforge/forge/maven-metadata.json"</code></td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><a name="de.griefed.serverpackcreator.Reference.LANG_ARGUMENT">
-<!--   -->
-</a><code>private&nbsp;static&nbsp;final&nbsp;java.lang.String</code></td>
-<td><code><a href="de/griefed/serverpackcreator/Reference.html#LANG_ARGUMENT">LANG_ARGUMENT</a></code></td>
-<td class="colLast"><code>"-lang"</code></td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><a name="de.griefed.serverpackcreator.Reference.MINECRAFT_MANIFEST_URL">
-<!--   -->
-</a><code>private&nbsp;static&nbsp;final&nbsp;java.lang.String</code></td>
-<td><code><a href="de/griefed/serverpackcreator/Reference.html#MINECRAFT_MANIFEST_URL">MINECRAFT_MANIFEST_URL</a></code></td>
-<td class="colLast"><code>"https://launchermeta.mojang.com/mc/game/version_manifest.json"</code></td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><a name="de.griefed.serverpackcreator.Reference.RUN_CLI_ARGUMENT">
-<!--   -->
-</a><code>private&nbsp;static&nbsp;final&nbsp;java.lang.String</code></td>
-<td><code><a href="de/griefed/serverpackcreator/Reference.html#RUN_CLI_ARGUMENT">RUN_CLI_ARGUMENT</a></code></td>
-<td class="colLast"><code>"-cli"</code></td>
-</tr>
-</tbody>
-</table>
-</li>
-</ul>
-<ul class="blockList">
-<li class="blockList">
-<table class="constantsSummary" border="0" cellpadding="3" cellspacing="0" summary="Constant Field Values table, listing constant fields, and values">
 <caption><span>de.griefed.serverpackcreator.i18n.<a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></span><span class="tabEnd">&nbsp;</span></caption>
 <tr>
 <th class="colFirst" scope="col">Modifier and Type</th>
@@ -147,14 +91,14 @@
 <tr class="altColor">
 <td class="colFirst"><a name="de.griefed.serverpackcreator.i18n.LocalizationManager.COUNTRY_MAP_PATH">
 <!--   -->
-</a><code>private&nbsp;static&nbsp;final&nbsp;java.lang.String</code></td>
+</a><code>private&nbsp;final&nbsp;java.lang.String</code></td>
 <td><code><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#COUNTRY_MAP_PATH">COUNTRY_MAP_PATH</a></code></td>
 <td class="colLast"><code>"country"</code></td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a name="de.griefed.serverpackcreator.i18n.LocalizationManager.LANGUAGE_MAP_PATH">
 <!--   -->
-</a><code>private&nbsp;static&nbsp;final&nbsp;java.lang.String</code></td>
+</a><code>private&nbsp;final&nbsp;java.lang.String</code></td>
 <td><code><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#LANGUAGE_MAP_PATH">LANGUAGE_MAP_PATH</a></code></td>
 <td class="colLast"><code>"language"</code></td>
 </tr>
diff --git a/docs/de/griefed/serverpackcreator/CLISetup.html b/docs/de/griefed/serverpackcreator/CLISetup.html
deleted file mode 100644
index 23358fc90..000000000
--- a/docs/de/griefed/serverpackcreator/CLISetup.html
+++ /dev/null
@@ -1,369 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="de">
-<head>
-<!-- Generated by javadoc -->
-<title>CLISetup (serverpackcreator API)</title>
-<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
-    try {
-        if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="CLISetup (serverpackcreator API)";
-        }
-    }
-    catch(err) {
-    }
-//-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10};
-var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
-var altColor = "altColor";
-var rowColor = "rowColor";
-var tableTab = "tableTab";
-var activeTableTab = "activeTableTab";
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../index-all.html">Index</a></li>
-<li><a href="../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev&nbsp;Class</li>
-<li><a href="../../../de/griefed/serverpackcreator/ConfigCheck.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../index.html?de/griefed/serverpackcreator/CLISetup.html" target="_top">Frames</a></li>
-<li><a href="CLISetup.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<!-- ======== START OF CLASS DATA ======== -->
-<div class="header">
-<div class="subTitle">de.griefed.serverpackcreator</div>
-<h2 title="Class CLISetup" class="title">Class CLISetup</h2>
-</div>
-<div class="contentContainer">
-<ul class="inheritance">
-<li>java.lang.Object</li>
-<li>
-<ul class="inheritance">
-<li>de.griefed.serverpackcreator.CLISetup</li>
-</ul>
-</li>
-</ul>
-<div class="description">
-<ul class="blockList">
-<li class="blockList">
-<hr>
-<br>
-<pre>public class <span class="typeNameLabel">CLISetup</span>
-extends java.lang.Object</pre>
-</li>
-</ul>
-</div>
-<div class="summary">
-<ul class="blockList">
-<li class="blockList">
-<!-- =========== FIELD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field.summary">
-<!--   -->
-</a>
-<h3>Field Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
-<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Field and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static org.apache.logging.log4j.Logger</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CLISetup.html#appLogger">appLogger</a></span></code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.summary">
-<!--   -->
-</a>
-<h3>Constructor Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
-<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colOne" scope="col">Constructor and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CLISetup.html#CLISetup--">CLISetup</a></span>()</code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ========== METHOD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.summary">
-<!--   -->
-</a>
-<h3>Method Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
-<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tr id="i0" class="altColor">
-<td class="colFirst"><code>java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CLISetup.html#buildString-java.lang.String...-">buildString</a></span>(java.lang.String...&nbsp;args)</code>
-<div class="block">Converts list of strings into concatenated string.</div>
-</td>
-</tr>
-<tr id="i1" class="rowColor">
-<td class="colFirst"><code>private boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CLISetup.html#readBoolean--">readBoolean</a></span>()</code>
-<div class="block">A helper method for config setup.</div>
-</td>
-</tr>
-<tr id="i2" class="altColor">
-<td class="colFirst"><code>private java.util.List&lt;java.lang.String&gt;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CLISetup.html#readStringArray--">readStringArray</a></span>()</code>
-<div class="block">A helper method for config setup.</div>
-</td>
-</tr>
-<tr id="i3" class="rowColor">
-<td class="colFirst"><code>(package private) void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CLISetup.html#setup--">setup</a></span>()</code>
-<div class="block">CLI for config file generation.</div>
-</td>
-</tr>
-</table>
-<ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
-<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-<div class="details">
-<ul class="blockList">
-<li class="blockList">
-<!-- ============ FIELD DETAIL =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field.detail">
-<!--   -->
-</a>
-<h3>Field Detail</h3>
-<a name="appLogger">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>appLogger</h4>
-<pre>private static final&nbsp;org.apache.logging.log4j.Logger appLogger</pre>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.detail">
-<!--   -->
-</a>
-<h3>Constructor Detail</h3>
-<a name="CLISetup--">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>CLISetup</h4>
-<pre>public&nbsp;CLISetup()</pre>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ============ METHOD DETAIL ========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.detail">
-<!--   -->
-</a>
-<h3>Method Detail</h3>
-<a name="setup--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>setup</h4>
-<pre>void&nbsp;setup()</pre>
-<div class="block">CLI for config file generation. Prompts user to enter config file values and then generates a config file with values entered by user.</div>
-</li>
-</ul>
-<a name="readStringArray--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>readStringArray</h4>
-<pre>private&nbsp;java.util.List&lt;java.lang.String&gt;&nbsp;readStringArray()</pre>
-<div class="block">A helper method for config setup. Prompts user to enter the values that will be stored in arrays in config.</div>
-<dl>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>String List. Returns list with user input values that will be stored in config.</dd>
-</dl>
-</li>
-</ul>
-<a name="buildString-java.lang.String...-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>buildString</h4>
-<pre>public&nbsp;java.lang.String&nbsp;buildString(java.lang.String...&nbsp;args)</pre>
-<div class="block">Converts list of strings into concatenated string.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>args</code> - Strings that will be concatenated into one string</dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>String. Returns concatenated string that contains all provided values.</dd>
-</dl>
-</li>
-</ul>
-<a name="readBoolean--">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>readBoolean</h4>
-<pre>private&nbsp;boolean&nbsp;readBoolean()</pre>
-<div class="block">A helper method for config setup. Prompts user to enter boolean values that will be stored in config and checks entered values to prevent storing non-boolean values in boolean variables.</div>
-<dl>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>Boolean. Converts to boolean and returns value entered by user that will be stored in config.</dd>
-</dl>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-<!-- ========= END OF CLASS DATA ========= -->
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../index-all.html">Index</a></li>
-<li><a href="../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li>Prev&nbsp;Class</li>
-<li><a href="../../../de/griefed/serverpackcreator/ConfigCheck.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../index.html?de/griefed/serverpackcreator/CLISetup.html" target="_top">Frames</a></li>
-<li><a href="CLISetup.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-</body>
-</html>
diff --git a/docs/de/griefed/serverpackcreator/ConfigCheck.html b/docs/de/griefed/serverpackcreator/ConfigCheck.html
deleted file mode 100644
index 26624ccde..000000000
--- a/docs/de/griefed/serverpackcreator/ConfigCheck.html
+++ /dev/null
@@ -1,744 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="de">
-<head>
-<!-- Generated by javadoc -->
-<title>ConfigCheck (serverpackcreator API)</title>
-<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
-    try {
-        if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="ConfigCheck (serverpackcreator API)";
-        }
-    }
-    catch(err) {
-    }
-//-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10};
-var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
-var altColor = "altColor";
-var rowColor = "rowColor";
-var tableTab = "tableTab";
-var activeTableTab = "activeTableTab";
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../index-all.html">Index</a></li>
-<li><a href="../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../de/griefed/serverpackcreator/CLISetup.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../de/griefed/serverpackcreator/CopyFiles.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../index.html?de/griefed/serverpackcreator/ConfigCheck.html" target="_top">Frames</a></li>
-<li><a href="ConfigCheck.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<!-- ======== START OF CLASS DATA ======== -->
-<div class="header">
-<div class="subTitle">de.griefed.serverpackcreator</div>
-<h2 title="Class ConfigCheck" class="title">Class ConfigCheck</h2>
-</div>
-<div class="contentContainer">
-<ul class="inheritance">
-<li>java.lang.Object</li>
-<li>
-<ul class="inheritance">
-<li>de.griefed.serverpackcreator.ConfigCheck</li>
-</ul>
-</li>
-</ul>
-<div class="description">
-<ul class="blockList">
-<li class="blockList">
-<hr>
-<br>
-<pre>public class <span class="typeNameLabel">ConfigCheck</span>
-extends java.lang.Object</pre>
-</li>
-</ul>
-</div>
-<div class="summary">
-<ul class="blockList">
-<li class="blockList">
-<!-- =========== FIELD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field.summary">
-<!--   -->
-</a>
-<h3>Field Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
-<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Field and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static org.apache.logging.log4j.Logger</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/ConfigCheck.html#appLogger">appLogger</a></span></code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.summary">
-<!--   -->
-</a>
-<h3>Constructor Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
-<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colOne" scope="col">Constructor and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/ConfigCheck.html#ConfigCheck--">ConfigCheck</a></span>()</code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ========== METHOD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.summary">
-<!--   -->
-</a>
-<h3>Method Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
-<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tr id="i0" class="altColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/ConfigCheck.html#checkConfigFile-java.io.File-">checkConfigFile</a></span>(java.io.File&nbsp;configFile)</code>
-<div class="block">Check the config file for configuration errors.</div>
-</td>
-</tr>
-<tr id="i1" class="rowColor">
-<td class="colFirst"><code>(package private) boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/ConfigCheck.html#checkCopyDirs-java.util.List-java.lang.String-">checkCopyDirs</a></span>(java.util.List&lt;java.lang.String&gt;&nbsp;copyDirs,
-             java.lang.String&nbsp;modpackDir)</code>
-<div class="block">Check whether the specified directories exist in the modpack directory.</div>
-</td>
-</tr>
-<tr id="i2" class="altColor">
-<td class="colFirst"><code>(package private) boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/ConfigCheck.html#checkCurseForge-java.lang.String-">checkCurseForge</a></span>(java.lang.String&nbsp;modpackDir)</code>
-<div class="block">Checks whether the modpackDir contains a valid projectID,fileID combination.</div>
-</td>
-</tr>
-<tr id="i3" class="rowColor">
-<td class="colFirst"><code>(package private) boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/ConfigCheck.html#checkJavaPath-java.lang.String-">checkJavaPath</a></span>(java.lang.String&nbsp;pathToJava)</code>
-<div class="block">Checks whether the correct path to the Java installation was set.</div>
-</td>
-</tr>
-<tr id="i4" class="altColor">
-<td class="colFirst"><code>(package private) boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/ConfigCheck.html#checkModloader-java.lang.String-">checkModloader</a></span>(java.lang.String&nbsp;modloader)</code>
-<div class="block">Checks whether Forge or Fabric were specified as modloader.</div>
-</td>
-</tr>
-<tr id="i5" class="rowColor">
-<td class="colFirst"><code>(package private) boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/ConfigCheck.html#checkModloaderVersion-java.lang.String-java.lang.String-">checkModloaderVersion</a></span>(java.lang.String&nbsp;modloader,
-                     java.lang.String&nbsp;modloaderVersion)</code>
-<div class="block">Determine whether to check for correct Forge or correct Fabric modloader version.</div>
-</td>
-</tr>
-<tr id="i6" class="altColor">
-<td class="colFirst"><code>(package private) boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/ConfigCheck.html#checkModpackDir-java.lang.String-">checkModpackDir</a></span>(java.lang.String&nbsp;modpackDir)</code>
-<div class="block">Check whether the specified modpack directory exists.</div>
-</td>
-</tr>
-<tr id="i7" class="rowColor">
-<td class="colFirst"><code>private boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/ConfigCheck.html#containsFabric-de.griefed.serverpackcreator.curseforgemodpack.Modpack-">containsFabric</a></span>(<a href="../../../de/griefed/serverpackcreator/curseforgemodpack/Modpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Modpack</a>&nbsp;modpack)</code>
-<div class="block">Checks for the Jumploader mod in the project list of the modpack.</div>
-</td>
-</tr>
-<tr id="i8" class="altColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/ConfigCheck.html#convertToBoolean-java.lang.String-">convertToBoolean</a></span>(java.lang.String&nbsp;stringBoolean)</code>
-<div class="block">Converts various strings to booleans.</div>
-</td>
-</tr>
-<tr id="i9" class="rowColor">
-<td class="colFirst"><code>(package private) java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/ConfigCheck.html#getJavaPath-java.lang.String-">getJavaPath</a></span>(java.lang.String&nbsp;enteredPath)</code>
-<div class="block">Automatically set Java path if none is specified</div>
-</td>
-</tr>
-<tr id="i10" class="altColor">
-<td class="colFirst"><code>private boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/ConfigCheck.html#isCurse--">isCurse</a></span>()</code>
-<div class="block">Checks whether the specified projectID,fileID combination is a valid CurseForge project and file and whether the resulting directory exists.</div>
-</td>
-</tr>
-<tr id="i11" class="rowColor">
-<td class="colFirst"><code>private boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/ConfigCheck.html#isDir-java.lang.String-">isDir</a></span>(java.lang.String&nbsp;modpackDir)</code>
-<div class="block">Checks whether the specified modpack exists.</div>
-</td>
-</tr>
-<tr id="i12" class="altColor">
-<td class="colFirst"><code>(package private) boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/ConfigCheck.html#isFabricVersionCorrect-java.lang.String-">isFabricVersionCorrect</a></span>(java.lang.String&nbsp;fabricVersion)</code>
-<div class="block">Check the specified Fabric version against Fabric's version manifest to validate the version.</div>
-</td>
-</tr>
-<tr id="i13" class="rowColor">
-<td class="colFirst"><code>(package private) boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/ConfigCheck.html#isForgeVersionCorrect-java.lang.String-">isForgeVersionCorrect</a></span>(java.lang.String&nbsp;forgeVersion)</code>
-<div class="block">Checks Forge version for errors (basically for its availability in Forge manifest)</div>
-</td>
-</tr>
-<tr id="i14" class="altColor">
-<td class="colFirst"><code>(package private) boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/ConfigCheck.html#isMinecraftVersionCorrect-java.lang.String-">isMinecraftVersionCorrect</a></span>(java.lang.String&nbsp;minecraftVersion)</code>
-<div class="block">Check the specified Minecraft version against Mojang's version manifest to validate the version.</div>
-</td>
-</tr>
-<tr id="i15" class="rowColor">
-<td class="colFirst"><code>private java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/ConfigCheck.html#latestFabricLoader-java.lang.String-">latestFabricLoader</a></span>(java.lang.String&nbsp;modpackDir)</code>
-<div class="block">Returns the latest installer version for the Fabric installer to be used in ServerSetup.installServer.</div>
-</td>
-</tr>
-<tr id="i16" class="altColor">
-<td class="colFirst"><code>(package private) void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/ConfigCheck.html#printConfig-java.lang.String-java.util.List-java.util.List-boolean-java.lang.String-java.lang.String-java.lang.String-java.lang.String-boolean-boolean-boolean-boolean-">printConfig</a></span>(java.lang.String&nbsp;modpackDirectory,
-           java.util.List&lt;java.lang.String&gt;&nbsp;clientsideMods,
-           java.util.List&lt;java.lang.String&gt;&nbsp;copyDirectories,
-           boolean&nbsp;installServer,
-           java.lang.String&nbsp;javaInstallPath,
-           java.lang.String&nbsp;minecraftVer,
-           java.lang.String&nbsp;modloader,
-           java.lang.String&nbsp;modloaderVersion,
-           boolean&nbsp;includeIcon,
-           boolean&nbsp;includeProperties,
-           boolean&nbsp;includeScripts,
-           boolean&nbsp;includeZip)</code>
-<div class="block">Prints the configuration.</div>
-</td>
-</tr>
-<tr id="i17" class="rowColor">
-<td class="colFirst"><code>(package private) java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/ConfigCheck.html#setModloader-java.lang.String-">setModloader</a></span>(java.lang.String&nbsp;modloader)</code>
-<div class="block">Standardize the specified modloader.</div>
-</td>
-</tr>
-<tr id="i18" class="altColor">
-<td class="colFirst"><code>private java.util.List&lt;java.lang.String&gt;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/ConfigCheck.html#suggestCopyDirs-java.lang.String-">suggestCopyDirs</a></span>(java.lang.String&nbsp;modpackDir)</code>
-<div class="block">Creates a list of suggested directories to include in server pack which is later on written to a new configuration file.</div>
-</td>
-</tr>
-</table>
-<ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
-<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-<div class="details">
-<ul class="blockList">
-<li class="blockList">
-<!-- ============ FIELD DETAIL =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field.detail">
-<!--   -->
-</a>
-<h3>Field Detail</h3>
-<a name="appLogger">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>appLogger</h4>
-<pre>private static final&nbsp;org.apache.logging.log4j.Logger appLogger</pre>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.detail">
-<!--   -->
-</a>
-<h3>Constructor Detail</h3>
-<a name="ConfigCheck--">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>ConfigCheck</h4>
-<pre>public&nbsp;ConfigCheck()</pre>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ============ METHOD DETAIL ========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.detail">
-<!--   -->
-</a>
-<h3>Method Detail</h3>
-<a name="checkConfigFile-java.io.File-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>checkConfigFile</h4>
-<pre>public&nbsp;boolean&nbsp;checkConfigFile(java.io.File&nbsp;configFile)</pre>
-<div class="block">Check the config file for configuration errors. If an error is found, the log file will tell the user where the error is, so they can fix their config.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>configFile</code> - The configuration file to check. Must be a valid configuration file for serverpackcreator to work.</dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>Return true if error is found in user's configuration. If an error is found, the application will exit in main.</dd>
-</dl>
-</li>
-</ul>
-<a name="isDir-java.lang.String-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>isDir</h4>
-<pre>private&nbsp;boolean&nbsp;isDir(java.lang.String&nbsp;modpackDir)</pre>
-<div class="block">Checks whether the specified modpack exists. If it does, the config file is checked for errors. Should any error be found, it will return true so the configCheck method informs the user about an invalid configuration.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modpackDir</code> - String. Should an existing modpack be specified, all configurations are read from local file and the server pack is created, if config is correct.</dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>Boolean. Returns true if an error is found during configuration check. False if the configuration is deemed valid.</dd>
-</dl>
-</li>
-</ul>
-<a name="isCurse--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>isCurse</h4>
-<pre>private&nbsp;boolean&nbsp;isCurse()</pre>
-<div class="block">Checks whether the specified projectID,fileID combination is a valid CurseForge project and file and whether the resulting directory exists. If the directory does not exist, make calls to other methods which create the modpack. Parses information gathered from the modpack to later replace the previous configuration file.</div>
-<dl>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>Boolean. Currently always returns true so serverpackcreator does not go straight into server pack creation after the creation of the specified modpack. Gives the user the chance to check their config before actually creating the server pack.</dd>
-</dl>
-</li>
-</ul>
-<a name="containsFabric-de.griefed.serverpackcreator.curseforgemodpack.Modpack-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>containsFabric</h4>
-<pre>private&nbsp;boolean&nbsp;containsFabric(<a href="../../../de/griefed/serverpackcreator/curseforgemodpack/Modpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Modpack</a>&nbsp;modpack)</pre>
-<div class="block">Checks for the Jumploader mod in the project list of the modpack. If Jumploader is found, the modloader in the configuration will be set to Fabric.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modpack</code> - Object. Contains information about our modpack. Used to get a list of all projects used in the modpack.</dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>Boolean. Returns true if Jumploader is found, false if not found.</dd>
-</dl>
-</li>
-</ul>
-<a name="suggestCopyDirs-java.lang.String-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>suggestCopyDirs</h4>
-<pre>private&nbsp;java.util.List&lt;java.lang.String&gt;&nbsp;suggestCopyDirs(java.lang.String&nbsp;modpackDir)</pre>
-<div class="block">Creates a list of suggested directories to include in server pack which is later on written to a new configuration file.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modpackDir</code> - String. The directory for which to gather a list of directories.</dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>List, String. Returns a list of directories inside the modpack, excluding well known client-side only directories which would not be needed by a server pack. If you have suggestions to this list, open an issue on https://github.com/Griefed/ServerPackCreator/issues</dd>
-</dl>
-</li>
-</ul>
-<a name="checkCurseForge-java.lang.String-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>checkCurseForge</h4>
-<pre>boolean&nbsp;checkCurseForge(java.lang.String&nbsp;modpackDir)</pre>
-<div class="block">Checks whether the modpackDir contains a valid projectID,fileID combination. ProjectIDs must be at least two digits long, fileIDs must be at least 5 digits long. Must be numbers separated by a ",".</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modpackDir</code> - String. The string which to check for a valid projectID,fileID combination.</dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>Boolean. Returns true if the combination is deemed valid, false if not.</dd>
-</dl>
-</li>
-</ul>
-<a name="convertToBoolean-java.lang.String-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>convertToBoolean</h4>
-<pre>public&nbsp;boolean&nbsp;convertToBoolean(java.lang.String&nbsp;stringBoolean)</pre>
-<div class="block">Converts various strings to booleans.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>stringBoolean</code> - String. The string which should be converted to boolean if it matches certain patterns.</dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>Boolean. Returns the corresponding boolean if match with pattern was found. If no match is found, assume and return false.</dd>
-</dl>
-</li>
-</ul>
-<a name="printConfig-java.lang.String-java.util.List-java.util.List-boolean-java.lang.String-java.lang.String-java.lang.String-java.lang.String-boolean-boolean-boolean-boolean-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>printConfig</h4>
-<pre>void&nbsp;printConfig(java.lang.String&nbsp;modpackDirectory,
-                 java.util.List&lt;java.lang.String&gt;&nbsp;clientsideMods,
-                 java.util.List&lt;java.lang.String&gt;&nbsp;copyDirectories,
-                 boolean&nbsp;installServer,
-                 java.lang.String&nbsp;javaInstallPath,
-                 java.lang.String&nbsp;minecraftVer,
-                 java.lang.String&nbsp;modloader,
-                 java.lang.String&nbsp;modloaderVersion,
-                 boolean&nbsp;includeIcon,
-                 boolean&nbsp;includeProperties,
-                 boolean&nbsp;includeScripts,
-                 boolean&nbsp;includeZip)</pre>
-<div class="block">Prints the configuration.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modpackDirectory</code> - String. Path to modpack directory.</dd>
-<dd><code>clientsideMods</code> - String List. List of clientside mods to delete from server pack.</dd>
-<dd><code>copyDirectories</code> - String List. List of directories to copy to server pack.</dd>
-<dd><code>installServer</code> - Boolean. Whether to install the modloader server.</dd>
-<dd><code>javaInstallPath</code> - String. Path to Java installation needed to install modloader server.</dd>
-<dd><code>minecraftVer</code> - String. Minecraft version the modpack uses.</dd>
-<dd><code>modloader</code> - String. Modloader the modpack uses.</dd>
-<dd><code>modloaderVersion</code> - String. Version of the modloader the modpack uses.</dd>
-<dd><code>includeIcon</code> - Boolean. Whether to include the server-icon.png in the server pack.</dd>
-<dd><code>includeProperties</code> - Boolean. Whether to include the server.properties in the server pack.</dd>
-<dd><code>includeScripts</code> - Boolean. Whether to include start scripts for the specified modloader in the server pack.</dd>
-<dd><code>includeZip</code> - Boolean. Whether to create a zip-archive of the server pack.</dd>
-</dl>
-</li>
-</ul>
-<a name="checkModpackDir-java.lang.String-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>checkModpackDir</h4>
-<pre>boolean&nbsp;checkModpackDir(java.lang.String&nbsp;modpackDir)</pre>
-<div class="block">Check whether the specified modpack directory exists.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modpackDir</code> - String. The path to the modpack directory.</dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>Boolean. Returns true if the directory exists. False if not.</dd>
-</dl>
-</li>
-</ul>
-<a name="checkCopyDirs-java.util.List-java.lang.String-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>checkCopyDirs</h4>
-<pre>boolean&nbsp;checkCopyDirs(java.util.List&lt;java.lang.String&gt;&nbsp;copyDirs,
-                      java.lang.String&nbsp;modpackDir)</pre>
-<div class="block">Check whether the specified directories exist in the modpack directory.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>copyDirs</code> - String. The directories for which to check.</dd>
-<dd><code>modpackDir</code> - String. The path to the modpack directory in which to check for directories.</dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>Boolean. Returns true if all directories exist. False if any one does not.</dd>
-</dl>
-</li>
-</ul>
-<a name="getJavaPath-java.lang.String-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getJavaPath</h4>
-<pre>java.lang.String&nbsp;getJavaPath(java.lang.String&nbsp;enteredPath)</pre>
-<div class="block">Automatically set Java path if none is specified</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>enteredPath</code> - String. The path to check whether it is empty.</dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>String. Return the entered Java path if it is not empty. Automatically determine path if empty.</dd>
-</dl>
-</li>
-</ul>
-<a name="checkJavaPath-java.lang.String-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>checkJavaPath</h4>
-<pre>boolean&nbsp;checkJavaPath(java.lang.String&nbsp;pathToJava)</pre>
-<div class="block">Checks whether the correct path to the Java installation was set.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>pathToJava</code> - String. The path to check for java.exe or java.</dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>Boolean. Returns true if the path was correctly set. False if not.</dd>
-</dl>
-</li>
-</ul>
-<a name="checkModloader-java.lang.String-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>checkModloader</h4>
-<pre>boolean&nbsp;checkModloader(java.lang.String&nbsp;modloader)</pre>
-<div class="block">Checks whether Forge or Fabric were specified as modloader.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modloader</code> - String. Check case insensitive for Forge or Fabric.</dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>Boolean. Returns true if the specified modloader is either Forge or Fabric. False if not.</dd>
-</dl>
-</li>
-</ul>
-<a name="setModloader-java.lang.String-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>setModloader</h4>
-<pre>java.lang.String&nbsp;setModloader(java.lang.String&nbsp;modloader)</pre>
-<div class="block">Standardize the specified modloader.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modloader</code> - String. If any case of Forge or Fabric was specified, return "Forge" or "Fabric", so users can enter "forge" or "fabric" or any combination of upper- and lowercase letters..</dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>String. Returns a standardized String of the specified modloader.</dd>
-</dl>
-</li>
-</ul>
-<a name="checkModloaderVersion-java.lang.String-java.lang.String-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>checkModloaderVersion</h4>
-<pre>boolean&nbsp;checkModloaderVersion(java.lang.String&nbsp;modloader,
-                              java.lang.String&nbsp;modloaderVersion)</pre>
-<div class="block">Determine whether to check for correct Forge or correct Fabric modloader version.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modloader</code> - String. Determines whether the check for Forge or Fabric is called.</dd>
-<dd><code>modloaderVersion</code> - String. The version of the modloader to check for.</dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>Boolean. Returns true if the specified modloader version is correct. False if not.</dd>
-</dl>
-</li>
-</ul>
-<a name="isMinecraftVersionCorrect-java.lang.String-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>isMinecraftVersionCorrect</h4>
-<pre>boolean&nbsp;isMinecraftVersionCorrect(java.lang.String&nbsp;minecraftVersion)</pre>
-<div class="block">Check the specified Minecraft version against Mojang's version manifest to validate the version.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>minecraftVersion</code> - Minecraft version to check.</dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>Boolean. Returns true if the specified Minecraft version could be found in Mojang's manifest. False if not.</dd>
-</dl>
-</li>
-</ul>
-<a name="isFabricVersionCorrect-java.lang.String-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>isFabricVersionCorrect</h4>
-<pre>boolean&nbsp;isFabricVersionCorrect(java.lang.String&nbsp;fabricVersion)</pre>
-<div class="block">Check the specified Fabric version against Fabric's version manifest to validate the version.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>fabricVersion</code> - String. The Fabric version to check.</dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>Boolean. Returns true if the specified Fabric version could be found in Fabric's manifest. False if not.</dd>
-</dl>
-</li>
-</ul>
-<a name="isForgeVersionCorrect-java.lang.String-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>isForgeVersionCorrect</h4>
-<pre>boolean&nbsp;isForgeVersionCorrect(java.lang.String&nbsp;forgeVersion)</pre>
-<div class="block">Checks Forge version for errors (basically for its availability in Forge manifest)</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>forgeVersion</code> - String. The Forge version to check.</dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>Boolean. Returns true if Forge version correct and false if it isn't correct.</dd>
-</dl>
-</li>
-</ul>
-<a name="latestFabricLoader-java.lang.String-">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>latestFabricLoader</h4>
-<pre>private&nbsp;java.lang.String&nbsp;latestFabricLoader(java.lang.String&nbsp;modpackDir)</pre>
-<div class="block">Returns the latest installer version for the Fabric installer to be used in ServerSetup.installServer.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modpackDir</code> - String. /server_pack The directory where the Fabric installer will be placed in.</dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>Boolean. Returns true if the download was successful. False if not.</dd>
-</dl>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-<!-- ========= END OF CLASS DATA ========= -->
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../index-all.html">Index</a></li>
-<li><a href="../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../de/griefed/serverpackcreator/CLISetup.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../de/griefed/serverpackcreator/CopyFiles.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../index.html?de/griefed/serverpackcreator/ConfigCheck.html" target="_top">Frames</a></li>
-<li><a href="ConfigCheck.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-</body>
-</html>
diff --git a/docs/de/griefed/serverpackcreator/Configuration.html b/docs/de/griefed/serverpackcreator/Configuration.html
new file mode 100644
index 000000000..7850ce453
--- /dev/null
+++ b/docs/de/griefed/serverpackcreator/Configuration.html
@@ -0,0 +1,1598 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="de">
+<head>
+<!-- Generated by javadoc -->
+<title>Configuration (serverpackcreator API)</title>
+<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="Configuration (serverpackcreator API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10,"i38":10,"i39":10,"i40":10,"i41":10,"i42":10,"i43":10,"i44":10,"i45":10,"i46":10,"i47":10,"i48":10,"i49":10,"i50":10,"i51":10,"i52":10,"i53":10,"i54":10,"i55":10,"i56":10,"i57":10,"i58":10,"i59":10};
+var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../index-all.html">Index</a></li>
+<li><a href="../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev&nbsp;Class</li>
+<li><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../index.html?de/griefed/serverpackcreator/Configuration.html" target="_top">Frames</a></li>
+<li><a href="Configuration.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">de.griefed.serverpackcreator</div>
+<h2 title="Class Configuration" class="title">Class Configuration</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li>java.lang.Object</li>
+<li>
+<ul class="inheritance">
+<li>de.griefed.serverpackcreator.Configuration</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre>public class <span class="typeNameLabel">Configuration</span>
+extends java.lang.Object</pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static org.apache.logging.log4j.Logger</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#appLogger">appLogger</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private java.util.List&lt;java.lang.String&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#clientMods">clientMods</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private com.typesafe.config.Config</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#config">config</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private java.io.File</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#configFile">configFile</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private java.util.List&lt;java.lang.String&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#copyDirs">copyDirs</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private java.util.List&lt;java.lang.String&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#fallbackModsList">fallbackModsList</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private java.lang.Boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#includeServerIcon">includeServerIcon</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private java.lang.Boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#includeServerInstallation">includeServerInstallation</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private java.lang.Boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#includeServerProperties">includeServerProperties</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private java.lang.Boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#includeStartScripts">includeStartScripts</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private java.lang.Boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#includeZipCreation">includeZipCreation</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#javaPath">javaPath</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#localizationManager">localizationManager</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#minecraftVersion">minecraftVersion</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#modLoader">modLoader</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#modLoaderVersion">modLoaderVersion</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#modpackDir">modpackDir</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private java.io.File</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#oldConfigFile">oldConfigFile</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#projectFileID">projectFileID</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#projectID">projectID</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#Configuration-de.griefed.serverpackcreator.i18n.LocalizationManager-">Configuration</a></span>(<a href="../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a>&nbsp;injectedLocalizationManager)</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#buildString-java.lang.String...-">buildString</a></span>(java.lang.String...&nbsp;args)</code>
+<div class="block">Converts list of strings into concatenated string.</div>
+</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#checkConfigFile-java.io.File-">checkConfigFile</a></span>(java.io.File&nbsp;configFile)</code>
+<div class="block">Check the config file for configuration errors.</div>
+</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code>(package private) boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#checkCopyDirs-java.util.List-java.lang.String-">checkCopyDirs</a></span>(java.util.List&lt;java.lang.String&gt;&nbsp;copyDirs,
+             java.lang.String&nbsp;modpackDir)</code>
+<div class="block">Check whether the specified directories exist in the modpack directory.</div>
+</td>
+</tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code>(package private) boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#checkCurseForge-java.lang.String-">checkCurseForge</a></span>(java.lang.String&nbsp;modpackDir)</code>
+<div class="block">Checks whether the modpackDir contains a valid projectID,fileID combination.</div>
+</td>
+</tr>
+<tr id="i4" class="altColor">
+<td class="colFirst"><code>(package private) boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#checkJavaPath-java.lang.String-">checkJavaPath</a></span>(java.lang.String&nbsp;pathToJava)</code>
+<div class="block">Checks whether the correct path to the Java installation was set.</div>
+</td>
+</tr>
+<tr id="i5" class="rowColor">
+<td class="colFirst"><code>(package private) boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#checkModloader-java.lang.String-">checkModloader</a></span>(java.lang.String&nbsp;modloader)</code>
+<div class="block">Checks whether Forge or Fabric were specified as modloader.</div>
+</td>
+</tr>
+<tr id="i6" class="altColor">
+<td class="colFirst"><code>(package private) boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#checkModloaderVersion-java.lang.String-java.lang.String-">checkModloaderVersion</a></span>(java.lang.String&nbsp;modloader,
+                     java.lang.String&nbsp;modloaderVersion)</code>
+<div class="block">Determine whether to check for correct Forge or correct Fabric modloader version.</div>
+</td>
+</tr>
+<tr id="i7" class="rowColor">
+<td class="colFirst"><code>(package private) boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#checkModpackDir-java.lang.String-">checkModpackDir</a></span>(java.lang.String&nbsp;modpackDir)</code>
+<div class="block">Check whether the specified modpack directory exists.</div>
+</td>
+</tr>
+<tr id="i8" class="altColor">
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#containsFabric-de.griefed.serverpackcreator.curseforgemodpack.CurseModpack-">containsFabric</a></span>(<a href="../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModpack</a>&nbsp;modpack)</code>
+<div class="block">Checks for the Jumploader mod in the project list of the modpack.</div>
+</td>
+</tr>
+<tr id="i9" class="rowColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#convertToBoolean-java.lang.String-">convertToBoolean</a></span>(java.lang.String&nbsp;stringBoolean)</code>
+<div class="block">Converts various strings to booleans.</div>
+</td>
+</tr>
+<tr id="i10" class="altColor">
+<td class="colFirst"><code>(package private) void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#createConfigurationFile--">createConfigurationFile</a></span>()</code>
+<div class="block">Generate new configuration file from CLI input.</div>
+</td>
+</tr>
+<tr id="i11" class="rowColor">
+<td class="colFirst"><code>(package private) java.util.List&lt;java.lang.String&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getClientMods--">getClientMods</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i12" class="altColor">
+<td class="colFirst"><code>com.typesafe.config.Config</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getConfig--">getConfig</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i13" class="rowColor">
+<td class="colFirst"><code>java.io.File</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getConfigFile--">getConfigFile</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i14" class="altColor">
+<td class="colFirst"><code>(package private) java.util.List&lt;java.lang.String&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getCopyDirs--">getCopyDirs</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i15" class="rowColor">
+<td class="colFirst"><code>(package private) java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getFabricManifestUrl--">getFabricManifestUrl</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i16" class="altColor">
+<td class="colFirst"><code>(package private) java.util.List&lt;java.lang.String&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getFallbackModsList--">getFallbackModsList</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i17" class="rowColor">
+<td class="colFirst"><code>(package private) java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getForgeManifestUrl--">getForgeManifestUrl</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i18" class="altColor">
+<td class="colFirst"><code>(package private) boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getIncludeServerIcon--">getIncludeServerIcon</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i19" class="rowColor">
+<td class="colFirst"><code>(package private) boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getIncludeServerInstallation--">getIncludeServerInstallation</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i20" class="altColor">
+<td class="colFirst"><code>(package private) boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getIncludeServerProperties--">getIncludeServerProperties</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i21" class="rowColor">
+<td class="colFirst"><code>(package private) boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getIncludeStartScripts--">getIncludeStartScripts</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i22" class="altColor">
+<td class="colFirst"><code>(package private) boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getIncludeZipCreation--">getIncludeZipCreation</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i23" class="rowColor">
+<td class="colFirst"><code>(package private) java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getJavaPath--">getJavaPath</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i24" class="altColor">
+<td class="colFirst"><code>(package private) java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getJavaPath-java.lang.String-">getJavaPath</a></span>(java.lang.String&nbsp;enteredPath)</code>
+<div class="block">Automatically set Java path if none is specified</div>
+</td>
+</tr>
+<tr id="i25" class="rowColor">
+<td class="colFirst"><code>(package private) java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getMinecraftManifestUrl--">getMinecraftManifestUrl</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i26" class="altColor">
+<td class="colFirst"><code>(package private) java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getMinecraftVersion--">getMinecraftVersion</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i27" class="rowColor">
+<td class="colFirst"><code>(package private) java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getModLoader--">getModLoader</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i28" class="altColor">
+<td class="colFirst"><code>(package private) java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getModLoaderVersion--">getModLoaderVersion</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i29" class="rowColor">
+<td class="colFirst"><code>(package private) java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getModpackDir--">getModpackDir</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i30" class="altColor">
+<td class="colFirst"><code>java.io.File</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getOldConfigFile--">getOldConfigFile</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i31" class="rowColor">
+<td class="colFirst"><code>(package private) int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getProjectFileID--">getProjectFileID</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i32" class="altColor">
+<td class="colFirst"><code>(package private) int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getProjectID--">getProjectID</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i33" class="rowColor">
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#isCurse--">isCurse</a></span>()</code>
+<div class="block">Checks whether the specified projectID,fileID combination is a valid CurseForge project and file and whether the resulting directory exists.</div>
+</td>
+</tr>
+<tr id="i34" class="altColor">
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#isDir-java.lang.String-">isDir</a></span>(java.lang.String&nbsp;modpackDir)</code>
+<div class="block">Checks whether the specified modpack exists.</div>
+</td>
+</tr>
+<tr id="i35" class="rowColor">
+<td class="colFirst"><code>(package private) boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#isFabricVersionCorrect-java.lang.String-">isFabricVersionCorrect</a></span>(java.lang.String&nbsp;fabricVersion)</code>
+<div class="block">Check the specified Fabric version against Fabric's version manifest to validate the version.</div>
+</td>
+</tr>
+<tr id="i36" class="altColor">
+<td class="colFirst"><code>(package private) boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#isForgeVersionCorrect-java.lang.String-">isForgeVersionCorrect</a></span>(java.lang.String&nbsp;forgeVersion)</code>
+<div class="block">Checks Forge version for errors (basically for its availability in Forge manifest)</div>
+</td>
+</tr>
+<tr id="i37" class="rowColor">
+<td class="colFirst"><code>(package private) boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#isMinecraftVersionCorrect-java.lang.String-">isMinecraftVersionCorrect</a></span>(java.lang.String&nbsp;minecraftVersion)</code>
+<div class="block">Check the specified Minecraft version against Mojang's version manifest to validate the version.</div>
+</td>
+</tr>
+<tr id="i38" class="altColor">
+<td class="colFirst"><code>private java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#latestFabricLoader-java.lang.String-">latestFabricLoader</a></span>(java.lang.String&nbsp;modpackDir)</code>
+<div class="block">Returns the latest installer version for the Fabric installer to be used in ServerSetup.installServer.</div>
+</td>
+</tr>
+<tr id="i39" class="rowColor">
+<td class="colFirst"><code>(package private) void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#printConfig-java.lang.String-java.util.List-java.util.List-boolean-java.lang.String-java.lang.String-java.lang.String-java.lang.String-boolean-boolean-boolean-boolean-">printConfig</a></span>(java.lang.String&nbsp;modpackDirectory,
+           java.util.List&lt;java.lang.String&gt;&nbsp;clientsideMods,
+           java.util.List&lt;java.lang.String&gt;&nbsp;copyDirectories,
+           boolean&nbsp;installServer,
+           java.lang.String&nbsp;javaInstallPath,
+           java.lang.String&nbsp;minecraftVer,
+           java.lang.String&nbsp;modloader,
+           java.lang.String&nbsp;modloaderVersion,
+           boolean&nbsp;includeIcon,
+           boolean&nbsp;includeProperties,
+           boolean&nbsp;includeScripts,
+           boolean&nbsp;includeZip)</code>
+<div class="block">Prints the configuration.</div>
+</td>
+</tr>
+<tr id="i40" class="altColor">
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#readBoolean--">readBoolean</a></span>()</code>
+<div class="block">A helper method for config setup.</div>
+</td>
+</tr>
+<tr id="i41" class="rowColor">
+<td class="colFirst"><code>private java.util.List&lt;java.lang.String&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#readStringArray--">readStringArray</a></span>()</code>
+<div class="block">A helper method for config setup.</div>
+</td>
+</tr>
+<tr id="i42" class="altColor">
+<td class="colFirst"><code>(package private) void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#setClientMods-java.util.List-">setClientMods</a></span>(java.util.List&lt;java.lang.String&gt;&nbsp;newClientMods)</code>&nbsp;</td>
+</tr>
+<tr id="i43" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#setConfig-com.typesafe.config.Config-">setConfig</a></span>(com.typesafe.config.Config&nbsp;newConfig)</code>&nbsp;</td>
+</tr>
+<tr id="i44" class="altColor">
+<td class="colFirst"><code>(package private) void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#setCopyDirs-java.util.List-">setCopyDirs</a></span>(java.util.List&lt;java.lang.String&gt;&nbsp;newCopyDirs)</code>&nbsp;</td>
+</tr>
+<tr id="i45" class="rowColor">
+<td class="colFirst"><code>(package private) void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#setIncludeServerIcon-boolean-">setIncludeServerIcon</a></span>(boolean&nbsp;newIncludeServerIcon)</code>&nbsp;</td>
+</tr>
+<tr id="i46" class="altColor">
+<td class="colFirst"><code>(package private) void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#setIncludeServerInstallation-boolean-">setIncludeServerInstallation</a></span>(boolean&nbsp;newIncludeServerInstallation)</code>&nbsp;</td>
+</tr>
+<tr id="i47" class="rowColor">
+<td class="colFirst"><code>(package private) void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#setIncludeServerProperties-boolean-">setIncludeServerProperties</a></span>(boolean&nbsp;newIncludeServerProperties)</code>&nbsp;</td>
+</tr>
+<tr id="i48" class="altColor">
+<td class="colFirst"><code>(package private) void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#setIncludeStartScripts-boolean-">setIncludeStartScripts</a></span>(boolean&nbsp;newIncludeStartScripts)</code>&nbsp;</td>
+</tr>
+<tr id="i49" class="rowColor">
+<td class="colFirst"><code>(package private) void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#setIncludeZipCreation-boolean-">setIncludeZipCreation</a></span>(boolean&nbsp;newIncludeZipCreation)</code>&nbsp;</td>
+</tr>
+<tr id="i50" class="altColor">
+<td class="colFirst"><code>(package private) void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#setJavaPath-java.lang.String-">setJavaPath</a></span>(java.lang.String&nbsp;newJavaPath)</code>&nbsp;</td>
+</tr>
+<tr id="i51" class="rowColor">
+<td class="colFirst"><code>(package private) void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#setMinecraftVersion-java.lang.String-">setMinecraftVersion</a></span>(java.lang.String&nbsp;newMinecraftVersion)</code>&nbsp;</td>
+</tr>
+<tr id="i52" class="altColor">
+<td class="colFirst"><code>(package private) java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#setModloader-java.lang.String-">setModloader</a></span>(java.lang.String&nbsp;modloader)</code>
+<div class="block">Standardize the specified modloader.</div>
+</td>
+</tr>
+<tr id="i53" class="rowColor">
+<td class="colFirst"><code>(package private) void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#setModLoader-java.lang.String-">setModLoader</a></span>(java.lang.String&nbsp;newModLoader)</code>&nbsp;</td>
+</tr>
+<tr id="i54" class="altColor">
+<td class="colFirst"><code>(package private) void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#setModLoaderVersion-java.lang.String-">setModLoaderVersion</a></span>(java.lang.String&nbsp;newModLoaderVersion)</code>&nbsp;</td>
+</tr>
+<tr id="i55" class="rowColor">
+<td class="colFirst"><code>(package private) void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#setModpackDir-java.lang.String-">setModpackDir</a></span>(java.lang.String&nbsp;newModpackDir)</code>&nbsp;</td>
+</tr>
+<tr id="i56" class="altColor">
+<td class="colFirst"><code>(package private) void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#setProjectFileID-int-">setProjectFileID</a></span>(int&nbsp;newProjectFileID)</code>&nbsp;</td>
+</tr>
+<tr id="i57" class="rowColor">
+<td class="colFirst"><code>(package private) void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#setProjectID-int-">setProjectID</a></span>(int&nbsp;newProjectID)</code>&nbsp;</td>
+</tr>
+<tr id="i58" class="altColor">
+<td class="colFirst"><code>private java.util.List&lt;java.lang.String&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#suggestCopyDirs-java.lang.String-">suggestCopyDirs</a></span>(java.lang.String&nbsp;modpackDir)</code>
+<div class="block">Creates a list of suggested directories to include in server pack which is later on written to a new configuration file.</div>
+</td>
+</tr>
+<tr id="i59" class="rowColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#writeConfigToFile-java.lang.String-java.lang.String-java.lang.String-boolean-java.lang.String-java.lang.String-java.lang.String-java.lang.String-boolean-boolean-boolean-boolean-java.io.File-boolean-">writeConfigToFile</a></span>(java.lang.String&nbsp;modpackDir,
+                 java.lang.String&nbsp;clientMods,
+                 java.lang.String&nbsp;copyDirs,
+                 boolean&nbsp;includeServer,
+                 java.lang.String&nbsp;javaPath,
+                 java.lang.String&nbsp;minecraftVersion,
+                 java.lang.String&nbsp;modLoader,
+                 java.lang.String&nbsp;modLoaderVersion,
+                 boolean&nbsp;includeIcon,
+                 boolean&nbsp;includeProperties,
+                 boolean&nbsp;includeScripts,
+                 boolean&nbsp;includeZip,
+                 java.io.File&nbsp;fileName,
+                 boolean&nbsp;isTemporary)</code>
+<div class="block">Writes a new configuration file with the parameters passed to it.</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
+<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!--   -->
+</a>
+<h3>Field Detail</h3>
+<a name="appLogger">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>appLogger</h4>
+<pre>private static final&nbsp;org.apache.logging.log4j.Logger appLogger</pre>
+</li>
+</ul>
+<a name="oldConfigFile">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>oldConfigFile</h4>
+<pre>private final&nbsp;java.io.File oldConfigFile</pre>
+</li>
+</ul>
+<a name="configFile">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>configFile</h4>
+<pre>private final&nbsp;java.io.File configFile</pre>
+</li>
+</ul>
+<a name="localizationManager">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>localizationManager</h4>
+<pre>private&nbsp;<a href="../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a> localizationManager</pre>
+</li>
+</ul>
+<a name="fallbackModsList">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>fallbackModsList</h4>
+<pre>private final&nbsp;java.util.List&lt;java.lang.String&gt; fallbackModsList</pre>
+</li>
+</ul>
+<a name="clientMods">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>clientMods</h4>
+<pre>private&nbsp;java.util.List&lt;java.lang.String&gt; clientMods</pre>
+</li>
+</ul>
+<a name="copyDirs">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>copyDirs</h4>
+<pre>private&nbsp;java.util.List&lt;java.lang.String&gt; copyDirs</pre>
+</li>
+</ul>
+<a name="modpackDir">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>modpackDir</h4>
+<pre>private&nbsp;java.lang.String modpackDir</pre>
+</li>
+</ul>
+<a name="javaPath">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>javaPath</h4>
+<pre>private&nbsp;java.lang.String javaPath</pre>
+</li>
+</ul>
+<a name="minecraftVersion">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>minecraftVersion</h4>
+<pre>private&nbsp;java.lang.String minecraftVersion</pre>
+</li>
+</ul>
+<a name="modLoader">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>modLoader</h4>
+<pre>private&nbsp;java.lang.String modLoader</pre>
+</li>
+</ul>
+<a name="modLoaderVersion">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>modLoaderVersion</h4>
+<pre>private&nbsp;java.lang.String modLoaderVersion</pre>
+</li>
+</ul>
+<a name="includeServerInstallation">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>includeServerInstallation</h4>
+<pre>private&nbsp;java.lang.Boolean includeServerInstallation</pre>
+</li>
+</ul>
+<a name="includeServerIcon">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>includeServerIcon</h4>
+<pre>private&nbsp;java.lang.Boolean includeServerIcon</pre>
+</li>
+</ul>
+<a name="includeServerProperties">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>includeServerProperties</h4>
+<pre>private&nbsp;java.lang.Boolean includeServerProperties</pre>
+</li>
+</ul>
+<a name="includeStartScripts">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>includeStartScripts</h4>
+<pre>private&nbsp;java.lang.Boolean includeStartScripts</pre>
+</li>
+</ul>
+<a name="includeZipCreation">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>includeZipCreation</h4>
+<pre>private&nbsp;java.lang.Boolean includeZipCreation</pre>
+</li>
+</ul>
+<a name="projectID">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>projectID</h4>
+<pre>private&nbsp;int projectID</pre>
+</li>
+</ul>
+<a name="projectFileID">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>projectFileID</h4>
+<pre>private&nbsp;int projectFileID</pre>
+</li>
+</ul>
+<a name="config">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>config</h4>
+<pre>private&nbsp;com.typesafe.config.Config config</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="Configuration-de.griefed.serverpackcreator.i18n.LocalizationManager-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>Configuration</h4>
+<pre>public&nbsp;Configuration(<a href="../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a>&nbsp;injectedLocalizationManager)</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="getOldConfigFile--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getOldConfigFile</h4>
+<pre>public&nbsp;java.io.File&nbsp;getOldConfigFile()</pre>
+</li>
+</ul>
+<a name="getConfigFile--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getConfigFile</h4>
+<pre>public&nbsp;java.io.File&nbsp;getConfigFile()</pre>
+</li>
+</ul>
+<a name="getMinecraftManifestUrl--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getMinecraftManifestUrl</h4>
+<pre>java.lang.String&nbsp;getMinecraftManifestUrl()</pre>
+</li>
+</ul>
+<a name="getForgeManifestUrl--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getForgeManifestUrl</h4>
+<pre>java.lang.String&nbsp;getForgeManifestUrl()</pre>
+</li>
+</ul>
+<a name="getFabricManifestUrl--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getFabricManifestUrl</h4>
+<pre>java.lang.String&nbsp;getFabricManifestUrl()</pre>
+</li>
+</ul>
+<a name="getConfig--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getConfig</h4>
+<pre>public&nbsp;com.typesafe.config.Config&nbsp;getConfig()</pre>
+</li>
+</ul>
+<a name="setConfig-com.typesafe.config.Config-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setConfig</h4>
+<pre>public&nbsp;void&nbsp;setConfig(com.typesafe.config.Config&nbsp;newConfig)</pre>
+</li>
+</ul>
+<a name="getFallbackModsList--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getFallbackModsList</h4>
+<pre>java.util.List&lt;java.lang.String&gt;&nbsp;getFallbackModsList()</pre>
+</li>
+</ul>
+<a name="getClientMods--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getClientMods</h4>
+<pre>java.util.List&lt;java.lang.String&gt;&nbsp;getClientMods()</pre>
+</li>
+</ul>
+<a name="setClientMods-java.util.List-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setClientMods</h4>
+<pre>void&nbsp;setClientMods(java.util.List&lt;java.lang.String&gt;&nbsp;newClientMods)</pre>
+</li>
+</ul>
+<a name="getCopyDirs--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getCopyDirs</h4>
+<pre>java.util.List&lt;java.lang.String&gt;&nbsp;getCopyDirs()</pre>
+</li>
+</ul>
+<a name="setCopyDirs-java.util.List-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setCopyDirs</h4>
+<pre>void&nbsp;setCopyDirs(java.util.List&lt;java.lang.String&gt;&nbsp;newCopyDirs)</pre>
+</li>
+</ul>
+<a name="getModpackDir--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getModpackDir</h4>
+<pre>java.lang.String&nbsp;getModpackDir()</pre>
+</li>
+</ul>
+<a name="setModpackDir-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setModpackDir</h4>
+<pre>void&nbsp;setModpackDir(java.lang.String&nbsp;newModpackDir)</pre>
+</li>
+</ul>
+<a name="getJavaPath--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getJavaPath</h4>
+<pre>java.lang.String&nbsp;getJavaPath()</pre>
+</li>
+</ul>
+<a name="setJavaPath-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setJavaPath</h4>
+<pre>void&nbsp;setJavaPath(java.lang.String&nbsp;newJavaPath)</pre>
+</li>
+</ul>
+<a name="getMinecraftVersion--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getMinecraftVersion</h4>
+<pre>java.lang.String&nbsp;getMinecraftVersion()</pre>
+</li>
+</ul>
+<a name="setMinecraftVersion-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setMinecraftVersion</h4>
+<pre>void&nbsp;setMinecraftVersion(java.lang.String&nbsp;newMinecraftVersion)</pre>
+</li>
+</ul>
+<a name="getModLoader--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getModLoader</h4>
+<pre>java.lang.String&nbsp;getModLoader()</pre>
+</li>
+</ul>
+<a name="setModLoader-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setModLoader</h4>
+<pre>void&nbsp;setModLoader(java.lang.String&nbsp;newModLoader)</pre>
+</li>
+</ul>
+<a name="getModLoaderVersion--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getModLoaderVersion</h4>
+<pre>java.lang.String&nbsp;getModLoaderVersion()</pre>
+</li>
+</ul>
+<a name="setModLoaderVersion-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setModLoaderVersion</h4>
+<pre>void&nbsp;setModLoaderVersion(java.lang.String&nbsp;newModLoaderVersion)</pre>
+</li>
+</ul>
+<a name="getIncludeServerInstallation--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getIncludeServerInstallation</h4>
+<pre>boolean&nbsp;getIncludeServerInstallation()</pre>
+</li>
+</ul>
+<a name="setIncludeServerInstallation-boolean-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setIncludeServerInstallation</h4>
+<pre>void&nbsp;setIncludeServerInstallation(boolean&nbsp;newIncludeServerInstallation)</pre>
+</li>
+</ul>
+<a name="getIncludeServerIcon--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getIncludeServerIcon</h4>
+<pre>boolean&nbsp;getIncludeServerIcon()</pre>
+</li>
+</ul>
+<a name="setIncludeServerIcon-boolean-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setIncludeServerIcon</h4>
+<pre>void&nbsp;setIncludeServerIcon(boolean&nbsp;newIncludeServerIcon)</pre>
+</li>
+</ul>
+<a name="getIncludeServerProperties--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getIncludeServerProperties</h4>
+<pre>boolean&nbsp;getIncludeServerProperties()</pre>
+</li>
+</ul>
+<a name="setIncludeServerProperties-boolean-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setIncludeServerProperties</h4>
+<pre>void&nbsp;setIncludeServerProperties(boolean&nbsp;newIncludeServerProperties)</pre>
+</li>
+</ul>
+<a name="getIncludeStartScripts--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getIncludeStartScripts</h4>
+<pre>boolean&nbsp;getIncludeStartScripts()</pre>
+</li>
+</ul>
+<a name="setIncludeStartScripts-boolean-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setIncludeStartScripts</h4>
+<pre>void&nbsp;setIncludeStartScripts(boolean&nbsp;newIncludeStartScripts)</pre>
+</li>
+</ul>
+<a name="getIncludeZipCreation--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getIncludeZipCreation</h4>
+<pre>boolean&nbsp;getIncludeZipCreation()</pre>
+</li>
+</ul>
+<a name="setIncludeZipCreation-boolean-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setIncludeZipCreation</h4>
+<pre>void&nbsp;setIncludeZipCreation(boolean&nbsp;newIncludeZipCreation)</pre>
+</li>
+</ul>
+<a name="getProjectID--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getProjectID</h4>
+<pre>int&nbsp;getProjectID()</pre>
+</li>
+</ul>
+<a name="setProjectID-int-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setProjectID</h4>
+<pre>void&nbsp;setProjectID(int&nbsp;newProjectID)</pre>
+</li>
+</ul>
+<a name="getProjectFileID--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getProjectFileID</h4>
+<pre>int&nbsp;getProjectFileID()</pre>
+</li>
+</ul>
+<a name="setProjectFileID-int-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setProjectFileID</h4>
+<pre>void&nbsp;setProjectFileID(int&nbsp;newProjectFileID)</pre>
+</li>
+</ul>
+<a name="checkConfigFile-java.io.File-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>checkConfigFile</h4>
+<pre>public&nbsp;boolean&nbsp;checkConfigFile(java.io.File&nbsp;configFile)</pre>
+<div class="block">Check the config file for configuration errors. If an error is found, the log file will tell the user where the error is, so they can fix their config.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>configFile</code> - The configuration file to check. Must be a valid configuration file for serverpackcreator to work.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Return true if error is found in user's configuration. If an error is found, the application will exit in main.</dd>
+</dl>
+</li>
+</ul>
+<a name="isDir-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>isDir</h4>
+<pre>private&nbsp;boolean&nbsp;isDir(java.lang.String&nbsp;modpackDir)</pre>
+<div class="block">Checks whether the specified modpack exists. If it does, the config file is checked for errors. Should any error be found, it will return true so the configCheck method informs the user about an invalid configuration.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>modpackDir</code> - String. Should an existing modpack be specified, all configurations are read from local file and the server pack is created, if config is correct.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Boolean. Returns true if an error is found during configuration check. False if the configuration is deemed valid.</dd>
+</dl>
+</li>
+</ul>
+<a name="isCurse--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>isCurse</h4>
+<pre>private&nbsp;boolean&nbsp;isCurse()</pre>
+<div class="block">Checks whether the specified projectID,fileID combination is a valid CurseForge project and file and whether the resulting directory exists. If the directory does not exist, make calls to other methods which create the modpack. Parses information gathered from the modpack to later replace the previous configuration file.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Boolean. Currently always returns true so serverpackcreator does not go straight into server pack creation after the creation of the specified modpack. Gives the user the chance to check their config before actually creating the server pack.</dd>
+</dl>
+</li>
+</ul>
+<a name="containsFabric-de.griefed.serverpackcreator.curseforgemodpack.CurseModpack-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>containsFabric</h4>
+<pre>private&nbsp;boolean&nbsp;containsFabric(<a href="../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModpack</a>&nbsp;modpack)</pre>
+<div class="block">Checks for the Jumploader mod in the project list of the modpack. If Jumploader is found, the modloader in the configuration will be set to Fabric.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>modpack</code> - Object. Contains information about our modpack. Used to get a list of all projects used in the modpack.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Boolean. Returns true if Jumploader is found, false if not found.</dd>
+</dl>
+</li>
+</ul>
+<a name="suggestCopyDirs-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>suggestCopyDirs</h4>
+<pre>private&nbsp;java.util.List&lt;java.lang.String&gt;&nbsp;suggestCopyDirs(java.lang.String&nbsp;modpackDir)</pre>
+<div class="block">Creates a list of suggested directories to include in server pack which is later on written to a new configuration file.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>modpackDir</code> - String. The directory for which to gather a list of directories.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>List, String. Returns a list of directories inside the modpack, excluding well known client-side only directories which would not be needed by a server pack. If you have suggestions to this list, open an issue on https://github.com/Griefed/ServerPackCreator/issues</dd>
+</dl>
+</li>
+</ul>
+<a name="checkCurseForge-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>checkCurseForge</h4>
+<pre>boolean&nbsp;checkCurseForge(java.lang.String&nbsp;modpackDir)</pre>
+<div class="block">Checks whether the modpackDir contains a valid projectID,fileID combination. ProjectIDs must be at least two digits long, fileIDs must be at least 5 digits long. Must be numbers separated by a ",".</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>modpackDir</code> - String. The string which to check for a valid projectID,fileID combination.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Boolean. Returns true if the combination is deemed valid, false if not.</dd>
+</dl>
+</li>
+</ul>
+<a name="convertToBoolean-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>convertToBoolean</h4>
+<pre>public&nbsp;boolean&nbsp;convertToBoolean(java.lang.String&nbsp;stringBoolean)</pre>
+<div class="block">Converts various strings to booleans.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>stringBoolean</code> - String. The string which should be converted to boolean if it matches certain patterns.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Boolean. Returns the corresponding boolean if match with pattern was found. If no match is found, assume and return false.</dd>
+</dl>
+</li>
+</ul>
+<a name="printConfig-java.lang.String-java.util.List-java.util.List-boolean-java.lang.String-java.lang.String-java.lang.String-java.lang.String-boolean-boolean-boolean-boolean-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>printConfig</h4>
+<pre>void&nbsp;printConfig(java.lang.String&nbsp;modpackDirectory,
+                 java.util.List&lt;java.lang.String&gt;&nbsp;clientsideMods,
+                 java.util.List&lt;java.lang.String&gt;&nbsp;copyDirectories,
+                 boolean&nbsp;installServer,
+                 java.lang.String&nbsp;javaInstallPath,
+                 java.lang.String&nbsp;minecraftVer,
+                 java.lang.String&nbsp;modloader,
+                 java.lang.String&nbsp;modloaderVersion,
+                 boolean&nbsp;includeIcon,
+                 boolean&nbsp;includeProperties,
+                 boolean&nbsp;includeScripts,
+                 boolean&nbsp;includeZip)</pre>
+<div class="block">Prints the configuration.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>modpackDirectory</code> - String. Path to modpack directory.</dd>
+<dd><code>clientsideMods</code> - String List. List of clientside mods to delete from server pack.</dd>
+<dd><code>copyDirectories</code> - String List. List of directories to copy to server pack.</dd>
+<dd><code>installServer</code> - Boolean. Whether to install the modloader server.</dd>
+<dd><code>javaInstallPath</code> - String. Path to Java installation needed to install modloader server.</dd>
+<dd><code>minecraftVer</code> - String. Minecraft version the modpack uses.</dd>
+<dd><code>modloader</code> - String. Modloader the modpack uses.</dd>
+<dd><code>modloaderVersion</code> - String. Version of the modloader the modpack uses.</dd>
+<dd><code>includeIcon</code> - Boolean. Whether to include the server-icon.png in the server pack.</dd>
+<dd><code>includeProperties</code> - Boolean. Whether to include the server.properties in the server pack.</dd>
+<dd><code>includeScripts</code> - Boolean. Whether to include start scripts for the specified modloader in the server pack.</dd>
+<dd><code>includeZip</code> - Boolean. Whether to create a zip-archive of the server pack.</dd>
+</dl>
+</li>
+</ul>
+<a name="checkModpackDir-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>checkModpackDir</h4>
+<pre>boolean&nbsp;checkModpackDir(java.lang.String&nbsp;modpackDir)</pre>
+<div class="block">Check whether the specified modpack directory exists.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>modpackDir</code> - String. The path to the modpack directory.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Boolean. Returns true if the directory exists. False if not.</dd>
+</dl>
+</li>
+</ul>
+<a name="checkCopyDirs-java.util.List-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>checkCopyDirs</h4>
+<pre>boolean&nbsp;checkCopyDirs(java.util.List&lt;java.lang.String&gt;&nbsp;copyDirs,
+                      java.lang.String&nbsp;modpackDir)</pre>
+<div class="block">Check whether the specified directories exist in the modpack directory.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>copyDirs</code> - String. The directories for which to check.</dd>
+<dd><code>modpackDir</code> - String. The path to the modpack directory in which to check for directories.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Boolean. Returns true if all directories exist. False if any one does not.</dd>
+</dl>
+</li>
+</ul>
+<a name="getJavaPath-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getJavaPath</h4>
+<pre>java.lang.String&nbsp;getJavaPath(java.lang.String&nbsp;enteredPath)</pre>
+<div class="block">Automatically set Java path if none is specified</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>enteredPath</code> - String. The path to check whether it is empty.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>String. Return the entered Java path if it is not empty. Automatically determine path if empty.</dd>
+</dl>
+</li>
+</ul>
+<a name="checkJavaPath-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>checkJavaPath</h4>
+<pre>boolean&nbsp;checkJavaPath(java.lang.String&nbsp;pathToJava)</pre>
+<div class="block">Checks whether the correct path to the Java installation was set.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>pathToJava</code> - String. The path to check for java.exe or java.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Boolean. Returns true if the path was correctly set. False if not.</dd>
+</dl>
+</li>
+</ul>
+<a name="checkModloader-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>checkModloader</h4>
+<pre>boolean&nbsp;checkModloader(java.lang.String&nbsp;modloader)</pre>
+<div class="block">Checks whether Forge or Fabric were specified as modloader.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>modloader</code> - String. Check case insensitive for Forge or Fabric.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Boolean. Returns true if the specified modloader is either Forge or Fabric. False if not.</dd>
+</dl>
+</li>
+</ul>
+<a name="setModloader-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setModloader</h4>
+<pre>java.lang.String&nbsp;setModloader(java.lang.String&nbsp;modloader)</pre>
+<div class="block">Standardize the specified modloader.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>modloader</code> - String. If any case of Forge or Fabric was specified, return "Forge" or "Fabric", so users can enter "forge" or "fabric" or any combination of upper- and lowercase letters..</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>String. Returns a standardized String of the specified modloader.</dd>
+</dl>
+</li>
+</ul>
+<a name="checkModloaderVersion-java.lang.String-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>checkModloaderVersion</h4>
+<pre>boolean&nbsp;checkModloaderVersion(java.lang.String&nbsp;modloader,
+                              java.lang.String&nbsp;modloaderVersion)</pre>
+<div class="block">Determine whether to check for correct Forge or correct Fabric modloader version.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>modloader</code> - String. Determines whether the check for Forge or Fabric is called.</dd>
+<dd><code>modloaderVersion</code> - String. The version of the modloader to check for.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Boolean. Returns true if the specified modloader version is correct. False if not.</dd>
+</dl>
+</li>
+</ul>
+<a name="isMinecraftVersionCorrect-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>isMinecraftVersionCorrect</h4>
+<pre>boolean&nbsp;isMinecraftVersionCorrect(java.lang.String&nbsp;minecraftVersion)</pre>
+<div class="block">Check the specified Minecraft version against Mojang's version manifest to validate the version.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>minecraftVersion</code> - Minecraft version to check.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Boolean. Returns true if the specified Minecraft version could be found in Mojang's manifest. False if not.</dd>
+</dl>
+</li>
+</ul>
+<a name="isFabricVersionCorrect-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>isFabricVersionCorrect</h4>
+<pre>boolean&nbsp;isFabricVersionCorrect(java.lang.String&nbsp;fabricVersion)</pre>
+<div class="block">Check the specified Fabric version against Fabric's version manifest to validate the version.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>fabricVersion</code> - String. The Fabric version to check.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Boolean. Returns true if the specified Fabric version could be found in Fabric's manifest. False if not.</dd>
+</dl>
+</li>
+</ul>
+<a name="isForgeVersionCorrect-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>isForgeVersionCorrect</h4>
+<pre>boolean&nbsp;isForgeVersionCorrect(java.lang.String&nbsp;forgeVersion)</pre>
+<div class="block">Checks Forge version for errors (basically for its availability in Forge manifest)</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>forgeVersion</code> - String. The Forge version to check.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Boolean. Returns true if Forge version correct and false if it isn't correct.</dd>
+</dl>
+</li>
+</ul>
+<a name="latestFabricLoader-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>latestFabricLoader</h4>
+<pre>private&nbsp;java.lang.String&nbsp;latestFabricLoader(java.lang.String&nbsp;modpackDir)</pre>
+<div class="block">Returns the latest installer version for the Fabric installer to be used in ServerSetup.installServer.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>modpackDir</code> - String. /server_pack The directory where the Fabric installer will be placed in.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Boolean. Returns true if the download was successful. False if not.</dd>
+</dl>
+</li>
+</ul>
+<a name="createConfigurationFile--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>createConfigurationFile</h4>
+<pre>void&nbsp;createConfigurationFile()</pre>
+<div class="block">Generate new configuration file from CLI input. Prompts user to enter config file values and then generates a config file with values entered by user.</div>
+</li>
+</ul>
+<a name="readStringArray--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>readStringArray</h4>
+<pre>private&nbsp;java.util.List&lt;java.lang.String&gt;&nbsp;readStringArray()</pre>
+<div class="block">A helper method for config setup. Prompts user to enter the values that will be stored in arrays in config.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>String List. Returns list with user input values that will be stored in config.</dd>
+</dl>
+</li>
+</ul>
+<a name="buildString-java.lang.String...-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>buildString</h4>
+<pre>public&nbsp;java.lang.String&nbsp;buildString(java.lang.String...&nbsp;args)</pre>
+<div class="block">Converts list of strings into concatenated string.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>args</code> - Strings that will be concatenated into one string</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>String. Returns concatenated string that contains all provided values.</dd>
+</dl>
+</li>
+</ul>
+<a name="readBoolean--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>readBoolean</h4>
+<pre>private&nbsp;boolean&nbsp;readBoolean()</pre>
+<div class="block">A helper method for config setup. Prompts user to enter boolean values that will be stored in config and checks entered values to prevent storing non-boolean values in boolean variables.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Boolean. Converts to boolean and returns value entered by user that will be stored in config.</dd>
+</dl>
+</li>
+</ul>
+<a name="writeConfigToFile-java.lang.String-java.lang.String-java.lang.String-boolean-java.lang.String-java.lang.String-java.lang.String-java.lang.String-boolean-boolean-boolean-boolean-java.io.File-boolean-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>writeConfigToFile</h4>
+<pre>public&nbsp;boolean&nbsp;writeConfigToFile(java.lang.String&nbsp;modpackDir,
+                                 java.lang.String&nbsp;clientMods,
+                                 java.lang.String&nbsp;copyDirs,
+                                 boolean&nbsp;includeServer,
+                                 java.lang.String&nbsp;javaPath,
+                                 java.lang.String&nbsp;minecraftVersion,
+                                 java.lang.String&nbsp;modLoader,
+                                 java.lang.String&nbsp;modLoaderVersion,
+                                 boolean&nbsp;includeIcon,
+                                 boolean&nbsp;includeProperties,
+                                 boolean&nbsp;includeScripts,
+                                 boolean&nbsp;includeZip,
+                                 java.io.File&nbsp;fileName,
+                                 boolean&nbsp;isTemporary)</pre>
+<div class="block">Writes a new configuration file with the parameters passed to it.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>modpackDir</code> - String. The path to the modpack.</dd>
+<dd><code>clientMods</code> - List, String. List of clientside-only mods.</dd>
+<dd><code>copyDirs</code> - List, String. List of directories to include in server pack.</dd>
+<dd><code>includeServer</code> - Boolean. Whether to include a modloader server installation.</dd>
+<dd><code>javaPath</code> - String. Path to the java executable.</dd>
+<dd><code>minecraftVersion</code> - String. Minecraft version used by the modpack and server pack.</dd>
+<dd><code>modLoader</code> - String. Modloader used by the modpack and server pack. Ether Forge or Fabric.</dd>
+<dd><code>modLoaderVersion</code> - String. Modloader version used by the modpack and server pack.</dd>
+<dd><code>includeIcon</code> - Boolean. Whether to include a server-icon in the server pack.</dd>
+<dd><code>includeProperties</code> - Boolean. Whether to include a properties file in the server pack.</dd>
+<dd><code>includeScripts</code> - Boolean. Whether to include start scripts in the server pack.</dd>
+<dd><code>includeZip</code> - Boolean. Whether to create a ZIP-archive of the server pack, excluding Mojang's Minecraft server jar.</dd>
+<dd><code>fileName</code> - The name under which to write the new file.</dd>
+<dd><code>isTemporary</code> - Decides whether to delete existing config-file. If isTemporary is false, existing config files will be deleted before writing the new file.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Boolean. Returns true if the configuration file has been successfully written and old ones replaced.</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../index-all.html">Index</a></li>
+<li><a href="../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li>Prev&nbsp;Class</li>
+<li><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../index.html?de/griefed/serverpackcreator/Configuration.html" target="_top">Frames</a></li>
+<li><a href="Configuration.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/docs/de/griefed/serverpackcreator/CopyFiles.html b/docs/de/griefed/serverpackcreator/CopyFiles.html
deleted file mode 100644
index 7d0ef5a02..000000000
--- a/docs/de/griefed/serverpackcreator/CopyFiles.html
+++ /dev/null
@@ -1,431 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="de">
-<head>
-<!-- Generated by javadoc -->
-<title>CopyFiles (serverpackcreator API)</title>
-<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
-    try {
-        if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="CopyFiles (serverpackcreator API)";
-        }
-    }
-    catch(err) {
-    }
-//-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10};
-var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
-var altColor = "altColor";
-var rowColor = "rowColor";
-var tableTab = "tableTab";
-var activeTableTab = "activeTableTab";
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../index-all.html">Index</a></li>
-<li><a href="../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../de/griefed/serverpackcreator/ConfigCheck.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../index.html?de/griefed/serverpackcreator/CopyFiles.html" target="_top">Frames</a></li>
-<li><a href="CopyFiles.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<!-- ======== START OF CLASS DATA ======== -->
-<div class="header">
-<div class="subTitle">de.griefed.serverpackcreator</div>
-<h2 title="Class CopyFiles" class="title">Class CopyFiles</h2>
-</div>
-<div class="contentContainer">
-<ul class="inheritance">
-<li>java.lang.Object</li>
-<li>
-<ul class="inheritance">
-<li>de.griefed.serverpackcreator.CopyFiles</li>
-</ul>
-</li>
-</ul>
-<div class="description">
-<ul class="blockList">
-<li class="blockList">
-<hr>
-<br>
-<pre>class <span class="typeNameLabel">CopyFiles</span>
-extends java.lang.Object</pre>
-</li>
-</ul>
-</div>
-<div class="summary">
-<ul class="blockList">
-<li class="blockList">
-<!-- =========== FIELD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field.summary">
-<!--   -->
-</a>
-<h3>Field Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
-<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Field and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static org.apache.logging.log4j.Logger</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CopyFiles.html#appLogger">appLogger</a></span></code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.summary">
-<!--   -->
-</a>
-<h3>Constructor Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
-<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colOne" scope="col">Constructor and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CopyFiles.html#CopyFiles--">CopyFiles</a></span>()</code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ========== METHOD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.summary">
-<!--   -->
-</a>
-<h3>Method Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
-<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tr id="i0" class="altColor">
-<td class="colFirst"><code>(package private) void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CopyFiles.html#cleanupEnvironment-java.lang.String-">cleanupEnvironment</a></span>(java.lang.String&nbsp;modpackDir)</code>
-<div class="block">Deletes files from previous runs of serverpackcreator.</div>
-</td>
-</tr>
-<tr id="i1" class="rowColor">
-<td class="colFirst"><code>(package private) void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CopyFiles.html#copyFiles-java.lang.String-java.util.List-java.util.List-">copyFiles</a></span>(java.lang.String&nbsp;modpackDir,
-         java.util.List&lt;java.lang.String&gt;&nbsp;copyDirs,
-         java.util.List&lt;java.lang.String&gt;&nbsp;clientMods)</code>
-<div class="block">Copies all specified folders and their files to the modpackDir.</div>
-</td>
-</tr>
-<tr id="i2" class="altColor">
-<td class="colFirst"><code>(package private) void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CopyFiles.html#copyIcon-java.lang.String-">copyIcon</a></span>(java.lang.String&nbsp;modpackDir)</code>
-<div class="block">Copies the server-icon.png into server_pack.</div>
-</td>
-</tr>
-<tr id="i3" class="rowColor">
-<td class="colFirst"><code>(package private) void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CopyFiles.html#copyProperties-java.lang.String-">copyProperties</a></span>(java.lang.String&nbsp;modpackDir)</code>
-<div class="block">Copies the server.properties into server_pack.</div>
-</td>
-</tr>
-<tr id="i4" class="altColor">
-<td class="colFirst"><code>(package private) void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CopyFiles.html#copyStartScripts-java.lang.String-java.lang.String-boolean-">copyStartScripts</a></span>(java.lang.String&nbsp;modpackDir,
-                java.lang.String&nbsp;modLoader,
-                boolean&nbsp;includeStartScripts)</code>
-<div class="block">Copies start scripts for Forge modloader into the server_pack folder.</div>
-</td>
-</tr>
-<tr id="i5" class="rowColor">
-<td class="colFirst"><code>private java.util.List&lt;java.lang.String&gt;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CopyFiles.html#excludeClientMods-java.lang.String-java.util.List-">excludeClientMods</a></span>(java.lang.String&nbsp;modsDir,
-                 java.util.List&lt;java.lang.String&gt;&nbsp;clientMods)</code>
-<div class="block">Generate a list of all mods in a modpack EXCEPT clientside-only mods.</div>
-</td>
-</tr>
-</table>
-<ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
-<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-<div class="details">
-<ul class="blockList">
-<li class="blockList">
-<!-- ============ FIELD DETAIL =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field.detail">
-<!--   -->
-</a>
-<h3>Field Detail</h3>
-<a name="appLogger">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>appLogger</h4>
-<pre>private static final&nbsp;org.apache.logging.log4j.Logger appLogger</pre>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.detail">
-<!--   -->
-</a>
-<h3>Constructor Detail</h3>
-<a name="CopyFiles--">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>CopyFiles</h4>
-<pre>CopyFiles()</pre>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ============ METHOD DETAIL ========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.detail">
-<!--   -->
-</a>
-<h3>Method Detail</h3>
-<a name="cleanupEnvironment-java.lang.String-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>cleanupEnvironment</h4>
-<pre>void&nbsp;cleanupEnvironment(java.lang.String&nbsp;modpackDir)</pre>
-<div class="block">Deletes files from previous runs of serverpackcreator.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modpackDir</code> - String. The directory in where to check for files from previous runs.</dd>
-</dl>
-</li>
-</ul>
-<a name="copyStartScripts-java.lang.String-java.lang.String-boolean-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>copyStartScripts</h4>
-<pre>void&nbsp;copyStartScripts(java.lang.String&nbsp;modpackDir,
-                      java.lang.String&nbsp;modLoader,
-                      boolean&nbsp;includeStartScripts)</pre>
-<div class="block">Copies start scripts for Forge modloader into the server_pack folder.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modpackDir</code> - String. Files will be copied into subfolder server_pack. Checks for valid modpackDir are in ConfigCheck.</dd>
-<dd><code>modLoader</code> - String. Determines whether start scripts for Forge or Fabric are copied to modpackDir. Checks for valid modLoader are in ConfigCheck.</dd>
-<dd><code>includeStartScripts</code> - Boolean. Whether to include start scripts in server_pack. Boolean.</dd>
-</dl>
-</li>
-</ul>
-<a name="copyFiles-java.lang.String-java.util.List-java.util.List-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>copyFiles</h4>
-<pre>void&nbsp;copyFiles(java.lang.String&nbsp;modpackDir,
-               java.util.List&lt;java.lang.String&gt;&nbsp;copyDirs,
-               java.util.List&lt;java.lang.String&gt;&nbsp;clientMods)
-        throws java.io.IOException</pre>
-<div class="block">Copies all specified folders and their files to the modpackDir.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modpackDir</code> - String. /server_pack. Directory where all directories listed in copyDirs will be copied into.</dd>
-<dd><code>copyDirs</code> - String List. The folders and files within to copy.</dd>
-<dd><code>clientMods</code> - String List. List of clientside-only mods NOT to copy to server pack.</dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code>java.io.IOException</code> - Only print stacktrace if it does not start with java.nio.file.DirectoryNotEmptyException.</dd>
-</dl>
-</li>
-</ul>
-<a name="excludeClientMods-java.lang.String-java.util.List-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>excludeClientMods</h4>
-<pre>private&nbsp;java.util.List&lt;java.lang.String&gt;&nbsp;excludeClientMods(java.lang.String&nbsp;modsDir,
-                                                           java.util.List&lt;java.lang.String&gt;&nbsp;clientMods)</pre>
-<div class="block">Generate a list of all mods in a modpack EXCEPT clientside-only mods. This list is then used by copyFiles.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modsDir</code> - String. /mods The directory in which to generate a list of all available mods.</dd>
-<dd><code>clientMods</code> - List String. A list of all clientside-only mods passed by copyFiles, which is then removed from the list generated in this method.</dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>List String. A list of all mods inside the modpack excluding the specified clientside-only mods.</dd>
-</dl>
-</li>
-</ul>
-<a name="copyIcon-java.lang.String-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>copyIcon</h4>
-<pre>void&nbsp;copyIcon(java.lang.String&nbsp;modpackDir)</pre>
-<div class="block">Copies the server-icon.png into server_pack.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modpackDir</code> - String. /server_pack. Directory where the server-icon.png will be copied to.</dd>
-</dl>
-</li>
-</ul>
-<a name="copyProperties-java.lang.String-">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>copyProperties</h4>
-<pre>void&nbsp;copyProperties(java.lang.String&nbsp;modpackDir)</pre>
-<div class="block">Copies the server.properties into server_pack.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modpackDir</code> - String. /server_pack. Directory where the server.properties. will be copied to.</dd>
-</dl>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-<!-- ========= END OF CLASS DATA ========= -->
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../index-all.html">Index</a></li>
-<li><a href="../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../de/griefed/serverpackcreator/ConfigCheck.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../index.html?de/griefed/serverpackcreator/CopyFiles.html" target="_top">Frames</a></li>
-<li><a href="CopyFiles.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-</body>
-</html>
diff --git a/docs/de/griefed/serverpackcreator/CreateServerPack.html b/docs/de/griefed/serverpackcreator/CreateServerPack.html
new file mode 100644
index 000000000..51d6a84c0
--- /dev/null
+++ b/docs/de/griefed/serverpackcreator/CreateServerPack.html
@@ -0,0 +1,962 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="de">
+<head>
+<!-- Generated by javadoc -->
+<title>CreateServerPack (serverpackcreator API)</title>
+<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="CreateServerPack (serverpackcreator API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10};
+var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../index-all.html">Index</a></li>
+<li><a href="../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../index.html?de/griefed/serverpackcreator/CreateServerPack.html" target="_top">Frames</a></li>
+<li><a href="CreateServerPack.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">de.griefed.serverpackcreator</div>
+<h2 title="Class CreateServerPack" class="title">Class CreateServerPack</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li>java.lang.Object</li>
+<li>
+<ul class="inheritance">
+<li>de.griefed.serverpackcreator.CreateServerPack</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre>public class <span class="typeNameLabel">CreateServerPack</span>
+extends java.lang.Object</pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private static org.apache.logging.log4j.Logger</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#appLogger">appLogger</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#configuration">configuration</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private java.io.File</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#fabricLinuxFile">fabricLinuxFile</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private java.io.File</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#fabricWindowsFile">fabricWindowsFile</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private java.io.File</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#forgeLinuxFile">forgeLinuxFile</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private java.io.File</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#forgeWindowsFile">forgeWindowsFile</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private java.io.File</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#iconFile">iconFile</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static org.apache.logging.log4j.Logger</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#installerLogger">installerLogger</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#localizationManager">localizationManager</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private java.io.File</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#propertiesFile">propertiesFile</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#CreateServerPack-de.griefed.serverpackcreator.i18n.LocalizationManager-de.griefed.serverpackcreator.Configuration-">CreateServerPack</a></span>(<a href="../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a>&nbsp;injectedLocalizationManager,
+                <a href="../../../de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a>&nbsp;injectedConfigCheck)</code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>(package private) void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#cleanupEnvironment-java.lang.String-">cleanupEnvironment</a></span>(java.lang.String&nbsp;modpackDir)</code>
+<div class="block">Deletes files from previous runs of serverpackcreator.</div>
+</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>(package private) void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#cleanUpServerPack-java.io.File-java.io.File-java.lang.String-java.lang.String-java.lang.String-java.lang.String-">cleanUpServerPack</a></span>(java.io.File&nbsp;fabricInstaller,
+                 java.io.File&nbsp;forgeInstaller,
+                 java.lang.String&nbsp;modLoader,
+                 java.lang.String&nbsp;modpackDir,
+                 java.lang.String&nbsp;minecraftVersion,
+                 java.lang.String&nbsp;modLoaderVersion)</code>
+<div class="block">Deletes remnant files from Fabric/Forge installation no longer needed.</div>
+</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code>(package private) void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#copyFiles-java.lang.String-java.util.List-java.util.List-">copyFiles</a></span>(java.lang.String&nbsp;modpackDir,
+         java.util.List&lt;java.lang.String&gt;&nbsp;copyDirs,
+         java.util.List&lt;java.lang.String&gt;&nbsp;clientMods)</code>
+<div class="block">Copies all specified folders and their files to the modpackDir.</div>
+</td>
+</tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code>(package private) void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#copyIcon-java.lang.String-">copyIcon</a></span>(java.lang.String&nbsp;modpackDir)</code>
+<div class="block">Copies the server-icon.png into server_pack.</div>
+</td>
+</tr>
+<tr id="i4" class="altColor">
+<td class="colFirst"><code>(package private) void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#copyProperties-java.lang.String-">copyProperties</a></span>(java.lang.String&nbsp;modpackDir)</code>
+<div class="block">Copies the server.properties into server_pack.</div>
+</td>
+</tr>
+<tr id="i5" class="rowColor">
+<td class="colFirst"><code>(package private) void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#copyStartScripts-java.lang.String-java.lang.String-boolean-">copyStartScripts</a></span>(java.lang.String&nbsp;modpackDir,
+                java.lang.String&nbsp;modLoader,
+                boolean&nbsp;includeStartScripts)</code>
+<div class="block">Copies start scripts for Forge modloader into the server_pack folder.</div>
+</td>
+</tr>
+<tr id="i6" class="altColor">
+<td class="colFirst"><code>(package private) void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#deleteMinecraftJar-java.lang.String-java.lang.String-java.lang.String-">deleteMinecraftJar</a></span>(java.lang.String&nbsp;modLoader,
+                  java.lang.String&nbsp;modpackDir,
+                  java.lang.String&nbsp;minecraftVersion)</code>
+<div class="block">Deletes Mojang's minecraft_server.jar from the zip-archive so users do not accidentally upload a file containing software from Mojang.</div>
+</td>
+</tr>
+<tr id="i7" class="rowColor">
+<td class="colFirst"><code>(package private) boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#downloadFabricJar-java.lang.String-">downloadFabricJar</a></span>(java.lang.String&nbsp;modpackDir)</code>
+<div class="block">Downloads the specified version of Fabric.</div>
+</td>
+</tr>
+<tr id="i8" class="altColor">
+<td class="colFirst"><code>(package private) boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#downloadForgeJar-java.lang.String-java.lang.String-java.lang.String-">downloadForgeJar</a></span>(java.lang.String&nbsp;minecraftVersion,
+                java.lang.String&nbsp;modLoaderVersion,
+                java.lang.String&nbsp;modpackDir)</code>
+<div class="block">Downloads the specified version of the Forge installer to be used in ServerSetup.installServer.</div>
+</td>
+</tr>
+<tr id="i9" class="rowColor">
+<td class="colFirst"><code>(package private) java.util.List&lt;java.lang.String&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#excludeClientMods-java.lang.String-java.util.List-">excludeClientMods</a></span>(java.lang.String&nbsp;modsDir,
+                 java.util.List&lt;java.lang.String&gt;&nbsp;clientMods)</code>
+<div class="block">Generate a list of all mods in a modpack EXCEPT clientside-only mods.</div>
+</td>
+</tr>
+<tr id="i10" class="altColor">
+<td class="colFirst"><code>(package private) void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#fabricBatch-java.lang.String-java.lang.String-">fabricBatch</a></span>(java.lang.String&nbsp;modpackDir,
+           java.lang.String&nbsp;minecraftVersion)</code>
+<div class="block">Generates download scripts for Mojang's Minecraft server for Fabric,Windows.</div>
+</td>
+</tr>
+<tr id="i11" class="rowColor">
+<td class="colFirst"><code>(package private) void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#fabricShell-java.lang.String-java.lang.String-">fabricShell</a></span>(java.lang.String&nbsp;modpackDir,
+           java.lang.String&nbsp;minecraftVersion)</code>
+<div class="block">Generates download scripts for Mojang's Minecraft server for Fabric,Linux.</div>
+</td>
+</tr>
+<tr id="i12" class="altColor">
+<td class="colFirst"><code>(package private) void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#forgeBatch-java.lang.String-java.lang.String-">forgeBatch</a></span>(java.lang.String&nbsp;modpackDir,
+          java.lang.String&nbsp;minecraftVersion)</code>
+<div class="block">Generates download scripts for Mojang's Minecraft server for Forge,Windows.</div>
+</td>
+</tr>
+<tr id="i13" class="rowColor">
+<td class="colFirst"><code>(package private) void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#forgeShell-java.lang.String-java.lang.String-">forgeShell</a></span>(java.lang.String&nbsp;modpackDir,
+          java.lang.String&nbsp;minecraftVersion)</code>
+<div class="block">Generates download scripts for Mojang's Minecraft server for Forge,Linux.</div>
+</td>
+</tr>
+<tr id="i14" class="altColor">
+<td class="colFirst"><code>(package private) void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#generateDownloadScripts-java.lang.String-java.lang.String-java.lang.String-">generateDownloadScripts</a></span>(java.lang.String&nbsp;modLoader,
+                       java.lang.String&nbsp;modpackDir,
+                       java.lang.String&nbsp;minecraftVersion)</code>
+<div class="block">Calls methods for generating download scripts for Mojang's Minecraft server depending on the specified versions and modloader.</div>
+</td>
+</tr>
+<tr id="i15" class="rowColor">
+<td class="colFirst"><code>java.io.File</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#getFabricLinuxFile--">getFabricLinuxFile</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i16" class="altColor">
+<td class="colFirst"><code>java.io.File</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#getFabricWindowsFile--">getFabricWindowsFile</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i17" class="rowColor">
+<td class="colFirst"><code>java.io.File</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#getForgeLinuxFile--">getForgeLinuxFile</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i18" class="altColor">
+<td class="colFirst"><code>java.io.File</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#getForgeWindowsFile--">getForgeWindowsFile</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i19" class="rowColor">
+<td class="colFirst"><code>java.io.File</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#getIconFile--">getIconFile</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i20" class="altColor">
+<td class="colFirst"><code>java.io.File</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#getPropertiesFile--">getPropertiesFile</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i21" class="rowColor">
+<td class="colFirst"><code>(package private) void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#installServer-java.lang.String-java.lang.String-java.lang.String-java.lang.String-java.lang.String-">installServer</a></span>(java.lang.String&nbsp;modLoader,
+             java.lang.String&nbsp;modpackDir,
+             java.lang.String&nbsp;minecraftVersion,
+             java.lang.String&nbsp;modLoaderVersion,
+             java.lang.String&nbsp;javaPath)</code>
+<div class="block">Installs the files for a Forge/Fabric server.</div>
+</td>
+</tr>
+<tr id="i22" class="altColor">
+<td class="colFirst"><code>(package private) java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#latestFabricInstaller-java.lang.String-">latestFabricInstaller</a></span>(java.lang.String&nbsp;modpackDir)</code>
+<div class="block">Returns the latest installer version for the Fabric installer to be used in ServerSetup.installServer.</div>
+</td>
+</tr>
+<tr id="i23" class="rowColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#run--">run</a></span>()</code>
+<div class="block">Run when serverpackcreator is run in either -cli or -cgen mode.</div>
+</td>
+</tr>
+<tr id="i24" class="altColor">
+<td class="colFirst"><code>(package private) void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#zipBuilder-java.lang.String-java.lang.String-java.lang.Boolean-java.lang.String-">zipBuilder</a></span>(java.lang.String&nbsp;modpackDir,
+          java.lang.String&nbsp;modLoader,
+          java.lang.Boolean&nbsp;includeServerInstallation,
+          java.lang.String&nbsp;minecraftVersion)</code>
+<div class="block">Create a zip-archive of the serverpack, excluding Mojang's minecraft_server.jar.</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
+<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!--   -->
+</a>
+<h3>Field Detail</h3>
+<a name="appLogger">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>appLogger</h4>
+<pre>private static final&nbsp;org.apache.logging.log4j.Logger appLogger</pre>
+</li>
+</ul>
+<a name="installerLogger">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>installerLogger</h4>
+<pre>private static final&nbsp;org.apache.logging.log4j.Logger installerLogger</pre>
+</li>
+</ul>
+<a name="configuration">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>configuration</h4>
+<pre>private&nbsp;<a href="../../../de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a> configuration</pre>
+</li>
+</ul>
+<a name="localizationManager">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>localizationManager</h4>
+<pre>private&nbsp;<a href="../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a> localizationManager</pre>
+</li>
+</ul>
+<a name="propertiesFile">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>propertiesFile</h4>
+<pre>private final&nbsp;java.io.File propertiesFile</pre>
+</li>
+</ul>
+<a name="iconFile">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>iconFile</h4>
+<pre>private final&nbsp;java.io.File iconFile</pre>
+</li>
+</ul>
+<a name="forgeWindowsFile">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>forgeWindowsFile</h4>
+<pre>private final&nbsp;java.io.File forgeWindowsFile</pre>
+</li>
+</ul>
+<a name="forgeLinuxFile">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>forgeLinuxFile</h4>
+<pre>private final&nbsp;java.io.File forgeLinuxFile</pre>
+</li>
+</ul>
+<a name="fabricWindowsFile">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>fabricWindowsFile</h4>
+<pre>private final&nbsp;java.io.File fabricWindowsFile</pre>
+</li>
+</ul>
+<a name="fabricLinuxFile">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>fabricLinuxFile</h4>
+<pre>private final&nbsp;java.io.File fabricLinuxFile</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="CreateServerPack-de.griefed.serverpackcreator.i18n.LocalizationManager-de.griefed.serverpackcreator.Configuration-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>CreateServerPack</h4>
+<pre>public&nbsp;CreateServerPack(<a href="../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a>&nbsp;injectedLocalizationManager,
+                        <a href="../../../de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a>&nbsp;injectedConfigCheck)</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="getPropertiesFile--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getPropertiesFile</h4>
+<pre>public&nbsp;java.io.File&nbsp;getPropertiesFile()</pre>
+</li>
+</ul>
+<a name="getIconFile--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getIconFile</h4>
+<pre>public&nbsp;java.io.File&nbsp;getIconFile()</pre>
+</li>
+</ul>
+<a name="getForgeWindowsFile--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getForgeWindowsFile</h4>
+<pre>public&nbsp;java.io.File&nbsp;getForgeWindowsFile()</pre>
+</li>
+</ul>
+<a name="getForgeLinuxFile--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getForgeLinuxFile</h4>
+<pre>public&nbsp;java.io.File&nbsp;getForgeLinuxFile()</pre>
+</li>
+</ul>
+<a name="getFabricWindowsFile--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getFabricWindowsFile</h4>
+<pre>public&nbsp;java.io.File&nbsp;getFabricWindowsFile()</pre>
+</li>
+</ul>
+<a name="getFabricLinuxFile--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getFabricLinuxFile</h4>
+<pre>public&nbsp;java.io.File&nbsp;getFabricLinuxFile()</pre>
+</li>
+</ul>
+<a name="run--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>run</h4>
+<pre>public&nbsp;boolean&nbsp;run()</pre>
+<div class="block">Run when serverpackcreator is run in either -cli or -cgen mode. Runs what used to be the main content in Main in pre-1.x.x. times. Inits config checks and, if config checks are successfull, calls methods to create the server pack.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Return true if the serverpack was successfully generated, false if not.</dd>
+</dl>
+</li>
+</ul>
+<a name="cleanupEnvironment-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>cleanupEnvironment</h4>
+<pre>void&nbsp;cleanupEnvironment(java.lang.String&nbsp;modpackDir)</pre>
+<div class="block">Deletes files from previous runs of serverpackcreator.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>modpackDir</code> - String. The directory in where to check for files from previous runs.</dd>
+</dl>
+</li>
+</ul>
+<a name="copyStartScripts-java.lang.String-java.lang.String-boolean-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>copyStartScripts</h4>
+<pre>void&nbsp;copyStartScripts(java.lang.String&nbsp;modpackDir,
+                      java.lang.String&nbsp;modLoader,
+                      boolean&nbsp;includeStartScripts)</pre>
+<div class="block">Copies start scripts for Forge modloader into the server_pack folder.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>modpackDir</code> - String. Files will be copied into subfolder server_pack. Checks for valid modpackDir are in ConfigCheck.</dd>
+<dd><code>modLoader</code> - String. Determines whether start scripts for Forge or Fabric are copied to modpackDir. Checks for valid modLoader are in ConfigCheck.</dd>
+<dd><code>includeStartScripts</code> - Boolean. Whether to include start scripts in server_pack. Boolean.</dd>
+</dl>
+</li>
+</ul>
+<a name="copyFiles-java.lang.String-java.util.List-java.util.List-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>copyFiles</h4>
+<pre>void&nbsp;copyFiles(java.lang.String&nbsp;modpackDir,
+               java.util.List&lt;java.lang.String&gt;&nbsp;copyDirs,
+               java.util.List&lt;java.lang.String&gt;&nbsp;clientMods)
+        throws java.io.IOException</pre>
+<div class="block">Copies all specified folders and their files to the modpackDir.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>modpackDir</code> - String. /server_pack. Directory where all directories listed in copyDirs will be copied into.</dd>
+<dd><code>copyDirs</code> - String List. The folders and files within to copy.</dd>
+<dd><code>clientMods</code> - String List. List of clientside-only mods NOT to copy to server pack.</dd>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code>java.io.IOException</code> - Only print stacktrace if it does not start with java.nio.file.DirectoryNotEmptyException.</dd>
+</dl>
+</li>
+</ul>
+<a name="excludeClientMods-java.lang.String-java.util.List-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>excludeClientMods</h4>
+<pre>java.util.List&lt;java.lang.String&gt;&nbsp;excludeClientMods(java.lang.String&nbsp;modsDir,
+                                                   java.util.List&lt;java.lang.String&gt;&nbsp;clientMods)</pre>
+<div class="block">Generate a list of all mods in a modpack EXCEPT clientside-only mods. This list is then used by copyFiles.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>modsDir</code> - String. /mods The directory in which to generate a list of all available mods.</dd>
+<dd><code>clientMods</code> - List String. A list of all clientside-only mods passed by copyFiles, which is then removed from the list generated in this method.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>List String. A list of all mods inside the modpack excluding the specified clientside-only mods.</dd>
+</dl>
+</li>
+</ul>
+<a name="copyIcon-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>copyIcon</h4>
+<pre>void&nbsp;copyIcon(java.lang.String&nbsp;modpackDir)</pre>
+<div class="block">Copies the server-icon.png into server_pack.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>modpackDir</code> - String. /server_pack. Directory where the server-icon.png will be copied to.</dd>
+</dl>
+</li>
+</ul>
+<a name="copyProperties-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>copyProperties</h4>
+<pre>void&nbsp;copyProperties(java.lang.String&nbsp;modpackDir)</pre>
+<div class="block">Copies the server.properties into server_pack.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>modpackDir</code> - String. /server_pack. Directory where the server.properties. will be copied to.</dd>
+</dl>
+</li>
+</ul>
+<a name="installServer-java.lang.String-java.lang.String-java.lang.String-java.lang.String-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>installServer</h4>
+<pre>void&nbsp;installServer(java.lang.String&nbsp;modLoader,
+                   java.lang.String&nbsp;modpackDir,
+                   java.lang.String&nbsp;minecraftVersion,
+                   java.lang.String&nbsp;modLoaderVersion,
+                   java.lang.String&nbsp;javaPath)</pre>
+<div class="block">Installs the files for a Forge/Fabric server.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>modLoader</code> - String. The modloader for which to install the server.</dd>
+<dd><code>modpackDir</code> - String. /server_pack The directory where the modloader server will be installed in.</dd>
+<dd><code>minecraftVersion</code> - String. The Minecraft version for which to install the modloader and Minecraft server.</dd>
+<dd><code>modLoaderVersion</code> - String. The modloader version for which to install the modloader and Minecraft server.</dd>
+<dd><code>javaPath</code> - String. Path to Java installation needed to execute the Fabric and Forge installers.</dd>
+</dl>
+</li>
+</ul>
+<a name="zipBuilder-java.lang.String-java.lang.String-java.lang.Boolean-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>zipBuilder</h4>
+<pre>void&nbsp;zipBuilder(java.lang.String&nbsp;modpackDir,
+                java.lang.String&nbsp;modLoader,
+                java.lang.Boolean&nbsp;includeServerInstallation,
+                java.lang.String&nbsp;minecraftVersion)</pre>
+<div class="block">Create a zip-archive of the serverpack, excluding Mojang's minecraft_server.jar.
+ With help from https://stackoverflow.com/questions/1091788/how-to-create-a-zip-file-in-java</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>modpackDir</code> - String. The directory where the zip-archive will be created and saved in.</dd>
+<dd><code>modLoader</code> - String. Determines the name of Minecraft#s server jar which will be deleted from the zip-archive.</dd>
+<dd><code>includeServerInstallation</code> - Boolean. Determines whether the Minecraft server jar needs to be deleted from the zip-archive.</dd>
+<dd><code>minecraftVersion</code> - String. The Minecraft version of which to delete the server jar. Used if modloader is Forge.</dd>
+</dl>
+</li>
+</ul>
+<a name="generateDownloadScripts-java.lang.String-java.lang.String-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>generateDownloadScripts</h4>
+<pre>void&nbsp;generateDownloadScripts(java.lang.String&nbsp;modLoader,
+                             java.lang.String&nbsp;modpackDir,
+                             java.lang.String&nbsp;minecraftVersion)</pre>
+<div class="block">Calls methods for generating download scripts for Mojang's Minecraft server depending on the specified versions and modloader.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>modLoader</code> - String. The specified modloader determines the name under which Mojang's server jar will be downloaded as.</dd>
+<dd><code>modpackDir</code> - String. /server_pack The directory where the scripts will be placed in.</dd>
+<dd><code>minecraftVersion</code> - String. The version of the Minecraft server jar to download.</dd>
+</dl>
+</li>
+</ul>
+<a name="fabricShell-java.lang.String-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>fabricShell</h4>
+<pre>void&nbsp;fabricShell(java.lang.String&nbsp;modpackDir,
+                 java.lang.String&nbsp;minecraftVersion)</pre>
+<div class="block">Generates download scripts for Mojang's Minecraft server for Fabric,Linux.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>modpackDir</code> - String. /server_pack The directory where the scripts will be placed in.</dd>
+<dd><code>minecraftVersion</code> - String. The version of the Minecraft server jar to download.</dd>
+</dl>
+</li>
+</ul>
+<a name="fabricBatch-java.lang.String-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>fabricBatch</h4>
+<pre>void&nbsp;fabricBatch(java.lang.String&nbsp;modpackDir,
+                 java.lang.String&nbsp;minecraftVersion)</pre>
+<div class="block">Generates download scripts for Mojang's Minecraft server for Fabric,Windows.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>modpackDir</code> - String. /server_pack The directory where the scripts will be placed in.</dd>
+<dd><code>minecraftVersion</code> - String. The version of the Minecraft server jar to download.</dd>
+</dl>
+</li>
+</ul>
+<a name="forgeShell-java.lang.String-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>forgeShell</h4>
+<pre>void&nbsp;forgeShell(java.lang.String&nbsp;modpackDir,
+                java.lang.String&nbsp;minecraftVersion)</pre>
+<div class="block">Generates download scripts for Mojang's Minecraft server for Forge,Linux.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>modpackDir</code> - String. /server_pack The directory where the scripts will be placed in.</dd>
+<dd><code>minecraftVersion</code> - String. The version of the Minecraft server jar to download.</dd>
+</dl>
+</li>
+</ul>
+<a name="forgeBatch-java.lang.String-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>forgeBatch</h4>
+<pre>void&nbsp;forgeBatch(java.lang.String&nbsp;modpackDir,
+                java.lang.String&nbsp;minecraftVersion)</pre>
+<div class="block">Generates download scripts for Mojang's Minecraft server for Forge,Windows.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>modpackDir</code> - String. /server_pack The directory where the scripts will be placed in.</dd>
+<dd><code>minecraftVersion</code> - String. The version of the Minecraft server jar to download.</dd>
+</dl>
+</li>
+</ul>
+<a name="downloadFabricJar-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>downloadFabricJar</h4>
+<pre>boolean&nbsp;downloadFabricJar(java.lang.String&nbsp;modpackDir)</pre>
+<div class="block">Downloads the specified version of Fabric.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>modpackDir</code> - String. /server_pack The directory where the Fabric installer will be placed in.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Boolean. Returns true if the download was successful. False if not.</dd>
+</dl>
+</li>
+</ul>
+<a name="latestFabricInstaller-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>latestFabricInstaller</h4>
+<pre>java.lang.String&nbsp;latestFabricInstaller(java.lang.String&nbsp;modpackDir)</pre>
+<div class="block">Returns the latest installer version for the Fabric installer to be used in ServerSetup.installServer.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>modpackDir</code> - String. /server_pack The directory where the Fabric installer will be placed in.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Boolean. Returns true if the download was successful. False if not.</dd>
+</dl>
+</li>
+</ul>
+<a name="downloadForgeJar-java.lang.String-java.lang.String-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>downloadForgeJar</h4>
+<pre>boolean&nbsp;downloadForgeJar(java.lang.String&nbsp;minecraftVersion,
+                         java.lang.String&nbsp;modLoaderVersion,
+                         java.lang.String&nbsp;modpackDir)</pre>
+<div class="block">Downloads the specified version of the Forge installer to be used in ServerSetup.installServer.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>minecraftVersion</code> - String. The Minecraft version corresponding to the Forge version. Minecraft version and Forge version build a pair.</dd>
+<dd><code>modLoaderVersion</code> - String. The Forge version corresponding to the Minecraft version. Minecraft version and Forge version build a pair.</dd>
+<dd><code>modpackDir</code> - String. /server_pack The directory where the Forge installer will be placed in.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Boolean. Returns true if the download was successful. False if not.</dd>
+</dl>
+</li>
+</ul>
+<a name="deleteMinecraftJar-java.lang.String-java.lang.String-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>deleteMinecraftJar</h4>
+<pre>void&nbsp;deleteMinecraftJar(java.lang.String&nbsp;modLoader,
+                        java.lang.String&nbsp;modpackDir,
+                        java.lang.String&nbsp;minecraftVersion)</pre>
+<div class="block">Deletes Mojang's minecraft_server.jar from the zip-archive so users do not accidentally upload a file containing software from Mojang.
+ With help from https://stackoverflow.com/questions/5244963/delete-files-from-a-zip-archive-without-decompressing-in-java-or-maybe-python and https://bugs.openjdk.java.net/browse/JDK-8186227</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>modLoader</code> - String. Determines the name of the file to delete.</dd>
+<dd><code>modpackDir</code> - String. /server_pack The directory in which the file will be deleted.</dd>
+<dd><code>minecraftVersion</code> - String. The Minecraft version of which to delete the server jar. Used if modloader is Forge.</dd>
+</dl>
+</li>
+</ul>
+<a name="cleanUpServerPack-java.io.File-java.io.File-java.lang.String-java.lang.String-java.lang.String-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>cleanUpServerPack</h4>
+<pre>void&nbsp;cleanUpServerPack(java.io.File&nbsp;fabricInstaller,
+                       java.io.File&nbsp;forgeInstaller,
+                       java.lang.String&nbsp;modLoader,
+                       java.lang.String&nbsp;modpackDir,
+                       java.lang.String&nbsp;minecraftVersion,
+                       java.lang.String&nbsp;modLoaderVersion)</pre>
+<div class="block">Deletes remnant files from Fabric/Forge installation no longer needed.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>fabricInstaller</code> - File. Fabric installer to be deleted.</dd>
+<dd><code>forgeInstaller</code> - File. Forge installer to be deleted.</dd>
+<dd><code>modLoader</code> - String. Whether Forge or Fabric files are to be deleted.</dd>
+<dd><code>modpackDir</code> - String. /server_pack The directory where files are to be deleted.</dd>
+<dd><code>minecraftVersion</code> - String. Needed for renaming the Forge server jar to work with launch scripts provided by serverpackcreator.</dd>
+<dd><code>modLoaderVersion</code> - String. Needed for renaming the Forge server jar to work with launch scripts provided by serverpackcreator.</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../index-all.html">Index</a></li>
+<li><a href="../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../index.html?de/griefed/serverpackcreator/CreateServerPack.html" target="_top">Frames</a></li>
+<li><a href="CreateServerPack.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li>Nested&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/docs/de/griefed/serverpackcreator/FilesSetup.html b/docs/de/griefed/serverpackcreator/FilesSetup.html
index f962fe428..34c6204fe 100644
--- a/docs/de/griefed/serverpackcreator/FilesSetup.html
+++ b/docs/de/griefed/serverpackcreator/FilesSetup.html
@@ -17,8 +17,8 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":9,"i8":10,"i9":10,"i10":9};
-var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10};
+var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
 var tableTab = "tableTab";
@@ -47,8 +47,8 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../de/griefed/serverpackcreator/CopyFiles.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../de/griefed/serverpackcreator/Handler.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../de/griefed/serverpackcreator/Main.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../index.html?de/griefed/serverpackcreator/FilesSetup.html" target="_top">Frames</a></li>
@@ -131,6 +131,42 @@ extends java.lang.Object</pre>
 <td class="colFirst"><code>private static org.apache.logging.log4j.Logger</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/FilesSetup.html#appLogger">appLogger</a></span></code>&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private java.io.File</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/FilesSetup.html#configFile">configFile</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private java.io.File</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/FilesSetup.html#fabricLinuxFile">fabricLinuxFile</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private java.io.File</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/FilesSetup.html#fabricWindowsFile">fabricWindowsFile</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private java.io.File</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/FilesSetup.html#forgeLinuxFile">forgeLinuxFile</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private java.io.File</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/FilesSetup.html#forgeWindowsFile">forgeWindowsFile</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private java.io.File</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/FilesSetup.html#iconFile">iconFile</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/FilesSetup.html#localizationManager">localizationManager</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private java.io.File</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/FilesSetup.html#oldConfigFile">oldConfigFile</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private java.io.File</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/FilesSetup.html#propertiesFile">propertiesFile</a></span></code>&nbsp;</td>
+</tr>
 </table>
 </li>
 </ul>
@@ -146,7 +182,7 @@ extends java.lang.Object</pre>
 <th class="colOne" scope="col">Constructor and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/FilesSetup.html#FilesSetup--">FilesSetup</a></span>()</code>&nbsp;</td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/FilesSetup.html#FilesSetup-de.griefed.serverpackcreator.i18n.LocalizationManager-">FilesSetup</a></span>(<a href="../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a>&nbsp;injectedLocalizationManager)</code>&nbsp;</td>
 </tr>
 </table>
 </li>
@@ -158,7 +194,7 @@ extends java.lang.Object</pre>
 </a>
 <h3>Method Summary</h3>
 <table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
-<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
 <tr>
 <th class="colFirst" scope="col">Modifier and Type</th>
 <th class="colLast" scope="col">Method and Description</th>
@@ -206,41 +242,42 @@ extends java.lang.Object</pre>
 </td>
 </tr>
 <tr id="i7" class="rowColor">
-<td class="colFirst"><code>static boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/FilesSetup.html#checkLocaleFile--">checkLocaleFile</a></span>()</code>
-<div class="block">Check for existence of a lang.properties-file and if found assign language specified therein.</div>
-</td>
-</tr>
-<tr id="i8" class="altColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/FilesSetup.html#filesSetup--">filesSetup</a></span>()</code>
 <div class="block">Calls individual methods which check for existence of default files.</div>
 </td>
 </tr>
+<tr id="i8" class="altColor">
+<td class="colFirst"><code>java.io.File</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/FilesSetup.html#getConfigFile--">getConfigFile</a></span>()</code>&nbsp;</td>
+</tr>
 <tr id="i9" class="rowColor">
-<td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/FilesSetup.html#writeConfigToFile-java.lang.String-java.lang.String-java.lang.String-boolean-java.lang.String-java.lang.String-java.lang.String-java.lang.String-boolean-boolean-boolean-boolean-java.io.File-boolean-">writeConfigToFile</a></span>(java.lang.String&nbsp;modpackDir,
-                 java.lang.String&nbsp;clientMods,
-                 java.lang.String&nbsp;copyDirs,
-                 boolean&nbsp;includeServer,
-                 java.lang.String&nbsp;javaPath,
-                 java.lang.String&nbsp;minecraftVersion,
-                 java.lang.String&nbsp;modLoader,
-                 java.lang.String&nbsp;modLoaderVersion,
-                 boolean&nbsp;includeIcon,
-                 boolean&nbsp;includeProperties,
-                 boolean&nbsp;includeScripts,
-                 boolean&nbsp;includeZip,
-                 java.io.File&nbsp;fileName,
-                 boolean&nbsp;isTemporary)</code>
-<div class="block">Writes a new configuration file with the parameters passed to it.</div>
-</td>
+<td class="colFirst"><code>java.io.File</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/FilesSetup.html#getFabricLinuxFile--">getFabricLinuxFile</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i10" class="altColor">
-<td class="colFirst"><code>static void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/FilesSetup.html#writeLocaleToFile-java.lang.String-">writeLocaleToFile</a></span>(java.lang.String&nbsp;locale)</code>
-<div class="block">Writes the specified locale from -lang your_locale to a lang.properties file to ensure every subsequent start of serverpackcreator is executed using said locale.</div>
-</td>
+<td class="colFirst"><code>java.io.File</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/FilesSetup.html#getFabricWindowsFile--">getFabricWindowsFile</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i11" class="rowColor">
+<td class="colFirst"><code>java.io.File</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/FilesSetup.html#getForgeLinuxFile--">getForgeLinuxFile</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i12" class="altColor">
+<td class="colFirst"><code>java.io.File</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/FilesSetup.html#getForgeWindowsFile--">getForgeWindowsFile</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i13" class="rowColor">
+<td class="colFirst"><code>java.io.File</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/FilesSetup.html#getIconFile--">getIconFile</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i14" class="altColor">
+<td class="colFirst"><code>java.io.File</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/FilesSetup.html#getOldConfigFile--">getOldConfigFile</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i15" class="rowColor">
+<td class="colFirst"><code>java.io.File</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/FilesSetup.html#getPropertiesFile--">getPropertiesFile</a></span>()</code>&nbsp;</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -267,12 +304,93 @@ extends java.lang.Object</pre>
 <a name="appLogger">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>appLogger</h4>
 <pre>private static final&nbsp;org.apache.logging.log4j.Logger appLogger</pre>
 </li>
 </ul>
+<a name="configFile">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>configFile</h4>
+<pre>private final&nbsp;java.io.File configFile</pre>
+</li>
+</ul>
+<a name="oldConfigFile">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>oldConfigFile</h4>
+<pre>private final&nbsp;java.io.File oldConfigFile</pre>
+</li>
+</ul>
+<a name="propertiesFile">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>propertiesFile</h4>
+<pre>private final&nbsp;java.io.File propertiesFile</pre>
+</li>
+</ul>
+<a name="iconFile">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>iconFile</h4>
+<pre>private final&nbsp;java.io.File iconFile</pre>
+</li>
+</ul>
+<a name="forgeWindowsFile">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>forgeWindowsFile</h4>
+<pre>private final&nbsp;java.io.File forgeWindowsFile</pre>
+</li>
+</ul>
+<a name="forgeLinuxFile">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>forgeLinuxFile</h4>
+<pre>private final&nbsp;java.io.File forgeLinuxFile</pre>
+</li>
+</ul>
+<a name="fabricWindowsFile">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>fabricWindowsFile</h4>
+<pre>private final&nbsp;java.io.File fabricWindowsFile</pre>
+</li>
+</ul>
+<a name="fabricLinuxFile">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>fabricLinuxFile</h4>
+<pre>private final&nbsp;java.io.File fabricLinuxFile</pre>
+</li>
+</ul>
+<a name="localizationManager">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>localizationManager</h4>
+<pre>private&nbsp;<a href="../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a> localizationManager</pre>
+</li>
+</ul>
 </li>
 </ul>
 <!-- ========= CONSTRUCTOR DETAIL ======== -->
@@ -281,13 +399,13 @@ extends java.lang.Object</pre>
 <!--   -->
 </a>
 <h3>Constructor Detail</h3>
-<a name="FilesSetup--">
+<a name="FilesSetup-de.griefed.serverpackcreator.i18n.LocalizationManager-">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>FilesSetup</h4>
-<pre>public&nbsp;FilesSetup()</pre>
+<pre>public&nbsp;FilesSetup(<a href="../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a>&nbsp;injectedLocalizationManager)</pre>
 </li>
 </ul>
 </li>
@@ -298,6 +416,78 @@ extends java.lang.Object</pre>
 <!--   -->
 </a>
 <h3>Method Detail</h3>
+<a name="getConfigFile--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getConfigFile</h4>
+<pre>public&nbsp;java.io.File&nbsp;getConfigFile()</pre>
+</li>
+</ul>
+<a name="getOldConfigFile--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getOldConfigFile</h4>
+<pre>public&nbsp;java.io.File&nbsp;getOldConfigFile()</pre>
+</li>
+</ul>
+<a name="getPropertiesFile--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getPropertiesFile</h4>
+<pre>public&nbsp;java.io.File&nbsp;getPropertiesFile()</pre>
+</li>
+</ul>
+<a name="getIconFile--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getIconFile</h4>
+<pre>public&nbsp;java.io.File&nbsp;getIconFile()</pre>
+</li>
+</ul>
+<a name="getForgeWindowsFile--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getForgeWindowsFile</h4>
+<pre>public&nbsp;java.io.File&nbsp;getForgeWindowsFile()</pre>
+</li>
+</ul>
+<a name="getForgeLinuxFile--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getForgeLinuxFile</h4>
+<pre>public&nbsp;java.io.File&nbsp;getForgeLinuxFile()</pre>
+</li>
+</ul>
+<a name="getFabricWindowsFile--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getFabricWindowsFile</h4>
+<pre>public&nbsp;java.io.File&nbsp;getFabricWindowsFile()</pre>
+</li>
+</ul>
+<a name="getFabricLinuxFile--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getFabricLinuxFile</h4>
+<pre>public&nbsp;java.io.File&nbsp;getFabricLinuxFile()</pre>
+</li>
+</ul>
 <a name="filesSetup--">
 <!--   -->
 </a>
@@ -395,7 +585,7 @@ extends java.lang.Object</pre>
 <a name="checkForIcon--">
 <!--   -->
 </a>
-<ul class="blockList">
+<ul class="blockListLast">
 <li class="blockList">
 <h4>checkForIcon</h4>
 <pre>boolean&nbsp;checkForIcon()</pre>
@@ -406,78 +596,6 @@ extends java.lang.Object</pre>
 </dl>
 </li>
 </ul>
-<a name="checkLocaleFile--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>checkLocaleFile</h4>
-<pre>public static&nbsp;boolean&nbsp;checkLocaleFile()</pre>
-<div class="block">Check for existence of a lang.properties-file and if found assign language specified therein. If assigning the specified language fails because it is not supported, default to en_US.
- This method should not contain the Localizationmanager, as the initialization of said manager is called from here. Therefore, localized string are not yet available.</div>
-<dl>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>Always returns true. Dirty hack until I one day figure out how to init Localization before UI start correctly.</dd>
-</dl>
-</li>
-</ul>
-<a name="writeLocaleToFile-java.lang.String-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>writeLocaleToFile</h4>
-<pre>public static&nbsp;void&nbsp;writeLocaleToFile(java.lang.String&nbsp;locale)</pre>
-<div class="block">Writes the specified locale from -lang your_locale to a lang.properties file to ensure every subsequent start of serverpackcreator is executed using said locale.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>locale</code> - The locale the user specified when they ran serverpackcreator with -lang -your_locale.
- This method should not contain the Localizationmanager, as the initialization of said manager is called from here. Therefore, localized string are not yet available.</dd>
-</dl>
-</li>
-</ul>
-<a name="writeConfigToFile-java.lang.String-java.lang.String-java.lang.String-boolean-java.lang.String-java.lang.String-java.lang.String-java.lang.String-boolean-boolean-boolean-boolean-java.io.File-boolean-">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>writeConfigToFile</h4>
-<pre>public&nbsp;boolean&nbsp;writeConfigToFile(java.lang.String&nbsp;modpackDir,
-                                 java.lang.String&nbsp;clientMods,
-                                 java.lang.String&nbsp;copyDirs,
-                                 boolean&nbsp;includeServer,
-                                 java.lang.String&nbsp;javaPath,
-                                 java.lang.String&nbsp;minecraftVersion,
-                                 java.lang.String&nbsp;modLoader,
-                                 java.lang.String&nbsp;modLoaderVersion,
-                                 boolean&nbsp;includeIcon,
-                                 boolean&nbsp;includeProperties,
-                                 boolean&nbsp;includeScripts,
-                                 boolean&nbsp;includeZip,
-                                 java.io.File&nbsp;fileName,
-                                 boolean&nbsp;isTemporary)</pre>
-<div class="block">Writes a new configuration file with the parameters passed to it.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modpackDir</code> - String. The path to the modpack.</dd>
-<dd><code>clientMods</code> - List, String. List of clientside-only mods.</dd>
-<dd><code>copyDirs</code> - List, String. List of directories to include in server pack.</dd>
-<dd><code>includeServer</code> - Boolean. Whether to include a modloader server installation.</dd>
-<dd><code>javaPath</code> - String. Path to the java executable.</dd>
-<dd><code>minecraftVersion</code> - String. Minecraft version used by the modpack and server pack.</dd>
-<dd><code>modLoader</code> - String. Modloader used by the modpack and server pack. Ether Forge or Fabric.</dd>
-<dd><code>modLoaderVersion</code> - String. Modloader version used by the modpack and server pack.</dd>
-<dd><code>includeIcon</code> - Boolean. Whether to include a server-icon in the server pack.</dd>
-<dd><code>includeProperties</code> - Boolean. Whether to include a properties file in the server pack.</dd>
-<dd><code>includeScripts</code> - Boolean. Whether to include start scripts in the server pack.</dd>
-<dd><code>includeZip</code> - Boolean. Whether to create a ZIP-archive of the server pack, excluding Mojang's Minecraft server jar.</dd>
-<dd><code>fileName</code> - The name under which to write the new file.</dd>
-<dd><code>isTemporary</code> - Decides whether to delete existing config-file. If isTemporary is false, existing config files will be deleted before writing the new file.</dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>Boolean. Returns true if the configuration file has been successfully written and old ones replaced.</dd>
-</dl>
-</li>
-</ul>
 </li>
 </ul>
 </li>
@@ -505,8 +623,8 @@ extends java.lang.Object</pre>
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../de/griefed/serverpackcreator/CopyFiles.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../de/griefed/serverpackcreator/Handler.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../de/griefed/serverpackcreator/Main.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../index.html?de/griefed/serverpackcreator/FilesSetup.html" target="_top">Frames</a></li>
diff --git a/docs/de/griefed/serverpackcreator/Handler.html b/docs/de/griefed/serverpackcreator/Handler.html
deleted file mode 100644
index 2e53d6757..000000000
--- a/docs/de/griefed/serverpackcreator/Handler.html
+++ /dev/null
@@ -1,331 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="de">
-<head>
-<!-- Generated by javadoc -->
-<title>Handler (serverpackcreator API)</title>
-<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
-    try {
-        if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Handler (serverpackcreator API)";
-        }
-    }
-    catch(err) {
-    }
-//-->
-var methods = {"i0":9,"i1":9};
-var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],8:["t4","Concrete Methods"]};
-var altColor = "altColor";
-var rowColor = "rowColor";
-var tableTab = "tableTab";
-var activeTableTab = "activeTableTab";
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../index-all.html">Index</a></li>
-<li><a href="../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../de/griefed/serverpackcreator/Main.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../index.html?de/griefed/serverpackcreator/Handler.html" target="_top">Frames</a></li>
-<li><a href="Handler.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<!-- ======== START OF CLASS DATA ======== -->
-<div class="header">
-<div class="subTitle">de.griefed.serverpackcreator</div>
-<h2 title="Class Handler" class="title">Class Handler</h2>
-</div>
-<div class="contentContainer">
-<ul class="inheritance">
-<li>java.lang.Object</li>
-<li>
-<ul class="inheritance">
-<li>de.griefed.serverpackcreator.Handler</li>
-</ul>
-</li>
-</ul>
-<div class="description">
-<ul class="blockList">
-<li class="blockList">
-<hr>
-<br>
-<pre>public class <span class="typeNameLabel">Handler</span>
-extends java.lang.Object</pre>
-</li>
-</ul>
-</div>
-<div class="summary">
-<ul class="blockList">
-<li class="blockList">
-<!-- =========== FIELD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field.summary">
-<!--   -->
-</a>
-<h3>Field Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
-<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Field and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static org.apache.logging.log4j.Logger</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Handler.html#appLogger">appLogger</a></span></code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.summary">
-<!--   -->
-</a>
-<h3>Constructor Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
-<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colOne" scope="col">Constructor and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Handler.html#Handler--">Handler</a></span>()</code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ========== METHOD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.summary">
-<!--   -->
-</a>
-<h3>Method Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
-<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tr id="i0" class="altColor">
-<td class="colFirst"><code>(package private) static void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Handler.html#main-java.lang.String:A-">main</a></span>(java.lang.String[]&nbsp;args)</code>
-<div class="block">Handler-class makes the calls to every other class where the actual magic is happening.</div>
-</td>
-</tr>
-<tr id="i1" class="rowColor">
-<td class="colFirst"><code>static boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Handler.html#run--">run</a></span>()</code>
-<div class="block">Run when serverpackcreator is run in either -cli or -cgen mode.</div>
-</td>
-</tr>
-</table>
-<ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
-<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-<div class="details">
-<ul class="blockList">
-<li class="blockList">
-<!-- ============ FIELD DETAIL =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field.detail">
-<!--   -->
-</a>
-<h3>Field Detail</h3>
-<a name="appLogger">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>appLogger</h4>
-<pre>private static final&nbsp;org.apache.logging.log4j.Logger appLogger</pre>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.detail">
-<!--   -->
-</a>
-<h3>Constructor Detail</h3>
-<a name="Handler--">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>Handler</h4>
-<pre>public&nbsp;Handler()</pre>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ============ METHOD DETAIL ========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.detail">
-<!--   -->
-</a>
-<h3>Method Detail</h3>
-<a name="main-java.lang.String:A-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>main</h4>
-<pre>static&nbsp;void&nbsp;main(java.lang.String[]&nbsp;args)</pre>
-<div class="block">Handler-class makes the calls to every other class where the actual magic is happening. The main class of serverpackcreator should never contain code which does work on the server pack itself.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>args</code> - Command Line Argument determines whether serverpackcreator will start into normal operation mode or with a step-by-step generation of a configuration file.</dd>
-</dl>
-</li>
-</ul>
-<a name="run--">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>run</h4>
-<pre>public static&nbsp;boolean&nbsp;run()</pre>
-<div class="block">Run when serverpackcreator is run in either -cli or -cgen mode. Runs what used to be the main content in Main in pre-1.x.x. times. Inits config checks and, if config checks are successfull, calls methods to create the server pack.</div>
-<dl>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>Return true if the serverpack was successfully generated, false if not.</dd>
-</dl>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-<!-- ========= END OF CLASS DATA ========= -->
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../index-all.html">Index</a></li>
-<li><a href="../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../de/griefed/serverpackcreator/Main.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../index.html?de/griefed/serverpackcreator/Handler.html" target="_top">Frames</a></li>
-<li><a href="Handler.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-</body>
-</html>
diff --git a/docs/de/griefed/serverpackcreator/Main.html b/docs/de/griefed/serverpackcreator/Main.html
index 90ba76402..ebd1b2ce1 100644
--- a/docs/de/griefed/serverpackcreator/Main.html
+++ b/docs/de/griefed/serverpackcreator/Main.html
@@ -47,8 +47,8 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../de/griefed/serverpackcreator/Handler.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li>Next&nbsp;Class</li>
 </ul>
 <ul class="navList">
 <li><a href="../../../index.html?de/griefed/serverpackcreator/Main.html" target="_top">Frames</a></li>
@@ -232,10 +232,10 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>main</h4>
 <pre>public static&nbsp;void&nbsp;main(java.lang.String[]&nbsp;args)</pre>
-<div class="block">Init and "main" has been moved to Handler-class. Main now only inits the Localizationmanager and passes the cli args, if any,  to Handler, which then runs the usual operations as they used to be in pre-2.x.x</div>
+<div class="block">Init and "main" has been moved to Handler-class. Main now only inits the LocalizationManager and passes the cli args, if any,  to Handler, which then runs the usual operations as they used to be in pre-2.x.x</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>args</code> - Commandline arguments with which serverpackcreator is run. Passed to Handler-class which then decides what to do corresponding to input.</dd>
+<dd><code>args</code> - Commandline arguments with which ServerPackCreator is run. Passed to Handler-class which then decides what to do corresponding to input.</dd>
 </dl>
 </li>
 </ul>
@@ -266,8 +266,8 @@ extends java.lang.Object</pre>
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../de/griefed/serverpackcreator/Handler.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li>Next&nbsp;Class</li>
 </ul>
 <ul class="navList">
 <li><a href="../../../index.html?de/griefed/serverpackcreator/Main.html" target="_top">Frames</a></li>
diff --git a/docs/de/griefed/serverpackcreator/Reference.html b/docs/de/griefed/serverpackcreator/Reference.html
deleted file mode 100644
index a8f7a0329..000000000
--- a/docs/de/griefed/serverpackcreator/Reference.html
+++ /dev/null
@@ -1,1424 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="de">
-<head>
-<!-- Generated by javadoc -->
-<title>Reference (serverpackcreator API)</title>
-<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
-    try {
-        if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Reference (serverpackcreator API)";
-        }
-    }
-    catch(err) {
-    }
-//-->
-var methods = {"i0":9,"i1":9,"i2":9,"i3":9,"i4":9,"i5":9,"i6":9,"i7":9,"i8":9,"i9":9,"i10":9,"i11":9,"i12":9,"i13":9,"i14":9,"i15":9,"i16":9,"i17":9,"i18":9,"i19":9,"i20":9,"i21":9,"i22":9,"i23":9,"i24":9,"i25":9,"i26":9,"i27":9,"i28":9,"i29":9,"i30":9,"i31":9,"i32":9,"i33":9,"i34":9,"i35":9,"i36":9,"i37":9,"i38":9,"i39":9,"i40":9,"i41":9,"i42":9,"i43":9,"i44":9,"i45":9,"i46":9};
-var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],8:["t4","Concrete Methods"]};
-var altColor = "altColor";
-var rowColor = "rowColor";
-var tableTab = "tableTab";
-var activeTableTab = "activeTableTab";
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../index-all.html">Index</a></li>
-<li><a href="../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../de/griefed/serverpackcreator/Main.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../de/griefed/serverpackcreator/ServerSetup.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../index.html?de/griefed/serverpackcreator/Reference.html" target="_top">Frames</a></li>
-<li><a href="Reference.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<!-- ======== START OF CLASS DATA ======== -->
-<div class="header">
-<div class="subTitle">de.griefed.serverpackcreator</div>
-<h2 title="Class Reference" class="title">Class Reference</h2>
-</div>
-<div class="contentContainer">
-<ul class="inheritance">
-<li>java.lang.Object</li>
-<li>
-<ul class="inheritance">
-<li>de.griefed.serverpackcreator.Reference</li>
-</ul>
-</li>
-</ul>
-<div class="description">
-<ul class="blockList">
-<li class="blockList">
-<dl>
-<dt>Direct Known Subclasses:</dt>
-<dd><a href="../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></dd>
-</dl>
-<hr>
-<br>
-<pre>public class <span class="typeNameLabel">Reference</span>
-extends java.lang.Object</pre>
-</li>
-</ul>
-</div>
-<div class="summary">
-<ul class="blockList">
-<li class="blockList">
-<!-- =========== FIELD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field.summary">
-<!--   -->
-</a>
-<h3>Field Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
-<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Field and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static java.util.List&lt;java.lang.String&gt;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#clientMods">clientMods</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>static <a href="../../../de/griefed/serverpackcreator/CLISetup.html" title="class in de.griefed.serverpackcreator">CLISetup</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#cliSetup">cliSetup</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static com.typesafe.config.Config</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#config">config</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private static java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#CONFIG_GEN_ARGUMENT">CONFIG_GEN_ARGUMENT</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>static <a href="../../../de/griefed/serverpackcreator/ConfigCheck.html" title="class in de.griefed.serverpackcreator">ConfigCheck</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#configCheck">configCheck</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private static java.io.File</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#configFile">configFile</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static java.util.List&lt;java.lang.String&gt;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#copyDirs">copyDirs</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>(package private) static <a href="../../../de/griefed/serverpackcreator/CopyFiles.html" title="class in de.griefed.serverpackcreator">CopyFiles</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#copyFiles">copyFiles</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>static <a href="../../../de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CreateModpack</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#createModpack">createModpack</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private static java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#FABRIC_MANIFEST_URL">FABRIC_MANIFEST_URL</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static java.io.File</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#fabricLinuxFile">fabricLinuxFile</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private static java.io.File</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#fabricWindowsFile">fabricWindowsFile</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static java.util.List&lt;java.lang.String&gt;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#fallbackModsList">fallbackModsList</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>static <a href="../../../de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator">FilesSetup</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#filesSetup">filesSetup</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#FORGE_MANIFEST_URL">FORGE_MANIFEST_URL</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private static java.io.File</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#forgeLinuxFile">forgeLinuxFile</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static java.io.File</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#forgeWindowsFile">forgeWindowsFile</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private static java.io.File</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#iconFile">iconFile</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static java.lang.Boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#includeServerIcon">includeServerIcon</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private static java.lang.Boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#includeServerInstallation">includeServerInstallation</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static java.lang.Boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#includeServerProperties">includeServerProperties</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private static java.lang.Boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#includeStartScripts">includeStartScripts</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static java.lang.Boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#includeZipCreation">includeZipCreation</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private static java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#javaPath">javaPath</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#LANG_ARGUMENT">LANG_ARGUMENT</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private static java.io.File</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#langPropertiesFile">langPropertiesFile</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#MINECRAFT_MANIFEST_URL">MINECRAFT_MANIFEST_URL</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private static java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#minecraftVersion">minecraftVersion</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#modLoader">modLoader</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private static java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#modLoaderVersion">modLoaderVersion</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#modpackDir">modpackDir</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private static java.io.File</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#oldConfigFile">oldConfigFile</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static int</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#projectFileID">projectFileID</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private static int</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#projectID">projectID</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static java.io.File</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#propertiesFile">propertiesFile</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private static java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#RUN_CLI_ARGUMENT">RUN_CLI_ARGUMENT</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>(package private) static <a href="../../../de/griefed/serverpackcreator/ServerSetup.html" title="class in de.griefed.serverpackcreator">ServerSetup</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#serverSetup">serverSetup</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>(package private) static <a href="../../../de/griefed/serverpackcreator/ServerUtilities.html" title="class in de.griefed.serverpackcreator">ServerUtilities</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#serverUtilities">serverUtilities</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static java.lang.String[]</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#SUPPORTED_LANGUAGES">SUPPORTED_LANGUAGES</a></span></code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.summary">
-<!--   -->
-</a>
-<h3>Constructor Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
-<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colOne" scope="col">Constructor and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#Reference--">Reference</a></span>()</code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ========== METHOD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.summary">
-<!--   -->
-</a>
-<h3>Method Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
-<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tr id="i0" class="altColor">
-<td class="colFirst"><code>(package private) static java.util.List&lt;java.lang.String&gt;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#getClientMods--">getClientMods</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i1" class="rowColor">
-<td class="colFirst"><code>static com.typesafe.config.Config</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#getConfig--">getConfig</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i2" class="altColor">
-<td class="colFirst"><code>static java.io.File</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#getConfigFile--">getConfigFile</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i3" class="rowColor">
-<td class="colFirst"><code>(package private) static java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#getConfigGenArgument--">getConfigGenArgument</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i4" class="altColor">
-<td class="colFirst"><code>(package private) static java.util.List&lt;java.lang.String&gt;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#getCopyDirs--">getCopyDirs</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i5" class="rowColor">
-<td class="colFirst"><code>(package private) static java.io.File</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#getFabricLinuxFile--">getFabricLinuxFile</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i6" class="altColor">
-<td class="colFirst"><code>(package private) static java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#getFabricManifestUrl--">getFabricManifestUrl</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i7" class="rowColor">
-<td class="colFirst"><code>(package private) static java.io.File</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#getFabricWindowsFile--">getFabricWindowsFile</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i8" class="altColor">
-<td class="colFirst"><code>(package private) static java.util.List&lt;java.lang.String&gt;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#getFallbackModsList--">getFallbackModsList</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i9" class="rowColor">
-<td class="colFirst"><code>(package private) static java.io.File</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#getForgeLinuxFile--">getForgeLinuxFile</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i10" class="altColor">
-<td class="colFirst"><code>(package private) static java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#getForgeManifestUrl--">getForgeManifestUrl</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i11" class="rowColor">
-<td class="colFirst"><code>(package private) static java.io.File</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#getForgeWindowsFile--">getForgeWindowsFile</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i12" class="altColor">
-<td class="colFirst"><code>(package private) static java.io.File</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#getIconFile--">getIconFile</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i13" class="rowColor">
-<td class="colFirst"><code>(package private) static boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#getIncludeServerIcon--">getIncludeServerIcon</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i14" class="altColor">
-<td class="colFirst"><code>(package private) static boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#getIncludeServerInstallation--">getIncludeServerInstallation</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i15" class="rowColor">
-<td class="colFirst"><code>(package private) static boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#getIncludeServerProperties--">getIncludeServerProperties</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i16" class="altColor">
-<td class="colFirst"><code>(package private) static boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#getIncludeStartScripts--">getIncludeStartScripts</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i17" class="rowColor">
-<td class="colFirst"><code>(package private) static boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#getIncludeZipCreation--">getIncludeZipCreation</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i18" class="altColor">
-<td class="colFirst"><code>(package private) static java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#getJavaPath--">getJavaPath</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i19" class="rowColor">
-<td class="colFirst"><code>(package private) static java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#getLangArgument--">getLangArgument</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i20" class="altColor">
-<td class="colFirst"><code>(package private) static java.io.File</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#getLangPropertiesFile--">getLangPropertiesFile</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i21" class="rowColor">
-<td class="colFirst"><code>(package private) static java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#getMinecraftManifestUrl--">getMinecraftManifestUrl</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i22" class="altColor">
-<td class="colFirst"><code>(package private) static java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#getMinecraftVersion--">getMinecraftVersion</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i23" class="rowColor">
-<td class="colFirst"><code>(package private) static java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#getModLoader--">getModLoader</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i24" class="altColor">
-<td class="colFirst"><code>(package private) static java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#getModLoaderVersion--">getModLoaderVersion</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i25" class="rowColor">
-<td class="colFirst"><code>(package private) static java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#getModpackDir--">getModpackDir</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i26" class="altColor">
-<td class="colFirst"><code>(package private) static java.io.File</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#getOldConfigFile--">getOldConfigFile</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i27" class="rowColor">
-<td class="colFirst"><code>(package private) static int</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#getProjectFileID--">getProjectFileID</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i28" class="altColor">
-<td class="colFirst"><code>(package private) static int</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#getProjectID--">getProjectID</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i29" class="rowColor">
-<td class="colFirst"><code>(package private) static java.io.File</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#getPropertiesFile--">getPropertiesFile</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i30" class="altColor">
-<td class="colFirst"><code>(package private) static java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#getRunCliArgument--">getRunCliArgument</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i31" class="rowColor">
-<td class="colFirst"><code>protected static java.lang.String[]</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#getSupportedLanguages--">getSupportedLanguages</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i32" class="altColor">
-<td class="colFirst"><code>(package private) static void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#setClientMods-java.util.List-">setClientMods</a></span>(java.util.List&lt;java.lang.String&gt;&nbsp;newClientMods)</code>&nbsp;</td>
-</tr>
-<tr id="i33" class="rowColor">
-<td class="colFirst"><code>static void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#setConfig-com.typesafe.config.Config-">setConfig</a></span>(com.typesafe.config.Config&nbsp;newConfig)</code>&nbsp;</td>
-</tr>
-<tr id="i34" class="altColor">
-<td class="colFirst"><code>(package private) static void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#setCopyDirs-java.util.List-">setCopyDirs</a></span>(java.util.List&lt;java.lang.String&gt;&nbsp;newCopyDirs)</code>&nbsp;</td>
-</tr>
-<tr id="i35" class="rowColor">
-<td class="colFirst"><code>(package private) static void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#setIncludeServerIcon-boolean-">setIncludeServerIcon</a></span>(boolean&nbsp;newIncludeServerIcon)</code>&nbsp;</td>
-</tr>
-<tr id="i36" class="altColor">
-<td class="colFirst"><code>(package private) static void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#setIncludeServerInstallation-boolean-">setIncludeServerInstallation</a></span>(boolean&nbsp;newIncludeServerInstallation)</code>&nbsp;</td>
-</tr>
-<tr id="i37" class="rowColor">
-<td class="colFirst"><code>(package private) static void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#setIncludeServerProperties-boolean-">setIncludeServerProperties</a></span>(boolean&nbsp;newIncludeServerProperties)</code>&nbsp;</td>
-</tr>
-<tr id="i38" class="altColor">
-<td class="colFirst"><code>(package private) static void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#setIncludeStartScripts-boolean-">setIncludeStartScripts</a></span>(boolean&nbsp;newIncludeStartScripts)</code>&nbsp;</td>
-</tr>
-<tr id="i39" class="rowColor">
-<td class="colFirst"><code>(package private) static void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#setIncludeZipCreation-boolean-">setIncludeZipCreation</a></span>(boolean&nbsp;newIncludeZipCreation)</code>&nbsp;</td>
-</tr>
-<tr id="i40" class="altColor">
-<td class="colFirst"><code>(package private) static void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#setJavaPath-java.lang.String-">setJavaPath</a></span>(java.lang.String&nbsp;newJavaPath)</code>&nbsp;</td>
-</tr>
-<tr id="i41" class="rowColor">
-<td class="colFirst"><code>(package private) static void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#setMinecraftVersion-java.lang.String-">setMinecraftVersion</a></span>(java.lang.String&nbsp;newMinecraftVersion)</code>&nbsp;</td>
-</tr>
-<tr id="i42" class="altColor">
-<td class="colFirst"><code>(package private) static void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#setModLoader-java.lang.String-">setModLoader</a></span>(java.lang.String&nbsp;newModLoader)</code>&nbsp;</td>
-</tr>
-<tr id="i43" class="rowColor">
-<td class="colFirst"><code>(package private) static void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#setModLoaderVersion-java.lang.String-">setModLoaderVersion</a></span>(java.lang.String&nbsp;newModLoaderVersion)</code>&nbsp;</td>
-</tr>
-<tr id="i44" class="altColor">
-<td class="colFirst"><code>(package private) static void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#setModpackDir-java.lang.String-">setModpackDir</a></span>(java.lang.String&nbsp;newModpackDir)</code>&nbsp;</td>
-</tr>
-<tr id="i45" class="rowColor">
-<td class="colFirst"><code>(package private) static void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#setProjectFileID-int-">setProjectFileID</a></span>(int&nbsp;newProjectFileID)</code>&nbsp;</td>
-</tr>
-<tr id="i46" class="altColor">
-<td class="colFirst"><code>(package private) static void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Reference.html#setProjectID-int-">setProjectID</a></span>(int&nbsp;newProjectID)</code>&nbsp;</td>
-</tr>
-</table>
-<ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
-<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-<div class="details">
-<ul class="blockList">
-<li class="blockList">
-<!-- ============ FIELD DETAIL =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field.detail">
-<!--   -->
-</a>
-<h3>Field Detail</h3>
-<a name="MINECRAFT_MANIFEST_URL">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>MINECRAFT_MANIFEST_URL</h4>
-<pre>private static final&nbsp;java.lang.String MINECRAFT_MANIFEST_URL</pre>
-<dl>
-<dt><span class="seeLabel">See Also:</span></dt>
-<dd><a href="../../../constant-values.html#de.griefed.serverpackcreator.Reference.MINECRAFT_MANIFEST_URL">Constant Field Values</a></dd>
-</dl>
-</li>
-</ul>
-<a name="FORGE_MANIFEST_URL">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>FORGE_MANIFEST_URL</h4>
-<pre>private static final&nbsp;java.lang.String FORGE_MANIFEST_URL</pre>
-<dl>
-<dt><span class="seeLabel">See Also:</span></dt>
-<dd><a href="../../../constant-values.html#de.griefed.serverpackcreator.Reference.FORGE_MANIFEST_URL">Constant Field Values</a></dd>
-</dl>
-</li>
-</ul>
-<a name="FABRIC_MANIFEST_URL">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>FABRIC_MANIFEST_URL</h4>
-<pre>private static final&nbsp;java.lang.String FABRIC_MANIFEST_URL</pre>
-<dl>
-<dt><span class="seeLabel">See Also:</span></dt>
-<dd><a href="../../../constant-values.html#de.griefed.serverpackcreator.Reference.FABRIC_MANIFEST_URL">Constant Field Values</a></dd>
-</dl>
-</li>
-</ul>
-<a name="LANG_ARGUMENT">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>LANG_ARGUMENT</h4>
-<pre>private static final&nbsp;java.lang.String LANG_ARGUMENT</pre>
-<dl>
-<dt><span class="seeLabel">See Also:</span></dt>
-<dd><a href="../../../constant-values.html#de.griefed.serverpackcreator.Reference.LANG_ARGUMENT">Constant Field Values</a></dd>
-</dl>
-</li>
-</ul>
-<a name="CONFIG_GEN_ARGUMENT">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>CONFIG_GEN_ARGUMENT</h4>
-<pre>private static final&nbsp;java.lang.String CONFIG_GEN_ARGUMENT</pre>
-<dl>
-<dt><span class="seeLabel">See Also:</span></dt>
-<dd><a href="../../../constant-values.html#de.griefed.serverpackcreator.Reference.CONFIG_GEN_ARGUMENT">Constant Field Values</a></dd>
-</dl>
-</li>
-</ul>
-<a name="RUN_CLI_ARGUMENT">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>RUN_CLI_ARGUMENT</h4>
-<pre>private static final&nbsp;java.lang.String RUN_CLI_ARGUMENT</pre>
-<dl>
-<dt><span class="seeLabel">See Also:</span></dt>
-<dd><a href="../../../constant-values.html#de.griefed.serverpackcreator.Reference.RUN_CLI_ARGUMENT">Constant Field Values</a></dd>
-</dl>
-</li>
-</ul>
-<a name="configFile">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>configFile</h4>
-<pre>private static final&nbsp;java.io.File configFile</pre>
-</li>
-</ul>
-<a name="oldConfigFile">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>oldConfigFile</h4>
-<pre>private static final&nbsp;java.io.File oldConfigFile</pre>
-</li>
-</ul>
-<a name="propertiesFile">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>propertiesFile</h4>
-<pre>private static final&nbsp;java.io.File propertiesFile</pre>
-</li>
-</ul>
-<a name="iconFile">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>iconFile</h4>
-<pre>private static final&nbsp;java.io.File iconFile</pre>
-</li>
-</ul>
-<a name="forgeWindowsFile">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>forgeWindowsFile</h4>
-<pre>private static final&nbsp;java.io.File forgeWindowsFile</pre>
-</li>
-</ul>
-<a name="forgeLinuxFile">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>forgeLinuxFile</h4>
-<pre>private static final&nbsp;java.io.File forgeLinuxFile</pre>
-</li>
-</ul>
-<a name="fabricWindowsFile">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>fabricWindowsFile</h4>
-<pre>private static final&nbsp;java.io.File fabricWindowsFile</pre>
-</li>
-</ul>
-<a name="fabricLinuxFile">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>fabricLinuxFile</h4>
-<pre>private static final&nbsp;java.io.File fabricLinuxFile</pre>
-</li>
-</ul>
-<a name="langPropertiesFile">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>langPropertiesFile</h4>
-<pre>private static final&nbsp;java.io.File langPropertiesFile</pre>
-</li>
-</ul>
-<a name="SUPPORTED_LANGUAGES">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>SUPPORTED_LANGUAGES</h4>
-<pre>private static final&nbsp;java.lang.String[] SUPPORTED_LANGUAGES</pre>
-</li>
-</ul>
-<a name="createModpack">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>createModpack</h4>
-<pre>public static final&nbsp;<a href="../../../de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CreateModpack</a> createModpack</pre>
-</li>
-</ul>
-<a name="filesSetup">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>filesSetup</h4>
-<pre>public static final&nbsp;<a href="../../../de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator">FilesSetup</a> filesSetup</pre>
-</li>
-</ul>
-<a name="cliSetup">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>cliSetup</h4>
-<pre>public static final&nbsp;<a href="../../../de/griefed/serverpackcreator/CLISetup.html" title="class in de.griefed.serverpackcreator">CLISetup</a> cliSetup</pre>
-</li>
-</ul>
-<a name="configCheck">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>configCheck</h4>
-<pre>public static final&nbsp;<a href="../../../de/griefed/serverpackcreator/ConfigCheck.html" title="class in de.griefed.serverpackcreator">ConfigCheck</a> configCheck</pre>
-</li>
-</ul>
-<a name="copyFiles">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>copyFiles</h4>
-<pre>static final&nbsp;<a href="../../../de/griefed/serverpackcreator/CopyFiles.html" title="class in de.griefed.serverpackcreator">CopyFiles</a> copyFiles</pre>
-</li>
-</ul>
-<a name="serverSetup">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>serverSetup</h4>
-<pre>static final&nbsp;<a href="../../../de/griefed/serverpackcreator/ServerSetup.html" title="class in de.griefed.serverpackcreator">ServerSetup</a> serverSetup</pre>
-</li>
-</ul>
-<a name="serverUtilities">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>serverUtilities</h4>
-<pre>static final&nbsp;<a href="../../../de/griefed/serverpackcreator/ServerUtilities.html" title="class in de.griefed.serverpackcreator">ServerUtilities</a> serverUtilities</pre>
-</li>
-</ul>
-<a name="config">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>config</h4>
-<pre>private static&nbsp;com.typesafe.config.Config config</pre>
-</li>
-</ul>
-<a name="fallbackModsList">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>fallbackModsList</h4>
-<pre>private static final&nbsp;java.util.List&lt;java.lang.String&gt; fallbackModsList</pre>
-</li>
-</ul>
-<a name="clientMods">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>clientMods</h4>
-<pre>private static&nbsp;java.util.List&lt;java.lang.String&gt; clientMods</pre>
-</li>
-</ul>
-<a name="copyDirs">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>copyDirs</h4>
-<pre>private static&nbsp;java.util.List&lt;java.lang.String&gt; copyDirs</pre>
-</li>
-</ul>
-<a name="modpackDir">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>modpackDir</h4>
-<pre>private static&nbsp;java.lang.String modpackDir</pre>
-</li>
-</ul>
-<a name="javaPath">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>javaPath</h4>
-<pre>private static&nbsp;java.lang.String javaPath</pre>
-</li>
-</ul>
-<a name="minecraftVersion">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>minecraftVersion</h4>
-<pre>private static&nbsp;java.lang.String minecraftVersion</pre>
-</li>
-</ul>
-<a name="modLoader">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>modLoader</h4>
-<pre>private static&nbsp;java.lang.String modLoader</pre>
-</li>
-</ul>
-<a name="modLoaderVersion">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>modLoaderVersion</h4>
-<pre>private static&nbsp;java.lang.String modLoaderVersion</pre>
-</li>
-</ul>
-<a name="includeServerInstallation">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>includeServerInstallation</h4>
-<pre>private static&nbsp;java.lang.Boolean includeServerInstallation</pre>
-</li>
-</ul>
-<a name="includeServerIcon">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>includeServerIcon</h4>
-<pre>private static&nbsp;java.lang.Boolean includeServerIcon</pre>
-</li>
-</ul>
-<a name="includeServerProperties">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>includeServerProperties</h4>
-<pre>private static&nbsp;java.lang.Boolean includeServerProperties</pre>
-</li>
-</ul>
-<a name="includeStartScripts">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>includeStartScripts</h4>
-<pre>private static&nbsp;java.lang.Boolean includeStartScripts</pre>
-</li>
-</ul>
-<a name="includeZipCreation">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>includeZipCreation</h4>
-<pre>private static&nbsp;java.lang.Boolean includeZipCreation</pre>
-</li>
-</ul>
-<a name="projectID">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>projectID</h4>
-<pre>private static&nbsp;int projectID</pre>
-</li>
-</ul>
-<a name="projectFileID">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>projectFileID</h4>
-<pre>private static&nbsp;int projectFileID</pre>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.detail">
-<!--   -->
-</a>
-<h3>Constructor Detail</h3>
-<a name="Reference--">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>Reference</h4>
-<pre>public&nbsp;Reference()</pre>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ============ METHOD DETAIL ========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.detail">
-<!--   -->
-</a>
-<h3>Method Detail</h3>
-<a name="getMinecraftManifestUrl--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getMinecraftManifestUrl</h4>
-<pre>static&nbsp;java.lang.String&nbsp;getMinecraftManifestUrl()</pre>
-</li>
-</ul>
-<a name="getForgeManifestUrl--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getForgeManifestUrl</h4>
-<pre>static&nbsp;java.lang.String&nbsp;getForgeManifestUrl()</pre>
-</li>
-</ul>
-<a name="getFabricManifestUrl--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getFabricManifestUrl</h4>
-<pre>static&nbsp;java.lang.String&nbsp;getFabricManifestUrl()</pre>
-</li>
-</ul>
-<a name="getLangArgument--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getLangArgument</h4>
-<pre>static&nbsp;java.lang.String&nbsp;getLangArgument()</pre>
-</li>
-</ul>
-<a name="getConfigGenArgument--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getConfigGenArgument</h4>
-<pre>static&nbsp;java.lang.String&nbsp;getConfigGenArgument()</pre>
-</li>
-</ul>
-<a name="getRunCliArgument--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getRunCliArgument</h4>
-<pre>static&nbsp;java.lang.String&nbsp;getRunCliArgument()</pre>
-</li>
-</ul>
-<a name="getConfigFile--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getConfigFile</h4>
-<pre>public static&nbsp;java.io.File&nbsp;getConfigFile()</pre>
-</li>
-</ul>
-<a name="getOldConfigFile--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getOldConfigFile</h4>
-<pre>static&nbsp;java.io.File&nbsp;getOldConfigFile()</pre>
-</li>
-</ul>
-<a name="getPropertiesFile--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getPropertiesFile</h4>
-<pre>static&nbsp;java.io.File&nbsp;getPropertiesFile()</pre>
-</li>
-</ul>
-<a name="getIconFile--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getIconFile</h4>
-<pre>static&nbsp;java.io.File&nbsp;getIconFile()</pre>
-</li>
-</ul>
-<a name="getForgeWindowsFile--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getForgeWindowsFile</h4>
-<pre>static&nbsp;java.io.File&nbsp;getForgeWindowsFile()</pre>
-</li>
-</ul>
-<a name="getForgeLinuxFile--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getForgeLinuxFile</h4>
-<pre>static&nbsp;java.io.File&nbsp;getForgeLinuxFile()</pre>
-</li>
-</ul>
-<a name="getFabricWindowsFile--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getFabricWindowsFile</h4>
-<pre>static&nbsp;java.io.File&nbsp;getFabricWindowsFile()</pre>
-</li>
-</ul>
-<a name="getFabricLinuxFile--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getFabricLinuxFile</h4>
-<pre>static&nbsp;java.io.File&nbsp;getFabricLinuxFile()</pre>
-</li>
-</ul>
-<a name="getLangPropertiesFile--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getLangPropertiesFile</h4>
-<pre>static&nbsp;java.io.File&nbsp;getLangPropertiesFile()</pre>
-</li>
-</ul>
-<a name="getSupportedLanguages--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getSupportedLanguages</h4>
-<pre>protected static&nbsp;java.lang.String[]&nbsp;getSupportedLanguages()</pre>
-</li>
-</ul>
-<a name="getConfig--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getConfig</h4>
-<pre>public static&nbsp;com.typesafe.config.Config&nbsp;getConfig()</pre>
-</li>
-</ul>
-<a name="setConfig-com.typesafe.config.Config-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>setConfig</h4>
-<pre>public static&nbsp;void&nbsp;setConfig(com.typesafe.config.Config&nbsp;newConfig)</pre>
-</li>
-</ul>
-<a name="getFallbackModsList--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getFallbackModsList</h4>
-<pre>static&nbsp;java.util.List&lt;java.lang.String&gt;&nbsp;getFallbackModsList()</pre>
-</li>
-</ul>
-<a name="getClientMods--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getClientMods</h4>
-<pre>static&nbsp;java.util.List&lt;java.lang.String&gt;&nbsp;getClientMods()</pre>
-</li>
-</ul>
-<a name="setClientMods-java.util.List-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>setClientMods</h4>
-<pre>static&nbsp;void&nbsp;setClientMods(java.util.List&lt;java.lang.String&gt;&nbsp;newClientMods)</pre>
-</li>
-</ul>
-<a name="getCopyDirs--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getCopyDirs</h4>
-<pre>static&nbsp;java.util.List&lt;java.lang.String&gt;&nbsp;getCopyDirs()</pre>
-</li>
-</ul>
-<a name="setCopyDirs-java.util.List-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>setCopyDirs</h4>
-<pre>static&nbsp;void&nbsp;setCopyDirs(java.util.List&lt;java.lang.String&gt;&nbsp;newCopyDirs)</pre>
-</li>
-</ul>
-<a name="getModpackDir--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getModpackDir</h4>
-<pre>static&nbsp;java.lang.String&nbsp;getModpackDir()</pre>
-</li>
-</ul>
-<a name="setModpackDir-java.lang.String-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>setModpackDir</h4>
-<pre>static&nbsp;void&nbsp;setModpackDir(java.lang.String&nbsp;newModpackDir)</pre>
-</li>
-</ul>
-<a name="getJavaPath--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getJavaPath</h4>
-<pre>static&nbsp;java.lang.String&nbsp;getJavaPath()</pre>
-</li>
-</ul>
-<a name="setJavaPath-java.lang.String-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>setJavaPath</h4>
-<pre>static&nbsp;void&nbsp;setJavaPath(java.lang.String&nbsp;newJavaPath)</pre>
-</li>
-</ul>
-<a name="getMinecraftVersion--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getMinecraftVersion</h4>
-<pre>static&nbsp;java.lang.String&nbsp;getMinecraftVersion()</pre>
-</li>
-</ul>
-<a name="setMinecraftVersion-java.lang.String-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>setMinecraftVersion</h4>
-<pre>static&nbsp;void&nbsp;setMinecraftVersion(java.lang.String&nbsp;newMinecraftVersion)</pre>
-</li>
-</ul>
-<a name="getModLoader--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getModLoader</h4>
-<pre>static&nbsp;java.lang.String&nbsp;getModLoader()</pre>
-</li>
-</ul>
-<a name="setModLoader-java.lang.String-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>setModLoader</h4>
-<pre>static&nbsp;void&nbsp;setModLoader(java.lang.String&nbsp;newModLoader)</pre>
-</li>
-</ul>
-<a name="getModLoaderVersion--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getModLoaderVersion</h4>
-<pre>static&nbsp;java.lang.String&nbsp;getModLoaderVersion()</pre>
-</li>
-</ul>
-<a name="setModLoaderVersion-java.lang.String-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>setModLoaderVersion</h4>
-<pre>static&nbsp;void&nbsp;setModLoaderVersion(java.lang.String&nbsp;newModLoaderVersion)</pre>
-</li>
-</ul>
-<a name="getIncludeServerInstallation--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getIncludeServerInstallation</h4>
-<pre>static&nbsp;boolean&nbsp;getIncludeServerInstallation()</pre>
-</li>
-</ul>
-<a name="setIncludeServerInstallation-boolean-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>setIncludeServerInstallation</h4>
-<pre>static&nbsp;void&nbsp;setIncludeServerInstallation(boolean&nbsp;newIncludeServerInstallation)</pre>
-</li>
-</ul>
-<a name="getIncludeServerIcon--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getIncludeServerIcon</h4>
-<pre>static&nbsp;boolean&nbsp;getIncludeServerIcon()</pre>
-</li>
-</ul>
-<a name="setIncludeServerIcon-boolean-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>setIncludeServerIcon</h4>
-<pre>static&nbsp;void&nbsp;setIncludeServerIcon(boolean&nbsp;newIncludeServerIcon)</pre>
-</li>
-</ul>
-<a name="getIncludeServerProperties--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getIncludeServerProperties</h4>
-<pre>static&nbsp;boolean&nbsp;getIncludeServerProperties()</pre>
-</li>
-</ul>
-<a name="setIncludeServerProperties-boolean-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>setIncludeServerProperties</h4>
-<pre>static&nbsp;void&nbsp;setIncludeServerProperties(boolean&nbsp;newIncludeServerProperties)</pre>
-</li>
-</ul>
-<a name="getIncludeStartScripts--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getIncludeStartScripts</h4>
-<pre>static&nbsp;boolean&nbsp;getIncludeStartScripts()</pre>
-</li>
-</ul>
-<a name="setIncludeStartScripts-boolean-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>setIncludeStartScripts</h4>
-<pre>static&nbsp;void&nbsp;setIncludeStartScripts(boolean&nbsp;newIncludeStartScripts)</pre>
-</li>
-</ul>
-<a name="getIncludeZipCreation--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getIncludeZipCreation</h4>
-<pre>static&nbsp;boolean&nbsp;getIncludeZipCreation()</pre>
-</li>
-</ul>
-<a name="setIncludeZipCreation-boolean-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>setIncludeZipCreation</h4>
-<pre>static&nbsp;void&nbsp;setIncludeZipCreation(boolean&nbsp;newIncludeZipCreation)</pre>
-</li>
-</ul>
-<a name="getProjectID--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getProjectID</h4>
-<pre>static&nbsp;int&nbsp;getProjectID()</pre>
-</li>
-</ul>
-<a name="setProjectID-int-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>setProjectID</h4>
-<pre>static&nbsp;void&nbsp;setProjectID(int&nbsp;newProjectID)</pre>
-</li>
-</ul>
-<a name="getProjectFileID--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>getProjectFileID</h4>
-<pre>static&nbsp;int&nbsp;getProjectFileID()</pre>
-</li>
-</ul>
-<a name="setProjectFileID-int-">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>setProjectFileID</h4>
-<pre>static&nbsp;void&nbsp;setProjectFileID(int&nbsp;newProjectFileID)</pre>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-<!-- ========= END OF CLASS DATA ========= -->
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../index-all.html">Index</a></li>
-<li><a href="../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../de/griefed/serverpackcreator/Main.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../de/griefed/serverpackcreator/ServerSetup.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../index.html?de/griefed/serverpackcreator/Reference.html" target="_top">Frames</a></li>
-<li><a href="Reference.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-</body>
-</html>
diff --git a/docs/de/griefed/serverpackcreator/ServerSetup.html b/docs/de/griefed/serverpackcreator/ServerSetup.html
deleted file mode 100644
index 6d4a4dfb7..000000000
--- a/docs/de/griefed/serverpackcreator/ServerSetup.html
+++ /dev/null
@@ -1,363 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="de">
-<head>
-<!-- Generated by javadoc -->
-<title>ServerSetup (serverpackcreator API)</title>
-<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
-    try {
-        if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="ServerSetup (serverpackcreator API)";
-        }
-    }
-    catch(err) {
-    }
-//-->
-var methods = {"i0":10,"i1":10};
-var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
-var altColor = "altColor";
-var rowColor = "rowColor";
-var tableTab = "tableTab";
-var activeTableTab = "activeTableTab";
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../index-all.html">Index</a></li>
-<li><a href="../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../de/griefed/serverpackcreator/ServerUtilities.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../index.html?de/griefed/serverpackcreator/ServerSetup.html" target="_top">Frames</a></li>
-<li><a href="ServerSetup.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<!-- ======== START OF CLASS DATA ======== -->
-<div class="header">
-<div class="subTitle">de.griefed.serverpackcreator</div>
-<h2 title="Class ServerSetup" class="title">Class ServerSetup</h2>
-</div>
-<div class="contentContainer">
-<ul class="inheritance">
-<li>java.lang.Object</li>
-<li>
-<ul class="inheritance">
-<li>de.griefed.serverpackcreator.ServerSetup</li>
-</ul>
-</li>
-</ul>
-<div class="description">
-<ul class="blockList">
-<li class="blockList">
-<hr>
-<br>
-<pre>class <span class="typeNameLabel">ServerSetup</span>
-extends java.lang.Object</pre>
-</li>
-</ul>
-</div>
-<div class="summary">
-<ul class="blockList">
-<li class="blockList">
-<!-- =========== FIELD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field.summary">
-<!--   -->
-</a>
-<h3>Field Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
-<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Field and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static org.apache.logging.log4j.Logger</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/ServerSetup.html#appLogger">appLogger</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private static org.apache.logging.log4j.Logger</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/ServerSetup.html#installerLogger">installerLogger</a></span></code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.summary">
-<!--   -->
-</a>
-<h3>Constructor Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
-<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colOne" scope="col">Constructor and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/ServerSetup.html#ServerSetup--">ServerSetup</a></span>()</code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ========== METHOD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.summary">
-<!--   -->
-</a>
-<h3>Method Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
-<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tr id="i0" class="altColor">
-<td class="colFirst"><code>(package private) void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/ServerSetup.html#installServer-java.lang.String-java.lang.String-java.lang.String-java.lang.String-java.lang.String-">installServer</a></span>(java.lang.String&nbsp;modLoader,
-             java.lang.String&nbsp;modpackDir,
-             java.lang.String&nbsp;minecraftVersion,
-             java.lang.String&nbsp;modLoaderVersion,
-             java.lang.String&nbsp;javaPath)</code>
-<div class="block">Installs the files for a Forge/Fabric server.</div>
-</td>
-</tr>
-<tr id="i1" class="rowColor">
-<td class="colFirst"><code>(package private) void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/ServerSetup.html#zipBuilder-java.lang.String-java.lang.String-java.lang.Boolean-">zipBuilder</a></span>(java.lang.String&nbsp;modpackDir,
-          java.lang.String&nbsp;modLoader,
-          java.lang.Boolean&nbsp;includeServerInstallation)</code>
-<div class="block">Create a zip-archive of the serverpack, excluding Mojang's minecraft_server.jar.</div>
-</td>
-</tr>
-</table>
-<ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
-<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-<div class="details">
-<ul class="blockList">
-<li class="blockList">
-<!-- ============ FIELD DETAIL =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field.detail">
-<!--   -->
-</a>
-<h3>Field Detail</h3>
-<a name="appLogger">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>appLogger</h4>
-<pre>private static final&nbsp;org.apache.logging.log4j.Logger appLogger</pre>
-</li>
-</ul>
-<a name="installerLogger">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>installerLogger</h4>
-<pre>private static final&nbsp;org.apache.logging.log4j.Logger installerLogger</pre>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.detail">
-<!--   -->
-</a>
-<h3>Constructor Detail</h3>
-<a name="ServerSetup--">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>ServerSetup</h4>
-<pre>ServerSetup()</pre>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ============ METHOD DETAIL ========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.detail">
-<!--   -->
-</a>
-<h3>Method Detail</h3>
-<a name="installServer-java.lang.String-java.lang.String-java.lang.String-java.lang.String-java.lang.String-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>installServer</h4>
-<pre>void&nbsp;installServer(java.lang.String&nbsp;modLoader,
-                   java.lang.String&nbsp;modpackDir,
-                   java.lang.String&nbsp;minecraftVersion,
-                   java.lang.String&nbsp;modLoaderVersion,
-                   java.lang.String&nbsp;javaPath)</pre>
-<div class="block">Installs the files for a Forge/Fabric server.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modLoader</code> - String. The modloader for which to install the server.</dd>
-<dd><code>modpackDir</code> - String. /server_pack The directory where the modloader server will be installed in.</dd>
-<dd><code>minecraftVersion</code> - String. The Minecraft version for which to install the modloader and Minecraft server.</dd>
-<dd><code>modLoaderVersion</code> - String. The modloader version for which to install the modloader and Minecraft server.</dd>
-<dd><code>javaPath</code> - String. Path to Java installation needed to execute the Fabric and Forge installers.</dd>
-</dl>
-</li>
-</ul>
-<a name="zipBuilder-java.lang.String-java.lang.String-java.lang.Boolean-">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>zipBuilder</h4>
-<pre>void&nbsp;zipBuilder(java.lang.String&nbsp;modpackDir,
-                java.lang.String&nbsp;modLoader,
-                java.lang.Boolean&nbsp;includeServerInstallation)</pre>
-<div class="block">Create a zip-archive of the serverpack, excluding Mojang's minecraft_server.jar.
- With help from https://stackoverflow.com/questions/1091788/how-to-create-a-zip-file-in-java</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modpackDir</code> - String. The directory where the zip-archive will be created and saved in.</dd>
-<dd><code>modLoader</code> - String. Determines the name of Minecraft#s server jar which will be deleted from the zip-archive.</dd>
-<dd><code>includeServerInstallation</code> - Boolean. Determines whether the Minecraft server jar needs to be deleted from the zip-archive.</dd>
-</dl>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-<!-- ========= END OF CLASS DATA ========= -->
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../index-all.html">Index</a></li>
-<li><a href="../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../de/griefed/serverpackcreator/ServerUtilities.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../index.html?de/griefed/serverpackcreator/ServerSetup.html" target="_top">Frames</a></li>
-<li><a href="ServerSetup.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-</body>
-</html>
diff --git a/docs/de/griefed/serverpackcreator/ServerUtilities.html b/docs/de/griefed/serverpackcreator/ServerUtilities.html
deleted file mode 100644
index 0dd69a275..000000000
--- a/docs/de/griefed/serverpackcreator/ServerUtilities.html
+++ /dev/null
@@ -1,540 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<!-- NewPage -->
-<html lang="de">
-<head>
-<!-- Generated by javadoc -->
-<title>ServerUtilities (serverpackcreator API)</title>
-<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">
-<script type="text/javascript" src="../../../script.js"></script>
-</head>
-<body>
-<script type="text/javascript"><!--
-    try {
-        if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="ServerUtilities (serverpackcreator API)";
-        }
-    }
-    catch(err) {
-    }
-//-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10};
-var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
-var altColor = "altColor";
-var rowColor = "rowColor";
-var tableTab = "tableTab";
-var activeTableTab = "activeTableTab";
-</script>
-<noscript>
-<div>JavaScript is disabled on your browser.</div>
-</noscript>
-<!-- ========= START OF TOP NAVBAR ======= -->
-<div class="topNav"><a name="navbar.top">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.top.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../index-all.html">Index</a></li>
-<li><a href="../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../de/griefed/serverpackcreator/ServerSetup.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li>Next&nbsp;Class</li>
-</ul>
-<ul class="navList">
-<li><a href="../../../index.html?de/griefed/serverpackcreator/ServerUtilities.html" target="_top">Frames</a></li>
-<li><a href="ServerUtilities.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_top">
-<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_top");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.top">
-<!--   -->
-</a></div>
-<!-- ========= END OF TOP NAVBAR ========= -->
-<!-- ======== START OF CLASS DATA ======== -->
-<div class="header">
-<div class="subTitle">de.griefed.serverpackcreator</div>
-<h2 title="Class ServerUtilities" class="title">Class ServerUtilities</h2>
-</div>
-<div class="contentContainer">
-<ul class="inheritance">
-<li>java.lang.Object</li>
-<li>
-<ul class="inheritance">
-<li>de.griefed.serverpackcreator.ServerUtilities</li>
-</ul>
-</li>
-</ul>
-<div class="description">
-<ul class="blockList">
-<li class="blockList">
-<hr>
-<br>
-<pre>class <span class="typeNameLabel">ServerUtilities</span>
-extends java.lang.Object</pre>
-</li>
-</ul>
-</div>
-<div class="summary">
-<ul class="blockList">
-<li class="blockList">
-<!-- =========== FIELD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field.summary">
-<!--   -->
-</a>
-<h3>Field Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
-<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Field and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static org.apache.logging.log4j.Logger</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/ServerUtilities.html#appLogger">appLogger</a></span></code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ======== CONSTRUCTOR SUMMARY ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.summary">
-<!--   -->
-</a>
-<h3>Constructor Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
-<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colOne" scope="col">Constructor and Description</th>
-</tr>
-<tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/ServerUtilities.html#ServerUtilities--">ServerUtilities</a></span>()</code>&nbsp;</td>
-</tr>
-</table>
-</li>
-</ul>
-<!-- ========== METHOD SUMMARY =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.summary">
-<!--   -->
-</a>
-<h3>Method Summary</h3>
-<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
-<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th class="colLast" scope="col">Method and Description</th>
-</tr>
-<tr id="i0" class="altColor">
-<td class="colFirst"><code>(package private) void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/ServerUtilities.html#cleanUpServerPack-java.io.File-java.io.File-java.lang.String-java.lang.String-java.lang.String-java.lang.String-">cleanUpServerPack</a></span>(java.io.File&nbsp;fabricInstaller,
-                 java.io.File&nbsp;forgeInstaller,
-                 java.lang.String&nbsp;modLoader,
-                 java.lang.String&nbsp;modpackDir,
-                 java.lang.String&nbsp;minecraftVersion,
-                 java.lang.String&nbsp;modLoaderVersion)</code>
-<div class="block">Deletes remnant files from Fabric/Forge installation no longer needed.</div>
-</td>
-</tr>
-<tr id="i1" class="rowColor">
-<td class="colFirst"><code>(package private) void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/ServerUtilities.html#deleteMinecraftJar-java.lang.String-java.lang.String-">deleteMinecraftJar</a></span>(java.lang.String&nbsp;modLoader,
-                  java.lang.String&nbsp;modpackDir)</code>
-<div class="block">Deletes Mojang's minecraft_server.jar from the zip-archive so users do not accidentally upload a file containing software from Mojang.</div>
-</td>
-</tr>
-<tr id="i2" class="altColor">
-<td class="colFirst"><code>(package private) boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/ServerUtilities.html#downloadFabricJar-java.lang.String-">downloadFabricJar</a></span>(java.lang.String&nbsp;modpackDir)</code>
-<div class="block">Downloads the specified version of Fabric.</div>
-</td>
-</tr>
-<tr id="i3" class="rowColor">
-<td class="colFirst"><code>(package private) boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/ServerUtilities.html#downloadForgeJar-java.lang.String-java.lang.String-java.lang.String-">downloadForgeJar</a></span>(java.lang.String&nbsp;minecraftVersion,
-                java.lang.String&nbsp;modLoaderVersion,
-                java.lang.String&nbsp;modpackDir)</code>
-<div class="block">Downloads the specified version of the Forge installer to be used in ServerSetup.installServer.</div>
-</td>
-</tr>
-<tr id="i4" class="altColor">
-<td class="colFirst"><code>private void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/ServerUtilities.html#fabricBatch-java.lang.String-java.lang.String-">fabricBatch</a></span>(java.lang.String&nbsp;modpackDir,
-           java.lang.String&nbsp;minecraftVersion)</code>
-<div class="block">Generates download scripts for Mojang's Minecraft server for Fabric,Windows.</div>
-</td>
-</tr>
-<tr id="i5" class="rowColor">
-<td class="colFirst"><code>private void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/ServerUtilities.html#fabricShell-java.lang.String-java.lang.String-">fabricShell</a></span>(java.lang.String&nbsp;modpackDir,
-           java.lang.String&nbsp;minecraftVersion)</code>
-<div class="block">Generates download scripts for Mojang's Minecraft server for Fabric,Linux.</div>
-</td>
-</tr>
-<tr id="i6" class="altColor">
-<td class="colFirst"><code>private void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/ServerUtilities.html#forgeBatch-java.lang.String-java.lang.String-">forgeBatch</a></span>(java.lang.String&nbsp;modpackDir,
-          java.lang.String&nbsp;minecraftVersion)</code>
-<div class="block">Generates download scripts for Mojang's Minecraft server for Forge,Windows.</div>
-</td>
-</tr>
-<tr id="i7" class="rowColor">
-<td class="colFirst"><code>private void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/ServerUtilities.html#forgeShell-java.lang.String-java.lang.String-">forgeShell</a></span>(java.lang.String&nbsp;modpackDir,
-          java.lang.String&nbsp;minecraftVersion)</code>
-<div class="block">Generates download scripts for Mojang's Minecraft server for Forge,Linux.</div>
-</td>
-</tr>
-<tr id="i8" class="altColor">
-<td class="colFirst"><code>(package private) void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/ServerUtilities.html#generateDownloadScripts-java.lang.String-java.lang.String-java.lang.String-">generateDownloadScripts</a></span>(java.lang.String&nbsp;modLoader,
-                       java.lang.String&nbsp;modpackDir,
-                       java.lang.String&nbsp;minecraftVersion)</code>
-<div class="block">Calls methods for generating download scripts for Mojang's Minecraft server depending on the specified versions and modloader.</div>
-</td>
-</tr>
-<tr id="i9" class="rowColor">
-<td class="colFirst"><code>private java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/ServerUtilities.html#latestFabricInstaller-java.lang.String-">latestFabricInstaller</a></span>(java.lang.String&nbsp;modpackDir)</code>
-<div class="block">Returns the latest installer version for the Fabric installer to be used in ServerSetup.installServer.</div>
-</td>
-</tr>
-</table>
-<ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
-<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-<div class="details">
-<ul class="blockList">
-<li class="blockList">
-<!-- ============ FIELD DETAIL =========== -->
-<ul class="blockList">
-<li class="blockList"><a name="field.detail">
-<!--   -->
-</a>
-<h3>Field Detail</h3>
-<a name="appLogger">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>appLogger</h4>
-<pre>private static final&nbsp;org.apache.logging.log4j.Logger appLogger</pre>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ========= CONSTRUCTOR DETAIL ======== -->
-<ul class="blockList">
-<li class="blockList"><a name="constructor.detail">
-<!--   -->
-</a>
-<h3>Constructor Detail</h3>
-<a name="ServerUtilities--">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>ServerUtilities</h4>
-<pre>ServerUtilities()</pre>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ============ METHOD DETAIL ========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.detail">
-<!--   -->
-</a>
-<h3>Method Detail</h3>
-<a name="generateDownloadScripts-java.lang.String-java.lang.String-java.lang.String-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>generateDownloadScripts</h4>
-<pre>void&nbsp;generateDownloadScripts(java.lang.String&nbsp;modLoader,
-                             java.lang.String&nbsp;modpackDir,
-                             java.lang.String&nbsp;minecraftVersion)</pre>
-<div class="block">Calls methods for generating download scripts for Mojang's Minecraft server depending on the specified versions and modloader.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modLoader</code> - String. The specified modloader determines the name under which Mojang's server jar will be downloaded as.</dd>
-<dd><code>modpackDir</code> - String. /server_pack The directory where the scripts will be placed in.</dd>
-<dd><code>minecraftVersion</code> - String. The version of the Minecraft server jar to download.</dd>
-</dl>
-</li>
-</ul>
-<a name="fabricShell-java.lang.String-java.lang.String-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>fabricShell</h4>
-<pre>private&nbsp;void&nbsp;fabricShell(java.lang.String&nbsp;modpackDir,
-                         java.lang.String&nbsp;minecraftVersion)</pre>
-<div class="block">Generates download scripts for Mojang's Minecraft server for Fabric,Linux.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modpackDir</code> - String. /server_pack The directory where the scripts will be placed in.</dd>
-<dd><code>minecraftVersion</code> - String. The version of the Minecraft server jar to download.</dd>
-</dl>
-</li>
-</ul>
-<a name="fabricBatch-java.lang.String-java.lang.String-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>fabricBatch</h4>
-<pre>private&nbsp;void&nbsp;fabricBatch(java.lang.String&nbsp;modpackDir,
-                         java.lang.String&nbsp;minecraftVersion)</pre>
-<div class="block">Generates download scripts for Mojang's Minecraft server for Fabric,Windows.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modpackDir</code> - String. /server_pack The directory where the scripts will be placed in.</dd>
-<dd><code>minecraftVersion</code> - String. The version of the Minecraft server jar to download.</dd>
-</dl>
-</li>
-</ul>
-<a name="forgeShell-java.lang.String-java.lang.String-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>forgeShell</h4>
-<pre>private&nbsp;void&nbsp;forgeShell(java.lang.String&nbsp;modpackDir,
-                        java.lang.String&nbsp;minecraftVersion)</pre>
-<div class="block">Generates download scripts for Mojang's Minecraft server for Forge,Linux.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modpackDir</code> - String. /server_pack The directory where the scripts will be placed in.</dd>
-<dd><code>minecraftVersion</code> - String. The version of the Minecraft server jar to download.</dd>
-</dl>
-</li>
-</ul>
-<a name="forgeBatch-java.lang.String-java.lang.String-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>forgeBatch</h4>
-<pre>private&nbsp;void&nbsp;forgeBatch(java.lang.String&nbsp;modpackDir,
-                        java.lang.String&nbsp;minecraftVersion)</pre>
-<div class="block">Generates download scripts for Mojang's Minecraft server for Forge,Windows.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modpackDir</code> - String. /server_pack The directory where the scripts will be placed in.</dd>
-<dd><code>minecraftVersion</code> - String. The version of the Minecraft server jar to download.</dd>
-</dl>
-</li>
-</ul>
-<a name="downloadFabricJar-java.lang.String-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>downloadFabricJar</h4>
-<pre>boolean&nbsp;downloadFabricJar(java.lang.String&nbsp;modpackDir)</pre>
-<div class="block">Downloads the specified version of Fabric.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modpackDir</code> - String. /server_pack The directory where the Fabric installer will be placed in.</dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>Boolean. Returns true if the download was successful. False if not.</dd>
-</dl>
-</li>
-</ul>
-<a name="latestFabricInstaller-java.lang.String-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>latestFabricInstaller</h4>
-<pre>private&nbsp;java.lang.String&nbsp;latestFabricInstaller(java.lang.String&nbsp;modpackDir)</pre>
-<div class="block">Returns the latest installer version for the Fabric installer to be used in ServerSetup.installServer.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modpackDir</code> - String. /server_pack The directory where the Fabric installer will be placed in.</dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>Boolean. Returns true if the download was successful. False if not.</dd>
-</dl>
-</li>
-</ul>
-<a name="downloadForgeJar-java.lang.String-java.lang.String-java.lang.String-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>downloadForgeJar</h4>
-<pre>boolean&nbsp;downloadForgeJar(java.lang.String&nbsp;minecraftVersion,
-                         java.lang.String&nbsp;modLoaderVersion,
-                         java.lang.String&nbsp;modpackDir)</pre>
-<div class="block">Downloads the specified version of the Forge installer to be used in ServerSetup.installServer.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>minecraftVersion</code> - String. The Minecraft version corresponding to the Forge version. Minecraft version and Forge version build a pair.</dd>
-<dd><code>modLoaderVersion</code> - String. The Forge version corresponding to the Minecraft version. Minecraft version and Forge version build a pair.</dd>
-<dd><code>modpackDir</code> - String. /server_pack The directory where the Forge installer will be placed in.</dd>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>Boolean. Returns true if the download was successful. False if not.</dd>
-</dl>
-</li>
-</ul>
-<a name="deleteMinecraftJar-java.lang.String-java.lang.String-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>deleteMinecraftJar</h4>
-<pre>void&nbsp;deleteMinecraftJar(java.lang.String&nbsp;modLoader,
-                        java.lang.String&nbsp;modpackDir)</pre>
-<div class="block">Deletes Mojang's minecraft_server.jar from the zip-archive so users do not accidentally upload a file containing software from Mojang.
- With help from https://stackoverflow.com/questions/5244963/delete-files-from-a-zip-archive-without-decompressing-in-java-or-maybe-python and https://bugs.openjdk.java.net/browse/JDK-8186227</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modLoader</code> - String. Determines the name of the file to delete.</dd>
-<dd><code>modpackDir</code> - String. /server_pack The directory in which the file will be deleted.</dd>
-</dl>
-</li>
-</ul>
-<a name="cleanUpServerPack-java.io.File-java.io.File-java.lang.String-java.lang.String-java.lang.String-java.lang.String-">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>cleanUpServerPack</h4>
-<pre>void&nbsp;cleanUpServerPack(java.io.File&nbsp;fabricInstaller,
-                       java.io.File&nbsp;forgeInstaller,
-                       java.lang.String&nbsp;modLoader,
-                       java.lang.String&nbsp;modpackDir,
-                       java.lang.String&nbsp;minecraftVersion,
-                       java.lang.String&nbsp;modLoaderVersion)</pre>
-<div class="block">Deletes remnant files from Fabric/Forge installation no longer needed.</div>
-<dl>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>fabricInstaller</code> - File. Fabric installer to be deleted.</dd>
-<dd><code>forgeInstaller</code> - File. Forge installer to be deleted.</dd>
-<dd><code>modLoader</code> - String. Whether Forge or Fabric files are to be deleted.</dd>
-<dd><code>modpackDir</code> - String. /server_pack The directory where files are to be deleted.</dd>
-<dd><code>minecraftVersion</code> - String. Needed for renaming the Forge server jar to work with launch scripts provided by serverpackcreator.</dd>
-<dd><code>modLoaderVersion</code> - String. Needed for renaming the Forge server jar to work with launch scripts provided by serverpackcreator.</dd>
-</dl>
-</li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-<!-- ========= END OF CLASS DATA ========= -->
-<!-- ======= START OF BOTTOM NAVBAR ====== -->
-<div class="bottomNav"><a name="navbar.bottom">
-<!--   -->
-</a>
-<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
-<a name="navbar.bottom.firstrow">
-<!--   -->
-</a>
-<ul class="navList" title="Navigation">
-<li><a href="../../../overview-summary.html">Overview</a></li>
-<li><a href="package-summary.html">Package</a></li>
-<li class="navBarCell1Rev">Class</li>
-<li><a href="package-tree.html">Tree</a></li>
-<li><a href="../../../deprecated-list.html">Deprecated</a></li>
-<li><a href="../../../index-all.html">Index</a></li>
-<li><a href="../../../help-doc.html">Help</a></li>
-</ul>
-</div>
-<div class="subNav">
-<ul class="navList">
-<li><a href="../../../de/griefed/serverpackcreator/ServerSetup.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li>Next&nbsp;Class</li>
-</ul>
-<ul class="navList">
-<li><a href="../../../index.html?de/griefed/serverpackcreator/ServerUtilities.html" target="_top">Frames</a></li>
-<li><a href="ServerUtilities.html" target="_top">No&nbsp;Frames</a></li>
-</ul>
-<ul class="navList" id="allclasses_navbar_bottom">
-<li><a href="../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
-</ul>
-<div>
-<script type="text/javascript"><!--
-  allClassesLink = document.getElementById("allclasses_navbar_bottom");
-  if(window==top) {
-    allClassesLink.style.display = "block";
-  }
-  else {
-    allClassesLink.style.display = "none";
-  }
-  //-->
-</script>
-</div>
-<div>
-<ul class="subNavList">
-<li>Summary:&nbsp;</li>
-<li>Nested&nbsp;|&nbsp;</li>
-<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.summary">Method</a></li>
-</ul>
-<ul class="subNavList">
-<li>Detail:&nbsp;</li>
-<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
-<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
-<li><a href="#method.detail">Method</a></li>
-</ul>
-</div>
-<a name="skip.navbar.bottom">
-<!--   -->
-</a></div>
-<!-- ======== END OF BOTTOM NAVBAR ======= -->
-</body>
-</html>
diff --git a/docs/de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html b/docs/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html
similarity index 78%
rename from docs/de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html
rename to docs/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html
index b3bffd8a2..6b9f41b19 100644
--- a/docs/de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html
+++ b/docs/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html
@@ -3,7 +3,7 @@
 <html lang="de">
 <head>
 <!-- Generated by javadoc -->
-<title>CreateModpack (serverpackcreator API)</title>
+<title>CurseCreateModpack (serverpackcreator API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -11,7 +11,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="CreateModpack (serverpackcreator API)";
+            parent.document.title="CurseCreateModpack (serverpackcreator API)";
         }
     }
     catch(err) {
@@ -48,11 +48,11 @@ var activeTableTab = "activeTableTab";
 <div class="subNav">
 <ul class="navList">
 <li>Prev&nbsp;Class</li>
-<li><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Files.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
-<li><a href="../../../../index.html?de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html" target="_top">Frames</a></li>
-<li><a href="CreateModpack.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../../index.html?de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" target="_top">Frames</a></li>
+<li><a href="CurseCreateModpack.html" target="_top">No&nbsp;Frames</a></li>
 </ul>
 <ul class="navList" id="allclasses_navbar_top">
 <li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
@@ -91,14 +91,14 @@ var activeTableTab = "activeTableTab";
 <!-- ======== START OF CLASS DATA ======== -->
 <div class="header">
 <div class="subTitle">de.griefed.serverpackcreator.curseforgemodpack</div>
-<h2 title="Class CreateModpack" class="title">Class CreateModpack</h2>
+<h2 title="Class CurseCreateModpack" class="title">Class CurseCreateModpack</h2>
 </div>
 <div class="contentContainer">
 <ul class="inheritance">
 <li>java.lang.Object</li>
 <li>
 <ul class="inheritance">
-<li>de.griefed.serverpackcreator.curseforgemodpack.CreateModpack</li>
+<li>de.griefed.serverpackcreator.curseforgemodpack.CurseCreateModpack</li>
 </ul>
 </li>
 </ul>
@@ -107,7 +107,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <hr>
 <br>
-<pre>public class <span class="typeNameLabel">CreateModpack</span>
+<pre>public class <span class="typeNameLabel">CurseCreateModpack</span>
 extends java.lang.Object</pre>
 </li>
 </ul>
@@ -129,19 +129,23 @@ extends java.lang.Object</pre>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private static org.apache.logging.log4j.Logger</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html#appLogger">appLogger</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#appLogger">appLogger</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>private static java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html#fileDiskName">fileDiskName</a></span></code>&nbsp;</td>
+<td class="colFirst"><code>private java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#fileDiskName">fileDiskName</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>private static java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html#fileName">fileName</a></span></code>&nbsp;</td>
+<td class="colFirst"><code>private java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#fileName">fileName</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>private static java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html#projectName">projectName</a></span></code>&nbsp;</td>
+<td class="colFirst"><code>private <a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#localizationManager">localizationManager</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#projectName">projectName</a></span></code>&nbsp;</td>
 </tr>
 </table>
 </li>
@@ -158,7 +162,7 @@ extends java.lang.Object</pre>
 <th class="colOne" scope="col">Constructor and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html#CreateModpack--">CreateModpack</a></span>()</code>&nbsp;</td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#CurseCreateModpack-de.griefed.serverpackcreator.i18n.LocalizationManager-">CurseCreateModpack</a></span>(<a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a>&nbsp;injectedLocalizationManager)</code>&nbsp;</td>
 </tr>
 </table>
 </li>
@@ -177,19 +181,19 @@ extends java.lang.Object</pre>
 </tr>
 <tr id="i0" class="altColor">
 <td class="colFirst"><code>private boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html#checkCurseForgeDir-java.lang.String-">checkCurseForgeDir</a></span>(java.lang.String&nbsp;modpackDir)</code>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#checkCurseForgeDir-java.lang.String-">checkCurseForgeDir</a></span>(java.lang.String&nbsp;modpackDir)</code>
 <div class="block">Check whether the folder for the specified CurseForge projectID/fileID exists.</div>
 </td>
 </tr>
 <tr id="i1" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html#copyOverride-java.lang.String-">copyOverride</a></span>(java.lang.String&nbsp;modpackDir)</code>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#copyOverride-java.lang.String-">copyOverride</a></span>(java.lang.String&nbsp;modpackDir)</code>
 <div class="block">Copies all folders and the files therein to the parent modpack directory.</div>
 </td>
 </tr>
 <tr id="i2" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html#curseForgeModpack-java.lang.String-java.lang.Integer-java.lang.Integer-">curseForgeModpack</a></span>(java.lang.String&nbsp;modpackDir,
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#curseForgeModpack-java.lang.String-java.lang.Integer-java.lang.Integer-">curseForgeModpack</a></span>(java.lang.String&nbsp;modpackDir,
                  java.lang.Integer&nbsp;projectID,
                  java.lang.Integer&nbsp;fileID)</code>
 <div class="block">Gets the names of the specified project and file and makes calls to methods which create the modpack so we can then create a server pack from it.</div>
@@ -197,13 +201,13 @@ extends java.lang.Object</pre>
 </tr>
 <tr id="i3" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html#downloadMods-java.lang.String-">downloadMods</a></span>(java.lang.String&nbsp;modpackDir)</code>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#downloadMods-java.lang.String-">downloadMods</a></span>(java.lang.String&nbsp;modpackDir)</code>
 <div class="block">Downloads all mods specified in the modpack's manifest.json file.</div>
 </td>
 </tr>
 <tr id="i4" class="altColor">
 <td class="colFirst"><code>private void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html#initializeModpack-java.lang.String-java.lang.Integer-java.lang.Integer-">initializeModpack</a></span>(java.lang.String&nbsp;modpackDir,
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#initializeModpack-java.lang.String-java.lang.Integer-java.lang.Integer-">initializeModpack</a></span>(java.lang.String&nbsp;modpackDir,
                  java.lang.Integer&nbsp;projectID,
                  java.lang.Integer&nbsp;fileID)</code>
 <div class="block">Downloads the specified file of the specified project to a directory which is the combination of the project name and file display name.</div>
@@ -211,20 +215,20 @@ extends java.lang.Object</pre>
 </tr>
 <tr id="i5" class="rowColor">
 <td class="colFirst"><code>private java.io.File</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html#newFile-java.io.File-java.util.zip.ZipEntry-">newFile</a></span>(java.io.File&nbsp;destinationDir,
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#newFile-java.io.File-java.util.zip.ZipEntry-">newFile</a></span>(java.io.File&nbsp;destinationDir,
        java.util.zip.ZipEntry&nbsp;zipEntry)</code>
 <div class="block">Helper-Method for unzipArchive.</div>
 </td>
 </tr>
 <tr id="i6" class="altColor">
 <td class="colFirst"><code>(package private) java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html#setModloader-java.lang.String-">setModloader</a></span>(java.lang.String&nbsp;modloader)</code>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#setModloader-java.lang.String-">setModloader</a></span>(java.lang.String&nbsp;modloader)</code>
 <div class="block">Standardize the specified modloader.</div>
 </td>
 </tr>
 <tr id="i7" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html#unzipArchive-java.lang.String-java.lang.String-">unzipArchive</a></span>(java.lang.String&nbsp;zipFile,
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#unzipArchive-java.lang.String-java.lang.String-">unzipArchive</a></span>(java.lang.String&nbsp;zipFile,
             java.lang.String&nbsp;modpackDir)</code>
 <div class="block">With help from: https://www.baeldung.com/java-compress-and-uncompress
  Unzips the downloaded modpack archive to a directory.</div>
@@ -267,7 +271,7 @@ extends java.lang.Object</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>projectName</h4>
-<pre>private static&nbsp;java.lang.String projectName</pre>
+<pre>private&nbsp;java.lang.String projectName</pre>
 </li>
 </ul>
 <a name="fileName">
@@ -276,16 +280,25 @@ extends java.lang.Object</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>fileName</h4>
-<pre>private static&nbsp;java.lang.String fileName</pre>
+<pre>private&nbsp;java.lang.String fileName</pre>
 </li>
 </ul>
 <a name="fileDiskName">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>fileDiskName</h4>
-<pre>private static&nbsp;java.lang.String fileDiskName</pre>
+<pre>private&nbsp;java.lang.String fileDiskName</pre>
+</li>
+</ul>
+<a name="localizationManager">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>localizationManager</h4>
+<pre>private&nbsp;<a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a> localizationManager</pre>
 </li>
 </ul>
 </li>
@@ -296,13 +309,13 @@ extends java.lang.Object</pre>
 <!--   -->
 </a>
 <h3>Constructor Detail</h3>
-<a name="CreateModpack--">
+<a name="CurseCreateModpack-de.griefed.serverpackcreator.i18n.LocalizationManager-">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>CreateModpack</h4>
-<pre>public&nbsp;CreateModpack()</pre>
+<h4>CurseCreateModpack</h4>
+<pre>public&nbsp;CurseCreateModpack(<a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a>&nbsp;injectedLocalizationManager)</pre>
 </li>
 </ul>
 </li>
@@ -474,11 +487,11 @@ extends java.lang.Object</pre>
 <div class="subNav">
 <ul class="navList">
 <li>Prev&nbsp;Class</li>
-<li><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Files.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
-<li><a href="../../../../index.html?de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html" target="_top">Frames</a></li>
-<li><a href="CreateModpack.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../../index.html?de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" target="_top">Frames</a></li>
+<li><a href="CurseCreateModpack.html" target="_top">No&nbsp;Frames</a></li>
 </ul>
 <ul class="navList" id="allclasses_navbar_bottom">
 <li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
diff --git a/docs/de/griefed/serverpackcreator/curseforgemodpack/Files.html b/docs/de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html
similarity index 81%
rename from docs/de/griefed/serverpackcreator/curseforgemodpack/Files.html
rename to docs/de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html
index 596b7cec9..265587130 100644
--- a/docs/de/griefed/serverpackcreator/curseforgemodpack/Files.html
+++ b/docs/de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html
@@ -3,7 +3,7 @@
 <html lang="de">
 <head>
 <!-- Generated by javadoc -->
-<title>Files (serverpackcreator API)</title>
+<title>CurseFiles (serverpackcreator API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -11,7 +11,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Files (serverpackcreator API)";
+            parent.document.title="CurseFiles (serverpackcreator API)";
         }
     }
     catch(err) {
@@ -47,12 +47,12 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Minecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
-<li><a href="../../../../index.html?de/griefed/serverpackcreator/curseforgemodpack/Files.html" target="_top">Frames</a></li>
-<li><a href="Files.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../../index.html?de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html" target="_top">Frames</a></li>
+<li><a href="CurseFiles.html" target="_top">No&nbsp;Frames</a></li>
 </ul>
 <ul class="navList" id="allclasses_navbar_top">
 <li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
@@ -91,14 +91,14 @@ var activeTableTab = "activeTableTab";
 <!-- ======== START OF CLASS DATA ======== -->
 <div class="header">
 <div class="subTitle">de.griefed.serverpackcreator.curseforgemodpack</div>
-<h2 title="Class Files" class="title">Class Files</h2>
+<h2 title="Class CurseFiles" class="title">Class CurseFiles</h2>
 </div>
 <div class="contentContainer">
 <ul class="inheritance">
 <li>java.lang.Object</li>
 <li>
 <ul class="inheritance">
-<li>de.griefed.serverpackcreator.curseforgemodpack.Files</li>
+<li>de.griefed.serverpackcreator.curseforgemodpack.CurseFiles</li>
 </ul>
 </li>
 </ul>
@@ -107,7 +107,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <hr>
 <br>
-<pre>public class <span class="typeNameLabel">Files</span>
+<pre>public class <span class="typeNameLabel">CurseFiles</span>
 extends java.lang.Object</pre>
 </li>
 </ul>
@@ -129,11 +129,11 @@ extends java.lang.Object</pre>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Files.html#fileID">fileID</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#fileID">fileID</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Files.html#projectID">projectID</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#projectID">projectID</a></span></code>&nbsp;</td>
 </tr>
 </table>
 </li>
@@ -150,7 +150,7 @@ extends java.lang.Object</pre>
 <th class="colOne" scope="col">Constructor and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Files.html#Files--">Files</a></span>()</code>&nbsp;</td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#CurseFiles--">CurseFiles</a></span>()</code>&nbsp;</td>
 </tr>
 </table>
 </li>
@@ -169,23 +169,23 @@ extends java.lang.Object</pre>
 </tr>
 <tr id="i0" class="altColor">
 <td class="colFirst"><code>java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Files.html#getFileID--">getFileID</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#getFileID--">getFileID</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i1" class="rowColor">
 <td class="colFirst"><code>java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Files.html#getProjectID--">getProjectID</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#getProjectID--">getProjectID</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i2" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Files.html#setFileID-java.lang.String-">setFileID</a></span>(java.lang.String&nbsp;fileID)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#setFileID-java.lang.String-">setFileID</a></span>(java.lang.String&nbsp;fileID)</code>&nbsp;</td>
 </tr>
 <tr id="i3" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Files.html#setProjectID-java.lang.String-">setProjectID</a></span>(java.lang.String&nbsp;projectID)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#setProjectID-java.lang.String-">setProjectID</a></span>(java.lang.String&nbsp;projectID)</code>&nbsp;</td>
 </tr>
 <tr id="i4" class="altColor">
 <td class="colFirst"><code>java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Files.html#toString--">toString</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#toString--">toString</a></span>()</code>&nbsp;</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -235,13 +235,13 @@ extends java.lang.Object</pre>
 <!--   -->
 </a>
 <h3>Constructor Detail</h3>
-<a name="Files--">
+<a name="CurseFiles--">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>Files</h4>
-<pre>public&nbsp;Files()</pre>
+<h4>CurseFiles</h4>
+<pre>public&nbsp;CurseFiles()</pre>
 </li>
 </ul>
 </li>
@@ -328,12 +328,12 @@ extends java.lang.Object</pre>
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Minecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
-<li><a href="../../../../index.html?de/griefed/serverpackcreator/curseforgemodpack/Files.html" target="_top">Frames</a></li>
-<li><a href="Files.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../../index.html?de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html" target="_top">Frames</a></li>
+<li><a href="CurseFiles.html" target="_top">No&nbsp;Frames</a></li>
 </ul>
 <ul class="navList" id="allclasses_navbar_bottom">
 <li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
diff --git a/docs/de/griefed/serverpackcreator/curseforgemodpack/Minecraft.html b/docs/de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html
similarity index 75%
rename from docs/de/griefed/serverpackcreator/curseforgemodpack/Minecraft.html
rename to docs/de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html
index d2f6f2e01..5989e2acf 100644
--- a/docs/de/griefed/serverpackcreator/curseforgemodpack/Minecraft.html
+++ b/docs/de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html
@@ -3,7 +3,7 @@
 <html lang="de">
 <head>
 <!-- Generated by javadoc -->
-<title>Minecraft (serverpackcreator API)</title>
+<title>CurseMinecraft (serverpackcreator API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -11,7 +11,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Minecraft (serverpackcreator API)";
+            parent.document.title="CurseMinecraft (serverpackcreator API)";
         }
     }
     catch(err) {
@@ -47,12 +47,12 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Files.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/ModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
-<li><a href="../../../../index.html?de/griefed/serverpackcreator/curseforgemodpack/Minecraft.html" target="_top">Frames</a></li>
-<li><a href="Minecraft.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../../index.html?de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" target="_top">Frames</a></li>
+<li><a href="CurseMinecraft.html" target="_top">No&nbsp;Frames</a></li>
 </ul>
 <ul class="navList" id="allclasses_navbar_top">
 <li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
@@ -91,14 +91,14 @@ var activeTableTab = "activeTableTab";
 <!-- ======== START OF CLASS DATA ======== -->
 <div class="header">
 <div class="subTitle">de.griefed.serverpackcreator.curseforgemodpack</div>
-<h2 title="Class Minecraft" class="title">Class Minecraft</h2>
+<h2 title="Class CurseMinecraft" class="title">Class CurseMinecraft</h2>
 </div>
 <div class="contentContainer">
 <ul class="inheritance">
 <li>java.lang.Object</li>
 <li>
 <ul class="inheritance">
-<li>de.griefed.serverpackcreator.curseforgemodpack.Minecraft</li>
+<li>de.griefed.serverpackcreator.curseforgemodpack.CurseMinecraft</li>
 </ul>
 </li>
 </ul>
@@ -107,7 +107,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <hr>
 <br>
-<pre>class <span class="typeNameLabel">Minecraft</span>
+<pre>class <span class="typeNameLabel">CurseMinecraft</span>
 extends java.lang.Object</pre>
 </li>
 </ul>
@@ -128,12 +128,12 @@ extends java.lang.Object</pre>
 <th class="colLast" scope="col">Field and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>private java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/ModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">ModLoaders</a>&gt;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Minecraft.html#modLoaders">modLoaders</a></span></code>&nbsp;</td>
+<td class="colFirst"><code>private java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModLoaders</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#modLoaders">modLoaders</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Minecraft.html#version">version</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#version">version</a></span></code>&nbsp;</td>
 </tr>
 </table>
 </li>
@@ -150,7 +150,7 @@ extends java.lang.Object</pre>
 <th class="colOne" scope="col">Constructor and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Minecraft.html#Minecraft--">Minecraft</a></span>()</code>&nbsp;</td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#CurseMinecraft--">CurseMinecraft</a></span>()</code>&nbsp;</td>
 </tr>
 </table>
 </li>
@@ -168,24 +168,24 @@ extends java.lang.Object</pre>
 <th class="colLast" scope="col">Method and Description</th>
 </tr>
 <tr id="i0" class="altColor">
-<td class="colFirst"><code>java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/ModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">ModLoaders</a>&gt;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Minecraft.html#getModLoaders--">getModLoaders</a></span>()</code>&nbsp;</td>
+<td class="colFirst"><code>java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModLoaders</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#getModLoaders--">getModLoaders</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i1" class="rowColor">
 <td class="colFirst"><code>java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Minecraft.html#getVersion--">getVersion</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#getVersion--">getVersion</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i2" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Minecraft.html#setModLoaders-java.util.List-">setModLoaders</a></span>(java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/ModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">ModLoaders</a>&gt;&nbsp;modLoaders)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#setModLoaders-java.util.List-">setModLoaders</a></span>(java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModLoaders</a>&gt;&nbsp;modLoaders)</code>&nbsp;</td>
 </tr>
 <tr id="i3" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Minecraft.html#setVersion-java.lang.String-">setVersion</a></span>(java.lang.String&nbsp;version)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#setVersion-java.lang.String-">setVersion</a></span>(java.lang.String&nbsp;version)</code>&nbsp;</td>
 </tr>
 <tr id="i4" class="altColor">
 <td class="colFirst"><code>java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Minecraft.html#toString--">toString</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#toString--">toString</a></span>()</code>&nbsp;</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -224,7 +224,7 @@ extends java.lang.Object</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>modLoaders</h4>
-<pre>private&nbsp;java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/ModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">ModLoaders</a>&gt; modLoaders</pre>
+<pre>private&nbsp;java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModLoaders</a>&gt; modLoaders</pre>
 </li>
 </ul>
 </li>
@@ -235,13 +235,13 @@ extends java.lang.Object</pre>
 <!--   -->
 </a>
 <h3>Constructor Detail</h3>
-<a name="Minecraft--">
+<a name="CurseMinecraft--">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>Minecraft</h4>
-<pre>Minecraft()</pre>
+<h4>CurseMinecraft</h4>
+<pre>CurseMinecraft()</pre>
 </li>
 </ul>
 </li>
@@ -276,7 +276,7 @@ extends java.lang.Object</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getModLoaders</h4>
-<pre>public&nbsp;java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/ModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">ModLoaders</a>&gt;&nbsp;getModLoaders()</pre>
+<pre>public&nbsp;java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModLoaders</a>&gt;&nbsp;getModLoaders()</pre>
 </li>
 </ul>
 <a name="setModLoaders-java.util.List-">
@@ -285,7 +285,7 @@ extends java.lang.Object</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>setModLoaders</h4>
-<pre>public&nbsp;void&nbsp;setModLoaders(java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/ModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">ModLoaders</a>&gt;&nbsp;modLoaders)</pre>
+<pre>public&nbsp;void&nbsp;setModLoaders(java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModLoaders</a>&gt;&nbsp;modLoaders)</pre>
 </li>
 </ul>
 <a name="toString--">
@@ -328,12 +328,12 @@ extends java.lang.Object</pre>
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Files.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/ModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
-<li><a href="../../../../index.html?de/griefed/serverpackcreator/curseforgemodpack/Minecraft.html" target="_top">Frames</a></li>
-<li><a href="Minecraft.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../../index.html?de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" target="_top">Frames</a></li>
+<li><a href="CurseMinecraft.html" target="_top">No&nbsp;Frames</a></li>
 </ul>
 <ul class="navList" id="allclasses_navbar_bottom">
 <li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
diff --git a/docs/de/griefed/serverpackcreator/curseforgemodpack/ModLoaders.html b/docs/de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html
similarity index 82%
rename from docs/de/griefed/serverpackcreator/curseforgemodpack/ModLoaders.html
rename to docs/de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html
index b7a16c9ae..f12e1bd49 100644
--- a/docs/de/griefed/serverpackcreator/curseforgemodpack/ModLoaders.html
+++ b/docs/de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html
@@ -3,7 +3,7 @@
 <html lang="de">
 <head>
 <!-- Generated by javadoc -->
-<title>ModLoaders (serverpackcreator API)</title>
+<title>CurseModLoaders (serverpackcreator API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -11,7 +11,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="ModLoaders (serverpackcreator API)";
+            parent.document.title="CurseModLoaders (serverpackcreator API)";
         }
     }
     catch(err) {
@@ -47,12 +47,12 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Minecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Modpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
-<li><a href="../../../../index.html?de/griefed/serverpackcreator/curseforgemodpack/ModLoaders.html" target="_top">Frames</a></li>
-<li><a href="ModLoaders.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../../index.html?de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html" target="_top">Frames</a></li>
+<li><a href="CurseModLoaders.html" target="_top">No&nbsp;Frames</a></li>
 </ul>
 <ul class="navList" id="allclasses_navbar_top">
 <li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
@@ -91,14 +91,14 @@ var activeTableTab = "activeTableTab";
 <!-- ======== START OF CLASS DATA ======== -->
 <div class="header">
 <div class="subTitle">de.griefed.serverpackcreator.curseforgemodpack</div>
-<h2 title="Class ModLoaders" class="title">Class ModLoaders</h2>
+<h2 title="Class CurseModLoaders" class="title">Class CurseModLoaders</h2>
 </div>
 <div class="contentContainer">
 <ul class="inheritance">
 <li>java.lang.Object</li>
 <li>
 <ul class="inheritance">
-<li>de.griefed.serverpackcreator.curseforgemodpack.ModLoaders</li>
+<li>de.griefed.serverpackcreator.curseforgemodpack.CurseModLoaders</li>
 </ul>
 </li>
 </ul>
@@ -107,7 +107,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <hr>
 <br>
-<pre>class <span class="typeNameLabel">ModLoaders</span>
+<pre>class <span class="typeNameLabel">CurseModLoaders</span>
 extends java.lang.Object</pre>
 </li>
 </ul>
@@ -129,7 +129,7 @@ extends java.lang.Object</pre>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/ModLoaders.html#id">id</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html#id">id</a></span></code>&nbsp;</td>
 </tr>
 </table>
 </li>
@@ -146,7 +146,7 @@ extends java.lang.Object</pre>
 <th class="colOne" scope="col">Constructor and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/ModLoaders.html#ModLoaders--">ModLoaders</a></span>()</code>&nbsp;</td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html#CurseModLoaders--">CurseModLoaders</a></span>()</code>&nbsp;</td>
 </tr>
 </table>
 </li>
@@ -165,15 +165,15 @@ extends java.lang.Object</pre>
 </tr>
 <tr id="i0" class="altColor">
 <td class="colFirst"><code>java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/ModLoaders.html#getId--">getId</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html#getId--">getId</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i1" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/ModLoaders.html#setId-java.lang.String-">setId</a></span>(java.lang.String&nbsp;id)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html#setId-java.lang.String-">setId</a></span>(java.lang.String&nbsp;id)</code>&nbsp;</td>
 </tr>
 <tr id="i2" class="altColor">
 <td class="colFirst"><code>java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/ModLoaders.html#toString--">toString</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html#toString--">toString</a></span>()</code>&nbsp;</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -214,13 +214,13 @@ extends java.lang.Object</pre>
 <!--   -->
 </a>
 <h3>Constructor Detail</h3>
-<a name="ModLoaders--">
+<a name="CurseModLoaders--">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>ModLoaders</h4>
-<pre>ModLoaders()</pre>
+<h4>CurseModLoaders</h4>
+<pre>CurseModLoaders()</pre>
 </li>
 </ul>
 </li>
@@ -289,12 +289,12 @@ extends java.lang.Object</pre>
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Minecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Modpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
-<li><a href="../../../../index.html?de/griefed/serverpackcreator/curseforgemodpack/ModLoaders.html" target="_top">Frames</a></li>
-<li><a href="ModLoaders.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../../index.html?de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html" target="_top">Frames</a></li>
+<li><a href="CurseModLoaders.html" target="_top">No&nbsp;Frames</a></li>
 </ul>
 <ul class="navList" id="allclasses_navbar_bottom">
 <li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
diff --git a/docs/de/griefed/serverpackcreator/curseforgemodpack/Modpack.html b/docs/de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html
similarity index 70%
rename from docs/de/griefed/serverpackcreator/curseforgemodpack/Modpack.html
rename to docs/de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html
index 72d59cd81..6b71df42e 100644
--- a/docs/de/griefed/serverpackcreator/curseforgemodpack/Modpack.html
+++ b/docs/de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html
@@ -3,7 +3,7 @@
 <html lang="de">
 <head>
 <!-- Generated by javadoc -->
-<title>Modpack (serverpackcreator API)</title>
+<title>CurseModpack (serverpackcreator API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -11,13 +11,13 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Modpack (serverpackcreator API)";
+            parent.document.title="CurseModpack (serverpackcreator API)";
         }
     }
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -47,12 +47,12 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/ModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Splines.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
-<li><a href="../../../../index.html?de/griefed/serverpackcreator/curseforgemodpack/Modpack.html" target="_top">Frames</a></li>
-<li><a href="Modpack.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../../index.html?de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" target="_top">Frames</a></li>
+<li><a href="CurseModpack.html" target="_top">No&nbsp;Frames</a></li>
 </ul>
 <ul class="navList" id="allclasses_navbar_top">
 <li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
@@ -91,14 +91,14 @@ var activeTableTab = "activeTableTab";
 <!-- ======== START OF CLASS DATA ======== -->
 <div class="header">
 <div class="subTitle">de.griefed.serverpackcreator.curseforgemodpack</div>
-<h2 title="Class Modpack" class="title">Class Modpack</h2>
+<h2 title="Class CurseModpack" class="title">Class CurseModpack</h2>
 </div>
 <div class="contentContainer">
 <ul class="inheritance">
 <li>java.lang.Object</li>
 <li>
 <ul class="inheritance">
-<li>de.griefed.serverpackcreator.curseforgemodpack.Modpack</li>
+<li>de.griefed.serverpackcreator.curseforgemodpack.CurseModpack</li>
 </ul>
 </li>
 </ul>
@@ -107,7 +107,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <hr>
 <br>
-<pre>public class <span class="typeNameLabel">Modpack</span>
+<pre>public class <span class="typeNameLabel">CurseModpack</span>
 extends java.lang.Object</pre>
 </li>
 </ul>
@@ -129,23 +129,23 @@ extends java.lang.Object</pre>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Modpack.html#author">author</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#author">author</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>private java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Files.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Files</a>&gt;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Modpack.html#files">files</a></span></code>&nbsp;</td>
+<td class="colFirst"><code>private java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseFiles</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#files">files</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>private java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Minecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Minecraft</a>&gt;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Modpack.html#minecraft">minecraft</a></span></code>&nbsp;</td>
+<td class="colFirst"><code>private java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseMinecraft</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#minecraft">minecraft</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Modpack.html#name">name</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#name">name</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Modpack.html#version">version</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#version">version</a></span></code>&nbsp;</td>
 </tr>
 </table>
 </li>
@@ -162,7 +162,7 @@ extends java.lang.Object</pre>
 <th class="colOne" scope="col">Constructor and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Modpack.html#Modpack--">Modpack</a></span>()</code>&nbsp;</td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#CurseModpack--">CurseModpack</a></span>()</code>&nbsp;</td>
 </tr>
 </table>
 </li>
@@ -181,47 +181,43 @@ extends java.lang.Object</pre>
 </tr>
 <tr id="i0" class="altColor">
 <td class="colFirst"><code>java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Modpack.html#getAuthor--">getAuthor</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#getAuthor--">getAuthor</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i1" class="rowColor">
-<td class="colFirst"><code>java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Files.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Files</a>&gt;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Modpack.html#getFiles--">getFiles</a></span>()</code>&nbsp;</td>
+<td class="colFirst"><code>java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseFiles</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#getFiles--">getFiles</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i2" class="altColor">
-<td class="colFirst"><code>java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Minecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Minecraft</a>&gt;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Modpack.html#getMinecraft--">getMinecraft</a></span>()</code>&nbsp;</td>
+<td class="colFirst"><code>java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseMinecraft</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#getMinecraft--">getMinecraft</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i3" class="rowColor">
 <td class="colFirst"><code>java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Modpack.html#getName--">getName</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#getName--">getName</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i4" class="altColor">
 <td class="colFirst"><code>java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Modpack.html#getVersion--">getVersion</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#getVersion--">getVersion</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i5" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Modpack.html#setAuthor-java.lang.String-">setAuthor</a></span>(java.lang.String&nbsp;author)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#setFiles-java.util.List-">setFiles</a></span>(java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseFiles</a>&gt;&nbsp;files)</code>&nbsp;</td>
 </tr>
 <tr id="i6" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Modpack.html#setFiles-java.util.List-">setFiles</a></span>(java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Files.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Files</a>&gt;&nbsp;files)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#setMinecraft-java.util.List-">setMinecraft</a></span>(java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseMinecraft</a>&gt;&nbsp;minecraft)</code>&nbsp;</td>
 </tr>
 <tr id="i7" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Modpack.html#setMinecraft-java.util.List-">setMinecraft</a></span>(java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Minecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Minecraft</a>&gt;&nbsp;minecraft)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#setName-java.lang.String-">setName</a></span>(java.lang.String&nbsp;name)</code>&nbsp;</td>
 </tr>
 <tr id="i8" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Modpack.html#setName-java.lang.String-">setName</a></span>(java.lang.String&nbsp;name)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#setVersion-java.lang.String-">setVersion</a></span>(java.lang.String&nbsp;version)</code>&nbsp;</td>
 </tr>
 <tr id="i9" class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Modpack.html#setVersion-java.lang.String-">setVersion</a></span>(java.lang.String&nbsp;version)</code>&nbsp;</td>
-</tr>
-<tr id="i10" class="altColor">
 <td class="colFirst"><code>java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Modpack.html#toString--">toString</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#toString--">toString</a></span>()</code>&nbsp;</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -251,7 +247,7 @@ extends java.lang.Object</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>minecraft</h4>
-<pre>private&nbsp;java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Minecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Minecraft</a>&gt; minecraft</pre>
+<pre>private&nbsp;java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseMinecraft</a>&gt; minecraft</pre>
 </li>
 </ul>
 <a name="name">
@@ -287,7 +283,7 @@ extends java.lang.Object</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>files</h4>
-<pre>private&nbsp;java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Files.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Files</a>&gt; files</pre>
+<pre>private&nbsp;java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseFiles</a>&gt; files</pre>
 </li>
 </ul>
 </li>
@@ -298,13 +294,13 @@ extends java.lang.Object</pre>
 <!--   -->
 </a>
 <h3>Constructor Detail</h3>
-<a name="Modpack--">
+<a name="CurseModpack--">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>Modpack</h4>
-<pre>public&nbsp;Modpack()</pre>
+<h4>CurseModpack</h4>
+<pre>public&nbsp;CurseModpack()</pre>
 </li>
 </ul>
 </li>
@@ -321,7 +317,7 @@ extends java.lang.Object</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getMinecraft</h4>
-<pre>public&nbsp;java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Minecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Minecraft</a>&gt;&nbsp;getMinecraft()</pre>
+<pre>public&nbsp;java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseMinecraft</a>&gt;&nbsp;getMinecraft()</pre>
 </li>
 </ul>
 <a name="setMinecraft-java.util.List-">
@@ -330,7 +326,7 @@ extends java.lang.Object</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>setMinecraft</h4>
-<pre>public&nbsp;void&nbsp;setMinecraft(java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Minecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Minecraft</a>&gt;&nbsp;minecraft)</pre>
+<pre>public&nbsp;void&nbsp;setMinecraft(java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseMinecraft</a>&gt;&nbsp;minecraft)</pre>
 </li>
 </ul>
 <a name="getName--">
@@ -378,22 +374,13 @@ extends java.lang.Object</pre>
 <pre>public&nbsp;java.lang.String&nbsp;getAuthor()</pre>
 </li>
 </ul>
-<a name="setAuthor-java.lang.String-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>setAuthor</h4>
-<pre>public&nbsp;void&nbsp;setAuthor(java.lang.String&nbsp;author)</pre>
-</li>
-</ul>
 <a name="getFiles--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>getFiles</h4>
-<pre>public&nbsp;java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Files.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Files</a>&gt;&nbsp;getFiles()</pre>
+<pre>public&nbsp;java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseFiles</a>&gt;&nbsp;getFiles()</pre>
 </li>
 </ul>
 <a name="setFiles-java.util.List-">
@@ -402,7 +389,7 @@ extends java.lang.Object</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>setFiles</h4>
-<pre>public&nbsp;void&nbsp;setFiles(java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Files.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Files</a>&gt;&nbsp;files)</pre>
+<pre>public&nbsp;void&nbsp;setFiles(java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseFiles</a>&gt;&nbsp;files)</pre>
 </li>
 </ul>
 <a name="toString--">
@@ -445,12 +432,12 @@ extends java.lang.Object</pre>
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/ModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Splines.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
-<li><a href="../../../../index.html?de/griefed/serverpackcreator/curseforgemodpack/Modpack.html" target="_top">Frames</a></li>
-<li><a href="Modpack.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../../index.html?de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" target="_top">Frames</a></li>
+<li><a href="CurseModpack.html" target="_top">No&nbsp;Frames</a></li>
 </ul>
 <ul class="navList" id="allclasses_navbar_bottom">
 <li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
diff --git a/docs/de/griefed/serverpackcreator/curseforgemodpack/Splines.html b/docs/de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html
similarity index 76%
rename from docs/de/griefed/serverpackcreator/curseforgemodpack/Splines.html
rename to docs/de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html
index 55d5c3180..c85ff1e0c 100644
--- a/docs/de/griefed/serverpackcreator/curseforgemodpack/Splines.html
+++ b/docs/de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html
@@ -3,7 +3,7 @@
 <html lang="de">
 <head>
 <!-- Generated by javadoc -->
-<title>Splines (serverpackcreator API)</title>
+<title>CurseSplines (serverpackcreator API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -11,14 +11,14 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Splines (serverpackcreator API)";
+            parent.document.title="CurseSplines (serverpackcreator API)";
         }
     }
     catch(err) {
     }
 //-->
-var methods = {"i0":9,"i1":9,"i2":9};
-var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],8:["t4","Concrete Methods"]};
+var methods = {"i0":10,"i1":10,"i2":10};
+var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
 var tableTab = "tableTab";
@@ -47,12 +47,12 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Modpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li>Next&nbsp;Class</li>
 </ul>
 <ul class="navList">
-<li><a href="../../../../index.html?de/griefed/serverpackcreator/curseforgemodpack/Splines.html" target="_top">Frames</a></li>
-<li><a href="Splines.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../../index.html?de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html" target="_top">Frames</a></li>
+<li><a href="CurseSplines.html" target="_top">No&nbsp;Frames</a></li>
 </ul>
 <ul class="navList" id="allclasses_navbar_top">
 <li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
@@ -91,14 +91,14 @@ var activeTableTab = "activeTableTab";
 <!-- ======== START OF CLASS DATA ======== -->
 <div class="header">
 <div class="subTitle">de.griefed.serverpackcreator.curseforgemodpack</div>
-<h2 title="Class Splines" class="title">Class Splines</h2>
+<h2 title="Class CurseSplines" class="title">Class CurseSplines</h2>
 </div>
 <div class="contentContainer">
 <ul class="inheritance">
 <li>java.lang.Object</li>
 <li>
 <ul class="inheritance">
-<li>de.griefed.serverpackcreator.curseforgemodpack.Splines</li>
+<li>de.griefed.serverpackcreator.curseforgemodpack.CurseSplines</li>
 </ul>
 </li>
 </ul>
@@ -107,7 +107,7 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <hr>
 <br>
-<pre>class <span class="typeNameLabel">Splines</span>
+<pre>class <span class="typeNameLabel">CurseSplines</span>
 extends java.lang.Object</pre>
 </li>
 </ul>
@@ -128,8 +128,8 @@ extends java.lang.Object</pre>
 <th class="colLast" scope="col">Field and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>private static java.lang.String[]</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Splines.html#reticulating">reticulating</a></span></code>&nbsp;</td>
+<td class="colFirst"><code>private java.lang.String[]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html#reticulating">reticulating</a></span></code>&nbsp;</td>
 </tr>
 </table>
 </li>
@@ -146,7 +146,7 @@ extends java.lang.Object</pre>
 <th class="colOne" scope="col">Constructor and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Splines.html#Splines--">Splines</a></span>()</code>&nbsp;</td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html#CurseSplines--">CurseSplines</a></span>()</code>&nbsp;</td>
 </tr>
 </table>
 </li>
@@ -158,22 +158,22 @@ extends java.lang.Object</pre>
 </a>
 <h3>Method Summary</h3>
 <table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
-<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
 <tr>
 <th class="colFirst" scope="col">Modifier and Type</th>
 <th class="colLast" scope="col">Method and Description</th>
 </tr>
 <tr id="i0" class="altColor">
-<td class="colFirst"><code>private static int</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Splines.html#getRandomInt--">getRandomInt</a></span>()</code>&nbsp;</td>
+<td class="colFirst"><code>private int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html#getRandomInt--">getRandomInt</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i1" class="rowColor">
-<td class="colFirst"><code>static java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Splines.html#getSplines--">getSplines</a></span>()</code>&nbsp;</td>
+<td class="colFirst"><code>private java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html#getSpline--">getSpline</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i2" class="altColor">
-<td class="colFirst"><code>private static java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Splines.html#setSplines--">setSplines</a></span>()</code>&nbsp;</td>
+<td class="colFirst"><code>java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html#reticulate--">reticulate</a></span>()</code>&nbsp;</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -203,7 +203,7 @@ extends java.lang.Object</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>reticulating</h4>
-<pre>private static final&nbsp;java.lang.String[] reticulating</pre>
+<pre>private final&nbsp;java.lang.String[] reticulating</pre>
 </li>
 </ul>
 </li>
@@ -214,13 +214,13 @@ extends java.lang.Object</pre>
 <!--   -->
 </a>
 <h3>Constructor Detail</h3>
-<a name="Splines--">
+<a name="CurseSplines--">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>Splines</h4>
-<pre>Splines()</pre>
+<h4>CurseSplines</h4>
+<pre>CurseSplines()</pre>
 </li>
 </ul>
 </li>
@@ -237,25 +237,25 @@ extends java.lang.Object</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getRandomInt</h4>
-<pre>private static&nbsp;int&nbsp;getRandomInt()</pre>
+<pre>private&nbsp;int&nbsp;getRandomInt()</pre>
 </li>
 </ul>
-<a name="setSplines--">
+<a name="getSpline--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setSplines</h4>
-<pre>private static&nbsp;java.lang.String&nbsp;setSplines()</pre>
+<h4>getSpline</h4>
+<pre>private&nbsp;java.lang.String&nbsp;getSpline()</pre>
 </li>
 </ul>
-<a name="getSplines--">
+<a name="reticulate--">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>getSplines</h4>
-<pre>public static&nbsp;java.lang.String&nbsp;getSplines()</pre>
+<h4>reticulate</h4>
+<pre>public&nbsp;java.lang.String&nbsp;reticulate()</pre>
 </li>
 </ul>
 </li>
@@ -285,12 +285,12 @@ extends java.lang.Object</pre>
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Modpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li>Next&nbsp;Class</li>
 </ul>
 <ul class="navList">
-<li><a href="../../../../index.html?de/griefed/serverpackcreator/curseforgemodpack/Splines.html" target="_top">Frames</a></li>
-<li><a href="Splines.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../../index.html?de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html" target="_top">Frames</a></li>
+<li><a href="CurseSplines.html" target="_top">No&nbsp;Frames</a></li>
 </ul>
 <ul class="navList" id="allclasses_navbar_bottom">
 <li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
diff --git a/docs/de/griefed/serverpackcreator/curseforgemodpack/package-frame.html b/docs/de/griefed/serverpackcreator/curseforgemodpack/package-frame.html
index 9fff4ae22..aeb20fef3 100644
--- a/docs/de/griefed/serverpackcreator/curseforgemodpack/package-frame.html
+++ b/docs/de/griefed/serverpackcreator/curseforgemodpack/package-frame.html
@@ -12,12 +12,12 @@
 <div class="indexContainer">
 <h2 title="Classes">Classes</h2>
 <ul title="Classes">
-<li><a href="CreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack" target="classFrame">CreateModpack</a></li>
-<li><a href="Files.html" title="class in de.griefed.serverpackcreator.curseforgemodpack" target="classFrame">Files</a></li>
-<li><a href="Minecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack" target="classFrame">Minecraft</a></li>
-<li><a href="ModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack" target="classFrame">ModLoaders</a></li>
-<li><a href="Modpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack" target="classFrame">Modpack</a></li>
-<li><a href="Splines.html" title="class in de.griefed.serverpackcreator.curseforgemodpack" target="classFrame">Splines</a></li>
+<li><a href="CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack" target="classFrame">CurseCreateModpack</a></li>
+<li><a href="CurseFiles.html" title="class in de.griefed.serverpackcreator.curseforgemodpack" target="classFrame">CurseFiles</a></li>
+<li><a href="CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack" target="classFrame">CurseMinecraft</a></li>
+<li><a href="CurseModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack" target="classFrame">CurseModLoaders</a></li>
+<li><a href="CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack" target="classFrame">CurseModpack</a></li>
+<li><a href="CurseSplines.html" title="class in de.griefed.serverpackcreator.curseforgemodpack" target="classFrame">CurseSplines</a></li>
 </ul>
 </div>
 </body>
diff --git a/docs/de/griefed/serverpackcreator/curseforgemodpack/package-summary.html b/docs/de/griefed/serverpackcreator/curseforgemodpack/package-summary.html
index 0429cd77a..802b0cf25 100644
--- a/docs/de/griefed/serverpackcreator/curseforgemodpack/package-summary.html
+++ b/docs/de/griefed/serverpackcreator/curseforgemodpack/package-summary.html
@@ -81,27 +81,27 @@
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colFirst"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CreateModpack</a></td>
+<td class="colFirst"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseCreateModpack</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Files.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Files</a></td>
+<td class="colFirst"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseFiles</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Minecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Minecraft</a></td>
+<td class="colFirst"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseMinecraft</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/ModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">ModLoaders</a></td>
+<td class="colFirst"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModLoaders</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Modpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Modpack</a></td>
+<td class="colFirst"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModpack</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Splines.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Splines</a></td>
+<td class="colFirst"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseSplines</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 </tbody>
diff --git a/docs/de/griefed/serverpackcreator/curseforgemodpack/package-tree.html b/docs/de/griefed/serverpackcreator/curseforgemodpack/package-tree.html
index 9ffee1e19..e02405bdf 100644
--- a/docs/de/griefed/serverpackcreator/curseforgemodpack/package-tree.html
+++ b/docs/de/griefed/serverpackcreator/curseforgemodpack/package-tree.html
@@ -79,12 +79,12 @@
 <ul>
 <li type="circle">java.lang.Object
 <ul>
-<li type="circle">de.griefed.serverpackcreator.curseforgemodpack.<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">CreateModpack</span></a></li>
-<li type="circle">de.griefed.serverpackcreator.curseforgemodpack.<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Files.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Files</span></a></li>
-<li type="circle">de.griefed.serverpackcreator.curseforgemodpack.<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Minecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Minecraft</span></a></li>
-<li type="circle">de.griefed.serverpackcreator.curseforgemodpack.<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/ModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">ModLoaders</span></a></li>
-<li type="circle">de.griefed.serverpackcreator.curseforgemodpack.<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Modpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Modpack</span></a></li>
-<li type="circle">de.griefed.serverpackcreator.curseforgemodpack.<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/Splines.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Splines</span></a></li>
+<li type="circle">de.griefed.serverpackcreator.curseforgemodpack.<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">CurseCreateModpack</span></a></li>
+<li type="circle">de.griefed.serverpackcreator.curseforgemodpack.<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">CurseFiles</span></a></li>
+<li type="circle">de.griefed.serverpackcreator.curseforgemodpack.<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">CurseMinecraft</span></a></li>
+<li type="circle">de.griefed.serverpackcreator.curseforgemodpack.<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">CurseModLoaders</span></a></li>
+<li type="circle">de.griefed.serverpackcreator.curseforgemodpack.<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">CurseModpack</span></a></li>
+<li type="circle">de.griefed.serverpackcreator.curseforgemodpack.<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">CurseSplines</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/docs/de/griefed/serverpackcreator/gui/About.html b/docs/de/griefed/serverpackcreator/gui/AboutTab.html
similarity index 83%
rename from docs/de/griefed/serverpackcreator/gui/About.html
rename to docs/de/griefed/serverpackcreator/gui/AboutTab.html
index 8c3e6ab48..43070616e 100644
--- a/docs/de/griefed/serverpackcreator/gui/About.html
+++ b/docs/de/griefed/serverpackcreator/gui/AboutTab.html
@@ -3,7 +3,7 @@
 <html lang="de">
 <head>
 <!-- Generated by javadoc -->
-<title>About (serverpackcreator API)</title>
+<title>AboutTab (serverpackcreator API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -11,7 +11,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="About (serverpackcreator API)";
+            parent.document.title="AboutTab (serverpackcreator API)";
         }
     }
     catch(err) {
@@ -48,11 +48,11 @@ var activeTableTab = "activeTableTab";
 <div class="subNav">
 <ul class="navList">
 <li>Prev&nbsp;Class</li>
-<li><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPack.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
-<li><a href="../../../../index.html?de/griefed/serverpackcreator/gui/About.html" target="_top">Frames</a></li>
-<li><a href="About.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../../index.html?de/griefed/serverpackcreator/gui/AboutTab.html" target="_top">Frames</a></li>
+<li><a href="AboutTab.html" target="_top">No&nbsp;Frames</a></li>
 </ul>
 <ul class="navList" id="allclasses_navbar_top">
 <li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
@@ -91,7 +91,7 @@ var activeTableTab = "activeTableTab";
 <!-- ======== START OF CLASS DATA ======== -->
 <div class="header">
 <div class="subTitle">de.griefed.serverpackcreator.gui</div>
-<h2 title="Class About" class="title">Class About</h2>
+<h2 title="Class AboutTab" class="title">Class AboutTab</h2>
 </div>
 <div class="contentContainer">
 <ul class="inheritance">
@@ -101,7 +101,7 @@ var activeTableTab = "activeTableTab";
 <li>java.awt.Component</li>
 <li>
 <ul class="inheritance">
-<li>de.griefed.serverpackcreator.gui.About</li>
+<li>de.griefed.serverpackcreator.gui.AboutTab</li>
 </ul>
 </li>
 </ul>
@@ -116,7 +116,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>class <span class="typeNameLabel">About</span>
+<pre>class <span class="typeNameLabel">AboutTab</span>
 extends java.awt.Component</pre>
 </li>
 </ul>
@@ -153,23 +153,27 @@ extends java.awt.Component</pre>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private static org.apache.logging.log4j.Logger</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/About.html#appLogger">appLogger</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html#appLogger">appLogger</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private javax.swing.ImageIcon</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/About.html#issueIcon">issueIcon</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html#issueIcon">issueIcon</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>private java.awt.Dimension</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/About.html#miscButtonDimension">miscButtonDimension</a></span></code>&nbsp;</td>
+<td class="colFirst"><code>private <a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html#localizationManager">localizationManager</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>private javax.swing.ImageIcon</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/About.html#pastebinIcon">pastebinIcon</a></span></code>&nbsp;</td>
+<td class="colFirst"><code>private java.awt.Dimension</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html#miscButtonDimension">miscButtonDimension</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private javax.swing.ImageIcon</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/About.html#prosperIcon">prosperIcon</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html#pastebinIcon">pastebinIcon</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private javax.swing.ImageIcon</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html#prosperIcon">prosperIcon</a></span></code>&nbsp;</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -200,7 +204,7 @@ extends java.awt.Component</pre>
 <th class="colOne" scope="col">Constructor and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/About.html#About--">About</a></span>()</code>&nbsp;</td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html#AboutTab-de.griefed.serverpackcreator.i18n.LocalizationManager-">AboutTab</a></span>(<a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a>&nbsp;injectedLocalizationManager)</code>&nbsp;</td>
 </tr>
 </table>
 </li>
@@ -219,7 +223,7 @@ extends java.awt.Component</pre>
 </tr>
 <tr id="i0" class="altColor">
 <td class="colFirst"><code>(package private) javax.swing.JComponent</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/About.html#about--">about</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html#aboutTab--">aboutTab</a></span>()</code>&nbsp;</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -289,12 +293,21 @@ extends java.awt.Component</pre>
 <a name="prosperIcon">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>prosperIcon</h4>
 <pre>private final&nbsp;javax.swing.ImageIcon prosperIcon</pre>
 </li>
 </ul>
+<a name="localizationManager">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>localizationManager</h4>
+<pre>private&nbsp;<a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a> localizationManager</pre>
+</li>
+</ul>
 </li>
 </ul>
 <!-- ========= CONSTRUCTOR DETAIL ======== -->
@@ -303,13 +316,13 @@ extends java.awt.Component</pre>
 <!--   -->
 </a>
 <h3>Constructor Detail</h3>
-<a name="About--">
+<a name="AboutTab-de.griefed.serverpackcreator.i18n.LocalizationManager-">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>About</h4>
-<pre>About()</pre>
+<h4>AboutTab</h4>
+<pre>public&nbsp;AboutTab(<a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a>&nbsp;injectedLocalizationManager)</pre>
 </li>
 </ul>
 </li>
@@ -320,13 +333,13 @@ extends java.awt.Component</pre>
 <!--   -->
 </a>
 <h3>Method Detail</h3>
-<a name="about--">
+<a name="aboutTab--">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>about</h4>
-<pre>javax.swing.JComponent&nbsp;about()</pre>
+<h4>aboutTab</h4>
+<pre>javax.swing.JComponent&nbsp;aboutTab()</pre>
 </li>
 </ul>
 </li>
@@ -357,11 +370,11 @@ extends java.awt.Component</pre>
 <div class="subNav">
 <ul class="navList">
 <li>Prev&nbsp;Class</li>
-<li><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPack.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
-<li><a href="../../../../index.html?de/griefed/serverpackcreator/gui/About.html" target="_top">Frames</a></li>
-<li><a href="About.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../../index.html?de/griefed/serverpackcreator/gui/AboutTab.html" target="_top">Frames</a></li>
+<li><a href="AboutTab.html" target="_top">No&nbsp;Frames</a></li>
 </ul>
 <ul class="navList" id="allclasses_navbar_bottom">
 <li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
diff --git a/docs/de/griefed/serverpackcreator/gui/TabbedPane.html b/docs/de/griefed/serverpackcreator/gui/CreateGui.html
similarity index 81%
rename from docs/de/griefed/serverpackcreator/gui/TabbedPane.html
rename to docs/de/griefed/serverpackcreator/gui/CreateGui.html
index 375c35c75..0dc4b6863 100644
--- a/docs/de/griefed/serverpackcreator/gui/TabbedPane.html
+++ b/docs/de/griefed/serverpackcreator/gui/CreateGui.html
@@ -3,7 +3,7 @@
 <html lang="de">
 <head>
 <!-- Generated by javadoc -->
-<title>TabbedPane (serverpackcreator API)</title>
+<title>CreateGui (serverpackcreator API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -11,7 +11,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="TabbedPane (serverpackcreator API)";
+            parent.document.title="CreateGui (serverpackcreator API)";
         }
     }
     catch(err) {
@@ -47,12 +47,12 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../de/griefed/serverpackcreator/gui/ServerPackCreatorLog.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li>Next&nbsp;Class</li>
+<li><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
-<li><a href="../../../../index.html?de/griefed/serverpackcreator/gui/TabbedPane.html" target="_top">Frames</a></li>
-<li><a href="TabbedPane.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../../index.html?de/griefed/serverpackcreator/gui/CreateGui.html" target="_top">Frames</a></li>
+<li><a href="CreateGui.html" target="_top">No&nbsp;Frames</a></li>
 </ul>
 <ul class="navList" id="allclasses_navbar_top">
 <li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
@@ -91,7 +91,7 @@ var activeTableTab = "activeTableTab";
 <!-- ======== START OF CLASS DATA ======== -->
 <div class="header">
 <div class="subTitle">de.griefed.serverpackcreator.gui</div>
-<h2 title="Class TabbedPane" class="title">Class TabbedPane</h2>
+<h2 title="Class CreateGui" class="title">Class CreateGui</h2>
 </div>
 <div class="contentContainer">
 <ul class="inheritance">
@@ -110,7 +110,7 @@ var activeTableTab = "activeTableTab";
 <li>javax.swing.JPanel</li>
 <li>
 <ul class="inheritance">
-<li>de.griefed.serverpackcreator.gui.TabbedPane</li>
+<li>de.griefed.serverpackcreator.gui.CreateGui</li>
 </ul>
 </li>
 </ul>
@@ -131,11 +131,11 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public class <span class="typeNameLabel">TabbedPane</span>
+<pre>public class <span class="typeNameLabel">CreateGui</span>
 extends javax.swing.JPanel</pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
-<dd><a href="../../../../serialized-form.html#de.griefed.serverpackcreator.gui.TabbedPane">Serialized Form</a></dd>
+<dd><a href="../../../../serialized-form.html#de.griefed.serverpackcreator.gui.CreateGui">Serialized Form</a></dd>
 </dl>
 </li>
 </ul>
@@ -193,19 +193,27 @@ extends javax.swing.JPanel</pre>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private static org.apache.logging.log4j.Logger</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/TabbedPane.html#appLogger">appLogger</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#appLogger">appLogger</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private javax.swing.ImageIcon</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/TabbedPane.html#bannerIcon">bannerIcon</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#bannerIcon">bannerIcon</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#configuration">configuration</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>private java.awt.Image</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/TabbedPane.html#icon">icon</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#icon">icon</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#localizationManager">localizationManager</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private java.awt.Dimension</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/TabbedPane.html#windowDimension">windowDimension</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#windowDimension">windowDimension</a></span></code>&nbsp;</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -243,7 +251,8 @@ extends javax.swing.JPanel</pre>
 <th class="colOne" scope="col">Constructor and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/TabbedPane.html#TabbedPane--">TabbedPane</a></span>()</code>&nbsp;</td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#CreateGui-de.griefed.serverpackcreator.i18n.LocalizationManager-de.griefed.serverpackcreator.Configuration-">CreateGui</a></span>(<a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a>&nbsp;injectedLocalizationManager,
+         <a href="../../../../de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a>&nbsp;injectedConfigCheck)</code>&nbsp;</td>
 </tr>
 </table>
 </li>
@@ -262,11 +271,11 @@ extends javax.swing.JPanel</pre>
 </tr>
 <tr id="i0" class="altColor">
 <td class="colFirst"><code>private void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/TabbedPane.html#createAndShowGUI--">createAndShowGUI</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#createAndShowGUI--">createAndShowGUI</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i1" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/TabbedPane.html#mainGUI--">mainGUI</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#mainGUI--">mainGUI</a></span>()</code>&nbsp;</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -348,12 +357,30 @@ extends javax.swing.JPanel</pre>
 <a name="windowDimension">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>windowDimension</h4>
 <pre>private final&nbsp;java.awt.Dimension windowDimension</pre>
 </li>
 </ul>
+<a name="localizationManager">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>localizationManager</h4>
+<pre>private&nbsp;<a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a> localizationManager</pre>
+</li>
+</ul>
+<a name="configuration">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>configuration</h4>
+<pre>private&nbsp;<a href="../../../../de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a> configuration</pre>
+</li>
+</ul>
 </li>
 </ul>
 <!-- ========= CONSTRUCTOR DETAIL ======== -->
@@ -362,13 +389,14 @@ extends javax.swing.JPanel</pre>
 <!--   -->
 </a>
 <h3>Constructor Detail</h3>
-<a name="TabbedPane--">
+<a name="CreateGui-de.griefed.serverpackcreator.i18n.LocalizationManager-de.griefed.serverpackcreator.Configuration-">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>TabbedPane</h4>
-<pre>public&nbsp;TabbedPane()</pre>
+<h4>CreateGui</h4>
+<pre>public&nbsp;CreateGui(<a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a>&nbsp;injectedLocalizationManager,
+                 <a href="../../../../de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a>&nbsp;injectedConfigCheck)</pre>
 </li>
 </ul>
 </li>
@@ -424,12 +452,12 @@ extends javax.swing.JPanel</pre>
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../de/griefed/serverpackcreator/gui/ServerPackCreatorLog.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li>Next&nbsp;Class</li>
+<li><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
-<li><a href="../../../../index.html?de/griefed/serverpackcreator/gui/TabbedPane.html" target="_top">Frames</a></li>
-<li><a href="TabbedPane.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../../index.html?de/griefed/serverpackcreator/gui/CreateGui.html" target="_top">Frames</a></li>
+<li><a href="CreateGui.html" target="_top">No&nbsp;Frames</a></li>
 </ul>
 <ul class="navList" id="allclasses_navbar_bottom">
 <li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
diff --git a/docs/de/griefed/serverpackcreator/gui/CreateServerPack.html b/docs/de/griefed/serverpackcreator/gui/CreateServerPackTab.html
similarity index 73%
rename from docs/de/griefed/serverpackcreator/gui/CreateServerPack.html
rename to docs/de/griefed/serverpackcreator/gui/CreateServerPackTab.html
index 97351160a..a30a2928e 100644
--- a/docs/de/griefed/serverpackcreator/gui/CreateServerPack.html
+++ b/docs/de/griefed/serverpackcreator/gui/CreateServerPackTab.html
@@ -3,7 +3,7 @@
 <html lang="de">
 <head>
 <!-- Generated by javadoc -->
-<title>CreateServerPack (serverpackcreator API)</title>
+<title>CreateServerPackTab (serverpackcreator API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -11,7 +11,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="CreateServerPack (serverpackcreator API)";
+            parent.document.title="CreateServerPackTab (serverpackcreator API)";
         }
     }
     catch(err) {
@@ -47,12 +47,12 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../de/griefed/serverpackcreator/gui/About.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../de/griefed/serverpackcreator/gui/ModloaderInstallerLog.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
-<li><a href="../../../../index.html?de/griefed/serverpackcreator/gui/CreateServerPack.html" target="_top">Frames</a></li>
-<li><a href="CreateServerPack.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../../index.html?de/griefed/serverpackcreator/gui/CreateServerPackTab.html" target="_top">Frames</a></li>
+<li><a href="CreateServerPackTab.html" target="_top">No&nbsp;Frames</a></li>
 </ul>
 <ul class="navList" id="allclasses_navbar_top">
 <li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
@@ -91,7 +91,7 @@ var activeTableTab = "activeTableTab";
 <!-- ======== START OF CLASS DATA ======== -->
 <div class="header">
 <div class="subTitle">de.griefed.serverpackcreator.gui</div>
-<h2 title="Class CreateServerPack" class="title">Class CreateServerPack</h2>
+<h2 title="Class CreateServerPackTab" class="title">Class CreateServerPackTab</h2>
 </div>
 <div class="contentContainer">
 <ul class="inheritance">
@@ -101,7 +101,7 @@ var activeTableTab = "activeTableTab";
 <li>java.awt.Component</li>
 <li>
 <ul class="inheritance">
-<li>de.griefed.serverpackcreator.gui.CreateServerPack</li>
+<li>de.griefed.serverpackcreator.gui.CreateServerPackTab</li>
 </ul>
 </li>
 </ul>
@@ -116,8 +116,12 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>class <span class="typeNameLabel">CreateServerPack</span>
+<pre>public class <span class="typeNameLabel">CreateServerPackTab</span>
 extends java.awt.Component</pre>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../serialized-form.html#de.griefed.serverpackcreator.gui.CreateServerPackTab">Serialized Form</a></dd>
+</dl>
 </li>
 </ul>
 </div>
@@ -153,31 +157,43 @@ extends java.awt.Component</pre>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private static org.apache.logging.log4j.Logger</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPack.html#appLogger">appLogger</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#appLogger">appLogger</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private java.awt.Dimension</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPack.html#chooserDimension">chooserDimension</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#chooserDimension">chooserDimension</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#configuration">configuration</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>private java.awt.Dimension</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPack.html#folderButtonDimension">folderButtonDimension</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#folderButtonDimension">folderButtonDimension</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private javax.swing.ImageIcon</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#folderIcon">folderIcon</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private javax.swing.ImageIcon</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPack.html#folderIcon">folderIcon</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#helpIcon">helpIcon</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private javax.swing.ImageIcon</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPack.html#loadIcon">loadIcon</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#loadIcon">loadIcon</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>private java.awt.Dimension</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPack.html#miscButtonDimension">miscButtonDimension</a></span></code>&nbsp;</td>
+<td class="colFirst"><code>private <a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#localizationManager">localizationManager</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>private java.awt.Dimension</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#miscButtonDimension">miscButtonDimension</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>private javax.swing.ImageIcon</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPack.html#startGeneration">startGeneration</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#startGeneration">startGeneration</a></span></code>&nbsp;</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -208,7 +224,8 @@ extends java.awt.Component</pre>
 <th class="colOne" scope="col">Constructor and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPack.html#CreateServerPack--">CreateServerPack</a></span>()</code>&nbsp;</td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#CreateServerPackTab-de.griefed.serverpackcreator.i18n.LocalizationManager-de.griefed.serverpackcreator.Configuration-">CreateServerPackTab</a></span>(<a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a>&nbsp;injectedLocalizationManager,
+                   <a href="../../../../de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a>&nbsp;injectedConfigCheck)</code>&nbsp;</td>
 </tr>
 </table>
 </li>
@@ -227,7 +244,7 @@ extends java.awt.Component</pre>
 </tr>
 <tr id="i0" class="altColor">
 <td class="colFirst"><code>(package private) javax.swing.JComponent</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPack.html#createServerPack--">createServerPack</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#createServerPackTab--">createServerPackTab</a></span>()</code>&nbsp;</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -294,6 +311,15 @@ extends java.awt.Component</pre>
 <pre>private final&nbsp;javax.swing.ImageIcon startGeneration</pre>
 </li>
 </ul>
+<a name="helpIcon">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>helpIcon</h4>
+<pre>private final&nbsp;javax.swing.ImageIcon helpIcon</pre>
+</li>
+</ul>
 <a name="folderButtonDimension">
 <!--   -->
 </a>
@@ -315,12 +341,30 @@ extends java.awt.Component</pre>
 <a name="chooserDimension">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>chooserDimension</h4>
 <pre>private final&nbsp;java.awt.Dimension chooserDimension</pre>
 </li>
 </ul>
+<a name="configuration">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>configuration</h4>
+<pre>private&nbsp;<a href="../../../../de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a> configuration</pre>
+</li>
+</ul>
+<a name="localizationManager">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>localizationManager</h4>
+<pre>private&nbsp;<a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a> localizationManager</pre>
+</li>
+</ul>
 </li>
 </ul>
 <!-- ========= CONSTRUCTOR DETAIL ======== -->
@@ -329,13 +373,14 @@ extends java.awt.Component</pre>
 <!--   -->
 </a>
 <h3>Constructor Detail</h3>
-<a name="CreateServerPack--">
+<a name="CreateServerPackTab-de.griefed.serverpackcreator.i18n.LocalizationManager-de.griefed.serverpackcreator.Configuration-">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>CreateServerPack</h4>
-<pre>CreateServerPack()</pre>
+<h4>CreateServerPackTab</h4>
+<pre>public&nbsp;CreateServerPackTab(<a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a>&nbsp;injectedLocalizationManager,
+                           <a href="../../../../de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a>&nbsp;injectedConfigCheck)</pre>
 </li>
 </ul>
 </li>
@@ -346,13 +391,13 @@ extends java.awt.Component</pre>
 <!--   -->
 </a>
 <h3>Method Detail</h3>
-<a name="createServerPack--">
+<a name="createServerPackTab--">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>createServerPack</h4>
-<pre>javax.swing.JComponent&nbsp;createServerPack()</pre>
+<h4>createServerPackTab</h4>
+<pre>javax.swing.JComponent&nbsp;createServerPackTab()</pre>
 </li>
 </ul>
 </li>
@@ -382,12 +427,12 @@ extends java.awt.Component</pre>
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../de/griefed/serverpackcreator/gui/About.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../de/griefed/serverpackcreator/gui/ModloaderInstallerLog.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
-<li><a href="../../../../index.html?de/griefed/serverpackcreator/gui/CreateServerPack.html" target="_top">Frames</a></li>
-<li><a href="CreateServerPack.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../../index.html?de/griefed/serverpackcreator/gui/CreateServerPackTab.html" target="_top">Frames</a></li>
+<li><a href="CreateServerPackTab.html" target="_top">No&nbsp;Frames</a></li>
 </ul>
 <ul class="navList" id="allclasses_navbar_bottom">
 <li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
diff --git a/docs/de/griefed/serverpackcreator/gui/ModloaderInstallerLog.html b/docs/de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html
similarity index 78%
rename from docs/de/griefed/serverpackcreator/gui/ModloaderInstallerLog.html
rename to docs/de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html
index 08f1a27b6..aea07d964 100644
--- a/docs/de/griefed/serverpackcreator/gui/ModloaderInstallerLog.html
+++ b/docs/de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html
@@ -3,7 +3,7 @@
 <html lang="de">
 <head>
 <!-- Generated by javadoc -->
-<title>ModloaderInstallerLog (serverpackcreator API)</title>
+<title>ModloaderInstallerLogTab (serverpackcreator API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -11,7 +11,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="ModloaderInstallerLog (serverpackcreator API)";
+            parent.document.title="ModloaderInstallerLogTab (serverpackcreator API)";
         }
     }
     catch(err) {
@@ -47,12 +47,12 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPack.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../de/griefed/serverpackcreator/gui/ServerPackCreatorLog.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
-<li><a href="../../../../index.html?de/griefed/serverpackcreator/gui/ModloaderInstallerLog.html" target="_top">Frames</a></li>
-<li><a href="ModloaderInstallerLog.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../../index.html?de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html" target="_top">Frames</a></li>
+<li><a href="ModloaderInstallerLogTab.html" target="_top">No&nbsp;Frames</a></li>
 </ul>
 <ul class="navList" id="allclasses_navbar_top">
 <li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
@@ -73,13 +73,13 @@ var activeTableTab = "activeTableTab";
 <ul class="subNavList">
 <li>Summary:&nbsp;</li>
 <li><a href="#nested.classes.inherited.from.class.java.awt.Component">Nested</a>&nbsp;|&nbsp;</li>
-<li><a href="#fields.inherited.from.class.java.awt.Component">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
 <li><a href="#method.summary">Method</a></li>
 </ul>
 <ul class="subNavList">
 <li>Detail:&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
 <li><a href="#method.detail">Method</a></li>
 </ul>
@@ -91,7 +91,7 @@ var activeTableTab = "activeTableTab";
 <!-- ======== START OF CLASS DATA ======== -->
 <div class="header">
 <div class="subTitle">de.griefed.serverpackcreator.gui</div>
-<h2 title="Class ModloaderInstallerLog" class="title">Class ModloaderInstallerLog</h2>
+<h2 title="Class ModloaderInstallerLogTab" class="title">Class ModloaderInstallerLogTab</h2>
 </div>
 <div class="contentContainer">
 <ul class="inheritance">
@@ -101,7 +101,7 @@ var activeTableTab = "activeTableTab";
 <li>java.awt.Component</li>
 <li>
 <ul class="inheritance">
-<li>de.griefed.serverpackcreator.gui.ModloaderInstallerLog</li>
+<li>de.griefed.serverpackcreator.gui.ModloaderInstallerLogTab</li>
 </ul>
 </li>
 </ul>
@@ -116,7 +116,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>class <span class="typeNameLabel">ModloaderInstallerLog</span>
+<pre>class <span class="typeNameLabel">ModloaderInstallerLogTab</span>
 extends java.awt.Component</pre>
 </li>
 </ul>
@@ -145,6 +145,17 @@ extends java.awt.Component</pre>
 <!--   -->
 </a>
 <h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html#localizationManager">localizationManager</a></span></code>&nbsp;</td>
+</tr>
+</table>
 <ul class="blockList">
 <li class="blockList"><a name="fields.inherited.from.class.java.awt.Component">
 <!--   -->
@@ -173,7 +184,7 @@ extends java.awt.Component</pre>
 <th class="colOne" scope="col">Constructor and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/ModloaderInstallerLog.html#ModloaderInstallerLog--">ModloaderInstallerLog</a></span>()</code>&nbsp;</td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html#ModloaderInstallerLogTab-de.griefed.serverpackcreator.i18n.LocalizationManager-">ModloaderInstallerLogTab</a></span>(<a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a>&nbsp;injectedLocalizationManager)</code>&nbsp;</td>
 </tr>
 </table>
 </li>
@@ -192,7 +203,7 @@ extends java.awt.Component</pre>
 </tr>
 <tr id="i0" class="altColor">
 <td class="colFirst"><code>(package private) javax.swing.JComponent</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/ModloaderInstallerLog.html#modloaderInstallerLog--">modloaderInstallerLog</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html#modloaderInstallerLogTab--">modloaderInstallerLogTab</a></span>()</code>&nbsp;</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -217,19 +228,36 @@ extends java.awt.Component</pre>
 <div class="details">
 <ul class="blockList">
 <li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!--   -->
+</a>
+<h3>Field Detail</h3>
+<a name="localizationManager">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>localizationManager</h4>
+<pre>private&nbsp;<a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a> localizationManager</pre>
+</li>
+</ul>
+</li>
+</ul>
 <!-- ========= CONSTRUCTOR DETAIL ======== -->
 <ul class="blockList">
 <li class="blockList"><a name="constructor.detail">
 <!--   -->
 </a>
 <h3>Constructor Detail</h3>
-<a name="ModloaderInstallerLog--">
+<a name="ModloaderInstallerLogTab-de.griefed.serverpackcreator.i18n.LocalizationManager-">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>ModloaderInstallerLog</h4>
-<pre>ModloaderInstallerLog()</pre>
+<h4>ModloaderInstallerLogTab</h4>
+<pre>public&nbsp;ModloaderInstallerLogTab(<a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a>&nbsp;injectedLocalizationManager)</pre>
 </li>
 </ul>
 </li>
@@ -240,13 +268,13 @@ extends java.awt.Component</pre>
 <!--   -->
 </a>
 <h3>Method Detail</h3>
-<a name="modloaderInstallerLog--">
+<a name="modloaderInstallerLogTab--">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>modloaderInstallerLog</h4>
-<pre>javax.swing.JComponent&nbsp;modloaderInstallerLog()</pre>
+<h4>modloaderInstallerLogTab</h4>
+<pre>javax.swing.JComponent&nbsp;modloaderInstallerLogTab()</pre>
 </li>
 </ul>
 </li>
@@ -276,12 +304,12 @@ extends java.awt.Component</pre>
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPack.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../de/griefed/serverpackcreator/gui/ServerPackCreatorLog.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
-<li><a href="../../../../index.html?de/griefed/serverpackcreator/gui/ModloaderInstallerLog.html" target="_top">Frames</a></li>
-<li><a href="ModloaderInstallerLog.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../../index.html?de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html" target="_top">Frames</a></li>
+<li><a href="ModloaderInstallerLogTab.html" target="_top">No&nbsp;Frames</a></li>
 </ul>
 <ul class="navList" id="allclasses_navbar_bottom">
 <li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
@@ -302,13 +330,13 @@ extends java.awt.Component</pre>
 <ul class="subNavList">
 <li>Summary:&nbsp;</li>
 <li><a href="#nested.classes.inherited.from.class.java.awt.Component">Nested</a>&nbsp;|&nbsp;</li>
-<li><a href="#fields.inherited.from.class.java.awt.Component">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
 <li><a href="#method.summary">Method</a></li>
 </ul>
 <ul class="subNavList">
 <li>Detail:&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
 <li><a href="#method.detail">Method</a></li>
 </ul>
diff --git a/docs/de/griefed/serverpackcreator/gui/ServerPackCreatorLog.html b/docs/de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html
similarity index 78%
rename from docs/de/griefed/serverpackcreator/gui/ServerPackCreatorLog.html
rename to docs/de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html
index 8fa1f7bad..aac0717bc 100644
--- a/docs/de/griefed/serverpackcreator/gui/ServerPackCreatorLog.html
+++ b/docs/de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html
@@ -3,7 +3,7 @@
 <html lang="de">
 <head>
 <!-- Generated by javadoc -->
-<title>ServerPackCreatorLog (serverpackcreator API)</title>
+<title>ServerPackCreatorLogTab (serverpackcreator API)</title>
 <link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
 <script type="text/javascript" src="../../../../script.js"></script>
 </head>
@@ -11,7 +11,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="ServerPackCreatorLog (serverpackcreator API)";
+            parent.document.title="ServerPackCreatorLogTab (serverpackcreator API)";
         }
     }
     catch(err) {
@@ -47,12 +47,12 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../de/griefed/serverpackcreator/gui/ModloaderInstallerLog.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../de/griefed/serverpackcreator/gui/TabbedPane.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li>Next&nbsp;Class</li>
 </ul>
 <ul class="navList">
-<li><a href="../../../../index.html?de/griefed/serverpackcreator/gui/ServerPackCreatorLog.html" target="_top">Frames</a></li>
-<li><a href="ServerPackCreatorLog.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../../index.html?de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html" target="_top">Frames</a></li>
+<li><a href="ServerPackCreatorLogTab.html" target="_top">No&nbsp;Frames</a></li>
 </ul>
 <ul class="navList" id="allclasses_navbar_top">
 <li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
@@ -73,13 +73,13 @@ var activeTableTab = "activeTableTab";
 <ul class="subNavList">
 <li>Summary:&nbsp;</li>
 <li><a href="#nested.classes.inherited.from.class.java.awt.Component">Nested</a>&nbsp;|&nbsp;</li>
-<li><a href="#fields.inherited.from.class.java.awt.Component">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
 <li><a href="#method.summary">Method</a></li>
 </ul>
 <ul class="subNavList">
 <li>Detail:&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
 <li><a href="#method.detail">Method</a></li>
 </ul>
@@ -91,7 +91,7 @@ var activeTableTab = "activeTableTab";
 <!-- ======== START OF CLASS DATA ======== -->
 <div class="header">
 <div class="subTitle">de.griefed.serverpackcreator.gui</div>
-<h2 title="Class ServerPackCreatorLog" class="title">Class ServerPackCreatorLog</h2>
+<h2 title="Class ServerPackCreatorLogTab" class="title">Class ServerPackCreatorLogTab</h2>
 </div>
 <div class="contentContainer">
 <ul class="inheritance">
@@ -101,7 +101,7 @@ var activeTableTab = "activeTableTab";
 <li>java.awt.Component</li>
 <li>
 <ul class="inheritance">
-<li>de.griefed.serverpackcreator.gui.ServerPackCreatorLog</li>
+<li>de.griefed.serverpackcreator.gui.ServerPackCreatorLogTab</li>
 </ul>
 </li>
 </ul>
@@ -116,7 +116,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>class <span class="typeNameLabel">ServerPackCreatorLog</span>
+<pre>class <span class="typeNameLabel">ServerPackCreatorLogTab</span>
 extends java.awt.Component</pre>
 </li>
 </ul>
@@ -145,6 +145,17 @@ extends java.awt.Component</pre>
 <!--   -->
 </a>
 <h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html#localizationManager">localizationManager</a></span></code>&nbsp;</td>
+</tr>
+</table>
 <ul class="blockList">
 <li class="blockList"><a name="fields.inherited.from.class.java.awt.Component">
 <!--   -->
@@ -173,7 +184,7 @@ extends java.awt.Component</pre>
 <th class="colOne" scope="col">Constructor and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/ServerPackCreatorLog.html#ServerPackCreatorLog--">ServerPackCreatorLog</a></span>()</code>&nbsp;</td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html#ServerPackCreatorLogTab-de.griefed.serverpackcreator.i18n.LocalizationManager-">ServerPackCreatorLogTab</a></span>(<a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a>&nbsp;injectedLocalizationManager)</code>&nbsp;</td>
 </tr>
 </table>
 </li>
@@ -192,7 +203,7 @@ extends java.awt.Component</pre>
 </tr>
 <tr id="i0" class="altColor">
 <td class="colFirst"><code>(package private) javax.swing.JComponent</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/ServerPackCreatorLog.html#serverPackCreatorLog--">serverPackCreatorLog</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html#serverPackCreatorLogTab--">serverPackCreatorLogTab</a></span>()</code>&nbsp;</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -217,19 +228,36 @@ extends java.awt.Component</pre>
 <div class="details">
 <ul class="blockList">
 <li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!--   -->
+</a>
+<h3>Field Detail</h3>
+<a name="localizationManager">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>localizationManager</h4>
+<pre>private&nbsp;<a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a> localizationManager</pre>
+</li>
+</ul>
+</li>
+</ul>
 <!-- ========= CONSTRUCTOR DETAIL ======== -->
 <ul class="blockList">
 <li class="blockList"><a name="constructor.detail">
 <!--   -->
 </a>
 <h3>Constructor Detail</h3>
-<a name="ServerPackCreatorLog--">
+<a name="ServerPackCreatorLogTab-de.griefed.serverpackcreator.i18n.LocalizationManager-">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>ServerPackCreatorLog</h4>
-<pre>ServerPackCreatorLog()</pre>
+<h4>ServerPackCreatorLogTab</h4>
+<pre>public&nbsp;ServerPackCreatorLogTab(<a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a>&nbsp;injectedLocalizationManager)</pre>
 </li>
 </ul>
 </li>
@@ -240,13 +268,13 @@ extends java.awt.Component</pre>
 <!--   -->
 </a>
 <h3>Method Detail</h3>
-<a name="serverPackCreatorLog--">
+<a name="serverPackCreatorLogTab--">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>serverPackCreatorLog</h4>
-<pre>javax.swing.JComponent&nbsp;serverPackCreatorLog()</pre>
+<h4>serverPackCreatorLogTab</h4>
+<pre>javax.swing.JComponent&nbsp;serverPackCreatorLogTab()</pre>
 </li>
 </ul>
 </li>
@@ -276,12 +304,12 @@ extends java.awt.Component</pre>
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../de/griefed/serverpackcreator/gui/ModloaderInstallerLog.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../de/griefed/serverpackcreator/gui/TabbedPane.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li>Next&nbsp;Class</li>
 </ul>
 <ul class="navList">
-<li><a href="../../../../index.html?de/griefed/serverpackcreator/gui/ServerPackCreatorLog.html" target="_top">Frames</a></li>
-<li><a href="ServerPackCreatorLog.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../../index.html?de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html" target="_top">Frames</a></li>
+<li><a href="ServerPackCreatorLogTab.html" target="_top">No&nbsp;Frames</a></li>
 </ul>
 <ul class="navList" id="allclasses_navbar_bottom">
 <li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
@@ -302,13 +330,13 @@ extends java.awt.Component</pre>
 <ul class="subNavList">
 <li>Summary:&nbsp;</li>
 <li><a href="#nested.classes.inherited.from.class.java.awt.Component">Nested</a>&nbsp;|&nbsp;</li>
-<li><a href="#fields.inherited.from.class.java.awt.Component">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
 <li><a href="#method.summary">Method</a></li>
 </ul>
 <ul class="subNavList">
 <li>Detail:&nbsp;</li>
-<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
 <li><a href="#method.detail">Method</a></li>
 </ul>
diff --git a/docs/de/griefed/serverpackcreator/gui/package-frame.html b/docs/de/griefed/serverpackcreator/gui/package-frame.html
index 046693cee..f2da25ef0 100644
--- a/docs/de/griefed/serverpackcreator/gui/package-frame.html
+++ b/docs/de/griefed/serverpackcreator/gui/package-frame.html
@@ -12,11 +12,11 @@
 <div class="indexContainer">
 <h2 title="Classes">Classes</h2>
 <ul title="Classes">
-<li><a href="About.html" title="class in de.griefed.serverpackcreator.gui" target="classFrame">About</a></li>
-<li><a href="CreateServerPack.html" title="class in de.griefed.serverpackcreator.gui" target="classFrame">CreateServerPack</a></li>
-<li><a href="ModloaderInstallerLog.html" title="class in de.griefed.serverpackcreator.gui" target="classFrame">ModloaderInstallerLog</a></li>
-<li><a href="ServerPackCreatorLog.html" title="class in de.griefed.serverpackcreator.gui" target="classFrame">ServerPackCreatorLog</a></li>
-<li><a href="TabbedPane.html" title="class in de.griefed.serverpackcreator.gui" target="classFrame">TabbedPane</a></li>
+<li><a href="AboutTab.html" title="class in de.griefed.serverpackcreator.gui" target="classFrame">AboutTab</a></li>
+<li><a href="CreateGui.html" title="class in de.griefed.serverpackcreator.gui" target="classFrame">CreateGui</a></li>
+<li><a href="CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui" target="classFrame">CreateServerPackTab</a></li>
+<li><a href="ModloaderInstallerLogTab.html" title="class in de.griefed.serverpackcreator.gui" target="classFrame">ModloaderInstallerLogTab</a></li>
+<li><a href="ServerPackCreatorLogTab.html" title="class in de.griefed.serverpackcreator.gui" target="classFrame">ServerPackCreatorLogTab</a></li>
 </ul>
 </div>
 </body>
diff --git a/docs/de/griefed/serverpackcreator/gui/package-summary.html b/docs/de/griefed/serverpackcreator/gui/package-summary.html
index 80956a8a8..2215a12ad 100644
--- a/docs/de/griefed/serverpackcreator/gui/package-summary.html
+++ b/docs/de/griefed/serverpackcreator/gui/package-summary.html
@@ -81,23 +81,23 @@
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colFirst"><a href="../../../../de/griefed/serverpackcreator/gui/About.html" title="class in de.griefed.serverpackcreator.gui">About</a></td>
+<td class="colFirst"><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui">AboutTab</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPack.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPack</a></td>
+<td class="colFirst"><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui">CreateGui</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><a href="../../../../de/griefed/serverpackcreator/gui/ModloaderInstallerLog.html" title="class in de.griefed.serverpackcreator.gui">ModloaderInstallerLog</a></td>
+<td class="colFirst"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="../../../../de/griefed/serverpackcreator/gui/ServerPackCreatorLog.html" title="class in de.griefed.serverpackcreator.gui">ServerPackCreatorLog</a></td>
+<td class="colFirst"><a href="../../../../de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html" title="class in de.griefed.serverpackcreator.gui">ModloaderInstallerLogTab</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><a href="../../../../de/griefed/serverpackcreator/gui/TabbedPane.html" title="class in de.griefed.serverpackcreator.gui">TabbedPane</a></td>
+<td class="colFirst"><a href="../../../../de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html" title="class in de.griefed.serverpackcreator.gui">ServerPackCreatorLogTab</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 </tbody>
diff --git a/docs/de/griefed/serverpackcreator/gui/package-tree.html b/docs/de/griefed/serverpackcreator/gui/package-tree.html
index 53e7f8ba3..1dfc101db 100644
--- a/docs/de/griefed/serverpackcreator/gui/package-tree.html
+++ b/docs/de/griefed/serverpackcreator/gui/package-tree.html
@@ -81,23 +81,23 @@
 <ul>
 <li type="circle">java.awt.Component (implements java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable)
 <ul>
-<li type="circle">de.griefed.serverpackcreator.gui.<a href="../../../../de/griefed/serverpackcreator/gui/About.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">About</span></a></li>
+<li type="circle">de.griefed.serverpackcreator.gui.<a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">AboutTab</span></a></li>
 <li type="circle">java.awt.Container
 <ul>
 <li type="circle">javax.swing.JComponent (implements java.io.Serializable)
 <ul>
 <li type="circle">javax.swing.JPanel (implements javax.accessibility.Accessible)
 <ul>
-<li type="circle">de.griefed.serverpackcreator.gui.<a href="../../../../de/griefed/serverpackcreator/gui/TabbedPane.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">TabbedPane</span></a></li>
+<li type="circle">de.griefed.serverpackcreator.gui.<a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">CreateGui</span></a></li>
 </ul>
 </li>
 </ul>
 </li>
 </ul>
 </li>
-<li type="circle">de.griefed.serverpackcreator.gui.<a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPack.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">CreateServerPack</span></a></li>
-<li type="circle">de.griefed.serverpackcreator.gui.<a href="../../../../de/griefed/serverpackcreator/gui/ModloaderInstallerLog.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">ModloaderInstallerLog</span></a></li>
-<li type="circle">de.griefed.serverpackcreator.gui.<a href="../../../../de/griefed/serverpackcreator/gui/ServerPackCreatorLog.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">ServerPackCreatorLog</span></a></li>
+<li type="circle">de.griefed.serverpackcreator.gui.<a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">CreateServerPackTab</span></a></li>
+<li type="circle">de.griefed.serverpackcreator.gui.<a href="../../../../de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">ModloaderInstallerLogTab</span></a></li>
+<li type="circle">de.griefed.serverpackcreator.gui.<a href="../../../../de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">ServerPackCreatorLogTab</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/docs/de/griefed/serverpackcreator/i18n/LocalizationManager.html b/docs/de/griefed/serverpackcreator/i18n/LocalizationManager.html
index 0198beeb9..e42752bb2 100644
--- a/docs/de/griefed/serverpackcreator/i18n/LocalizationManager.html
+++ b/docs/de/griefed/serverpackcreator/i18n/LocalizationManager.html
@@ -17,8 +17,8 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":9,"i1":9,"i2":9,"i3":9,"i4":9,"i5":9};
-var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],8:["t4","Concrete Methods"]};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10};
+var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
 var tableTab = "tableTab";
@@ -98,22 +98,17 @@ var activeTableTab = "activeTableTab";
 <li>java.lang.Object</li>
 <li>
 <ul class="inheritance">
-<li><a href="../../../../de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">de.griefed.serverpackcreator.Reference</a></li>
-<li>
-<ul class="inheritance">
 <li>de.griefed.serverpackcreator.i18n.LocalizationManager</li>
 </ul>
 </li>
 </ul>
-</li>
-</ul>
 <div class="description">
 <ul class="blockList">
 <li class="blockList">
 <hr>
 <br>
 <pre>public class <span class="typeNameLabel">LocalizationManager</span>
-extends <a href="../../../../de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></pre>
+extends java.lang.Object</pre>
 <div class="block">This class is localization manager for your application.
  <p>To use it, firstly run LocalizationManager.init().
  Then use LocalizationManager.getLocalizedString() to find the localized string in config file.
@@ -140,39 +135,40 @@ extends <a href="../../../../de/griefed/serverpackcreator/Reference.html" title=
 <th class="colLast" scope="col">Field and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>private static java.lang.String</code></td>
+<td class="colFirst"><code>private java.lang.String</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#COUNTRY_MAP_PATH">COUNTRY_MAP_PATH</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>private static java.util.Map&lt;java.lang.String,java.lang.String&gt;</code></td>
+<td class="colFirst"><code>private java.util.Map&lt;java.lang.String,java.lang.String&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#currentLanguage">currentLanguage</a></span></code>
 <div class="block">Current language of application, mapped for easier further reference.</div>
 </td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>private static java.lang.String</code></td>
+<td class="colFirst"><code>private java.io.File</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#langPropertiesFile">langPropertiesFile</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private java.lang.String</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#LANGUAGE_MAP_PATH">LANGUAGE_MAP_PATH</a></span></code>
 <div class="block">Keys that used for current language mapping.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static org.apache.logging.log4j.Logger</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#localeLogger">localeLogger</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static java.util.ResourceBundle</code></td>
+<tr class="rowColor">
+<td class="colFirst"><code>private java.util.ResourceBundle</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#localeResources">localeResources</a></span></code>
 <div class="block">Localized strings that application uses.</div>
 </td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><code>private java.lang.String[]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#SUPPORTED_LANGUAGES">SUPPORTED_LANGUAGES</a></span></code>&nbsp;</td>
+</tr>
 </table>
-<ul class="blockList">
-<li class="blockList"><a name="fields.inherited.from.class.de.griefed.serverpackcreator.Reference">
-<!--   -->
-</a>
-<h3>Fields inherited from class&nbsp;de.griefed.serverpackcreator.<a href="../../../../de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></h3>
-<code><a href="../../../../de/griefed/serverpackcreator/Reference.html#cliSetup">cliSetup</a>, <a href="../../../../de/griefed/serverpackcreator/Reference.html#configCheck">configCheck</a>, <a href="../../../../de/griefed/serverpackcreator/Reference.html#createModpack">createModpack</a>, <a href="../../../../de/griefed/serverpackcreator/Reference.html#filesSetup">filesSetup</a></code></li>
-</ul>
 </li>
 </ul>
 <!-- ======== CONSTRUCTOR SUMMARY ======== -->
@@ -199,48 +195,57 @@ extends <a href="../../../../de/griefed/serverpackcreator/Reference.html" title=
 </a>
 <h3>Method Summary</h3>
 <table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
-<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">Static Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
 <tr>
 <th class="colFirst" scope="col">Modifier and Type</th>
 <th class="colLast" scope="col">Method and Description</th>
 </tr>
 <tr id="i0" class="altColor">
-<td class="colFirst"><code>static java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#getLocale--">getLocale</a></span>()</code>&nbsp;</td>
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#checkLocaleFile--">checkLocaleFile</a></span>()</code>
+<div class="block">Check for existence of a lang.properties-file and if found assign language specified therein.</div>
+</td>
 </tr>
 <tr id="i1" class="rowColor">
-<td class="colFirst"><code>static java.lang.String</code></td>
+<td class="colFirst"><code>(package private) java.io.File</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#getLangPropertiesFile--">getLangPropertiesFile</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code>java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#getLocale--">getLocale</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code>java.lang.String</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#getLocalizedString-java.lang.String-">getLocalizedString</a></span>(java.lang.String&nbsp;languageKey)</code>
 <div class="block">Gets localized string from localization resource bundle.</div>
 </td>
 </tr>
-<tr id="i2" class="altColor">
-<td class="colFirst"><code>static java.lang.String[]</code></td>
+<tr id="i4" class="altColor">
+<td class="colFirst"><code>(package private) java.lang.String[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#getSupportedLanguages--">getSupportedLanguages</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i3" class="rowColor">
-<td class="colFirst"><code>static void</code></td>
+<tr id="i5" class="rowColor">
+<td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#init--">init</a></span>()</code>
 <div class="block">Initializer with default localization properties path.</div>
 </td>
 </tr>
-<tr id="i4" class="altColor">
-<td class="colFirst"><code>static void</code></td>
+<tr id="i6" class="altColor">
+<td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#init-java.io.File-">init</a></span>(java.io.File&nbsp;localePropertiesFile)</code>&nbsp;</td>
 </tr>
-<tr id="i5" class="rowColor">
-<td class="colFirst"><code>static void</code></td>
+<tr id="i7" class="rowColor">
+<td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#init-java.lang.String-">init</a></span>(java.lang.String&nbsp;locale)</code>&nbsp;</td>
 </tr>
+<tr id="i8" class="altColor">
+<td class="colFirst"><code>(package private) void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#writeLocaleToFile-java.lang.String-">writeLocaleToFile</a></span>(java.lang.String&nbsp;locale)</code>
+<div class="block">Writes the specified locale from -lang your_locale to a lang.properties file to ensure every subsequent start of serverpackcreator is executed using said locale.</div>
+</td>
+</tr>
 </table>
 <ul class="blockList">
-<li class="blockList"><a name="methods.inherited.from.class.de.griefed.serverpackcreator.Reference">
-<!--   -->
-</a>
-<h3>Methods inherited from class&nbsp;de.griefed.serverpackcreator.<a href="../../../../de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></h3>
-<code><a href="../../../../de/griefed/serverpackcreator/Reference.html#getConfig--">getConfig</a>, <a href="../../../../de/griefed/serverpackcreator/Reference.html#getConfigFile--">getConfigFile</a>, <a href="../../../../de/griefed/serverpackcreator/Reference.html#setConfig-com.typesafe.config.Config-">setConfig</a></code></li>
-</ul>
-<ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
 <!--   -->
 </a>
@@ -270,13 +275,22 @@ extends <a href="../../../../de/griefed/serverpackcreator/Reference.html" title=
 <pre>private static final&nbsp;org.apache.logging.log4j.Logger localeLogger</pre>
 </li>
 </ul>
+<a name="langPropertiesFile">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>langPropertiesFile</h4>
+<pre>private final&nbsp;java.io.File langPropertiesFile</pre>
+</li>
+</ul>
 <a name="currentLanguage">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>currentLanguage</h4>
-<pre>private static&nbsp;java.util.Map&lt;java.lang.String,java.lang.String&gt; currentLanguage</pre>
+<pre>private&nbsp;java.util.Map&lt;java.lang.String,java.lang.String&gt; currentLanguage</pre>
 <div class="block">Current language of application, mapped for easier further reference.</div>
 </li>
 </ul>
@@ -286,7 +300,7 @@ extends <a href="../../../../de/griefed/serverpackcreator/Reference.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>localeResources</h4>
-<pre>private static&nbsp;java.util.ResourceBundle localeResources</pre>
+<pre>private&nbsp;java.util.ResourceBundle localeResources</pre>
 <div class="block">Localized strings that application uses.</div>
 </li>
 </ul>
@@ -296,7 +310,7 @@ extends <a href="../../../../de/griefed/serverpackcreator/Reference.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>LANGUAGE_MAP_PATH</h4>
-<pre>private static final&nbsp;java.lang.String LANGUAGE_MAP_PATH</pre>
+<pre>private final&nbsp;java.lang.String LANGUAGE_MAP_PATH</pre>
 <div class="block">Keys that used for current language mapping.</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -307,16 +321,25 @@ extends <a href="../../../../de/griefed/serverpackcreator/Reference.html" title=
 <a name="COUNTRY_MAP_PATH">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>COUNTRY_MAP_PATH</h4>
-<pre>private static final&nbsp;java.lang.String COUNTRY_MAP_PATH</pre>
+<pre>private final&nbsp;java.lang.String COUNTRY_MAP_PATH</pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#de.griefed.serverpackcreator.i18n.LocalizationManager.COUNTRY_MAP_PATH">Constant Field Values</a></dd>
 </dl>
 </li>
 </ul>
+<a name="SUPPORTED_LANGUAGES">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>SUPPORTED_LANGUAGES</h4>
+<pre>private final&nbsp;java.lang.String[] SUPPORTED_LANGUAGES</pre>
+</li>
+</ul>
 </li>
 </ul>
 <!-- ========= CONSTRUCTOR DETAIL ======== -->
@@ -342,14 +365,41 @@ extends <a href="../../../../de/griefed/serverpackcreator/Reference.html" title=
 <!--   -->
 </a>
 <h3>Method Detail</h3>
+<a name="getSupportedLanguages--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getSupportedLanguages</h4>
+<pre>java.lang.String[]&nbsp;getSupportedLanguages()</pre>
+</li>
+</ul>
+<a name="getLangPropertiesFile--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getLangPropertiesFile</h4>
+<pre>java.io.File&nbsp;getLangPropertiesFile()</pre>
+</li>
+</ul>
+<a name="getLocale--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getLocale</h4>
+<pre>public&nbsp;java.lang.String&nbsp;getLocale()</pre>
+</li>
+</ul>
 <a name="init-java.lang.String-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>init</h4>
-<pre>public static&nbsp;void&nbsp;init(java.lang.String&nbsp;locale)
-                 throws <a href="../../../../de/griefed/serverpackcreator/i18n/IncorrectLanguageException.html" title="class in de.griefed.serverpackcreator.i18n">IncorrectLanguageException</a></pre>
+<pre>public&nbsp;void&nbsp;init(java.lang.String&nbsp;locale)
+          throws <a href="../../../../de/griefed/serverpackcreator/i18n/IncorrectLanguageException.html" title="class in de.griefed.serverpackcreator.i18n">IncorrectLanguageException</a></pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>locale</code> - Locale to be used by application in this run.</dd>
@@ -364,8 +414,8 @@ extends <a href="../../../../de/griefed/serverpackcreator/Reference.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>init</h4>
-<pre>public static&nbsp;void&nbsp;init(java.io.File&nbsp;localePropertiesFile)
-                 throws <a href="../../../../de/griefed/serverpackcreator/i18n/IncorrectLanguageException.html" title="class in de.griefed.serverpackcreator.i18n">IncorrectLanguageException</a></pre>
+<pre>public&nbsp;void&nbsp;init(java.io.File&nbsp;localePropertiesFile)
+          throws <a href="../../../../de/griefed/serverpackcreator/i18n/IncorrectLanguageException.html" title="class in de.griefed.serverpackcreator.i18n">IncorrectLanguageException</a></pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>localePropertiesFile</code> - Path to the properties file with the language specified.</dd>
@@ -380,7 +430,7 @@ extends <a href="../../../../de/griefed/serverpackcreator/Reference.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>init</h4>
-<pre>public static&nbsp;void&nbsp;init()</pre>
+<pre>public&nbsp;void&nbsp;init()</pre>
 <div class="block">Initializer with default localization properties path.</div>
 </li>
 </ul>
@@ -390,7 +440,7 @@ extends <a href="../../../../de/griefed/serverpackcreator/Reference.html" title=
 <ul class="blockList">
 <li class="blockList">
 <h4>getLocalizedString</h4>
-<pre>public static&nbsp;java.lang.String&nbsp;getLocalizedString(java.lang.String&nbsp;languageKey)</pre>
+<pre>public&nbsp;java.lang.String&nbsp;getLocalizedString(java.lang.String&nbsp;languageKey)</pre>
 <div class="block">Gets localized string from localization resource bundle.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -400,22 +450,34 @@ extends <a href="../../../../de/griefed/serverpackcreator/Reference.html" title=
 </dl>
 </li>
 </ul>
-<a name="getLocale--">
+<a name="checkLocaleFile--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getLocale</h4>
-<pre>public static&nbsp;java.lang.String&nbsp;getLocale()</pre>
+<h4>checkLocaleFile</h4>
+<pre>public&nbsp;boolean&nbsp;checkLocaleFile()</pre>
+<div class="block">Check for existence of a lang.properties-file and if found assign language specified therein. If assigning the specified language fails because it is not supported, default to en_US.
+ This method should not contain the LocalizationManager, as the initialization of said manager is called from here. Therefore, localized string are not yet available.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Always returns true. Dirty hack until I one day figure out how to init Localization before UI start correctly.</dd>
+</dl>
 </li>
 </ul>
-<a name="getSupportedLanguages--">
+<a name="writeLocaleToFile-java.lang.String-">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>getSupportedLanguages</h4>
-<pre>public static&nbsp;java.lang.String[]&nbsp;getSupportedLanguages()</pre>
+<h4>writeLocaleToFile</h4>
+<pre>void&nbsp;writeLocaleToFile(java.lang.String&nbsp;locale)</pre>
+<div class="block">Writes the specified locale from -lang your_locale to a lang.properties file to ensure every subsequent start of serverpackcreator is executed using said locale.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>locale</code> - The locale the user specified when they ran serverpackcreator with -lang -your_locale.
+ This method should not contain the LocalizationManager, as the initialization of said manager is called from here. Therefore, localized string are not yet available.</dd>
+</dl>
 </li>
 </ul>
 </li>
diff --git a/docs/de/griefed/serverpackcreator/i18n/package-tree.html b/docs/de/griefed/serverpackcreator/i18n/package-tree.html
index 1d106f8d7..e14296934 100644
--- a/docs/de/griefed/serverpackcreator/i18n/package-tree.html
+++ b/docs/de/griefed/serverpackcreator/i18n/package-tree.html
@@ -79,11 +79,7 @@
 <ul>
 <li type="circle">java.lang.Object
 <ul>
-<li type="circle">de.griefed.serverpackcreator.<a href="../../../../de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Reference</span></a>
-<ul>
 <li type="circle">de.griefed.serverpackcreator.i18n.<a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n"><span class="typeNameLink">LocalizationManager</span></a></li>
-</ul>
-</li>
 <li type="circle">java.lang.Throwable (implements java.io.Serializable)
 <ul>
 <li type="circle">java.lang.Exception
diff --git a/docs/de/griefed/serverpackcreator/package-frame.html b/docs/de/griefed/serverpackcreator/package-frame.html
index 9761358dc..306be273d 100644
--- a/docs/de/griefed/serverpackcreator/package-frame.html
+++ b/docs/de/griefed/serverpackcreator/package-frame.html
@@ -12,15 +12,10 @@
 <div class="indexContainer">
 <h2 title="Classes">Classes</h2>
 <ul title="Classes">
-<li><a href="CLISetup.html" title="class in de.griefed.serverpackcreator" target="classFrame">CLISetup</a></li>
-<li><a href="ConfigCheck.html" title="class in de.griefed.serverpackcreator" target="classFrame">ConfigCheck</a></li>
-<li><a href="CopyFiles.html" title="class in de.griefed.serverpackcreator" target="classFrame">CopyFiles</a></li>
+<li><a href="Configuration.html" title="class in de.griefed.serverpackcreator" target="classFrame">Configuration</a></li>
+<li><a href="CreateServerPack.html" title="class in de.griefed.serverpackcreator" target="classFrame">CreateServerPack</a></li>
 <li><a href="FilesSetup.html" title="class in de.griefed.serverpackcreator" target="classFrame">FilesSetup</a></li>
-<li><a href="Handler.html" title="class in de.griefed.serverpackcreator" target="classFrame">Handler</a></li>
 <li><a href="Main.html" title="class in de.griefed.serverpackcreator" target="classFrame">Main</a></li>
-<li><a href="Reference.html" title="class in de.griefed.serverpackcreator" target="classFrame">Reference</a></li>
-<li><a href="ServerSetup.html" title="class in de.griefed.serverpackcreator" target="classFrame">ServerSetup</a></li>
-<li><a href="ServerUtilities.html" title="class in de.griefed.serverpackcreator" target="classFrame">ServerUtilities</a></li>
 </ul>
 </div>
 </body>
diff --git a/docs/de/griefed/serverpackcreator/package-summary.html b/docs/de/griefed/serverpackcreator/package-summary.html
index b6a34c924..1eb964f52 100644
--- a/docs/de/griefed/serverpackcreator/package-summary.html
+++ b/docs/de/griefed/serverpackcreator/package-summary.html
@@ -81,41 +81,21 @@
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colFirst"><a href="../../../de/griefed/serverpackcreator/CLISetup.html" title="class in de.griefed.serverpackcreator">CLISetup</a></td>
+<td class="colFirst"><a href="../../../de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="../../../de/griefed/serverpackcreator/ConfigCheck.html" title="class in de.griefed.serverpackcreator">ConfigCheck</a></td>
+<td class="colFirst"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><a href="../../../de/griefed/serverpackcreator/CopyFiles.html" title="class in de.griefed.serverpackcreator">CopyFiles</a></td>
-<td class="colLast">&nbsp;</td>
-</tr>
-<tr class="rowColor">
 <td class="colFirst"><a href="../../../de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator">FilesSetup</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
-<td class="colFirst"><a href="../../../de/griefed/serverpackcreator/Handler.html" title="class in de.griefed.serverpackcreator">Handler</a></td>
-<td class="colLast">&nbsp;</td>
-</tr>
 <tr class="rowColor">
 <td class="colFirst"><a href="../../../de/griefed/serverpackcreator/Main.html" title="class in de.griefed.serverpackcreator">Main</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
-<td class="colFirst"><a href="../../../de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></td>
-<td class="colLast">&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><a href="../../../de/griefed/serverpackcreator/ServerSetup.html" title="class in de.griefed.serverpackcreator">ServerSetup</a></td>
-<td class="colLast">&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><a href="../../../de/griefed/serverpackcreator/ServerUtilities.html" title="class in de.griefed.serverpackcreator">ServerUtilities</a></td>
-<td class="colLast">&nbsp;</td>
-</tr>
 </tbody>
 </table>
 </li>
diff --git a/docs/de/griefed/serverpackcreator/package-tree.html b/docs/de/griefed/serverpackcreator/package-tree.html
index 9f68de07b..9052f5b95 100644
--- a/docs/de/griefed/serverpackcreator/package-tree.html
+++ b/docs/de/griefed/serverpackcreator/package-tree.html
@@ -79,15 +79,10 @@
 <ul>
 <li type="circle">java.lang.Object
 <ul>
-<li type="circle">de.griefed.serverpackcreator.<a href="../../../de/griefed/serverpackcreator/CLISetup.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">CLISetup</span></a></li>
-<li type="circle">de.griefed.serverpackcreator.<a href="../../../de/griefed/serverpackcreator/ConfigCheck.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">ConfigCheck</span></a></li>
-<li type="circle">de.griefed.serverpackcreator.<a href="../../../de/griefed/serverpackcreator/CopyFiles.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">CopyFiles</span></a></li>
+<li type="circle">de.griefed.serverpackcreator.<a href="../../../de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Configuration</span></a></li>
+<li type="circle">de.griefed.serverpackcreator.<a href="../../../de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">CreateServerPack</span></a></li>
 <li type="circle">de.griefed.serverpackcreator.<a href="../../../de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">FilesSetup</span></a></li>
-<li type="circle">de.griefed.serverpackcreator.<a href="../../../de/griefed/serverpackcreator/Handler.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Handler</span></a></li>
 <li type="circle">de.griefed.serverpackcreator.<a href="../../../de/griefed/serverpackcreator/Main.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Main</span></a></li>
-<li type="circle">de.griefed.serverpackcreator.<a href="../../../de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Reference</span></a></li>
-<li type="circle">de.griefed.serverpackcreator.<a href="../../../de/griefed/serverpackcreator/ServerSetup.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">ServerSetup</span></a></li>
-<li type="circle">de.griefed.serverpackcreator.<a href="../../../de/griefed/serverpackcreator/ServerUtilities.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">ServerUtilities</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/docs/index-all.html b/docs/index-all.html
index a93cc335f..20f3a8570 100644
--- a/docs/index-all.html
+++ b/docs/index-all.html
@@ -72,37 +72,29 @@
 </a>
 <h2 class="title">A</h2>
 <dl>
-<dt><a href="de/griefed/serverpackcreator/gui/About.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">About</span></a> - Class in <a href="de/griefed/serverpackcreator/gui/package-summary.html">de.griefed.serverpackcreator.gui</a></dt>
+<dt><a href="de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">AboutTab</span></a> - Class in <a href="de/griefed/serverpackcreator/gui/package-summary.html">de.griefed.serverpackcreator.gui</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/About.html#About--">About()</a></span> - Constructor for class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/About.html" title="class in de.griefed.serverpackcreator.gui">About</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/AboutTab.html#AboutTab-de.griefed.serverpackcreator.i18n.LocalizationManager-">AboutTab(LocalizationManager)</a></span> - Constructor for class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui">AboutTab</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/About.html#about--">about()</a></span> - Method in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/About.html" title="class in de.griefed.serverpackcreator.gui">About</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/AboutTab.html#aboutTab--">aboutTab()</a></span> - Method in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui">AboutTab</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CLISetup.html#appLogger">appLogger</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CLISetup.html" title="class in de.griefed.serverpackcreator">CLISetup</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#appLogger">appLogger</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/ConfigCheck.html#appLogger">appLogger</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/ConfigCheck.html" title="class in de.griefed.serverpackcreator">ConfigCheck</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#appLogger">appLogger</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CopyFiles.html#appLogger">appLogger</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CopyFiles.html" title="class in de.griefed.serverpackcreator">CopyFiles</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html#appLogger">appLogger</a></span> - Static variable in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CreateModpack</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#appLogger">appLogger</a></span> - Static variable in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseCreateModpack</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/FilesSetup.html#appLogger">appLogger</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator">FilesSetup</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/About.html#appLogger">appLogger</a></span> - Static variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/About.html" title="class in de.griefed.serverpackcreator.gui">About</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPack.html#appLogger">appLogger</a></span> - Static variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPack.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPack</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/AboutTab.html#appLogger">appLogger</a></span> - Static variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui">AboutTab</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/TabbedPane.html#appLogger">appLogger</a></span> - Static variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/TabbedPane.html" title="class in de.griefed.serverpackcreator.gui">TabbedPane</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateGui.html#appLogger">appLogger</a></span> - Static variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui">CreateGui</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Handler.html#appLogger">appLogger</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Handler.html" title="class in de.griefed.serverpackcreator">Handler</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#appLogger">appLogger</a></span> - Static variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Main.html#appLogger">appLogger</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Main.html" title="class in de.griefed.serverpackcreator">Main</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/ServerSetup.html#appLogger">appLogger</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/ServerSetup.html" title="class in de.griefed.serverpackcreator">ServerSetup</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/ServerUtilities.html#appLogger">appLogger</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/ServerUtilities.html" title="class in de.griefed.serverpackcreator">ServerUtilities</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/Modpack.html#author">author</a></span> - Variable in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/Modpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Modpack</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#author">author</a></span> - Variable in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModpack</a></dt>
 <dd>&nbsp;</dd>
 </dl>
 <a name="I:B">
@@ -110,9 +102,9 @@
 </a>
 <h2 class="title">B</h2>
 <dl>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/TabbedPane.html#bannerIcon">bannerIcon</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/TabbedPane.html" title="class in de.griefed.serverpackcreator.gui">TabbedPane</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateGui.html#bannerIcon">bannerIcon</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui">CreateGui</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CLISetup.html#buildString-java.lang.String...-">buildString(String...)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CLISetup.html" title="class in de.griefed.serverpackcreator">CLISetup</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#buildString-java.lang.String...-">buildString(String...)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
 <div class="block">Converts list of strings into concatenated string.</div>
 </dd>
@@ -122,19 +114,19 @@
 </a>
 <h2 class="title">C</h2>
 <dl>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/ConfigCheck.html#checkConfigFile-java.io.File-">checkConfigFile(File)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/ConfigCheck.html" title="class in de.griefed.serverpackcreator">ConfigCheck</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#checkConfigFile-java.io.File-">checkConfigFile(File)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
 <div class="block">Check the config file for configuration errors.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/ConfigCheck.html#checkCopyDirs-java.util.List-java.lang.String-">checkCopyDirs(List&lt;String&gt;, String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/ConfigCheck.html" title="class in de.griefed.serverpackcreator">ConfigCheck</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#checkCopyDirs-java.util.List-java.lang.String-">checkCopyDirs(List&lt;String&gt;, String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
 <div class="block">Check whether the specified directories exist in the modpack directory.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/ConfigCheck.html#checkCurseForge-java.lang.String-">checkCurseForge(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/ConfigCheck.html" title="class in de.griefed.serverpackcreator">ConfigCheck</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#checkCurseForge-java.lang.String-">checkCurseForge(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
 <div class="block">Checks whether the modpackDir contains a valid projectID,fileID combination.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html#checkCurseForgeDir-java.lang.String-">checkCurseForgeDir(String)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CreateModpack</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#checkCurseForgeDir-java.lang.String-">checkCurseForgeDir(String)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseCreateModpack</a></dt>
 <dd>
 <div class="block">Check whether the folder for the specified CurseForge projectID/fileID exists.</div>
 </dd>
@@ -166,116 +158,138 @@
 <dd>
 <div class="block">Checks for existence of server.properties file.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/ConfigCheck.html#checkJavaPath-java.lang.String-">checkJavaPath(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/ConfigCheck.html" title="class in de.griefed.serverpackcreator">ConfigCheck</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#checkJavaPath-java.lang.String-">checkJavaPath(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
 <div class="block">Checks whether the correct path to the Java installation was set.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/FilesSetup.html#checkLocaleFile--">checkLocaleFile()</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator">FilesSetup</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#checkLocaleFile--">checkLocaleFile()</a></span> - Method in class de.griefed.serverpackcreator.i18n.<a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></dt>
 <dd>
 <div class="block">Check for existence of a lang.properties-file and if found assign language specified therein.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/ConfigCheck.html#checkModloader-java.lang.String-">checkModloader(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/ConfigCheck.html" title="class in de.griefed.serverpackcreator">ConfigCheck</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#checkModloader-java.lang.String-">checkModloader(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
 <div class="block">Checks whether Forge or Fabric were specified as modloader.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/ConfigCheck.html#checkModloaderVersion-java.lang.String-java.lang.String-">checkModloaderVersion(String, String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/ConfigCheck.html" title="class in de.griefed.serverpackcreator">ConfigCheck</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#checkModloaderVersion-java.lang.String-java.lang.String-">checkModloaderVersion(String, String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
 <div class="block">Determine whether to check for correct Forge or correct Fabric modloader version.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/ConfigCheck.html#checkModpackDir-java.lang.String-">checkModpackDir(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/ConfigCheck.html" title="class in de.griefed.serverpackcreator">ConfigCheck</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#checkModpackDir-java.lang.String-">checkModpackDir(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
 <div class="block">Check whether the specified modpack directory exists.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPack.html#chooserDimension">chooserDimension</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPack.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPack</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#chooserDimension">chooserDimension</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CopyFiles.html#cleanupEnvironment-java.lang.String-">cleanupEnvironment(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CopyFiles.html" title="class in de.griefed.serverpackcreator">CopyFiles</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#cleanupEnvironment-java.lang.String-">cleanupEnvironment(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>
 <div class="block">Deletes files from previous runs of serverpackcreator.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/ServerUtilities.html#cleanUpServerPack-java.io.File-java.io.File-java.lang.String-java.lang.String-java.lang.String-java.lang.String-">cleanUpServerPack(File, File, String, String, String, String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/ServerUtilities.html" title="class in de.griefed.serverpackcreator">ServerUtilities</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#cleanUpServerPack-java.io.File-java.io.File-java.lang.String-java.lang.String-java.lang.String-java.lang.String-">cleanUpServerPack(File, File, String, String, String, String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>
 <div class="block">Deletes remnant files from Fabric/Forge installation no longer needed.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#clientMods">clientMods</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
-<dd>&nbsp;</dd>
-<dt><a href="de/griefed/serverpackcreator/CLISetup.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">CLISetup</span></a> - Class in <a href="de/griefed/serverpackcreator/package-summary.html">de.griefed.serverpackcreator</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#clientMods">clientMods</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CLISetup.html#CLISetup--">CLISetup()</a></span> - Constructor for class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CLISetup.html" title="class in de.griefed.serverpackcreator">CLISetup</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#config">config</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#cliSetup">cliSetup</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#configFile">configFile</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#config">config</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/FilesSetup.html#configFile">configFile</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator">FilesSetup</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#CONFIG_GEN_ARGUMENT">CONFIG_GEN_ARGUMENT</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Configuration</span></a> - Class in <a href="de/griefed/serverpackcreator/package-summary.html">de.griefed.serverpackcreator</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="de/griefed/serverpackcreator/ConfigCheck.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">ConfigCheck</span></a> - Class in <a href="de/griefed/serverpackcreator/package-summary.html">de.griefed.serverpackcreator</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#Configuration-de.griefed.serverpackcreator.i18n.LocalizationManager-">Configuration(LocalizationManager)</a></span> - Constructor for class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/ConfigCheck.html#ConfigCheck--">ConfigCheck()</a></span> - Constructor for class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/ConfigCheck.html" title="class in de.griefed.serverpackcreator">ConfigCheck</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#configuration">configuration</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#configCheck">configCheck</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateGui.html#configuration">configuration</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui">CreateGui</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#configFile">configFile</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#configuration">configuration</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/ConfigCheck.html#containsFabric-de.griefed.serverpackcreator.curseforgemodpack.Modpack-">containsFabric(Modpack)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/ConfigCheck.html" title="class in de.griefed.serverpackcreator">ConfigCheck</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#containsFabric-de.griefed.serverpackcreator.curseforgemodpack.CurseModpack-">containsFabric(CurseModpack)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
 <div class="block">Checks for the Jumploader mod in the project list of the modpack.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/ConfigCheck.html#convertToBoolean-java.lang.String-">convertToBoolean(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/ConfigCheck.html" title="class in de.griefed.serverpackcreator">ConfigCheck</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#convertToBoolean-java.lang.String-">convertToBoolean(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
 <div class="block">Converts various strings to booleans.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#copyDirs">copyDirs</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#copyDirs">copyDirs</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="de/griefed/serverpackcreator/CopyFiles.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">CopyFiles</span></a> - Class in <a href="de/griefed/serverpackcreator/package-summary.html">de.griefed.serverpackcreator</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CopyFiles.html#CopyFiles--">CopyFiles()</a></span> - Constructor for class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CopyFiles.html" title="class in de.griefed.serverpackcreator">CopyFiles</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CopyFiles.html#copyFiles-java.lang.String-java.util.List-java.util.List-">copyFiles(String, List&lt;String&gt;, List&lt;String&gt;)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CopyFiles.html" title="class in de.griefed.serverpackcreator">CopyFiles</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#copyFiles-java.lang.String-java.util.List-java.util.List-">copyFiles(String, List&lt;String&gt;, List&lt;String&gt;)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>
 <div class="block">Copies all specified folders and their files to the modpackDir.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#copyFiles">copyFiles</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CopyFiles.html#copyIcon-java.lang.String-">copyIcon(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CopyFiles.html" title="class in de.griefed.serverpackcreator">CopyFiles</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#copyIcon-java.lang.String-">copyIcon(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>
 <div class="block">Copies the server-icon.png into server_pack.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html#copyOverride-java.lang.String-">copyOverride(String)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CreateModpack</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#copyOverride-java.lang.String-">copyOverride(String)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseCreateModpack</a></dt>
 <dd>
 <div class="block">Copies all folders and the files therein to the parent modpack directory.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CopyFiles.html#copyProperties-java.lang.String-">copyProperties(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CopyFiles.html" title="class in de.griefed.serverpackcreator">CopyFiles</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#copyProperties-java.lang.String-">copyProperties(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>
 <div class="block">Copies the server.properties into server_pack.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CopyFiles.html#copyStartScripts-java.lang.String-java.lang.String-boolean-">copyStartScripts(String, String, boolean)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CopyFiles.html" title="class in de.griefed.serverpackcreator">CopyFiles</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#copyStartScripts-java.lang.String-java.lang.String-boolean-">copyStartScripts(String, String, boolean)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>
 <div class="block">Copies start scripts for Forge modloader into the server_pack folder.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#COUNTRY_MAP_PATH">COUNTRY_MAP_PATH</a></span> - Static variable in class de.griefed.serverpackcreator.i18n.<a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#COUNTRY_MAP_PATH">COUNTRY_MAP_PATH</a></span> - Variable in class de.griefed.serverpackcreator.i18n.<a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/TabbedPane.html#createAndShowGUI--">createAndShowGUI()</a></span> - Method in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/TabbedPane.html" title="class in de.griefed.serverpackcreator.gui">TabbedPane</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateGui.html#createAndShowGUI--">createAndShowGUI()</a></span> - Method in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui">CreateGui</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#createConfigurationFile--">createConfigurationFile()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
+<dd>
+<div class="block">Generate new configuration file from CLI input.</div>
+</dd>
+<dt><a href="de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">CreateGui</span></a> - Class in <a href="de/griefed/serverpackcreator/gui/package-summary.html">de.griefed.serverpackcreator.gui</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">CreateModpack</span></a> - Class in <a href="de/griefed/serverpackcreator/curseforgemodpack/package-summary.html">de.griefed.serverpackcreator.curseforgemodpack</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateGui.html#CreateGui-de.griefed.serverpackcreator.i18n.LocalizationManager-de.griefed.serverpackcreator.Configuration-">CreateGui(LocalizationManager, Configuration)</a></span> - Constructor for class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui">CreateGui</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html#CreateModpack--">CreateModpack()</a></span> - Constructor for class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CreateModpack</a></dt>
+<dt><a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">CreateServerPack</span></a> - Class in <a href="de/griefed/serverpackcreator/package-summary.html">de.griefed.serverpackcreator</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#createModpack">createModpack</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#CreateServerPack-de.griefed.serverpackcreator.i18n.LocalizationManager-de.griefed.serverpackcreator.Configuration-">CreateServerPack(LocalizationManager, Configuration)</a></span> - Constructor for class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="de/griefed/serverpackcreator/gui/CreateServerPack.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">CreateServerPack</span></a> - Class in <a href="de/griefed/serverpackcreator/gui/package-summary.html">de.griefed.serverpackcreator.gui</a></dt>
+<dt><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">CreateServerPackTab</span></a> - Class in <a href="de/griefed/serverpackcreator/gui/package-summary.html">de.griefed.serverpackcreator.gui</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPack.html#CreateServerPack--">CreateServerPack()</a></span> - Constructor for class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPack.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPack</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#CreateServerPackTab-de.griefed.serverpackcreator.i18n.LocalizationManager-de.griefed.serverpackcreator.Configuration-">CreateServerPackTab(LocalizationManager, Configuration)</a></span> - Constructor for class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPack.html#createServerPack--">createServerPack()</a></span> - Method in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPack.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPack</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#createServerPackTab--">createServerPackTab()</a></span> - Method in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#currentLanguage">currentLanguage</a></span> - Static variable in class de.griefed.serverpackcreator.i18n.<a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#currentLanguage">currentLanguage</a></span> - Variable in class de.griefed.serverpackcreator.i18n.<a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></dt>
 <dd>
 <div class="block">Current language of application, mapped for easier further reference.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html#curseForgeModpack-java.lang.String-java.lang.Integer-java.lang.Integer-">curseForgeModpack(String, Integer, Integer)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CreateModpack</a></dt>
+<dt><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">CurseCreateModpack</span></a> - Class in <a href="de/griefed/serverpackcreator/curseforgemodpack/package-summary.html">de.griefed.serverpackcreator.curseforgemodpack</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#CurseCreateModpack-de.griefed.serverpackcreator.i18n.LocalizationManager-">CurseCreateModpack(LocalizationManager)</a></span> - Constructor for class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseCreateModpack</a></dt>
+<dd>&nbsp;</dd>
+<dt><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">CurseFiles</span></a> - Class in <a href="de/griefed/serverpackcreator/curseforgemodpack/package-summary.html">de.griefed.serverpackcreator.curseforgemodpack</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#CurseFiles--">CurseFiles()</a></span> - Constructor for class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseFiles</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#curseForgeModpack-java.lang.String-java.lang.Integer-java.lang.Integer-">curseForgeModpack(String, Integer, Integer)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseCreateModpack</a></dt>
 <dd>
 <div class="block">Gets the names of the specified project and file and makes calls to methods which create the modpack so we can then create a server pack from it.</div>
 </dd>
+<dt><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">CurseMinecraft</span></a> - Class in <a href="de/griefed/serverpackcreator/curseforgemodpack/package-summary.html">de.griefed.serverpackcreator.curseforgemodpack</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#CurseMinecraft--">CurseMinecraft()</a></span> - Constructor for class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseMinecraft</a></dt>
+<dd>&nbsp;</dd>
+<dt><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">CurseModLoaders</span></a> - Class in <a href="de/griefed/serverpackcreator/curseforgemodpack/package-summary.html">de.griefed.serverpackcreator.curseforgemodpack</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html#CurseModLoaders--">CurseModLoaders()</a></span> - Constructor for class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModLoaders</a></dt>
+<dd>&nbsp;</dd>
+<dt><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">CurseModpack</span></a> - Class in <a href="de/griefed/serverpackcreator/curseforgemodpack/package-summary.html">de.griefed.serverpackcreator.curseforgemodpack</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#CurseModpack--">CurseModpack()</a></span> - Constructor for class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModpack</a></dt>
+<dd>&nbsp;</dd>
+<dt><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">CurseSplines</span></a> - Class in <a href="de/griefed/serverpackcreator/curseforgemodpack/package-summary.html">de.griefed.serverpackcreator.curseforgemodpack</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html#CurseSplines--">CurseSplines()</a></span> - Constructor for class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseSplines</a></dt>
+<dd>&nbsp;</dd>
 </dl>
 <a name="I:D">
 <!--   -->
@@ -290,19 +304,19 @@
 <dd>&nbsp;</dd>
 <dt><a href="de/griefed/serverpackcreator/i18n/package-summary.html">de.griefed.serverpackcreator.i18n</a> - package de.griefed.serverpackcreator.i18n</dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/ServerUtilities.html#deleteMinecraftJar-java.lang.String-java.lang.String-">deleteMinecraftJar(String, String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/ServerUtilities.html" title="class in de.griefed.serverpackcreator">ServerUtilities</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#deleteMinecraftJar-java.lang.String-java.lang.String-java.lang.String-">deleteMinecraftJar(String, String, String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>
 <div class="block">Deletes Mojang's minecraft_server.jar from the zip-archive so users do not accidentally upload a file containing software from Mojang.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/ServerUtilities.html#downloadFabricJar-java.lang.String-">downloadFabricJar(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/ServerUtilities.html" title="class in de.griefed.serverpackcreator">ServerUtilities</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#downloadFabricJar-java.lang.String-">downloadFabricJar(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>
 <div class="block">Downloads the specified version of Fabric.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/ServerUtilities.html#downloadForgeJar-java.lang.String-java.lang.String-java.lang.String-">downloadForgeJar(String, String, String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/ServerUtilities.html" title="class in de.griefed.serverpackcreator">ServerUtilities</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#downloadForgeJar-java.lang.String-java.lang.String-java.lang.String-">downloadForgeJar(String, String, String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>
 <div class="block">Downloads the specified version of the Forge installer to be used in ServerSetup.installServer.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html#downloadMods-java.lang.String-">downloadMods(String)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CreateModpack</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#downloadMods-java.lang.String-">downloadMods(String)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseCreateModpack</a></dt>
 <dd>
 <div class="block">Downloads all mods specified in the modpack's manifest.json file.</div>
 </dd>
@@ -312,7 +326,7 @@
 </a>
 <h2 class="title">E</h2>
 <dl>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CopyFiles.html#excludeClientMods-java.lang.String-java.util.List-">excludeClientMods(String, List&lt;String&gt;)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CopyFiles.html" title="class in de.griefed.serverpackcreator">CopyFiles</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#excludeClientMods-java.lang.String-java.util.List-">excludeClientMods(String, List&lt;String&gt;)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>
 <div class="block">Generate a list of all mods in a modpack EXCEPT clientside-only mods.</div>
 </dd>
@@ -322,61 +336,59 @@
 </a>
 <h2 class="title">F</h2>
 <dl>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#FABRIC_MANIFEST_URL">FABRIC_MANIFEST_URL</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/ServerUtilities.html#fabricBatch-java.lang.String-java.lang.String-">fabricBatch(String, String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/ServerUtilities.html" title="class in de.griefed.serverpackcreator">ServerUtilities</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#fabricBatch-java.lang.String-java.lang.String-">fabricBatch(String, String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>
 <div class="block">Generates download scripts for Mojang's Minecraft server for Fabric,Windows.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#fabricLinuxFile">fabricLinuxFile</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#fabricLinuxFile">fabricLinuxFile</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/FilesSetup.html#fabricLinuxFile">fabricLinuxFile</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator">FilesSetup</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/ServerUtilities.html#fabricShell-java.lang.String-java.lang.String-">fabricShell(String, String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/ServerUtilities.html" title="class in de.griefed.serverpackcreator">ServerUtilities</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#fabricShell-java.lang.String-java.lang.String-">fabricShell(String, String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>
 <div class="block">Generates download scripts for Mojang's Minecraft server for Fabric,Linux.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#fabricWindowsFile">fabricWindowsFile</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#fabricWindowsFile">fabricWindowsFile</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#fallbackModsList">fallbackModsList</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/FilesSetup.html#fabricWindowsFile">fabricWindowsFile</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator">FilesSetup</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html#fileDiskName">fileDiskName</a></span> - Static variable in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CreateModpack</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#fallbackModsList">fallbackModsList</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/Files.html#fileID">fileID</a></span> - Variable in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/Files.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Files</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#fileDiskName">fileDiskName</a></span> - Variable in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseCreateModpack</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html#fileName">fileName</a></span> - Static variable in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CreateModpack</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#fileID">fileID</a></span> - Variable in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseFiles</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="de/griefed/serverpackcreator/curseforgemodpack/Files.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Files</span></a> - Class in <a href="de/griefed/serverpackcreator/curseforgemodpack/package-summary.html">de.griefed.serverpackcreator.curseforgemodpack</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#fileName">fileName</a></span> - Variable in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseCreateModpack</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/Files.html#Files--">Files()</a></span> - Constructor for class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/Files.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Files</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/Modpack.html#files">files</a></span> - Variable in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/Modpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Modpack</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#files">files</a></span> - Variable in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModpack</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">FilesSetup</span></a> - Class in <a href="de/griefed/serverpackcreator/package-summary.html">de.griefed.serverpackcreator</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/FilesSetup.html#FilesSetup--">FilesSetup()</a></span> - Constructor for class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator">FilesSetup</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/FilesSetup.html#FilesSetup-de.griefed.serverpackcreator.i18n.LocalizationManager-">FilesSetup(LocalizationManager)</a></span> - Constructor for class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator">FilesSetup</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/FilesSetup.html#filesSetup--">filesSetup()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator">FilesSetup</a></dt>
 <dd>
 <div class="block">Calls individual methods which check for existence of default files.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#filesSetup">filesSetup</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPack.html#folderButtonDimension">folderButtonDimension</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPack.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPack</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPack.html#folderIcon">folderIcon</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPack.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPack</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#folderButtonDimension">folderButtonDimension</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#FORGE_MANIFEST_URL">FORGE_MANIFEST_URL</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#folderIcon">folderIcon</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/ServerUtilities.html#forgeBatch-java.lang.String-java.lang.String-">forgeBatch(String, String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/ServerUtilities.html" title="class in de.griefed.serverpackcreator">ServerUtilities</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#forgeBatch-java.lang.String-java.lang.String-">forgeBatch(String, String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>
 <div class="block">Generates download scripts for Mojang's Minecraft server for Forge,Windows.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#forgeLinuxFile">forgeLinuxFile</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#forgeLinuxFile">forgeLinuxFile</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/ServerUtilities.html#forgeShell-java.lang.String-java.lang.String-">forgeShell(String, String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/ServerUtilities.html" title="class in de.griefed.serverpackcreator">ServerUtilities</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/FilesSetup.html#forgeLinuxFile">forgeLinuxFile</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator">FilesSetup</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#forgeShell-java.lang.String-java.lang.String-">forgeShell(String, String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>
 <div class="block">Generates download scripts for Mojang's Minecraft server for Forge,Linux.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#forgeWindowsFile">forgeWindowsFile</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#forgeWindowsFile">forgeWindowsFile</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/FilesSetup.html#forgeWindowsFile">forgeWindowsFile</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator">FilesSetup</a></dt>
 <dd>&nbsp;</dd>
 </dl>
 <a name="I:G">
@@ -384,109 +396,117 @@
 </a>
 <h2 class="title">G</h2>
 <dl>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/ServerUtilities.html#generateDownloadScripts-java.lang.String-java.lang.String-java.lang.String-">generateDownloadScripts(String, String, String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/ServerUtilities.html" title="class in de.griefed.serverpackcreator">ServerUtilities</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#generateDownloadScripts-java.lang.String-java.lang.String-java.lang.String-">generateDownloadScripts(String, String, String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>
 <div class="block">Calls methods for generating download scripts for Mojang's Minecraft server depending on the specified versions and modloader.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/Modpack.html#getAuthor--">getAuthor()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/Modpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Modpack</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#getAuthor--">getAuthor()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModpack</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#getClientMods--">getClientMods()</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#getClientMods--">getClientMods()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#getConfig--">getConfig()</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#getConfig--">getConfig()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#getConfigFile--">getConfigFile()</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#getConfigFile--">getConfigFile()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#getConfigGenArgument--">getConfigGenArgument()</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/FilesSetup.html#getConfigFile--">getConfigFile()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator">FilesSetup</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#getCopyDirs--">getCopyDirs()</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#getCopyDirs--">getCopyDirs()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#getFabricLinuxFile--">getFabricLinuxFile()</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#getFabricLinuxFile--">getFabricLinuxFile()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#getFabricManifestUrl--">getFabricManifestUrl()</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/FilesSetup.html#getFabricLinuxFile--">getFabricLinuxFile()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator">FilesSetup</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#getFabricWindowsFile--">getFabricWindowsFile()</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#getFabricManifestUrl--">getFabricManifestUrl()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#getFallbackModsList--">getFallbackModsList()</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#getFabricWindowsFile--">getFabricWindowsFile()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/Files.html#getFileID--">getFileID()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/Files.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Files</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/FilesSetup.html#getFabricWindowsFile--">getFabricWindowsFile()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator">FilesSetup</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/Modpack.html#getFiles--">getFiles()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/Modpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Modpack</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#getFallbackModsList--">getFallbackModsList()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#getForgeLinuxFile--">getForgeLinuxFile()</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#getFileID--">getFileID()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseFiles</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#getForgeManifestUrl--">getForgeManifestUrl()</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#getFiles--">getFiles()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModpack</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#getForgeWindowsFile--">getForgeWindowsFile()</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#getForgeLinuxFile--">getForgeLinuxFile()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#getIconFile--">getIconFile()</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/FilesSetup.html#getForgeLinuxFile--">getForgeLinuxFile()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator">FilesSetup</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/ModLoaders.html#getId--">getId()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/ModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">ModLoaders</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#getForgeManifestUrl--">getForgeManifestUrl()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#getIncludeServerIcon--">getIncludeServerIcon()</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#getForgeWindowsFile--">getForgeWindowsFile()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#getIncludeServerInstallation--">getIncludeServerInstallation()</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/FilesSetup.html#getForgeWindowsFile--">getForgeWindowsFile()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator">FilesSetup</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#getIncludeServerProperties--">getIncludeServerProperties()</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#getIconFile--">getIconFile()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#getIncludeStartScripts--">getIncludeStartScripts()</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/FilesSetup.html#getIconFile--">getIconFile()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator">FilesSetup</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#getIncludeZipCreation--">getIncludeZipCreation()</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html#getId--">getId()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModLoaders</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/ConfigCheck.html#getJavaPath-java.lang.String-">getJavaPath(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/ConfigCheck.html" title="class in de.griefed.serverpackcreator">ConfigCheck</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#getIncludeServerIcon--">getIncludeServerIcon()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#getIncludeServerInstallation--">getIncludeServerInstallation()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#getIncludeServerProperties--">getIncludeServerProperties()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#getIncludeStartScripts--">getIncludeStartScripts()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#getIncludeZipCreation--">getIncludeZipCreation()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#getJavaPath--">getJavaPath()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#getJavaPath-java.lang.String-">getJavaPath(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
 <div class="block">Automatically set Java path if none is specified</div>
 </dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#getJavaPath--">getJavaPath()</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#getLangArgument--">getLangArgument()</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#getLangPropertiesFile--">getLangPropertiesFile()</a></span> - Method in class de.griefed.serverpackcreator.i18n.<a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#getLangPropertiesFile--">getLangPropertiesFile()</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#getLocale--">getLocale()</a></span> - Method in class de.griefed.serverpackcreator.i18n.<a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#getLocale--">getLocale()</a></span> - Static method in class de.griefed.serverpackcreator.i18n.<a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#getLocalizedString-java.lang.String-">getLocalizedString(String)</a></span> - Static method in class de.griefed.serverpackcreator.i18n.<a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#getLocalizedString-java.lang.String-">getLocalizedString(String)</a></span> - Method in class de.griefed.serverpackcreator.i18n.<a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></dt>
 <dd>
 <div class="block">Gets localized string from localization resource bundle.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/Modpack.html#getMinecraft--">getMinecraft()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/Modpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Modpack</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#getMinecraft--">getMinecraft()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModpack</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#getMinecraftManifestUrl--">getMinecraftManifestUrl()</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#getMinecraftManifestUrl--">getMinecraftManifestUrl()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#getMinecraftVersion--">getMinecraftVersion()</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#getMinecraftVersion--">getMinecraftVersion()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#getModLoader--">getModLoader()</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#getModLoader--">getModLoader()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/Minecraft.html#getModLoaders--">getModLoaders()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/Minecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Minecraft</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#getModLoaders--">getModLoaders()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseMinecraft</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#getModLoaderVersion--">getModLoaderVersion()</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#getModLoaderVersion--">getModLoaderVersion()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#getModpackDir--">getModpackDir()</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#getModpackDir--">getModpackDir()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/Modpack.html#getName--">getName()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/Modpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Modpack</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#getName--">getName()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModpack</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#getOldConfigFile--">getOldConfigFile()</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#getOldConfigFile--">getOldConfigFile()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#getProjectFileID--">getProjectFileID()</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/FilesSetup.html#getOldConfigFile--">getOldConfigFile()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator">FilesSetup</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/Files.html#getProjectID--">getProjectID()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/Files.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Files</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#getProjectFileID--">getProjectFileID()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#getProjectID--">getProjectID()</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#getProjectID--">getProjectID()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#getPropertiesFile--">getPropertiesFile()</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#getProjectID--">getProjectID()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseFiles</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/Splines.html#getRandomInt--">getRandomInt()</a></span> - Static method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/Splines.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Splines</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#getPropertiesFile--">getPropertiesFile()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#getRunCliArgument--">getRunCliArgument()</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/FilesSetup.html#getPropertiesFile--">getPropertiesFile()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator">FilesSetup</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/Splines.html#getSplines--">getSplines()</a></span> - Static method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/Splines.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Splines</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html#getRandomInt--">getRandomInt()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseSplines</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#getSupportedLanguages--">getSupportedLanguages()</a></span> - Static method in class de.griefed.serverpackcreator.i18n.<a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html#getSpline--">getSpline()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseSplines</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#getSupportedLanguages--">getSupportedLanguages()</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#getSupportedLanguages--">getSupportedLanguages()</a></span> - Method in class de.griefed.serverpackcreator.i18n.<a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/Minecraft.html#getVersion--">getVersion()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/Minecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Minecraft</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#getVersion--">getVersion()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseMinecraft</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/Modpack.html#getVersion--">getVersion()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/Modpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Modpack</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#getVersion--">getVersion()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModpack</a></dt>
 <dd>&nbsp;</dd>
 </dl>
 <a name="I:H">
@@ -494,9 +514,7 @@
 </a>
 <h2 class="title">H</h2>
 <dl>
-<dt><a href="de/griefed/serverpackcreator/Handler.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Handler</span></a> - Class in <a href="de/griefed/serverpackcreator/package-summary.html">de.griefed.serverpackcreator</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Handler.html#Handler--">Handler()</a></span> - Constructor for class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Handler.html" title="class in de.griefed.serverpackcreator">Handler</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#helpIcon">helpIcon</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
 <dd>&nbsp;</dd>
 </dl>
 <a name="I:I">
@@ -504,21 +522,23 @@
 </a>
 <h2 class="title">I</h2>
 <dl>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/TabbedPane.html#icon">icon</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/TabbedPane.html" title="class in de.griefed.serverpackcreator.gui">TabbedPane</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateGui.html#icon">icon</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui">CreateGui</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#iconFile">iconFile</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#iconFile">iconFile</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/ModLoaders.html#id">id</a></span> - Variable in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/ModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">ModLoaders</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/FilesSetup.html#iconFile">iconFile</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator">FilesSetup</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#includeServerIcon">includeServerIcon</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html#id">id</a></span> - Variable in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModLoaders</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#includeServerInstallation">includeServerInstallation</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#includeServerIcon">includeServerIcon</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#includeServerProperties">includeServerProperties</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#includeServerInstallation">includeServerInstallation</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#includeStartScripts">includeStartScripts</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#includeServerProperties">includeServerProperties</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#includeZipCreation">includeZipCreation</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#includeStartScripts">includeStartScripts</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#includeZipCreation">includeZipCreation</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="de/griefed/serverpackcreator/i18n/IncorrectLanguageException.html" title="class in de.griefed.serverpackcreator.i18n"><span class="typeNameLink">IncorrectLanguageException</span></a> - Exception in <a href="de/griefed/serverpackcreator/i18n/package-summary.html">de.griefed.serverpackcreator.i18n</a></dt>
 <dd>&nbsp;</dd>
@@ -530,45 +550,45 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/i18n/IncorrectLanguageException.html#IncorrectLanguageException-java.lang.Throwable-">IncorrectLanguageException(Throwable)</a></span> - Constructor for exception de.griefed.serverpackcreator.i18n.<a href="de/griefed/serverpackcreator/i18n/IncorrectLanguageException.html" title="class in de.griefed.serverpackcreator.i18n">IncorrectLanguageException</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#init-java.lang.String-">init(String)</a></span> - Static method in class de.griefed.serverpackcreator.i18n.<a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#init-java.lang.String-">init(String)</a></span> - Method in class de.griefed.serverpackcreator.i18n.<a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#init-java.io.File-">init(File)</a></span> - Static method in class de.griefed.serverpackcreator.i18n.<a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#init-java.io.File-">init(File)</a></span> - Method in class de.griefed.serverpackcreator.i18n.<a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#init--">init()</a></span> - Static method in class de.griefed.serverpackcreator.i18n.<a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#init--">init()</a></span> - Method in class de.griefed.serverpackcreator.i18n.<a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></dt>
 <dd>
 <div class="block">Initializer with default localization properties path.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html#initializeModpack-java.lang.String-java.lang.Integer-java.lang.Integer-">initializeModpack(String, Integer, Integer)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CreateModpack</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#initializeModpack-java.lang.String-java.lang.Integer-java.lang.Integer-">initializeModpack(String, Integer, Integer)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseCreateModpack</a></dt>
 <dd>
 <div class="block">Downloads the specified file of the specified project to a directory which is the combination of the project name and file display name.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/ServerSetup.html#installerLogger">installerLogger</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/ServerSetup.html" title="class in de.griefed.serverpackcreator">ServerSetup</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#installerLogger">installerLogger</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/ServerSetup.html#installServer-java.lang.String-java.lang.String-java.lang.String-java.lang.String-java.lang.String-">installServer(String, String, String, String, String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/ServerSetup.html" title="class in de.griefed.serverpackcreator">ServerSetup</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#installServer-java.lang.String-java.lang.String-java.lang.String-java.lang.String-java.lang.String-">installServer(String, String, String, String, String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>
 <div class="block">Installs the files for a Forge/Fabric server.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/ConfigCheck.html#isCurse--">isCurse()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/ConfigCheck.html" title="class in de.griefed.serverpackcreator">ConfigCheck</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#isCurse--">isCurse()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
 <div class="block">Checks whether the specified projectID,fileID combination is a valid CurseForge project and file and whether the resulting directory exists.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/ConfigCheck.html#isDir-java.lang.String-">isDir(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/ConfigCheck.html" title="class in de.griefed.serverpackcreator">ConfigCheck</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#isDir-java.lang.String-">isDir(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
 <div class="block">Checks whether the specified modpack exists.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/ConfigCheck.html#isFabricVersionCorrect-java.lang.String-">isFabricVersionCorrect(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/ConfigCheck.html" title="class in de.griefed.serverpackcreator">ConfigCheck</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#isFabricVersionCorrect-java.lang.String-">isFabricVersionCorrect(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
 <div class="block">Check the specified Fabric version against Fabric's version manifest to validate the version.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/ConfigCheck.html#isForgeVersionCorrect-java.lang.String-">isForgeVersionCorrect(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/ConfigCheck.html" title="class in de.griefed.serverpackcreator">ConfigCheck</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#isForgeVersionCorrect-java.lang.String-">isForgeVersionCorrect(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
 <div class="block">Checks Forge version for errors (basically for its availability in Forge manifest)</div>
 </dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/ConfigCheck.html#isMinecraftVersionCorrect-java.lang.String-">isMinecraftVersionCorrect(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/ConfigCheck.html" title="class in de.griefed.serverpackcreator">ConfigCheck</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#isMinecraftVersionCorrect-java.lang.String-">isMinecraftVersionCorrect(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
 <div class="block">Check the specified Minecraft version against Mojang's version manifest to validate the version.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/About.html#issueIcon">issueIcon</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/About.html" title="class in de.griefed.serverpackcreator.gui">About</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/AboutTab.html#issueIcon">issueIcon</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui">AboutTab</a></dt>
 <dd>&nbsp;</dd>
 </dl>
 <a name="I:J">
@@ -576,7 +596,7 @@
 </a>
 <h2 class="title">J</h2>
 <dl>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#javaPath">javaPath</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#javaPath">javaPath</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
 </dl>
 <a name="I:L">
@@ -584,30 +604,46 @@
 </a>
 <h2 class="title">L</h2>
 <dl>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#LANG_ARGUMENT">LANG_ARGUMENT</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#langPropertiesFile">langPropertiesFile</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#langPropertiesFile">langPropertiesFile</a></span> - Variable in class de.griefed.serverpackcreator.i18n.<a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#LANGUAGE_MAP_PATH">LANGUAGE_MAP_PATH</a></span> - Static variable in class de.griefed.serverpackcreator.i18n.<a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#LANGUAGE_MAP_PATH">LANGUAGE_MAP_PATH</a></span> - Variable in class de.griefed.serverpackcreator.i18n.<a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></dt>
 <dd>
 <div class="block">Keys that used for current language mapping.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/ServerUtilities.html#latestFabricInstaller-java.lang.String-">latestFabricInstaller(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/ServerUtilities.html" title="class in de.griefed.serverpackcreator">ServerUtilities</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#latestFabricInstaller-java.lang.String-">latestFabricInstaller(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>
 <div class="block">Returns the latest installer version for the Fabric installer to be used in ServerSetup.installServer.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/ConfigCheck.html#latestFabricLoader-java.lang.String-">latestFabricLoader(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/ConfigCheck.html" title="class in de.griefed.serverpackcreator">ConfigCheck</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#latestFabricLoader-java.lang.String-">latestFabricLoader(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
 <div class="block">Returns the latest installer version for the Fabric installer to be used in ServerSetup.installServer.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPack.html#loadIcon">loadIcon</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPack.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPack</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#loadIcon">loadIcon</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#localeLogger">localeLogger</a></span> - Static variable in class de.griefed.serverpackcreator.i18n.<a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#localeResources">localeResources</a></span> - Static variable in class de.griefed.serverpackcreator.i18n.<a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#localeResources">localeResources</a></span> - Variable in class de.griefed.serverpackcreator.i18n.<a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></dt>
 <dd>
 <div class="block">Localized strings that application uses.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#localizationManager">localizationManager</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#localizationManager">localizationManager</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#localizationManager">localizationManager</a></span> - Variable in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseCreateModpack</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/FilesSetup.html#localizationManager">localizationManager</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator">FilesSetup</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/AboutTab.html#localizationManager">localizationManager</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui">AboutTab</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateGui.html#localizationManager">localizationManager</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui">CreateGui</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#localizationManager">localizationManager</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html#localizationManager">localizationManager</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html" title="class in de.griefed.serverpackcreator.gui">ModloaderInstallerLogTab</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html#localizationManager">localizationManager</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html" title="class in de.griefed.serverpackcreator.gui">ServerPackCreatorLogTab</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n"><span class="typeNameLink">LocalizationManager</span></a> - Class in <a href="de/griefed/serverpackcreator/i18n/package-summary.html">de.griefed.serverpackcreator.i18n</a></dt>
 <dd>
 <div class="block">This class is localization manager for your application.</div>
@@ -620,10 +656,6 @@
 </a>
 <h2 class="title">M</h2>
 <dl>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Handler.html#main-java.lang.String:A-">main(String[])</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Handler.html" title="class in de.griefed.serverpackcreator">Handler</a></dt>
-<dd>
-<div class="block">Handler-class makes the calls to every other class where the actual magic is happening.</div>
-</dd>
 <dt><a href="de/griefed/serverpackcreator/Main.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Main</span></a> - Class in <a href="de/griefed/serverpackcreator/package-summary.html">de.griefed.serverpackcreator</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Main.html#Main--">Main()</a></span> - Constructor for class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Main.html" title="class in de.griefed.serverpackcreator">Main</a></dt>
@@ -632,43 +664,29 @@
 <dd>
 <div class="block">Init and "main" has been moved to Handler-class.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/TabbedPane.html#mainGUI--">mainGUI()</a></span> - Method in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/TabbedPane.html" title="class in de.griefed.serverpackcreator.gui">TabbedPane</a></dt>
-<dd>&nbsp;</dd>
-<dt><a href="de/griefed/serverpackcreator/curseforgemodpack/Minecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Minecraft</span></a> - Class in <a href="de/griefed/serverpackcreator/curseforgemodpack/package-summary.html">de.griefed.serverpackcreator.curseforgemodpack</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/Minecraft.html#Minecraft--">Minecraft()</a></span> - Constructor for class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/Minecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Minecraft</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/Modpack.html#minecraft">minecraft</a></span> - Variable in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/Modpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Modpack</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#MINECRAFT_MANIFEST_URL">MINECRAFT_MANIFEST_URL</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#minecraftVersion">minecraftVersion</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/About.html#miscButtonDimension">miscButtonDimension</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/About.html" title="class in de.griefed.serverpackcreator.gui">About</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateGui.html#mainGUI--">mainGUI()</a></span> - Method in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui">CreateGui</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPack.html#miscButtonDimension">miscButtonDimension</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPack.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPack</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#minecraft">minecraft</a></span> - Variable in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModpack</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#modLoader">modLoader</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#minecraftVersion">minecraftVersion</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="de/griefed/serverpackcreator/gui/ModloaderInstallerLog.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">ModloaderInstallerLog</span></a> - Class in <a href="de/griefed/serverpackcreator/gui/package-summary.html">de.griefed.serverpackcreator.gui</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/AboutTab.html#miscButtonDimension">miscButtonDimension</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui">AboutTab</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/ModloaderInstallerLog.html#ModloaderInstallerLog--">ModloaderInstallerLog()</a></span> - Constructor for class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/ModloaderInstallerLog.html" title="class in de.griefed.serverpackcreator.gui">ModloaderInstallerLog</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#miscButtonDimension">miscButtonDimension</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/ModloaderInstallerLog.html#modloaderInstallerLog--">modloaderInstallerLog()</a></span> - Method in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/ModloaderInstallerLog.html" title="class in de.griefed.serverpackcreator.gui">ModloaderInstallerLog</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#modLoader">modLoader</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/Minecraft.html#modLoaders">modLoaders</a></span> - Variable in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/Minecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Minecraft</a></dt>
+<dt><a href="de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">ModloaderInstallerLogTab</span></a> - Class in <a href="de/griefed/serverpackcreator/gui/package-summary.html">de.griefed.serverpackcreator.gui</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="de/griefed/serverpackcreator/curseforgemodpack/ModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">ModLoaders</span></a> - Class in <a href="de/griefed/serverpackcreator/curseforgemodpack/package-summary.html">de.griefed.serverpackcreator.curseforgemodpack</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html#ModloaderInstallerLogTab-de.griefed.serverpackcreator.i18n.LocalizationManager-">ModloaderInstallerLogTab(LocalizationManager)</a></span> - Constructor for class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html" title="class in de.griefed.serverpackcreator.gui">ModloaderInstallerLogTab</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/ModLoaders.html#ModLoaders--">ModLoaders()</a></span> - Constructor for class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/ModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">ModLoaders</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html#modloaderInstallerLogTab--">modloaderInstallerLogTab()</a></span> - Method in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html" title="class in de.griefed.serverpackcreator.gui">ModloaderInstallerLogTab</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#modLoaderVersion">modLoaderVersion</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#modLoaders">modLoaders</a></span> - Variable in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseMinecraft</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="de/griefed/serverpackcreator/curseforgemodpack/Modpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Modpack</span></a> - Class in <a href="de/griefed/serverpackcreator/curseforgemodpack/package-summary.html">de.griefed.serverpackcreator.curseforgemodpack</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#modLoaderVersion">modLoaderVersion</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/Modpack.html#Modpack--">Modpack()</a></span> - Constructor for class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/Modpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Modpack</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#modpackDir">modpackDir</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#modpackDir">modpackDir</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
 </dl>
 <a name="I:N">
@@ -676,9 +694,9 @@
 </a>
 <h2 class="title">N</h2>
 <dl>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/Modpack.html#name">name</a></span> - Variable in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/Modpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Modpack</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#name">name</a></span> - Variable in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModpack</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html#newFile-java.io.File-java.util.zip.ZipEntry-">newFile(File, ZipEntry)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CreateModpack</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#newFile-java.io.File-java.util.zip.ZipEntry-">newFile(File, ZipEntry)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseCreateModpack</a></dt>
 <dd>
 <div class="block">Helper-Method for unzipArchive.</div>
 </dd>
@@ -688,7 +706,9 @@
 </a>
 <h2 class="title">O</h2>
 <dl>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#oldConfigFile">oldConfigFile</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#oldConfigFile">oldConfigFile</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/FilesSetup.html#oldConfigFile">oldConfigFile</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator">FilesSetup</a></dt>
 <dd>&nbsp;</dd>
 </dl>
 <a name="I:P">
@@ -696,23 +716,25 @@
 </a>
 <h2 class="title">P</h2>
 <dl>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/About.html#pastebinIcon">pastebinIcon</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/About.html" title="class in de.griefed.serverpackcreator.gui">About</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/AboutTab.html#pastebinIcon">pastebinIcon</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui">AboutTab</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/ConfigCheck.html#printConfig-java.lang.String-java.util.List-java.util.List-boolean-java.lang.String-java.lang.String-java.lang.String-java.lang.String-boolean-boolean-boolean-boolean-">printConfig(String, List&lt;String&gt;, List&lt;String&gt;, boolean, String, String, String, String, boolean, boolean, boolean, boolean)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/ConfigCheck.html" title="class in de.griefed.serverpackcreator">ConfigCheck</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#printConfig-java.lang.String-java.util.List-java.util.List-boolean-java.lang.String-java.lang.String-java.lang.String-java.lang.String-boolean-boolean-boolean-boolean-">printConfig(String, List&lt;String&gt;, List&lt;String&gt;, boolean, String, String, String, String, boolean, boolean, boolean, boolean)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
 <div class="block">Prints the configuration.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#projectFileID">projectFileID</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#projectFileID">projectFileID</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#projectID">projectID</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/Files.html#projectID">projectID</a></span> - Variable in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/Files.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Files</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#projectID">projectID</a></span> - Variable in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseFiles</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#projectID">projectID</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#projectName">projectName</a></span> - Variable in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseCreateModpack</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html#projectName">projectName</a></span> - Static variable in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CreateModpack</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#propertiesFile">propertiesFile</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#propertiesFile">propertiesFile</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/FilesSetup.html#propertiesFile">propertiesFile</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator">FilesSetup</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/About.html#prosperIcon">prosperIcon</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/About.html" title="class in de.griefed.serverpackcreator.gui">About</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/AboutTab.html#prosperIcon">prosperIcon</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui">AboutTab</a></dt>
 <dd>&nbsp;</dd>
 </dl>
 <a name="I:R">
@@ -720,125 +742,97 @@
 </a>
 <h2 class="title">R</h2>
 <dl>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CLISetup.html#readBoolean--">readBoolean()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CLISetup.html" title="class in de.griefed.serverpackcreator">CLISetup</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#readBoolean--">readBoolean()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
 <div class="block">A helper method for config setup.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CLISetup.html#readStringArray--">readStringArray()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CLISetup.html" title="class in de.griefed.serverpackcreator">CLISetup</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#readStringArray--">readStringArray()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
 <div class="block">A helper method for config setup.</div>
 </dd>
-<dt><a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Reference</span></a> - Class in <a href="de/griefed/serverpackcreator/package-summary.html">de.griefed.serverpackcreator</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html#reticulate--">reticulate()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseSplines</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#Reference--">Reference()</a></span> - Constructor for class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html#reticulating">reticulating</a></span> - Variable in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseSplines</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/Splines.html#reticulating">reticulating</a></span> - Static variable in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/Splines.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Splines</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Handler.html#run--">run()</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Handler.html" title="class in de.griefed.serverpackcreator">Handler</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#run--">run()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>
 <div class="block">Run when serverpackcreator is run in either -cli or -cgen mode.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#RUN_CLI_ARGUMENT">RUN_CLI_ARGUMENT</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
-<dd>&nbsp;</dd>
 </dl>
 <a name="I:S">
 <!--   -->
 </a>
 <h2 class="title">S</h2>
 <dl>
-<dt><a href="de/griefed/serverpackcreator/gui/ServerPackCreatorLog.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">ServerPackCreatorLog</span></a> - Class in <a href="de/griefed/serverpackcreator/gui/package-summary.html">de.griefed.serverpackcreator.gui</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/ServerPackCreatorLog.html#ServerPackCreatorLog--">ServerPackCreatorLog()</a></span> - Constructor for class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/ServerPackCreatorLog.html" title="class in de.griefed.serverpackcreator.gui">ServerPackCreatorLog</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/ServerPackCreatorLog.html#serverPackCreatorLog--">serverPackCreatorLog()</a></span> - Method in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/ServerPackCreatorLog.html" title="class in de.griefed.serverpackcreator.gui">ServerPackCreatorLog</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#serverSetup">serverSetup</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
-<dd>&nbsp;</dd>
-<dt><a href="de/griefed/serverpackcreator/ServerSetup.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">ServerSetup</span></a> - Class in <a href="de/griefed/serverpackcreator/package-summary.html">de.griefed.serverpackcreator</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/ServerSetup.html#ServerSetup--">ServerSetup()</a></span> - Constructor for class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/ServerSetup.html" title="class in de.griefed.serverpackcreator">ServerSetup</a></dt>
+<dt><a href="de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">ServerPackCreatorLogTab</span></a> - Class in <a href="de/griefed/serverpackcreator/gui/package-summary.html">de.griefed.serverpackcreator.gui</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#serverUtilities">serverUtilities</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html#ServerPackCreatorLogTab-de.griefed.serverpackcreator.i18n.LocalizationManager-">ServerPackCreatorLogTab(LocalizationManager)</a></span> - Constructor for class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html" title="class in de.griefed.serverpackcreator.gui">ServerPackCreatorLogTab</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="de/griefed/serverpackcreator/ServerUtilities.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">ServerUtilities</span></a> - Class in <a href="de/griefed/serverpackcreator/package-summary.html">de.griefed.serverpackcreator</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html#serverPackCreatorLogTab--">serverPackCreatorLogTab()</a></span> - Method in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html" title="class in de.griefed.serverpackcreator.gui">ServerPackCreatorLogTab</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/ServerUtilities.html#ServerUtilities--">ServerUtilities()</a></span> - Constructor for class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/ServerUtilities.html" title="class in de.griefed.serverpackcreator">ServerUtilities</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#setClientMods-java.util.List-">setClientMods(List&lt;String&gt;)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/Modpack.html#setAuthor-java.lang.String-">setAuthor(String)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/Modpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Modpack</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#setConfig-com.typesafe.config.Config-">setConfig(Config)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#setClientMods-java.util.List-">setClientMods(List&lt;String&gt;)</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#setCopyDirs-java.util.List-">setCopyDirs(List&lt;String&gt;)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#setConfig-com.typesafe.config.Config-">setConfig(Config)</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#setFileID-java.lang.String-">setFileID(String)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseFiles</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#setCopyDirs-java.util.List-">setCopyDirs(List&lt;String&gt;)</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#setFiles-java.util.List-">setFiles(List&lt;CurseFiles&gt;)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModpack</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/Files.html#setFileID-java.lang.String-">setFileID(String)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/Files.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Files</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html#setId-java.lang.String-">setId(String)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModLoaders</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/Modpack.html#setFiles-java.util.List-">setFiles(List&lt;Files&gt;)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/Modpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Modpack</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#setIncludeServerIcon-boolean-">setIncludeServerIcon(boolean)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/ModLoaders.html#setId-java.lang.String-">setId(String)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/ModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">ModLoaders</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#setIncludeServerInstallation-boolean-">setIncludeServerInstallation(boolean)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#setIncludeServerIcon-boolean-">setIncludeServerIcon(boolean)</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#setIncludeServerProperties-boolean-">setIncludeServerProperties(boolean)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#setIncludeServerInstallation-boolean-">setIncludeServerInstallation(boolean)</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#setIncludeStartScripts-boolean-">setIncludeStartScripts(boolean)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#setIncludeServerProperties-boolean-">setIncludeServerProperties(boolean)</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#setIncludeZipCreation-boolean-">setIncludeZipCreation(boolean)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#setIncludeStartScripts-boolean-">setIncludeStartScripts(boolean)</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#setJavaPath-java.lang.String-">setJavaPath(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#setIncludeZipCreation-boolean-">setIncludeZipCreation(boolean)</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#setMinecraft-java.util.List-">setMinecraft(List&lt;CurseMinecraft&gt;)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModpack</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#setJavaPath-java.lang.String-">setJavaPath(String)</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#setMinecraftVersion-java.lang.String-">setMinecraftVersion(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/Modpack.html#setMinecraft-java.util.List-">setMinecraft(List&lt;Minecraft&gt;)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/Modpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Modpack</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#setModLoader-java.lang.String-">setModLoader(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#setMinecraftVersion-java.lang.String-">setMinecraftVersion(String)</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/ConfigCheck.html#setModloader-java.lang.String-">setModloader(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/ConfigCheck.html" title="class in de.griefed.serverpackcreator">ConfigCheck</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#setModloader-java.lang.String-">setModloader(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
 <div class="block">Standardize the specified modloader.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html#setModloader-java.lang.String-">setModloader(String)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CreateModpack</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#setModloader-java.lang.String-">setModloader(String)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseCreateModpack</a></dt>
 <dd>
 <div class="block">Standardize the specified modloader.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#setModLoader-java.lang.String-">setModLoader(String)</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/Minecraft.html#setModLoaders-java.util.List-">setModLoaders(List&lt;ModLoaders&gt;)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/Minecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Minecraft</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#setModLoaderVersion-java.lang.String-">setModLoaderVersion(String)</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#setModLoaders-java.util.List-">setModLoaders(List&lt;CurseModLoaders&gt;)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseMinecraft</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#setModpackDir-java.lang.String-">setModpackDir(String)</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#setModLoaderVersion-java.lang.String-">setModLoaderVersion(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/Modpack.html#setName-java.lang.String-">setName(String)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/Modpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Modpack</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#setModpackDir-java.lang.String-">setModpackDir(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#setProjectFileID-int-">setProjectFileID(int)</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#setName-java.lang.String-">setName(String)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModpack</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/Files.html#setProjectID-java.lang.String-">setProjectID(String)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/Files.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Files</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#setProjectFileID-int-">setProjectFileID(int)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#setProjectID-int-">setProjectID(int)</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#setProjectID-int-">setProjectID(int)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/Splines.html#setSplines--">setSplines()</a></span> - Static method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/Splines.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Splines</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#setProjectID-java.lang.String-">setProjectID(String)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseFiles</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CLISetup.html#setup--">setup()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CLISetup.html" title="class in de.griefed.serverpackcreator">CLISetup</a></dt>
-<dd>
-<div class="block">CLI for config file generation.</div>
-</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/Minecraft.html#setVersion-java.lang.String-">setVersion(String)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/Minecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Minecraft</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#setVersion-java.lang.String-">setVersion(String)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseMinecraft</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/Modpack.html#setVersion-java.lang.String-">setVersion(String)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/Modpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Modpack</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#setVersion-java.lang.String-">setVersion(String)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModpack</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="de/griefed/serverpackcreator/curseforgemodpack/Splines.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Splines</span></a> - Class in <a href="de/griefed/serverpackcreator/curseforgemodpack/package-summary.html">de.griefed.serverpackcreator.curseforgemodpack</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#startGeneration">startGeneration</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/Splines.html#Splines--">Splines()</a></span> - Constructor for class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/Splines.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Splines</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPack.html#startGeneration">startGeneration</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPack.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPack</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/ConfigCheck.html#suggestCopyDirs-java.lang.String-">suggestCopyDirs(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/ConfigCheck.html" title="class in de.griefed.serverpackcreator">ConfigCheck</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#suggestCopyDirs-java.lang.String-">suggestCopyDirs(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
 <div class="block">Creates a list of suggested directories to include in server pack which is later on written to a new configuration file.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Reference.html#SUPPORTED_LANGUAGES">SUPPORTED_LANGUAGES</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator">Reference</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#SUPPORTED_LANGUAGES">SUPPORTED_LANGUAGES</a></span> - Variable in class de.griefed.serverpackcreator.i18n.<a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></dt>
 <dd>&nbsp;</dd>
 </dl>
 <a name="I:T">
@@ -846,17 +840,13 @@
 </a>
 <h2 class="title">T</h2>
 <dl>
-<dt><a href="de/griefed/serverpackcreator/gui/TabbedPane.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">TabbedPane</span></a> - Class in <a href="de/griefed/serverpackcreator/gui/package-summary.html">de.griefed.serverpackcreator.gui</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/TabbedPane.html#TabbedPane--">TabbedPane()</a></span> - Constructor for class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/TabbedPane.html" title="class in de.griefed.serverpackcreator.gui">TabbedPane</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/Files.html#toString--">toString()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/Files.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Files</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#toString--">toString()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseFiles</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/Minecraft.html#toString--">toString()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/Minecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Minecraft</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#toString--">toString()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseMinecraft</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/ModLoaders.html#toString--">toString()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/ModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">ModLoaders</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html#toString--">toString()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModLoaders</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/Modpack.html#toString--">toString()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/Modpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Modpack</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#toString--">toString()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModpack</a></dt>
 <dd>&nbsp;</dd>
 </dl>
 <a name="I:U">
@@ -864,7 +854,7 @@
 </a>
 <h2 class="title">U</h2>
 <dl>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html#unzipArchive-java.lang.String-java.lang.String-">unzipArchive(String, String)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CreateModpack</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#unzipArchive-java.lang.String-java.lang.String-">unzipArchive(String, String)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseCreateModpack</a></dt>
 <dd>
 <div class="block">With help from: https://www.baeldung.com/java-compress-and-uncompress
  Unzips the downloaded modpack archive to a directory.</div>
@@ -875,9 +865,9 @@
 </a>
 <h2 class="title">V</h2>
 <dl>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/Minecraft.html#version">version</a></span> - Variable in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/Minecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Minecraft</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#version">version</a></span> - Variable in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseMinecraft</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/Modpack.html#version">version</a></span> - Variable in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/Modpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">Modpack</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#version">version</a></span> - Variable in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModpack</a></dt>
 <dd>&nbsp;</dd>
 </dl>
 <a name="I:W">
@@ -885,13 +875,13 @@
 </a>
 <h2 class="title">W</h2>
 <dl>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/TabbedPane.html#windowDimension">windowDimension</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/TabbedPane.html" title="class in de.griefed.serverpackcreator.gui">TabbedPane</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateGui.html#windowDimension">windowDimension</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui">CreateGui</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/FilesSetup.html#writeConfigToFile-java.lang.String-java.lang.String-java.lang.String-boolean-java.lang.String-java.lang.String-java.lang.String-java.lang.String-boolean-boolean-boolean-boolean-java.io.File-boolean-">writeConfigToFile(String, String, String, boolean, String, String, String, String, boolean, boolean, boolean, boolean, File, boolean)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator">FilesSetup</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#writeConfigToFile-java.lang.String-java.lang.String-java.lang.String-boolean-java.lang.String-java.lang.String-java.lang.String-java.lang.String-boolean-boolean-boolean-boolean-java.io.File-boolean-">writeConfigToFile(String, String, String, boolean, String, String, String, String, boolean, boolean, boolean, boolean, File, boolean)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
 <div class="block">Writes a new configuration file with the parameters passed to it.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/FilesSetup.html#writeLocaleToFile-java.lang.String-">writeLocaleToFile(String)</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator">FilesSetup</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#writeLocaleToFile-java.lang.String-">writeLocaleToFile(String)</a></span> - Method in class de.griefed.serverpackcreator.i18n.<a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></dt>
 <dd>
 <div class="block">Writes the specified locale from -lang your_locale to a lang.properties file to ensure every subsequent start of serverpackcreator is executed using said locale.</div>
 </dd>
@@ -901,7 +891,7 @@
 </a>
 <h2 class="title">Z</h2>
 <dl>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/ServerSetup.html#zipBuilder-java.lang.String-java.lang.String-java.lang.Boolean-">zipBuilder(String, String, Boolean)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/ServerSetup.html" title="class in de.griefed.serverpackcreator">ServerSetup</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#zipBuilder-java.lang.String-java.lang.String-java.lang.Boolean-java.lang.String-">zipBuilder(String, String, Boolean, String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>
 <div class="block">Create a zip-archive of the serverpack, excluding Mojang's minecraft_server.jar.</div>
 </dd>
diff --git a/docs/overview-tree.html b/docs/overview-tree.html
index f8ba07867..d9ca2afb7 100644
--- a/docs/overview-tree.html
+++ b/docs/overview-tree.html
@@ -82,46 +82,38 @@
 <ul>
 <li type="circle">java.lang.Object
 <ul>
-<li type="circle">de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CLISetup.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">CLISetup</span></a></li>
 <li type="circle">java.awt.Component (implements java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable)
 <ul>
-<li type="circle">de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/About.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">About</span></a></li>
+<li type="circle">de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">AboutTab</span></a></li>
 <li type="circle">java.awt.Container
 <ul>
 <li type="circle">javax.swing.JComponent (implements java.io.Serializable)
 <ul>
 <li type="circle">javax.swing.JPanel (implements javax.accessibility.Accessible)
 <ul>
-<li type="circle">de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/TabbedPane.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">TabbedPane</span></a></li>
+<li type="circle">de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">CreateGui</span></a></li>
 </ul>
 </li>
 </ul>
 </li>
 </ul>
 </li>
-<li type="circle">de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPack.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">CreateServerPack</span></a></li>
-<li type="circle">de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/ModloaderInstallerLog.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">ModloaderInstallerLog</span></a></li>
-<li type="circle">de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/ServerPackCreatorLog.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">ServerPackCreatorLog</span></a></li>
+<li type="circle">de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">CreateServerPackTab</span></a></li>
+<li type="circle">de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">ModloaderInstallerLogTab</span></a></li>
+<li type="circle">de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">ServerPackCreatorLogTab</span></a></li>
 </ul>
 </li>
-<li type="circle">de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/ConfigCheck.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">ConfigCheck</span></a></li>
-<li type="circle">de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CopyFiles.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">CopyFiles</span></a></li>
-<li type="circle">de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">CreateModpack</span></a></li>
-<li type="circle">de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/Files.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Files</span></a></li>
+<li type="circle">de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Configuration</span></a></li>
+<li type="circle">de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">CreateServerPack</span></a></li>
+<li type="circle">de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">CurseCreateModpack</span></a></li>
+<li type="circle">de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">CurseFiles</span></a></li>
+<li type="circle">de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">CurseMinecraft</span></a></li>
+<li type="circle">de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">CurseModLoaders</span></a></li>
+<li type="circle">de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">CurseModpack</span></a></li>
+<li type="circle">de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">CurseSplines</span></a></li>
 <li type="circle">de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">FilesSetup</span></a></li>
-<li type="circle">de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Handler.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Handler</span></a></li>
-<li type="circle">de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Main.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Main</span></a></li>
-<li type="circle">de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/Minecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Minecraft</span></a></li>
-<li type="circle">de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/ModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">ModLoaders</span></a></li>
-<li type="circle">de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/Modpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Modpack</span></a></li>
-<li type="circle">de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Reference.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Reference</span></a>
-<ul>
 <li type="circle">de.griefed.serverpackcreator.i18n.<a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n"><span class="typeNameLink">LocalizationManager</span></a></li>
-</ul>
-</li>
-<li type="circle">de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/ServerSetup.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">ServerSetup</span></a></li>
-<li type="circle">de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/ServerUtilities.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">ServerUtilities</span></a></li>
-<li type="circle">de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/Splines.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">Splines</span></a></li>
+<li type="circle">de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Main.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Main</span></a></li>
 <li type="circle">java.lang.Throwable (implements java.io.Serializable)
 <ul>
 <li type="circle">java.lang.Exception
diff --git a/docs/serialized-form.html b/docs/serialized-form.html
index 83423bd3a..f972898ce 100644
--- a/docs/serialized-form.html
+++ b/docs/serialized-form.html
@@ -75,10 +75,10 @@
 <li class="blockList">
 <h2 title="Package">Package&nbsp;de.griefed.serverpackcreator.gui</h2>
 <ul class="blockList">
-<li class="blockList"><a name="de.griefed.serverpackcreator.gui.TabbedPane">
+<li class="blockList"><a name="de.griefed.serverpackcreator.gui.CreateGui">
 <!--   -->
 </a>
-<h3>Class <a href="de/griefed/serverpackcreator/gui/TabbedPane.html" title="class in de.griefed.serverpackcreator.gui">de.griefed.serverpackcreator.gui.TabbedPane</a> extends javax.swing.JPanel implements Serializable</h3>
+<h3>Class <a href="de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui">de.griefed.serverpackcreator.gui.CreateGui</a> extends javax.swing.JPanel implements Serializable</h3>
 <ul class="blockList">
 <li class="blockList">
 <h3>Serialized Fields</h3>
@@ -91,10 +91,66 @@
 <h4>icon</h4>
 <pre>java.awt.Image icon</pre>
 </li>
-<li class="blockListLast">
+<li class="blockList">
 <h4>windowDimension</h4>
 <pre>java.awt.Dimension windowDimension</pre>
 </li>
+<li class="blockList">
+<h4>localizationManager</h4>
+<pre><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a> localizationManager</pre>
+</li>
+<li class="blockListLast">
+<h4>configuration</h4>
+<pre><a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a> configuration</pre>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="blockList"><a name="de.griefed.serverpackcreator.gui.CreateServerPackTab">
+<!--   -->
+</a>
+<h3>Class <a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">de.griefed.serverpackcreator.gui.CreateServerPackTab</a> extends java.awt.Component implements Serializable</h3>
+<ul class="blockList">
+<li class="blockList">
+<h3>Serialized Fields</h3>
+<ul class="blockList">
+<li class="blockList">
+<h4>loadIcon</h4>
+<pre>javax.swing.ImageIcon loadIcon</pre>
+</li>
+<li class="blockList">
+<h4>folderIcon</h4>
+<pre>javax.swing.ImageIcon folderIcon</pre>
+</li>
+<li class="blockList">
+<h4>startGeneration</h4>
+<pre>javax.swing.ImageIcon startGeneration</pre>
+</li>
+<li class="blockList">
+<h4>helpIcon</h4>
+<pre>javax.swing.ImageIcon helpIcon</pre>
+</li>
+<li class="blockList">
+<h4>folderButtonDimension</h4>
+<pre>java.awt.Dimension folderButtonDimension</pre>
+</li>
+<li class="blockList">
+<h4>miscButtonDimension</h4>
+<pre>java.awt.Dimension miscButtonDimension</pre>
+</li>
+<li class="blockList">
+<h4>chooserDimension</h4>
+<pre>java.awt.Dimension chooserDimension</pre>
+</li>
+<li class="blockList">
+<h4>configuration</h4>
+<pre><a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a> configuration</pre>
+</li>
+<li class="blockListLast">
+<h4>localizationManager</h4>
+<pre><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a> localizationManager</pre>
+</li>
 </ul>
 </li>
 </ul>
diff --git a/src/main/java/de/griefed/serverpackcreator/ConfigCheck.java b/src/main/java/de/griefed/serverpackcreator/Configuration.java
similarity index 99%
rename from src/main/java/de/griefed/serverpackcreator/ConfigCheck.java
rename to src/main/java/de/griefed/serverpackcreator/Configuration.java
index 65fa849e8..cd3e08d54 100644
--- a/src/main/java/de/griefed/serverpackcreator/ConfigCheck.java
+++ b/src/main/java/de/griefed/serverpackcreator/Configuration.java
@@ -28,14 +28,14 @@ import java.nio.file.Files;
 import java.nio.file.Paths;
 import java.util.*;
 
-public class ConfigCheck {
+public class Configuration {
 
-    private static final Logger appLogger = LogManager.getLogger(ConfigCheck.class);
+    private static final Logger appLogger = LogManager.getLogger(Configuration.class);
     private final File oldConfigFile = new File("creator.conf");
     private final File configFile = new File("serverpackcreator.conf");
     private LocalizationManager localizationManager;
 
-    public ConfigCheck(LocalizationManager injectedLocalizationManager) {
+    public Configuration(LocalizationManager injectedLocalizationManager) {
         if (injectedLocalizationManager == null) {
             this.localizationManager = new LocalizationManager();
         }
diff --git a/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java b/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
index e52ad0214..c971ae536 100644
--- a/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
+++ b/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
@@ -34,7 +34,7 @@ public class CreateServerPack {
     private static final Logger appLogger = LogManager.getLogger(FilesSetup.class);
     private static final Logger installerLogger = LogManager.getLogger("InstallerLogger");
 
-    private ConfigCheck configCheck;
+    private Configuration configuration;
     private LocalizationManager localizationManager;
     private final File propertiesFile    = new File("server.properties");
     private final File iconFile          = new File("server-icon.png");
@@ -44,7 +44,7 @@ public class CreateServerPack {
     private final File fabricLinuxFile   = new File("start-fabric.sh");
 
 
-    public CreateServerPack(LocalizationManager injectedLocalizationManager, ConfigCheck injectedConfigCheck) {
+    public CreateServerPack(LocalizationManager injectedLocalizationManager, Configuration injectedConfigCheck) {
         if (injectedLocalizationManager == null) {
             this.localizationManager = new LocalizationManager();
         }
@@ -52,10 +52,10 @@ public class CreateServerPack {
         this.localizationManager = injectedLocalizationManager;
 
         if (injectedConfigCheck == null) {
-            this.configCheck = new ConfigCheck(localizationManager);
+            this.configuration = new Configuration(localizationManager);
         }
 
-        this.configCheck = injectedConfigCheck;
+        this.configuration = injectedConfigCheck;
     }
 
     public File getPropertiesFile() {
@@ -87,36 +87,36 @@ public class CreateServerPack {
      * @return Return true if the serverpack was successfully generated, false if not.
      */
     public boolean run() {
-        if (!configCheck.checkConfigFile(configCheck.getConfigFile())) {
-            cleanupEnvironment(configCheck.getModpackDir());
+        if (!configuration.checkConfigFile(configuration.getConfigFile())) {
+            cleanupEnvironment(configuration.getModpackDir());
             try {
-                copyFiles(configCheck.getModpackDir(), configCheck.getCopyDirs(), configCheck.getClientMods());
+                copyFiles(configuration.getModpackDir(), configuration.getCopyDirs(), configuration.getClientMods());
             } catch (IOException ex) {
                 appLogger.error(localizationManager.getLocalizedString("handler.log.error.runincli.copyfiles"), ex);
             }
-            copyStartScripts(configCheck.getModpackDir(), configCheck.getModLoader(), configCheck.getIncludeStartScripts());
-            if (configCheck.getIncludeServerInstallation()) {
-                installServer(configCheck.getModLoader(), configCheck.getModpackDir(), configCheck.getMinecraftVersion(), configCheck.getModLoaderVersion(), configCheck.getJavaPath());
+            copyStartScripts(configuration.getModpackDir(), configuration.getModLoader(), configuration.getIncludeStartScripts());
+            if (configuration.getIncludeServerInstallation()) {
+                installServer(configuration.getModLoader(), configuration.getModpackDir(), configuration.getMinecraftVersion(), configuration.getModLoaderVersion(), configuration.getJavaPath());
             } else {
                 appLogger.info(localizationManager.getLocalizedString("handler.log.info.runincli.server"));
             }
-            if (configCheck.getIncludeServerIcon()) {
-                copyIcon(configCheck.getModpackDir());
+            if (configuration.getIncludeServerIcon()) {
+                copyIcon(configuration.getModpackDir());
             } else {
                 appLogger.info(localizationManager.getLocalizedString("handler.log.info.runincli.icon"));
             }
-            if (configCheck.getIncludeServerProperties()) {
-                copyProperties(configCheck.getModpackDir());
+            if (configuration.getIncludeServerProperties()) {
+                copyProperties(configuration.getModpackDir());
             } else {
                 appLogger.info(localizationManager.getLocalizedString("handler.log.info.runincli.properties"));
             }
-            if (configCheck.getIncludeZipCreation()) {
-                zipBuilder(configCheck.getModpackDir(), configCheck.getModLoader(), configCheck.getIncludeServerInstallation(), configCheck.getMinecraftVersion());
+            if (configuration.getIncludeZipCreation()) {
+                zipBuilder(configuration.getModpackDir(), configuration.getModLoader(), configuration.getIncludeServerInstallation(), configuration.getMinecraftVersion());
             } else {
                 appLogger.info(localizationManager.getLocalizedString("handler.log.info.runincli.zip"));
             }
-            appLogger.info(String.format(localizationManager.getLocalizedString("handler.log.info.runincli.serverpack"), configCheck.getModpackDir()));
-            appLogger.info(String.format(localizationManager.getLocalizedString("handler.log.info.runincli.archive"), configCheck.getModpackDir()));
+            appLogger.info(String.format(localizationManager.getLocalizedString("handler.log.info.runincli.serverpack"), configuration.getModpackDir()));
+            appLogger.info(String.format(localizationManager.getLocalizedString("handler.log.info.runincli.archive"), configuration.getModpackDir()));
             appLogger.info(localizationManager.getLocalizedString("handler.log.info.runincli.finish"));
             return true;
         } else {
diff --git a/src/main/java/de/griefed/serverpackcreator/Main.java b/src/main/java/de/griefed/serverpackcreator/Main.java
index 9e1ccb157..747ac0390 100644
--- a/src/main/java/de/griefed/serverpackcreator/Main.java
+++ b/src/main/java/de/griefed/serverpackcreator/Main.java
@@ -21,9 +21,10 @@ public class Main {
      */
     public static void main(String[] args) {
         LocalizationManager localizationManager = new LocalizationManager();
-        ConfigCheck configCheck = new ConfigCheck(localizationManager);
+        Configuration configuration = new Configuration(localizationManager);
         FilesSetup filesSetup = new FilesSetup(localizationManager);
-        CreateServerPack createServerPack = new CreateServerPack(localizationManager, configCheck);
+        CreateServerPack createServerPack = new CreateServerPack(localizationManager, configuration);
+        CreateGui tabbedPane = new CreateGui(localizationManager, configuration);
 
         List<String> programArgs = Arrays.asList(args);
 
@@ -78,7 +79,7 @@ public class Main {
 
         if (Arrays.asList(args).contains("-cgen")) {
 
-            configCheck.createConfigurationFile();
+            configuration.createConfigurationFile();
 
             if (createServerPack.run()) {
                 System.exit(0);
@@ -90,7 +91,7 @@ public class Main {
 
             if (!new File("creator.conf").exists() && !new File("serverpackcreator.conf").exists()) {
 
-                configCheck.createConfigurationFile();
+                configuration.createConfigurationFile();
             }
 
             if (createServerPack.run()) {
@@ -102,7 +103,7 @@ public class Main {
 
             if (!new File("creator.conf").exists() && !new File("serverpackcreator.conf").exists()) {
 
-                configCheck.createConfigurationFile();
+                configuration.createConfigurationFile();
             }
 
             if (createServerPack.run()) {
@@ -113,7 +114,6 @@ public class Main {
 
         } else {
 
-            CreateGui tabbedPane = new CreateGui(localizationManager, configCheck);
             tabbedPane.mainGUI();
 
         }
diff --git a/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java b/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java
index 3a6cd483e..cdd6becb6 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java
@@ -3,7 +3,7 @@ package de.griefed.serverpackcreator.gui;
 import com.typesafe.config.Config;
 import com.typesafe.config.ConfigException;
 import com.typesafe.config.ConfigFactory;
-import de.griefed.serverpackcreator.ConfigCheck;
+import de.griefed.serverpackcreator.Configuration;
 import de.griefed.serverpackcreator.i18n.LocalizationManager;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
@@ -22,9 +22,9 @@ public class CreateGui extends JPanel {
     private final Dimension windowDimension = new Dimension(800,860);
 
     private LocalizationManager localizationManager;
-    private ConfigCheck configCheck;
+    private Configuration configuration;
 
-    public CreateGui(LocalizationManager injectedLocalizationManager, ConfigCheck injectedConfigCheck) {
+    public CreateGui(LocalizationManager injectedLocalizationManager, Configuration injectedConfigCheck) {
         super(new GridLayout(1, 1));
 
         if (injectedLocalizationManager == null) {
@@ -34,14 +34,14 @@ public class CreateGui extends JPanel {
         }
 
         if (injectedConfigCheck == null) {
-            this.configCheck = new ConfigCheck(localizationManager);
+            this.configuration = new Configuration(localizationManager);
         } else {
-            this.configCheck = injectedConfigCheck;
+            this.configuration = injectedConfigCheck;
         }
 
         JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
 
-        tabbedPane.addTab(localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.createserverpack.title"), null, new CreateServerPackTab(localizationManager, configCheck).createServerPackTab(), localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.createserverpack.tip"));
+        tabbedPane.addTab(localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.createserverpack.title"), null, new CreateServerPackTab(localizationManager, configuration).createServerPackTab(), localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.createserverpack.tip"));
         tabbedPane.setMnemonicAt(0, KeyEvent.VK_1);
 
         tabbedPane.addTab(localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.serverpackcreatorlog.title"), null, new ServerPackCreatorLogTab(localizationManager).serverPackCreatorLogTab(), localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.serverpackcreatorlog.tip"));
@@ -110,7 +110,7 @@ public class CreateGui extends JPanel {
         banner.setOpaque(false);
 
         frame.add(banner, BorderLayout.PAGE_START);
-        frame.add(new CreateGui(localizationManager, configCheck), BorderLayout.CENTER);
+        frame.add(new CreateGui(localizationManager, configuration), BorderLayout.CENTER);
 
         frame.setPreferredSize(windowDimension);
         frame.setMaximumSize(windowDimension);
diff --git a/src/main/java/de/griefed/serverpackcreator/gui/CreateServerPackTab.java b/src/main/java/de/griefed/serverpackcreator/gui/CreateServerPackTab.java
index 358e57324..9733d6374 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/CreateServerPackTab.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/CreateServerPackTab.java
@@ -2,7 +2,7 @@ package de.griefed.serverpackcreator.gui;
 
 import com.typesafe.config.Config;
 import com.typesafe.config.ConfigFactory;
-import de.griefed.serverpackcreator.ConfigCheck;
+import de.griefed.serverpackcreator.Configuration;
 import de.griefed.serverpackcreator.CreateServerPack;
 import de.griefed.serverpackcreator.i18n.LocalizationManager;
 import org.apache.commons.io.input.Tailer;
@@ -34,10 +34,10 @@ public class CreateServerPackTab extends Component {
     private final Dimension miscButtonDimension   = new Dimension(50,50);
     private final Dimension chooserDimension      = new Dimension(750,450);
 
-    private ConfigCheck configCheck;
+    private Configuration configuration;
     private LocalizationManager localizationManager;
 
-    public CreateServerPackTab(LocalizationManager injectedLocalizationManager, ConfigCheck injectedConfigCheck) {
+    public CreateServerPackTab(LocalizationManager injectedLocalizationManager, Configuration injectedConfigCheck) {
         if (injectedLocalizationManager == null) {
             this.localizationManager = new LocalizationManager();
         } else {
@@ -45,9 +45,9 @@ public class CreateServerPackTab extends Component {
         }
 
         if (injectedConfigCheck == null) {
-            this.configCheck = new ConfigCheck(localizationManager);
+            this.configuration = new Configuration(localizationManager);
         } else {
-            this.configCheck = injectedConfigCheck;
+            this.configuration = injectedConfigCheck;
         }
 
     }
@@ -272,7 +272,7 @@ public class CreateServerPackTab extends Component {
                     clientModsFilenames.add(clientMods[i].getName());
                 }
 
-                textClientMods.setText(configCheck.buildString(Arrays.toString(clientModsFilenames.toArray(new String[0]))));
+                textClientMods.setText(configuration.buildString(Arrays.toString(clientModsFilenames.toArray(new String[0]))));
                 appLogger.info(String.format(localizationManager.getLocalizedString("createserverpack.log.info.buttonclientmods"), clientModsFilenames));
             }
         });
@@ -311,7 +311,7 @@ public class CreateServerPackTab extends Component {
                     copyDirsNames.add(copyDirs[i].getName());
                 }
 
-                textCopyDirs.setText(configCheck.buildString(Arrays.toString(copyDirsNames.toArray(new String[0]))));
+                textCopyDirs.setText(configuration.buildString(Arrays.toString(copyDirsNames.toArray(new String[0]))));
                 appLogger.info(String.format(localizationManager.getLocalizedString("createserverpack.log.info.buttoncopydirs"), copyDirsNames));
             }
         });
@@ -389,9 +389,9 @@ public class CreateServerPackTab extends Component {
 
                     textModpackDir.setText(newConfigFile.getString("modpackDir"));
 
-                    textClientMods.setText(configCheck.buildString(newConfigFile.getStringList("clientMods").toString()));
+                    textClientMods.setText(configuration.buildString(newConfigFile.getStringList("clientMods").toString()));
 
-                    textCopyDirs.setText(configCheck.buildString(newConfigFile.getStringList("copyDirs").toString()));
+                    textCopyDirs.setText(configuration.buildString(newConfigFile.getStringList("copyDirs").toString()));
 
                     textJavaPath.setText(newConfigFile.getString("javaPath"));
 
@@ -401,15 +401,15 @@ public class CreateServerPackTab extends Component {
 
                     textModloaderVersion.setText(newConfigFile.getString("modLoaderVersion"));
 
-                    checkBoxServer.setSelected(configCheck.convertToBoolean(newConfigFile.getString("includeServerInstallation")));
+                    checkBoxServer.setSelected(configuration.convertToBoolean(newConfigFile.getString("includeServerInstallation")));
 
-                    checkBoxIcon.setSelected(configCheck.convertToBoolean(newConfigFile.getString("includeServerIcon")));
+                    checkBoxIcon.setSelected(configuration.convertToBoolean(newConfigFile.getString("includeServerIcon")));
 
-                    checkBoxProperties.setSelected(configCheck.convertToBoolean(newConfigFile.getString("includeServerProperties")));
+                    checkBoxProperties.setSelected(configuration.convertToBoolean(newConfigFile.getString("includeServerProperties")));
 
-                    checkBoxScripts.setSelected(configCheck.convertToBoolean(newConfigFile.getString("includeStartScripts")));
+                    checkBoxScripts.setSelected(configuration.convertToBoolean(newConfigFile.getString("includeStartScripts")));
 
-                    checkBoxZIP.setSelected(configCheck.convertToBoolean(newConfigFile.getString("includeZipCreation")));
+                    checkBoxZIP.setSelected(configuration.convertToBoolean(newConfigFile.getString("includeZipCreation")));
 
                     appLogger.info(localizationManager.getLocalizedString("createserverpack.log.info.buttonloadconfigfromfile.finish"));
                 }
@@ -501,7 +501,7 @@ public class CreateServerPackTab extends Component {
             appLogger.info(localizationManager.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.start"));
             labelGenerateServerPack.setText(localizationManager.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.start"));
 
-            configCheck.writeConfigToFile(
+            configuration.writeConfigToFile(
                     textModpackDir.getText(),
                     textClientMods.getText(),
                     textCopyDirs.getText(),
@@ -517,7 +517,7 @@ public class CreateServerPackTab extends Component {
                     new File("serverpackcreator.tmp"),
                     true
             );
-            if (!configCheck.checkConfigFile(new File("serverpackcreator.tmp"))) {
+            if (!configuration.checkConfigFile(new File("serverpackcreator.tmp"))) {
                 appLogger.info(localizationManager.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.checked"));
                 labelGenerateServerPack.setText(localizationManager.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.checked"));
 
@@ -534,7 +534,7 @@ public class CreateServerPackTab extends Component {
 
                 appLogger.info(localizationManager.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.writing"));
                 labelGenerateServerPack.setText(localizationManager.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.writing"));
-                configCheck.writeConfigToFile(
+                configuration.writeConfigToFile(
                         textModpackDir.getText(),
                         textClientMods.getText(),
                         textCopyDirs.getText(),
@@ -547,7 +547,7 @@ public class CreateServerPackTab extends Component {
                         checkBoxProperties.isSelected(),
                         checkBoxScripts.isSelected(),
                         checkBoxZIP.isSelected(),
-                        configCheck.getConfigFile(),
+                        configuration.getConfigFile(),
                         false
                 );
 
@@ -565,7 +565,7 @@ public class CreateServerPackTab extends Component {
 
                 final ExecutorService executorService = Executors.newSingleThreadExecutor();
                 executorService.execute(() -> {
-                    CreateServerPack createServerPack = new CreateServerPack(localizationManager, configCheck);
+                    CreateServerPack createServerPack = new CreateServerPack(localizationManager, configuration);
                     if (createServerPack.run()) {
                         tailer.stop();
 
@@ -642,9 +642,9 @@ public class CreateServerPackTab extends Component {
 
                 textModpackDir.setText(config.getString("modpackDir"));
 
-                textClientMods.setText(configCheck.buildString(config.getStringList("clientMods").toString()));
+                textClientMods.setText(configuration.buildString(config.getStringList("clientMods").toString()));
 
-                textCopyDirs.setText(configCheck.buildString(config.getStringList("copyDirs").toString()));
+                textCopyDirs.setText(configuration.buildString(config.getStringList("copyDirs").toString()));
 
                 textJavaPath.setText(config.getString("javaPath"));
 
@@ -654,15 +654,15 @@ public class CreateServerPackTab extends Component {
 
                 textModloaderVersion.setText(config.getString("modLoaderVersion"));
 
-                checkBoxServer.setSelected(configCheck.convertToBoolean(config.getString("includeServerInstallation")));
+                checkBoxServer.setSelected(configuration.convertToBoolean(config.getString("includeServerInstallation")));
 
-                checkBoxIcon.setSelected(configCheck.convertToBoolean(config.getString("includeServerIcon")));
+                checkBoxIcon.setSelected(configuration.convertToBoolean(config.getString("includeServerIcon")));
 
-                checkBoxProperties.setSelected(configCheck.convertToBoolean(config.getString("includeServerProperties")));
+                checkBoxProperties.setSelected(configuration.convertToBoolean(config.getString("includeServerProperties")));
 
-                checkBoxScripts.setSelected(configCheck.convertToBoolean(config.getString("includeStartScripts")));
+                checkBoxScripts.setSelected(configuration.convertToBoolean(config.getString("includeStartScripts")));
 
-                checkBoxZIP.setSelected(configCheck.convertToBoolean(config.getString("includeZipCreation")));
+                checkBoxZIP.setSelected(configuration.convertToBoolean(config.getString("includeZipCreation")));
 
                 appLogger.info(localizationManager.getLocalizedString("createserverpack.log.info.buttonloadconfigfromfile.finish"));
             }
diff --git a/src/test/java/de/griefed/serverpackcreator/ConfigCheckTest.java b/src/test/java/de/griefed/serverpackcreator/ConfigCheckTest.java
index fa9ed5e99..6ba502407 100644
--- a/src/test/java/de/griefed/serverpackcreator/ConfigCheckTest.java
+++ b/src/test/java/de/griefed/serverpackcreator/ConfigCheckTest.java
@@ -6,7 +6,6 @@ import org.apache.logging.log4j.Logger;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
-import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
@@ -23,12 +22,12 @@ class ConfigCheckTest {
     @Mock
     Logger appLogger;
 
-    private ConfigCheck configCheck;
+    private Configuration configCheck;
     private LocalizationManager localizationManager;
 
     ConfigCheckTest() {
         localizationManager = new LocalizationManager();
-        configCheck = new ConfigCheck(localizationManager);
+        configCheck = new Configuration(localizationManager);
     }
 
     @BeforeEach
diff --git a/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java b/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
index bbbda042b..898465b6a 100644
--- a/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
+++ b/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
@@ -27,11 +27,11 @@ class CreateServerPackTest {
     private CreateServerPack createServerPack;
     private FilesSetup filesSetup;
     private LocalizationManager localizationManager;
-    private ConfigCheck configCheck;
+    private Configuration configCheck;
 
     CreateServerPackTest() {
         localizationManager = new LocalizationManager();
-        configCheck = new ConfigCheck(localizationManager);
+        configCheck = new Configuration(localizationManager);
         createServerPack = new CreateServerPack(localizationManager, configCheck);
         filesSetup = new FilesSetup(localizationManager);
     }
diff --git a/src/test/java/de/griefed/serverpackcreator/FilesSetupTest.java b/src/test/java/de/griefed/serverpackcreator/FilesSetupTest.java
index 0b60fcab3..7ae65770c 100644
--- a/src/test/java/de/griefed/serverpackcreator/FilesSetupTest.java
+++ b/src/test/java/de/griefed/serverpackcreator/FilesSetupTest.java
@@ -5,7 +5,6 @@ import org.apache.logging.log4j.Logger;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
-import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
@@ -23,13 +22,13 @@ class FilesSetupTest {
     Logger appLogger;
 
     private FilesSetup filesSetup;
-    private ConfigCheck configCheck;
+    private Configuration configCheck;
     private LocalizationManager localizationManager;
 
     FilesSetupTest() {
         localizationManager = new LocalizationManager();
         filesSetup = new FilesSetup(localizationManager);
-        configCheck = new ConfigCheck(localizationManager);
+        configCheck = new Configuration(localizationManager);
     }
 
     @BeforeEach
-- 
GitLab


From 02afe0923fff907094883184a89415e010f67a36 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Thu, 29 Apr 2021 12:54:22 +0200
Subject: [PATCH 08/91] refactor(DI): Update run configurations for local runs
 (not for public consumption, you would need to reconfigure this)

---
 .runConfigurations/Main.run.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.runConfigurations/Main.run.xml b/.runConfigurations/Main.run.xml
index ce268a8f0..e510cb0b6 100644
--- a/.runConfigurations/Main.run.xml
+++ b/.runConfigurations/Main.run.xml
@@ -1,6 +1,6 @@
 <component name="ProjectRunConfigurationManager">
   <configuration default="false" name="Main" type="Application" factoryName="Application" nameIsGenerated="true">
-    <option name="ALTERNATIVE_JRE_PATH" value="1.8" />
+    <option name="ALTERNATIVE_JRE_PATH" value="1.8 (2)" />
     <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="true" />
     <option name="MAIN_CLASS_NAME" value="de.griefed.serverpackcreator.Main" />
     <module name="serverpackcreator.main" />
-- 
GitLab


From d8c5eeea754ffdbde8bc2a3a79e4fbfbf8b17b36 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Thu, 29 Apr 2021 13:01:58 +0200
Subject: [PATCH 09/91] refactor(DI): Fix initialization of LocalizationManager
 in regards to GUI. Rename injectedConfigCheck to injectedConfiguration

---
 .../java/de/griefed/serverpackcreator/CreateServerPack.java | 6 +++---
 src/main/java/de/griefed/serverpackcreator/Main.java        | 3 ++-
 .../java/de/griefed/serverpackcreator/gui/CreateGui.java    | 6 +++---
 .../griefed/serverpackcreator/gui/CreateServerPackTab.java  | 6 +++---
 4 files changed, 11 insertions(+), 10 deletions(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java b/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
index c971ae536..2f49c7abd 100644
--- a/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
+++ b/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
@@ -44,18 +44,18 @@ public class CreateServerPack {
     private final File fabricLinuxFile   = new File("start-fabric.sh");
 
 
-    public CreateServerPack(LocalizationManager injectedLocalizationManager, Configuration injectedConfigCheck) {
+    public CreateServerPack(LocalizationManager injectedLocalizationManager, Configuration injectedConfiguration) {
         if (injectedLocalizationManager == null) {
             this.localizationManager = new LocalizationManager();
         }
 
         this.localizationManager = injectedLocalizationManager;
 
-        if (injectedConfigCheck == null) {
+        if (injectedConfiguration == null) {
             this.configuration = new Configuration(localizationManager);
         }
 
-        this.configuration = injectedConfigCheck;
+        this.configuration = injectedConfiguration;
     }
 
     public File getPropertiesFile() {
diff --git a/src/main/java/de/griefed/serverpackcreator/Main.java b/src/main/java/de/griefed/serverpackcreator/Main.java
index 747ac0390..23e70c075 100644
--- a/src/main/java/de/griefed/serverpackcreator/Main.java
+++ b/src/main/java/de/griefed/serverpackcreator/Main.java
@@ -24,7 +24,7 @@ public class Main {
         Configuration configuration = new Configuration(localizationManager);
         FilesSetup filesSetup = new FilesSetup(localizationManager);
         CreateServerPack createServerPack = new CreateServerPack(localizationManager, configuration);
-        CreateGui tabbedPane = new CreateGui(localizationManager, configuration);
+
 
         List<String> programArgs = Arrays.asList(args);
 
@@ -114,6 +114,7 @@ public class Main {
 
         } else {
 
+            CreateGui tabbedPane = new CreateGui(localizationManager, configuration);
             tabbedPane.mainGUI();
 
         }
diff --git a/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java b/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java
index cdd6becb6..8eddcafab 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java
@@ -24,7 +24,7 @@ public class CreateGui extends JPanel {
     private LocalizationManager localizationManager;
     private Configuration configuration;
 
-    public CreateGui(LocalizationManager injectedLocalizationManager, Configuration injectedConfigCheck) {
+    public CreateGui(LocalizationManager injectedLocalizationManager, Configuration injectedConfiguration) {
         super(new GridLayout(1, 1));
 
         if (injectedLocalizationManager == null) {
@@ -33,10 +33,10 @@ public class CreateGui extends JPanel {
             this.localizationManager = injectedLocalizationManager;
         }
 
-        if (injectedConfigCheck == null) {
+        if (injectedConfiguration == null) {
             this.configuration = new Configuration(localizationManager);
         } else {
-            this.configuration = injectedConfigCheck;
+            this.configuration = injectedConfiguration;
         }
 
         JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
diff --git a/src/main/java/de/griefed/serverpackcreator/gui/CreateServerPackTab.java b/src/main/java/de/griefed/serverpackcreator/gui/CreateServerPackTab.java
index 9733d6374..79a36e5a7 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/CreateServerPackTab.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/CreateServerPackTab.java
@@ -37,17 +37,17 @@ public class CreateServerPackTab extends Component {
     private Configuration configuration;
     private LocalizationManager localizationManager;
 
-    public CreateServerPackTab(LocalizationManager injectedLocalizationManager, Configuration injectedConfigCheck) {
+    public CreateServerPackTab(LocalizationManager injectedLocalizationManager, Configuration injectedConfiguration) {
         if (injectedLocalizationManager == null) {
             this.localizationManager = new LocalizationManager();
         } else {
             this.localizationManager = injectedLocalizationManager;
         }
 
-        if (injectedConfigCheck == null) {
+        if (injectedConfiguration == null) {
             this.configuration = new Configuration(localizationManager);
         } else {
-            this.configuration = injectedConfigCheck;
+            this.configuration = injectedConfiguration;
         }
 
     }
-- 
GitLab


From fffe21631ab0d328894c2bc8e1c717af3eadd4bc Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Thu, 29 Apr 2021 13:14:14 +0200
Subject: [PATCH 10/91] refactor(DI): Set up constructors properly

---
 .../de/griefed/serverpackcreator/CreateServerPack.java    | 8 ++++----
 .../java/de/griefed/serverpackcreator/FilesSetup.java     | 3 ++-
 2 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java b/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
index 2f49c7abd..17fe114df 100644
--- a/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
+++ b/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
@@ -47,15 +47,15 @@ public class CreateServerPack {
     public CreateServerPack(LocalizationManager injectedLocalizationManager, Configuration injectedConfiguration) {
         if (injectedLocalizationManager == null) {
             this.localizationManager = new LocalizationManager();
+        } else {
+            this.localizationManager = injectedLocalizationManager;
         }
 
-        this.localizationManager = injectedLocalizationManager;
-
         if (injectedConfiguration == null) {
             this.configuration = new Configuration(localizationManager);
+        } else {
+            this.configuration = injectedConfiguration;
         }
-
-        this.configuration = injectedConfiguration;
     }
 
     public File getPropertiesFile() {
diff --git a/src/main/java/de/griefed/serverpackcreator/FilesSetup.java b/src/main/java/de/griefed/serverpackcreator/FilesSetup.java
index 69b511d5f..24212bf44 100644
--- a/src/main/java/de/griefed/serverpackcreator/FilesSetup.java
+++ b/src/main/java/de/griefed/serverpackcreator/FilesSetup.java
@@ -25,8 +25,9 @@ public class FilesSetup {
     public FilesSetup(LocalizationManager injectedLocalizationManager) {
         if (injectedLocalizationManager == null) {
             this.localizationManager = new LocalizationManager();
+        } else {
+            this.localizationManager = injectedLocalizationManager;
         }
-        this.localizationManager = injectedLocalizationManager;
     }
 
     public File getConfigFile() {
-- 
GitLab


From 020a492d81a18f92b91dbff24fafcc13233a2f8e Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Thu, 29 Apr 2021 13:29:00 +0200
Subject: [PATCH 11/91] refactor(DI): Set up constructors properly

---
 src/main/java/de/griefed/serverpackcreator/Configuration.java | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/Configuration.java b/src/main/java/de/griefed/serverpackcreator/Configuration.java
index cd3e08d54..7a1e1b71e 100644
--- a/src/main/java/de/griefed/serverpackcreator/Configuration.java
+++ b/src/main/java/de/griefed/serverpackcreator/Configuration.java
@@ -38,8 +38,9 @@ public class Configuration {
     public Configuration(LocalizationManager injectedLocalizationManager) {
         if (injectedLocalizationManager == null) {
             this.localizationManager = new LocalizationManager();
+        } else {
+            this.localizationManager = injectedLocalizationManager;
         }
-        this.localizationManager = injectedLocalizationManager;
     }
 
     //-- If you wish to expand this list, fork this repository, make your changes, and submit a PR -------------------------
-- 
GitLab


From 1580465b4322bae57fe1be994d3039be0e59ed22 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Thu, 29 Apr 2021 14:19:33 +0200
Subject: [PATCH 12/91] =?UTF-8?q?refactor(DI):=20Don't=20run=20on=20GitHub?=
 =?UTF-8?q?....because=20waihfvpo=C3=B6ihdrsgeds?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../serverpackcreator/gui/CreateServerPackTab.java    |  8 +-------
 .../serverpackcreator/CreateServerPackTest.java       | 11 +++++++----
 2 files changed, 8 insertions(+), 11 deletions(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/gui/CreateServerPackTab.java b/src/main/java/de/griefed/serverpackcreator/gui/CreateServerPackTab.java
index 79a36e5a7..9aa89671c 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/CreateServerPackTab.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/CreateServerPackTab.java
@@ -638,8 +638,6 @@ public class CreateServerPackTab extends Component {
                 File configFile = new File("serverpackcreator.conf");
                 Config config = ConfigFactory.parseFile(configFile);
 
-                appLogger.info(String.format(localizationManager.getLocalizedString("createserverpack.log.info.buttonloadconfigfromfile"), configFile));
-
                 textModpackDir.setText(config.getString("modpackDir"));
 
                 textClientMods.setText(configuration.buildString(config.getStringList("clientMods").toString()));
@@ -663,12 +661,8 @@ public class CreateServerPackTab extends Component {
                 checkBoxScripts.setSelected(configuration.convertToBoolean(config.getString("includeStartScripts")));
 
                 checkBoxZIP.setSelected(configuration.convertToBoolean(config.getString("includeZipCreation")));
-
-                appLogger.info(localizationManager.getLocalizedString("createserverpack.log.info.buttonloadconfigfromfile.finish"));
             }
-        } catch (NullPointerException ignored) {
-
-        }
+        } catch (NullPointerException ignored) {}
 
         return createServerPackPanel;
     }
diff --git a/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java b/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
index 898465b6a..9e5885b9c 100644
--- a/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
+++ b/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
@@ -48,10 +48,13 @@ class CreateServerPackTest {
 
     @Test
     void testCleanupEnvironment() throws IOException {
-        String modpackDir = "./src/test/resources/cleanup_tests";
-        Files.copy(Paths.get("./src/test/resources/testresources/server_pack.zip"), Paths.get("./src/test/resources/cleanup_tests/server_pack.zip"), REPLACE_EXISTING);
-        Files.createDirectories(Paths.get(String.format("%s/server_pack",modpackDir)));
-        createServerPack.cleanupEnvironment(modpackDir);
+        //TODO: Figure out how to run this test on GitHub Runners
+        if (!new File("/home/runner").isDirectory()) {
+            String modpackDir = "./src/test/resources/cleanup_tests";
+            Files.copy(Paths.get("./src/test/resources/testresources/server_pack.zip"), Paths.get("./src/test/resources/cleanup_tests/server_pack.zip"), REPLACE_EXISTING);
+            Files.createDirectories(Paths.get(String.format("%s/server_pack", modpackDir)));
+            createServerPack.cleanupEnvironment(modpackDir);
+        }
     }
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
-- 
GitLab


From f3d95f080ed955558ac60448fa038e234932d4bd Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Thu, 29 Apr 2021 14:20:24 +0200
Subject: [PATCH 13/91] refactor(DI): Prioritize LocalizationManager during
 setup

---
 .../de/griefed/serverpackcreator/Main.java    | 28 +++++++++----------
 1 file changed, 13 insertions(+), 15 deletions(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/Main.java b/src/main/java/de/griefed/serverpackcreator/Main.java
index 23e70c075..e5681cef5 100644
--- a/src/main/java/de/griefed/serverpackcreator/Main.java
+++ b/src/main/java/de/griefed/serverpackcreator/Main.java
@@ -20,21 +20,9 @@ public class Main {
      * @param args Commandline arguments with which ServerPackCreator is run. Passed to Handler-class which then decides what to do corresponding to input.
      */
     public static void main(String[] args) {
-        LocalizationManager localizationManager = new LocalizationManager();
-        Configuration configuration = new Configuration(localizationManager);
-        FilesSetup filesSetup = new FilesSetup(localizationManager);
-        CreateServerPack createServerPack = new CreateServerPack(localizationManager, configuration);
-
-
         List<String> programArgs = Arrays.asList(args);
 
-        String jarPath = null,
-                jarName = null,
-                javaVersion = null,
-                osArch = null,
-                osName = null,
-                osVersion = null;
-
+        LocalizationManager localizationManager = new LocalizationManager();
         if (Arrays.asList(args).contains("-lang")) {
             try {
                 localizationManager.init(programArgs.get(programArgs.indexOf("-lang") + 1));
@@ -47,6 +35,18 @@ public class Main {
             localizationManager.checkLocaleFile();
         }
 
+        Configuration configuration = new Configuration(localizationManager);
+        FilesSetup filesSetup = new FilesSetup(localizationManager);
+        CreateServerPack createServerPack = new CreateServerPack(localizationManager, configuration);
+        CreateGui tabbedPane = new CreateGui(localizationManager, configuration);
+
+        String jarPath = null,
+                jarName = null,
+                javaVersion = null,
+                osArch = null,
+                osName = null,
+                osVersion = null;
+
         appLogger.warn(localizationManager.getLocalizedString("handler.log.warn.wip0"));
         appLogger.warn(localizationManager.getLocalizedString("handler.log.warn.wip1"));
         appLogger.warn(localizationManager.getLocalizedString("handler.log.warn.wip2"));
@@ -76,7 +76,6 @@ public class Main {
 
         filesSetup.filesSetup();
 
-
         if (Arrays.asList(args).contains("-cgen")) {
 
             configuration.createConfigurationFile();
@@ -114,7 +113,6 @@ public class Main {
 
         } else {
 
-            CreateGui tabbedPane = new CreateGui(localizationManager, configuration);
             tabbedPane.mainGUI();
 
         }
-- 
GitLab


From 766c776fcd1ce7a0eb2bc3380fc460b46e6497d5 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Thu, 29 Apr 2021 14:57:43 +0200
Subject: [PATCH 14/91] refactor(DI): CurseCreateModpack injection

---
 .../serverpackcreator/Configuration.java      | 158 ++++++++++++++++--
 .../serverpackcreator/CreateServerPack.java   |  12 +-
 .../de/griefed/serverpackcreator/Main.java    |   8 +-
 .../serverpackcreator/gui/CreateGui.java      |  16 +-
 .../gui/CreateServerPackTab.java              |  14 +-
 .../serverpackcreator/ConfigCheckTest.java    |   5 +-
 .../CreateServerPackTest.java                 |   7 +-
 .../serverpackcreator/FilesSetupTest.java     |   5 +-
 8 files changed, 199 insertions(+), 26 deletions(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/Configuration.java b/src/main/java/de/griefed/serverpackcreator/Configuration.java
index 7a1e1b71e..f30962f0f 100644
--- a/src/main/java/de/griefed/serverpackcreator/Configuration.java
+++ b/src/main/java/de/griefed/serverpackcreator/Configuration.java
@@ -34,13 +34,20 @@ public class Configuration {
     private final File oldConfigFile = new File("creator.conf");
     private final File configFile = new File("serverpackcreator.conf");
     private LocalizationManager localizationManager;
+    private CurseCreateModpack curseCreateModpack;
 
-    public Configuration(LocalizationManager injectedLocalizationManager) {
+    public Configuration(LocalizationManager injectedLocalizationManager, CurseCreateModpack injectedCurseCreateModpack) {
         if (injectedLocalizationManager == null) {
             this.localizationManager = new LocalizationManager();
         } else {
             this.localizationManager = injectedLocalizationManager;
         }
+
+        if (injectedCurseCreateModpack == null) {
+            this.curseCreateModpack = new CurseCreateModpack(localizationManager);
+        } else {
+            this.curseCreateModpack = injectedCurseCreateModpack;
+        }
     }
 
     //-- If you wish to expand this list, fork this repository, make your changes, and submit a PR -------------------------
@@ -343,8 +350,6 @@ public class Configuration {
 
                 setModpackDir(String.format("./%s/%s", projectName, displayName));
 
-                CurseCreateModpack curseCreateModpack = new CurseCreateModpack(localizationManager);
-
                 if (curseCreateModpack.curseForgeModpack(getModpackDir(), getProjectID(), getProjectFileID())) {
                     try {
                         byte[] jsonData = Files.readAllBytes(Paths.get(String.format("%s/manifest.json", getModpackDir())));
@@ -357,6 +362,7 @@ public class Configuration {
                                 .getMinecraft()
                                 .toString()
                                 .split(",");
+
                         String[] modLoaderVersion = minecraftLoaderVersions[1]
                                 .replace("[", "")
                                 .replace("]", "")
@@ -366,24 +372,34 @@ public class Configuration {
 
                         if (containsFabric(modpack)) {
                             appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.iscurse.fabric"));
+
                             setModLoader("Fabric");
                             setModLoaderVersion(latestFabricLoader(getModpackDir()));
+
                         } else {
+
                             setModLoader(setModloader(modLoaderVersion[0]));
                             setModLoaderVersion(modLoaderVersion[1]);
+
                         }
                     } catch (IOException ex) { appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.iscurse.json"), ex); }
 
                     if (checkJavaPath(getConfig().getString("javaPath").replace("\\","/"))) {
+
                         setJavaPath(getConfig().getString("javaPath").replace("\\","/"));
+
                     } else {
                         String tmpJavaPath = getJavaPath(getConfig().getString("javaPath").replace("\\","/"));
+
                         if (checkJavaPath(tmpJavaPath)) {
                             setJavaPath(tmpJavaPath);
                         }
+
                     }
                     setCopyDirs(suggestCopyDirs(getModpackDir()));
+
                     appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.iscurse.replace"));
+
                     writeConfigToFile(
                             getModpackDir(),
                             buildString(getClientMods().toString()),
@@ -411,9 +427,11 @@ public class Configuration {
      */
     private boolean containsFabric(CurseModpack modpack) {
         boolean hasJumploader = false;
+
         for (int i = 0; i < modpack.getFiles().size(); i++) {
-            String[] mods;
-            mods = modpack.getFiles().get(i).toString().split(",");
+
+            String[] mods = modpack.getFiles().get(i).toString().split(",");
+
             if (mods[0].equalsIgnoreCase("361988") || mods[0].equalsIgnoreCase("306612")) {
                 appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.containsfabric"));
                 hasJumploader = true;
@@ -434,6 +452,7 @@ public class Configuration {
                 "packmenu",
                 "resourcepacks"
         };
+
         String[] copyDirs = new String[0];
         List<String> dirList;
         File directories = new File(modpackDir);
@@ -441,12 +460,16 @@ public class Configuration {
         String[] dirArray = directories.list((current, name) -> new File(current, name).isDirectory());
 
         if (dirArray != null) {
+
             dirList = new ArrayList<>(Arrays.asList(dirArray));
             List<String> doNotCopyList = new ArrayList<>(Arrays.asList(dirsNotToCopy));
+
             for (int i = 0; i < dirsNotToCopy.length; i++) {
                 dirList.remove(doNotCopyList.get(i));
             }
+
             copyDirs = dirList.toArray(new String[0]);
+
             appLogger.info(String.format(localizationManager.getLocalizedString("configcheck.log.info.suggestcopydirs.list"), dirList));
 
             return Arrays.asList(copyDirs.clone());
@@ -465,8 +488,11 @@ public class Configuration {
         boolean configCorrect = false;
 
         if (modpackDir.matches("[0-9]{2,},[0-9]{5,}")) {
+
             projectFileIds = modpackDir.split(",");
+
             setProjectID(Integer.parseInt(projectFileIds[0]));
+
             setProjectFileID(Integer.parseInt(projectFileIds[1]));
 
             appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.checkcurseforge.info"));
@@ -486,22 +512,26 @@ public class Configuration {
      */
     public boolean convertToBoolean(String stringBoolean) {
         boolean returnBoolean;
+
         if (stringBoolean.matches("[Tt]rue") ||
                 stringBoolean.matches("1")       ||
                 stringBoolean.matches("[Yy]es")  ||
                 stringBoolean.matches("[Yy]"))    {
 
             returnBoolean = true;
+
         } else if (stringBoolean.matches("[Ff]alse") ||
                 stringBoolean.matches("0")        ||
                 stringBoolean.matches("[Nn]o")    ||
                 stringBoolean.matches("[Nn]" ))    {
 
             returnBoolean = false;
+
         } else {
             appLogger.warn(localizationManager.getLocalizedString("configcheck.log.warn.converttoboolean.warn"));
             returnBoolean = false;
         }
+
         return returnBoolean;
     }
 
@@ -531,21 +561,30 @@ public class Configuration {
                      boolean includeProperties,
                      boolean includeScripts,
                      boolean includeZip) {
+
         appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.printconfig.start"));
         appLogger.info(String.format(localizationManager.getLocalizedString("configcheck.log.info.printconfig.modpackdir"), modpackDirectory));
+
         if (clientsideMods.size() == 0) {
             appLogger.warn(localizationManager.getLocalizedString("configcheck.log.warn.printconfig.noclientmods"));
         } else {
+
             appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.printconfig.clientmods"));
             for (int i = 0; i < clientsideMods.size(); i++) {
                 appLogger.info(String.format("    %s", clientsideMods.get(i))); }
+
         }
 
         appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.printconfig.copydirs"));
+
         if (copyDirectories != null) {
+
             for (int i = 0; i < copyDirectories.size(); i++) {
                 appLogger.info(String.format("    %s", copyDirectories.get(i))); }
-        } else { appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.printconfig.copydirs")); }
+
+        } else {
+            appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.printconfig.copydirs"));
+        }
 
         appLogger.info(String.format(localizationManager.getLocalizedString("configcheck.log.info.printconfig.server"), installServer));
         appLogger.info(String.format(localizationManager.getLocalizedString("configcheck.log.info.printconfig.javapath"), javaInstallPath));
@@ -564,12 +603,19 @@ public class Configuration {
      */
     boolean checkModpackDir(String modpackDir) {
         boolean configCorrect = false;
+
         if (modpackDir.equals("")) {
+
             appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.checkmodpackdir"));
+
         } else if (!(new File(modpackDir).isDirectory())) {
+
             appLogger.warn(String.format(localizationManager.getLocalizedString("configcheck.log.warn.checkmodpackdir"), modpackDir));
+
         } else {
+
             configCorrect = true;
+
         }
         return configCorrect;
     }
@@ -581,13 +627,20 @@ public class Configuration {
      */
     boolean checkCopyDirs(List<String> copyDirs, String modpackDir) {
         boolean configCorrect = true;
+
         if (copyDirs.isEmpty()) {
+
             appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.checkcopydirs.empty"));
             configCorrect = false;
+
         } else {
+
             for (int i = 0; i < copyDirs.size(); i++) {
+
                 File directory = new File(String.format("%s/%s", modpackDir, copyDirs.get(i)));
+
                 if (!directory.exists() || !directory.isDirectory()) {
+
                     appLogger.error(String.format(localizationManager.getLocalizedString("configcheck.log.error.checkcopydirs.notfound"), directory.getAbsolutePath()));
                     configCorrect = false;
                 }
@@ -602,15 +655,22 @@ public class Configuration {
      */
     String getJavaPath(String enteredPath) {
         String autoJavaPath;
+
         if (enteredPath.equals("")) {
+
             appLogger.warn(localizationManager.getLocalizedString("configcheck.log.warn.getjavapath.empty"));
             autoJavaPath = String.format("%s/bin/java",System.getProperty("java.home").replace("\\", "/"));
+
             if (autoJavaPath.startsWith("C:")) {
+
                 autoJavaPath = String.format("%s.exe", autoJavaPath);
             }
+
             appLogger.warn(String.format(localizationManager.getLocalizedString("configcheck.log.warn.getjavapath.set"), autoJavaPath));
             return autoJavaPath;
+
         } else {
+
             appLogger.info(String.format(localizationManager.getLocalizedString("configcheck.log.warn.getjavapath.set"), enteredPath));
             return enteredPath;
         }
@@ -622,10 +682,15 @@ public class Configuration {
      */
     boolean checkJavaPath(String pathToJava) {
         boolean configCorrect = false;
+
         if (new File(pathToJava).exists() && pathToJava.endsWith("java.exe")) {
+
             configCorrect = true;
+
         } else if (new File(pathToJava).exists() && pathToJava.endsWith("java")) {
+
             configCorrect = true;
+
         } else {
             appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.checkjavapath"));
         }
@@ -638,9 +703,13 @@ public class Configuration {
      */
     boolean checkModloader(String modloader) {
         boolean configCorrect = false;
+
         if (modloader.equalsIgnoreCase("Forge") || modloader.equalsIgnoreCase("Fabric")) {
+
             configCorrect = true;
+
         } else {
+
             appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.checkmodloader"));
         }
         return configCorrect;
@@ -652,9 +721,13 @@ public class Configuration {
      */
     String setModloader(String modloader) {
         String returnLoader = null;
+
         if (modloader.equalsIgnoreCase("Forge")) {
+
             returnLoader = "Forge";
+
         } else if (modloader.equalsIgnoreCase("Fabric")) {
+
             returnLoader = "Fabric";
         }
         return returnLoader;
@@ -667,10 +740,15 @@ public class Configuration {
      */
     boolean checkModloaderVersion(String modloader, String modloaderVersion) {
         boolean isVersionCorrect = false;
+
         if (modloader.equalsIgnoreCase("Forge") && isForgeVersionCorrect(modloaderVersion)) {
+
             isVersionCorrect = true;
+
         } else if (modloader.equalsIgnoreCase("Fabric") && isFabricVersionCorrect(modloaderVersion)) {
+
             isVersionCorrect = true;
+
         } else {
             appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.checkmodloaderversion"));
         }
@@ -691,36 +769,50 @@ public class Configuration {
                 try {
                     downloadManifestOutputStream = new FileOutputStream("mcmanifest.json");
                 } catch (FileNotFoundException ex) {
+
                     appLogger.debug(localizationManager.getLocalizedString("configcheck.log.debug.isminecraftversioncorrect"), ex);
+
                     File file = new File("mcmanifest.json");
+
                     if (!file.exists()) {
+
                         appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.isminecraftversioncorrect.create"));
                         boolean jsonCreated = file.createNewFile();
+
                         if (jsonCreated) {
+
                             appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.isminecraftversioncorrect.created"));
+
                         } else {
+
                             appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.isminecraftversioncorrect.parse"));
                         }
                     }
                     downloadManifestOutputStream = new FileOutputStream("mcmanifest.json");
                 }
                 FileChannel downloadManifestOutputStreamChannel = downloadManifestOutputStream.getChannel();
+
                 downloadManifestOutputStream.getChannel().transferFrom(readableByteChannel, 0, Long.MAX_VALUE);
                 downloadManifestOutputStream.flush();
                 downloadManifestOutputStream.close();
+
                 readableByteChannel.close();
                 downloadManifestOutputStreamChannel.close();
 
                 File manifestJsonFile = new File("mcmanifest.json");
                 Scanner jsonReader = new Scanner(manifestJsonFile);
+
                 String jsonData = jsonReader.nextLine();
                 jsonReader.close();
+
                 jsonData = jsonData.replaceAll("\\s", "");
 
                 boolean contains = jsonData.trim().contains(String.format("\"id\":\"%s\"", minecraftVersion));
                 manifestJsonFile.deleteOnExit();
+
                 return contains;
             } catch (Exception ex) {
+
                 appLogger.error(String.format(localizationManager.getLocalizedString("configcheck.log.error.isminecraftversioncorrect.validate"), minecraftVersion), ex);
                 return false;
             }
@@ -737,19 +829,27 @@ public class Configuration {
     boolean isFabricVersionCorrect(String fabricVersion) {
         try {
             URL manifestJsonURL = new URL(getFabricManifestUrl());
+
             ReadableByteChannel readableByteChannel = Channels.newChannel(manifestJsonURL.openStream());
+
             FileOutputStream downloadManifestOutputStream;
 
             try {
                 downloadManifestOutputStream = new FileOutputStream("fabric-manifest.xml");
             } catch (FileNotFoundException ex) {
+
                 appLogger.debug(localizationManager.getLocalizedString("configcheck.log.debug.isfabricversioncorrect"), ex);
                 File file = new File("fabric-manifest.xml");
+
                 if (!file.exists()){
+
                     appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.isfabricversioncorrect.create"));
                     boolean jsonCreated = file.createNewFile();
+
                     if (jsonCreated) {
+
                         appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.isfabricversioncorrect.created"));
+
                     } else {
                         appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.isfabricversioncorrect.parse"));
                     }
@@ -757,29 +857,42 @@ public class Configuration {
                 downloadManifestOutputStream = new FileOutputStream("fabric-manifest.xml");
             }
             FileChannel downloadManifestOutputStreamChannel = downloadManifestOutputStream.getChannel();
+
             downloadManifestOutputStream.getChannel().transferFrom(readableByteChannel, 0, Long.MAX_VALUE);
             downloadManifestOutputStream.flush();
             downloadManifestOutputStream.close();
+
             readableByteChannel.close();
             downloadManifestOutputStreamChannel.close();
 
             File manifestXMLFile = new File("fabric-manifest.xml");
             Scanner xmlReader = new Scanner(manifestXMLFile);
+
             ArrayList<String> dataList = new ArrayList<>();
+
             while (xmlReader.hasNextLine()) {
                 dataList.add(xmlReader.nextLine());
             }
+
             String[] dataArray = new String[dataList.size()];
+
             String manifestXML;
+
             dataList.toArray(dataArray);
+
             manifestXML = Arrays.toString(dataArray);
+
             xmlReader.close();
+
             manifestXML = manifestXML.replaceAll("\\s", "");
 
             boolean contains = manifestXML.trim().contains(String.format("%s", fabricVersion));
+
             manifestXMLFile.deleteOnExit();
+
             return contains;
         } catch (Exception ex) {
+
             appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.isfabricversioncorrect.validate"), ex);
             return false;
         }
@@ -796,44 +909,67 @@ public class Configuration {
             FileOutputStream downloadManifestOutputStream;
 
             try {
+
                 downloadManifestOutputStream = new FileOutputStream("forge-manifest.json");
+
             } catch (FileNotFoundException ex) {
+
                 appLogger.debug(localizationManager.getLocalizedString("configcheck.log.debug.isforgeversioncorrect"), ex);
                 File file = new File("forge-manifest.json");
+
                 if (!file.exists()){
+
                     appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.isforgeversioncorrect.create"));
+
                     boolean jsonCreated = file.createNewFile();
+
                     if (jsonCreated) {
+
                         appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.isforgeversioncorrect.created"));
                     } else {
+
                         appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.isforgeversioncorrect.parse"));
                     }
                 }
                 downloadManifestOutputStream = new FileOutputStream("forge-manifest.json");
             }
             FileChannel downloadManifestOutputStreamChannel = downloadManifestOutputStream.getChannel();
+
             downloadManifestOutputStream.getChannel().transferFrom(readableByteChannel, 0, Long.MAX_VALUE);
             downloadManifestOutputStream.flush();
             downloadManifestOutputStream.close();
+
             readableByteChannel.close();
             downloadManifestOutputStreamChannel.close();
 
             File manifestJsonFile = new File("forge-manifest.json");
+
             manifestJsonFile.deleteOnExit();
+
             Scanner jsonReader = new Scanner(manifestJsonFile);
+
             ArrayList<String> dataList = new ArrayList<>();
+
             while (jsonReader.hasNextLine()) {
                 dataList.add(jsonReader.nextLine());
             }
+
             String[] dataArray = new String[dataList.size()];
+
             String manifestJSON;
+
             dataList.toArray(dataArray);
+
             manifestJSON = Arrays.toString(dataArray);
+
             jsonReader.close();
+
             manifestJSON = manifestJSON.replaceAll("\\s", "");
 
             return manifestJSON.trim().contains(String.format("%s", forgeVersion));
+
         } catch (Exception ex) {
+
             appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.isforgeversioncorrect.validate"), ex);
             return false;
         }
@@ -878,19 +1014,19 @@ public class Configuration {
      * Generate new configuration file from CLI input. Prompts user to enter config file values and then generates a config file with values entered by user.
      */
     void createConfigurationFile() {
-        List<String> clientMods,
-                copyDirs;
+        List<String> clientMods, copyDirs;
 
         clientMods = new ArrayList<>(0);
         copyDirs = new ArrayList<>(0);
 
-        String[] tmpClientMods,
-                tmpCopyDirs;
+        String[] tmpClientMods, tmpCopyDirs;
+
         boolean includeServerInstallation,
                 includeServerIcon,
                 includeServerProperties,
                 includeStartScripts,
                 includeZipCreation;
+
         String modpackDir,
                 javaPath,
                 minecraftVersion,
@@ -899,6 +1035,7 @@ public class Configuration {
                 tmpModpackDir;
 
         Scanner reader = new Scanner(System.in);
+
         appLogger.info(String.format(localizationManager.getLocalizedString("clisetup.log.info.start"), "-cgen"));
         do {
 //--------------------------------------------------------------------------------------------MODPACK DIRECTORY---------
@@ -1151,6 +1288,7 @@ public class Configuration {
 
         boolean configWritten = false;
 
+        //Griefed: What the fuck. This reads like someone having a stroke. What have I created here?
         String configString = String.format(
                 "%s\"%s\"\n\n%s[%s]\n\n%s[%s]\n\n%s%b\n\n%s\"%s\"\n\n%s\"%s\"\n\n%s\"%s\"\n\n%s\"%s\"\n\n%s%b\n\n%s%b\n\n%s%b\n\n%s%b",
                 localizationManager.getLocalizedString("filessetup.writeconfigtofile.modpackdir"),
diff --git a/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java b/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
index 17fe114df..4fcd2c4e3 100644
--- a/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
+++ b/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
@@ -1,5 +1,6 @@
 package de.griefed.serverpackcreator;
 
+import de.griefed.serverpackcreator.curseforgemodpack.CurseCreateModpack;
 import de.griefed.serverpackcreator.i18n.LocalizationManager;
 import net.fabricmc.installer.util.LauncherMeta;
 import org.apache.logging.log4j.LogManager;
@@ -35,6 +36,7 @@ public class CreateServerPack {
     private static final Logger installerLogger = LogManager.getLogger("InstallerLogger");
 
     private Configuration configuration;
+    private CurseCreateModpack curseCreateModpack;
     private LocalizationManager localizationManager;
     private final File propertiesFile    = new File("server.properties");
     private final File iconFile          = new File("server-icon.png");
@@ -44,15 +46,21 @@ public class CreateServerPack {
     private final File fabricLinuxFile   = new File("start-fabric.sh");
 
 
-    public CreateServerPack(LocalizationManager injectedLocalizationManager, Configuration injectedConfiguration) {
+    public CreateServerPack(LocalizationManager injectedLocalizationManager, Configuration injectedConfiguration, CurseCreateModpack injectedCurseCreateModpack) {
         if (injectedLocalizationManager == null) {
             this.localizationManager = new LocalizationManager();
         } else {
             this.localizationManager = injectedLocalizationManager;
         }
 
+        if (injectedCurseCreateModpack == null) {
+            this.curseCreateModpack = new CurseCreateModpack(localizationManager);
+        } else {
+            this.curseCreateModpack = injectedCurseCreateModpack;
+        }
+
         if (injectedConfiguration == null) {
-            this.configuration = new Configuration(localizationManager);
+            this.configuration = new Configuration(localizationManager, curseCreateModpack);
         } else {
             this.configuration = injectedConfiguration;
         }
diff --git a/src/main/java/de/griefed/serverpackcreator/Main.java b/src/main/java/de/griefed/serverpackcreator/Main.java
index e5681cef5..91d94e184 100644
--- a/src/main/java/de/griefed/serverpackcreator/Main.java
+++ b/src/main/java/de/griefed/serverpackcreator/Main.java
@@ -1,5 +1,6 @@
 package de.griefed.serverpackcreator;
 
+import de.griefed.serverpackcreator.curseforgemodpack.CurseCreateModpack;
 import de.griefed.serverpackcreator.gui.CreateGui;
 import de.griefed.serverpackcreator.i18n.IncorrectLanguageException;
 import de.griefed.serverpackcreator.i18n.LocalizationManager;
@@ -35,10 +36,11 @@ public class Main {
             localizationManager.checkLocaleFile();
         }
 
-        Configuration configuration = new Configuration(localizationManager);
+        CurseCreateModpack curseCreateModpack = new CurseCreateModpack(localizationManager);
+        Configuration configuration = new Configuration(localizationManager, curseCreateModpack);
         FilesSetup filesSetup = new FilesSetup(localizationManager);
-        CreateServerPack createServerPack = new CreateServerPack(localizationManager, configuration);
-        CreateGui tabbedPane = new CreateGui(localizationManager, configuration);
+        CreateServerPack createServerPack = new CreateServerPack(localizationManager, configuration, curseCreateModpack);
+        CreateGui tabbedPane = new CreateGui(localizationManager, configuration, curseCreateModpack);
 
         String jarPath = null,
                 jarName = null,
diff --git a/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java b/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java
index 8eddcafab..1fc555ad5 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java
@@ -4,6 +4,7 @@ import com.typesafe.config.Config;
 import com.typesafe.config.ConfigException;
 import com.typesafe.config.ConfigFactory;
 import de.griefed.serverpackcreator.Configuration;
+import de.griefed.serverpackcreator.curseforgemodpack.CurseCreateModpack;
 import de.griefed.serverpackcreator.i18n.LocalizationManager;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
@@ -23,8 +24,9 @@ public class CreateGui extends JPanel {
 
     private LocalizationManager localizationManager;
     private Configuration configuration;
+    private CurseCreateModpack curseCreateModpack;
 
-    public CreateGui(LocalizationManager injectedLocalizationManager, Configuration injectedConfiguration) {
+    public CreateGui(LocalizationManager injectedLocalizationManager, Configuration injectedConfiguration, CurseCreateModpack injectectedCurseCreateModpack) {
         super(new GridLayout(1, 1));
 
         if (injectedLocalizationManager == null) {
@@ -34,14 +36,20 @@ public class CreateGui extends JPanel {
         }
 
         if (injectedConfiguration == null) {
-            this.configuration = new Configuration(localizationManager);
+            this.curseCreateModpack = new CurseCreateModpack(localizationManager);
+        } else {
+            this.curseCreateModpack = injectectedCurseCreateModpack;
+        }
+
+        if (injectedConfiguration == null) {
+            this.configuration = new Configuration(localizationManager, curseCreateModpack);
         } else {
             this.configuration = injectedConfiguration;
         }
 
         JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
 
-        tabbedPane.addTab(localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.createserverpack.title"), null, new CreateServerPackTab(localizationManager, configuration).createServerPackTab(), localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.createserverpack.tip"));
+        tabbedPane.addTab(localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.createserverpack.title"), null, new CreateServerPackTab(localizationManager, configuration, curseCreateModpack).createServerPackTab(), localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.createserverpack.tip"));
         tabbedPane.setMnemonicAt(0, KeyEvent.VK_1);
 
         tabbedPane.addTab(localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.serverpackcreatorlog.title"), null, new ServerPackCreatorLogTab(localizationManager).serverPackCreatorLogTab(), localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.serverpackcreatorlog.tip"));
@@ -110,7 +118,7 @@ public class CreateGui extends JPanel {
         banner.setOpaque(false);
 
         frame.add(banner, BorderLayout.PAGE_START);
-        frame.add(new CreateGui(localizationManager, configuration), BorderLayout.CENTER);
+        frame.add(new CreateGui(localizationManager, configuration, curseCreateModpack), BorderLayout.CENTER);
 
         frame.setPreferredSize(windowDimension);
         frame.setMaximumSize(windowDimension);
diff --git a/src/main/java/de/griefed/serverpackcreator/gui/CreateServerPackTab.java b/src/main/java/de/griefed/serverpackcreator/gui/CreateServerPackTab.java
index 9aa89671c..718c120c8 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/CreateServerPackTab.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/CreateServerPackTab.java
@@ -4,6 +4,7 @@ import com.typesafe.config.Config;
 import com.typesafe.config.ConfigFactory;
 import de.griefed.serverpackcreator.Configuration;
 import de.griefed.serverpackcreator.CreateServerPack;
+import de.griefed.serverpackcreator.curseforgemodpack.CurseCreateModpack;
 import de.griefed.serverpackcreator.i18n.LocalizationManager;
 import org.apache.commons.io.input.Tailer;
 import org.apache.commons.io.input.TailerListenerAdapter;
@@ -36,8 +37,9 @@ public class CreateServerPackTab extends Component {
 
     private Configuration configuration;
     private LocalizationManager localizationManager;
+    private CurseCreateModpack curseCreateModpack;
 
-    public CreateServerPackTab(LocalizationManager injectedLocalizationManager, Configuration injectedConfiguration) {
+    public CreateServerPackTab(LocalizationManager injectedLocalizationManager, Configuration injectedConfiguration, CurseCreateModpack injectectedCurseCreateModpack) {
         if (injectedLocalizationManager == null) {
             this.localizationManager = new LocalizationManager();
         } else {
@@ -45,7 +47,13 @@ public class CreateServerPackTab extends Component {
         }
 
         if (injectedConfiguration == null) {
-            this.configuration = new Configuration(localizationManager);
+            this.curseCreateModpack = new CurseCreateModpack(localizationManager);
+        } else {
+            this.curseCreateModpack = injectectedCurseCreateModpack;
+        }
+
+        if (injectedConfiguration == null) {
+            this.configuration = new Configuration(localizationManager, curseCreateModpack);
         } else {
             this.configuration = injectedConfiguration;
         }
@@ -565,7 +573,7 @@ public class CreateServerPackTab extends Component {
 
                 final ExecutorService executorService = Executors.newSingleThreadExecutor();
                 executorService.execute(() -> {
-                    CreateServerPack createServerPack = new CreateServerPack(localizationManager, configuration);
+                    CreateServerPack createServerPack = new CreateServerPack(localizationManager, configuration, curseCreateModpack);
                     if (createServerPack.run()) {
                         tailer.stop();
 
diff --git a/src/test/java/de/griefed/serverpackcreator/ConfigCheckTest.java b/src/test/java/de/griefed/serverpackcreator/ConfigCheckTest.java
index 6ba502407..117ed48ff 100644
--- a/src/test/java/de/griefed/serverpackcreator/ConfigCheckTest.java
+++ b/src/test/java/de/griefed/serverpackcreator/ConfigCheckTest.java
@@ -1,6 +1,7 @@
 package de.griefed.serverpackcreator;
 
 import com.typesafe.config.ConfigFactory;
+import de.griefed.serverpackcreator.curseforgemodpack.CurseCreateModpack;
 import de.griefed.serverpackcreator.i18n.LocalizationManager;
 import org.apache.logging.log4j.Logger;
 import org.junit.jupiter.api.Assertions;
@@ -23,11 +24,13 @@ class ConfigCheckTest {
     Logger appLogger;
 
     private Configuration configCheck;
+    private CurseCreateModpack curseCreateModpack;
     private LocalizationManager localizationManager;
 
     ConfigCheckTest() {
         localizationManager = new LocalizationManager();
-        configCheck = new Configuration(localizationManager);
+        curseCreateModpack = new CurseCreateModpack(localizationManager);
+        configCheck = new Configuration(localizationManager, curseCreateModpack);
     }
 
     @BeforeEach
diff --git a/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java b/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
index 9e5885b9c..7504e838b 100644
--- a/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
+++ b/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
@@ -1,5 +1,6 @@
 package de.griefed.serverpackcreator;
 
+import de.griefed.serverpackcreator.curseforgemodpack.CurseCreateModpack;
 import de.griefed.serverpackcreator.i18n.LocalizationManager;
 import org.apache.logging.log4j.Logger;
 import org.junit.jupiter.api.Assertions;
@@ -26,13 +27,15 @@ class CreateServerPackTest {
 
     private CreateServerPack createServerPack;
     private FilesSetup filesSetup;
+    private CurseCreateModpack curseCreateModpack;
     private LocalizationManager localizationManager;
     private Configuration configCheck;
 
     CreateServerPackTest() {
         localizationManager = new LocalizationManager();
-        configCheck = new Configuration(localizationManager);
-        createServerPack = new CreateServerPack(localizationManager, configCheck);
+        curseCreateModpack = new CurseCreateModpack(localizationManager);
+        configCheck = new Configuration(localizationManager, curseCreateModpack);
+        createServerPack = new CreateServerPack(localizationManager, configCheck, curseCreateModpack);
         filesSetup = new FilesSetup(localizationManager);
     }
 
diff --git a/src/test/java/de/griefed/serverpackcreator/FilesSetupTest.java b/src/test/java/de/griefed/serverpackcreator/FilesSetupTest.java
index 7ae65770c..cbccd265a 100644
--- a/src/test/java/de/griefed/serverpackcreator/FilesSetupTest.java
+++ b/src/test/java/de/griefed/serverpackcreator/FilesSetupTest.java
@@ -1,5 +1,6 @@
 package de.griefed.serverpackcreator;
 
+import de.griefed.serverpackcreator.curseforgemodpack.CurseCreateModpack;
 import de.griefed.serverpackcreator.i18n.LocalizationManager;
 import org.apache.logging.log4j.Logger;
 import org.junit.jupiter.api.Assertions;
@@ -23,12 +24,14 @@ class FilesSetupTest {
 
     private FilesSetup filesSetup;
     private Configuration configCheck;
+    private CurseCreateModpack curseCreateModpack;
     private LocalizationManager localizationManager;
 
     FilesSetupTest() {
         localizationManager = new LocalizationManager();
         filesSetup = new FilesSetup(localizationManager);
-        configCheck = new Configuration(localizationManager);
+        curseCreateModpack = new CurseCreateModpack(localizationManager);
+        configCheck = new Configuration(localizationManager, curseCreateModpack);
     }
 
     @BeforeEach
-- 
GitLab


From 545fdb7a1a06f5df39111772c7373d94dcd0d0e4 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Fri, 30 Apr 2021 07:53:17 +0200
Subject: [PATCH 15/91] refactor(DI): Include license excerpt at top of source
 files

---
 .../serverpackcreator/Configuration.java      | 22 ++++++++++++++++++-
 .../serverpackcreator/CreateServerPack.java   | 21 +++++++++++++++++-
 .../griefed/serverpackcreator/FilesSetup.java | 22 ++++++++++++++++++-
 .../de/griefed/serverpackcreator/Main.java    | 20 +++++++++++++++++
 .../curseforgemodpack/CurseCreateModpack.java | 20 +++++++++++++++++
 .../curseforgemodpack/CurseFiles.java         | 20 +++++++++++++++++
 .../curseforgemodpack/CurseMinecraft.java     | 20 +++++++++++++++++
 .../curseforgemodpack/CurseModLoaders.java    | 20 +++++++++++++++++
 .../curseforgemodpack/CurseModpack.java       | 20 +++++++++++++++++
 .../curseforgemodpack/CurseSplines.java       | 20 +++++++++++++++++
 .../serverpackcreator/gui/AboutTab.java       | 20 +++++++++++++++++
 .../serverpackcreator/gui/CreateGui.java      | 20 +++++++++++++++++
 .../gui/CreateServerPackTab.java              | 20 +++++++++++++++++
 .../gui/ModloaderInstallerLogTab.java         | 20 +++++++++++++++++
 .../gui/ServerPackCreatorLogTab.java          | 20 +++++++++++++++++
 .../i18n/IncorrectLanguageException.java      | 20 +++++++++++++++++
 .../i18n/LocalizationManager.java             | 20 +++++++++++++++++
 .../serverpackcreator/ConfigCheckTest.java    | 20 +++++++++++++++++
 .../CreateServerPackTest.java                 | 20 +++++++++++++++++
 .../serverpackcreator/FilesSetupTest.java     | 20 +++++++++++++++++
 .../CurseCreateModpackTest.java               | 21 +++++++++++++++++-
 21 files changed, 422 insertions(+), 4 deletions(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/Configuration.java b/src/main/java/de/griefed/serverpackcreator/Configuration.java
index f30962f0f..8414b3b76 100644
--- a/src/main/java/de/griefed/serverpackcreator/Configuration.java
+++ b/src/main/java/de/griefed/serverpackcreator/Configuration.java
@@ -1,3 +1,22 @@
+/* Copyright (C) 2021  Griefed
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
+ * USA
+ *
+ * The full license can be found at https:github.com/Griefed/ServerPackCreator/blob/main/LICENSE
+ */
 package de.griefed.serverpackcreator;
 
 import com.fasterxml.jackson.databind.DeserializationFeature;
@@ -27,7 +46,7 @@ import java.nio.channels.ReadableByteChannel;
 import java.nio.file.Files;
 import java.nio.file.Paths;
 import java.util.*;
-
+//TODO: Write table of contents
 public class Configuration {
 
     private static final Logger appLogger = LogManager.getLogger(Configuration.class);
@@ -1289,6 +1308,7 @@ public class Configuration {
         boolean configWritten = false;
 
         //Griefed: What the fuck. This reads like someone having a stroke. What have I created here?
+        //TODO: Fix language keys and config variable
         String configString = String.format(
                 "%s\"%s\"\n\n%s[%s]\n\n%s[%s]\n\n%s%b\n\n%s\"%s\"\n\n%s\"%s\"\n\n%s\"%s\"\n\n%s\"%s\"\n\n%s%b\n\n%s%b\n\n%s%b\n\n%s%b",
                 localizationManager.getLocalizedString("filessetup.writeconfigtofile.modpackdir"),
diff --git a/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java b/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
index 4fcd2c4e3..d229571f4 100644
--- a/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
+++ b/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
@@ -1,3 +1,22 @@
+/* Copyright (C) 2021  Griefed
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
+ * USA
+ *
+ * The full license can be found at https:github.com/Griefed/ServerPackCreator/blob/main/LICENSE
+ */
 package de.griefed.serverpackcreator;
 
 import de.griefed.serverpackcreator.curseforgemodpack.CurseCreateModpack;
@@ -30,7 +49,7 @@ import java.util.zip.ZipEntry;
 import java.util.zip.ZipOutputStream;
 
 import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
-
+//TODO: Write table of contents
 public class CreateServerPack {
     private static final Logger appLogger = LogManager.getLogger(FilesSetup.class);
     private static final Logger installerLogger = LogManager.getLogger("InstallerLogger");
diff --git a/src/main/java/de/griefed/serverpackcreator/FilesSetup.java b/src/main/java/de/griefed/serverpackcreator/FilesSetup.java
index 24212bf44..95f0e4437 100644
--- a/src/main/java/de/griefed/serverpackcreator/FilesSetup.java
+++ b/src/main/java/de/griefed/serverpackcreator/FilesSetup.java
@@ -1,3 +1,23 @@
+/* Copyright (C) 2021  Griefed
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
+ * USA
+ *
+ * The full license can be found at https:github.com/Griefed/ServerPackCreator/blob/main/LICENSE
+ */
+
 package de.griefed.serverpackcreator;
 
 import de.griefed.serverpackcreator.i18n.LocalizationManager;
@@ -6,7 +26,7 @@ import org.apache.logging.log4j.Logger;
 import java.io.*;
 import java.nio.file.Files;
 import java.nio.file.Paths;
-
+//TODO: Write table of contents
 public class FilesSetup {
 
     private static final Logger appLogger = LogManager.getLogger(FilesSetup.class);
diff --git a/src/main/java/de/griefed/serverpackcreator/Main.java b/src/main/java/de/griefed/serverpackcreator/Main.java
index 91d94e184..71caa4610 100644
--- a/src/main/java/de/griefed/serverpackcreator/Main.java
+++ b/src/main/java/de/griefed/serverpackcreator/Main.java
@@ -1,3 +1,23 @@
+/* Copyright (C) 2021  Griefed
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
+ * USA
+ *
+ * The full license can be found at https:github.com/Griefed/ServerPackCreator/blob/main/LICENSE
+ */
+
 package de.griefed.serverpackcreator;
 
 import de.griefed.serverpackcreator.curseforgemodpack.CurseCreateModpack;
diff --git a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.java b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.java
index f226cd96e..f1ac1d4e7 100644
--- a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.java
+++ b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.java
@@ -1,3 +1,23 @@
+/* Copyright (C) 2021  Griefed
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
+ * USA
+ *
+ * The full license can be found at https:github.com/Griefed/ServerPackCreator/blob/main/LICENSE
+ */
+
 package de.griefed.serverpackcreator.curseforgemodpack;
 
 import com.fasterxml.jackson.databind.DeserializationFeature;
diff --git a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.java b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.java
index 7f9437a75..623d025a0 100644
--- a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.java
+++ b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.java
@@ -1,3 +1,23 @@
+/* Copyright (C) 2021  Griefed
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
+ * USA
+ *
+ * The full license can be found at https:github.com/Griefed/ServerPackCreator/blob/main/LICENSE
+ */
+
 package de.griefed.serverpackcreator.curseforgemodpack;
 
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
diff --git a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.java b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.java
index e40d86573..b546c0d9c 100644
--- a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.java
+++ b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.java
@@ -1,3 +1,23 @@
+/* Copyright (C) 2021  Griefed
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
+ * USA
+ *
+ * The full license can be found at https:github.com/Griefed/ServerPackCreator/blob/main/LICENSE
+ */
+
 package de.griefed.serverpackcreator.curseforgemodpack;
 
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
diff --git a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.java b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.java
index b7f2f2e54..b81c4d78e 100644
--- a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.java
+++ b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.java
@@ -1,3 +1,23 @@
+/* Copyright (C) 2021  Griefed
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
+ * USA
+ *
+ * The full license can be found at https:github.com/Griefed/ServerPackCreator/blob/main/LICENSE
+ */
+
 package de.griefed.serverpackcreator.curseforgemodpack;
 
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
diff --git a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.java b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.java
index 5eb52557a..dbd67d5f1 100644
--- a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.java
+++ b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.java
@@ -1,3 +1,23 @@
+/* Copyright (C) 2021  Griefed
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
+ * USA
+ *
+ * The full license can be found at https:github.com/Griefed/ServerPackCreator/blob/main/LICENSE
+ */
+
 package de.griefed.serverpackcreator.curseforgemodpack;
 
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
diff --git a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.java b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.java
index 145cd7ac0..978a86ade 100644
--- a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.java
+++ b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.java
@@ -1,3 +1,23 @@
+/* Copyright (C) 2021  Griefed
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
+ * USA
+ *
+ * The full license can be found at https:github.com/Griefed/ServerPackCreator/blob/main/LICENSE
+ */
+
 package de.griefed.serverpackcreator.curseforgemodpack;
 
 import java.util.Random;
diff --git a/src/main/java/de/griefed/serverpackcreator/gui/AboutTab.java b/src/main/java/de/griefed/serverpackcreator/gui/AboutTab.java
index 0107fd9ee..5f94c6ce5 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/AboutTab.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/AboutTab.java
@@ -1,3 +1,23 @@
+/* Copyright (C) 2021  Griefed
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
+ * USA
+ *
+ * The full license can be found at https:github.com/Griefed/ServerPackCreator/blob/main/LICENSE
+ */
+
 package de.griefed.serverpackcreator.gui;
 
 import de.griefed.serverpackcreator.i18n.LocalizationManager;
diff --git a/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java b/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java
index 1fc555ad5..16a5ed96c 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java
@@ -1,3 +1,23 @@
+/* Copyright (C) 2021  Griefed
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
+ * USA
+ *
+ * The full license can be found at https:github.com/Griefed/ServerPackCreator/blob/main/LICENSE
+ */
+
 package de.griefed.serverpackcreator.gui;
 
 import com.typesafe.config.Config;
diff --git a/src/main/java/de/griefed/serverpackcreator/gui/CreateServerPackTab.java b/src/main/java/de/griefed/serverpackcreator/gui/CreateServerPackTab.java
index 718c120c8..f6a2f7f86 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/CreateServerPackTab.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/CreateServerPackTab.java
@@ -1,3 +1,23 @@
+/* Copyright (C) 2021  Griefed
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
+ * USA
+ *
+ * The full license can be found at https:github.com/Griefed/ServerPackCreator/blob/main/LICENSE
+ */
+
 package de.griefed.serverpackcreator.gui;
 
 import com.typesafe.config.Config;
diff --git a/src/main/java/de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.java b/src/main/java/de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.java
index 7cb474cf3..4b401bd46 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.java
@@ -1,3 +1,23 @@
+/* Copyright (C) 2021  Griefed
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
+ * USA
+ *
+ * The full license can be found at https:github.com/Griefed/ServerPackCreator/blob/main/LICENSE
+ */
+
 package de.griefed.serverpackcreator.gui;
 
 import de.griefed.serverpackcreator.i18n.LocalizationManager;
diff --git a/src/main/java/de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.java b/src/main/java/de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.java
index 129cf9f88..77f6125d2 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.java
@@ -1,3 +1,23 @@
+/* Copyright (C) 2021  Griefed
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
+ * USA
+ *
+ * The full license can be found at https:github.com/Griefed/ServerPackCreator/blob/main/LICENSE
+ */
+
 package de.griefed.serverpackcreator.gui;
 
 import de.griefed.serverpackcreator.i18n.LocalizationManager;
diff --git a/src/main/java/de/griefed/serverpackcreator/i18n/IncorrectLanguageException.java b/src/main/java/de/griefed/serverpackcreator/i18n/IncorrectLanguageException.java
index bbb412e8c..8df94cf18 100644
--- a/src/main/java/de/griefed/serverpackcreator/i18n/IncorrectLanguageException.java
+++ b/src/main/java/de/griefed/serverpackcreator/i18n/IncorrectLanguageException.java
@@ -1,3 +1,23 @@
+/* Copyright (C) 2021  Griefed
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
+ * USA
+ *
+ * The full license can be found at https:github.com/Griefed/ServerPackCreator/blob/main/LICENSE
+ */
+
 package de.griefed.serverpackcreator.i18n;
 
 public class IncorrectLanguageException extends Exception {
diff --git a/src/main/java/de/griefed/serverpackcreator/i18n/LocalizationManager.java b/src/main/java/de/griefed/serverpackcreator/i18n/LocalizationManager.java
index f946a950d..8b5db3fce 100644
--- a/src/main/java/de/griefed/serverpackcreator/i18n/LocalizationManager.java
+++ b/src/main/java/de/griefed/serverpackcreator/i18n/LocalizationManager.java
@@ -1,3 +1,23 @@
+/* Copyright (C) 2021  Griefed
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
+ * USA
+ *
+ * The full license can be found at https:github.com/Griefed/ServerPackCreator/blob/main/LICENSE
+ */
+
 package de.griefed.serverpackcreator.i18n;
 
 import org.apache.logging.log4j.LogManager;
diff --git a/src/test/java/de/griefed/serverpackcreator/ConfigCheckTest.java b/src/test/java/de/griefed/serverpackcreator/ConfigCheckTest.java
index 117ed48ff..062b028d8 100644
--- a/src/test/java/de/griefed/serverpackcreator/ConfigCheckTest.java
+++ b/src/test/java/de/griefed/serverpackcreator/ConfigCheckTest.java
@@ -1,3 +1,23 @@
+/* Copyright (C) 2021  Griefed
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
+ * USA
+ *
+ * The full license can be found at https:github.com/Griefed/ServerPackCreator/blob/main/LICENSE
+ */
+
 package de.griefed.serverpackcreator;
 
 import com.typesafe.config.ConfigFactory;
diff --git a/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java b/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
index 7504e838b..1373bf901 100644
--- a/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
+++ b/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
@@ -1,3 +1,23 @@
+/* Copyright (C) 2021  Griefed
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
+ * USA
+ *
+ * The full license can be found at https:github.com/Griefed/ServerPackCreator/blob/main/LICENSE
+ */
+
 package de.griefed.serverpackcreator;
 
 import de.griefed.serverpackcreator.curseforgemodpack.CurseCreateModpack;
diff --git a/src/test/java/de/griefed/serverpackcreator/FilesSetupTest.java b/src/test/java/de/griefed/serverpackcreator/FilesSetupTest.java
index cbccd265a..ec381a0d2 100644
--- a/src/test/java/de/griefed/serverpackcreator/FilesSetupTest.java
+++ b/src/test/java/de/griefed/serverpackcreator/FilesSetupTest.java
@@ -1,3 +1,23 @@
+/* Copyright (C) 2021  Griefed
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
+ * USA
+ *
+ * The full license can be found at https:github.com/Griefed/ServerPackCreator/blob/main/LICENSE
+ */
+
 package de.griefed.serverpackcreator;
 
 import de.griefed.serverpackcreator.curseforgemodpack.CurseCreateModpack;
diff --git a/src/test/java/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpackTest.java b/src/test/java/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpackTest.java
index e48422806..f39c6ec3a 100644
--- a/src/test/java/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpackTest.java
+++ b/src/test/java/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpackTest.java
@@ -1,8 +1,27 @@
+/* Copyright (C) 2021  Griefed
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
+ * USA
+ *
+ * The full license can be found at https:github.com/Griefed/ServerPackCreator/blob/main/LICENSE
+ */
+
 package de.griefed.serverpackcreator.curseforgemodpack;
 
 import com.therandomlabs.curseapi.CurseAPI;
 import com.therandomlabs.curseapi.CurseException;
-import de.griefed.serverpackcreator.FilesSetup;
 import de.griefed.serverpackcreator.i18n.LocalizationManager;
 import org.apache.logging.log4j.Logger;
 import org.junit.jupiter.api.Assertions;
-- 
GitLab


From 680ad86f0371e158bb7a981109ae08c3da367c8e Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Fri, 30 Apr 2021 08:41:49 +0200
Subject: [PATCH 16/91] refactor(DI): Fix language keys and writeConfigToFile

---
 .../serverpackcreator/Configuration.java      | 53 +++++++++----------
 .../resources/lang/lang_de_de.properties      | 24 ++++-----
 .../resources/lang/lang_en_us.properties      | 25 +++++----
 .../resources/lang/lang_uk_ua.properties      | 24 ++++-----
 4 files changed, 62 insertions(+), 64 deletions(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/Configuration.java b/src/main/java/de/griefed/serverpackcreator/Configuration.java
index 8414b3b76..5d35e4edc 100644
--- a/src/main/java/de/griefed/serverpackcreator/Configuration.java
+++ b/src/main/java/de/griefed/serverpackcreator/Configuration.java
@@ -17,6 +17,7 @@
  *
  * The full license can be found at https:github.com/Griefed/ServerPackCreator/blob/main/LICENSE
  */
+//TODO: Write table of contents
 package de.griefed.serverpackcreator;
 
 import com.fasterxml.jackson.databind.DeserializationFeature;
@@ -46,7 +47,7 @@ import java.nio.channels.ReadableByteChannel;
 import java.nio.file.Files;
 import java.nio.file.Paths;
 import java.util.*;
-//TODO: Write table of contents
+//TODO: Write docs for class
 public class Configuration {
 
     private static final Logger appLogger = LogManager.getLogger(Configuration.class);
@@ -1308,33 +1309,31 @@ public class Configuration {
         boolean configWritten = false;
 
         //Griefed: What the fuck. This reads like someone having a stroke. What have I created here?
-        //TODO: Fix language keys and config variable
         String configString = String.format(
-                "%s\"%s\"\n\n%s[%s]\n\n%s[%s]\n\n%s%b\n\n%s\"%s\"\n\n%s\"%s\"\n\n%s\"%s\"\n\n%s\"%s\"\n\n%s%b\n\n%s%b\n\n%s%b\n\n%s%b",
-                localizationManager.getLocalizedString("filessetup.writeconfigtofile.modpackdir"),
-                modpackDir.replace("\\","/"),
-                localizationManager.getLocalizedString("filessetup.writeconfigtofile.clientmods"),
-                clientMods,
-                localizationManager.getLocalizedString("filessetup.writeconfigtofile.copydirs"),
-                copyDirs,
-                localizationManager.getLocalizedString("filessetup.writeconfigtofile.includeserverinstallation"),
-                includeServer,
-                localizationManager.getLocalizedString("filessetup.writeconfigtofile.javapath"),
-                javaPath.replace("\\","/"),
-                localizationManager.getLocalizedString("filessetup.writeconfigtofile.minecraftversion"),
-                minecraftVersion,
-                localizationManager.getLocalizedString("filessetup.writeconfigtofile.modloader"),
-                modLoader,
-                localizationManager.getLocalizedString("filessetup.writeconfigtofile.modloaderversion"),
-                modLoaderVersion,
-                localizationManager.getLocalizedString("filessetup.writeconfigtofile.includeservericon"),
-                includeIcon,
-                localizationManager.getLocalizedString("filessetup.writeconfigtofile.includeserverproperties"),
-                includeProperties,
-                localizationManager.getLocalizedString("filessetup.writeconfigtofile.includestartscripts"),
-                includeScripts,
-                localizationManager.getLocalizedString("filessetup.writeconfigtofile.includezipcreation"),
-                includeZip
+                        "%s\nmodpackDir = \"%s\"\n\n" +
+                        "%s\nclientMods = [%s]\n\n" +
+                        "%s\ncopyDirs =[%s]\n\n" +
+                        "%s\nincludeServerInstallation = %b\n\n" +
+                        "%s\njavaPath = \"%s\"\n\n" +
+                        "%s\nminecraftVersion = \"%s\"\n\n" +
+                        "%s\nmodLoader = \"%s\"\n\n" +
+                        "%s\nmodLoaderVersion = \"%s\"\n\n" +
+                        "%s\nincludeServerIcon = %b\n\n" +
+                        "%s\nincludeServerProperties = %b\n\n" +
+                        "%s\nincludeStartScripts = %b\n\n" +
+                        "%s\nincludeZipCreation = %b\n",
+                localizationManager.getLocalizedString("filessetup.writeconfigtofile.modpackdir"), modpackDir.replace("\\","/"),
+                localizationManager.getLocalizedString("filessetup.writeconfigtofile.clientmods"), clientMods,
+                localizationManager.getLocalizedString("filessetup.writeconfigtofile.copydirs"), copyDirs,
+                localizationManager.getLocalizedString("filessetup.writeconfigtofile.includeserverinstallation"), includeServer,
+                localizationManager.getLocalizedString("filessetup.writeconfigtofile.javapath"), javaPath.replace("\\","/"),
+                localizationManager.getLocalizedString("filessetup.writeconfigtofile.minecraftversion"), minecraftVersion,
+                localizationManager.getLocalizedString("filessetup.writeconfigtofile.modloader"), modLoader,
+                localizationManager.getLocalizedString("filessetup.writeconfigtofile.modloaderversion"), modLoaderVersion,
+                localizationManager.getLocalizedString("filessetup.writeconfigtofile.includeservericon"), includeIcon,
+                localizationManager.getLocalizedString("filessetup.writeconfigtofile.includeserverproperties"), includeProperties,
+                localizationManager.getLocalizedString("filessetup.writeconfigtofile.includestartscripts"), includeScripts,
+                localizationManager.getLocalizedString("filessetup.writeconfigtofile.includezipcreation"), includeZip
         );
 
         if (!isTemporary) {
diff --git a/src/main/resources/de/griefed/resources/lang/lang_de_de.properties b/src/main/resources/de/griefed/resources/lang/lang_de_de.properties
index e9d1fd1d9..cbb003a30 100644
--- a/src/main/resources/de/griefed/resources/lang/lang_de_de.properties
+++ b/src/main/resources/de/griefed/resources/lang/lang_de_de.properties
@@ -86,18 +86,18 @@ createserverpack.gui.about.issue=Create an issue on GitHub.
 createserverpack.gui.about.discord=Get support and chat on Griefed's Discord server.
 
 # OTHER
-filessetup.writeconfigtofile.modpackdir=# Path to your modpack. Can be either relative or absolute.\n# Example: \"./Some Modpack\" or \"C:/Minecraft/Some Modpack\"\n# Can also be a combination of CurseForge projectID and fileID. Example for Survive Create Prosper 4 4.6.7: \"390331,3215793\"\nmodpackDir = 
-filessetup.writeconfigtofile.clientmods=# List of client-only mods to delete from serverpack.\n# No need to include version specifics. Must be the filenames of the mods, not their project names on CurseForge!\n# Example: [AmbientSounds,ClientTweaks,PackMenu,BetterAdvancement,jeiintegration]\nclientMods = 
-filessetup.writeconfigtofile.copydirs=# Name of directories to include in serverpack.\n# When specifying \"saves/world_name\", \"world_name\" will be copied to the base directory of the serverpack\n# for immediate use with the server. Automatically set when projectID,fileID for modpackDir has been specified.\n# Example: [config,mods,scripts]\ncopyDirs = 
-filessetup.writeconfigtofile.includeserverinstallation=# Whether to install a Forge/Fabric server for the serverpack. Must be true or false.\n# Default value is true.\nincludeServerInstallation = 
-filessetup.writeconfigtofile.javapath=# Path to the Java executable. On Linux systems it would be something like \"/usr/bin/java\".\n# Only needed if includeServerInstallation is true.\njavaPath = 
-filessetup.writeconfigtofile.minecraftversion=# Which Minecraft version to use. Example: \"1.16.5\".\n# Automatically set when projectID,fileID for modpackDir has been specified.\n# Only needed if includeServerInstallation is true.\nminecraftVersion = 
-filessetup.writeconfigtofile.modloader=# Which modloader to install. Must be either \"Forge\" or \"Fabric\".\n# Automatically set when projectID,fileID for modpackDir has been specified.\n# Only needed if includeServerInstallation is true.\nmodLoader = 
-filessetup.writeconfigtofile.modloaderversion=# The version of the modloader you want to install. Example for Fabric=\"0.7.3\", example for Forge=\"36.0.15\".\n# Automatically set when projectID,fileID for modpackDir has been specified.\n# Only needed if includeServerInstallation is true.\nmodLoaderVersion = 
-filessetup.writeconfigtofile.includeservericon=# Include a server-icon.png in your serverpack. Must be true or false.\n# Customize server-icon.png in ./server_files.\n# Dimensions must be 64x64!\n# Default value is true.\nincludeServerIcon = 
-filessetup.writeconfigtofile.includeserverproperties=# Include a server.properties in your serverpack. Must be true or false.\n# Customize server.properties in ./server_files.\n# If no server.properties is provided but is set to true, a default one will be provided.\n# Default value is true.\nincludeServerProperties = 
-filessetup.writeconfigtofile.includestartscripts=# Include start scripts for windows and linux systems. Must be true or false.\n# Customize files beginning with \"start-\" in ./server_files.\n# Default value is true.\nincludeStartScripts = 
-filessetup.writeconfigtofile.includezipcreation=# Create zip-archive of serverpack. Must be true or false.\n# Default value is true.\nincludeZipCreation = 
+filessetup.writeconfigtofile.modpackdir=# Path to your modpack. Can be either relative or absolute.\n# Example: \"./Some Modpack\" or \"C:/Minecraft/Some Modpack\"\n# Can also be a combination of CurseForge projectID and fileID. Example for Survive Create Prosper 4 4.6.7: \"390331,3215793\"
+filessetup.writeconfigtofile.clientmods=# List of client-only mods to delete from serverpack.\n# No need to include version specifics. Must be the filenames of the mods, not their project names on CurseForge!\n# Example: [AmbientSounds,ClientTweaks,PackMenu,BetterAdvancement,jeiintegration]
+filessetup.writeconfigtofile.copydirs=# Name of directories to include in serverpack.\n# When specifying \"saves/world_name\", \"world_name\" will be copied to the base directory of the serverpack\n# for immediate use with the server. Automatically set when projectID,fileID for modpackDir has been specified.\n# Example: [config,mods,scripts] 
+filessetup.writeconfigtofile.includeserverinstallation=# Whether to install a Forge/Fabric server for the serverpack. Must be true or false.\n# Default value is true.
+filessetup.writeconfigtofile.javapath=# Path to the Java executable. On Linux systems it would be something like \"/usr/bin/java\".\n# Only needed if includeServerInstallation is true.
+filessetup.writeconfigtofile.minecraftversion=# Which Minecraft version to use. Example: \"1.16.5\".\n# Automatically set when projectID,fileID for modpackDir has been specified.\n# Only needed if includeServerInstallation is true.
+filessetup.writeconfigtofile.modloader=# Which modloader to install. Must be either \"Forge\" or \"Fabric\".\n# Automatically set when projectID,fileID for modpackDir has been specified.\n# Only needed if includeServerInstallation is true.
+filessetup.writeconfigtofile.modloaderversion=# The version of the modloader you want to install. Example for Fabric=\"0.7.3\", example for Forge=\"36.0.15\".\n# Automatically set when projectID,fileID for modpackDir has been specified.\n# Only needed if includeServerInstallation is true.
+filessetup.writeconfigtofile.includeservericon=# Include a server-icon.png in your serverpack. Must be true or false.\n# Customize server-icon.png in ./server_files.\n# Dimensions must be 64x64!\n# Default value is true.
+filessetup.writeconfigtofile.includeserverproperties=# Include a server.properties in your serverpack. Must be true or false.\n# Customize server.properties in ./server_files.\n# If no server.properties is provided but is set to true, a default one will be provided.\n# Default value is true.
+filessetup.writeconfigtofile.includestartscripts=# Include start scripts for windows and linux systems. Must be true or false.\n# Customize files beginning with \"start-\" in ./server_files.\n# Default value is true.
+filessetup.writeconfigtofile.includezipcreation=# Create zip-archive of serverpack. Must be true or false.\n# Default value is true.
 
 # LOGS
 ## Error logs
diff --git a/src/main/resources/de/griefed/resources/lang/lang_en_us.properties b/src/main/resources/de/griefed/resources/lang/lang_en_us.properties
index affa4c77d..0f5b7cf18 100644
--- a/src/main/resources/de/griefed/resources/lang/lang_en_us.properties
+++ b/src/main/resources/de/griefed/resources/lang/lang_en_us.properties
@@ -1,4 +1,3 @@
-# suppress inspection "TrailingSpacesInProperty" for whole file
 # Untranslated language name (in English)
 localeUnlocalizedName=English (United States)
 # Translated language name (in language you translating the app currently to.)
@@ -87,18 +86,18 @@ createserverpack.gui.about.issue=Create an issue on GitHub.
 createserverpack.gui.about.discord=Get support and chat on Griefed's Discord server.
 
 # OTHER
-filessetup.writeconfigtofile.modpackdir=# Path to your modpack. Can be either relative or absolute.\n# Example: \"./Some Modpack\" or \"C:/Minecraft/Some Modpack\"\n# Can also be a combination of CurseForge projectID and fileID. Example for Survive Create Prosper 4 4.6.7: \"390331,3215793\"\nmodpackDir = 
-filessetup.writeconfigtofile.clientmods=# List of client-only mods to delete from serverpack.\n# No need to include version specifics. Must be the filenames of the mods, not their project names on CurseForge!\n# Example: [AmbientSounds,ClientTweaks,PackMenu,BetterAdvancement,jeiintegration]\nclientMods = 
-filessetup.writeconfigtofile.copydirs=# Name of directories to include in serverpack.\n# When specifying \"saves/world_name\", \"world_name\" will be copied to the base directory of the serverpack\n# for immediate use with the server. Automatically set when projectID,fileID for modpackDir has been specified.\n# Example: [config,mods,scripts]\ncopyDirs = 
-filessetup.writeconfigtofile.includeserverinstallation=# Whether to install a Forge/Fabric server for the serverpack. Must be true or false.\n# Default value is true.\nincludeServerInstallation = 
-filessetup.writeconfigtofile.javapath=# Path to the Java executable. On Linux systems it would be something like \"/usr/bin/java\".\n# Only needed if includeServerInstallation is true.\njavaPath = 
-filessetup.writeconfigtofile.minecraftversion=# Which Minecraft version to use. Example: \"1.16.5\".\n# Automatically set when projectID,fileID for modpackDir has been specified.\n# Only needed if includeServerInstallation is true.\nminecraftVersion = 
-filessetup.writeconfigtofile.modloader=# Which modloader to install. Must be either \"Forge\" or \"Fabric\".\n# Automatically set when projectID,fileID for modpackDir has been specified.\n# Only needed if includeServerInstallation is true.\nmodLoader = 
-filessetup.writeconfigtofile.modloaderversion=# The version of the modloader you want to install. Example for Fabric=\"0.7.3\", example for Forge=\"36.0.15\".\n# Automatically set when projectID,fileID for modpackDir has been specified.\n# Only needed if includeServerInstallation is true.\nmodLoaderVersion = 
-filessetup.writeconfigtofile.includeservericon=# Include a server-icon.png in your serverpack. Must be true or false.\n# Customize server-icon.png in ./server_files.\n# Dimensions must be 64x64!\n# Default value is true.\nincludeServerIcon = 
-filessetup.writeconfigtofile.includeserverproperties=# Include a server.properties in your serverpack. Must be true or false.\n# Customize server.properties in ./server_files.\n# If no server.properties is provided but is set to true, a default one will be provided.\n# Default value is true.\nincludeServerProperties = 
-filessetup.writeconfigtofile.includestartscripts=# Include start scripts for windows and linux systems. Must be true or false.\n# Customize files beginning with \"start-\" in ./server_files.\n# Default value is true.\nincludeStartScripts = 
-filessetup.writeconfigtofile.includezipcreation=# Create zip-archive of serverpack. Must be true or false.\n# Default value is true.\nincludeZipCreation = 
+filessetup.writeconfigtofile.modpackdir=# Path to your modpack. Can be either relative or absolute.\n# Example: \"./Some Modpack\" or \"C:/Minecraft/Some Modpack\"\n# Can also be a combination of CurseForge projectID and fileID. Example for Survive Create Prosper 4 4.6.7: \"390331,3215793\"
+filessetup.writeconfigtofile.clientmods=# List of client-only mods to delete from serverpack.\n# No need to include version specifics. Must be the filenames of the mods, not their project names on CurseForge!\n# Example: [AmbientSounds,ClientTweaks,PackMenu,BetterAdvancement,jeiintegration]
+filessetup.writeconfigtofile.copydirs=# Name of directories to include in serverpack.\n# When specifying \"saves/world_name\", \"world_name\" will be copied to the base directory of the serverpack\n# for immediate use with the server. Automatically set when projectID,fileID for modpackDir has been specified.\n# Example: [config,mods,scripts] 
+filessetup.writeconfigtofile.includeserverinstallation=# Whether to install a Forge/Fabric server for the serverpack. Must be true or false.\n# Default value is true.
+filessetup.writeconfigtofile.javapath=# Path to the Java executable. On Linux systems it would be something like \"/usr/bin/java\".\n# Only needed if includeServerInstallation is true.
+filessetup.writeconfigtofile.minecraftversion=# Which Minecraft version to use. Example: \"1.16.5\".\n# Automatically set when projectID,fileID for modpackDir has been specified.\n# Only needed if includeServerInstallation is true.
+filessetup.writeconfigtofile.modloader=# Which modloader to install. Must be either \"Forge\" or \"Fabric\".\n# Automatically set when projectID,fileID for modpackDir has been specified.\n# Only needed if includeServerInstallation is true.
+filessetup.writeconfigtofile.modloaderversion=# The version of the modloader you want to install. Example for Fabric=\"0.7.3\", example for Forge=\"36.0.15\".\n# Automatically set when projectID,fileID for modpackDir has been specified.\n# Only needed if includeServerInstallation is true.
+filessetup.writeconfigtofile.includeservericon=# Include a server-icon.png in your serverpack. Must be true or false.\n# Customize server-icon.png in ./server_files.\n# Dimensions must be 64x64!\n# Default value is true.
+filessetup.writeconfigtofile.includeserverproperties=# Include a server.properties in your serverpack. Must be true or false.\n# Customize server.properties in ./server_files.\n# If no server.properties is provided but is set to true, a default one will be provided.\n# Default value is true.
+filessetup.writeconfigtofile.includestartscripts=# Include start scripts for windows and linux systems. Must be true or false.\n# Customize files beginning with \"start-\" in ./server_files.\n# Default value is true.
+filessetup.writeconfigtofile.includezipcreation=# Create zip-archive of serverpack. Must be true or false.\n# Default value is true.
 
 # LOGS
 ## Error logs
diff --git a/src/main/resources/de/griefed/resources/lang/lang_uk_ua.properties b/src/main/resources/de/griefed/resources/lang/lang_uk_ua.properties
index e62589791..8f9fbb81b 100644
--- a/src/main/resources/de/griefed/resources/lang/lang_uk_ua.properties
+++ b/src/main/resources/de/griefed/resources/lang/lang_uk_ua.properties
@@ -86,18 +86,18 @@ createserverpack.gui.about.issue=Create an issue on GitHub.
 createserverpack.gui.about.discord=Get support and chat on Griefed's Discord server.
 
 # OTHER
-filessetup.writeconfigtofile.modpackdir=# Path to your modpack. Can be either relative or absolute.\n# Example: \"./Some Modpack\" or \"C:/Minecraft/Some Modpack\"\n# Can also be a combination of CurseForge projectID and fileID. Example for Survive Create Prosper 4 4.6.7: \"390331,3215793\"\nmodpackDir = 
-filessetup.writeconfigtofile.clientmods=# List of client-only mods to delete from serverpack.\n# No need to include version specifics. Must be the filenames of the mods, not their project names on CurseForge!\n# Example: [AmbientSounds,ClientTweaks,PackMenu,BetterAdvancement,jeiintegration]\nclientMods = 
-filessetup.writeconfigtofile.copydirs=# Name of directories to include in serverpack.\n# When specifying \"saves/world_name\", \"world_name\" will be copied to the base directory of the serverpack\n# for immediate use with the server. Automatically set when projectID,fileID for modpackDir has been specified.\n# Example: [config,mods,scripts]\ncopyDirs = 
-filessetup.writeconfigtofile.includeserverinstallation=# Whether to install a Forge/Fabric server for the serverpack. Must be true or false.\n# Default value is true.\nincludeServerInstallation = 
-filessetup.writeconfigtofile.javapath=# Path to the Java executable. On Linux systems it would be something like \"/usr/bin/java\".\n# Only needed if includeServerInstallation is true.\njavaPath = 
-filessetup.writeconfigtofile.minecraftversion=# Which Minecraft version to use. Example: \"1.16.5\".\n# Automatically set when projectID,fileID for modpackDir has been specified.\n# Only needed if includeServerInstallation is true.\nminecraftVersion = 
-filessetup.writeconfigtofile.modloader=# Which modloader to install. Must be either \"Forge\" or \"Fabric\".\n# Automatically set when projectID,fileID for modpackDir has been specified.\n# Only needed if includeServerInstallation is true.\nmodLoader = 
-filessetup.writeconfigtofile.modloaderversion=# The version of the modloader you want to install. Example for Fabric=\"0.7.3\", example for Forge=\"36.0.15\".\n# Automatically set when projectID,fileID for modpackDir has been specified.\n# Only needed if includeServerInstallation is true.\nmodLoaderVersion = 
-filessetup.writeconfigtofile.includeservericon=# Include a server-icon.png in your serverpack. Must be true or false.\n# Customize server-icon.png in ./server_files.\n# Dimensions must be 64x64!\n# Default value is true.\nincludeServerIcon = 
-filessetup.writeconfigtofile.includeserverproperties=# Include a server.properties in your serverpack. Must be true or false.\n# Customize server.properties in ./server_files.\n# If no server.properties is provided but is set to true, a default one will be provided.\n# Default value is true.\nincludeServerProperties = 
-filessetup.writeconfigtofile.includestartscripts=# Include start scripts for windows and linux systems. Must be true or false.\n# Customize files beginning with \"start-\" in ./server_files.\n# Default value is true.\nincludeStartScripts = 
-filessetup.writeconfigtofile.includezipcreation=# Create zip-archive of serverpack. Must be true or false.\n# Default value is true.\nincludeZipCreation = 
+filessetup.writeconfigtofile.modpackdir=# Path to your modpack. Can be either relative or absolute.\n# Example: \"./Some Modpack\" or \"C:/Minecraft/Some Modpack\"\n# Can also be a combination of CurseForge projectID and fileID. Example for Survive Create Prosper 4 4.6.7: \"390331,3215793\"
+filessetup.writeconfigtofile.clientmods=# List of client-only mods to delete from serverpack.\n# No need to include version specifics. Must be the filenames of the mods, not their project names on CurseForge!\n# Example: [AmbientSounds,ClientTweaks,PackMenu,BetterAdvancement,jeiintegration]
+filessetup.writeconfigtofile.copydirs=# Name of directories to include in serverpack.\n# When specifying \"saves/world_name\", \"world_name\" will be copied to the base directory of the serverpack\n# for immediate use with the server. Automatically set when projectID,fileID for modpackDir has been specified.\n# Example: [config,mods,scripts] 
+filessetup.writeconfigtofile.includeserverinstallation=# Whether to install a Forge/Fabric server for the serverpack. Must be true or false.\n# Default value is true.
+filessetup.writeconfigtofile.javapath=# Path to the Java executable. On Linux systems it would be something like \"/usr/bin/java\".\n# Only needed if includeServerInstallation is true.
+filessetup.writeconfigtofile.minecraftversion=# Which Minecraft version to use. Example: \"1.16.5\".\n# Automatically set when projectID,fileID for modpackDir has been specified.\n# Only needed if includeServerInstallation is true.
+filessetup.writeconfigtofile.modloader=# Which modloader to install. Must be either \"Forge\" or \"Fabric\".\n# Automatically set when projectID,fileID for modpackDir has been specified.\n# Only needed if includeServerInstallation is true.
+filessetup.writeconfigtofile.modloaderversion=# The version of the modloader you want to install. Example for Fabric=\"0.7.3\", example for Forge=\"36.0.15\".\n# Automatically set when projectID,fileID for modpackDir has been specified.\n# Only needed if includeServerInstallation is true.
+filessetup.writeconfigtofile.includeservericon=# Include a server-icon.png in your serverpack. Must be true or false.\n# Customize server-icon.png in ./server_files.\n# Dimensions must be 64x64!\n# Default value is true.
+filessetup.writeconfigtofile.includeserverproperties=# Include a server.properties in your serverpack. Must be true or false.\n# Customize server.properties in ./server_files.\n# If no server.properties is provided but is set to true, a default one will be provided.\n# Default value is true.
+filessetup.writeconfigtofile.includestartscripts=# Include start scripts for windows and linux systems. Must be true or false.\n# Customize files beginning with \"start-\" in ./server_files.\n# Default value is true.
+filessetup.writeconfigtofile.includezipcreation=# Create zip-archive of serverpack. Must be true or false.\n# Default value is true.
 
 # LOGS
 ## Error logs
-- 
GitLab


From 813f015d490356db237b6f286ca8ba8ceac4d603 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Fri, 30 Apr 2021 15:06:49 +0200
Subject: [PATCH 17/91] refactor(DI): Update javadocs

---
 .../de/griefed/serverpackcreator/Main.java    | 40 +++++++++++++++++--
 1 file changed, 37 insertions(+), 3 deletions(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/Main.java b/src/main/java/de/griefed/serverpackcreator/Main.java
index 71caa4610..3204ebd62 100644
--- a/src/main/java/de/griefed/serverpackcreator/Main.java
+++ b/src/main/java/de/griefed/serverpackcreator/Main.java
@@ -17,7 +17,6 @@
  *
  * The full license can be found at https:github.com/Griefed/ServerPackCreator/blob/main/LICENSE
  */
-
 package de.griefed.serverpackcreator;
 
 import de.griefed.serverpackcreator.curseforgemodpack.CurseCreateModpack;
@@ -33,12 +32,47 @@ import java.net.URISyntaxException;
 import java.util.Arrays;
 import java.util.List;
 
+/**
+ * <strong>Table of methods</strong>
+ * <p>
+ * {@link #main(String[])}
+ * <p>
+ * Depending on the passed commandline arguments and whether ServerPackCreator is run in a headless environment,
+ * one of the following modes will be entered:<p>
+ * <strong>-cgen</strong><p>
+ * When ServerPackCreator is run with the <code>-cgen</code>-argument, you will be guided through a step-by-step
+ * generation of a new configuration file.<p>
+ * This mode is also entered if:<p>
+ * ServerPackCreator is run with the <code>-cli</code>-argument <strong>AND</strong> if no configuration-file exists.<p>
+ * ServerPackCreator can not find any configuration-file when run in cli-mode, for whatever reason.
+ * <p>
+ * <strong>-cli</strong><p>
+ * When ServerPackCreator is run with the <code>-cli</code>-argument, it will be executed in commandline-mode only.
+ * Use this argument if you explicitly want to execute ServerPackCreator without GUI. *
+ * <p>
+ * <strong>-lang</strong><p>
+ * Specifies the locale with which ServerPackCreator is run. If no locale is specified or if this argument is not
+ * used, ServerPackCreator will use the default locale <code>en_us</code><p>
+ * Correct usage is:<p>
+ * <code>-lang your_locale</code><p>
+ * Examples:<p>
+ * <code>-lang de_de</code><p>
+ * <code>-lang en_us</code><p>
+ * <strong>Headless environments</strong><p>
+ * If ServerPackCreator is run in a headless environment, without any graphical environment, it should automatically
+ * enter <code>-cli</code>-mode.
+ */
 public class Main {
     private static final Logger appLogger = LogManager.getLogger(Main.class);
 
     /**
-     * Init and "main" has been moved to Handler-class. Main now only inits the LocalizationManager and passes the cli args, if any,  to Handler, which then runs the usual operations as they used to be in pre-2.x.x
-     * @param args Commandline arguments with which ServerPackCreator is run. Passed to Handler-class which then decides what to do corresponding to input.
+     * Initializes all objects needed for running ServerPackCreator and ensures Dependency Injection.
+     * Calls {@link FilesSetup} so all default files are available.
+     * Checks arguments to determine which mode to enter.
+     * Lists a couple of environment variables important for reporting issues.
+     *
+     * @param args Commandline arguments with which ServerPackCreator is run. Determines which mode ServerPackCreator
+     * will enter and which locale is used.
      */
     public static void main(String[] args) {
         List<String> programArgs = Arrays.asList(args);
-- 
GitLab


From fb07268d81c0e81028727fd7ae8150a195d45c15 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Fri, 30 Apr 2021 15:07:03 +0200
Subject: [PATCH 18/91] refactor(DI): Update javadocs

---
 .../griefed/serverpackcreator/FilesSetup.java | 110 ++++++++++++++++--
 1 file changed, 98 insertions(+), 12 deletions(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/FilesSetup.java b/src/main/java/de/griefed/serverpackcreator/FilesSetup.java
index 95f0e4437..eef2534d2 100644
--- a/src/main/java/de/griefed/serverpackcreator/FilesSetup.java
+++ b/src/main/java/de/griefed/serverpackcreator/FilesSetup.java
@@ -17,7 +17,6 @@
  *
  * The full license can be found at https:github.com/Griefed/ServerPackCreator/blob/main/LICENSE
  */
-
 package de.griefed.serverpackcreator;
 
 import de.griefed.serverpackcreator.i18n.LocalizationManager;
@@ -26,12 +25,49 @@ import org.apache.logging.log4j.Logger;
 import java.io.*;
 import java.nio.file.Files;
 import java.nio.file.Paths;
-//TODO: Write table of contents
+
+/**
+ * <strong>Table of methods</strong>
+ * <p>
+ * {@link #FilesSetup(LocalizationManager)}<p>
+ * {@link #getConfigFile()}<p>
+ * {@link #getOldConfigFile()}<p>
+ * {@link #getPropertiesFile()}<p>
+ * {@link #getIconFile()}<p>
+ * {@link #getForgeWindowsFile()}<p>
+ * {@link #getForgeLinuxFile()}<p>
+ * {@link #getFabricWindowsFile()}
+ * {@link #getFabricLinuxFile()}
+ * {@link #filesSetup()}<p>
+ * {@link #checkForConfig()}<p>
+ * {@link #checkForFabricLinux()}<p>
+ * {@link #checkForFabricWindows()}<p>
+ * {@link #checkForForgeLinux()}<p>
+ * {@link #checkForForgeWindows()}<p>
+ * {@link #checkForProperties()}<p>
+ * {@link #checkForIcon()}
+ * <p>
+ * Requires instances of {@link LocalizationManager} for use of localization, but creates one if injected one is null.
+ * <p>
+ * Ensures all files needed by ServerPackCreator are available. If any one is missing, a new one is generated from the
+ * template. Among the default files are:<p>
+ * <strong>serverpackcreator.conf</strong><p>
+ * <strong>server.properties</strong><p>
+ * <strong>server-icon.png</strong><p>
+ * <strong>start-forge.bar</strong><p>
+ * <strong>start-forge.sh</strong><p>
+ * <strong>start-fabric.bat</strong><p>
+ * <strong>start-fabric.sh</strong>
+ * <p>
+ *
+ * Should an old configuration file, <em>creator.conf</em>, be detected, it is renamed to <em>serverpackcreator.conf</em>
+ * to ensure a configuration file is present at all times.<p>
+ */
 public class FilesSetup {
 
     private static final Logger appLogger = LogManager.getLogger(FilesSetup.class);
 
-    private final File configFile = new File("serverpackcreator.conf");
+    private final File configFile        = new File("serverpackcreator.conf");
     private final File oldConfigFile     = new File("creator.conf");
     private final File propertiesFile    = new File("server.properties");
     private final File iconFile          = new File("server-icon.png");
@@ -42,6 +78,12 @@ public class FilesSetup {
 
     private LocalizationManager localizationManager;
 
+    /**
+     * <strong>Constructor</strong><p>
+     * Used for Dependency Injection. Receives an instance of {@link LocalizationManager} or creates one if the received
+     * one is null. Required for use of localization.
+     * @param injectedLocalizationManager Instance of {@link LocalizationManager} required for localized log messages.
+     */
     public FilesSetup(LocalizationManager injectedLocalizationManager) {
         if (injectedLocalizationManager == null) {
             this.localizationManager = new LocalizationManager();
@@ -50,39 +92,75 @@ public class FilesSetup {
         }
     }
 
+    /**
+     * Getter for serverpackcreator.conf.
+     * @return Returns the serverpackcreator.conf-file for use in {@link #checkForConfig()}
+     */
     public File getConfigFile() {
         return configFile;
     }
 
+    /**
+     * Getter for creator.conf.
+     * @return Returns the creator.conf-file for use in {@link #checkForConfig()}.
+     */
     public File getOldConfigFile() {
         return oldConfigFile;
     }
 
+    /**
+     * Getter for server.properties.
+     * @return Returns the server.properties-file for use in {@link #checkForProperties()}
+     */
     public File getPropertiesFile() {
         return propertiesFile;
     }
 
+    /**
+     * Getter for server-icon.png
+     * @return Returns the server-icon.png-file for use in {@link #checkForIcon()}
+     */
     public File getIconFile() {
         return iconFile;
     }
 
+    /**
+     * Getter for start-forge.bat.
+     * @return Returns the start-forge.bat-file for use in {@link #checkForForgeWindows()}
+     */
     public File getForgeWindowsFile() {
         return forgeWindowsFile;
     }
 
+    /**
+     * Getter for start-forge.sh.
+     * @return Returns the start-forge.sh-file for use in {@link #checkForForgeLinux()}
+     */
     public File getForgeLinuxFile() {
         return forgeLinuxFile;
     }
 
+    /**
+     * Getter for start-fabric.bat.
+     * @return Returns the start-fabric.bat-file for use in {@link #checkForFabricWindows()}
+     */
     public File getFabricWindowsFile() {
         return fabricWindowsFile;
     }
 
+    /**
+     * Getter for start-fabric.sh.
+     * @return Returns the start-fabric.sh-file for use in {@link #checkForFabricLinux()}
+     */
     public File getFabricLinuxFile() {
         return fabricLinuxFile;
     }
 
-    /** Calls individual methods which check for existence of default files. If any of these methods return true, serverpackcreator will exit, giving the user the chance to customize it before the program runs in production.
+    /** Calls individual methods which check for existence of default files. Only this method should be called to check
+     * for existence of all default files.<p>
+     * If any file was newly generated from it's template, a warning is printed informing the user about said newly
+     * generated file. If every file was present and none was generated, "Setup completed." is printed to the console
+     * and log.
      */
     void filesSetup() {
         appLogger.info(localizationManager.getLocalizedString("filessetup.log.info.filessetup.enter"));
@@ -117,8 +195,10 @@ public class FilesSetup {
             appLogger.info(localizationManager.getLocalizedString("filessetup.log.info.filessetup.finish"));
         }
     }
-    /** Check for old config file, if found rename to new name. If neither old nor new config file can be found, a new config file is generated.
-     * @return Boolean. Returns true if new config file was generated.
+    /** Check for old config file, if found rename to new name. If neither old nor new config file can be found, a new
+     * config file is generated.
+     * @return Boolean. Returns true if the file was generated, so {@link #filesSetup()} can inform the user about
+     * said newly generated file.
      */
     boolean checkForConfig() {
         boolean firstRun = false;
@@ -157,7 +237,8 @@ public class FilesSetup {
     }
 
     /** Checks for existence of Fabric start script for Linux. If it is not found, it is generated.
-     * @return Boolean. Returns true if the file was generated.
+     * @return Boolean. Returns true if the file was generated, so {@link #filesSetup()} can inform the user about
+     * said newly generated file.
      */
     boolean checkForFabricLinux() {
         boolean firstRun = false;
@@ -183,7 +264,8 @@ public class FilesSetup {
     }
 
     /** Checks for existence of Fabric start script for Windows. If it is not found, it is generated.
-     * @return Boolean. Returns true if the file was generated.
+     * @return Boolean. Returns true if the file was generated, so {@link #filesSetup()} can inform the user about
+     * said newly generated file.
      */
     boolean checkForFabricWindows() {
         boolean firstRun = false;
@@ -209,7 +291,8 @@ public class FilesSetup {
     }
 
     /** Checks for existence of Forge start script for Linux. If it is not found, it is generated.
-     * @return Boolean. Returns true if the file was generated.
+     * @return Boolean. Returns true if the file was generated, so {@link #filesSetup()} can inform the user about
+     * said newly generated file.
      */
     boolean checkForForgeLinux() {
         boolean firstRun = false;
@@ -235,7 +318,8 @@ public class FilesSetup {
     }
 
     /** Checks for existence of Forge start script for Windows. If it is not found, it is generated.
-     * @return Boolean. Returns true if the file was generated.
+     * @return Boolean. Returns true if the file was generated, so {@link #filesSetup()} can inform the user about
+     * said newly generated file.
      */
     boolean checkForForgeWindows() {
         boolean firstRun = false;
@@ -261,7 +345,8 @@ public class FilesSetup {
     }
 
     /** Checks for existence of server.properties file. If it is not found, it is generated.
-     * @return Boolean. Returns true if the file was generated.
+     * @return Boolean. Returns true if the file was generated, so {@link #filesSetup()} can inform the user about
+     * said newly generated file.
      */
     boolean checkForProperties() {
         boolean firstRun = false;
@@ -287,7 +372,8 @@ public class FilesSetup {
     }
 
     /** Checks for existence of server-icon.png file. If it is not found, it is generated.
-     * @return Boolean. Returns true if the file was generated.
+     * @return Boolean. Returns true if the file was generated, so {@link #filesSetup()} can inform the user about
+     * said newly generated file.
      */
     boolean checkForIcon() {
         boolean firstRun = false;
-- 
GitLab


From 0eafc231fd01bf1fd1204a843d7df72d6e0db26b Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Fri, 30 Apr 2021 15:07:20 +0200
Subject: [PATCH 19/91] refactor(DI): Update javadocs

---
 .../serverpackcreator/CreateServerPack.java   | 284 +++++++++++++-----
 1 file changed, 206 insertions(+), 78 deletions(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java b/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
index d229571f4..3411900a8 100644
--- a/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
+++ b/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
@@ -49,7 +49,47 @@ import java.util.zip.ZipEntry;
 import java.util.zip.ZipOutputStream;
 
 import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
-//TODO: Write table of contents
+
+/**
+ * <strong>Table of methods</strong>
+ * <p>
+ * {@link #CreateServerPack(LocalizationManager, Configuration, CurseCreateModpack)}<p>
+ * {@link #getPropertiesFile()}<p>
+ * {@link #getIconFile()}<p>
+ * {@link #getForgeWindowsFile()}<p>
+ * {@link #getForgeLinuxFile()}<p>
+ * {@link #getFabricWindowsFile()}<p>
+ * {@link #getFabricLinuxFile()}<p>
+ * {@link #run()}<p>
+ * {@link #cleanupEnvironment(String)}<p>
+ * {@link #copyStartScripts(String, String, boolean)}<p>
+ * {@link #copyFiles(String, List, List)}<p>
+ * {@link #excludeClientMods(String, List)}<p>
+ * {@link #copyIcon(String)}<p>
+ * {@link #copyProperties(String)}<p>
+ * {@link #installServer(String, String, String, String, String)}<p>
+ * {@link #zipBuilder(String, String, Boolean, String)}<p>
+ * {@link #generateDownloadScripts(String, String, String)}<p>
+ * {@link #fabricShell(String, String)}<p>
+ * {@link #fabricBatch(String, String)}<p>
+ * {@link #forgeShell(String, String)}<p>
+ * {@link #forgeBatch(String, String)}<p>
+ * {@link #downloadFabricJar(String)}<p>
+ * {@link #latestFabricInstaller(String)}<p>
+ * {@link #downloadForgeJar(String, String, String)}<p>
+ * {@link #deleteMinecraftJar(String, String, String)}<p>
+ * {@link #cleanUpServerPack(File, File, String, String, String, String)}<p>
+ * <p>
+ * Requires an instance of {@link Configuration} from which to get all required information about the modpack and the
+ * then to be generated server pack.
+ * <p>
+ * Requires an instance of {@link LocalizationManager} for use of localization, but creates one if injected one is null.
+ * <p>
+ * Create a server pack from a modpack by copying all specified or required files from the modpack to the server pack
+ * as well as installing the modloader server for the specified modloader, modloader version and Minecraft version.
+ * Create a ZIP-archive of the server pack, excluding the Minecraft server JAR, for immediate upload to CurseForge or
+ * other platforms.
+ */
 public class CreateServerPack {
     private static final Logger appLogger = LogManager.getLogger(FilesSetup.class);
     private static final Logger installerLogger = LogManager.getLogger("InstallerLogger");
@@ -64,7 +104,19 @@ public class CreateServerPack {
     private final File fabricWindowsFile = new File("start-fabric.bat");
     private final File fabricLinuxFile   = new File("start-fabric.sh");
 
-
+    /**
+     * <strong>Constructor</strong><p>
+     * Used for Dependency Injection.<p>
+     * Receives an instance of {@link LocalizationManager} or creates one if the received
+     * one is null. Required for use of localization.<p>
+     * Receives an instance of {@link Configuration} required to successfully and correctly create the server pack.<p>
+     * Receives an instance of {@link CurseCreateModpack} in case the modpack has to be created from a combination of
+     * CurseForge projectID and fileID, from which to <em>then</em> create the server pack.
+     * @param injectedLocalizationManager Instance of {@link LocalizationManager} required for localized log messages.
+     * @param injectedConfiguration Instance of {@link Configuration} required to successfully and correctly create the server pack.
+     * @param injectedCurseCreateModpack Instance of {@link CurseCreateModpack} in case the modpack has to be created from a combination of
+     * CurseForge projectID and fileID, from which to <em>then</em> create the server pack.
+     */
     public CreateServerPack(LocalizationManager injectedLocalizationManager, Configuration injectedConfiguration, CurseCreateModpack injectedCurseCreateModpack) {
         if (injectedLocalizationManager == null) {
             this.localizationManager = new LocalizationManager();
@@ -85,75 +137,118 @@ public class CreateServerPack {
         }
     }
 
+    /**
+     * Getter for server.properties.
+     * @return Returns the server.properties-file for use in {@link #copyProperties(String)}
+     */
     public File getPropertiesFile() {
         return propertiesFile;
     }
 
+    /**
+     * Getter for server-icon.png
+     * @return Returns the server-icon.png-file for use in {@link #copyIcon(String)}
+     */
     public File getIconFile() {
         return iconFile;
     }
 
+    /**
+     * Getter for start-forge.bat.
+     * @return Returns the start-forge.bat-file for use in {@link #copyStartScripts(String, String, boolean)}
+     */
     public File getForgeWindowsFile() {
         return forgeWindowsFile;
     }
 
+    /**
+     * Getter for start-forge.sh
+     * @return Returns the start-forge.sh-file for use in {@link #copyStartScripts(String, String, boolean)}
+     */
     public File getForgeLinuxFile() {
         return forgeLinuxFile;
     }
 
+    /**
+     * Getter for start-fabric.bat.
+     * @return Returns the start-fabric.bat-file for use in {@link #copyStartScripts(String, String, boolean)}
+     */
     public File getFabricWindowsFile() {
         return fabricWindowsFile;
     }
 
+    /**
+     * Getter for start-fabric.sh.
+     * @return Returns the start-fabric.sh-file for use in {@link #copyStartScripts(String, String, boolean)}
+     */
     public File getFabricLinuxFile() {
         return fabricLinuxFile;
     }
 
     /**
-     * Run when serverpackcreator is run in either -cli or -cgen mode. Runs what used to be the main content in Main in pre-1.x.x. times. Inits config checks and, if config checks are successfull, calls methods to create the server pack.
-     * @return Return true if the serverpack was successfully generated, false if not.
+     * Create a server pack if the check of the configuration file was successfull.<p>
+     * Calls<p>
+     * {@link #cleanupEnvironment(String)} to delete any previously generated server packs or ZIP-archives thereof.<p>
+     * {@link #copyFiles(String, List, List)} to copy all specified directories and mods, excluding clientside-only mods,
+     * to the server pack.<p>
+     * {@link #copyStartScripts(String, String, boolean)} to copy the start scripts for the specified modloader to the
+     * server pack.<p>
+     * {@link #installServer(String, String, String, String, String)} to install the server software for the specified
+     * modloader, modloader version and Minecraft version in the server pack.<p>
+     * {@link #copyIcon(String)} to copy the server-icon.png to the server pack.<p>
+     * {@link #copyProperties(String)} to copy the server.properties to the server pack.<p>
+     * {@link #zipBuilder(String, String, Boolean, String)} to create a ZIP-archive of the server pack and delete the
+     * Minecraft server JAR from it.
+     * @return Boolean. Returns true if the server pack was successfully generated.
      */
     public boolean run() {
         if (!configuration.checkConfigFile(configuration.getConfigFile())) {
+
             cleanupEnvironment(configuration.getModpackDir());
-            try {
-                copyFiles(configuration.getModpackDir(), configuration.getCopyDirs(), configuration.getClientMods());
-            } catch (IOException ex) {
-                appLogger.error(localizationManager.getLocalizedString("handler.log.error.runincli.copyfiles"), ex);
-            }
+
+            copyFiles(configuration.getModpackDir(), configuration.getCopyDirs(), configuration.getClientMods());
+
             copyStartScripts(configuration.getModpackDir(), configuration.getModLoader(), configuration.getIncludeStartScripts());
+
             if (configuration.getIncludeServerInstallation()) {
                 installServer(configuration.getModLoader(), configuration.getModpackDir(), configuration.getMinecraftVersion(), configuration.getModLoaderVersion(), configuration.getJavaPath());
             } else {
                 appLogger.info(localizationManager.getLocalizedString("handler.log.info.runincli.server"));
             }
+
             if (configuration.getIncludeServerIcon()) {
                 copyIcon(configuration.getModpackDir());
             } else {
                 appLogger.info(localizationManager.getLocalizedString("handler.log.info.runincli.icon"));
             }
+
             if (configuration.getIncludeServerProperties()) {
                 copyProperties(configuration.getModpackDir());
             } else {
                 appLogger.info(localizationManager.getLocalizedString("handler.log.info.runincli.properties"));
             }
+
             if (configuration.getIncludeZipCreation()) {
                 zipBuilder(configuration.getModpackDir(), configuration.getModLoader(), configuration.getIncludeServerInstallation(), configuration.getMinecraftVersion());
             } else {
                 appLogger.info(localizationManager.getLocalizedString("handler.log.info.runincli.zip"));
             }
+
             appLogger.info(String.format(localizationManager.getLocalizedString("handler.log.info.runincli.serverpack"), configuration.getModpackDir()));
             appLogger.info(String.format(localizationManager.getLocalizedString("handler.log.info.runincli.archive"), configuration.getModpackDir()));
             appLogger.info(localizationManager.getLocalizedString("handler.log.info.runincli.finish"));
+
             return true;
+
         } else {
             appLogger.error(localizationManager.getLocalizedString("handler.log.error.runincli"));
             return false;
         }
     }
 
-    /** Deletes files from previous runs of serverpackcreator.
-     * @param modpackDir String. The directory in where to check for files from previous runs.
+    /** Deletes all files, directories and ZIP-archives of previously generated server packs to ensure newly generated
+     * server pack is as clean as possible.
+     * @param modpackDir String. The server_pack directory and ZIP-archive will be deleted inside the modpack directory.
      */
     void cleanupEnvironment(String modpackDir) {
         if (new File(String.format("%s/server_pack", modpackDir)).exists()) {
@@ -193,10 +288,10 @@ public class CreateServerPack {
         }
     }
 
-    /** Copies start scripts for Forge modloader into the server_pack folder.
-     * @param modpackDir String. Files will be copied into subfolder server_pack. Checks for valid modpackDir are in ConfigCheck.
-     * @param modLoader String. Determines whether start scripts for Forge or Fabric are copied to modpackDir. Checks for valid modLoader are in ConfigCheck.
-     * @param includeStartScripts Boolean. Whether to include start scripts in server_pack. Boolean.
+    /** Copies start scripts for the specified modloader into the server pack.
+     * @param modpackDir String. Start scripts are copied into the server_pack directory in the modpack directory.
+     * @param modLoader String. Whether to copy the Forge or Fabric scripts into the server pack.
+     * @param includeStartScripts Boolean. Whether to copy the start scripts into the server pack.
      */
     void copyStartScripts(String modpackDir, String modLoader, boolean includeStartScripts) {
         if (modLoader.equalsIgnoreCase("Forge") && includeStartScripts) {
@@ -236,15 +331,21 @@ public class CreateServerPack {
         }
     }
 
-    /** Copies all specified folders and their files to the modpackDir.
-     * @param modpackDir String. /server_pack. Directory where all directories listed in copyDirs will be copied into.
-     * @param copyDirs String List. The folders and files within to copy.
-     * @param clientMods String List. List of clientside-only mods NOT to copy to server pack.
-     * @throws IOException Only print stacktrace if it does not start with java.nio.file.DirectoryNotEmptyException.
+    /** Copies all specified directories and mods, excluding clientside-only mods, from the modpack directory into the
+     *  server pack directory.
+     * Calls {@link #excludeClientMods(String, List)} to generate a list of all mods to copy to server pack, excluding
+     * clientside-only mods.
+     * @param modpackDir String. Files and directories are copied into the server_pack directory inside the modpack directory.
+     * @param copyDirs String List. All directories and files therein to copy to the server pack.
+     * @param clientMods String List. List of clientside-only mods to exclude from the server pack.
      */
-    void copyFiles(String modpackDir, List<String> copyDirs, List<String> clientMods) throws IOException {
+    void copyFiles(String modpackDir, List<String> copyDirs, List<String> clientMods) {
         String serverPath = String.format("%s/server_pack", modpackDir);
-        Files.createDirectories(Paths.get(serverPath));
+        try {
+            Files.createDirectories(Paths.get(serverPath));
+        } catch (IOException ex) {
+            appLogger.error(String.format(localizationManager.getLocalizedString("createmodpack.log.error.unziparchive.createdir"), serverPath));
+        }
         for (int i = 0; i < copyDirs.size(); i++) {
             String clientDir = String.format("%s/%s", modpackDir,copyDirs.get(i));
             String serverDir = String.format("%s/%s", serverPath,copyDirs.get(i));
@@ -275,7 +376,11 @@ public class CreateServerPack {
                 }
             } else if (copyDirs.get(i).startsWith("mods") && clientMods.size() > 0) {
                 List<String> listOfFiles = excludeClientMods(clientDir, clientMods);
-                Files.createDirectories(Paths.get(serverDir));
+                try {
+                    Files.createDirectories(Paths.get(serverDir));
+                } catch (IOException ex) {
+                    appLogger.info(String.format(localizationManager.getLocalizedString("copyfiles.log.info.copyfiles.setup"), serverDir));
+                }
                 for (int in = 0; in < listOfFiles.size(); in++) {
                     try {
 
@@ -320,10 +425,10 @@ public class CreateServerPack {
         }
     }
 
-    /** Generate a list of all mods in a modpack EXCEPT clientside-only mods. This list is then used by copyFiles.
-     * @param modsDir String. /mods The directory in which to generate a list of all available mods.
-     * @param clientMods List String. A list of all clientside-only mods passed by copyFiles, which is then removed from the list generated in this method.
-     * @return List String. A list of all mods inside the modpack excluding the specified clientside-only mods.
+    /** Generates a list of all mods to include in the server pack excluding clientside-only mods.
+     * @param modsDir String. The mods directory of the modpack of which to generate a list of all it's contents.
+     * @param clientMods List String. A list of all clientside-only mods.
+     * @return List String. A list of all mods to include in the server pack.
      */
     @SuppressWarnings("UnusedAssignment")
     List<String> excludeClientMods(String modsDir, List<String> clientMods) {
@@ -357,7 +462,7 @@ public class CreateServerPack {
     }
 
     /** Copies the server-icon.png into server_pack.
-     * @param modpackDir String. /server_pack. Directory where the server-icon.png will be copied to.
+     * @param modpackDir String. The server-icon.png is copied into the server_pack directory inside the modpack directory.
      */
     void copyIcon(String modpackDir) {
         appLogger.info(localizationManager.getLocalizedString("copyfiles.log.info.copyicon"));
@@ -375,7 +480,7 @@ public class CreateServerPack {
     }
 
     /** Copies the server.properties into server_pack.
-     * @param modpackDir String. /server_pack. Directory where the server.properties. will be copied to.
+     * @param modpackDir String. The server.properties file is copied into the server_pack directory inside the modpack directory.
      */
     void copyProperties(String modpackDir) {
         appLogger.info(localizationManager.getLocalizedString("copyfiles.log.info.copyproperties"));
@@ -392,12 +497,20 @@ public class CreateServerPack {
         }
     }
 
-    /** Installs the files for a Forge/Fabric server.
-     * @param modLoader String. The modloader for which to install the server.
-     * @param modpackDir String. /server_pack The directory where the modloader server will be installed in.
+    /** Installs the modloader server for the specified modloader, modloader version and Minecraft version.
+     * Calls<p>
+     * {@link #downloadFabricJar(String)} to download the Fabric installer into the server_pack directory.<p>
+     * {@link #downloadForgeJar(String, String, String)} to download the Forge installer for the specified Forge version
+     * and Minecraft version.<p>
+     * {@link #generateDownloadScripts(String, String, String)} to generate the download scripts of the Minecraft server JAR
+     * for the specified Minecraft version and file-name depending on whether the modloader is Forge or Fabric.<p>
+     * {@link #cleanUpServerPack(File, File, String, String, String, String)} to delete no longer needed files generated
+     * by the installation process of the modloader server software.
+     * @param modLoader String. The modloader for which to install the server software. Either Forge or Fabric.
+     * @param modpackDir String. The server software is installed into the server_pack directory inside the modpack directory.
      * @param minecraftVersion String. The Minecraft version for which to install the modloader and Minecraft server.
      * @param modLoaderVersion String. The modloader version for which to install the modloader and Minecraft server.
-     * @param javaPath String. Path to Java installation needed to execute the Fabric and Forge installers.
+     * @param javaPath String. The path to the Java executable/binary which is needed to execute the Forge/Fabric installers.
      */
     void installServer(String modLoader, String modpackDir, String minecraftVersion, String modLoaderVersion, String javaPath) {
         File fabricInstaller = new File(String.format("%s/server_pack/fabric-installer.jar", modpackDir));
@@ -472,6 +585,7 @@ public class CreateServerPack {
         }
 
         generateDownloadScripts(modLoader, modpackDir, minecraftVersion);
+
         cleanUpServerPack(
                 fabricInstaller,
                 forgeInstaller,
@@ -479,14 +593,17 @@ public class CreateServerPack {
                 modpackDir,
                 minecraftVersion,
                 modLoaderVersion);
-
     }
-    /** Create a zip-archive of the serverpack, excluding Mojang's minecraft_server.jar.
-     * With help from https://stackoverflow.com/questions/1091788/how-to-create-a-zip-file-in-java
-     * @param modpackDir String. The directory where the zip-archive will be created and saved in.
-     * @param modLoader String. Determines the name of Minecraft#s server jar which will be deleted from the zip-archive.
-     * @param includeServerInstallation Boolean. Determines whether the Minecraft server jar needs to be deleted from the zip-archive.
-     * @param minecraftVersion String. The Minecraft version of which to delete the server jar. Used if modloader is Forge.
+
+    /** Creates a ZIP-archive of the server_pack directory and deletes the Minecraft server JAR afterwards.<p>
+     * With help from <a href="https://stackoverflow.com/questions/1091788/how-to-create-a-zip-file-in-java">Stackoverflow</a><p>
+     * Calls<p>
+     * {@link #deleteMinecraftJar(String, String, String)} to delete the Minecraft server JAR from the ZIP-archive,
+     * depending on which modloader and Minecraft version is specified.
+     * @param modpackDir String. The directory server_pack will be zipped and placed inside the modpack directory.
+     * @param modLoader String. Determines the name of the Minecraft server JAR to delete from the ZIP-archive.
+     * @param includeServerInstallation Boolean. Determines whether the Minecraft server JAR needs to be deleted from the ZIP-archive.
+     * @param minecraftVersion String. Determines the name of the Minecraft server JAR to delete from the ZIP-archive if the modloader is Forge.
      */
     void zipBuilder(String modpackDir, String modLoader, Boolean includeServerInstallation, String minecraftVersion) {
         final Path sourceDir = Paths.get(String.format("%s/server_pack", modpackDir));
@@ -522,10 +639,16 @@ public class CreateServerPack {
         appLogger.info(localizationManager.getLocalizedString("serversetup.log.info.zipbuilder.finish"));
     }
 
-    /** Calls methods for generating download scripts for Mojang's Minecraft server depending on the specified versions and modloader.
-     * @param modLoader String. The specified modloader determines the name under which Mojang's server jar will be downloaded as.
-     * @param modpackDir String. /server_pack The directory where the scripts will be placed in.
-     * @param minecraftVersion String. The version of the Minecraft server jar to download.
+    /** Depending on the specified modloader and Minecraft version, this method makes calls to generate the corresponding
+     * download scripts for the Minecraft server JAR.<p>
+     * Calls<p>
+     * {@link #fabricShell(String, String)} if the modloader is Fabric.
+     * {@link #fabricBatch(String, String)} if the modloader is Fabric.
+     * {@link #forgeShell(String, String)} if the modloader is Forge.
+     * {@link #forgeBatch(String, String)} if the modloader is Forge.
+     * @param modLoader String. Determines whether the scripts are generated for Forge or Fabric.
+     * @param modpackDir String. The scripts are generated in the server_pack directory inside the modpack directory.
+     * @param minecraftVersion String. Determines the Minecraft version for which the scripts are generated.
      */
     void generateDownloadScripts(String modLoader, String modpackDir, String minecraftVersion) {
         if (modLoader.equalsIgnoreCase("Fabric")) {
@@ -539,9 +662,9 @@ public class CreateServerPack {
         }
     }
 
-    /** Generates download scripts for Mojang's Minecraft server for Fabric,Linux.
-     * @param modpackDir String. /server_pack The directory where the scripts will be placed in.
-     * @param minecraftVersion String. The version of the Minecraft server jar to download.
+    /** Generates Fabric Linux-shell download scripts for Mojang's Minecraft server JAR for the specified Minecraft version.
+     * @param modpackDir String. The script is generated in the server_pack directory inside the modpack directory.
+     * @param minecraftVersion String. The Minecraft version for which to download the server JAR.
      */
     void fabricShell(String modpackDir, String minecraftVersion) {
         try {
@@ -566,9 +689,9 @@ public class CreateServerPack {
         appLogger.info(localizationManager.getLocalizedString("serverutilities.log.info.fabricshell"));
     }
 
-    /** Generates download scripts for Mojang's Minecraft server for Fabric,Windows.
-     * @param modpackDir String. /server_pack The directory where the scripts will be placed in.
-     * @param minecraftVersion String. The version of the Minecraft server jar to download.
+    /** Generates Fabric Windows-Batch download scripts for Mojang's Minecraft server JAR for the specified Minecraft version.
+     * @param modpackDir String. The script is generated in the server_pack directory inside the modpack directory.
+     * @param minecraftVersion String. The Minecraft version for which to download the server JAR.
      */
     void fabricBatch(String modpackDir, String minecraftVersion) {
         try {
@@ -593,9 +716,9 @@ public class CreateServerPack {
         appLogger.info(localizationManager.getLocalizedString("serverutilities.log.info.fabricbatch"));
     }
 
-    /** Generates download scripts for Mojang's Minecraft server for Forge,Linux.
-     * @param modpackDir String. /server_pack The directory where the scripts will be placed in.
-     * @param minecraftVersion String. The version of the Minecraft server jar to download.
+    /** Generates Forge Linux-shell download scripts for Mojang's Minecraft server JAR for the specified Minecraft version.
+     * @param modpackDir String. The script is generated in the server_pack directory inside the modpack directory.
+     * @param minecraftVersion String. The Minecraft version for which to download the server JAR.
      */
     void forgeShell(String modpackDir, String minecraftVersion) {
         try {
@@ -620,9 +743,9 @@ public class CreateServerPack {
         appLogger.info(localizationManager.getLocalizedString("serverutilities.log.info.forgeshell"));
     }
 
-    /** Generates download scripts for Mojang's Minecraft server for Forge,Windows.
-     * @param modpackDir String. /server_pack The directory where the scripts will be placed in.
-     * @param minecraftVersion String. The version of the Minecraft server jar to download.
+    /** Generates Forge Windows-Batch download scripts for Mojang's Minecraft server JAR for the specified Minecraft version.
+     * @param modpackDir String. The script is generated in the server_pack directory inside the modpack directory.
+     * @param minecraftVersion String. The Minecraft version for which to download the server JAR.
      */
     void forgeBatch(String modpackDir, String minecraftVersion) {
         try {
@@ -647,9 +770,11 @@ public class CreateServerPack {
         appLogger.info(localizationManager.getLocalizedString("serverutilities.log.info.forgebatch"));
     }
 
-    /** Downloads the specified version of Fabric.
-     * @param modpackDir String. /server_pack The directory where the Fabric installer will be placed in.
-     * @return Boolean. Returns true if the download was successful. False if not.
+    /** Downloads the latest Fabric installer into the server pack.<p>
+     * Calls<p>
+     * {@link #latestFabricInstaller(String)} to acquire the latest version of the Fabric installer.
+     * @param modpackDir String. The Fabric installer is downloaded into the server_pack directory inside the modpack directory.
+     * @return Boolean. Returns true if the download was successfull.
      */
     boolean downloadFabricJar(String modpackDir) {
         boolean downloaded = false;
@@ -684,9 +809,11 @@ public class CreateServerPack {
         return downloaded;
     }
 
-    /** Returns the latest installer version for the Fabric installer to be used in ServerSetup.installServer.
-     * @param modpackDir String. /server_pack The directory where the Fabric installer will be placed in.
-     * @return Boolean. Returns true if the download was successful. False if not.
+    /** Acquires the latest version of the Fabric modloader installer and returns it as a string. If acquisition of the
+     * latest version fails, version 0.7.2 is returned by default.
+     * @param modpackDir String. The fabric-installer.xml-file is saved inside the server_pack directory inside the modpack
+     * directory.
+     * @return String. Returns the version of the latest Fabric modloader installer.
      */
     String latestFabricInstaller(String modpackDir) {
         String result;
@@ -718,11 +845,11 @@ public class CreateServerPack {
         return result;
     }
 
-    /** Downloads the specified version of the Forge installer to be used in ServerSetup.installServer.
-     * @param minecraftVersion String. The Minecraft version corresponding to the Forge version. Minecraft version and Forge version build a pair.
-     * @param modLoaderVersion String. The Forge version corresponding to the Minecraft version. Minecraft version and Forge version build a pair.
-     * @param modpackDir String. /server_pack The directory where the Forge installer will be placed in.
-     * @return Boolean. Returns true if the download was successful. False if not.
+    /** Downloads the modloader server installer for Forge, for the specified modloader version.
+     * @param minecraftVersion String. The Minecraft version for which to download the modloader server installer.
+     * @param modLoaderVersion String. The Forge version for which to download the modloader server installer.
+     * @param modpackDir String. The modloader installer is downloaded to the server_pack directory inside the modloader directory.
+     * @return Boolean. Returns true if the download was successful.
      */
     boolean downloadForgeJar(String minecraftVersion, String modLoaderVersion, String modpackDir) {
         boolean downloaded = false;
@@ -754,11 +881,12 @@ public class CreateServerPack {
         return downloaded;
     }
 
-    /** Deletes Mojang's minecraft_server.jar from the zip-archive so users do not accidentally upload a file containing software from Mojang.
-     * With help from https://stackoverflow.com/questions/5244963/delete-files-from-a-zip-archive-without-decompressing-in-java-or-maybe-python and https://bugs.openjdk.java.net/browse/JDK-8186227
-     * @param modLoader String. Determines the name of the file to delete.
-     * @param modpackDir String. /server_pack The directory in which the file will be deleted.
-     * @param minecraftVersion String. The Minecraft version of which to delete the server jar. Used if modloader is Forge.
+    /** Deletes the Minecraft server JAR from the ZIP-archive as per Mojang's TOS and EULA.
+     * With help from <a href=https://stackoverflow.com/questions/5244963/delete-files-from-a-zip-archive-without-decompressing-in-java-or-maybe-python>Stackoverflow</a>
+     * and <a href=https://bugs.openjdk.java.net/browse/JDK-8186227>OpenJDK Bugtracker</a>.
+     * @param modLoader String. The name of the Minecraft server JAR depends on the modloader used.
+     * @param modpackDir String. The directory in which the ZIP-archive is stored.
+     * @param minecraftVersion String. The name of the Minecraft server JAR depends on the Minecraft version if the modloader is Forge.
      */
     void deleteMinecraftJar(String modLoader, String modpackDir, String minecraftVersion) {
         if (modLoader.equalsIgnoreCase("Forge")) {
@@ -800,13 +928,13 @@ public class CreateServerPack {
         }
     }
 
-    /** Deletes remnant files from Fabric/Forge installation no longer needed.
-     * @param fabricInstaller File. Fabric installer to be deleted.
-     * @param forgeInstaller File. Forge installer to be deleted.
+    /** Cleans up the server_pack directory by deleting left-over files from modloader installations and version checking.
+     * @param fabricInstaller File. The Fabric installer file which is to be deleted.
+     * @param forgeInstaller File. The Forge installer file which is to be deleted.
      * @param modLoader String. Whether Forge or Fabric files are to be deleted.
-     * @param modpackDir String. /server_pack The directory where files are to be deleted.
-     * @param minecraftVersion String. Needed for renaming the Forge server jar to work with launch scripts provided by serverpackcreator.
-     * @param modLoaderVersion String. Needed for renaming the Forge server jar to work with launch scripts provided by serverpackcreator.
+     * @param modpackDir String. Cleanup tasks are done inside the server_pack directory inside the modpack directory.
+     * @param minecraftVersion String. Needed for renaming the Forge server JAR to work with launch scripts provided by ServerPackCreator.
+     * @param modLoaderVersion String. Needed for renaming the Forge server JAR to work with launch scripts provided by ServerPackCreator.
      */
     void cleanUpServerPack(File fabricInstaller, File forgeInstaller, String modLoader, String modpackDir, String minecraftVersion, String modLoaderVersion) {
         appLogger.info(localizationManager.getLocalizedString("serverutilities.log.info.cleanupserverpack.enter"));
-- 
GitLab


From c298b533cc163e80a118228fd199eedde22de357 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Fri, 30 Apr 2021 17:34:06 +0200
Subject: [PATCH 20/91] refactor(DI): Include LICENSE and CONTRIBUTING.md in
 JAR

---
 build.gradle                       |   4 +
 src/main/resources/CONTRIBUTING.md |  55 ++++
 src/main/resources/LICENSE         | 504 +++++++++++++++++++++++++++++
 3 files changed, 563 insertions(+)
 create mode 100644 src/main/resources/CONTRIBUTING.md
 create mode 100644 src/main/resources/LICENSE

diff --git a/build.gradle b/build.gradle
index 789ac9519..c68708e46 100644
--- a/build.gradle
+++ b/build.gradle
@@ -118,6 +118,10 @@ jar {
             'META-INF/DEPENDENCIES',
             'META-INF/LICENSE',
             'META-INF/NOTICE',
+            'META-INF/CHANGES',
+            'META-INF/LICENSE.txt',
+            'META-INF/NOTICE.txt',
+            'META-INF/README.md',
             'Log4j-**',
             'icon.png',
             'profile_icon.png'
diff --git a/src/main/resources/CONTRIBUTING.md b/src/main/resources/CONTRIBUTING.md
new file mode 100644
index 000000000..ef6701259
--- /dev/null
+++ b/src/main/resources/CONTRIBUTING.md
@@ -0,0 +1,55 @@
+## Contributing
+
+## Code
+
+- **The Main-class:** The Main-class of ServerPackCreator only passes the arguments from execution to the Handler-class.
+
+- **Config file:** If you want to contribute to SPC, please make sure you do not change the `serverpackcreator.conf`-file. Ideally, any version of SPC will work with any config file, as they all have the same content. Changing what's inside the `serverpackcreator.conf`-file would make versions incompatible to each other, but I want users to be able to simply download the newest version **without** having to migrate their config file or even worrying about such a thing.
+Therefore, I ask that you do not touch the `serverpackcreator.conf`-file.
+  
+- **Variable names:** Please keep variable names verbose i.e. `thisStoresSomething` or `checkForStuff` or some such. Variables like `a` and `tmpA` make code harder to read. We're not aiming for best performance or whatever, so we can have longer variable names if we want to.
+
+- **Access modifiers:** Because the files generated by this program are supposed to be distributed to multiple people, I try to keep methods and classes as closed-off as possible. It's not much, but it's something. Therefore, unless your method or class *absolutely* must be public, keep it package private or make it private completely. I reserve the right to refactor any such classes or methods.  
+
+- **Translating:** If you wish to contribute to translating ServerPackCreator, have a look at the [resource bundles](https://github.com/Griefed/ServerPackCreator/tree/main/src/main/resources/de/griefed/resources/lang). Should you want to **add** a language to ServerPackCreator, add your locale in [LocalizationManager](https://github.com/Griefed/ServerPackCreator/blob/main/src/main/java/de/griefed/serverpackcreator/i18n/LocalizationManager.java), copy the [lang_en_us.properties](https://github.com/Griefed/ServerPackCreator/blob/main/src/main/resources/de/griefed/resources/lang/lang_en_us.properties) to lang_your_locale.properties and start translating!  
+
+## Commits
+
+If you want to contribute to SPC, please make sure your commits follow the conventional commit layout and use the types/categories/flags described here: [actions/auto-changelog](https://github.com/marketplace/actions/auto-changelog)
+
+For completeness' sake:
+
+```
+type(category): description [flag]
+```
+
+The `type` must be one of the followings:
+
+* `breaking` (Breaking Changes)
+* `build` (Build System / Dependencies)
+* `ci` (Continuous Integration)
+* `chore` (Chores)
+* `docs` (Documentation Changes)
+* `feat` (New Features)
+* `fix` (Bug Fixes)
+* `other` (Other Changes)
+* `perf` (Performance Improvements)
+* `refactor` (Refactors)
+* `revert` (Reverts)
+* `style` (Code Style Changes)
+* `test` (Tests)
+
+> If the `type` is not found in the list, it'll be considered as `other`.
+
+The `category` is optional and can be anything of your choice.
+
+The `flag` is optional (if provided, it must be surrounded in square brackets) and can be one of the followings:
+
+* `ignore` (Omits the commit from the changelog)
+
+> If `flag` is not found in the list, it'll be ignored.
+> 
+
+## Contributions
+
+* I reserve the right to reject any and all PRs without stating why. It may be due to a variety of reasons. Maybe I want to implement a feature myself, maybe I am already working on implementing the changes you are proposing, maybe I don't want the change you are proposing. I will most probably tell you why I rejected your PR, if I rejected it, but I reserve the right to just say "No.". This project is mainly meant as a training ground for me and Java, and it wouldn't do me any good if others do all the work for me. :D I hope you understand where I am coming from with this.
diff --git a/src/main/resources/LICENSE b/src/main/resources/LICENSE
new file mode 100644
index 000000000..8000a6faa
--- /dev/null
+++ b/src/main/resources/LICENSE
@@ -0,0 +1,504 @@
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
+    USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random
+  Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
-- 
GitLab


From 5c86612d33c8291671d79e65e05154fd1af7a8e4 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Fri, 30 Apr 2021 17:35:06 +0200
Subject: [PATCH 21/91] refactor(DI): Update javadocs

---
 .../java/de/griefed/serverpackcreator/CreateServerPack.java     | 2 +-
 src/main/java/de/griefed/serverpackcreator/FilesSetup.java      | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java b/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
index 3411900a8..4dec8d33a 100644
--- a/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
+++ b/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
@@ -78,7 +78,7 @@ import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
  * {@link #latestFabricInstaller(String)}<p>
  * {@link #downloadForgeJar(String, String, String)}<p>
  * {@link #deleteMinecraftJar(String, String, String)}<p>
- * {@link #cleanUpServerPack(File, File, String, String, String, String)}<p>
+ * {@link #cleanUpServerPack(File, File, String, String, String, String)}
  * <p>
  * Requires an instance of {@link Configuration} from which to get all required information about the modpack and the
  * then to be generated server pack.
diff --git a/src/main/java/de/griefed/serverpackcreator/FilesSetup.java b/src/main/java/de/griefed/serverpackcreator/FilesSetup.java
index eef2534d2..8020edac7 100644
--- a/src/main/java/de/griefed/serverpackcreator/FilesSetup.java
+++ b/src/main/java/de/griefed/serverpackcreator/FilesSetup.java
@@ -61,7 +61,7 @@ import java.nio.file.Paths;
  * <p>
  *
  * Should an old configuration file, <em>creator.conf</em>, be detected, it is renamed to <em>serverpackcreator.conf</em>
- * to ensure a configuration file is present at all times.<p>
+ * to ensure a configuration file is present at all times.
  */
 public class FilesSetup {
 
-- 
GitLab


From eb3ca3283c7de9e2b70e0bab93b6786569356f71 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Fri, 30 Apr 2021 17:38:23 +0200
Subject: [PATCH 22/91] refactor(DI): Update javadocs

---
 .../serverpackcreator/CreateServerPack.java   | 52 +++++++++----------
 .../griefed/serverpackcreator/FilesSetup.java | 34 ++++++------
 2 files changed, 43 insertions(+), 43 deletions(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java b/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
index 4dec8d33a..7c9f23ab2 100644
--- a/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
+++ b/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
@@ -53,32 +53,32 @@ import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
 /**
  * <strong>Table of methods</strong>
  * <p>
- * {@link #CreateServerPack(LocalizationManager, Configuration, CurseCreateModpack)}<p>
- * {@link #getPropertiesFile()}<p>
- * {@link #getIconFile()}<p>
- * {@link #getForgeWindowsFile()}<p>
- * {@link #getForgeLinuxFile()}<p>
- * {@link #getFabricWindowsFile()}<p>
- * {@link #getFabricLinuxFile()}<p>
- * {@link #run()}<p>
- * {@link #cleanupEnvironment(String)}<p>
- * {@link #copyStartScripts(String, String, boolean)}<p>
- * {@link #copyFiles(String, List, List)}<p>
- * {@link #excludeClientMods(String, List)}<p>
- * {@link #copyIcon(String)}<p>
- * {@link #copyProperties(String)}<p>
- * {@link #installServer(String, String, String, String, String)}<p>
- * {@link #zipBuilder(String, String, Boolean, String)}<p>
- * {@link #generateDownloadScripts(String, String, String)}<p>
- * {@link #fabricShell(String, String)}<p>
- * {@link #fabricBatch(String, String)}<p>
- * {@link #forgeShell(String, String)}<p>
- * {@link #forgeBatch(String, String)}<p>
- * {@link #downloadFabricJar(String)}<p>
- * {@link #latestFabricInstaller(String)}<p>
- * {@link #downloadForgeJar(String, String, String)}<p>
- * {@link #deleteMinecraftJar(String, String, String)}<p>
- * {@link #cleanUpServerPack(File, File, String, String, String, String)}
+ * 1. {@link #CreateServerPack(LocalizationManager, Configuration, CurseCreateModpack)}<p>
+ * 2. {@link #getPropertiesFile()}<p>
+ * 3. {@link #getIconFile()}<p>
+ * 4. {@link #getForgeWindowsFile()}<p>
+ * 5. {@link #getForgeLinuxFile()}<p>
+ * 6. {@link #getFabricWindowsFile()}<p>
+ * 7. {@link #getFabricLinuxFile()}<p>
+ * 8. {@link #run()}<p>
+ * 9. {@link #cleanupEnvironment(String)}<p>
+ * 10.{@link #copyStartScripts(String, String, boolean)}<p>
+ * 11.{@link #copyFiles(String, List, List)}<p>
+ * 12.{@link #excludeClientMods(String, List)}<p>
+ * 13.{@link #copyIcon(String)}<p>
+ * 14.{@link #copyProperties(String)}<p>
+ * 15.{@link #installServer(String, String, String, String, String)}<p>
+ * 16.{@link #zipBuilder(String, String, Boolean, String)}<p>
+ * 17.{@link #generateDownloadScripts(String, String, String)}<p>
+ * 18.{@link #fabricShell(String, String)}<p>
+ * 19.{@link #fabricBatch(String, String)}<p>
+ * 20.{@link #forgeShell(String, String)}<p>
+ * 21.{@link #forgeBatch(String, String)}<p>
+ * 22.{@link #downloadFabricJar(String)}<p>
+ * 23.{@link #latestFabricInstaller(String)}<p>
+ * 24.{@link #downloadForgeJar(String, String, String)}<p>
+ * 25.{@link #deleteMinecraftJar(String, String, String)}<p>
+ * 26.{@link #cleanUpServerPack(File, File, String, String, String, String)}
  * <p>
  * Requires an instance of {@link Configuration} from which to get all required information about the modpack and the
  * then to be generated server pack.
diff --git a/src/main/java/de/griefed/serverpackcreator/FilesSetup.java b/src/main/java/de/griefed/serverpackcreator/FilesSetup.java
index 8020edac7..f1fccd829 100644
--- a/src/main/java/de/griefed/serverpackcreator/FilesSetup.java
+++ b/src/main/java/de/griefed/serverpackcreator/FilesSetup.java
@@ -29,23 +29,23 @@ import java.nio.file.Paths;
 /**
  * <strong>Table of methods</strong>
  * <p>
- * {@link #FilesSetup(LocalizationManager)}<p>
- * {@link #getConfigFile()}<p>
- * {@link #getOldConfigFile()}<p>
- * {@link #getPropertiesFile()}<p>
- * {@link #getIconFile()}<p>
- * {@link #getForgeWindowsFile()}<p>
- * {@link #getForgeLinuxFile()}<p>
- * {@link #getFabricWindowsFile()}
- * {@link #getFabricLinuxFile()}
- * {@link #filesSetup()}<p>
- * {@link #checkForConfig()}<p>
- * {@link #checkForFabricLinux()}<p>
- * {@link #checkForFabricWindows()}<p>
- * {@link #checkForForgeLinux()}<p>
- * {@link #checkForForgeWindows()}<p>
- * {@link #checkForProperties()}<p>
- * {@link #checkForIcon()}
+ * 1. {@link #FilesSetup(LocalizationManager)}<p>
+ * 2. {@link #getConfigFile()}<p>
+ * 3. {@link #getOldConfigFile()}<p>
+ * 4. {@link #getPropertiesFile()}<p>
+ * 5. {@link #getIconFile()}<p>
+ * 6. {@link #getForgeWindowsFile()}<p>
+ * 7. {@link #getForgeLinuxFile()}<p>
+ * 8. {@link #getFabricWindowsFile()}
+ * 9. {@link #getFabricLinuxFile()}
+ * 10.{@link #filesSetup()}<p>
+ * 11.{@link #checkForConfig()}<p>
+ * 12.{@link #checkForFabricLinux()}<p>
+ * 13.{@link #checkForFabricWindows()}<p>
+ * 14.{@link #checkForForgeLinux()}<p>
+ * 15.{@link #checkForForgeWindows()}<p>
+ * 16.{@link #checkForProperties()}<p>
+ * 17.{@link #checkForIcon()}
  * <p>
  * Requires instances of {@link LocalizationManager} for use of localization, but creates one if injected one is null.
  * <p>
-- 
GitLab


From 80d59e7e16ecc3e0fbc04f32544efac499a45f9d Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Sat, 1 May 2021 16:19:27 +0200
Subject: [PATCH 23/91] refactor(DI): Update javadocs and a couple of minor
 fixes

---
 .../serverpackcreator/Configuration.java      | 832 ++++++++++++++----
 .../serverpackcreator/CreateServerPack.java   |  66 +-
 .../griefed/serverpackcreator/FilesSetup.java |  63 +-
 3 files changed, 714 insertions(+), 247 deletions(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/Configuration.java b/src/main/java/de/griefed/serverpackcreator/Configuration.java
index 5d35e4edc..b8eb53fd0 100644
--- a/src/main/java/de/griefed/serverpackcreator/Configuration.java
+++ b/src/main/java/de/griefed/serverpackcreator/Configuration.java
@@ -17,7 +17,6 @@
  *
  * The full license can be found at https:github.com/Griefed/ServerPackCreator/blob/main/LICENSE
  */
-//TODO: Write table of contents
 package de.griefed.serverpackcreator;
 
 import com.fasterxml.jackson.databind.DeserializationFeature;
@@ -47,15 +46,94 @@ import java.nio.channels.ReadableByteChannel;
 import java.nio.file.Files;
 import java.nio.file.Paths;
 import java.util.*;
-//TODO: Write docs for class
-public class Configuration {
 
+/**
+ * <strong>Table of methods</strong><p>
+ * 1. {@link #Configuration(LocalizationManager, CurseCreateModpack)}<br>
+ * 2. {@link #getOldConfigFile()}<br>
+ * 3. {@link #getConfigFile()}<br>
+ * 4. {@link #getMinecraftManifestUrl()}<br>
+ * 5. {@link #getForgeManifestUrl()}<br>
+ * 6. {@link #getFabricManifestUrl()}<br>
+ * 7. {@link #getConfig()}<br>
+ * 8. {@link #setConfig(Config)}<br>
+ * 9. {@link #getFallbackModsList()}<br>
+ * 10.{@link #getClientMods()}<br>
+ * 11.{@link #setClientMods(List)}<br>
+ * 12.{@link #getCopyDirs()}<br>
+ * 13.{@link #setCopyDirs(List)}<br>
+ * 14.{@link #getModpackDir()}<br>
+ * 15.{@link #setModpackDir(String)}<br>
+ * 16.{@link #getJavaPath()}<br>
+ * 17.{@link #setJavaPath(String)}<br>
+ * 18.{@link #getMinecraftVersion()}<br>
+ * 19.{@link #setMinecraftVersion(String)}<br>
+ * 20.{@link #getModLoader()}<br>
+ * 21.{@link #setModLoader(String)}<br>
+ * 22.{@link #getModLoaderVersion()}<br>
+ * 23.{@link #setModLoaderVersion(String)}<br>
+ * 24.{@link #getIncludeServerInstallation()}<br>
+ * 25.{@link #setIncludeServerInstallation(boolean)}<br>
+ * 26.{@link #getIncludeServerIcon()}<br>
+ * 27.{@link #setIncludeServerIcon(boolean)}<br>
+ * 28.{@link #getIncludeServerProperties()}<br>
+ * 29.{@link #setIncludeServerProperties(boolean)}<br>
+ * 30.{@link #getIncludeStartScripts()}<br>
+ * 31.{@link #setIncludeStartScripts(boolean)}<br>
+ * 32.{@link #getIncludeZipCreation()}<br>
+ * 33.{@link #setIncludeZipCreation(boolean)}<br>
+ * 34.{@link #getProjectID()}<br>
+ * 35.{@link #setProjectID(int)}<br>
+ * 36.{@link #getProjectFileID()}<br>
+ * 37.{@link #setProjectFileID(int)}<br>
+ * 38.{@link #checkConfigFile(File)}<br>
+ * 39.{@link #isDir(String)}<br>
+ * 40.{@link #isCurse()}<br>
+ * 41.{@link #containsFabric(CurseModpack)}<br>
+ * 42.{@link #suggestCopyDirs(String)}<br>
+ * 43.{@link #checkCurseForge(String)}<br>
+ * 44.{@link #convertToBoolean(String)}<br>
+ * 45.{@link #printConfig(String, List, List, boolean, String, String, String, String, boolean, boolean, boolean, boolean)}<br>
+ * 46.{@link #checkModpackDir(String)}<br>
+ * 47.{@link #checkCopyDirs(List, String)}<br>
+ * 48.{@link #getJavaPathFromSystem(String)}<br>
+ * 49.{@link #checkJavaPath(String)}<br>
+ * 50.{@link #checkModloader(String)}<br>
+ * 51.{@link #setModLoaderCase(String)}<br>
+ * 52.{@link #checkModloaderVersion(String, String)}<br>
+ * 53.{@link #isMinecraftVersionCorrect(String)}<br>
+ * 54.{@link #isFabricVersionCorrect(String)}<br>
+ * 55.{@link #isForgeVersionCorrect(String)}<br>
+ * 56.{@link #latestFabricLoader(String)}<br>
+ * 57.{@link #createConfigurationFile()}<br>
+ * 58.{@link #readStringArray()}<br>
+ * 59.{@link #buildString(String...)}<br>
+ * 60.{@link #readBoolean()}<br>
+ * 61.{@link #writeConfigToFile(String, String, String, boolean, String, String, String, String, boolean, boolean, boolean, boolean, File, boolean)}
+ * <p>
+ * Requires an instance of {@link CurseCreateModpack} in order to create a modpack from scratch should {@link #modpackDir}
+ * be a combination of a CurseForge projectID and fileID.<p>
+ * Requires an instance of {@link LocalizationManager} for use of localization, but creates one if injected one is null.<p>
+ * Loads a configuration from a serverpackcreator.conf-file in the same directory in which ServerPackCreator resides in.
+ * 
+ */
+public class Configuration {
     private static final Logger appLogger = LogManager.getLogger(Configuration.class);
-    private final File oldConfigFile = new File("creator.conf");
-    private final File configFile = new File("serverpackcreator.conf");
+
     private LocalizationManager localizationManager;
     private CurseCreateModpack curseCreateModpack;
 
+    /**
+     * <strong>Constructor</strong><p>
+     * Used for Dependency Injection.<p>
+     * Receives an instance of {@link LocalizationManager} or creates one if the received
+     * one is null. Required for use of localization.<p>
+     * Receives an instance of {@link CurseCreateModpack} in case the modpack has to be created from a combination of
+     * CurseForge projectID and fileID, from which to <em>then</em> create the server pack.
+     * @param injectedLocalizationManager Instance of {@link LocalizationManager} required for localized log messages.
+     * @param injectedCurseCreateModpack Instance of {@link CurseCreateModpack} in case the modpack has to be created from a combination of
+     * CurseForge projectID and fileID, from which to <em>then</em> create the server pack.
+     */
     public Configuration(LocalizationManager injectedLocalizationManager, CurseCreateModpack injectedCurseCreateModpack) {
         if (injectedLocalizationManager == null) {
             this.localizationManager = new LocalizationManager();
@@ -70,7 +148,10 @@ public class Configuration {
         }
     }
 
-    //-- If you wish to expand this list, fork this repository, make your changes, and submit a PR -------------------------
+    private final File oldConfigFile = new File("creator.conf");
+    private final File configFile = new File("serverpackcreator.conf");
+
+//-- If you wish to expand this list, fork this repository, make your changes, and submit a PR -------------------------
     private final List<String> fallbackModsList = Arrays.asList(
             "AmbientSounds",
             "BackTools",
@@ -121,140 +202,336 @@ public class Configuration {
 
     private Config config;
 
+    /**
+     * Getter for creator.conf.
+     * @return File. Returns the creator.conf-file for use in {@link #writeConfigToFile(String, String, String, boolean, String, String, String, String, boolean, boolean, boolean, boolean, File, boolean)}
+     */
     public File getOldConfigFile() {
         return oldConfigFile;
     }
 
+    /**
+     * Getter for serverpackcreator.conf.
+     * @return File. Returns the serverpackcreator.conf-file for use in <br>
+     * {@link #isCurse()},<br>
+     * {@link #createConfigurationFile()},<br>
+     * {@link #writeConfigToFile(String, String, String, boolean, String, String, String, String, boolean, boolean, boolean, boolean, File, boolean)}
+     */
     public File getConfigFile() {
         return configFile;
     }
 
+    /**
+     * Getter for Mojang's Minecraft version-manifest.
+     * @return String. Returns the URL to the JSON-file for use in {@link #isMinecraftVersionCorrect(String)}
+     */
     String getMinecraftManifestUrl() {
         return "https://launchermeta.mojang.com/mc/game/version_manifest.json";
     }
 
+    /**
+     * Getter for Forge's version-manifest.
+     * @return String. Returns the URL to the JSON-file for use in {@link #isForgeVersionCorrect(String)}
+     */
     String getForgeManifestUrl() {
         return "https://files.minecraftforge.net/net/minecraftforge/forge/maven-metadata.json";
     }
 
+    /**
+     * Getter for Fabric's version-manifest.
+     * @return String. Returns the URL to the JSON-file for use in {@link #isFabricVersionCorrect(String)}
+     */
     String getFabricManifestUrl() {
         return "https://maven.fabricmc.net/net/fabricmc/fabric-loader/maven-metadata.xml";
     }
 
-    public com.typesafe.config.Config getConfig() {
+    /**
+     * Getter for a {@link Config} containing a parsed configuration-file.
+     * @return Config. Returns parsed serverpackcreator.conf for use in<br>
+     * {@link #checkConfigFile(File)}<br>
+     * {@link #isDir(String)}<br>
+     * {@link #isCurse()}
+     */
+    public Config getConfig() {
         return config;
     }
-    public void setConfig(com.typesafe.config.Config newConfig) {
+
+    /**
+     * Setter for a {@link Config} containing a parsed configuration-file.
+     * For use in {@link #checkConfigFile(File)}
+     */
+    public void setConfig(Config newConfig) {
         this.config = newConfig;
     }
 
+    /**
+     * Getter for the fallback clientside-only mods-list, in case no customized one is provided by the user.
+     * @return List String. Returns the fallback clientside-only mods-list for use in {@link #checkConfigFile(File)}
+     */
     List<String> getFallbackModsList() {
         return fallbackModsList;
     }
 
+    /**
+     * Getter for a list of clientside-only mods to exclude from server pack.
+     * @return List String. Returns the list of clientside-only mods for use in<br>
+     * {@link #checkConfigFile(File)}<br>
+     * {@link #isCurse()}
+     */
     List<String> getClientMods() {
         return clientMods;
     }
+
+    /**
+     * Setter for the list of clientside-only mods to exclude from server pack.
+     * For use in {@link #checkConfigFile(File)}
+     */
     void setClientMods(List<String> newClientMods) {
         this.clientMods = newClientMods;
     }
 
+    /**
+     * Getter for the list of directories in the modpack to copy to the server pack.
+     * @return List String. Returns the list of directories to copy to the server pack for use in<br>
+     * {@link #checkConfigFile(File)}<br>
+     * {@link #isCurse()}
+     */
     List<String> getCopyDirs() {
         return copyDirs;
     }
+
+    /**
+     * Setter for the list of directories in the modpack to copy to the server pack.
+     * For use in {@link #isDir(String)} and {@link #isCurse()}
+     */
     void setCopyDirs(List<String> newCopyDirs) {
         this.copyDirs = newCopyDirs;
     }
 
+    /**
+     * Getter for the path to the modpack directory.
+     * @return String. Returns the path to the modpack directory for use in<br>
+     * {@link #checkConfigFile(File)}<br>
+     * {@link #isDir(String)}<br>
+     * {@link #isCurse()}
+     */
     String getModpackDir() {
         return modpackDir;
     }
+
+    /**
+     * Setter for the path to the modpack directory. Replaces any occurrences of \ with /.
+     * For use in {@link #isDir(String)} and {@link #isCurse()}
+     */
     void setModpackDir(String newModpackDir) {
         newModpackDir = newModpackDir.replace("\\","/");
         this.modpackDir = newModpackDir;
     }
 
+    /**
+     * Getter for the path to the Java executable/binary.
+     * @return String. Returns the path to the Java executable/binary for use in {@link #checkConfigFile(File)} and {@link #isCurse()}
+     */
     String getJavaPath() {
         return javaPath;
     }
+
+    /**
+     * Setter for the path to the Java executable/binary. Replaces any occurrences of \ with /.
+     * For use in {@link #isDir(String)} and {@link #isCurse()}
+     */
     void setJavaPath(String newJavaPath) {
         newJavaPath = newJavaPath.replace("\\", "/");
         this.javaPath = newJavaPath;
     }
 
+    /**
+     * Getter for the version of Minecraft used by the modpack.
+     * @return String. Returns the  for use in {@link #}
+     */
     String getMinecraftVersion() {
         return minecraftVersion;
     }
+
+    /**
+     * Setter for the Minecraft version used by the modpack.
+     * For use in {@link #isDir(String)} and {@link #isCurse()}
+     */
     void setMinecraftVersion(String newMinecraftVersion) {
         this.minecraftVersion = newMinecraftVersion;
     }
 
+    /**
+     * Getter for the modloader used by the modpack.
+     * @return String. Returns the modloader used by the modpack for use in<br>
+     * {@link #checkConfigFile(File)}<br>
+     * {@link #isDir(String)}<br>
+     * {@link #isCurse()}
+     */
     String getModLoader() {
         return modLoader;
     }
+
+    /**
+     * Setter for the modloader used by the modpack.
+     * For use in {@link #isDir(String)} and {@link #isCurse()}
+     */
     void setModLoader(String newModLoader) {
         this.modLoader = newModLoader;
     }
 
+    /**
+     * Getter for the version of the modloader used by the modpack.
+     * @return String. Returns the version of the modloader used by the modpack for use in {@link #checkConfigFile(File)} and {@link #isCurse()}
+     */
     String getModLoaderVersion() {
         return modLoaderVersion;
     }
+
+    /**
+     * Setter for the version of the modloader used by the modpack.
+     * For use in {@link #isDir(String)} and {@link #isCurse()}
+     */
     void setModLoaderVersion(String newModLoaderVersion) {
         this.modLoaderVersion = newModLoaderVersion;
     }
 
+    /**
+     * Getter for whether the modloader server installation should be included.
+     * @return Boolean. Returns whether the server installation should be included, for use in<br>
+     * {@link #checkConfigFile(File)}<br>
+     * {@link #isDir(String)}<br>
+     * {@link #isCurse()}
+     */
     boolean getIncludeServerInstallation() {
         return includeServerInstallation;
     }
+
+    /**
+     * Setter for whether the modloader server installation should be included.
+     * For use in {@link #checkConfigFile(File)}
+     */
     void setIncludeServerInstallation(boolean newIncludeServerInstallation) {
         this.includeServerInstallation = newIncludeServerInstallation;
     }
 
+    /**
+     * Getter for whether the server-icon.png should be included in the server pack.
+     * @return Boolean. Returns whether the server-icon.png should be included in the server pack, for use in {@link #checkConfigFile(File)}
+     * and {@link #isCurse()}
+     */
     boolean getIncludeServerIcon() {
         return includeServerIcon;
     }
+
+    /**
+     * Setter for whether the server-icon.png should be included in the server pack.
+     * For use in {@link #checkConfigFile(File)}
+     */
     void setIncludeServerIcon(boolean newIncludeServerIcon) {
         this.includeServerIcon = newIncludeServerIcon;
     }
 
+    /**
+     * Getter for whether the server.properties should be included in the server pack.
+     * @return Boolean. Returns whether the server.properties should be included in the server pack, for use in {@link #}
+     */
     boolean getIncludeServerProperties() {
         return includeServerProperties;
     }
+
+    /**
+     * Setter for whether the server.properties should be included in the server pack.
+     * For use in {@link #checkConfigFile(File)}
+     */
     void setIncludeServerProperties(boolean newIncludeServerProperties) {
         this.includeServerProperties = newIncludeServerProperties;
     }
 
+    /**
+     * Getter for whether the start scripts should be included in the server pack.
+     * @return Boolean. Returns the whether the start scripts should be included in the server pack, for use in {@link #checkConfigFile(File)} and {@link #isCurse()}
+     */
     boolean getIncludeStartScripts() {
         return includeStartScripts;
     }
+
+    /**
+     * Setter for whether the start scripts should be included in the server pack.
+     * For use in {@link #checkConfigFile(File)}
+     */
     void setIncludeStartScripts(boolean newIncludeStartScripts) {
         this.includeStartScripts = newIncludeStartScripts;
     }
 
+    /**
+     * Getter for whether a ZIP-archive of the server pack should be created.
+     * @return Boolean. Returns whether a ZIP-archive of the server pack should be created, for use in {@link #checkConfigFile(File)} and {@link #isCurse()}
+     */
     boolean getIncludeZipCreation() {
         return includeZipCreation;
     }
+
+    /**
+     * Setter for whether a ZIP-archive of the server pack should be created.
+     * For use in {@link #checkConfigFile(File)}
+     */
     void setIncludeZipCreation(boolean newIncludeZipCreation) {
         this.includeZipCreation = newIncludeZipCreation;
     }
 
+    /**
+     * Getter for the CurseForge projectID of a modpack, which will be created by {@link CurseCreateModpack#curseForgeModpack(String, Integer, Integer)}.
+     * @return Integer. Returns the CurseForge projectID of a modpack, for use in {@link CurseCreateModpack#curseForgeModpack(String, Integer, Integer)} and {@link #checkCurseForge(String)}
+     */
     int getProjectID() {
         return projectID;
     }
+
+    /**
+     * Setter for the CurseForge projectID of a modpack, which will be created by {@link CurseCreateModpack#curseForgeModpack(String, Integer, Integer)}.
+     * For use in {@link #checkCurseForge(String)}
+     */
     void setProjectID(int newProjectID) {
         this.projectID = newProjectID;
     }
 
+    /**
+     * Getter for the CurseForge file of a modpack, which will be created by {@link CurseCreateModpack#curseForgeModpack(String, Integer, Integer)}.
+     * @return Integer. Returns the CurseForge fileID of a modpack, for use in {@link #isCurse()} and {@link #checkCurseForge(String)}
+     */
     int getProjectFileID() {
         return projectFileID;
     }
+
+    /**
+     * Setter for the CurseForge file of a modpack, which will be created by {@link CurseCreateModpack#curseForgeModpack(String, Integer, Integer)}.
+     * For use in {@link #checkCurseForge(String)}
+     */
     void setProjectFileID(int newProjectFileID) {
         this.projectFileID = newProjectFileID;
     }
 
-    /** Check the config file for configuration errors. If an error is found, the log file will tell the user where the error is, so they can fix their config.
+    /**
+     * Sets {@link #setConfig(Config)} and calls checks for the provided configuration-file. If any check returns <code>true</code>
+     * then the server pack will not be created. In order to find out which check failed, the user has to check their
+     * serverpackcreator.log in the logs directory. Calls<br>
+     * {@link #setConfig(Config)}<br>
+     * {@link #getConfig()}<br>
+     * {@link #setClientMods(List)}<br>
+     * {@link #getFallbackModsList()}<br>
+     * {@link #setIncludeServerInstallation(boolean)}<br>
+     * {@link #setIncludeServerIcon(boolean)}<br>
+     * {@link #setIncludeServerProperties(boolean)}<br>
+     * {@link #setIncludeStartScripts(boolean)}<br>
+     * {@link #setIncludeZipCreation(boolean)}<br>
+     * {@link #checkModpackDir(String)}<br>
+     * {@link #checkCurseForge(String)}<br>
+     * {@link #isDir(String)}<br>
+     * {@link #isCurse()}<br>
+     * {@link #printConfig(String, List, List, boolean, String, String, String, String, boolean, boolean, boolean, boolean)}
      * @param configFile The configuration file to check. Must be a valid configuration file for serverpackcreator to work.
-     * @return Return true if error is found in user's configuration. If an error is found, the application will exit in main.
+     * @return Boolean. Returns <code>false</code> if all checks are passed.
      */
     public boolean checkConfigFile(File configFile) {
         boolean configHasError;
@@ -306,9 +583,29 @@ public class Configuration {
         return configHasError;
     }
 
-    /** Checks whether the specified modpack exists. If it does, the config file is checked for errors. Should any error be found, it will return true so the configCheck method informs the user about an invalid configuration.
-     * @param modpackDir String. Should an existing modpack be specified, all configurations are read from local file and the server pack is created, if config is correct.
-     * @return Boolean. Returns true if an error is found during configuration check. False if the configuration is deemed valid.
+    /**
+     * If the in the configuration specified modpack dir is an existing directory, checks are made for valid configuration
+     * of: directories to copy to server pack,<br>
+     * if includeServerInstallation is <code>true</code>) path to Java executable/binary, Minecraft version, modloader and modloader version.
+     * Calls<br>
+     * {@link #setModpackDir(String)}<br>
+     * {@link #getModpackDir()}<br>
+     * {@link #checkCopyDirs(List, String)}<br>
+     * {@link #setCopyDirs(List)}<br>
+     * {@link #getIncludeServerInstallation()}<br>
+     * {@link #checkJavaPath(String)}<br>
+     * {@link #setJavaPath(String)}<br>
+     * {@link #getJavaPathFromSystem(String)}<br>
+     * {@link #isMinecraftVersionCorrect(String)}<br>
+     * {@link #setMinecraftVersion(String)}<br>
+     * {@link #checkModloader(String)}<br>
+     * {@link #setModLoader(String)}<br>
+     * {@link #setModLoaderCase(String)}<br>
+     * {@link #checkModloaderVersion(String, String)}<br>
+     * {@link #setModLoaderVersion(String)}<br>
+     * @param modpackDir String. Should an existing modpack be specified, all configurations are read from the provided
+     *                   configuration file and checks are made in this directory.
+     * @return Boolean. Returns true if an error is found during configuration check.
      */
     private boolean isDir(String modpackDir) {
         boolean configHasError = false;
@@ -322,7 +619,7 @@ public class Configuration {
             if (checkJavaPath(getConfig().getString("javaPath"))) {
                 setJavaPath(getConfig().getString("javaPath"));
             } else {
-                String tmpJavaPath = getJavaPath(getConfig().getString("javaPath"));
+                String tmpJavaPath = getJavaPathFromSystem(getConfig().getString("javaPath"));
                 if (checkJavaPath(tmpJavaPath)) {
                     setJavaPath(tmpJavaPath);
                 } else { configHasError = true; } }
@@ -332,7 +629,7 @@ public class Configuration {
             } else { configHasError = true; }
 
             if (checkModloader(getConfig().getString("modLoader"))) {
-                setModLoader(setModloader(getConfig().getString("modLoader")));
+                setModLoader(setModLoaderCase(getConfig().getString("modLoader")));
             } else { configHasError = true; }
 
             if (checkModloaderVersion(getModLoader(), getConfig().getString("modLoaderVersion"))) {
@@ -349,8 +646,29 @@ public class Configuration {
         return configHasError;
     }
 
-    /** Checks whether the specified projectID,fileID combination is a valid CurseForge project and file and whether the resulting directory exists. If the directory does not exist, make calls to other methods which create the modpack. Parses information gathered from the modpack to later replace the previous configuration file.
-     * @return Boolean. Currently always returns true so serverpackcreator does not go straight into server pack creation after the creation of the specified modpack. Gives the user the chance to check their config before actually creating the server pack.
+    /**
+     * If modpackDir in the configuration file is a CurseForge projectID,fileID combination, then the modpack is first
+     * created from said combination, using {@link CurseCreateModpack#curseForgeModpack(String, Integer, Integer)},
+     * before proceeding to checking the rest of the configuration. If everything passes and the modpack was created,
+     * a new configuration file is created, replacing the one used to create the modpack in the first place, with the
+     * modpackDir field pointing to the newly created modpack. Calls<br>
+     * {@link CurseAPI} and various methods of it.<br>
+     * {@link #setModpackDir(String)}<br>
+     * {@link #getModpackDir()}<br>
+     * {@link CurseCreateModpack#curseForgeModpack(String, Integer, Integer)}<br>
+     * {@link CurseModpack}<br>
+     * {@link #containsFabric(CurseModpack)}<br>
+     * {@link #setModLoader(String)}<br>
+     * {@link #setModLoaderVersion(String)}<br>
+     * {@link #setModLoaderCase(String)}<br>
+     * {@link #checkJavaPath(String)}<br>
+     * {@link #setJavaPath(String)}<br>
+     * {@link #getJavaPathFromSystem(String)}<br>
+     * {@link #setCopyDirs(List)}<br>
+     * {@link #suggestCopyDirs(String)}<br>
+     * {@link #writeConfigToFile(String, String, String, boolean, String, String, String, String, boolean, boolean, boolean, boolean, File, boolean)}<br>
+     * @return Boolean. Returns false unless an error was encountered during either the acquisition of the CurseForge
+     * project name and displayname, or when the creation of the modpack fails.
      */
     private boolean isCurse() {
         boolean configHasError = false;
@@ -364,7 +682,9 @@ public class Configuration {
                     catch (NullPointerException npe) { appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.iscurse.display"));
 
                         try { displayName = Objects.requireNonNull(CurseAPI.project(getProjectID()).get().files().fileWithID(getProjectFileID())).nameOnDisk(); }
-                        catch (NullPointerException npe2) { displayName = String.format("%d", getProjectFileID()); } } }
+                        catch (NullPointerException npe2) { displayName = String.format("%d", getProjectFileID()); }
+                    }
+                }
 
                 catch (CurseException cex) { appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.iscurse.curseforge")); }
 
@@ -398,7 +718,7 @@ public class Configuration {
 
                         } else {
 
-                            setModLoader(setModloader(modLoaderVersion[0]));
+                            setModLoaderCase(modLoaderVersion[0]);
                             setModLoaderVersion(modLoaderVersion[1]);
 
                         }
@@ -409,7 +729,7 @@ public class Configuration {
                         setJavaPath(getConfig().getString("javaPath").replace("\\","/"));
 
                     } else {
-                        String tmpJavaPath = getJavaPath(getConfig().getString("javaPath").replace("\\","/"));
+                        String tmpJavaPath = getJavaPathFromSystem(getConfig().getString("javaPath").replace("\\","/"));
 
                         if (checkJavaPath(tmpJavaPath)) {
                             setJavaPath(tmpJavaPath);
@@ -432,6 +752,9 @@ public class Configuration {
                             getConfigFile(),
                             false
                     );
+
+                } else {
+                    configHasError = true;
                 }
             }
         } catch (CurseException cex) {
@@ -441,9 +764,12 @@ public class Configuration {
         return configHasError;
     }
 
-    /** Checks for the Jumploader mod in the project list of the modpack. If Jumploader is found, the modloader in the configuration will be set to Fabric.
-     * @param modpack Object. Contains information about our modpack. Used to get a list of all projects used in the modpack.
-     * @return Boolean. Returns true if Jumploader is found, false if not found.
+    /**
+     * Checks whether the projectID for the Jumploader mod is present in the list of mods required by the CurseForge modpack.
+     * If Jumploader is found, the modloader for the new configuration-file will be set to Fabric.
+     * @param modpack CurseModpack. Contains information about the CurseForge modpack. Used to get a list of all projects
+     *               required by the modpack.
+     * @return Boolean. Returns true if Jumploader is found.
      */
     private boolean containsFabric(CurseModpack modpack) {
         boolean hasJumploader = false;
@@ -460,9 +786,14 @@ public class Configuration {
         return hasJumploader;
     }
 
-    /** Creates a list of suggested directories to include in server pack which is later on written to a new configuration file.
-     * @param modpackDir String. The directory for which to gather a list of directories.
-     * @return List, String. Returns a list of directories inside the modpack, excluding well known client-side only directories which would not be needed by a server pack. If you have suggestions to this list, open an issue on https://github.com/Griefed/ServerPackCreator/issues
+    /**
+     * Creates a list of suggested directories to include in server pack which is later on written to a new configuration file.
+     * The list of directories to include in the server pack which is generated by this method excludes well know directories
+     * which would not be needed by a server pack. If you have suggestions to this list, open an issue on
+     * <a href=https://github.com/Griefed/ServerPackCreator/issues>GitHub</a>
+     * @param modpackDir String. The directory for which to gather a list of directories to copy to the server pack.
+     * @return List, String. Returns a list of directories inside the modpack, excluding well known client-side only
+     * directories.
      */
     private List<String> suggestCopyDirs(String modpackDir) {
         appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.suggestcopydirs.start"));
@@ -499,52 +830,97 @@ public class Configuration {
         return Arrays.asList(copyDirs.clone());
     }
 
-    /** Checks whether the modpackDir contains a valid projectID,fileID combination. ProjectIDs must be at least two digits long, fileIDs must be at least 5 digits long. Must be numbers separated by a ",".
+    /**
+     * Checks whether the specified modpack directory contains a valid projectID,fileID combination.
+     * ProjectIDs must be at least two digits long, fileIDs must be at least 5 digits long.
+     * Must be numbers separated by a ",". If modpackDir successfully matched a projectID,fileID combination, CurseForge
+     * is then checked for existence of said projectID and fileID. If the project can not be found or the file returns null
+     * then false is returned and the check is considered failed.
      * @param modpackDir String. The string which to check for a valid projectID,fileID combination.
      * @return Boolean. Returns true if the combination is deemed valid, false if not.
      */
     boolean checkCurseForge(String modpackDir) {
-        String[] projectFileIds;
+        String[] curseForgeIDCombination;
         boolean configCorrect = false;
 
         if (modpackDir.matches("[0-9]{2,},[0-9]{5,}")) {
 
-            projectFileIds = modpackDir.split(",");
+            curseForgeIDCombination = modpackDir.split(",");
+            int curseProjectID = Integer.parseInt(curseForgeIDCombination[0]);
+            int curseFileID= Integer.parseInt(curseForgeIDCombination[1]);
 
-            setProjectID(Integer.parseInt(projectFileIds[0]));
+            try {
+                if (CurseAPI.project(curseProjectID).isPresent()) {
+                    setProjectID(curseProjectID);
+                    configCorrect = true;
+                }
+            } catch (CurseException cex) {
+                appLogger.error(String.format(localizationManager.getLocalizedString("configcheck.log.error.iscurse.project"), curseProjectID),cex);
+                configCorrect = false;
+            }
 
-            setProjectFileID(Integer.parseInt(projectFileIds[1]));
+            try {
+                if (CurseAPI.project(curseProjectID).get().files().fileWithID(curseFileID) != null) {
+                    setProjectFileID(curseFileID);
+                    configCorrect = true;
+                }
+            } catch (CurseException cex) {
+                appLogger.error(String.format(localizationManager.getLocalizedString("configcheck.log.error.iscurse.file"), curseFileID), cex);
+                configCorrect = false;
+            }
 
             appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.checkcurseforge.info"));
             appLogger.info(String.format(localizationManager.getLocalizedString("configcheck.log.info.checkcurseforge.return"), getProjectID(), getProjectFileID()));
             appLogger.warn(localizationManager.getLocalizedString("configcheck.log.warn.checkcurseforge.warn"));
 
-            configCorrect = true;
 
         } else { appLogger.warn(localizationManager.getLocalizedString("configcheck.log.warn.checkcurseforge.warn2")); }
 
         return configCorrect;
     }
 
-    /** Converts various strings to booleans.
+    /**
+     * Converts various strings to booleans, by using regex, to allow for more variations in input.<br>
+     * <strong>Converted to <code>TRUE</code> are:<br></strong>
+     * <code>[Tt]rue</code><br>
+     * <code>1</code><br>
+     * <code>[Yy]es</code><br>
+     * <code>[Yy]</code><br>
+     * Language Key <code>cli.input.true</code><br>
+     * Language Key <code>cli.input.yes</code><br>
+     * Language Key <code>cli.input.yes.short</code><br>
+     * <strong>Converted to <code>FALSE</code> are:<br></strong>
+     * <code>[Ff]alse</code><br>
+     * <code>0</code><br>
+     * <code>[Nn]o</code><br>
+     * <code>[Nn]</code><br>
+     * Language Key <code>cli.input.false</code><br>
+     * Language Key <code>cli.input.no</code><br>
+     * Language Key <code>cli.input.no.short</code><br>
      * @param stringBoolean String. The string which should be converted to boolean if it matches certain patterns.
      * @return Boolean. Returns the corresponding boolean if match with pattern was found. If no match is found, assume and return false.
      */
     public boolean convertToBoolean(String stringBoolean) {
         boolean returnBoolean;
 
-        if (stringBoolean.matches("[Tt]rue") ||
-                stringBoolean.matches("1")       ||
-                stringBoolean.matches("[Yy]es")  ||
-                stringBoolean.matches("[Yy]"))    {
-
+        if (stringBoolean.matches("[Tt]rue")    ||
+                stringBoolean.matches("1")      ||
+                stringBoolean.matches("[Yy]es") ||
+                stringBoolean.matches("[Yy]")   ||
+                stringBoolean.matches(localizationManager.getLocalizedString("cli.input.true")) ||
+                stringBoolean.matches(localizationManager.getLocalizedString("cli.input.yes"))  ||
+                stringBoolean.matches(localizationManager.getLocalizedString("cli.input.yes.short"))
+        ){
             returnBoolean = true;
 
         } else if (stringBoolean.matches("[Ff]alse") ||
-                stringBoolean.matches("0")        ||
-                stringBoolean.matches("[Nn]o")    ||
-                stringBoolean.matches("[Nn]" ))    {
-
+                stringBoolean.matches("0")           ||
+                stringBoolean.matches("[Nn]o")       ||
+                stringBoolean.matches("[Nn]" )       ||
+                stringBoolean.matches(localizationManager.getLocalizedString("cli.input.false")) ||
+                stringBoolean.matches(localizationManager.getLocalizedString("cli.input.no"))    ||
+                stringBoolean.matches(localizationManager.getLocalizedString("cli.input.no.short"))
+        ){
             returnBoolean = false;
 
         } else {
@@ -555,19 +931,24 @@ public class Configuration {
         return returnBoolean;
     }
 
-    /** Prints the configuration.
-     * @param modpackDirectory String. Path to modpack directory.
-     * @param clientsideMods String List. List of clientside mods to delete from server pack.
-     * @param copyDirectories String List. List of directories to copy to server pack.
-     * @param installServer Boolean. Whether to install the modloader server.
-     * @param javaInstallPath String. Path to Java installation needed to install modloader server.
-     * @param minecraftVer String. Minecraft version the modpack uses.
-     * @param modloader String. Modloader the modpack uses.
-     * @param modloaderVersion String. Version of the modloader the modpack uses.
+    /**
+     * Prints all passed fields to the console and serverpackcreator.log. Used to show the user the configuration before
+     * ServerPackCreator starts the generation of the server pack or, if checks failed, to show the user their last
+     * configuration so they can more easily identify problems with said configuration.<br>
+     * Should a user report an issue on GitHub and include their logs (which I hope they do....), this would also
+     * help me help them. Logging is good. People should use more logging.
+     * @param modpackDirectory String. The used modpackDir field either from a configuration file or from configuration setup.
+     * @param clientsideMods String List. List of clientside-only mods to exclude from the server pack..
+     * @param copyDirectories String List. List of directories in the modpack which are to be included in the server pack.
+     * @param installServer Boolean. Whether to install the modloader server in the server pack.
+     * @param javaInstallPath String. Path to the Java executable/binary needed for installing the modloader server in the server pack.
+     * @param minecraftVer String. The Minecraft version the modpack uses.
+     * @param modloader String. The modloader the modpack uses.
+     * @param modloaderVersion String. The version of the modloader the modpack uses.
      * @param includeIcon Boolean. Whether to include the server-icon.png in the server pack.
      * @param includeProperties Boolean. Whether to include the server.properties in the server pack.
-     * @param includeScripts Boolean. Whether to include start scripts for the specified modloader in the server pack.
-     * @param includeZip Boolean. Whether to create a zip-archive of the server pack.
+     * @param includeScripts Boolean. Whether to include the start scripts for the specified modloader in the server pack.
+     * @param includeZip Boolean. Whether to create a zip-archive of the server pack, excluding the Minecraft server JAR according to Mojang's TOS and EULA.
      */
     void printConfig(String modpackDirectory,
                      List<String> clientsideMods,
@@ -585,7 +966,7 @@ public class Configuration {
         appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.printconfig.start"));
         appLogger.info(String.format(localizationManager.getLocalizedString("configcheck.log.info.printconfig.modpackdir"), modpackDirectory));
 
-        if (clientsideMods.size() == 0) {
+        if (clientsideMods.isEmpty()) {
             appLogger.warn(localizationManager.getLocalizedString("configcheck.log.warn.printconfig.noclientmods"));
         } else {
 
@@ -617,9 +998,13 @@ public class Configuration {
         appLogger.info(String.format(localizationManager.getLocalizedString("configcheck.log.info.printconfig.zip"), includeZip));
     }
 
-    /** Check whether the specified modpack directory exists.
-     * @param modpackDir String. The path to the modpack directory.
-     * @return Boolean. Returns true if the directory exists. False if not.
+    /**
+     * Checks whether the passed String is empty and if it is empty, prints the corresponding message to the console and
+     * serverpackcreator.log so the user knows what went wrong.<br>
+     * Checks whether the passed String is a directory and if it is not, prints the corresponding message to the console
+     * and serverpackcreator.log so the user knows what went wrong.
+     * @param modpackDir String. The path to the modpack directory to check whether it is empty and whether it is a directory.
+     * @return Boolean. Returns true if the directory exists.
      */
     boolean checkModpackDir(String modpackDir) {
         boolean configCorrect = false;
@@ -640,10 +1025,16 @@ public class Configuration {
         return configCorrect;
     }
 
-    /** Check whether the specified directories exist in the modpack directory.
-     * @param copyDirs String. The directories for which to check.
-     * @param modpackDir String. The path to the modpack directory in which to check for directories.
-     * @return Boolean. Returns true if all directories exist. False if any one does not.
+    /**
+     * Checks whether the passed list of directories which are supposed to be in the modpack directory is empty and
+     * prints a message to the console and serverpackcreator.log if it is.<br>
+     * Checks whether all directories in the list exist in the modpack directory and prints a message to the console
+     * and serverpackcreator.log if any one of the directories could not be found.
+     * @param copyDirs List String. The list of directories to check for existence.
+     * @param modpackDir String. The path to the modpack directory in which to check for existence of the passed list of
+     *                  directories.
+     * @return Boolean. Returns true if every directory was found in the modpack directory. If any single one was not found,
+     * false is returned.
      */
     boolean checkCopyDirs(List<String> copyDirs, String modpackDir) {
         boolean configCorrect = true;
@@ -669,11 +1060,15 @@ public class Configuration {
         return configCorrect;
     }
 
-    /** Automatically set Java path if none is specified
+    /**
+     * Checks the passed String whether it is empty, and if it is, automatically acquires the path to the users Java
+     * installation and appends bin/java.exe or bin/java depending on whether the path to said installation starts with
+     * Windows-typical C: prefix.
      * @param enteredPath String. The path to check whether it is empty.
-     * @return String. Return the entered Java path if it is not empty. Automatically determine path if empty.
+     * @return String. Returns the passed String as is if it is not empty. Returns the automatically acquired path to the
+     * Java executable/binary if the passed String was empty.
      */
-    String getJavaPath(String enteredPath) {
+    String getJavaPathFromSystem(String enteredPath) {
         String autoJavaPath;
 
         if (enteredPath.equals("")) {
@@ -696,9 +1091,10 @@ public class Configuration {
         }
     }
 
-    /** Checks whether the correct path to the Java installation was set.
-     * @param pathToJava String. The path to check for java.exe or java.
-     * @return Boolean. Returns true if the path was correctly set. False if not.
+    /**
+     * Checks whether the passed String ends with <code>java.exe</code> or <code>java</code> and whether the files exist.
+     * @param pathToJava String. The path to check for java.exe and java.
+     * @return Boolean. Returns true if the String ends with java.exe or java, and if either of these files exist.
      */
     boolean checkJavaPath(String pathToJava) {
         boolean configCorrect = false;
@@ -717,9 +1113,10 @@ public class Configuration {
         return configCorrect;
     }
 
-    /** Checks whether Forge or Fabric were specified as modloader.
+    /**
+     * Checks whether either Forge or Fabric were specified as the modloader.
      * @param modloader String. Check case insensitive for Forge or Fabric.
-     * @return Boolean. Returns true if the specified modloader is either Forge or Fabric. False if not.
+     * @return Boolean. Returns true if the specified modloader is either Forge or Fabric. False if neither.
      */
     boolean checkModloader(String modloader) {
         boolean configCorrect = false;
@@ -735,11 +1132,14 @@ public class Configuration {
         return configCorrect;
     }
 
-    /** Standardize the specified modloader.
-     * @param modloader String. If any case of Forge or Fabric was specified, return "Forge" or "Fabric", so users can enter "forge" or "fabric" or any combination of upper- and lowercase letters..
-     * @return String. Returns a standardized String of the specified modloader.
+    /**
+     * Ensures the modloader is normalized to first letter upper case and rest lower case. Basically allows the user to
+     * input Forge or Fabric in any combination of upper- and lowercase and ServerPackCreator will still be able to
+     * work with the users input.
+     * @param modloader String. The String to check for case-insensitive cases of either Forge or Fabric.
+     * @return String. Returns a normalized String of the specified modloader.
      */
-    String setModloader(String modloader) {
+    String setModLoaderCase(String modloader) {
         String returnLoader = null;
 
         if (modloader.equalsIgnoreCase("Forge")) {
@@ -753,10 +1153,16 @@ public class Configuration {
         return returnLoader;
     }
 
-    /** Determine whether to check for correct Forge or correct Fabric modloader version.
-     * @param modloader String. Determines whether the check for Forge or Fabric is called.
-     * @param modloaderVersion String. The version of the modloader to check for.
-     * @return Boolean. Returns true if the specified modloader version is correct. False if not.
+    /**
+     * Depending on whether Forge or Fabric was specified as the modloader, this will call the corresponding version check
+     * to verify that the user correctly set their modloader version.<br>
+     * If the user specified Forge as their modloader, {@link #isForgeVersionCorrect(String)} is called and the version
+     * the user specified is checked against Forge's version manifest..<br>
+     * If the user specified Fabric as their modloader, {@link #isFabricVersionCorrect(String)} is called and the version
+     * the user specified is checked against Fabric's version manifest.
+     * @param modloader String. The passed modloader which determines whether the check for Forge or Fabric is called.
+     * @param modloaderVersion String. The version of the modloader which is checked against the corresponding modloaders manifest.
+     * @return Boolean. Returns true if the specified modloader version was found in the corresponding manifest.
      */
     boolean checkModloaderVersion(String modloader, String modloaderVersion) {
         boolean isVersionCorrect = false;
@@ -775,9 +1181,11 @@ public class Configuration {
         return isVersionCorrect;
     }
 
-    /** Check the specified Minecraft version against Mojang's version manifest to validate the version.
-     * @param minecraftVersion Minecraft version to check.
-     * @return Boolean. Returns true if the specified Minecraft version could be found in Mojang's manifest. False if not.
+    /**
+     * Checks whether the passed String is empty and if it is not. check the String against Mojang's version manifest
+     * to validate the version.
+     * @param minecraftVersion String. The version to check for in Mojang's version manifest.
+     * @return Boolean. Returns true if the specified Minecraft version could be found in Mojang's manifest.
      */
     boolean isMinecraftVersionCorrect(String minecraftVersion) {
         if (!minecraftVersion.equals("")) {
@@ -842,161 +1250,182 @@ public class Configuration {
         }
     }
 
-    /** Check the specified Fabric version against Fabric's version manifest to validate the version.
-     * @param fabricVersion String. The Fabric version to check.
-     * @return Boolean. Returns true if the specified Fabric version could be found in Fabric's manifest. False if not.
+    /**
+     * Checks whether the passed String is empty and if it is not. check the String against Fabric's version manifest
+     * to validate the version.
+     * @param fabricVersion String. The version to check for in Fabric's version manifest.
+     * @return Boolean. Returns true if the specified fabric version could be found in Fabric's manifest.
      */
     boolean isFabricVersionCorrect(String fabricVersion) {
-        try {
-            URL manifestJsonURL = new URL(getFabricManifestUrl());
+        if (!fabricVersion.equals("")) {
+            try {
+                URL manifestJsonURL = new URL(getFabricManifestUrl());
 
-            ReadableByteChannel readableByteChannel = Channels.newChannel(manifestJsonURL.openStream());
+                ReadableByteChannel readableByteChannel = Channels.newChannel(manifestJsonURL.openStream());
 
-            FileOutputStream downloadManifestOutputStream;
+                FileOutputStream downloadManifestOutputStream;
 
-            try {
-                downloadManifestOutputStream = new FileOutputStream("fabric-manifest.xml");
-            } catch (FileNotFoundException ex) {
+                try {
+                    downloadManifestOutputStream = new FileOutputStream("fabric-manifest.xml");
+                } catch (FileNotFoundException ex) {
 
-                appLogger.debug(localizationManager.getLocalizedString("configcheck.log.debug.isfabricversioncorrect"), ex);
-                File file = new File("fabric-manifest.xml");
+                    appLogger.debug(localizationManager.getLocalizedString("configcheck.log.debug.isfabricversioncorrect"), ex);
+                    File file = new File("fabric-manifest.xml");
 
-                if (!file.exists()){
+                    if (!file.exists()) {
 
-                    appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.isfabricversioncorrect.create"));
-                    boolean jsonCreated = file.createNewFile();
+                        appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.isfabricversioncorrect.create"));
+                        boolean jsonCreated = file.createNewFile();
 
-                    if (jsonCreated) {
+                        if (jsonCreated) {
 
-                        appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.isfabricversioncorrect.created"));
+                            appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.isfabricversioncorrect.created"));
 
-                    } else {
-                        appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.isfabricversioncorrect.parse"));
+                        } else {
+                            appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.isfabricversioncorrect.parse"));
+                        }
                     }
+                    downloadManifestOutputStream = new FileOutputStream("fabric-manifest.xml");
                 }
-                downloadManifestOutputStream = new FileOutputStream("fabric-manifest.xml");
-            }
-            FileChannel downloadManifestOutputStreamChannel = downloadManifestOutputStream.getChannel();
+                FileChannel downloadManifestOutputStreamChannel = downloadManifestOutputStream.getChannel();
 
-            downloadManifestOutputStream.getChannel().transferFrom(readableByteChannel, 0, Long.MAX_VALUE);
-            downloadManifestOutputStream.flush();
-            downloadManifestOutputStream.close();
+                downloadManifestOutputStream.getChannel().transferFrom(readableByteChannel, 0, Long.MAX_VALUE);
+                downloadManifestOutputStream.flush();
+                downloadManifestOutputStream.close();
 
-            readableByteChannel.close();
-            downloadManifestOutputStreamChannel.close();
+                readableByteChannel.close();
+                downloadManifestOutputStreamChannel.close();
 
-            File manifestXMLFile = new File("fabric-manifest.xml");
-            Scanner xmlReader = new Scanner(manifestXMLFile);
+                File manifestXMLFile = new File("fabric-manifest.xml");
+                Scanner xmlReader = new Scanner(manifestXMLFile);
 
-            ArrayList<String> dataList = new ArrayList<>();
+                ArrayList<String> dataList = new ArrayList<>();
 
-            while (xmlReader.hasNextLine()) {
-                dataList.add(xmlReader.nextLine());
-            }
+                while (xmlReader.hasNextLine()) {
+                    dataList.add(xmlReader.nextLine());
+                }
+
+                String[] dataArray = new String[dataList.size()];
+
+                String manifestXML;
+
+                dataList.toArray(dataArray);
 
-            String[] dataArray = new String[dataList.size()];
+                manifestXML = Arrays.toString(dataArray);
 
-            String manifestXML;
+                xmlReader.close();
 
-            dataList.toArray(dataArray);
+                manifestXML = manifestXML.replaceAll("\\s", "");
 
-            manifestXML = Arrays.toString(dataArray);
+                boolean contains = manifestXML.trim().contains(String.format("%s", fabricVersion));
 
-            xmlReader.close();
+                manifestXMLFile.deleteOnExit();
 
-            manifestXML = manifestXML.replaceAll("\\s", "");
+                return contains;
 
-            boolean contains = manifestXML.trim().contains(String.format("%s", fabricVersion));
+            } catch (Exception ex) {
 
-            manifestXMLFile.deleteOnExit();
+                appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.isfabricversioncorrect.validate"), ex);
+                return false;
+            }
 
-            return contains;
-        } catch (Exception ex) {
+        } else {
 
-            appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.isfabricversioncorrect.validate"), ex);
+            appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.isfabricversioncorrect.empty"));
             return false;
         }
     }
 
-    /** Checks Forge version for errors (basically for its availability in Forge manifest)
-     * @param forgeVersion String. The Forge version to check.
-     * @return Boolean. Returns true if Forge version correct and false if it isn't correct.
+    /**
+     * Checks whether the passed String is empty and if it is not. check the String against Forge's version manifest
+     * to validate the version.
+     * @param forgeVersion String. The version to check for in Forge's version manifest.
+     * @return Boolean. Returns true if the specified Forge version could be found in Forge's manifest.
      */
     boolean isForgeVersionCorrect(String forgeVersion) {
-        try {
-            URL manifestJsonURL = new URL(getForgeManifestUrl());
-            ReadableByteChannel readableByteChannel = Channels.newChannel(manifestJsonURL.openStream());
-            FileOutputStream downloadManifestOutputStream;
-
+        if (!forgeVersion.equals("")) {
             try {
+                URL manifestJsonURL = new URL(getForgeManifestUrl());
+                ReadableByteChannel readableByteChannel = Channels.newChannel(manifestJsonURL.openStream());
+                FileOutputStream downloadManifestOutputStream;
+
+                try {
 
-                downloadManifestOutputStream = new FileOutputStream("forge-manifest.json");
+                    downloadManifestOutputStream = new FileOutputStream("forge-manifest.json");
 
-            } catch (FileNotFoundException ex) {
+                } catch (FileNotFoundException ex) {
 
-                appLogger.debug(localizationManager.getLocalizedString("configcheck.log.debug.isforgeversioncorrect"), ex);
-                File file = new File("forge-manifest.json");
+                    appLogger.debug(localizationManager.getLocalizedString("configcheck.log.debug.isforgeversioncorrect"), ex);
+                    File file = new File("forge-manifest.json");
 
-                if (!file.exists()){
+                    if (!file.exists()) {
 
-                    appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.isforgeversioncorrect.create"));
+                        appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.isforgeversioncorrect.create"));
 
-                    boolean jsonCreated = file.createNewFile();
+                        boolean jsonCreated = file.createNewFile();
 
-                    if (jsonCreated) {
+                        if (jsonCreated) {
 
-                        appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.isforgeversioncorrect.created"));
-                    } else {
+                            appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.isforgeversioncorrect.created"));
+                        } else {
 
-                        appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.isforgeversioncorrect.parse"));
+                            appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.isforgeversioncorrect.parse"));
+                        }
                     }
+                    downloadManifestOutputStream = new FileOutputStream("forge-manifest.json");
                 }
-                downloadManifestOutputStream = new FileOutputStream("forge-manifest.json");
-            }
-            FileChannel downloadManifestOutputStreamChannel = downloadManifestOutputStream.getChannel();
+                FileChannel downloadManifestOutputStreamChannel = downloadManifestOutputStream.getChannel();
 
-            downloadManifestOutputStream.getChannel().transferFrom(readableByteChannel, 0, Long.MAX_VALUE);
-            downloadManifestOutputStream.flush();
-            downloadManifestOutputStream.close();
+                downloadManifestOutputStream.getChannel().transferFrom(readableByteChannel, 0, Long.MAX_VALUE);
+                downloadManifestOutputStream.flush();
+                downloadManifestOutputStream.close();
 
-            readableByteChannel.close();
-            downloadManifestOutputStreamChannel.close();
+                readableByteChannel.close();
+                downloadManifestOutputStreamChannel.close();
 
-            File manifestJsonFile = new File("forge-manifest.json");
+                File manifestJsonFile = new File("forge-manifest.json");
 
-            manifestJsonFile.deleteOnExit();
+                manifestJsonFile.deleteOnExit();
 
-            Scanner jsonReader = new Scanner(manifestJsonFile);
+                Scanner jsonReader = new Scanner(manifestJsonFile);
 
-            ArrayList<String> dataList = new ArrayList<>();
+                ArrayList<String> dataList = new ArrayList<>();
 
-            while (jsonReader.hasNextLine()) {
-                dataList.add(jsonReader.nextLine());
-            }
+                while (jsonReader.hasNextLine()) {
+                    dataList.add(jsonReader.nextLine());
+                }
 
-            String[] dataArray = new String[dataList.size()];
+                String[] dataArray = new String[dataList.size()];
 
-            String manifestJSON;
+                String manifestJSON;
 
-            dataList.toArray(dataArray);
+                dataList.toArray(dataArray);
 
-            manifestJSON = Arrays.toString(dataArray);
+                manifestJSON = Arrays.toString(dataArray);
 
-            jsonReader.close();
+                jsonReader.close();
+
+                manifestJSON = manifestJSON.replaceAll("\\s", "");
 
-            manifestJSON = manifestJSON.replaceAll("\\s", "");
+                return manifestJSON.trim().contains(String.format("%s", forgeVersion));
 
-            return manifestJSON.trim().contains(String.format("%s", forgeVersion));
+            } catch (Exception ex) {
 
-        } catch (Exception ex) {
+                appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.isforgeversioncorrect.validate"), ex);
+                return false;
+            }
+        } else {
 
-            appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.isforgeversioncorrect.validate"), ex);
+            appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.isforgeversioncorrect.empty"));
             return false;
         }
     }
 
-    /** Returns the latest installer version for the Fabric installer to be used in ServerSetup.installServer.
-     * @param modpackDir String. /server_pack The directory where the Fabric installer will be placed in.
+    /**
+     * Returns the latest version for the Fabric-loader. If Fabric's version manifest should be unreachable for whatever
+     * reason, version 0.11.3 is returned by default.
+     * @param modpackDir String. The Fabric-loader manifest will be stored inside the server_pack directory inside the modpack
+     *                   directory.
      * @return Boolean. Returns true if the download was successful. False if not.
      */
     @SuppressWarnings({"ReturnInsideFinallyBlock", "finally"})
@@ -1031,7 +1460,30 @@ public class Configuration {
     }
 
     /**
-     * Generate new configuration file from CLI input. Prompts user to enter config file values and then generates a config file with values entered by user.
+     * Walk the user through the generation of a new ServerPackCreator configuration file by asking them for input,
+     * step-by-step, regarding their modpack. At the end of this method a fully configured serverpackcreator.conf file
+     * is saved and any previously existing configuration file replaced by the new one.<br>
+     * After every input, said input is displayed to the user and they're asked whether they are satisfied with said
+     * input. The user can then decide whether they would like to restart the entry of the field they just configured,
+     * or agree and move to the next one.<br>
+     * At the end of this method, the user will have a newly configured and created configuration file for ServerPackCreator.<br>
+     * <br>
+     * Most user-input is checked after entry to ensure the configuration is already in working-condition after completion
+     * of this method.<br>
+     * Calls<br>
+     * {@link #checkModpackDir(String)}<br>
+     * {@link #readBoolean()}<br>
+     * {@link #getFallbackModsList()}<br>
+     * {@link #readStringArray()}<br>
+     * {@link #checkCopyDirs(List, String)}<br>
+     * {@link #isMinecraftVersionCorrect(String)}<br>
+     * {@link #checkModloader(String)}<br>
+     * {@link #setModLoaderCase(String)}<br>
+     * {@link #checkModloaderVersion(String, String)}<br>
+     * {@link #getJavaPathFromSystem(String)}<br>
+     * {@link #checkJavaPath(String)}<br>
+     * {@link #printConfig(String, List, List, boolean, String, String, String, String, boolean, boolean, boolean, boolean)}<br>
+     * {@link #writeConfigToFile(String, String, String, boolean, String, String, String, String, boolean, boolean, boolean, boolean, File, boolean)}
      */
     void createConfigurationFile() {
         List<String> clientMods, copyDirs;
@@ -1078,6 +1530,14 @@ public class Configuration {
                 appLogger.info(String.format(localizationManager.getLocalizedString("clisetup.log.info.checkreturn"), clientMods));
                 appLogger.info(localizationManager.getLocalizedString("clisetup.log.info.clientmods.checkreturninfo"));
                 System.out.print(localizationManager.getLocalizedString("clisetup.log.info.answer"));
+                if (clientMods.isEmpty()) {
+                    clientMods = getFallbackModsList();
+                    appLogger.warn(localizationManager.getLocalizedString("configcheck.log.warn.checkconfig.clientmods"));
+
+                    for (int i = 0; i < clientMods.size(); i++) {
+                        appLogger.warn(String.format("    %s", clientMods.get(i))); }
+                    //TODO: @Griefed Test whether this works
+                }
             } while (!readBoolean());
             appLogger.info(String.format(localizationManager.getLocalizedString("clisetup.log.info.checkreturn"), clientMods));
             tmpClientMods = new String[clientMods.size()];
@@ -1124,7 +1584,7 @@ public class Configuration {
                 System.out.print(localizationManager.getLocalizedString("clisetup.log.info.modloader.cli"));
                 modLoader = reader.nextLine();
             } while (!checkModloader(modLoader));
-            modLoader = setModloader(modLoader);
+            modLoader = setModLoaderCase(modLoader);
             appLogger.info(String.format(localizationManager.getLocalizedString("clisetup.log.info.checkreturn"), modLoader));
             System.out.println();
 
@@ -1144,7 +1604,7 @@ public class Configuration {
             do {
                 System.out.print(localizationManager.getLocalizedString("clisetup.log.info.java.cli"));
                 String tmpJavaPath = reader.nextLine();
-                javaPath = getJavaPath(tmpJavaPath);
+                javaPath = getJavaPathFromSystem(tmpJavaPath);
             } while (!checkJavaPath(javaPath));
             System.out.println();
 
@@ -1214,8 +1674,11 @@ public class Configuration {
         }
     }
 
-    /** A helper method for config setup. Prompts user to enter the values that will be stored in arrays in config.
-     * @return String List. Returns list with user input values that will be stored in config.
+    /**
+     * A helper method for {@link #createConfigurationFile()}. Prompts the user to enter the values which will make up
+     * a String List in the new configuration file. If the user enters an empty line, the method is exited and the
+     * String List returned.
+     * @return String List. Returns the list of values entered by the user.
      */
     private List<String> readStringArray() {
         Scanner readerArray = new Scanner(System.in);
@@ -1231,7 +1694,8 @@ public class Configuration {
         }
     }
 
-    /** Converts list of strings into concatenated string.
+    /**
+     * Converts a sequence of Strings, for example from a list, into a concatenated String.
      * @param args Strings that will be concatenated into one string
      * @return String. Returns concatenated string that contains all provided values.
      */
@@ -1242,8 +1706,11 @@ public class Configuration {
         return stringBuilder.toString();
     }
 
-    /** A helper method for config setup. Prompts user to enter boolean values that will be stored in config and checks entered values to prevent storing non-boolean values in boolean variables.
-     * @return Boolean. Converts to boolean and returns value entered by user that will be stored in config.
+    /**
+     * A helper method for {@link #createConfigurationFile()}. Prompts the user to enter values which will then be
+     * converted to booleans, either <code>TRUE</code> or <code>FALSE</code>. This prevents any non-boolean values
+     * from being written to the new configuration file.
+     * @return Boolean. True or False, depending on user input.
      */
     private boolean readBoolean() {
         Scanner readerBoolean = new Scanner(System.in);
@@ -1274,20 +1741,21 @@ public class Configuration {
         }
     }
 
-    /** Writes a new configuration file with the parameters passed to it.
+    /** Writes a new configuration file with the parameters passed to it.<br>
+     * Calls {@link #getConfigFile()}<br>
      * @param modpackDir String. The path to the modpack.
      * @param clientMods List, String. List of clientside-only mods.
      * @param copyDirs List, String. List of directories to include in server pack.
-     * @param includeServer Boolean. Whether to include a modloader server installation.
-     * @param javaPath String. Path to the java executable.
+     * @param includeServer Boolean. Whether the modloader server software should be installed.
+     * @param javaPath String. Path to the java executable/binary.
      * @param minecraftVersion String. Minecraft version used by the modpack and server pack.
      * @param modLoader String. Modloader used by the modpack and server pack. Ether Forge or Fabric.
      * @param modLoaderVersion String. Modloader version used by the modpack and server pack.
      * @param includeIcon Boolean. Whether to include a server-icon in the server pack.
      * @param includeProperties Boolean. Whether to include a properties file in the server pack.
      * @param includeScripts Boolean. Whether to include start scripts in the server pack.
-     * @param includeZip Boolean. Whether to create a ZIP-archive of the server pack, excluding Mojang's Minecraft server jar.
-     * @param fileName The name under which to write the new file.
+     * @param includeZip Boolean. Whether to create a ZIP-archive of the server pack, excluding Mojang's Minecraft server JAR.
+     * @param fileName The name under which to write the new configuration file.
      * @param isTemporary Decides whether to delete existing config-file. If isTemporary is false, existing config files will be deleted before writing the new file.
      * @return Boolean. Returns true if the configuration file has been successfully written and old ones replaced.
      */
diff --git a/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java b/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
index 7c9f23ab2..d4f8628f7 100644
--- a/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
+++ b/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
@@ -51,33 +51,32 @@ import java.util.zip.ZipOutputStream;
 import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
 
 /**
- * <strong>Table of methods</strong>
- * <p>
- * 1. {@link #CreateServerPack(LocalizationManager, Configuration, CurseCreateModpack)}<p>
- * 2. {@link #getPropertiesFile()}<p>
- * 3. {@link #getIconFile()}<p>
- * 4. {@link #getForgeWindowsFile()}<p>
- * 5. {@link #getForgeLinuxFile()}<p>
- * 6. {@link #getFabricWindowsFile()}<p>
- * 7. {@link #getFabricLinuxFile()}<p>
- * 8. {@link #run()}<p>
- * 9. {@link #cleanupEnvironment(String)}<p>
- * 10.{@link #copyStartScripts(String, String, boolean)}<p>
- * 11.{@link #copyFiles(String, List, List)}<p>
- * 12.{@link #excludeClientMods(String, List)}<p>
- * 13.{@link #copyIcon(String)}<p>
- * 14.{@link #copyProperties(String)}<p>
- * 15.{@link #installServer(String, String, String, String, String)}<p>
- * 16.{@link #zipBuilder(String, String, Boolean, String)}<p>
- * 17.{@link #generateDownloadScripts(String, String, String)}<p>
- * 18.{@link #fabricShell(String, String)}<p>
- * 19.{@link #fabricBatch(String, String)}<p>
- * 20.{@link #forgeShell(String, String)}<p>
- * 21.{@link #forgeBatch(String, String)}<p>
- * 22.{@link #downloadFabricJar(String)}<p>
- * 23.{@link #latestFabricInstaller(String)}<p>
- * 24.{@link #downloadForgeJar(String, String, String)}<p>
- * 25.{@link #deleteMinecraftJar(String, String, String)}<p>
+ * <strong>Table of methods</strong><p>
+ * 1. {@link #CreateServerPack(LocalizationManager, Configuration, CurseCreateModpack)}<br>
+ * 2. {@link #getPropertiesFile()}<br>
+ * 3. {@link #getIconFile()}<br>
+ * 4. {@link #getForgeWindowsFile()}<br>
+ * 5. {@link #getForgeLinuxFile()}<br>
+ * 6. {@link #getFabricWindowsFile()}<br>
+ * 7. {@link #getFabricLinuxFile()}<br>
+ * 8. {@link #run()}<br>
+ * 9. {@link #cleanupEnvironment(String)}<br>
+ * 10.{@link #copyStartScripts(String, String, boolean)}<br>
+ * 11.{@link #copyFiles(String, List, List)}<br>
+ * 12.{@link #excludeClientMods(String, List)}<br>
+ * 13.{@link #copyIcon(String)}<br>
+ * 14.{@link #copyProperties(String)}<br>
+ * 15.{@link #installServer(String, String, String, String, String)}<br>
+ * 16.{@link #zipBuilder(String, String, Boolean, String)}<br>
+ * 17.{@link #generateDownloadScripts(String, String, String)}<br>
+ * 18.{@link #fabricShell(String, String)}<br>
+ * 19.{@link #fabricBatch(String, String)}<br>
+ * 20.{@link #forgeShell(String, String)}<br>
+ * 21.{@link #forgeBatch(String, String)}<br>
+ * 22.{@link #downloadFabricJar(String)}<br>
+ * 23.{@link #latestFabricInstaller(String)}<br>
+ * 24.{@link #downloadForgeJar(String, String, String)}<br>
+ * 25.{@link #deleteMinecraftJar(String, String, String)}<br>
  * 26.{@link #cleanUpServerPack(File, File, String, String, String, String)}
  * <p>
  * Requires an instance of {@link Configuration} from which to get all required information about the modpack and the
@@ -97,12 +96,6 @@ public class CreateServerPack {
     private Configuration configuration;
     private CurseCreateModpack curseCreateModpack;
     private LocalizationManager localizationManager;
-    private final File propertiesFile    = new File("server.properties");
-    private final File iconFile          = new File("server-icon.png");
-    private final File forgeWindowsFile  = new File("start-forge.bat");
-    private final File forgeLinuxFile    = new File("start-forge.sh");
-    private final File fabricWindowsFile = new File("start-fabric.bat");
-    private final File fabricLinuxFile   = new File("start-fabric.sh");
 
     /**
      * <strong>Constructor</strong><p>
@@ -137,6 +130,13 @@ public class CreateServerPack {
         }
     }
 
+    private final File propertiesFile    = new File("server.properties");
+    private final File iconFile          = new File("server-icon.png");
+    private final File forgeWindowsFile  = new File("start-forge.bat");
+    private final File forgeLinuxFile    = new File("start-forge.sh");
+    private final File fabricWindowsFile = new File("start-fabric.bat");
+    private final File fabricLinuxFile   = new File("start-fabric.sh");
+
     /**
      * Getter for server.properties.
      * @return Returns the server.properties-file for use in {@link #copyProperties(String)}
diff --git a/src/main/java/de/griefed/serverpackcreator/FilesSetup.java b/src/main/java/de/griefed/serverpackcreator/FilesSetup.java
index f1fccd829..d580ab406 100644
--- a/src/main/java/de/griefed/serverpackcreator/FilesSetup.java
+++ b/src/main/java/de/griefed/serverpackcreator/FilesSetup.java
@@ -29,37 +29,36 @@ import java.nio.file.Paths;
 /**
  * <strong>Table of methods</strong>
  * <p>
- * 1. {@link #FilesSetup(LocalizationManager)}<p>
- * 2. {@link #getConfigFile()}<p>
- * 3. {@link #getOldConfigFile()}<p>
- * 4. {@link #getPropertiesFile()}<p>
- * 5. {@link #getIconFile()}<p>
- * 6. {@link #getForgeWindowsFile()}<p>
- * 7. {@link #getForgeLinuxFile()}<p>
- * 8. {@link #getFabricWindowsFile()}
- * 9. {@link #getFabricLinuxFile()}
- * 10.{@link #filesSetup()}<p>
- * 11.{@link #checkForConfig()}<p>
- * 12.{@link #checkForFabricLinux()}<p>
- * 13.{@link #checkForFabricWindows()}<p>
- * 14.{@link #checkForForgeLinux()}<p>
- * 15.{@link #checkForForgeWindows()}<p>
- * 16.{@link #checkForProperties()}<p>
+ * 1. {@link #FilesSetup(LocalizationManager)}<br>
+ * 2. {@link #getConfigFile()}<br>
+ * 3. {@link #getOldConfigFile()}<br>
+ * 4. {@link #getPropertiesFile()}<br>
+ * 5. {@link #getIconFile()}<br>
+ * 6. {@link #getForgeWindowsFile()}<br>
+ * 7. {@link #getForgeLinuxFile()}<br>
+ * 8. {@link #getFabricWindowsFile()}<br>
+ * 9. {@link #getFabricLinuxFile()}<br>
+ * 10.{@link #filesSetup()}<br>
+ * 11.{@link #checkForConfig()}<br>
+ * 12.{@link #checkForFabricLinux()}<br>
+ * 13.{@link #checkForFabricWindows()}<br>
+ * 14.{@link #checkForForgeLinux()}<br>
+ * 15.{@link #checkForForgeWindows()}<br>
+ * 16.{@link #checkForProperties()}<br>
  * 17.{@link #checkForIcon()}
  * <p>
  * Requires instances of {@link LocalizationManager} for use of localization, but creates one if injected one is null.
  * <p>
  * Ensures all files needed by ServerPackCreator are available. If any one is missing, a new one is generated from the
  * template. Among the default files are:<p>
- * <strong>serverpackcreator.conf</strong><p>
- * <strong>server.properties</strong><p>
- * <strong>server-icon.png</strong><p>
- * <strong>start-forge.bar</strong><p>
- * <strong>start-forge.sh</strong><p>
- * <strong>start-fabric.bat</strong><p>
+ * <strong>serverpackcreator.conf</strong><br>
+ * <strong>server.properties</strong><br>
+ * <strong>server-icon.png</strong><br>
+ * <strong>start-forge.bar</strong><br>
+ * <strong>start-forge.sh</strong><br>
+ * <strong>start-fabric.bat</strong><br>
  * <strong>start-fabric.sh</strong>
  * <p>
- *
  * Should an old configuration file, <em>creator.conf</em>, be detected, it is renamed to <em>serverpackcreator.conf</em>
  * to ensure a configuration file is present at all times.
  */
@@ -67,15 +66,6 @@ public class FilesSetup {
 
     private static final Logger appLogger = LogManager.getLogger(FilesSetup.class);
 
-    private final File configFile        = new File("serverpackcreator.conf");
-    private final File oldConfigFile     = new File("creator.conf");
-    private final File propertiesFile    = new File("server.properties");
-    private final File iconFile          = new File("server-icon.png");
-    private final File forgeWindowsFile  = new File("start-forge.bat");
-    private final File forgeLinuxFile    = new File("start-forge.sh");
-    private final File fabricWindowsFile = new File("start-fabric.bat");
-    private final File fabricLinuxFile   = new File("start-fabric.sh");
-
     private LocalizationManager localizationManager;
 
     /**
@@ -92,6 +82,15 @@ public class FilesSetup {
         }
     }
 
+    private final File configFile        = new File("serverpackcreator.conf");
+    private final File oldConfigFile     = new File("creator.conf");
+    private final File propertiesFile    = new File("server.properties");
+    private final File iconFile          = new File("server-icon.png");
+    private final File forgeWindowsFile  = new File("start-forge.bat");
+    private final File forgeLinuxFile    = new File("start-forge.sh");
+    private final File fabricWindowsFile = new File("start-fabric.bat");
+    private final File fabricLinuxFile   = new File("start-fabric.sh");
+
     /**
      * Getter for serverpackcreator.conf.
      * @return Returns the serverpackcreator.conf-file for use in {@link #checkForConfig()}
-- 
GitLab


From c9be1b72e3dc515ab6c4dd304a59a24701570785 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Sat, 1 May 2021 16:19:48 +0200
Subject: [PATCH 24/91] refactor(DI): Update javadocs and a couple of minor
 fixes

---
 .../de/griefed/resources/lang/lang_de_de.properties         | 6 ++++--
 .../de/griefed/resources/lang/lang_en_us.properties         | 6 ++++--
 .../de/griefed/resources/lang/lang_uk_ua.properties         | 6 ++++--
 3 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/src/main/resources/de/griefed/resources/lang/lang_de_de.properties b/src/main/resources/de/griefed/resources/lang/lang_de_de.properties
index cbb003a30..977ed8370 100644
--- a/src/main/resources/de/griefed/resources/lang/lang_de_de.properties
+++ b/src/main/resources/de/griefed/resources/lang/lang_de_de.properties
@@ -121,6 +121,7 @@ configcheck.log.error.checkconfig.failure=Config check not successful. Check you
 configcheck.log.error.iscurse.curseforge=Error: Could not retrieve CurseForge project and file.
 configcheck.log.error.iscurse.json=Error: There was a fault during json parsing.
 configcheck.log.error.iscurse.project=Error: Project with ID %s could not be found
+configcheck.log.error.iscurse.file=Error: File with ID %s could not be found
 configcheck.log.error.suggestcopydirs=Error: Something went wrong during the setup of the modpack. Copy dirs should never be empty. Please check the logs for errors and open an issue on https://github.com/Griefed/ServerPackCreator/issues.
 configcheck.log.error.printconfig.copydirs=Error: List of directories to copy is empty.
 configcheck.log.error.checkmodpackdir=Error: Modpack directory not specified. Please specify an existing directory.
@@ -133,9 +134,11 @@ configcheck.log.error.isminecraftversioncorrect.parse=Error: Could not create Ma
 configcheck.log.error.isminecraftversioncorrect.validate=Error: Could not validate Minecraft version %s.
 configcheck.log.error.isminecraftversioncorrect.empty=You didn't specify your Minecraft version.
 configcheck.log.error.isfabricversioncorrect.parse=Error: Could not create Fabric Manifest XML File.
-configcheck.log.error.isfabricversioncorrect.validate=An error occurred during Minecraft version validation.
+configcheck.log.error.isfabricversioncorrect.validate=An error occurred during Fabric version validation.
+configcheck.log.error.isfabricversioncorrect.empty=You did not specify a Fabric version.
 configcheck.log.error.isforgeversioncorrect.parse=Error: Could not create Forge Manifest JSON File.
 configcheck.log.error.isforgeversioncorrect.validate=An error occurred during Forge version validation.
+configcheck.log.error.isforgeversioncorrect.empty=You did not specify a Forge version.
 configcheck.log.error.latestfabricloader.parse=Could not retrieve XML file. Defaulting to Loader version 0.11.3.
 copyfiles.log.error.cleanupenvironment.folder.delete=Error deleting file from %s/server_pack.
 copyfiles.log.error.cleanupenvironment.zip.delete=Error deleting old zip archive.
@@ -160,7 +163,6 @@ filessetup.log.error.writeconfigtofile.config=Could not delete existing config f
 filessetup.log.error.writeconfigtofile.old=Could not delete old existing config file from previous versions of ServerPackCreator.
 filessetup.log.error.writeconfigtofile=Error: Couldn't write serverpackcreator.conf.
 handler.log.error.system.properties=Error getting system properties.
-handler.log.error.runincli.copyfiles=There was an error calling the copyFiles method.
 handler.log.error.runincli=Error: Please check your serverpackcreator.conf for any incorrect settings. This message is also displayed if serverpackcreator downloaded and setup a modpack from a projectID,fileID for modpackDir.
 serversetup.log.error.installserver.fabric=Something went wrong during the installation of Fabric. Maybe the Fabric server are down or unreachable? Skipping...
 serversetup.log.error.installserver.fabricfail=An error occurred during Fabric installation.
diff --git a/src/main/resources/de/griefed/resources/lang/lang_en_us.properties b/src/main/resources/de/griefed/resources/lang/lang_en_us.properties
index 0f5b7cf18..b0895a86b 100644
--- a/src/main/resources/de/griefed/resources/lang/lang_en_us.properties
+++ b/src/main/resources/de/griefed/resources/lang/lang_en_us.properties
@@ -121,6 +121,7 @@ configcheck.log.error.checkconfig.failure=Config check not successful. Check you
 configcheck.log.error.iscurse.curseforge=Error: Could not retrieve CurseForge project and file.
 configcheck.log.error.iscurse.json=Error: There was a fault during json parsing.
 configcheck.log.error.iscurse.project=Error: Project with ID %s could not be found
+configcheck.log.error.iscurse.file=Error: File with ID %s could not be found
 configcheck.log.error.suggestcopydirs=Error: Something went wrong during the setup of the modpack. Copy dirs should never be empty. Please check the logs for errors and open an issue on https://github.com/Griefed/ServerPackCreator/issues.
 configcheck.log.error.printconfig.copydirs=Error: List of directories to copy is empty.
 configcheck.log.error.checkmodpackdir=Error: Modpack directory not specified. Please specify an existing directory.
@@ -133,9 +134,11 @@ configcheck.log.error.isminecraftversioncorrect.parse=Error: Could not create Ma
 configcheck.log.error.isminecraftversioncorrect.validate=Error: Could not validate Minecraft version %s.
 configcheck.log.error.isminecraftversioncorrect.empty=You didn't specify your Minecraft version.
 configcheck.log.error.isfabricversioncorrect.parse=Error: Could not create Fabric Manifest XML File.
-configcheck.log.error.isfabricversioncorrect.validate=An error occurred during Minecraft version validation.
+configcheck.log.error.isfabricversioncorrect.validate=An error occurred during Fabric version validation.
+configcheck.log.error.isfabricversioncorrect.empty=You did not specify a Fabric version.
 configcheck.log.error.isforgeversioncorrect.parse=Error: Could not create Forge Manifest JSON File.
 configcheck.log.error.isforgeversioncorrect.validate=An error occurred during Forge version validation.
+configcheck.log.error.isforgeversioncorrect.empty=You did not specify a Forge version.
 configcheck.log.error.latestfabricloader.parse=Could not retrieve XML file. Defaulting to Loader version 0.11.3.
 copyfiles.log.error.cleanupenvironment.folder.delete=Error deleting file from %s/server_pack.
 copyfiles.log.error.cleanupenvironment.zip.delete=Error deleting old zip archive.
@@ -160,7 +163,6 @@ filessetup.log.error.writeconfigtofile.config=Could not delete existing config f
 filessetup.log.error.writeconfigtofile.old=Could not delete old existing config file from previous versions of ServerPackCreator.
 filessetup.log.error.writeconfigtofile=Error: Couldn't write serverpackcreator.conf.
 handler.log.error.system.properties=Error getting system properties.
-handler.log.error.runincli.copyfiles=There was an error calling the copyFiles method.
 handler.log.error.runincli=Error: Please check your serverpackcreator.conf for any incorrect settings. This message is also displayed if serverpackcreator downloaded and setup a modpack from a projectID,fileID for modpackDir.
 serversetup.log.error.installserver.fabric=Something went wrong during the installation of Fabric. Maybe the Fabric server are down or unreachable? Skipping...
 serversetup.log.error.installserver.fabricfail=An error occurred during Fabric installation.
diff --git a/src/main/resources/de/griefed/resources/lang/lang_uk_ua.properties b/src/main/resources/de/griefed/resources/lang/lang_uk_ua.properties
index 8f9fbb81b..5f34a1bf6 100644
--- a/src/main/resources/de/griefed/resources/lang/lang_uk_ua.properties
+++ b/src/main/resources/de/griefed/resources/lang/lang_uk_ua.properties
@@ -121,6 +121,7 @@ configcheck.log.error.checkconfig.failure=Config check not successful. Check you
 configcheck.log.error.iscurse.curseforge=Error: Could not retrieve CurseForge project and file.
 configcheck.log.error.iscurse.json=Error: There was a fault during json parsing.
 configcheck.log.error.iscurse.project=Error: Project with ID %s could not be found
+configcheck.log.error.iscurse.file=Error: File with ID %s could not be found
 configcheck.log.error.suggestcopydirs=Error: Something went wrong during the setup of the modpack. Copy dirs should never be empty. Please check the logs for errors and open an issue on https://github.com/Griefed/ServerPackCreator/issues.
 configcheck.log.error.printconfig.copydirs=Error: List of directories to copy is empty.
 configcheck.log.error.checkmodpackdir=Error: Modpack directory not specified. Please specify an existing directory.
@@ -133,9 +134,11 @@ configcheck.log.error.isminecraftversioncorrect.parse=Error: Could not create Ma
 configcheck.log.error.isminecraftversioncorrect.validate=Error: Could not validate Minecraft version %s.
 configcheck.log.error.isminecraftversioncorrect.empty=You didn't specify your Minecraft version.
 configcheck.log.error.isfabricversioncorrect.parse=Error: Could not create Fabric Manifest XML File.
-configcheck.log.error.isfabricversioncorrect.validate=An error occurred during Minecraft version validation.
+configcheck.log.error.isfabricversioncorrect.validate=An error occurred during Fabric version validation.
+configcheck.log.error.isfabricversioncorrect.empty=You did not specify a Fabric version.
 configcheck.log.error.isforgeversioncorrect.parse=Error: Could not create Forge Manifest JSON File.
 configcheck.log.error.isforgeversioncorrect.validate=An error occurred during Forge version validation.
+configcheck.log.error.isforgeversioncorrect.empty=You did not specify a Forge version.
 configcheck.log.error.latestfabricloader.parse=Could not retrieve XML file. Defaulting to Loader version 0.11.3.
 copyfiles.log.error.cleanupenvironment.folder.delete=Error deleting file from %s/server_pack.
 copyfiles.log.error.cleanupenvironment.zip.delete=Error deleting old zip archive.
@@ -160,7 +163,6 @@ filessetup.log.error.writeconfigtofile.config=Could not delete existing config f
 filessetup.log.error.writeconfigtofile.old=Could not delete old existing config file from previous versions of ServerPackCreator.
 filessetup.log.error.writeconfigtofile=Error: Couldn't write serverpackcreator.conf.
 handler.log.error.system.properties=Error getting system properties.
-handler.log.error.runincli.copyfiles=There was an error calling the copyFiles method.
 handler.log.error.runincli=Error: Please check your serverpackcreator.conf for any incorrect settings. This message is also displayed if serverpackcreator downloaded and setup a modpack from a projectID,fileID for modpackDir.
 serversetup.log.error.installserver.fabric=Something went wrong during the installation of Fabric. Maybe the Fabric server are down or unreachable? Skipping...
 serversetup.log.error.installserver.fabricfail=An error occurred during Fabric installation.
-- 
GitLab


From 36c846ff69cdfd5f87602a1a1a59537cd47362ad Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Sat, 1 May 2021 16:29:32 +0200
Subject: [PATCH 25/91] refactor(DI): Update javadocs and a couple of minor
 fixes

---
 .../serverpackcreator/Configuration.java      | 20 +++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/Configuration.java b/src/main/java/de/griefed/serverpackcreator/Configuration.java
index b8eb53fd0..1367fb24e 100644
--- a/src/main/java/de/griefed/serverpackcreator/Configuration.java
+++ b/src/main/java/de/griefed/serverpackcreator/Configuration.java
@@ -259,6 +259,7 @@ public class Configuration {
     /**
      * Setter for a {@link Config} containing a parsed configuration-file.
      * For use in {@link #checkConfigFile(File)}
+     * @param newConfig The new Typesafe Config to store.
      */
     public void setConfig(Config newConfig) {
         this.config = newConfig;
@@ -285,6 +286,7 @@ public class Configuration {
     /**
      * Setter for the list of clientside-only mods to exclude from server pack.
      * For use in {@link #checkConfigFile(File)}
+     * @param newClientMods The new list of clientside-only mods to store.
      */
     void setClientMods(List<String> newClientMods) {
         this.clientMods = newClientMods;
@@ -303,6 +305,7 @@ public class Configuration {
     /**
      * Setter for the list of directories in the modpack to copy to the server pack.
      * For use in {@link #isDir(String)} and {@link #isCurse()}
+     * @param newCopyDirs The new list of directories to include in server pack to store.
      */
     void setCopyDirs(List<String> newCopyDirs) {
         this.copyDirs = newCopyDirs;
@@ -322,6 +325,7 @@ public class Configuration {
     /**
      * Setter for the path to the modpack directory. Replaces any occurrences of \ with /.
      * For use in {@link #isDir(String)} and {@link #isCurse()}
+     * @param newModpackDir The new modpack directory path to store.
      */
     void setModpackDir(String newModpackDir) {
         newModpackDir = newModpackDir.replace("\\","/");
@@ -339,6 +343,7 @@ public class Configuration {
     /**
      * Setter for the path to the Java executable/binary. Replaces any occurrences of \ with /.
      * For use in {@link #isDir(String)} and {@link #isCurse()}
+     * @param newJavaPath The new Java path to store.
      */
     void setJavaPath(String newJavaPath) {
         newJavaPath = newJavaPath.replace("\\", "/");
@@ -347,7 +352,7 @@ public class Configuration {
 
     /**
      * Getter for the version of Minecraft used by the modpack.
-     * @return String. Returns the  for use in {@link #}
+     * @return String. Returns the  for use in {@link #checkConfigFile(File)} and {@link #isCurse()}
      */
     String getMinecraftVersion() {
         return minecraftVersion;
@@ -356,6 +361,7 @@ public class Configuration {
     /**
      * Setter for the Minecraft version used by the modpack.
      * For use in {@link #isDir(String)} and {@link #isCurse()}
+     * @param newMinecraftVersion The new Minecraft version to store.
      */
     void setMinecraftVersion(String newMinecraftVersion) {
         this.minecraftVersion = newMinecraftVersion;
@@ -375,6 +381,7 @@ public class Configuration {
     /**
      * Setter for the modloader used by the modpack.
      * For use in {@link #isDir(String)} and {@link #isCurse()}
+     * @param newModLoader The new modloader to store.
      */
     void setModLoader(String newModLoader) {
         this.modLoader = newModLoader;
@@ -391,6 +398,7 @@ public class Configuration {
     /**
      * Setter for the version of the modloader used by the modpack.
      * For use in {@link #isDir(String)} and {@link #isCurse()}
+     * @param newModLoaderVersion The new modloader version to store.
      */
     void setModLoaderVersion(String newModLoaderVersion) {
         this.modLoaderVersion = newModLoaderVersion;
@@ -410,6 +418,7 @@ public class Configuration {
     /**
      * Setter for whether the modloader server installation should be included.
      * For use in {@link #checkConfigFile(File)}
+     * @param newIncludeServerInstallation The new boolean to store.
      */
     void setIncludeServerInstallation(boolean newIncludeServerInstallation) {
         this.includeServerInstallation = newIncludeServerInstallation;
@@ -427,6 +436,7 @@ public class Configuration {
     /**
      * Setter for whether the server-icon.png should be included in the server pack.
      * For use in {@link #checkConfigFile(File)}
+     * @param newIncludeServerIcon The new boolean to store.
      */
     void setIncludeServerIcon(boolean newIncludeServerIcon) {
         this.includeServerIcon = newIncludeServerIcon;
@@ -434,7 +444,8 @@ public class Configuration {
 
     /**
      * Getter for whether the server.properties should be included in the server pack.
-     * @return Boolean. Returns whether the server.properties should be included in the server pack, for use in {@link #}
+     * @return Boolean. Returns whether the server.properties should be included in the server pack, for use in
+     * {@link #checkConfigFile(File)} and {@link #isCurse()}
      */
     boolean getIncludeServerProperties() {
         return includeServerProperties;
@@ -443,6 +454,7 @@ public class Configuration {
     /**
      * Setter for whether the server.properties should be included in the server pack.
      * For use in {@link #checkConfigFile(File)}
+     * @param newIncludeServerProperties The new boolean to store.
      */
     void setIncludeServerProperties(boolean newIncludeServerProperties) {
         this.includeServerProperties = newIncludeServerProperties;
@@ -459,6 +471,7 @@ public class Configuration {
     /**
      * Setter for whether the start scripts should be included in the server pack.
      * For use in {@link #checkConfigFile(File)}
+     * @param newIncludeStartScripts The new boolean to store.
      */
     void setIncludeStartScripts(boolean newIncludeStartScripts) {
         this.includeStartScripts = newIncludeStartScripts;
@@ -475,6 +488,7 @@ public class Configuration {
     /**
      * Setter for whether a ZIP-archive of the server pack should be created.
      * For use in {@link #checkConfigFile(File)}
+     * @param newIncludeZipCreation The new boolean to store.
      */
     void setIncludeZipCreation(boolean newIncludeZipCreation) {
         this.includeZipCreation = newIncludeZipCreation;
@@ -491,6 +505,7 @@ public class Configuration {
     /**
      * Setter for the CurseForge projectID of a modpack, which will be created by {@link CurseCreateModpack#curseForgeModpack(String, Integer, Integer)}.
      * For use in {@link #checkCurseForge(String)}
+     * @param newProjectID The new projectID to store.
      */
     void setProjectID(int newProjectID) {
         this.projectID = newProjectID;
@@ -507,6 +522,7 @@ public class Configuration {
     /**
      * Setter for the CurseForge file of a modpack, which will be created by {@link CurseCreateModpack#curseForgeModpack(String, Integer, Integer)}.
      * For use in {@link #checkCurseForge(String)}
+     * @param newProjectFileID The new projectFileID to store.
      */
     void setProjectFileID(int newProjectFileID) {
         this.projectFileID = newProjectFileID;
-- 
GitLab


From e30f43555a235f162723bed776df250e9f95d027 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Sat, 1 May 2021 17:54:10 +0200
Subject: [PATCH 26/91] refactor(DI): Update javadocs, make creation of modpack
 if CurseForge projectID,fileID was provided optional, write getter for
 ObjectMapper

---
 .../serverpackcreator/Configuration.java      | 73 +++++++++++--------
 .../examples/serverpackcreator.example        |  2 +-
 .../resources/lang/lang_de_de.properties      | 31 ++++----
 .../resources/lang/lang_en_us.properties      | 31 ++++----
 .../resources/lang/lang_uk_ua.properties      | 31 ++++----
 .../griefed/resources/serverpackcreator.conf  |  2 +-
 6 files changed, 93 insertions(+), 77 deletions(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/Configuration.java b/src/main/java/de/griefed/serverpackcreator/Configuration.java
index 1367fb24e..d635040bb 100644
--- a/src/main/java/de/griefed/serverpackcreator/Configuration.java
+++ b/src/main/java/de/griefed/serverpackcreator/Configuration.java
@@ -86,7 +86,7 @@ import java.util.*;
  * 35.{@link #setProjectID(int)}<br>
  * 36.{@link #getProjectFileID()}<br>
  * 37.{@link #setProjectFileID(int)}<br>
- * 38.{@link #checkConfigFile(File)}<br>
+ * 38.{@link #checkConfigFile(File, boolean)}<br>
  * 39.{@link #isDir(String)}<br>
  * 40.{@link #isCurse()}<br>
  * 41.{@link #containsFabric(CurseModpack)}<br>
@@ -202,6 +202,15 @@ public class Configuration {
 
     private Config config;
 
+    private ObjectMapper objectMapper = new ObjectMapper();
+
+    public ObjectMapper getObjectMapper() {
+        this.objectMapper = new ObjectMapper();
+        this.objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
+        this.objectMapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
+        return objectMapper;
+    }
+
     /**
      * Getter for creator.conf.
      * @return File. Returns the creator.conf-file for use in {@link #writeConfigToFile(String, String, String, boolean, String, String, String, String, boolean, boolean, boolean, boolean, File, boolean)}
@@ -248,7 +257,7 @@ public class Configuration {
     /**
      * Getter for a {@link Config} containing a parsed configuration-file.
      * @return Config. Returns parsed serverpackcreator.conf for use in<br>
-     * {@link #checkConfigFile(File)}<br>
+     * {@link #checkConfigFile(File, boolean)}<br>
      * {@link #isDir(String)}<br>
      * {@link #isCurse()}
      */
@@ -258,7 +267,7 @@ public class Configuration {
 
     /**
      * Setter for a {@link Config} containing a parsed configuration-file.
-     * For use in {@link #checkConfigFile(File)}
+     * For use in {@link #checkConfigFile(File, boolean)}
      * @param newConfig The new Typesafe Config to store.
      */
     public void setConfig(Config newConfig) {
@@ -267,7 +276,7 @@ public class Configuration {
 
     /**
      * Getter for the fallback clientside-only mods-list, in case no customized one is provided by the user.
-     * @return List String. Returns the fallback clientside-only mods-list for use in {@link #checkConfigFile(File)}
+     * @return List String. Returns the fallback clientside-only mods-list for use in {@link #checkConfigFile(File, boolean)}
      */
     List<String> getFallbackModsList() {
         return fallbackModsList;
@@ -276,7 +285,7 @@ public class Configuration {
     /**
      * Getter for a list of clientside-only mods to exclude from server pack.
      * @return List String. Returns the list of clientside-only mods for use in<br>
-     * {@link #checkConfigFile(File)}<br>
+     * {@link #checkConfigFile(File, boolean)}<br>
      * {@link #isCurse()}
      */
     List<String> getClientMods() {
@@ -285,7 +294,7 @@ public class Configuration {
 
     /**
      * Setter for the list of clientside-only mods to exclude from server pack.
-     * For use in {@link #checkConfigFile(File)}
+     * For use in {@link #checkConfigFile(File, boolean)}
      * @param newClientMods The new list of clientside-only mods to store.
      */
     void setClientMods(List<String> newClientMods) {
@@ -295,7 +304,7 @@ public class Configuration {
     /**
      * Getter for the list of directories in the modpack to copy to the server pack.
      * @return List String. Returns the list of directories to copy to the server pack for use in<br>
-     * {@link #checkConfigFile(File)}<br>
+     * {@link #checkConfigFile(File, boolean)}<br>
      * {@link #isCurse()}
      */
     List<String> getCopyDirs() {
@@ -314,7 +323,7 @@ public class Configuration {
     /**
      * Getter for the path to the modpack directory.
      * @return String. Returns the path to the modpack directory for use in<br>
-     * {@link #checkConfigFile(File)}<br>
+     * {@link #checkConfigFile(File, boolean)}<br>
      * {@link #isDir(String)}<br>
      * {@link #isCurse()}
      */
@@ -334,7 +343,7 @@ public class Configuration {
 
     /**
      * Getter for the path to the Java executable/binary.
-     * @return String. Returns the path to the Java executable/binary for use in {@link #checkConfigFile(File)} and {@link #isCurse()}
+     * @return String. Returns the path to the Java executable/binary for use in {@link #checkConfigFile(File, boolean)} and {@link #isCurse()}
      */
     String getJavaPath() {
         return javaPath;
@@ -352,7 +361,7 @@ public class Configuration {
 
     /**
      * Getter for the version of Minecraft used by the modpack.
-     * @return String. Returns the  for use in {@link #checkConfigFile(File)} and {@link #isCurse()}
+     * @return String. Returns the  for use in {@link #checkConfigFile(File, boolean)} and {@link #isCurse()}
      */
     String getMinecraftVersion() {
         return minecraftVersion;
@@ -370,7 +379,7 @@ public class Configuration {
     /**
      * Getter for the modloader used by the modpack.
      * @return String. Returns the modloader used by the modpack for use in<br>
-     * {@link #checkConfigFile(File)}<br>
+     * {@link #checkConfigFile(File, boolean)}<br>
      * {@link #isDir(String)}<br>
      * {@link #isCurse()}
      */
@@ -389,7 +398,7 @@ public class Configuration {
 
     /**
      * Getter for the version of the modloader used by the modpack.
-     * @return String. Returns the version of the modloader used by the modpack for use in {@link #checkConfigFile(File)} and {@link #isCurse()}
+     * @return String. Returns the version of the modloader used by the modpack for use in {@link #checkConfigFile(File, boolean)} and {@link #isCurse()}
      */
     String getModLoaderVersion() {
         return modLoaderVersion;
@@ -407,7 +416,7 @@ public class Configuration {
     /**
      * Getter for whether the modloader server installation should be included.
      * @return Boolean. Returns whether the server installation should be included, for use in<br>
-     * {@link #checkConfigFile(File)}<br>
+     * {@link #checkConfigFile(File, boolean)}<br>
      * {@link #isDir(String)}<br>
      * {@link #isCurse()}
      */
@@ -417,7 +426,7 @@ public class Configuration {
 
     /**
      * Setter for whether the modloader server installation should be included.
-     * For use in {@link #checkConfigFile(File)}
+     * For use in {@link #checkConfigFile(File, boolean)}
      * @param newIncludeServerInstallation The new boolean to store.
      */
     void setIncludeServerInstallation(boolean newIncludeServerInstallation) {
@@ -426,7 +435,7 @@ public class Configuration {
 
     /**
      * Getter for whether the server-icon.png should be included in the server pack.
-     * @return Boolean. Returns whether the server-icon.png should be included in the server pack, for use in {@link #checkConfigFile(File)}
+     * @return Boolean. Returns whether the server-icon.png should be included in the server pack, for use in {@link #checkConfigFile(File, boolean)}
      * and {@link #isCurse()}
      */
     boolean getIncludeServerIcon() {
@@ -435,7 +444,7 @@ public class Configuration {
 
     /**
      * Setter for whether the server-icon.png should be included in the server pack.
-     * For use in {@link #checkConfigFile(File)}
+     * For use in {@link #checkConfigFile(File, boolean)}
      * @param newIncludeServerIcon The new boolean to store.
      */
     void setIncludeServerIcon(boolean newIncludeServerIcon) {
@@ -445,7 +454,7 @@ public class Configuration {
     /**
      * Getter for whether the server.properties should be included in the server pack.
      * @return Boolean. Returns whether the server.properties should be included in the server pack, for use in
-     * {@link #checkConfigFile(File)} and {@link #isCurse()}
+     * {@link #checkConfigFile(File, boolean)} and {@link #isCurse()}
      */
     boolean getIncludeServerProperties() {
         return includeServerProperties;
@@ -453,7 +462,7 @@ public class Configuration {
 
     /**
      * Setter for whether the server.properties should be included in the server pack.
-     * For use in {@link #checkConfigFile(File)}
+     * For use in {@link #checkConfigFile(File, boolean)}
      * @param newIncludeServerProperties The new boolean to store.
      */
     void setIncludeServerProperties(boolean newIncludeServerProperties) {
@@ -462,7 +471,7 @@ public class Configuration {
 
     /**
      * Getter for whether the start scripts should be included in the server pack.
-     * @return Boolean. Returns the whether the start scripts should be included in the server pack, for use in {@link #checkConfigFile(File)} and {@link #isCurse()}
+     * @return Boolean. Returns the whether the start scripts should be included in the server pack, for use in {@link #checkConfigFile(File, boolean)} and {@link #isCurse()}
      */
     boolean getIncludeStartScripts() {
         return includeStartScripts;
@@ -470,7 +479,7 @@ public class Configuration {
 
     /**
      * Setter for whether the start scripts should be included in the server pack.
-     * For use in {@link #checkConfigFile(File)}
+     * For use in {@link #checkConfigFile(File, boolean)}
      * @param newIncludeStartScripts The new boolean to store.
      */
     void setIncludeStartScripts(boolean newIncludeStartScripts) {
@@ -479,7 +488,7 @@ public class Configuration {
 
     /**
      * Getter for whether a ZIP-archive of the server pack should be created.
-     * @return Boolean. Returns whether a ZIP-archive of the server pack should be created, for use in {@link #checkConfigFile(File)} and {@link #isCurse()}
+     * @return Boolean. Returns whether a ZIP-archive of the server pack should be created, for use in {@link #checkConfigFile(File, boolean)} and {@link #isCurse()}
      */
     boolean getIncludeZipCreation() {
         return includeZipCreation;
@@ -487,7 +496,7 @@ public class Configuration {
 
     /**
      * Setter for whether a ZIP-archive of the server pack should be created.
-     * For use in {@link #checkConfigFile(File)}
+     * For use in {@link #checkConfigFile(File, boolean)}
      * @param newIncludeZipCreation The new boolean to store.
      */
     void setIncludeZipCreation(boolean newIncludeZipCreation) {
@@ -546,11 +555,12 @@ public class Configuration {
      * {@link #isDir(String)}<br>
      * {@link #isCurse()}<br>
      * {@link #printConfig(String, List, List, boolean, String, String, String, String, boolean, boolean, boolean, boolean)}
-     * @param configFile The configuration file to check. Must be a valid configuration file for serverpackcreator to work.
+     * @param configFile File. The configuration file to check. Must be a valid configuration file for serverpackcreator to work.
+     * @param shouldModpackBeCreated Boolean. Whether the CurseForge modpack should be downloaded and created.
      * @return Boolean. Returns <code>false</code> if all checks are passed.
      */
-    public boolean checkConfigFile(File configFile) {
-        boolean configHasError;
+    public boolean checkConfigFile(File configFile, boolean shouldModpackBeCreated) {
+        boolean configHasError = false;
         appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.checkconfig.start"));
         try {
             setConfig(ConfigFactory.parseFile(configFile));
@@ -573,7 +583,11 @@ public class Configuration {
         if (checkModpackDir(getConfig().getString("modpackDir").replace("\\","/"))) {
             configHasError = isDir(getConfig().getString("modpackDir").replace("\\","/"));
         } else if (checkCurseForge(getConfig().getString("modpackDir").replace("\\","/"))) {
-            configHasError = isCurse();
+            if (shouldModpackBeCreated) {
+                configHasError = isCurse();
+            } else {
+                appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.checkconfig.skipmodpackcreation"));
+            }
         } else {
             configHasError = true;
         }
@@ -709,10 +723,8 @@ public class Configuration {
                 if (curseCreateModpack.curseForgeModpack(getModpackDir(), getProjectID(), getProjectFileID())) {
                     try {
                         byte[] jsonData = Files.readAllBytes(Paths.get(String.format("%s/manifest.json", getModpackDir())));
-                        ObjectMapper objectMapper = new ObjectMapper();
-                        objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
-                        objectMapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
-                        CurseModpack modpack = objectMapper.readValue(jsonData, CurseModpack.class);
+
+                        CurseModpack modpack = getObjectMapper().readValue(jsonData, CurseModpack.class);
 
                         String[] minecraftLoaderVersions = modpack
                                 .getMinecraft()
@@ -723,6 +735,7 @@ public class Configuration {
                                 .replace("[", "")
                                 .replace("]", "")
                                 .split("-");
+
                         setMinecraftVersion(minecraftLoaderVersions[0]
                                 .replace("[", ""));
 
diff --git a/src/main/resources/de/griefed/resources/examples/serverpackcreator.example b/src/main/resources/de/griefed/resources/examples/serverpackcreator.example
index b0fb9181c..b7496ec9a 100644
--- a/src/main/resources/de/griefed/resources/examples/serverpackcreator.example
+++ b/src/main/resources/de/griefed/resources/examples/serverpackcreator.example
@@ -1,6 +1,6 @@
 # Path to your modpack. Can be either relative or absolute.
 # Example: "./Some Modpack" or "C:\Minecraft\Some Modpack"
-# Can also be a combination of CurseForge projectID and fileID. Example for Survive Create Prosper 4 4.6.7: "390331,3215793"
+# Can also be a combination of CurseForge projectID and fileID. Example for Survive Create Prosper 4 4.6.8: "430517,3266321"
 modpackDir = "Survive Create Prosper 4 - Copy"
 
 # List of client-only mods to delete from serverpack.
diff --git a/src/main/resources/de/griefed/resources/lang/lang_de_de.properties b/src/main/resources/de/griefed/resources/lang/lang_de_de.properties
index 977ed8370..2e61dc705 100644
--- a/src/main/resources/de/griefed/resources/lang/lang_de_de.properties
+++ b/src/main/resources/de/griefed/resources/lang/lang_de_de.properties
@@ -20,7 +20,7 @@ createserverpack.gui.createandshowgui=ServerPackCreator
 createserverpack.gui.tabbedpane.createserverpack.title=Create Server Pack
 createserverpack.gui.tabbedpane.createserverpack.tip=Configure and start generation of server pack.
 createserverpack.gui.tabbedpane.serverpackcreatorlog.title=ServerPackCreator Log
-createserverpack.gui.tabbedpane.serverpackcreatorlog.tip=Latest serverpackcreator log tail.
+createserverpack.gui.tabbedpane.serverpackcreatorlog.tip=Latest ServerPackCreator log tail.
 createserverpack.gui.tabbedpane.modloaderinstallerlog.title=Modloader-Installer Log
 createserverpack.gui.tabbedpane.modloaderinstallerlog.tip=Latest modloader-installer log tail.
 createserverpack.gui.tabbedpane.about.title=About
@@ -86,7 +86,7 @@ createserverpack.gui.about.issue=Create an issue on GitHub.
 createserverpack.gui.about.discord=Get support and chat on Griefed's Discord server.
 
 # OTHER
-filessetup.writeconfigtofile.modpackdir=# Path to your modpack. Can be either relative or absolute.\n# Example: \"./Some Modpack\" or \"C:/Minecraft/Some Modpack\"\n# Can also be a combination of CurseForge projectID and fileID. Example for Survive Create Prosper 4 4.6.7: \"390331,3215793\"
+filessetup.writeconfigtofile.modpackdir=# Path to your modpack. Can be either relative or absolute.\n# Example: \"./Some Modpack\" or \"C:/Minecraft/Some Modpack\"\n# Can also be a combination of CurseForge projectID and fileID. Example for Survive Create Prosper 4 4.6.8: \"430517,3266321\"
 filessetup.writeconfigtofile.clientmods=# List of client-only mods to delete from serverpack.\n# No need to include version specifics. Must be the filenames of the mods, not their project names on CurseForge!\n# Example: [AmbientSounds,ClientTweaks,PackMenu,BetterAdvancement,jeiintegration]
 filessetup.writeconfigtofile.copydirs=# Name of directories to include in serverpack.\n# When specifying \"saves/world_name\", \"world_name\" will be copied to the base directory of the serverpack\n# for immediate use with the server. Automatically set when projectID,fileID for modpackDir has been specified.\n# Example: [config,mods,scripts] 
 filessetup.writeconfigtofile.includeserverinstallation=# Whether to install a Forge/Fabric server for the serverpack. Must be true or false.\n# Default value is true.
@@ -163,7 +163,7 @@ filessetup.log.error.writeconfigtofile.config=Could not delete existing config f
 filessetup.log.error.writeconfigtofile.old=Could not delete old existing config file from previous versions of ServerPackCreator.
 filessetup.log.error.writeconfigtofile=Error: Couldn't write serverpackcreator.conf.
 handler.log.error.system.properties=Error getting system properties.
-handler.log.error.runincli=Error: Please check your serverpackcreator.conf for any incorrect settings. This message is also displayed if serverpackcreator downloaded and setup a modpack from a projectID,fileID for modpackDir.
+handler.log.error.runincli=Error: Please check your serverpackcreator.conf for any incorrect settings. This message is also displayed if ServerPackCreator downloaded and setup a modpack from a projectID,fileID for modpackDir.
 serversetup.log.error.installserver.fabric=Something went wrong during the installation of Fabric. Maybe the Fabric server are down or unreachable? Skipping...
 serversetup.log.error.installserver.fabricfail=An error occurred during Fabric installation.
 serversetup.log.error.installserver.forge=Something went wrong during the installation of Forge. Maybe the Forge servers are down or unreachable? Skipping...
@@ -206,10 +206,10 @@ createmodpack.log.info.downloadmods.specificmod=Downloading mod %d of %d: %s | %
 createmodpack.log.info.downloadmods.tryagain=Trying again for mod %s (ID %s) | %s (ID %s).
 createmodpack.log.info.copyoverrides.info=Copying folders from overrides to modpack...
 createmodpack.log.info.checkcurseforgedir.create=CurseForge directory doesn't exist. We will download your file and create the modpack.
-createmodpack.log.info.checkcurseforgedir=CurseForge directory found.
+createmodpack.log.info.checkcurseforgedir=CurseForge directory found. Cleaning up...
 createmodpack.log.info.unziparchive=Extracting modpack ZIP-file.
-clisetup.log.info.start=You started serverpackcreator with the "%s" argument. Step-by-step generation of config file initiated...
-clisetup.log.info.modpack.enter=Please enter your modpack path. This path can be relative to serverpackcreator, or absolute.
+clisetup.log.info.start=You started ServerPackCreator with the "%s" argument. Step-by-step generation of config file initiated...
+clisetup.log.info.modpack.enter=Please enter your modpack path. This path can be relative to ServerPackCreator, or absolute.
 clisetup.log.info.modpack.example=Example: "./Some Modpack" or "C:/Minecraft/Some Modpack"
 clisetup.log.info.modpack.cli=Path to modpack directory:
 clisetup.log.info.clientmods.enter=Enter filenames of clientside-only mods, one per line. When you are done, simply press enter with empty input.
@@ -219,7 +219,7 @@ clisetup.log.info.answer=Answer:
 clisetup.log.info.copydirs.enter=Which directories should be copied to the server pack? These are folder names inside your modpack directory.
 clisetup.log.info.copydirs.specify=Specify your directories you want to be copied:
 clisetup.log.info.copydirs.checkreturninfo=If you are satisfied with these values, enter true. If not, enter false to restart clientmod configuration.
-clisetup.log.info.server.enter=Do you want serverpackcreator to install the modloader server for your server pack? Must be true or false.
+clisetup.log.info.server.enter=Do you want ServerPackCreator to install the modloader server for your server pack? Must be true or false.
 clisetup.log.info.server.include=Include modloader server installation:
 clisetup.log.info.minecraft.enter=Which version of Minecraft does your modpack use?
 clisetup.log.info.minecraft.specify=Minecraft version:
@@ -228,28 +228,29 @@ clisetup.log.info.modloader.cli=Modloader:
 clisetup.log.info.modloaderversion.enter=What version of %s does your modpack use?
 clisetup.log.info.modloaderversion.cli=Modloader version:
 clisetup.log.info.java.enter=Specify the path to your Java installation. Must end with "java" on Linux, or "java.exe" on Windows.
-clisetup.log.info.java.enter2=If you leave this empty, serverpackcreator will try to determine the path for you.
+clisetup.log.info.java.enter2=If you leave this empty, ServerPackCreator will try to determine the path for you.
 clisetup.log.info.java.example=Example Linux: /usr/bin/java | Example Windows: C:/Program Files/AdoptOpenJDK/jdk-8.0.275.1-hotspot/jre/bin/java.exe
 clisetup.log.info.java.cli=Path to your Java installation:
-clisetup.log.info.icon.enter=Do you want serverpackcreator to include a server-icon in your server pack? Must be true or false.
+clisetup.log.info.icon.enter=Do you want ServerPackCreator to include a server-icon in your server pack? Must be true or false.
 clisetup.log.info.icon.cli=Include server-icon.png:
-clisetup.log.info.properties.enter=Do you want serverpackcreator to include a server.properties in your server pack? Must be true or false.
+clisetup.log.info.properties.enter=Do you want ServerPackCreator to include a server.properties in your server pack? Must be true or false.
 clisetup.log.info.properties.cli=Include server.properties:
-clisetup.log.info.scripts.enter=Do you want serverpackcreator to include start scripts for Linux and Windows in your server pack? Must be true or false.
+clisetup.log.info.scripts.enter=Do you want ServerPackCreator to include start scripts for Linux and Windows in your server pack? Must be true or false.
 clisetup.log.info.scripts.cli=Include start scripts:
-clisetup.log.info.zip.enter=Do you want serverpackcreator to create a ZIP-archive of your server pack? Must be true or false.
+clisetup.log.info.zip.enter=Do you want ServerPackCreator to create a ZIP-archive of your server pack? Must be true or false.
 clisetup.log.info.zip.cli=Create ZIP-archive:
 clisetup.log.info.config.enter=If you are satisfied with these values, enter true. If not, enter false to restart config generation.
 clisetup.log.info.config.written=New config file successfully written. Thanks go to Whitebear60 for initially writing the CLI-Config-Generation.
 configcheck.log.info.checkconfig.start=Checking configuration...
 configcheck.log.info.checkconfig.success=Config check successful. No errors encountered.
+configcheck.log.info.checkconfig.skipmodpackcreation=Skipping creation of modpack from CurseForge projectID,fileID combination.
 configcheck.log.info.checkconfig.skipstart=Server installation disabled. Skipping check of:
 configcheck.log.info.checkconfig.skipjava=    Java path
 configcheck.log.info.checkconfig.skipminecraft=    Minecraft version
 configcheck.log.info.checkconfig.skipmodlaoder=    Modloader
 configcheck.log.info.checkconfig.skipmodloaderversion=    Modloader version
 configcheck.log.info.iscurse.display=Display name not found. Setting display name as file name on disk.
-configcheck.log.info.iscurse.fabric=Please make sure to check the configuration for the used Fabric version after serverpackcreator is done setting up the modpack and new config file.
+configcheck.log.info.iscurse.fabric=Please make sure to check the configuration for the used Fabric version after ServerPackCreator is done setting up the modpack and new config file.
 configcheck.log.info.iscurse.replace=Your old config file will now be replaced by a new one, with values gathered from the downloaded modpack.
 configcheck.log.info.containsfabric=Fabric detected. Setting modloader to Fabric.
 configcheck.log.info.suggestcopydirs.start=Preparing a list of directories to include in server pack...
@@ -353,7 +354,7 @@ configcheck.log.warn.checkcurseforge.warn2=You did not specify a CurseForge proj
 configcheck.log.warn.converttoboolean.warn=Warning. Couldn't parse boolean. Assuming false.
 configcheck.log.warn.printconfig.noclientmods=No client mods specified.
 configcheck.log.warn.checkmodpackdir=Warning: Couldn't find a directory with setting %s. Checking for CurseForge projectID,fileID next...
-configcheck.log.warn.getjavapath.empty=You didn't specify the path to your Java installation. serverpackcreator will try to determine it for you...
+configcheck.log.warn.getjavapath.empty=You didn't specify the path to your Java installation. ServerPackCreator will try to determine it for you...
 configcheck.log.warn.getjavapath.set=ServerPackCreator set the path to your Java installation to: %s
 configcheck.log.warn.checkconfig.clientmods=No clientside-only mods specified. Using fallback list.
 # BEWARE INDENTATION!
@@ -386,4 +387,4 @@ serverutilities.log.debug.downloadforgejar=Deleted incomplete Forge-installer...
 
 # TOPSICRETS
 topsicrets=You have discovered the top secret setting! Congratulations! Well, I say top secret, but it is really just for playing around.
-topsicrets.moar=More Look and Feels on your system:
+topsicrets.moar=More Look and Feels on your system:
\ No newline at end of file
diff --git a/src/main/resources/de/griefed/resources/lang/lang_en_us.properties b/src/main/resources/de/griefed/resources/lang/lang_en_us.properties
index b0895a86b..e99ccb2d4 100644
--- a/src/main/resources/de/griefed/resources/lang/lang_en_us.properties
+++ b/src/main/resources/de/griefed/resources/lang/lang_en_us.properties
@@ -20,7 +20,7 @@ createserverpack.gui.createandshowgui=ServerPackCreator
 createserverpack.gui.tabbedpane.createserverpack.title=Create Server Pack
 createserverpack.gui.tabbedpane.createserverpack.tip=Configure and start generation of server pack.
 createserverpack.gui.tabbedpane.serverpackcreatorlog.title=ServerPackCreator Log
-createserverpack.gui.tabbedpane.serverpackcreatorlog.tip=Latest serverpackcreator log tail.
+createserverpack.gui.tabbedpane.serverpackcreatorlog.tip=Latest ServerPackCreator log tail.
 createserverpack.gui.tabbedpane.modloaderinstallerlog.title=Modloader-Installer Log
 createserverpack.gui.tabbedpane.modloaderinstallerlog.tip=Latest modloader-installer log tail.
 createserverpack.gui.tabbedpane.about.title=About
@@ -86,7 +86,7 @@ createserverpack.gui.about.issue=Create an issue on GitHub.
 createserverpack.gui.about.discord=Get support and chat on Griefed's Discord server.
 
 # OTHER
-filessetup.writeconfigtofile.modpackdir=# Path to your modpack. Can be either relative or absolute.\n# Example: \"./Some Modpack\" or \"C:/Minecraft/Some Modpack\"\n# Can also be a combination of CurseForge projectID and fileID. Example for Survive Create Prosper 4 4.6.7: \"390331,3215793\"
+filessetup.writeconfigtofile.modpackdir=# Path to your modpack. Can be either relative or absolute.\n# Example: \"./Some Modpack\" or \"C:/Minecraft/Some Modpack\"\n# Can also be a combination of CurseForge projectID and fileID. Example for Survive Create Prosper 4 4.6.8: \"430517,3266321\"
 filessetup.writeconfigtofile.clientmods=# List of client-only mods to delete from serverpack.\n# No need to include version specifics. Must be the filenames of the mods, not their project names on CurseForge!\n# Example: [AmbientSounds,ClientTweaks,PackMenu,BetterAdvancement,jeiintegration]
 filessetup.writeconfigtofile.copydirs=# Name of directories to include in serverpack.\n# When specifying \"saves/world_name\", \"world_name\" will be copied to the base directory of the serverpack\n# for immediate use with the server. Automatically set when projectID,fileID for modpackDir has been specified.\n# Example: [config,mods,scripts] 
 filessetup.writeconfigtofile.includeserverinstallation=# Whether to install a Forge/Fabric server for the serverpack. Must be true or false.\n# Default value is true.
@@ -163,7 +163,7 @@ filessetup.log.error.writeconfigtofile.config=Could not delete existing config f
 filessetup.log.error.writeconfigtofile.old=Could not delete old existing config file from previous versions of ServerPackCreator.
 filessetup.log.error.writeconfigtofile=Error: Couldn't write serverpackcreator.conf.
 handler.log.error.system.properties=Error getting system properties.
-handler.log.error.runincli=Error: Please check your serverpackcreator.conf for any incorrect settings. This message is also displayed if serverpackcreator downloaded and setup a modpack from a projectID,fileID for modpackDir.
+handler.log.error.runincli=Error: Please check your serverpackcreator.conf for any incorrect settings. This message is also displayed if ServerPackCreator downloaded and setup a modpack from a projectID,fileID for modpackDir.
 serversetup.log.error.installserver.fabric=Something went wrong during the installation of Fabric. Maybe the Fabric server are down or unreachable? Skipping...
 serversetup.log.error.installserver.fabricfail=An error occurred during Fabric installation.
 serversetup.log.error.installserver.forge=Something went wrong during the installation of Forge. Maybe the Forge servers are down or unreachable? Skipping...
@@ -206,10 +206,10 @@ createmodpack.log.info.downloadmods.specificmod=Downloading mod %d of %d: %s | %
 createmodpack.log.info.downloadmods.tryagain=Trying again for mod %s (ID %s) | %s (ID %s).
 createmodpack.log.info.copyoverrides.info=Copying folders from overrides to modpack...
 createmodpack.log.info.checkcurseforgedir.create=CurseForge directory doesn't exist. We will download your file and create the modpack.
-createmodpack.log.info.checkcurseforgedir=CurseForge directory found.
+createmodpack.log.info.checkcurseforgedir=CurseForge directory found. Cleaning up...
 createmodpack.log.info.unziparchive=Extracting modpack ZIP-file.
-clisetup.log.info.start=You started serverpackcreator with the "%s" argument. Step-by-step generation of config file initiated...
-clisetup.log.info.modpack.enter=Please enter your modpack path. This path can be relative to serverpackcreator, or absolute.
+clisetup.log.info.start=You started ServerPackCreator with the "%s" argument. Step-by-step generation of config file initiated...
+clisetup.log.info.modpack.enter=Please enter your modpack path. This path can be relative to ServerPackCreator, or absolute.
 clisetup.log.info.modpack.example=Example: "./Some Modpack" or "C:/Minecraft/Some Modpack"
 clisetup.log.info.modpack.cli=Path to modpack directory:
 clisetup.log.info.clientmods.enter=Enter filenames of clientside-only mods, one per line. When you are done, simply press enter with empty input.
@@ -219,7 +219,7 @@ clisetup.log.info.answer=Answer:
 clisetup.log.info.copydirs.enter=Which directories should be copied to the server pack? These are folder names inside your modpack directory.
 clisetup.log.info.copydirs.specify=Specify your directories you want to be copied:
 clisetup.log.info.copydirs.checkreturninfo=If you are satisfied with these values, enter true. If not, enter false to restart clientmod configuration.
-clisetup.log.info.server.enter=Do you want serverpackcreator to install the modloader server for your server pack? Must be true or false.
+clisetup.log.info.server.enter=Do you want ServerPackCreator to install the modloader server for your server pack? Must be true or false.
 clisetup.log.info.server.include=Include modloader server installation:
 clisetup.log.info.minecraft.enter=Which version of Minecraft does your modpack use?
 clisetup.log.info.minecraft.specify=Minecraft version:
@@ -228,28 +228,29 @@ clisetup.log.info.modloader.cli=Modloader:
 clisetup.log.info.modloaderversion.enter=What version of %s does your modpack use?
 clisetup.log.info.modloaderversion.cli=Modloader version:
 clisetup.log.info.java.enter=Specify the path to your Java installation. Must end with "java" on Linux, or "java.exe" on Windows.
-clisetup.log.info.java.enter2=If you leave this empty, serverpackcreator will try to determine the path for you.
+clisetup.log.info.java.enter2=If you leave this empty, ServerPackCreator will try to determine the path for you.
 clisetup.log.info.java.example=Example Linux: /usr/bin/java | Example Windows: C:/Program Files/AdoptOpenJDK/jdk-8.0.275.1-hotspot/jre/bin/java.exe
 clisetup.log.info.java.cli=Path to your Java installation:
-clisetup.log.info.icon.enter=Do you want serverpackcreator to include a server-icon in your server pack? Must be true or false.
+clisetup.log.info.icon.enter=Do you want ServerPackCreator to include a server-icon in your server pack? Must be true or false.
 clisetup.log.info.icon.cli=Include server-icon.png:
-clisetup.log.info.properties.enter=Do you want serverpackcreator to include a server.properties in your server pack? Must be true or false.
+clisetup.log.info.properties.enter=Do you want ServerPackCreator to include a server.properties in your server pack? Must be true or false.
 clisetup.log.info.properties.cli=Include server.properties:
-clisetup.log.info.scripts.enter=Do you want serverpackcreator to include start scripts for Linux and Windows in your server pack? Must be true or false.
+clisetup.log.info.scripts.enter=Do you want ServerPackCreator to include start scripts for Linux and Windows in your server pack? Must be true or false.
 clisetup.log.info.scripts.cli=Include start scripts:
-clisetup.log.info.zip.enter=Do you want serverpackcreator to create a ZIP-archive of your server pack? Must be true or false.
+clisetup.log.info.zip.enter=Do you want ServerPackCreator to create a ZIP-archive of your server pack? Must be true or false.
 clisetup.log.info.zip.cli=Create ZIP-archive:
 clisetup.log.info.config.enter=If you are satisfied with these values, enter true. If not, enter false to restart config generation.
 clisetup.log.info.config.written=New config file successfully written. Thanks go to Whitebear60 for initially writing the CLI-Config-Generation.
 configcheck.log.info.checkconfig.start=Checking configuration...
 configcheck.log.info.checkconfig.success=Config check successful. No errors encountered.
+configcheck.log.info.checkconfig.skipmodpackcreation=Skipping creation of modpack from CurseForge projectID,fileID combination.
 configcheck.log.info.checkconfig.skipstart=Server installation disabled. Skipping check of:
 configcheck.log.info.checkconfig.skipjava=    Java path
 configcheck.log.info.checkconfig.skipminecraft=    Minecraft version
 configcheck.log.info.checkconfig.skipmodlaoder=    Modloader
 configcheck.log.info.checkconfig.skipmodloaderversion=    Modloader version
 configcheck.log.info.iscurse.display=Display name not found. Setting display name as file name on disk.
-configcheck.log.info.iscurse.fabric=Please make sure to check the configuration for the used Fabric version after serverpackcreator is done setting up the modpack and new config file.
+configcheck.log.info.iscurse.fabric=Please make sure to check the configuration for the used Fabric version after ServerPackCreator is done setting up the modpack and new config file.
 configcheck.log.info.iscurse.replace=Your old config file will now be replaced by a new one, with values gathered from the downloaded modpack.
 configcheck.log.info.containsfabric=Fabric detected. Setting modloader to Fabric.
 configcheck.log.info.suggestcopydirs.start=Preparing a list of directories to include in server pack...
@@ -353,7 +354,7 @@ configcheck.log.warn.checkcurseforge.warn2=You did not specify a CurseForge proj
 configcheck.log.warn.converttoboolean.warn=Warning. Couldn't parse boolean. Assuming false.
 configcheck.log.warn.printconfig.noclientmods=No client mods specified.
 configcheck.log.warn.checkmodpackdir=Warning: Couldn't find a directory with setting %s. Checking for CurseForge projectID,fileID next...
-configcheck.log.warn.getjavapath.empty=You didn't specify the path to your Java installation. serverpackcreator will try to determine it for you...
+configcheck.log.warn.getjavapath.empty=You didn't specify the path to your Java installation. ServerPackCreator will try to determine it for you...
 configcheck.log.warn.getjavapath.set=ServerPackCreator set the path to your Java installation to: %s
 configcheck.log.warn.checkconfig.clientmods=No clientside-only mods specified. Using fallback list.
 # BEWARE INDENTATION!
@@ -386,4 +387,4 @@ serverutilities.log.debug.downloadforgejar=Deleted incomplete Forge-installer...
 
 # TOPSICRETS
 topsicrets=You have discovered the top secret setting! Congratulations! Well, I say top secret, but it is really just for playing around.
-topsicrets.moar=More Look and Feels on your system:
+topsicrets.moar=More Look and Feels on your system:
\ No newline at end of file
diff --git a/src/main/resources/de/griefed/resources/lang/lang_uk_ua.properties b/src/main/resources/de/griefed/resources/lang/lang_uk_ua.properties
index 5f34a1bf6..8267f59de 100644
--- a/src/main/resources/de/griefed/resources/lang/lang_uk_ua.properties
+++ b/src/main/resources/de/griefed/resources/lang/lang_uk_ua.properties
@@ -20,7 +20,7 @@ createserverpack.gui.createandshowgui=ServerPackCreator
 createserverpack.gui.tabbedpane.createserverpack.title=Create Server Pack
 createserverpack.gui.tabbedpane.createserverpack.tip=Configure and start generation of server pack.
 createserverpack.gui.tabbedpane.serverpackcreatorlog.title=ServerPackCreator Log
-createserverpack.gui.tabbedpane.serverpackcreatorlog.tip=Latest serverpackcreator log tail.
+createserverpack.gui.tabbedpane.serverpackcreatorlog.tip=Latest ServerPackCreator log tail.
 createserverpack.gui.tabbedpane.modloaderinstallerlog.title=Modloader-Installer Log
 createserverpack.gui.tabbedpane.modloaderinstallerlog.tip=Latest modloader-installer log tail.
 createserverpack.gui.tabbedpane.about.title=About
@@ -86,7 +86,7 @@ createserverpack.gui.about.issue=Create an issue on GitHub.
 createserverpack.gui.about.discord=Get support and chat on Griefed's Discord server.
 
 # OTHER
-filessetup.writeconfigtofile.modpackdir=# Path to your modpack. Can be either relative or absolute.\n# Example: \"./Some Modpack\" or \"C:/Minecraft/Some Modpack\"\n# Can also be a combination of CurseForge projectID and fileID. Example for Survive Create Prosper 4 4.6.7: \"390331,3215793\"
+filessetup.writeconfigtofile.modpackdir=# Path to your modpack. Can be either relative or absolute.\n# Example: \"./Some Modpack\" or \"C:/Minecraft/Some Modpack\"\n# Can also be a combination of CurseForge projectID and fileID. Example for Survive Create Prosper 4 4.6.8: \"430517,3266321\"
 filessetup.writeconfigtofile.clientmods=# List of client-only mods to delete from serverpack.\n# No need to include version specifics. Must be the filenames of the mods, not their project names on CurseForge!\n# Example: [AmbientSounds,ClientTweaks,PackMenu,BetterAdvancement,jeiintegration]
 filessetup.writeconfigtofile.copydirs=# Name of directories to include in serverpack.\n# When specifying \"saves/world_name\", \"world_name\" will be copied to the base directory of the serverpack\n# for immediate use with the server. Automatically set when projectID,fileID for modpackDir has been specified.\n# Example: [config,mods,scripts] 
 filessetup.writeconfigtofile.includeserverinstallation=# Whether to install a Forge/Fabric server for the serverpack. Must be true or false.\n# Default value is true.
@@ -163,7 +163,7 @@ filessetup.log.error.writeconfigtofile.config=Could not delete existing config f
 filessetup.log.error.writeconfigtofile.old=Could not delete old existing config file from previous versions of ServerPackCreator.
 filessetup.log.error.writeconfigtofile=Error: Couldn't write serverpackcreator.conf.
 handler.log.error.system.properties=Error getting system properties.
-handler.log.error.runincli=Error: Please check your serverpackcreator.conf for any incorrect settings. This message is also displayed if serverpackcreator downloaded and setup a modpack from a projectID,fileID for modpackDir.
+handler.log.error.runincli=Error: Please check your serverpackcreator.conf for any incorrect settings. This message is also displayed if ServerPackCreator downloaded and setup a modpack from a projectID,fileID for modpackDir.
 serversetup.log.error.installserver.fabric=Something went wrong during the installation of Fabric. Maybe the Fabric server are down or unreachable? Skipping...
 serversetup.log.error.installserver.fabricfail=An error occurred during Fabric installation.
 serversetup.log.error.installserver.forge=Something went wrong during the installation of Forge. Maybe the Forge servers are down or unreachable? Skipping...
@@ -206,10 +206,10 @@ createmodpack.log.info.downloadmods.specificmod=Downloading mod %d of %d: %s | %
 createmodpack.log.info.downloadmods.tryagain=Trying again for mod %s (ID %s) | %s (ID %s).
 createmodpack.log.info.copyoverrides.info=Copying folders from overrides to modpack...
 createmodpack.log.info.checkcurseforgedir.create=CurseForge directory doesn't exist. We will download your file and create the modpack.
-createmodpack.log.info.checkcurseforgedir=CurseForge directory found.
+createmodpack.log.info.checkcurseforgedir=CurseForge directory found. Cleaning up...
 createmodpack.log.info.unziparchive=Extracting modpack ZIP-file.
-clisetup.log.info.start=You started serverpackcreator with the "%s" argument. Step-by-step generation of config file initiated...
-clisetup.log.info.modpack.enter=Please enter your modpack path. This path can be relative to serverpackcreator, or absolute.
+clisetup.log.info.start=You started ServerPackCreator with the "%s" argument. Step-by-step generation of config file initiated...
+clisetup.log.info.modpack.enter=Please enter your modpack path. This path can be relative to ServerPackCreator, or absolute.
 clisetup.log.info.modpack.example=Example: "./Some Modpack" or "C:/Minecraft/Some Modpack"
 clisetup.log.info.modpack.cli=Path to modpack directory:
 clisetup.log.info.clientmods.enter=Enter filenames of clientside-only mods, one per line. When you are done, simply press enter with empty input.
@@ -219,7 +219,7 @@ clisetup.log.info.answer=Answer:
 clisetup.log.info.copydirs.enter=Which directories should be copied to the server pack? These are folder names inside your modpack directory.
 clisetup.log.info.copydirs.specify=Specify your directories you want to be copied:
 clisetup.log.info.copydirs.checkreturninfo=If you are satisfied with these values, enter true. If not, enter false to restart clientmod configuration.
-clisetup.log.info.server.enter=Do you want serverpackcreator to install the modloader server for your server pack? Must be true or false.
+clisetup.log.info.server.enter=Do you want ServerPackCreator to install the modloader server for your server pack? Must be true or false.
 clisetup.log.info.server.include=Include modloader server installation:
 clisetup.log.info.minecraft.enter=Which version of Minecraft does your modpack use?
 clisetup.log.info.minecraft.specify=Minecraft version:
@@ -228,28 +228,29 @@ clisetup.log.info.modloader.cli=Modloader:
 clisetup.log.info.modloaderversion.enter=What version of %s does your modpack use?
 clisetup.log.info.modloaderversion.cli=Modloader version:
 clisetup.log.info.java.enter=Specify the path to your Java installation. Must end with "java" on Linux, or "java.exe" on Windows.
-clisetup.log.info.java.enter2=If you leave this empty, serverpackcreator will try to determine the path for you.
+clisetup.log.info.java.enter2=If you leave this empty, ServerPackCreator will try to determine the path for you.
 clisetup.log.info.java.example=Example Linux: /usr/bin/java | Example Windows: C:/Program Files/AdoptOpenJDK/jdk-8.0.275.1-hotspot/jre/bin/java.exe
 clisetup.log.info.java.cli=Path to your Java installation:
-clisetup.log.info.icon.enter=Do you want serverpackcreator to include a server-icon in your server pack? Must be true or false.
+clisetup.log.info.icon.enter=Do you want ServerPackCreator to include a server-icon in your server pack? Must be true or false.
 clisetup.log.info.icon.cli=Include server-icon.png:
-clisetup.log.info.properties.enter=Do you want serverpackcreator to include a server.properties in your server pack? Must be true or false.
+clisetup.log.info.properties.enter=Do you want ServerPackCreator to include a server.properties in your server pack? Must be true or false.
 clisetup.log.info.properties.cli=Include server.properties:
-clisetup.log.info.scripts.enter=Do you want serverpackcreator to include start scripts for Linux and Windows in your server pack? Must be true or false.
+clisetup.log.info.scripts.enter=Do you want ServerPackCreator to include start scripts for Linux and Windows in your server pack? Must be true or false.
 clisetup.log.info.scripts.cli=Include start scripts:
-clisetup.log.info.zip.enter=Do you want serverpackcreator to create a ZIP-archive of your server pack? Must be true or false.
+clisetup.log.info.zip.enter=Do you want ServerPackCreator to create a ZIP-archive of your server pack? Must be true or false.
 clisetup.log.info.zip.cli=Create ZIP-archive:
 clisetup.log.info.config.enter=If you are satisfied with these values, enter true. If not, enter false to restart config generation.
 clisetup.log.info.config.written=New config file successfully written. Thanks go to Whitebear60 for initially writing the CLI-Config-Generation.
 configcheck.log.info.checkconfig.start=Checking configuration...
 configcheck.log.info.checkconfig.success=Config check successful. No errors encountered.
+configcheck.log.info.checkconfig.skipmodpackcreation=Skipping creation of modpack from CurseForge projectID,fileID combination.
 configcheck.log.info.checkconfig.skipstart=Server installation disabled. Skipping check of:
 configcheck.log.info.checkconfig.skipjava=    Java path
 configcheck.log.info.checkconfig.skipminecraft=    Minecraft version
 configcheck.log.info.checkconfig.skipmodlaoder=    Modloader
 configcheck.log.info.checkconfig.skipmodloaderversion=    Modloader version
 configcheck.log.info.iscurse.display=Display name not found. Setting display name as file name on disk.
-configcheck.log.info.iscurse.fabric=Please make sure to check the configuration for the used Fabric version after serverpackcreator is done setting up the modpack and new config file.
+configcheck.log.info.iscurse.fabric=Please make sure to check the configuration for the used Fabric version after ServerPackCreator is done setting up the modpack and new config file.
 configcheck.log.info.iscurse.replace=Your old config file will now be replaced by a new one, with values gathered from the downloaded modpack.
 configcheck.log.info.containsfabric=Fabric detected. Setting modloader to Fabric.
 configcheck.log.info.suggestcopydirs.start=Preparing a list of directories to include in server pack...
@@ -353,7 +354,7 @@ configcheck.log.warn.checkcurseforge.warn2=You did not specify a CurseForge proj
 configcheck.log.warn.converttoboolean.warn=Warning. Couldn't parse boolean. Assuming false.
 configcheck.log.warn.printconfig.noclientmods=No client mods specified.
 configcheck.log.warn.checkmodpackdir=Warning: Couldn't find a directory with setting %s. Checking for CurseForge projectID,fileID next...
-configcheck.log.warn.getjavapath.empty=You didn't specify the path to your Java installation. serverpackcreator will try to determine it for you...
+configcheck.log.warn.getjavapath.empty=You didn't specify the path to your Java installation. ServerPackCreator will try to determine it for you...
 configcheck.log.warn.getjavapath.set=ServerPackCreator set the path to your Java installation to: %s
 configcheck.log.warn.checkconfig.clientmods=No clientside-only mods specified. Using fallback list.
 # BEWARE INDENTATION!
@@ -386,4 +387,4 @@ serverutilities.log.debug.downloadforgejar=Deleted incomplete Forge-installer...
 
 # TOPSICRETS
 topsicrets=You have discovered the top secret setting! Congratulations! Well, I say top secret, but it is really just for playing around.
-topsicrets.moar=More Look and Feels on your system:
+topsicrets.moar=More Look and Feels on your system:
\ No newline at end of file
diff --git a/src/main/resources/de/griefed/resources/serverpackcreator.conf b/src/main/resources/de/griefed/resources/serverpackcreator.conf
index 95485c819..d08cab330 100644
--- a/src/main/resources/de/griefed/resources/serverpackcreator.conf
+++ b/src/main/resources/de/griefed/resources/serverpackcreator.conf
@@ -1,6 +1,6 @@
 # Path to your modpack. Can be either relative or absolute.
 # Example: "./Some Modpack" or "C:\Minecraft\Some Modpack"
-# Can also be a combination of CurseForge projectID and fileID. Example for Survive Create Prosper 4 4.6.7: "390331,3215793"
+# Can also be a combination of CurseForge projectID and fileID. Example for Survive Create Prosper 4 4.6.8: "430517,3266321"
 modpackDir = ""
 
 # List of client-only mods to delete from serverpack.
-- 
GitLab


From 64f0ea763078da8bae2a874b24c360e978387e8c Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Sat, 1 May 2021 21:27:22 +0200
Subject: [PATCH 27/91] refactor(DI): Update javadocs, improve creation of
 modpack from CurseForge ID combination, improve GUI for CurseForge modpack
 creation

---
 .../serverpackcreator/Configuration.java      | 30 ++++++--
 .../serverpackcreator/CreateServerPack.java   |  2 +-
 .../serverpackcreator/gui/CreateGui.java      | 18 +++--
 .../gui/CreateServerPackTab.java              | 32 ++++----
 .../gui/ServerPackCreatorLogTab.java          |  4 +-
 .../resources/lang/lang_de_de.properties      | 10 ++-
 .../resources/lang/lang_en_us.properties      | 10 ++-
 .../resources/lang/lang_uk_ua.properties      | 10 ++-
 ...gCheckTest.java => ConfigurationTest.java} | 77 +++++++++++--------
 9 files changed, 124 insertions(+), 69 deletions(-)
 rename src/test/java/de/griefed/serverpackcreator/{ConfigCheckTest.java => ConfigurationTest.java} (79%)

diff --git a/src/main/java/de/griefed/serverpackcreator/Configuration.java b/src/main/java/de/griefed/serverpackcreator/Configuration.java
index d635040bb..2e56f6b92 100644
--- a/src/main/java/de/griefed/serverpackcreator/Configuration.java
+++ b/src/main/java/de/griefed/serverpackcreator/Configuration.java
@@ -307,7 +307,7 @@ public class Configuration {
      * {@link #checkConfigFile(File, boolean)}<br>
      * {@link #isCurse()}
      */
-    List<String> getCopyDirs() {
+    public List<String> getCopyDirs() {
         return copyDirs;
     }
 
@@ -317,6 +317,14 @@ public class Configuration {
      * @param newCopyDirs The new list of directories to include in server pack to store.
      */
     void setCopyDirs(List<String> newCopyDirs) {
+        for (int i = 0; i < newCopyDirs.size(); i++) {
+            if (newCopyDirs.get(i).equalsIgnoreCase("server_pack")) {
+                newCopyDirs.remove(i);
+            }
+        }
+
+//        String string_server_pack = "server_pack";
+//        newCopyDirs.removeIf(n -> Objects.equals(n, string_server_pack));
         this.copyDirs = newCopyDirs;
     }
 
@@ -327,7 +335,7 @@ public class Configuration {
      * {@link #isDir(String)}<br>
      * {@link #isCurse()}
      */
-    String getModpackDir() {
+    public String getModpackDir() {
         return modpackDir;
     }
 
@@ -747,7 +755,7 @@ public class Configuration {
 
                         } else {
 
-                            setModLoaderCase(modLoaderVersion[0]);
+                            setModLoader("Forge");
                             setModLoaderVersion(modLoaderVersion[1]);
 
                         }
@@ -773,10 +781,14 @@ public class Configuration {
                             getModpackDir(),
                             buildString(getClientMods().toString()),
                             buildString(getCopyDirs().toString()),
-                            getIncludeServerInstallation(), getJavaPath(),
-                            getMinecraftVersion(), getModLoader(),
-                            getModLoaderVersion(), getIncludeServerIcon(),
-                            getIncludeServerProperties(), getIncludeStartScripts(),
+                            getIncludeServerInstallation(),
+                            getJavaPath(),
+                            getMinecraftVersion(),
+                            getModLoader(),
+                            getModLoaderVersion(),
+                            getIncludeServerIcon(),
+                            getIncludeServerProperties(),
+                            getIncludeStartScripts(),
                             getIncludeZipCreation(),
                             getConfigFile(),
                             false
@@ -830,7 +842,8 @@ public class Configuration {
         String[] dirsNotToCopy = {
                 "overrides",
                 "packmenu",
-                "resourcepacks"
+                "resourcepacks",
+                "server_pack"
         };
 
         String[] copyDirs = new String[0];
@@ -1857,6 +1870,7 @@ public class Configuration {
             writer.write(configString);
             writer.close();
             configWritten = true;
+            appLogger.info(localizationManager.getLocalizedString("filessetup.log.info.writeconfigtofile.confignew"));
         } catch (IOException ex) {
             appLogger.error(localizationManager.getLocalizedString("filessetup.log.error.writeconfigtofile"), ex);
         }
diff --git a/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java b/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
index d4f8628f7..aada39a61 100644
--- a/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
+++ b/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
@@ -202,7 +202,7 @@ public class CreateServerPack {
      * @return Boolean. Returns true if the server pack was successfully generated.
      */
     public boolean run() {
-        if (!configuration.checkConfigFile(configuration.getConfigFile())) {
+        if (!configuration.checkConfigFile(configuration.getConfigFile(), true)) {
 
             cleanupEnvironment(configuration.getModpackDir());
 
diff --git a/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java b/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java
index 16a5ed96c..4f15d697f 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java
@@ -17,13 +17,14 @@
  *
  * The full license can be found at https:github.com/Griefed/ServerPackCreator/blob/main/LICENSE
  */
-
+//TODO: Write table of contents
 package de.griefed.serverpackcreator.gui;
 
 import com.typesafe.config.Config;
 import com.typesafe.config.ConfigException;
 import com.typesafe.config.ConfigFactory;
 import de.griefed.serverpackcreator.Configuration;
+import de.griefed.serverpackcreator.CreateServerPack;
 import de.griefed.serverpackcreator.curseforgemodpack.CurseCreateModpack;
 import de.griefed.serverpackcreator.i18n.LocalizationManager;
 import org.apache.logging.log4j.LogManager;
@@ -34,7 +35,7 @@ import java.awt.*;
 import java.awt.event.KeyEvent;
 import java.io.File;
 import java.util.Objects;
-
+//TODO: Write docs for class
 public class CreateGui extends JPanel {
     private static final Logger appLogger = LogManager.getLogger(CreateGui.class);
 
@@ -45,8 +46,9 @@ public class CreateGui extends JPanel {
     private LocalizationManager localizationManager;
     private Configuration configuration;
     private CurseCreateModpack curseCreateModpack;
+    private CreateServerPack createServerPack;
 
-    public CreateGui(LocalizationManager injectedLocalizationManager, Configuration injectedConfiguration, CurseCreateModpack injectectedCurseCreateModpack) {
+    public CreateGui(LocalizationManager injectedLocalizationManager, Configuration injectedConfiguration, CurseCreateModpack injectectedCurseCreateModpack, CreateServerPack injectedCreateServerPack) {
         super(new GridLayout(1, 1));
 
         if (injectedLocalizationManager == null) {
@@ -67,9 +69,15 @@ public class CreateGui extends JPanel {
             this.configuration = injectedConfiguration;
         }
 
+        if (injectedCreateServerPack == null) {
+            this.createServerPack = new CreateServerPack(localizationManager, configuration, curseCreateModpack);
+        } else {
+            this.createServerPack = injectedCreateServerPack;
+        }
+
         JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
 
-        tabbedPane.addTab(localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.createserverpack.title"), null, new CreateServerPackTab(localizationManager, configuration, curseCreateModpack).createServerPackTab(), localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.createserverpack.tip"));
+        tabbedPane.addTab(localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.createserverpack.title"), null, new CreateServerPackTab(localizationManager, configuration, curseCreateModpack, createServerPack).createServerPackTab(), localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.createserverpack.tip"));
         tabbedPane.setMnemonicAt(0, KeyEvent.VK_1);
 
         tabbedPane.addTab(localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.serverpackcreatorlog.title"), null, new ServerPackCreatorLogTab(localizationManager).serverPackCreatorLogTab(), localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.serverpackcreatorlog.tip"));
@@ -138,7 +146,7 @@ public class CreateGui extends JPanel {
         banner.setOpaque(false);
 
         frame.add(banner, BorderLayout.PAGE_START);
-        frame.add(new CreateGui(localizationManager, configuration, curseCreateModpack), BorderLayout.CENTER);
+        frame.add(new CreateGui(localizationManager, configuration, curseCreateModpack, createServerPack), BorderLayout.CENTER);
 
         frame.setPreferredSize(windowDimension);
         frame.setMaximumSize(windowDimension);
diff --git a/src/main/java/de/griefed/serverpackcreator/gui/CreateServerPackTab.java b/src/main/java/de/griefed/serverpackcreator/gui/CreateServerPackTab.java
index f6a2f7f86..ec95f7540 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/CreateServerPackTab.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/CreateServerPackTab.java
@@ -17,7 +17,7 @@
  *
  * The full license can be found at https:github.com/Griefed/ServerPackCreator/blob/main/LICENSE
  */
-
+//TODO: Write table of contents
 package de.griefed.serverpackcreator.gui;
 
 import com.typesafe.config.Config;
@@ -43,7 +43,7 @@ import java.util.Arrays;
 import java.util.Objects;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
-
+//TODO: Write docs for class
 public class CreateServerPackTab extends Component {
     private static final Logger appLogger = LogManager.getLogger(CreateServerPackTab.class);
 
@@ -58,8 +58,9 @@ public class CreateServerPackTab extends Component {
     private Configuration configuration;
     private LocalizationManager localizationManager;
     private CurseCreateModpack curseCreateModpack;
+    private CreateServerPack createServerPack;
 
-    public CreateServerPackTab(LocalizationManager injectedLocalizationManager, Configuration injectedConfiguration, CurseCreateModpack injectectedCurseCreateModpack) {
+    public CreateServerPackTab(LocalizationManager injectedLocalizationManager, Configuration injectedConfiguration, CurseCreateModpack injectectedCurseCreateModpack, CreateServerPack injectedCreateServerPack) {
         if (injectedLocalizationManager == null) {
             this.localizationManager = new LocalizationManager();
         } else {
@@ -78,6 +79,11 @@ public class CreateServerPackTab extends Component {
             this.configuration = injectedConfiguration;
         }
 
+        if (createServerPack == null) {
+            this.createServerPack = new CreateServerPack(localizationManager, configuration, curseCreateModpack);
+        } else {
+            this.createServerPack = injectedCreateServerPack;
+        }
     }
 
     JComponent createServerPackTab() {
@@ -511,6 +517,7 @@ public class CreateServerPackTab extends Component {
         constraints.insets = new Insets(5,0,5,0);
 
         JLabel labelGenerateServerPack = new JLabel(localizationManager.getLocalizedString("createserverpack.gui.buttongenerateserverpack.ready"));
+        labelGenerateServerPack.setFont(new Font(labelGenerateServerPack.getFont().getName(), Font.BOLD, labelGenerateServerPack.getFont().getSize()));
         constraints.gridx = 0;
         constraints.gridy = 18;
         constraints.gridwidth = 4;
@@ -545,7 +552,7 @@ public class CreateServerPackTab extends Component {
                     new File("serverpackcreator.tmp"),
                     true
             );
-            if (!configuration.checkConfigFile(new File("serverpackcreator.tmp"))) {
+            if (!configuration.checkConfigFile(new File("serverpackcreator.tmp"), false)) {
                 appLogger.info(localizationManager.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.checked"));
                 labelGenerateServerPack.setText(localizationManager.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.checked"));
 
@@ -593,7 +600,6 @@ public class CreateServerPackTab extends Component {
 
                 final ExecutorService executorService = Executors.newSingleThreadExecutor();
                 executorService.execute(() -> {
-                    CreateServerPack createServerPack = new CreateServerPack(localizationManager, configuration, curseCreateModpack);
                     if (createServerPack.run()) {
                         tailer.stop();
 
@@ -602,16 +608,15 @@ public class CreateServerPackTab extends Component {
 
                         buttonGenerateServerPack.setEnabled(true);
                         labelGenerateServerPack.setText(localizationManager.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.ready"));
+                        textModpackDir.setText(configuration.getModpackDir());
+                        textCopyDirs.setText(configuration.getCopyDirs().toString().replace("[","").replace("]",""));
 
                         JTextArea textArea = new JTextArea();
                         textArea.setOpaque(false);
                         textArea.setText(String.format(
                                 "%s\n%s",
                                 localizationManager.getLocalizedString("createserverpack.gui.createserverpack.openfolder.browse"),
-                                String.format(
-                                        "%s/server_pack",
-                                        textModpackDir.getText()
-                                        )
+                                String.format("%s/server_pack",configuration.getModpackDir())
                                 )
                         );
 
@@ -622,16 +627,17 @@ public class CreateServerPackTab extends Component {
                                 JOptionPane.YES_NO_OPTION,
                                 JOptionPane.INFORMATION_MESSAGE) == 0) {
                             try {
-                                Desktop.getDesktop().open(new File(String.format("%s/server_pack",textModpackDir.getText())));
+                                Desktop.getDesktop().open(new File(String.format("%s/server_pack",configuration.getModpackDir())));
                             } catch (IOException ex) {
                                 appLogger.error(localizationManager.getLocalizedString("createserverpack.log.error.browserserverpack"));
                             }
                         }
+                        buttonGenerateServerPack.setEnabled(true);
+                        System.gc();
+                        System.runFinalization();
+                        tailer.stop();
                         executorService.shutdown();
 
-
-
-
                     } else {
                         tailer.stop();
 
diff --git a/src/main/java/de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.java b/src/main/java/de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.java
index 77f6125d2..2f9da7b2e 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.java
@@ -27,8 +27,8 @@ import org.apache.commons.io.input.TailerListenerAdapter;
 import javax.swing.*;
 import java.awt.*;
 import java.io.File;
-
-class ServerPackCreatorLogTab extends Component {
+//TODO: Write docs for class
+public class ServerPackCreatorLogTab extends Component {
 
     private LocalizationManager localizationManager;
 
diff --git a/src/main/resources/de/griefed/resources/lang/lang_de_de.properties b/src/main/resources/de/griefed/resources/lang/lang_de_de.properties
index 2e61dc705..6dfd2575c 100644
--- a/src/main/resources/de/griefed/resources/lang/lang_de_de.properties
+++ b/src/main/resources/de/griefed/resources/lang/lang_de_de.properties
@@ -115,6 +115,7 @@ createmodpack.log.error.unziparchive.createdir=Failed to create directory %s
 createmodpack.log.error.unziparchive.extract=Error: There was an error extracting the archive %s
 createmodpack.log.error.newfile.path=Error: There was an error getting the path for %s
 createmodpack.log.error.newfile.outside=Entry is outside of the target dir: %s
+createmodpack.log.error.cleanupenvironment=Error deleting a file from the CurseForge directory %s
 clisetup.log.error.answer=Incorrect value specified. Please try again.
 configcheck.log.error.checkconfig.start=Couldn't parse config file. Consider checking your config file and fixing empty values. If the value needs to be an empty string, leave its value to "".
 configcheck.log.error.checkconfig.failure=Config check not successful. Check your config for errors.
@@ -208,6 +209,8 @@ createmodpack.log.info.copyoverrides.info=Copying folders from overrides to modp
 createmodpack.log.info.checkcurseforgedir.create=CurseForge directory doesn't exist. We will download your file and create the modpack.
 createmodpack.log.info.checkcurseforgedir=CurseForge directory found. Cleaning up...
 createmodpack.log.info.unziparchive=Extracting modpack ZIP-file.
+createmodpack.log.info.cleanupenvironment.enter=Starting cleanup of CurseForge environment.
+createmodpack.log.info.cleanupenvironment.complete=Cleanup of CurseForge environment complete.
 clisetup.log.info.start=You started ServerPackCreator with the "%s" argument. Step-by-step generation of config file initiated...
 clisetup.log.info.modpack.enter=Please enter your modpack path. This path can be relative to ServerPackCreator, or absolute.
 clisetup.log.info.modpack.example=Example: "./Some Modpack" or "C:/Minecraft/Some Modpack"
@@ -297,7 +300,8 @@ filessetup.log.info.checkforforgelinux=start-forge.sh generated. Please customiz
 filessetup.log.info.checkforforgewindows=start-forge.bat generated. Please customize if you intend on using it.
 filessetup.log.info.checkforproperties=server.properties generated. Please customize if you intend on using it.
 filessetup.log.info.checkforicon=server-icon.png generated. Please customize if you intend on using it.
-filessetup.log.info.writeconfigtofile.config=Deleted existing config file to replace with new one.
+filessetup.log.info.writeconfigtofile.config=Deleted existing configuration file.
+filessetup.log.info.writeconfigtofile.confignew=Successfully written new configuration file.
 filessetup.log.info.writeconfigtofile.old=Deleted old existing config file from previous versions of ServerPackCreator, to ensure new one is always used.
 handler.log.info.system.enter=SYSTEM INFORMATION:
 handler.log.info.system.jarpath=JAR Path: %s
@@ -344,8 +348,8 @@ createserverpack.log.info.buttonloadconfigfromfile.finish=Configuration successf
 createserverpack.log.info.buttoncreateserverpack.start=Checking entered configuration.
 createserverpack.log.info.buttoncreateserverpack.checked=Configuration checked successfully.
 createserverpack.log.info.buttoncreateserverpack.tempfile=Deleted temporary config file.
-createserverpack.log.info.buttoncreateserverpack.writing=Writing configuration to file.
-createserverpack.log.info.buttoncreateserverpack.generating=Generating server pack.
+createserverpack.log.info.buttoncreateserverpack.writing=Writing GUI configuration to new serverpackcreator.conf.
+createserverpack.log.info.buttoncreateserverpack.generating=Starting ServerPackCreator run.
 createserverpack.log.info.buttoncreateserverpack.ready=ServerPackCreator ready.
 
 ## Warn logs
diff --git a/src/main/resources/de/griefed/resources/lang/lang_en_us.properties b/src/main/resources/de/griefed/resources/lang/lang_en_us.properties
index e99ccb2d4..9583239cb 100644
--- a/src/main/resources/de/griefed/resources/lang/lang_en_us.properties
+++ b/src/main/resources/de/griefed/resources/lang/lang_en_us.properties
@@ -115,6 +115,7 @@ createmodpack.log.error.unziparchive.createdir=Failed to create directory %s
 createmodpack.log.error.unziparchive.extract=Error: There was an error extracting the archive %s
 createmodpack.log.error.newfile.path=Error: There was an error getting the path for %s
 createmodpack.log.error.newfile.outside=Entry is outside of the target dir: %s
+createmodpack.log.error.cleanupenvironment=Error deleting a file from the CurseForge directory %s
 clisetup.log.error.answer=Incorrect value specified. Please try again.
 configcheck.log.error.checkconfig.start=Couldn't parse config file. Consider checking your config file and fixing empty values. If the value needs to be an empty string, leave its value to "".
 configcheck.log.error.checkconfig.failure=Config check not successful. Check your config for errors.
@@ -208,6 +209,8 @@ createmodpack.log.info.copyoverrides.info=Copying folders from overrides to modp
 createmodpack.log.info.checkcurseforgedir.create=CurseForge directory doesn't exist. We will download your file and create the modpack.
 createmodpack.log.info.checkcurseforgedir=CurseForge directory found. Cleaning up...
 createmodpack.log.info.unziparchive=Extracting modpack ZIP-file.
+createmodpack.log.info.cleanupenvironment.enter=Starting cleanup of CurseForge environment.
+createmodpack.log.info.cleanupenvironment.complete=Cleanup of CurseForge environment complete.
 clisetup.log.info.start=You started ServerPackCreator with the "%s" argument. Step-by-step generation of config file initiated...
 clisetup.log.info.modpack.enter=Please enter your modpack path. This path can be relative to ServerPackCreator, or absolute.
 clisetup.log.info.modpack.example=Example: "./Some Modpack" or "C:/Minecraft/Some Modpack"
@@ -297,7 +300,8 @@ filessetup.log.info.checkforforgelinux=start-forge.sh generated. Please customiz
 filessetup.log.info.checkforforgewindows=start-forge.bat generated. Please customize if you intend on using it.
 filessetup.log.info.checkforproperties=server.properties generated. Please customize if you intend on using it.
 filessetup.log.info.checkforicon=server-icon.png generated. Please customize if you intend on using it.
-filessetup.log.info.writeconfigtofile.config=Deleted existing config file to replace with new one.
+filessetup.log.info.writeconfigtofile.config=Deleted existing configuration file.
+filessetup.log.info.writeconfigtofile.confignew=Successfully written new configuration file.
 filessetup.log.info.writeconfigtofile.old=Deleted old existing config file from previous versions of ServerPackCreator, to ensure new one is always used.
 handler.log.info.system.enter=SYSTEM INFORMATION:
 handler.log.info.system.jarpath=JAR Path: %s
@@ -344,8 +348,8 @@ createserverpack.log.info.buttonloadconfigfromfile.finish=Configuration successf
 createserverpack.log.info.buttoncreateserverpack.start=Checking entered configuration.
 createserverpack.log.info.buttoncreateserverpack.checked=Configuration checked successfully.
 createserverpack.log.info.buttoncreateserverpack.tempfile=Deleted temporary config file.
-createserverpack.log.info.buttoncreateserverpack.writing=Writing configuration to file.
-createserverpack.log.info.buttoncreateserverpack.generating=Generating server pack.
+createserverpack.log.info.buttoncreateserverpack.writing=Writing GUI configuration to new serverpackcreator.conf.
+createserverpack.log.info.buttoncreateserverpack.generating=Starting ServerPackCreator run.
 createserverpack.log.info.buttoncreateserverpack.ready=ServerPackCreator ready.
 
 ## Warn logs
diff --git a/src/main/resources/de/griefed/resources/lang/lang_uk_ua.properties b/src/main/resources/de/griefed/resources/lang/lang_uk_ua.properties
index 8267f59de..7b26ef92f 100644
--- a/src/main/resources/de/griefed/resources/lang/lang_uk_ua.properties
+++ b/src/main/resources/de/griefed/resources/lang/lang_uk_ua.properties
@@ -115,6 +115,7 @@ createmodpack.log.error.unziparchive.createdir=Failed to create directory %s
 createmodpack.log.error.unziparchive.extract=Error: There was an error extracting the archive %s
 createmodpack.log.error.newfile.path=Error: There was an error getting the path for %s
 createmodpack.log.error.newfile.outside=Entry is outside of the target dir: %s
+createmodpack.log.error.cleanupenvironment=Error deleting a file from the CurseForge directory %s
 clisetup.log.error.answer=Incorrect value specified. Please try again.
 configcheck.log.error.checkconfig.start=Couldn't parse config file. Consider checking your config file and fixing empty values. If the value needs to be an empty string, leave its value to "".
 configcheck.log.error.checkconfig.failure=Config check not successful. Check your config for errors.
@@ -208,6 +209,8 @@ createmodpack.log.info.copyoverrides.info=Copying folders from overrides to modp
 createmodpack.log.info.checkcurseforgedir.create=CurseForge directory doesn't exist. We will download your file and create the modpack.
 createmodpack.log.info.checkcurseforgedir=CurseForge directory found. Cleaning up...
 createmodpack.log.info.unziparchive=Extracting modpack ZIP-file.
+createmodpack.log.info.cleanupenvironment.enter=Starting cleanup of CurseForge environment.
+createmodpack.log.info.cleanupenvironment.complete=Cleanup of CurseForge environment complete.
 clisetup.log.info.start=You started ServerPackCreator with the "%s" argument. Step-by-step generation of config file initiated...
 clisetup.log.info.modpack.enter=Please enter your modpack path. This path can be relative to ServerPackCreator, or absolute.
 clisetup.log.info.modpack.example=Example: "./Some Modpack" or "C:/Minecraft/Some Modpack"
@@ -297,7 +300,8 @@ filessetup.log.info.checkforforgelinux=start-forge.sh generated. Please customiz
 filessetup.log.info.checkforforgewindows=start-forge.bat generated. Please customize if you intend on using it.
 filessetup.log.info.checkforproperties=server.properties generated. Please customize if you intend on using it.
 filessetup.log.info.checkforicon=server-icon.png generated. Please customize if you intend on using it.
-filessetup.log.info.writeconfigtofile.config=Deleted existing config file to replace with new one.
+filessetup.log.info.writeconfigtofile.config=Deleted existing configuration file.
+filessetup.log.info.writeconfigtofile.confignew=Successfully written new configuration file.
 filessetup.log.info.writeconfigtofile.old=Deleted old existing config file from previous versions of ServerPackCreator, to ensure new one is always used.
 handler.log.info.system.enter=SYSTEM INFORMATION:
 handler.log.info.system.jarpath=JAR Path: %s
@@ -344,8 +348,8 @@ createserverpack.log.info.buttonloadconfigfromfile.finish=Configuration successf
 createserverpack.log.info.buttoncreateserverpack.start=Checking entered configuration.
 createserverpack.log.info.buttoncreateserverpack.checked=Configuration checked successfully.
 createserverpack.log.info.buttoncreateserverpack.tempfile=Deleted temporary config file.
-createserverpack.log.info.buttoncreateserverpack.writing=Writing configuration to file.
-createserverpack.log.info.buttoncreateserverpack.generating=Generating server pack.
+createserverpack.log.info.buttoncreateserverpack.writing=Writing GUI configuration to new serverpackcreator.conf.
+createserverpack.log.info.buttoncreateserverpack.generating=Starting ServerPackCreator run.
 createserverpack.log.info.buttoncreateserverpack.ready=ServerPackCreator ready.
 
 ## Warn logs
diff --git a/src/test/java/de/griefed/serverpackcreator/ConfigCheckTest.java b/src/test/java/de/griefed/serverpackcreator/ConfigurationTest.java
similarity index 79%
rename from src/test/java/de/griefed/serverpackcreator/ConfigCheckTest.java
rename to src/test/java/de/griefed/serverpackcreator/ConfigurationTest.java
index 062b028d8..d528b365f 100644
--- a/src/test/java/de/griefed/serverpackcreator/ConfigCheckTest.java
+++ b/src/test/java/de/griefed/serverpackcreator/ConfigurationTest.java
@@ -34,23 +34,24 @@ import java.io.File;
 import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Paths;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
 import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
 
-class ConfigCheckTest {
+class ConfigurationTest {
     @Mock
     Logger appLogger;
 
-    private Configuration configCheck;
+    private Configuration configuration;
     private CurseCreateModpack curseCreateModpack;
     private LocalizationManager localizationManager;
 
-    ConfigCheckTest() {
+    ConfigurationTest() {
         localizationManager = new LocalizationManager();
         curseCreateModpack = new CurseCreateModpack(localizationManager);
-        configCheck = new Configuration(localizationManager, curseCreateModpack);
+        configuration = new Configuration(localizationManager, curseCreateModpack);
     }
 
     @BeforeEach
@@ -59,6 +60,20 @@ class ConfigCheckTest {
         MockitoAnnotations.openMocks(this);
     }
 
+    @Test
+    void testSetCopyDirs() {
+        List<String> testList = new ArrayList<>(Arrays.asList(
+                "config",
+                "mods",
+                "scripts",
+                "seeds",
+                "defaultconfigs",
+                "server_pack"
+        ));
+        configuration.setCopyDirs(testList);
+        Assertions.assertFalse(configuration.getCopyDirs().contains("server_pack"));
+    }
+
     @Test
     void testBuildString() {
         List<String> args = Arrays.asList(
@@ -68,7 +83,7 @@ class ConfigCheckTest {
                 "seeds",
                 "defaultconfigs"
         );
-        String result = configCheck.buildString(args.toString());
+        String result = configuration.buildString(args.toString());
         Assertions.assertEquals(args.toString(), String.format("[%s]",result));
     }
 
@@ -76,8 +91,8 @@ class ConfigCheckTest {
     @Test
     void testCheckConfig() throws IOException {
         Files.copy(Paths.get("./src/test/resources/testresources/serverpackcreator.conf"), Paths.get("./serverpackcreator.conf"), REPLACE_EXISTING);
-        configCheck.setConfig(ConfigFactory.parseFile(configCheck.getConfigFile()));
-        boolean result = configCheck.checkConfigFile(configCheck.getConfigFile());
+        configuration.setConfig(ConfigFactory.parseFile(configuration.getConfigFile()));
+        boolean result = configuration.checkConfigFile(configuration.getConfigFile(), true);
         Assertions.assertFalse(result);
         new File("./serverpackcreator.conf").delete();
     }
@@ -85,14 +100,14 @@ class ConfigCheckTest {
     @Test
     void testCheckCurseForgeCorrect() {
         String modpackDir = "238298,3174854";
-        boolean result = configCheck.checkCurseForge(modpackDir);
+        boolean result = configuration.checkCurseForge(modpackDir);
         Assertions.assertTrue(result);
     }
 
     @Test
     void testCheckCurseForgeFalse() {
         String modpackDir = "1,1234";
-        boolean result = configCheck.checkCurseForge(modpackDir);
+        boolean result = configuration.checkCurseForge(modpackDir);
         Assertions.assertFalse(result);
     }
 
@@ -141,7 +156,7 @@ class ConfigCheckTest {
         boolean includeServerProperties = true;
         boolean includeStartScripts = true;
         boolean includeZipCreation = true;
-        configCheck.printConfig(
+        configuration.printConfig(
                 modpackDir,
                 clientMods,
                 copyDirs,
@@ -159,13 +174,13 @@ class ConfigCheckTest {
     @Test
     void testCheckModpackDirCorrect() {
         String modpackDir = "./src/test/resources/forge_tests";
-        boolean result = configCheck.checkModpackDir(modpackDir);
+        boolean result = configuration.checkModpackDir(modpackDir);
         Assertions.assertTrue(result);
     }
 
     @Test
     void testCheckModpackDirFalse() {
-        boolean result = configCheck.checkModpackDir("modpackDir");
+        boolean result = configuration.checkModpackDir("modpackDir");
         Assertions.assertFalse(result);
     }
 
@@ -179,7 +194,7 @@ class ConfigCheckTest {
                 "seeds",
                 "defaultconfigs"
         );
-        boolean result = configCheck.checkCopyDirs(copyDirs, modpackDir);
+        boolean result = configuration.checkCopyDirs(copyDirs, modpackDir);
         Assertions.assertTrue(result);
     }
 
@@ -193,13 +208,13 @@ class ConfigCheckTest {
                 "seedss",
                 "defaultconfigss"
         );
-        boolean result = configCheck.checkCopyDirs(copyDirs, modpackDir);
+        boolean result = configuration.checkCopyDirs(copyDirs, modpackDir);
         Assertions.assertFalse(result);
     }
 
     @Test
     void testGetJavaPath() {
-        String result = configCheck.getJavaPath("");
+        String result = configuration.getJavaPathFromSystem("");
         String autoJavaPath = System.getProperty("java.home").replace("\\", "/") + "/bin/java";
         if (autoJavaPath.startsWith("C:")) {
             autoJavaPath = String.format("%s.exe", autoJavaPath);
@@ -221,39 +236,39 @@ class ConfigCheckTest {
         } else {
             javaPath = autoJavaPath;
         }
-        boolean result = configCheck.checkJavaPath(javaPath);
+        boolean result = configuration.checkJavaPath(javaPath);
         Assertions.assertTrue(result);
     }
 
     @Test
     void testCheckModloaderFabric() {
         String modLoader = "Fabric";
-        boolean result = configCheck.checkModloader(modLoader);
+        boolean result = configuration.checkModloader(modLoader);
         Assertions.assertTrue(result);
     }
 
     @Test
     void testCheckModloaderForge() {
         String modLoader = "Forge";
-        boolean result = configCheck.checkModloader(modLoader);
+        boolean result = configuration.checkModloader(modLoader);
         Assertions.assertTrue(result);
     }
 
     @Test
     void testCheckModloaderFalse() {
-        boolean result = configCheck.checkModloader("modloader");
+        boolean result = configuration.checkModloader("modloader");
         Assertions.assertFalse(result);
     }
 
     @Test
     void testSetModloaderFabric() {
-        String result = configCheck.setModloader("fAbRiC");
+        String result = configuration.setModLoaderCase("fAbRiC");
         Assertions.assertEquals("Fabric", result);
     }
 
     @Test
     void testSetModloaderForge() {
-        String result = configCheck.setModloader("fOrGe");
+        String result = configuration.setModLoaderCase("fOrGe");
         Assertions.assertEquals("Forge", result);
     }
 
@@ -262,7 +277,7 @@ class ConfigCheckTest {
     void testCheckModloaderVersionFabric() {
         String modLoader = "Fabric";
         String modLoaderVersion = "0.11.3";
-        boolean result = configCheck.checkModloaderVersion(modLoader, modLoaderVersion);
+        boolean result = configuration.checkModloaderVersion(modLoader, modLoaderVersion);
         Assertions.assertTrue(result);
         new File("fabric-manifest.xml").delete();
     }
@@ -272,7 +287,7 @@ class ConfigCheckTest {
     void testCheckModloaderVersionFabricIncorrect() {
         String modLoader = "Fabric";
         String modLoaderVersion = "0.90.3";
-        boolean result = configCheck.checkModloaderVersion(modLoader, modLoaderVersion);
+        boolean result = configuration.checkModloaderVersion(modLoader, modLoaderVersion);
         Assertions.assertFalse(result);
         new File("fabric-manifest.xml").delete();
     }
@@ -282,7 +297,7 @@ class ConfigCheckTest {
     void testCheckModloaderVersionForge() {
         String modLoader = "Forge";
         String modLoaderVersion = "36.1.2";
-        boolean result = configCheck.checkModloaderVersion(modLoader, modLoaderVersion);
+        boolean result = configuration.checkModloaderVersion(modLoader, modLoaderVersion);
         Assertions.assertTrue(result);
         new File("forge-manifest.json").delete();
     }
@@ -292,7 +307,7 @@ class ConfigCheckTest {
     void testCheckModloaderVersionForgeIncorrect() {
         String modLoader = "Forge";
         String modLoaderVersion = "90.0.0";
-        boolean result = configCheck.checkModloaderVersion(modLoader, modLoaderVersion);
+        boolean result = configuration.checkModloaderVersion(modLoader, modLoaderVersion);
         Assertions.assertFalse(result);
         new File("forge-manifest.json").delete();
     }
@@ -301,7 +316,7 @@ class ConfigCheckTest {
     @Test
     void testIsMinecraftVersionCorrect() {
         String minecraftVersion = "1.16.5";
-        boolean result = configCheck.isMinecraftVersionCorrect(minecraftVersion);
+        boolean result = configuration.isMinecraftVersionCorrect(minecraftVersion);
         Assertions.assertTrue(result);
         new File("mcmanifest.json").delete();
     }
@@ -310,7 +325,7 @@ class ConfigCheckTest {
     @Test
     void testIsMinecraftVersionFalse() {
         String minecraftVersion = "1.99.5";
-        boolean result = configCheck.isMinecraftVersionCorrect(minecraftVersion);
+        boolean result = configuration.isMinecraftVersionCorrect(minecraftVersion);
         Assertions.assertFalse(result);
         new File("mcmanifest.json").delete();
     }
@@ -319,7 +334,7 @@ class ConfigCheckTest {
     @Test
     void testIsFabricVersionCorrect() {
         String fabricVersion = "0.11.3";
-        boolean result = configCheck.isFabricVersionCorrect(fabricVersion);
+        boolean result = configuration.isFabricVersionCorrect(fabricVersion);
         Assertions.assertTrue(result);
         new File("fabric-manifest.xml").delete();
     }
@@ -328,7 +343,7 @@ class ConfigCheckTest {
     @Test
     void testIsFabricVersionFalse() {
         String fabricVersion = "0.90.3";
-        boolean result = configCheck.isFabricVersionCorrect(fabricVersion);
+        boolean result = configuration.isFabricVersionCorrect(fabricVersion);
         Assertions.assertFalse(result);
         new File("fabric-manifest.xml").delete();
     }
@@ -337,7 +352,7 @@ class ConfigCheckTest {
     @Test
     void testIsForgeVersionCorrect() {
         String forgeVersion = "36.1.2";
-        boolean result = configCheck.isForgeVersionCorrect(forgeVersion);
+        boolean result = configuration.isForgeVersionCorrect(forgeVersion);
         Assertions.assertTrue(result);
         new File("forge-manifest.json").delete();
     }
@@ -346,7 +361,7 @@ class ConfigCheckTest {
     @Test
     void testIsForgeVersionFalse() {
         String forgeVersion = "99.0.0";
-        boolean result = configCheck.isForgeVersionCorrect(forgeVersion);
+        boolean result = configuration.isForgeVersionCorrect(forgeVersion);
         Assertions.assertFalse(result);
         new File("forge-manifest.json").delete();
     }
-- 
GitLab


From 20eb829d9c52eb1d713a0964a815f3138e71c51e Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Sat, 1 May 2021 21:32:55 +0200
Subject: [PATCH 28/91] refactor(DI): Update javadocs, improve creation of
 modpack from CurseForge ID combination, improve GUI for CurseForge modpack
 creation

---
 src/main/java/de/griefed/serverpackcreator/Main.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/Main.java b/src/main/java/de/griefed/serverpackcreator/Main.java
index 3204ebd62..d284df1d3 100644
--- a/src/main/java/de/griefed/serverpackcreator/Main.java
+++ b/src/main/java/de/griefed/serverpackcreator/Main.java
@@ -94,7 +94,7 @@ public class Main {
         Configuration configuration = new Configuration(localizationManager, curseCreateModpack);
         FilesSetup filesSetup = new FilesSetup(localizationManager);
         CreateServerPack createServerPack = new CreateServerPack(localizationManager, configuration, curseCreateModpack);
-        CreateGui tabbedPane = new CreateGui(localizationManager, configuration, curseCreateModpack);
+        CreateGui tabbedPane = new CreateGui(localizationManager, configuration, curseCreateModpack, createServerPack);
 
         String jarPath = null,
                 jarName = null,
-- 
GitLab


From cc7ec26702b91d2c01b1b57e9bd89bcd47ed337e Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Sat, 1 May 2021 21:33:38 +0200
Subject: [PATCH 29/91] refactor(DI): Update javadocs, improve creation of
 modpack from CurseForge ID combination, improve GUI for CurseForge modpack
 creation

---
 .../curseforgemodpack/CurseCreateModpack.java | 71 ++++++++++++++-----
 .../CurseCreateModpackTest.java               |  4 +-
 2 files changed, 56 insertions(+), 19 deletions(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.java b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.java
index f1ac1d4e7..d1815ed51 100644
--- a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.java
+++ b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.java
@@ -17,7 +17,7 @@
  *
  * The full license can be found at https:github.com/Griefed/ServerPackCreator/blob/main/LICENSE
  */
-
+//TODO: Write table of contents
 package de.griefed.serverpackcreator.curseforgemodpack;
 
 import com.fasterxml.jackson.databind.DeserializationFeature;
@@ -33,16 +33,15 @@ import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
+import java.nio.file.*;
+import java.nio.file.attribute.BasicFileAttributes;
 import java.util.*;
 import java.util.stream.Stream;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipInputStream;
 
 import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
-
+//TODO: Write docs for class
 public class CurseCreateModpack {
     private static final Logger appLogger = LogManager.getLogger(CurseCreateModpack.class);
     private String projectName;
@@ -59,6 +58,20 @@ public class CurseCreateModpack {
         }
     }
 
+    /** Standardize the specified modloader.
+     * @param modloader String. If any case of Forge or Fabric was specified, return "Forge" or "Fabric", so users can enter "forge" or "fabric" or any combination of upper- and lowercase letters..
+     * @return String. Returns a standardized String of the specified modloader.
+     */
+    String setModloaderCase(String modloader) {
+        String returnLoader = null;
+        if (modloader.equalsIgnoreCase("Forge")) {
+            returnLoader = "Forge";
+        } else if (modloader.equalsIgnoreCase("Fabric")) {
+            returnLoader = "Fabric";
+        }
+        return returnLoader;
+    }
+
     /** Gets the names of the specified project and file and makes calls to methods which create the modpack so we can then create a server pack from it.
      * @param modpackDir String. Combination of project name and file name. Created during download procedure and later added to config file.
      * @param projectID Integer. The ID of the project. Used to gather information and to download the modpack.
@@ -68,6 +81,7 @@ public class CurseCreateModpack {
     @SuppressWarnings({"OptionalGetWithoutIsPresent", "ConstantConditions"})
     public boolean curseForgeModpack(String modpackDir, Integer projectID, Integer fileID) {
         boolean modpackCreated = false;
+
         try {
             if (CurseAPI.project(projectID).isPresent()) {
                 Optional<CurseProject> curseProject = CurseAPI.project(projectID);
@@ -126,7 +140,7 @@ public class CurseCreateModpack {
             appLogger.info(String.format(localizationManager.getLocalizedString("createmodpack.log.info.initializemodpack.modpackversion"), modpack.getVersion()));
             appLogger.info(String.format(localizationManager.getLocalizedString("createmodpack.log.info.initializemodpack.modpackauthor"), modpack.getAuthor()));
             appLogger.info(String.format(localizationManager.getLocalizedString("createmodpack.log.info.initializemodpack.modpackminecraftversion"), minecraftLoaderVersions[0].replace("[", "")));
-            appLogger.info(String.format(localizationManager.getLocalizedString("createmodpack.log.info.initializemodpack.modloader"), setModloader(modLoaderVersion[0])));
+            appLogger.info(String.format(localizationManager.getLocalizedString("createmodpack.log.info.initializemodpack.modloader"), setModloaderCase(modLoaderVersion[0])));
             appLogger.info(String.format(localizationManager.getLocalizedString("createmodpack.log.info.initializemodpack.modloaderversion"), modLoaderVersion[1]));
 
         } catch (IOException ex) { appLogger.error(localizationManager.getLocalizedString("createmodpack.log.error.initializemodpack.readmodpack"), ex); }
@@ -243,7 +257,7 @@ public class CurseCreateModpack {
             appLogger.info(localizationManager.getLocalizedString("createmodpack.log.info.checkcurseforgedir.create"));
         } else {
             appLogger.info(localizationManager.getLocalizedString("createmodpack.log.info.checkcurseforgedir"));
-            isModpackPresent = true;
+            isModpackPresent = cleanupEnvironment(modpackDir);
         }
         return isModpackPresent;
     }
@@ -314,17 +328,40 @@ public class CurseCreateModpack {
         return destFile;
     }
 
-    /** Standardize the specified modloader.
-     * @param modloader String. If any case of Forge or Fabric was specified, return "Forge" or "Fabric", so users can enter "forge" or "fabric" or any combination of upper- and lowercase letters..
-     * @return String. Returns a standardized String of the specified modloader.
+    /** Deletes all files, directories and ZIP-archives of previously generated server packs to ensure newly generated
+     * server pack is as clean as possible.
+     * @param modpackDir String. The server_pack directory and ZIP-archive will be deleted inside the modpack directory.
+     * @return Boolean. Returns false if every file and folder was successfully deleted.
      */
-    String setModloader(String modloader) {
-        String returnLoader = null;
-        if (modloader.equalsIgnoreCase("Forge")) {
-            returnLoader = "Forge";
-        } else if (modloader.equalsIgnoreCase("Fabric")) {
-            returnLoader = "Fabric";
+    private boolean cleanupEnvironment(String modpackDir) {
+        boolean cleanedUp = false;
+        if (new File(modpackDir).exists()) {
+            appLogger.info(localizationManager.getLocalizedString("createmodpack.log.info.cleanupenvironment.enter"));
+            Path modpackPath = Paths.get(modpackDir);
+            try {
+                Files.walkFileTree(modpackPath,
+                        new SimpleFileVisitor<Path>() {
+                            @Override
+                            public FileVisitResult postVisitDirectory(
+                                    Path dir, IOException exc) throws IOException {
+                                Files.delete(dir);
+                                return FileVisitResult.CONTINUE;
+                            }
+                            @Override
+                            public FileVisitResult visitFile(
+                                    Path file, BasicFileAttributes attrs)
+                                    throws IOException {
+                                Files.delete(file);
+                                return FileVisitResult.CONTINUE;
+                            }
+                        });
+            } catch (IOException ex) {
+                cleanedUp = true;
+                appLogger.error(String.format(localizationManager.getLocalizedString("createmodpack.log.error.cleanupenvironment"), modpackDir));
+            } finally {
+                appLogger.info(localizationManager.getLocalizedString("createmodpack.log.info.cleanupenvironment.complete"));
+            }
         }
-        return returnLoader;
+        return cleanedUp;
     }
 }
\ No newline at end of file
diff --git a/src/test/java/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpackTest.java b/src/test/java/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpackTest.java
index f39c6ec3a..fb8f9450c 100644
--- a/src/test/java/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpackTest.java
+++ b/src/test/java/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpackTest.java
@@ -95,13 +95,13 @@ class CurseCreateModpackTest {
 
     @Test
     void testSetModloaderFabric() {
-        String result = curseCreateModpack.setModloader("fAbRiC");
+        String result = curseCreateModpack.setModloaderCase("fAbRiC");
         Assertions.assertEquals("Fabric", result);
     }
 
     @Test
     void testSetModloaderForge() {
-        String result = curseCreateModpack.setModloader("fOrGe");
+        String result = curseCreateModpack.setModloaderCase("fOrGe");
         Assertions.assertEquals("Forge", result);
     }
 }
-- 
GitLab


From f16eeaff07839c0752293aed575dd8aaa7e7857f Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Sat, 1 May 2021 21:34:15 +0200
Subject: [PATCH 30/91] refactor(DI): Prepare for rewrite

---
 .../serverpackcreator/curseforgemodpack/CurseFiles.java     | 2 +-
 .../serverpackcreator/curseforgemodpack/CurseMinecraft.java | 4 ++--
 .../curseforgemodpack/CurseModLoaders.java                  | 4 ++--
 .../serverpackcreator/curseforgemodpack/CurseModpack.java   | 2 +-
 .../serverpackcreator/curseforgemodpack/CurseSplines.java   | 4 ++--
 .../java/de/griefed/serverpackcreator/gui/AboutTab.java     | 6 +++---
 .../serverpackcreator/gui/ModloaderInstallerLogTab.java     | 4 ++--
 .../serverpackcreator/i18n/IncorrectLanguageException.java  | 2 +-
 .../griefed/serverpackcreator/i18n/LocalizationManager.java | 4 ++--
 9 files changed, 16 insertions(+), 16 deletions(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.java b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.java
index 623d025a0..6f409d7f4 100644
--- a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.java
+++ b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.java
@@ -21,7 +21,7 @@
 package de.griefed.serverpackcreator.curseforgemodpack;
 
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-
+//TODO: Write docs for class
 public class CurseFiles {
     @JsonIgnoreProperties(ignoreUnknown = true)
     private String projectID;
diff --git a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.java b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.java
index b546c0d9c..db63bc4f3 100644
--- a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.java
+++ b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.java
@@ -23,8 +23,8 @@ package de.griefed.serverpackcreator.curseforgemodpack;
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 
 import java.util.List;
-
-class CurseMinecraft {
+//TODO: Write docs for class
+public class CurseMinecraft {
     @JsonIgnoreProperties(ignoreUnknown = true)
     private String version;
     private List<CurseModLoaders> modLoaders;
diff --git a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.java b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.java
index b81c4d78e..fb06a07bc 100644
--- a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.java
+++ b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.java
@@ -21,8 +21,8 @@
 package de.griefed.serverpackcreator.curseforgemodpack;
 
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-
-class CurseModLoaders {
+//TODO: Write docs for class
+public class CurseModLoaders {
     @JsonIgnoreProperties(ignoreUnknown = true)
     private String id;
 
diff --git a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.java b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.java
index dbd67d5f1..e5b4b16b1 100644
--- a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.java
+++ b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.java
@@ -23,7 +23,7 @@ package de.griefed.serverpackcreator.curseforgemodpack;
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 
 import java.util.List;
-
+//TODO: Write docs for class
 public class CurseModpack {
     @JsonIgnoreProperties(ignoreUnknown = true)
     private List<CurseMinecraft> minecraft;
diff --git a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.java b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.java
index 978a86ade..b96365bc6 100644
--- a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.java
+++ b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.java
@@ -21,8 +21,8 @@
 package de.griefed.serverpackcreator.curseforgemodpack;
 
 import java.util.Random;
-
-class CurseSplines {
+//TODO: Write docs for class
+public class CurseSplines {
     /*
     Thanks go out to MAXIS and Sim City, for the ridiculous messages these games contained.
     Additional thanks to Larsz on GameFAQs for providing a list of all these messages: https://gamefaqs.gamespot.com/pc/561176-simcity-4/faqs/22135
diff --git a/src/main/java/de/griefed/serverpackcreator/gui/AboutTab.java b/src/main/java/de/griefed/serverpackcreator/gui/AboutTab.java
index 5f94c6ce5..0b7906d81 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/AboutTab.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/AboutTab.java
@@ -17,7 +17,7 @@
  *
  * The full license can be found at https:github.com/Griefed/ServerPackCreator/blob/main/LICENSE
  */
-
+//TODO: Write table of contents
 package de.griefed.serverpackcreator.gui;
 
 import de.griefed.serverpackcreator.i18n.LocalizationManager;
@@ -30,8 +30,8 @@ import java.awt.*;
 import java.io.IOException;
 import java.net.URI;
 import java.util.Objects;
-
-class AboutTab extends Component {
+//TODO: Write docs for class
+public class AboutTab extends Component {
     private static final Logger appLogger = LogManager.getLogger(AboutTab.class);
 
     private final Dimension miscButtonDimension = new Dimension(50,50);
diff --git a/src/main/java/de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.java b/src/main/java/de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.java
index 4b401bd46..4fa7a1a67 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.java
@@ -27,8 +27,8 @@ import org.apache.commons.io.input.TailerListenerAdapter;
 import javax.swing.*;
 import java.awt.*;
 import java.io.File;
-
-class ModloaderInstallerLogTab extends Component {
+//TODO: Write docs for class
+public class ModloaderInstallerLogTab extends Component {
 
     private LocalizationManager localizationManager;
 
diff --git a/src/main/java/de/griefed/serverpackcreator/i18n/IncorrectLanguageException.java b/src/main/java/de/griefed/serverpackcreator/i18n/IncorrectLanguageException.java
index 8df94cf18..514972811 100644
--- a/src/main/java/de/griefed/serverpackcreator/i18n/IncorrectLanguageException.java
+++ b/src/main/java/de/griefed/serverpackcreator/i18n/IncorrectLanguageException.java
@@ -19,7 +19,7 @@
  */
 
 package de.griefed.serverpackcreator.i18n;
-
+//TODO: Write docs for class
 public class IncorrectLanguageException extends Exception {
     public IncorrectLanguageException() {
         super("Incorrect language specified");
diff --git a/src/main/java/de/griefed/serverpackcreator/i18n/LocalizationManager.java b/src/main/java/de/griefed/serverpackcreator/i18n/LocalizationManager.java
index 8b5db3fce..a8c212f7a 100644
--- a/src/main/java/de/griefed/serverpackcreator/i18n/LocalizationManager.java
+++ b/src/main/java/de/griefed/serverpackcreator/i18n/LocalizationManager.java
@@ -17,7 +17,7 @@
  *
  * The full license can be found at https:github.com/Griefed/ServerPackCreator/blob/main/LICENSE
  */
-
+//TODO: Write table of contents
 package de.griefed.serverpackcreator.i18n;
 
 import org.apache.logging.log4j.LogManager;
@@ -26,7 +26,7 @@ import org.apache.logging.log4j.Logger;
 import java.io.*;
 import java.nio.charset.StandardCharsets;
 import java.util.*;
-
+//TODO: Write docs for class
 /**
  * This class is localization manager for your application.
  * <p>To use it, firstly run LocalizationManager.init().
-- 
GitLab


From cb5d6967863f65aaec91320b47f27dfdea3cb486 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Sat, 1 May 2021 22:19:50 +0200
Subject: [PATCH 31/91] refactor(DI): Update javadocs and minor refactorings of
 variable names.

---
 .../i18n/LocalizationManager.java             | 134 +++++++++++++-----
 1 file changed, 100 insertions(+), 34 deletions(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/i18n/LocalizationManager.java b/src/main/java/de/griefed/serverpackcreator/i18n/LocalizationManager.java
index a8c212f7a..89a929341 100644
--- a/src/main/java/de/griefed/serverpackcreator/i18n/LocalizationManager.java
+++ b/src/main/java/de/griefed/serverpackcreator/i18n/LocalizationManager.java
@@ -17,7 +17,6 @@
  *
  * The full license can be found at https:github.com/Griefed/ServerPackCreator/blob/main/LICENSE
  */
-//TODO: Write table of contents
 package de.griefed.serverpackcreator.i18n;
 
 import org.apache.logging.log4j.LogManager;
@@ -26,15 +25,27 @@ import org.apache.logging.log4j.Logger;
 import java.io.*;
 import java.nio.charset.StandardCharsets;
 import java.util.*;
-//TODO: Write docs for class
+
 /**
- * This class is localization manager for your application.
- * <p>To use it, firstly run LocalizationManager.init().
- * Then use LocalizationManager.getLocalizedString() to find the localized string in config file.
- * All localization config files need to be stored in <code>resources/i18n</code> directory
+ * <strong>Table of methods</strong><br>
+ * {@link #getSupportedLanguages()}<br>
+ * {@link #getLangPropertiesFile()}<br>
+ * {@link #getLocale()}<br>
+ * {@link #init(String)}<br>
+ * {@link #init(File)}<br>
+ * {@link #init()}<br>
+ * {@link #getLocalizedString(String)}<br>
+ * {@link #checkLocaleFile()}<br>
+ * {@link #writeLocaleToFile(String)}
+ * <p>
+ * This is the localizationManager for ServerPackCreator.<br>
+ * To use it, initialize it by calling {@link #init()}.
+ * Then use {@link #getLocalizedString(String)} to use a language key from the resource bundle corresponding to the
+ * specified locale. If no locale is provided during the launch of ServerPackCreator, en_US is used by default.<br>
+ * All localization properties-files need to be stored in the <code>de/griefed/resources/lang/</code>-directory
  * and be named using following pattern: lang_{language code in lowercase}_{country code in lowercase}.
- * For example: lang_en_us.lang.</p>
- * Currently supports only strings to be used in localized fields.
+ * For example: <code>lang_en_us.properties</code>.<br>
+ * Currently only supports Strings to be used in localized fields.
  */
 public class LocalizationManager {
 
@@ -42,12 +53,12 @@ public class LocalizationManager {
     private final File langPropertiesFile = new File("lang.properties");
 
     /**
-     * Current language of application, mapped for easier further reference.
+     * Current language of ServerPackCreator, mapped for easier further reference.
      */
     private Map<String, String> currentLanguage = new HashMap<>();
 
     /**
-     * Localized strings that application uses.
+     * Localized strings which ServerPackCreator uses.
      */
     private ResourceBundle localeResources;
 
@@ -56,101 +67,155 @@ public class LocalizationManager {
      */
     private final String LANGUAGE_MAP_PATH = "language";
     private final String COUNTRY_MAP_PATH = "country";
+
+    /**
+     * Languages supported by ServerPackCreator.
+     */
     private final String[] SUPPORTED_LANGUAGES = {
             "en_us",
             "uk_ua",
             "de_de"
     };
 
+    /**
+     * Getter for the array of languages supported by ServerPackCreator.
+     * @return String Array. Returns the array of languages supported by ServerPackCreator.
+     */
     String[] getSupportedLanguages() {
         return SUPPORTED_LANGUAGES;
     }
 
+    /**
+     * Getter for the lang.properties file which will set the locale for ServerPackCreator.
+     * @return File. Returns the file which will set the locale for ServerPackCreator.
+     */
     File getLangPropertiesFile() {
         return langPropertiesFile;
     }
 
+    /**
+     * Getter for a String containing the currently used language.
+     * @return String. Returns a String containing the currently used language.
+     */
     public String getLocale() {
         return String.format("%s_%s", currentLanguage.get(LANGUAGE_MAP_PATH), currentLanguage.get(COUNTRY_MAP_PATH));
     }
 
     /**
-     * @throws IncorrectLanguageException Thrown if the language specified in the properties file is not supported by SPC or specified in the invalid format.
+     * Initializes the LocalizationManager with a provided locale.
+     * Calls<br>
+     * {@link #getSupportedLanguages()}<br>
+     * {@link #getLocalizedString(String)}<br>
+     * {@link #writeLocaleToFile(String)}
+     * @throws IncorrectLanguageException Thrown if the language specified in the properties file is not supported by
+     * ServerPackCreator or specified in the invalid format.
      * @param locale Locale to be used by application in this run.
      */
     public void init(String locale) throws IncorrectLanguageException {
-        boolean isLanguageExists = false;
+        boolean doesLanguageExist = false;
+
         for (String lang: getSupportedLanguages()) {
+
             if (lang.equalsIgnoreCase(locale)) {
+
                 localeLogger.debug("Lang is correct");
-                isLanguageExists = true;
+                doesLanguageExist = true;
+
                 break;
             }
         }
-        if (Boolean.FALSE.equals(isLanguageExists)) throw new IncorrectLanguageException();
+
+        if (Boolean.FALSE.equals(doesLanguageExist)) throw new IncorrectLanguageException();
+
         String[] langCode;
+
         if (locale.contains("_")) {
+
             langCode = locale.split("_");
+
             currentLanguage.put(LANGUAGE_MAP_PATH, langCode[0]);
             currentLanguage.put(COUNTRY_MAP_PATH, langCode[1]);
+
         } else {
             throw new IncorrectLanguageException();
         }
+
         localeResources = ResourceBundle.getBundle(String.format("de/griefed/resources/lang/lang_%s", locale));
         localeLogger.info(String.format("Using language: %s", getLocalizedString("localeUnlocalizedName")));
+
         if (!currentLanguage.get(LANGUAGE_MAP_PATH).equalsIgnoreCase("en")) {
+
             localeLogger.info(String.format("%s %s", getLocalizedString("cli.usingLanguage"), getLocalizedString("localeName")));
         }
+
         writeLocaleToFile(locale);
     }
 
     /**
-     * @param localePropertiesFile Path to the properties file with the language specified.
-     * @throws IncorrectLanguageException Thrown if the language specified in the properties file is not supported by SPC or specified in the invalid format.
+     * Initializes the LocalizationManager with a provided localePropertiesFile.
+     * @param localePropertiesFile Path to the locale properties file which specifies the language to use.
+     * @throws IncorrectLanguageException Thrown if the language specified in the properties file is not supported by
+     * ServerPackCreator or specified in the invalid format.
      */
     public void init(File localePropertiesFile) throws IncorrectLanguageException{
+
         Properties langProperties = new Properties();
-        try (FileInputStream fis = new FileInputStream(localePropertiesFile)){
-            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fis, StandardCharsets.UTF_8));
+
+        try (FileInputStream fileInputStream = new FileInputStream(localePropertiesFile)){
+
+            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fileInputStream, StandardCharsets.UTF_8));
             langProperties.load(bufferedReader);
+
             localeLogger.debug(String.format("langProperties = %s", langProperties));
-        } catch (Exception e) {
-            e.printStackTrace();
+
+        } catch (Exception ex) {
+            localeLogger.error(ex);
         }
+
         String langProp = langProperties.getProperty("lang");
         localeLogger.debug(langProp);
 
-        boolean isLanguageExists = false;
+        boolean doesLanguageExist = false;
 
         for (String lang: getSupportedLanguages()) {
+
             if (lang.equalsIgnoreCase(langProp)) {
+
                 localeLogger.debug("Lang is correct");
-                isLanguageExists = true;
+                doesLanguageExist = true;
+
                 break;
             }
         }
 
-        if (Boolean.FALSE.equals(isLanguageExists)) throw new IncorrectLanguageException();
+        if (Boolean.FALSE.equals(doesLanguageExist)) throw new IncorrectLanguageException();
+
         String defaultLocale = "en_us";
         String langProperty = langProperties.getProperty("lang", defaultLocale);
         String[] langCode;
+
         if (langProperty.contains("_")) {
+
             langCode = langProperty.split("_");
+
             currentLanguage.put(LANGUAGE_MAP_PATH, langCode[0]);
             currentLanguage.put(COUNTRY_MAP_PATH, langCode[1]);
+
         } else {
             throw new IncorrectLanguageException();
         }
 
         localeResources = ResourceBundle.getBundle(String.format("de/griefed/resources/lang/lang_%s", langProperties.getProperty("lang")), new Locale(currentLanguage.get(LANGUAGE_MAP_PATH), currentLanguage.get(COUNTRY_MAP_PATH)));
         localeLogger.info(String.format("Using language: %s", getLocalizedString("localeUnlocalizedName")));
+
         if (!currentLanguage.get(LANGUAGE_MAP_PATH).equalsIgnoreCase("en")) {
+
             localeLogger.info(String.format("%s %s", getLocalizedString("cli.usingLanguage"), getLocalizedString("localeName")));
         }
     }
 
     /**
-     * Initializer with default localization properties path.
+     * Initialize the LocalizationManager with en_us as the locale.
      */
     public void init() {
         try {
@@ -161,9 +226,9 @@ public class LocalizationManager {
     }
 
     /**
-     * Gets localized string from localization resource bundle.
+     * Acquires a localized String for the provided language key from the initialized locale resource.
      * @param languageKey The language key to search for.
-     * @return Localized string that is referred by the language key.
+     * @return Localized string that is referred to by the language key.
      */
     public String getLocalizedString(String languageKey) {
         try {
@@ -177,12 +242,12 @@ public class LocalizationManager {
     }
 
     /**
-     * Check for existence of a lang.properties-file and if found assign language specified therein. If assigning the specified language fails because it is not supported, default to en_US.
-     * This method should not contain the LocalizationManager, as the initialization of said manager is called from here. Therefore, localized string are not yet available.
-     * @return Always returns true. Dirty hack until I one day figure out how to init Localization before UI start correctly.
+     * Check for existence of a lang.properties file and, if found, assign the language specified therein.
+     * If assigning the specified language fails because it is not supported, default to en_us.
+     * This method should <strong>not</strong> call {@link #getLocalizedString(String)}, as the initialization of
+     * said manager is called from here. Therefore, localized strings are not yet available.
      */
-    @SuppressWarnings("UnusedReturnValue")
-    public boolean checkLocaleFile() {
+    public void checkLocaleFile() {
         if (getLangPropertiesFile().exists()) {
             try {
                 init(getLangPropertiesFile());
@@ -228,13 +293,14 @@ public class LocalizationManager {
             }
             init();
         }
-        return true;
     }
 
     /**
-     * Writes the specified locale from -lang your_locale to a lang.properties file to ensure every subsequent start of serverpackcreator is executed using said locale.
+     * Writes the specified locale from -lang your_locale to a lang.properties file to ensure every subsequent start
+     * of serverpackcreator is executed using said locale. This method should <strong>not</strong> call
+     * {@link #getLocalizedString(String)}, as the initialization of said manager is called from here. Therefore,
+     * localized strings are not yet available.
      * @param locale The locale the user specified when they ran serverpackcreator with -lang -your_locale.
-     * This method should not contain the LocalizationManager, as the initialization of said manager is called from here. Therefore, localized string are not yet available.
      */
     void writeLocaleToFile(String locale) {
         try (BufferedWriter writer = new BufferedWriter(new FileWriter(getLangPropertiesFile()))) {
-- 
GitLab


From 21b71e585809e37a154f4a741c8d7852ea117e8a Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Sat, 1 May 2021 22:22:39 +0200
Subject: [PATCH 32/91] refactor(DI): Update javadocs

---
 .../i18n/IncorrectLanguageException.java              | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/i18n/IncorrectLanguageException.java b/src/main/java/de/griefed/serverpackcreator/i18n/IncorrectLanguageException.java
index 514972811..d9b6364c7 100644
--- a/src/main/java/de/griefed/serverpackcreator/i18n/IncorrectLanguageException.java
+++ b/src/main/java/de/griefed/serverpackcreator/i18n/IncorrectLanguageException.java
@@ -19,8 +19,17 @@
  */
 
 package de.griefed.serverpackcreator.i18n;
-//TODO: Write docs for class
+
+/**
+ * <strong>Table of Exceptions</strong><br>
+ * {@link #IncorrectLanguageException()}<br>
+ * {@link #IncorrectLanguageException(String)}<br>
+ * {@link #IncorrectLanguageException(Throwable)}<br>
+ * {@link #IncorrectLanguageException(String, Throwable)}<p>
+ * Provides exceptions to {@link LocalizationManager}
+ */
 public class IncorrectLanguageException extends Exception {
+
     public IncorrectLanguageException() {
         super("Incorrect language specified");
     }
-- 
GitLab


From b66d975229faf28352634493dfeb29c23dbe0a08 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Sat, 1 May 2021 23:00:38 +0200
Subject: [PATCH 33/91] refactor(DI): Update javadocs and minor refactorings

---
 .../gui/ServerPackCreatorLogTab.java          | 34 +++++++++++++++----
 1 file changed, 28 insertions(+), 6 deletions(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.java b/src/main/java/de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.java
index 2f9da7b2e..dc873eddf 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.java
@@ -17,7 +17,6 @@
  *
  * The full license can be found at https:github.com/Griefed/ServerPackCreator/blob/main/LICENSE
  */
-
 package de.griefed.serverpackcreator.gui;
 
 import de.griefed.serverpackcreator.i18n.LocalizationManager;
@@ -27,11 +26,21 @@ import org.apache.commons.io.input.TailerListenerAdapter;
 import javax.swing.*;
 import java.awt.*;
 import java.io.File;
-//TODO: Write docs for class
+
+/**
+ * This class creates the tab which display the latest serverpackcreator.log tailer.
+ */
 public class ServerPackCreatorLogTab extends Component {
 
     private LocalizationManager localizationManager;
 
+    /**
+     * <strong>Constructor</strong><p>
+     * Used for Dependency Injection.<p>
+     * Receives an instance of {@link LocalizationManager} or creates one if the received
+     * one is null. Required for use of localization.
+     * @param injectedLocalizationManager Instance of {@link LocalizationManager} required for localized log messages.
+     */
     public ServerPackCreatorLogTab(LocalizationManager injectedLocalizationManager) {
         if (injectedLocalizationManager == null) {
             this.localizationManager = new LocalizationManager();
@@ -40,10 +49,23 @@ public class ServerPackCreatorLogTab extends Component {
         }
     }
 
+    private JComponent serverPackCreatorLogPanel;
+    private GridBagConstraints constraints;
+    private JTextArea textArea;
+    private JScrollPane scrollPane;
+
+    /**
+     * Create the tab for the serverpackcreator.log tailer in a JScrollPane with an always available vertical scrollbar
+     * and a horizontal scrollbar available as needed. Uses Apache commons-io's {@link Tailer} to keep the JTextArea up
+     * to date with the latest log entries. Should any line contain "Checking entered configuration." the textarea is
+     * cleared.
+     * @return JComponent. Returns a JPanel containing a JScrollPane containing the JTextArea with the latest
+     * serverpackcreator.log entries.
+     */
     JComponent serverPackCreatorLogTab() {
-        JComponent serverPackCreatorLogPanel = new JPanel(false);
+        serverPackCreatorLogPanel = new JPanel(false);
         serverPackCreatorLogPanel.setLayout(new GridBagLayout());
-        GridBagConstraints constraints = new GridBagConstraints();
+        constraints = new GridBagConstraints();
 
         constraints.anchor = GridBagConstraints.CENTER;
         constraints.fill = GridBagConstraints.BOTH;
@@ -53,7 +75,7 @@ public class ServerPackCreatorLogTab extends Component {
         constraints.weightx = 1;
 
         //Log Panel
-        JTextArea textArea = new JTextArea();
+        textArea = new JTextArea();
         textArea.setEditable(false);
 
         Tailer.create(new File("./logs/serverpackcreator.log"), new TailerListenerAdapter() {
@@ -67,7 +89,7 @@ public class ServerPackCreatorLogTab extends Component {
             }
         }, 2000, false);
 
-        JScrollPane scrollPane = new JScrollPane(
+        scrollPane = new JScrollPane(
                 textArea,
                 JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
                 JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
-- 
GitLab


From 65f659df9e87913e0b8e0ed1fa0281a302481ce5 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Sat, 1 May 2021 23:00:42 +0200
Subject: [PATCH 34/91] refactor(DI): Update javadocs and minor refactorings

---
 .../gui/ModloaderInstallerLogTab.java         | 34 +++++++++++++++----
 1 file changed, 28 insertions(+), 6 deletions(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.java b/src/main/java/de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.java
index 4fa7a1a67..104e715ee 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.java
@@ -17,7 +17,6 @@
  *
  * The full license can be found at https:github.com/Griefed/ServerPackCreator/blob/main/LICENSE
  */
-
 package de.griefed.serverpackcreator.gui;
 
 import de.griefed.serverpackcreator.i18n.LocalizationManager;
@@ -27,11 +26,21 @@ import org.apache.commons.io.input.TailerListenerAdapter;
 import javax.swing.*;
 import java.awt.*;
 import java.io.File;
-//TODO: Write docs for class
+
+/**
+ * This class creates the tab which display the latest modloader_installer.log tailer.
+ */
 public class ModloaderInstallerLogTab extends Component {
 
     private LocalizationManager localizationManager;
 
+    /**
+     * <strong>Constructor</strong><p>
+     * Used for Dependency Injection.<p>
+     * Receives an instance of {@link LocalizationManager} or creates one if the received
+     * one is null. Required for use of localization.
+     * @param injectedLocalizationManager Instance of {@link LocalizationManager} required for localized log messages.
+     */
     public ModloaderInstallerLogTab(LocalizationManager injectedLocalizationManager) {
         if (injectedLocalizationManager == null) {
             this.localizationManager = new LocalizationManager();
@@ -40,10 +49,23 @@ public class ModloaderInstallerLogTab extends Component {
         }
     }
 
+    private JComponent modloaderInstallerLogPanel;
+    private GridBagConstraints constraints;
+    private JTextArea textArea;
+    private JScrollPane scrollPane;
+
+    /**
+     * Create the tab for the modloader_installer.log tailer in a JScrollPane with an always available vertical scrollbar
+     * and a horizontal scrollbar available as needed. Uses Apache commons-io's {@link Tailer} to keep the JTextArea up
+     * to date with the latest log entries. Should any line contain "Starting Fabric installation." or
+     * "Starting Forge installation." the textarea is cleared.
+     * @return JComponent. Returns a JPanel containing a JScrollPane containing the JTextArea with the latest
+     * modloader_installer.log entries.
+     */
     JComponent modloaderInstallerLogTab() {
-        JComponent modloaderInstallerLogPanel = new JPanel(false);
+        modloaderInstallerLogPanel = new JPanel(false);
         modloaderInstallerLogPanel.setLayout(new GridBagLayout());
-        GridBagConstraints constraints = new GridBagConstraints();
+        constraints = new GridBagConstraints();
 
         constraints.anchor = GridBagConstraints.CENTER;
         constraints.fill = GridBagConstraints.BOTH;
@@ -53,7 +75,7 @@ public class ModloaderInstallerLogTab extends Component {
         constraints.weightx = 1;
 
         //Log Panel
-        JTextArea textArea = new JTextArea();
+        textArea = new JTextArea();
         textArea.setEditable(false);
 
         Tailer.create(new File("./logs/modloader_installer.log"), new TailerListenerAdapter() {
@@ -68,7 +90,7 @@ public class ModloaderInstallerLogTab extends Component {
             }
         }, 2000, false);
 
-        JScrollPane scrollPane = new JScrollPane(
+        scrollPane = new JScrollPane(
                 textArea,
                 JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
                 JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
-- 
GitLab


From ceffa7403e3ce3a66e437653651b84c18c56ed0a Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Sat, 1 May 2021 23:00:46 +0200
Subject: [PATCH 35/91] refactor(DI): Update javadocs and minor refactorings

---
 .../serverpackcreator/gui/AboutTab.java       | 59 ++++++++++++++-----
 1 file changed, 44 insertions(+), 15 deletions(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/gui/AboutTab.java b/src/main/java/de/griefed/serverpackcreator/gui/AboutTab.java
index 0b7906d81..7d06ef495 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/AboutTab.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/AboutTab.java
@@ -17,7 +17,6 @@
  *
  * The full license can be found at https:github.com/Griefed/ServerPackCreator/blob/main/LICENSE
  */
-//TODO: Write table of contents
 package de.griefed.serverpackcreator.gui;
 
 import de.griefed.serverpackcreator.i18n.LocalizationManager;
@@ -30,17 +29,24 @@ import java.awt.*;
 import java.io.IOException;
 import java.net.URI;
 import java.util.Objects;
-//TODO: Write docs for class
+
+/**
+ * This class creates the tab which displays the About-tab, with the about text, the list of contributors, buttons for
+ * opening PasteBin in your browser, opening ServerPackCreator's issue page on GitHub and for opening the invite link
+ * to Griefed#s discord server in your browser.
+ */
 public class AboutTab extends Component {
     private static final Logger appLogger = LogManager.getLogger(AboutTab.class);
 
-    private final Dimension miscButtonDimension = new Dimension(50,50);
-    private final ImageIcon issueIcon           = new ImageIcon(Objects.requireNonNull(CreateGui.class.getResource("/de/griefed/resources/gui/issue.png")));
-    private final ImageIcon pastebinIcon        = new ImageIcon(Objects.requireNonNull(CreateGui.class.getResource("/de/griefed/resources/gui/pastebin.png")));
-    private final ImageIcon prosperIcon         = new ImageIcon(Objects.requireNonNull(CreateGui.class.getResource("/de/griefed/resources/gui/prosper.png")));
-
     private LocalizationManager localizationManager;
 
+    /**
+     * <strong>Constructor</strong><p>
+     * Used for Dependency Injection.<p>
+     * Receives an instance of {@link LocalizationManager} or creates one if the received
+     * one is null. Required for use of localization.
+     * @param injectedLocalizationManager Instance of {@link LocalizationManager} required for localized log messages.
+     */
     public AboutTab(LocalizationManager injectedLocalizationManager) {
         if (injectedLocalizationManager == null) {
             this.localizationManager = new LocalizationManager();
@@ -49,10 +55,33 @@ public class AboutTab extends Component {
         }
     }
 
+    private final Dimension miscButtonDimension = new Dimension(50,50);
+    private final ImageIcon issueIcon           = new ImageIcon(Objects.requireNonNull(CreateGui.class.getResource("/de/griefed/resources/gui/issue.png")));
+    private final ImageIcon pastebinIcon        = new ImageIcon(Objects.requireNonNull(CreateGui.class.getResource("/de/griefed/resources/gui/pastebin.png")));
+    private final ImageIcon prosperIcon         = new ImageIcon(Objects.requireNonNull(CreateGui.class.getResource("/de/griefed/resources/gui/prosper.png")));
+
+    private JComponent aboutPanel;
+    private GridBagConstraints constraints;
+    private JTextPane textPane;
+    private SimpleAttributeSet attributeSet;
+    private StyledDocument document;
+    private JButton buttonCreatePasteBin;
+    private JButton buttonOpenIssue;
+    private JButton buttonDiscord;
+
+    /**
+     * Create the tab for the About-page of ServerpackCreator. This tab displays the about text, the list of contributors
+     * to ServerPackCreator and offers three buttons to the user. Left to right: Open PasteBin in the user's browser to
+     * create pastes of the the log files or configuration files or whatever they wish. Open ServerPackCreator's issues
+     * page on GitHub in case the user wants to report an issue. Open the invite link to Griefed's discord server in the
+     * users browser.
+     * @return JComponent. Returns a JPanel containing a JTextPane with the about text in a styled document, as well as
+     * the three aforementioned buttons.
+     */
     JComponent aboutTab() {
-        JComponent aboutPanel = new JPanel(false);
+        aboutPanel = new JPanel(false);
         aboutPanel.setLayout(new GridBagLayout());
-        GridBagConstraints constraints = new GridBagConstraints();
+        constraints = new GridBagConstraints();
 
         constraints.anchor = GridBagConstraints.CENTER;
         constraints.fill = GridBagConstraints.BOTH;
@@ -61,19 +90,19 @@ public class AboutTab extends Component {
         constraints.gridwidth = 3;
 
         //About Panel
-        JTextPane textPane = new JTextPane();
+        textPane = new JTextPane();
         textPane.setEditable(false);
         textPane.setOpaque(false);
         textPane.setMinimumSize(new Dimension(getMaximumSize().width,520));
         textPane.setPreferredSize(new Dimension(getMaximumSize().width,520));
         textPane.setMaximumSize(new Dimension(getMaximumSize().width,520));
 
-        SimpleAttributeSet attributeSet = new SimpleAttributeSet();
+        attributeSet = new SimpleAttributeSet();
         StyleConstants.setBold(attributeSet, true);
         StyleConstants.setFontSize(attributeSet, 14);
         textPane.setCharacterAttributes(attributeSet, true);
 
-        StyledDocument document = textPane.getStyledDocument();
+        document = textPane.getStyledDocument();
         StyleConstants.setAlignment(attributeSet, StyleConstants.ALIGN_CENTER);
         document.setParagraphAttributes(0, document.getLength(), attributeSet, false);
 
@@ -101,7 +130,7 @@ public class AboutTab extends Component {
         constraints.gridwidth = 1;
 
         //Button to upload log file to pastebin
-        JButton buttonCreatePasteBin = new JButton();
+        buttonCreatePasteBin = new JButton();
         buttonCreatePasteBin.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.about.pastebin"));
         buttonCreatePasteBin.setIcon(pastebinIcon);
         buttonCreatePasteBin.setPreferredSize(miscButtonDimension);
@@ -121,7 +150,7 @@ public class AboutTab extends Component {
         aboutPanel.add(buttonCreatePasteBin, constraints);
 
         //Button to open a new issue on GitHub
-        JButton buttonOpenIssue = new JButton();
+        buttonOpenIssue = new JButton();
         buttonOpenIssue.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.about.issue"));
         buttonOpenIssue.setIcon(issueIcon);
         buttonOpenIssue.setPreferredSize(miscButtonDimension);
@@ -141,7 +170,7 @@ public class AboutTab extends Component {
         aboutPanel.add(buttonOpenIssue, constraints);
 
         //Button to open the invite link to the discord server
-        JButton buttonDiscord = new JButton();
+        buttonDiscord = new JButton();
         buttonDiscord.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.about.discord"));
         buttonDiscord.setIcon(prosperIcon);
         buttonDiscord.setPreferredSize(miscButtonDimension);
-- 
GitLab


From 8b5de129cb6ab30a73aaeaf02fd0da325db7136a Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Sun, 2 May 2021 00:11:54 +0200
Subject: [PATCH 36/91] refactor(DI): Update javadocs and minor refactorings

---
 .../gui/CreateServerPackTab.java              | 324 ++++++++++++------
 1 file changed, 216 insertions(+), 108 deletions(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/gui/CreateServerPackTab.java b/src/main/java/de/griefed/serverpackcreator/gui/CreateServerPackTab.java
index ec95f7540..773d71310 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/CreateServerPackTab.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/CreateServerPackTab.java
@@ -17,7 +17,6 @@
  *
  * The full license can be found at https:github.com/Griefed/ServerPackCreator/blob/main/LICENSE
  */
-//TODO: Write table of contents
 package de.griefed.serverpackcreator.gui;
 
 import com.typesafe.config.Config;
@@ -43,24 +42,44 @@ import java.util.Arrays;
 import java.util.Objects;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
-//TODO: Write docs for class
+
+/**
+ * This class creates the tab which displays the labels, textfields, buttons and functions in order to create a new
+ * server pack. Available are:<br>
+ * JLabels and JTextFields for modpackDir, clientMods, copyDirs, javaPath, minecraftVersion, modLoader, modLoaderVersion<br>
+ * Checkboxes for Include- serverInstallation, serverIcon, serverProperties, startScripts, ZIParchive<br>
+ * Buttons opening the file explorer and choosing: modpackDir, clientMods, copyDirs, javaPath, loadConfigFromFile<br>
+ * A button for displaying an information windows which provides detailed explanation of the important parts of the GUI.<br>
+ * The button start the generation of a new server pack.<br>
+ * The label under the button to start the generation of a new server pack, which displays the latest log entry of the
+ * serverpackcreator.log <em>during</em> the creation of a new server pack.<p>
+ *     If a configuration file is found during startup of ServerPackCreator, it is automatically loaded into the GUI.
+ * </p>
+ */
 public class CreateServerPackTab extends Component {
     private static final Logger appLogger = LogManager.getLogger(CreateServerPackTab.class);
 
-    private final ImageIcon loadIcon              = new ImageIcon(Objects.requireNonNull(CreateGui.class.getResource("/de/griefed/resources/gui/load.png")));
-    private final ImageIcon folderIcon            = new ImageIcon(Objects.requireNonNull(CreateGui.class.getResource("/de/griefed/resources/gui/folder.png")));
-    private final ImageIcon startGeneration       = new ImageIcon(Objects.requireNonNull(CreateGui.class.getResource("/de/griefed/resources/gui/start_generation.png")));
-    private final ImageIcon helpIcon              = new ImageIcon(Objects.requireNonNull(CreateGui.class.getResource("/de/griefed/resources/gui/help.png")));
-    private final Dimension folderButtonDimension = new Dimension(24,24);
-    private final Dimension miscButtonDimension   = new Dimension(50,50);
-    private final Dimension chooserDimension      = new Dimension(750,450);
-
     private Configuration configuration;
     private LocalizationManager localizationManager;
     private CurseCreateModpack curseCreateModpack;
     private CreateServerPack createServerPack;
 
-    public CreateServerPackTab(LocalizationManager injectedLocalizationManager, Configuration injectedConfiguration, CurseCreateModpack injectectedCurseCreateModpack, CreateServerPack injectedCreateServerPack) {
+    /**
+     * <strong>Constructor</strong><p>
+     * Used for Dependency Injection.<p>
+     * Receives an instance of {@link LocalizationManager} or creates one if the received
+     * one is null. Required for use of localization.<p>
+     * Receives an instance of {@link Configuration} required to successfully and correctly create the server pack.<p>
+     * Receives an instance of {@link CurseCreateModpack} in case the modpack has to be created from a combination of
+     * CurseForge projectID and fileID, from which to <em>then</em> create the server pack.
+     * Receives an instance of {@link CreateServerPack} which is required to generate a server pack.
+     * @param injectedLocalizationManager Instance of {@link LocalizationManager} required for localized log messages.
+     * @param injectedConfiguration Instance of {@link Configuration} required to successfully and correctly create the server pack.
+     * @param injectedCurseCreateModpack Instance of {@link CurseCreateModpack} in case the modpack has to be created from a combination of
+     * CurseForge projectID and fileID, from which to <em>then</em> create the server pack.
+     * @param injectedCreateServerPack Instance of {@link CreateServerPack} required for the generation of server packs.
+     */
+    public CreateServerPackTab(LocalizationManager injectedLocalizationManager, Configuration injectedConfiguration, CurseCreateModpack injectedCurseCreateModpack, CreateServerPack injectedCreateServerPack) {
         if (injectedLocalizationManager == null) {
             this.localizationManager = new LocalizationManager();
         } else {
@@ -70,7 +89,7 @@ public class CreateServerPackTab extends Component {
         if (injectedConfiguration == null) {
             this.curseCreateModpack = new CurseCreateModpack(localizationManager);
         } else {
-            this.curseCreateModpack = injectectedCurseCreateModpack;
+            this.curseCreateModpack = injectedCurseCreateModpack;
         }
 
         if (injectedConfiguration == null) {
@@ -79,17 +98,74 @@ public class CreateServerPackTab extends Component {
             this.configuration = injectedConfiguration;
         }
 
-        if (createServerPack == null) {
+        if (injectedCreateServerPack == null) {
             this.createServerPack = new CreateServerPack(localizationManager, configuration, curseCreateModpack);
         } else {
             this.createServerPack = injectedCreateServerPack;
         }
     }
 
+    private final ImageIcon loadIcon              = new ImageIcon(Objects.requireNonNull(CreateGui.class.getResource("/de/griefed/resources/gui/load.png")));
+    private final ImageIcon folderIcon            = new ImageIcon(Objects.requireNonNull(CreateGui.class.getResource("/de/griefed/resources/gui/folder.png")));
+    private final ImageIcon startGeneration       = new ImageIcon(Objects.requireNonNull(CreateGui.class.getResource("/de/griefed/resources/gui/start_generation.png")));
+    private final ImageIcon helpIcon              = new ImageIcon(Objects.requireNonNull(CreateGui.class.getResource("/de/griefed/resources/gui/help.png")));
+    private final Dimension folderButtonDimension = new Dimension(24,24);
+    private final Dimension miscButtonDimension   = new Dimension(50,50);
+    private final Dimension chooserDimension      = new Dimension(750,450);
+
+    private JComponent createServerPackPanel;
+
+    private JScrollPane helpScrollPane;
+
+    private GridBagConstraints constraints;
+
+    private JLabel labelModpackDir;
+    private JLabel labelClientMods;
+    private JLabel labelCopyDirs;
+    private JLabel labelJavaPath;
+    private JLabel labelMinecraftVersion;
+    private JLabel labelModloader;
+    private JLabel labelModloaderVersion;
+    private JLabel labelGenerateServerPack;
+
+    private JTextField textModpackDir;
+    private JTextField textClientMods;
+    private JTextField textCopyDirs;
+    private JTextField textJavaPath;
+    private JTextField textMinecraftVersion;
+    private JTextField textModloader;
+    private JTextField textModloaderVersion;
+
+    private JTextArea helpTextArea;
+
+    private JCheckBox checkBoxServer;
+    private JCheckBox checkBoxIcon;
+    private JCheckBox checkBoxProperties;
+    private JCheckBox checkBoxScripts;
+    private JCheckBox checkBoxZIP;
+
+    private JButton buttonModpackDir;
+    private JButton buttonClientMods;
+    private JButton buttonCopyDirs;
+    private JButton buttonJavaPath;
+    private JButton buttonLoadConfigFromFile;
+    private JButton buttonInfoWindow;
+    private JButton buttonGenerateServerPack;
+
+    private JFileChooser modpackDirChooser;
+    private JFileChooser clientModsChooser;
+    private JFileChooser copyDirsChooser;
+    private JFileChooser javaChooser;
+    private JFileChooser configChooser;
+
+    /**
+     * Create the tab which displays every component related to configuring ServerPackCreator and creating a server pack.
+     * @return JComponent. Returns a JPanel everything needed for displaying the CreateServerPackTab.
+     * */
     JComponent createServerPackTab() {
-        JComponent createServerPackPanel = new JPanel(false);
+        createServerPackPanel = new JPanel(false);
         createServerPackPanel.setLayout(new GridBagLayout());
-        GridBagConstraints constraints = new GridBagConstraints();
+        constraints = new GridBagConstraints();
 
 // ----------------------------------------------------------------------------------------LABELS AND TEXTFIELDS--------
         constraints.fill = GridBagConstraints.HORIZONTAL;
@@ -97,13 +173,13 @@ public class CreateServerPackTab extends Component {
         constraints.weightx = 0.7;
 
         //Label and textfield modpackDir
-        JLabel labelModpackDir = new JLabel(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelmodpackdir"));
+        labelModpackDir = new JLabel(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelmodpackdir"));
         labelModpackDir.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelmodpackdir.tip"));
         constraints.gridx = 0;
         constraints.gridy = 0;
         constraints.insets = new Insets(20,10,0,0);
         createServerPackPanel.add(labelModpackDir, constraints);
-        JTextField textModpackDir = new JTextField("");
+        textModpackDir = new JTextField("");
         textModpackDir.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelmodpackdir.tip"));
         constraints.gridx = 0;
         constraints.gridy = 1;
@@ -111,13 +187,13 @@ public class CreateServerPackTab extends Component {
         createServerPackPanel.add(textModpackDir, constraints);
 
         //Label and textfield clientMods
-        JLabel labelClientMods = new JLabel(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelclientmods"));
+        labelClientMods = new JLabel(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelclientmods"));
         labelClientMods.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelclientmods.tip"));
         constraints.gridx = 0;
         constraints.gridy = 2;
         constraints.insets = new Insets(20,10,0,0);
         createServerPackPanel.add(labelClientMods, constraints);
-        JTextField textClientMods = new JTextField("");
+        textClientMods = new JTextField("");
         textClientMods.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelclientmods.tip"));
         constraints.gridx = 0;
         constraints.gridy = 3;
@@ -125,13 +201,13 @@ public class CreateServerPackTab extends Component {
         createServerPackPanel.add(textClientMods, constraints);
 
         //Label and textfield copyDirs
-        JLabel labelCopyDirs = new JLabel(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelcopydirs"));
+        labelCopyDirs = new JLabel(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelcopydirs"));
         labelCopyDirs.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelcopydirs.tip"));
         constraints.gridx = 0;
         constraints.gridy = 4;
         constraints.insets = new Insets(20,10,0,0);
         createServerPackPanel.add(labelCopyDirs, constraints);
-        JTextField textCopyDirs = new JTextField("");
+        textCopyDirs = new JTextField("");
         textCopyDirs.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelcopydirs.tip"));
         constraints.gridx = 0;
         constraints.gridy = 5;
@@ -139,13 +215,13 @@ public class CreateServerPackTab extends Component {
         createServerPackPanel.add(textCopyDirs, constraints);
 
         //Label and textfield javaPath
-        JLabel labelJavaPath = new JLabel(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labeljavapath"));
+        labelJavaPath = new JLabel(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labeljavapath"));
         labelJavaPath.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labeljavapath.tip"));
         constraints.gridx = 0;
         constraints.gridy = 6;
         constraints.insets = new Insets(20,10,0,0);
         createServerPackPanel.add(labelJavaPath, constraints);
-        JTextField textJavaPath = new JTextField("");
+        textJavaPath = new JTextField("");
         textJavaPath.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labeljavapath.tip"));
         constraints.gridx = 0;
         constraints.gridy = 7;
@@ -153,13 +229,13 @@ public class CreateServerPackTab extends Component {
         createServerPackPanel.add(textJavaPath, constraints);
 
         //Label and textfield minecraftVersion
-        JLabel labelMinecraftVersion = new JLabel(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelminecraft"));
+        labelMinecraftVersion = new JLabel(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelminecraft"));
         labelMinecraftVersion.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelminecraft.tip"));
         constraints.gridx = 0;
         constraints.gridy = 8;
         constraints.insets = new Insets(20,10,0,0);
         createServerPackPanel.add(labelMinecraftVersion, constraints);
-        JTextField textMinecraftVersion = new JTextField("");
+        textMinecraftVersion = new JTextField("");
         textMinecraftVersion.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelminecraft.tip"));
         constraints.gridx = 0;
         constraints.gridy = 9;
@@ -167,13 +243,13 @@ public class CreateServerPackTab extends Component {
         createServerPackPanel.add(textMinecraftVersion, constraints);
 
         //Label and textfield Modloader
-        JLabel labelModloader = new JLabel(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelmodloader"));
+        labelModloader = new JLabel(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelmodloader"));
         labelModloader.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelmodloader.tip"));
         constraints.gridx = 0;
         constraints.gridy = 10;
         constraints.insets = new Insets(20,10,0,0);
         createServerPackPanel.add(labelModloader, constraints);
-        JTextField textModloader = new JTextField("");
+        textModloader = new JTextField("");
         textModloader.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelmodloader.tip"));
         constraints.gridx = 0;
         constraints.gridy = 11;
@@ -181,13 +257,13 @@ public class CreateServerPackTab extends Component {
         createServerPackPanel.add(textModloader, constraints);
 
         //Label and textfield modloaderVersion
-        JLabel labelModloaderVersion = new JLabel(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelmodloaderversion"));
+        labelModloaderVersion = new JLabel(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelmodloaderversion"));
         labelModloaderVersion.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelmodloaderversion.tip"));
         constraints.gridx = 0;
         constraints.gridy = 12;
         constraints.insets = new Insets(20,10,0,0);
         createServerPackPanel.add(labelModloaderVersion, constraints);
-        JTextField textModloaderVersion = new JTextField("");
+        textModloaderVersion = new JTextField("");
         textModloaderVersion.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelmodloaderversion.tip"));
         constraints.gridx = 0;
         constraints.gridy = 13;
@@ -203,35 +279,35 @@ public class CreateServerPackTab extends Component {
         constraints.fill = GridBagConstraints.NONE;
 
         //Checkbox installServer
-        JCheckBox checkBoxServer = new JCheckBox(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.checkboxserver"),true);
+        checkBoxServer = new JCheckBox(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.checkboxserver"),true);
         checkBoxServer.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.checkboxserver.tip"));
         constraints.gridx = 0;
         constraints.gridy = 14;
         createServerPackPanel.add(checkBoxServer, constraints);
 
         //Checkbox copyIcon
-        JCheckBox checkBoxIcon = new JCheckBox(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.checkboxicon"),true);
+        checkBoxIcon = new JCheckBox(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.checkboxicon"),true);
         checkBoxIcon.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.checkboxicon.tip"));
         constraints.gridx = 1;
         constraints.gridy = 14;
         createServerPackPanel.add(checkBoxIcon, constraints);
 
         //Checkbox copyProperties
-        JCheckBox checkBoxProperties = new JCheckBox(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.checkboxproperties"),true);
+        checkBoxProperties = new JCheckBox(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.checkboxproperties"),true);
         checkBoxProperties.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.checkboxproperties.tip"));
         constraints.gridx = 0;
         constraints.gridy = 15;
         createServerPackPanel.add(checkBoxProperties, constraints);
 
         //Checkbox copyScripts
-        JCheckBox checkBoxScripts = new JCheckBox(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.checkboxscripts"),true);
+        checkBoxScripts = new JCheckBox(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.checkboxscripts"),true);
         checkBoxScripts.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.checkboxscripts.tip"));
         constraints.gridx = 1;
         constraints.gridy = 15;
         createServerPackPanel.add(checkBoxScripts, constraints);
 
         //Checkbox createZIP
-        JCheckBox checkBoxZIP = new JCheckBox(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.checkboxzip"),true);
+        checkBoxZIP = new JCheckBox(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.checkboxzip"),true);
         checkBoxZIP.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.checkboxzip.tip"));
         constraints.gridx = 0;
         constraints.gridy = 16;
@@ -244,26 +320,30 @@ public class CreateServerPackTab extends Component {
         constraints.weighty = 0;
 
         //Select modpackDir button
-        JButton buttonModpackDir = new JButton();
+        buttonModpackDir = new JButton();
         buttonModpackDir.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.buttonmodpackdir"));
         buttonModpackDir.setIcon(folderIcon);
         buttonModpackDir.setMinimumSize(folderButtonDimension);
         buttonModpackDir.setPreferredSize(folderButtonDimension);
         buttonModpackDir.setMaximumSize(folderButtonDimension);
         buttonModpackDir.addActionListener(e -> {
-            JFileChooser folderChooser = new JFileChooser();
+            modpackDirChooser = new JFileChooser();
 
-            folderChooser.setCurrentDirectory(new File("."));
-            folderChooser.setDialogTitle(localizationManager.getLocalizedString("createserverpack.gui.buttonmodpackdir.title"));
-            folderChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
-            folderChooser.setAcceptAllFileFilterUsed(false);
-            folderChooser.setMultiSelectionEnabled(false);
-            folderChooser.setPreferredSize(chooserDimension);
+            modpackDirChooser.setCurrentDirectory(new File("."));
+            modpackDirChooser.setDialogTitle(localizationManager.getLocalizedString("createserverpack.gui.buttonmodpackdir.title"));
+            modpackDirChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
+            modpackDirChooser.setAcceptAllFileFilterUsed(false);
+            modpackDirChooser.setMultiSelectionEnabled(false);
+            modpackDirChooser.setPreferredSize(chooserDimension);
 
-            if (folderChooser.showOpenDialog(folderChooser) == JFileChooser.APPROVE_OPTION) {
+            if (modpackDirChooser.showOpenDialog(modpackDirChooser) == JFileChooser.APPROVE_OPTION) {
                 try {
-                    textModpackDir.setText(folderChooser.getSelectedFile().getCanonicalPath().replace("\\","/"));
-                    appLogger.info(String.format(localizationManager.getLocalizedString("createserverpack.log.info.buttonmodpack"), folderChooser.getSelectedFile().getCanonicalPath().replace("\\","/")));
+                    textModpackDir.setText(modpackDirChooser.getSelectedFile().getCanonicalPath().replace("\\","/"));
+
+                    appLogger.info(String.format(
+                            localizationManager.getLocalizedString("createserverpack.log.info.buttonmodpack"),
+                            modpackDirChooser.getSelectedFile().getCanonicalPath().replace("\\","/")));
+
                 } catch (IOException ex) {
                     appLogger.error(localizationManager.getLocalizedString("createserverpack.log.error.buttonmodpack"),ex);
                 }
@@ -274,39 +354,49 @@ public class CreateServerPackTab extends Component {
         createServerPackPanel.add(buttonModpackDir, constraints);
 
         //Select clientside-mods button
-        JButton buttonClientMods = new JButton();
+        buttonClientMods = new JButton();
         buttonClientMods.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.buttonclientmods"));
         buttonClientMods.setIcon(folderIcon);
         buttonClientMods.setMinimumSize(folderButtonDimension);
         buttonClientMods.setPreferredSize(folderButtonDimension);
         buttonClientMods.setMaximumSize(folderButtonDimension);
         buttonClientMods.addActionListener(e -> {
-            JFileChooser fileChooser = new JFileChooser();
+            clientModsChooser = new JFileChooser();
 
             if (textModpackDir.getText().length() > 0 &&
                     new File(textModpackDir.getText()).isDirectory() &&
                     new File(String.format("%s/mods",textModpackDir.getText())).isDirectory()) {
 
-                fileChooser.setCurrentDirectory(new File(String.format("%s/mods",textModpackDir.getText())));
+                clientModsChooser.setCurrentDirectory(new File(String.format("%s/mods",textModpackDir.getText())));
             } else {
-                fileChooser.setCurrentDirectory(new File("."));
+                clientModsChooser.setCurrentDirectory(new File("."));
             }
-            fileChooser.setDialogTitle(localizationManager.getLocalizedString("createserverpack.gui.buttonclientmods.title"));
-            fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
-            fileChooser.setFileFilter(new FileNameExtensionFilter(localizationManager.getLocalizedString("createserverpack.gui.buttonclientmods.filter"),"jar"));
-            fileChooser.setAcceptAllFileFilterUsed(false);
-            fileChooser.setMultiSelectionEnabled(true);
-            fileChooser.setPreferredSize(chooserDimension);
-
-            if (fileChooser.showOpenDialog(fileChooser) == JFileChooser.APPROVE_OPTION) {
-                File[] clientMods = fileChooser.getSelectedFiles();
+
+            clientModsChooser.setDialogTitle(localizationManager.getLocalizedString("createserverpack.gui.buttonclientmods.title"));
+            clientModsChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
+
+            clientModsChooser.setFileFilter(new FileNameExtensionFilter(
+                    localizationManager.getLocalizedString("createserverpack.gui.buttonclientmods.filter"),
+                    "jar"
+            ));
+
+            clientModsChooser.setAcceptAllFileFilterUsed(false);
+            clientModsChooser.setMultiSelectionEnabled(true);
+            clientModsChooser.setPreferredSize(chooserDimension);
+
+            if (clientModsChooser.showOpenDialog(clientModsChooser) == JFileChooser.APPROVE_OPTION) {
+                File[] clientMods = clientModsChooser.getSelectedFiles();
                 ArrayList<String> clientModsFilenames = new ArrayList<>();
 
                 for (int i = 0; i < clientMods.length; i++) {
                     clientModsFilenames.add(clientMods[i].getName());
                 }
 
-                textClientMods.setText(configuration.buildString(Arrays.toString(clientModsFilenames.toArray(new String[0]))));
+                textClientMods.setText(
+                        configuration.buildString(
+                                Arrays.toString(
+                                        clientModsFilenames.toArray(new String[0])))
+                );
                 appLogger.info(String.format(localizationManager.getLocalizedString("createserverpack.log.info.buttonclientmods"), clientModsFilenames));
             }
         });
@@ -315,30 +405,31 @@ public class CreateServerPackTab extends Component {
         createServerPackPanel.add(buttonClientMods, constraints);
 
         //Select directories to copy to server pack button
-        JButton buttonCopyDirs = new JButton();
+        buttonCopyDirs = new JButton();
         buttonCopyDirs.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.buttoncopydirs"));
         buttonCopyDirs.setIcon(folderIcon);
         buttonCopyDirs.setMinimumSize(folderButtonDimension);
         buttonCopyDirs.setPreferredSize(folderButtonDimension);
         buttonCopyDirs.setMaximumSize(folderButtonDimension);
         buttonCopyDirs.addActionListener(e -> {
-            JFileChooser fileChooser = new JFileChooser();
+            copyDirsChooser = new JFileChooser();
 
             if (textModpackDir.getText().length() > 0 &&
                     new File(textModpackDir.getText()).isDirectory()) {
 
-                fileChooser.setCurrentDirectory(new File(textModpackDir.getText()));
+                copyDirsChooser.setCurrentDirectory(new File(textModpackDir.getText()));
             } else {
-                fileChooser.setCurrentDirectory(new File("."));
+                copyDirsChooser.setCurrentDirectory(new File("."));
             }
-            fileChooser.setDialogTitle(localizationManager.getLocalizedString("createserverpack.gui.buttoncopydirs.title"));
-            fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
-            fileChooser.setAcceptAllFileFilterUsed(false);
-            fileChooser.setMultiSelectionEnabled(true);
-            fileChooser.setPreferredSize(chooserDimension);
-
-            if (fileChooser.showOpenDialog(fileChooser) == JFileChooser.APPROVE_OPTION) {
-                File[] copyDirs = fileChooser.getSelectedFiles();
+
+            copyDirsChooser.setDialogTitle(localizationManager.getLocalizedString("createserverpack.gui.buttoncopydirs.title"));
+            copyDirsChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
+            copyDirsChooser.setAcceptAllFileFilterUsed(false);
+            copyDirsChooser.setMultiSelectionEnabled(true);
+            copyDirsChooser.setPreferredSize(chooserDimension);
+
+            if (copyDirsChooser.showOpenDialog(copyDirsChooser) == JFileChooser.APPROVE_OPTION) {
+                File[] copyDirs = copyDirsChooser.getSelectedFiles();
                 ArrayList<String> copyDirsNames = new ArrayList<>();
 
                 for (int i = 0; i < copyDirs.length; i++) {
@@ -354,33 +445,41 @@ public class CreateServerPackTab extends Component {
         createServerPackPanel.add(buttonCopyDirs, constraints);
 
         //Select javaPath button
-        JButton buttonJavaPath = new JButton();
+        buttonJavaPath = new JButton();
         buttonJavaPath.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.buttonjavapath"));
         buttonJavaPath.setIcon(folderIcon);
         buttonJavaPath.setMinimumSize(folderButtonDimension);
         buttonJavaPath.setPreferredSize(folderButtonDimension);
         buttonJavaPath.setMaximumSize(folderButtonDimension);
         buttonJavaPath.addActionListener(e -> {
-            JFileChooser fileChooser = new JFileChooser();
+            javaChooser = new JFileChooser();
 
             if (new File(String.format("%s/bin/",System.getProperty("java.home").replace("\\", "/"))).isDirectory()) {
-                fileChooser.setCurrentDirectory(new File(String.format("%s/bin/",System.getProperty("java.home").replace("\\", "/"))));
+
+                javaChooser.setCurrentDirectory(new File(
+                        String.format("%s/bin/",
+                                System.getProperty("java.home").replace("\\", "/"))
+                ));
+
             } else {
-                fileChooser.setCurrentDirectory(new File("."));
+                javaChooser.setCurrentDirectory(new File("."));
             }
 
-            fileChooser.setDialogTitle(localizationManager.getLocalizedString("createserverpack.gui.buttonjavapath.tile"));
+            javaChooser.setDialogTitle(localizationManager.getLocalizedString("createserverpack.gui.buttonjavapath.tile"));
+            javaChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
+            javaChooser.setAcceptAllFileFilterUsed(true);
+            javaChooser.setMultiSelectionEnabled(false);
+            javaChooser.setPreferredSize(chooserDimension);
 
-            fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
-            fileChooser.setAcceptAllFileFilterUsed(true);
-            fileChooser.setMultiSelectionEnabled(false);
+            if (javaChooser.showOpenDialog(javaChooser) == JFileChooser.APPROVE_OPTION) {
+                try {
+                    textJavaPath.setText(javaChooser.getSelectedFile().getCanonicalPath().replace("\\","/"));
 
-            fileChooser.setPreferredSize(chooserDimension);
+                    appLogger.info(String.format(
+                            localizationManager.getLocalizedString("createserverpack.log.info.buttonjavapath"),
+                            javaChooser.getSelectedFile().getCanonicalPath().replace("\\","/")
+                    ));
 
-            if (fileChooser.showOpenDialog(fileChooser) == JFileChooser.APPROVE_OPTION) {
-                try {
-                    textJavaPath.setText(fileChooser.getSelectedFile().getCanonicalPath().replace("\\","/"));
-                    appLogger.info(String.format(localizationManager.getLocalizedString("createserverpack.log.info.buttonjavapath"), fileChooser.getSelectedFile().getCanonicalPath().replace("\\","/")));
                 } catch (IOException ex) {
                     appLogger.error(localizationManager.getLocalizedString("createserverpack.log.error.buttonjavapath"),ex);
                 }
@@ -391,30 +490,39 @@ public class CreateServerPackTab extends Component {
         createServerPackPanel.add(buttonJavaPath, constraints);
 
         //Load config from file
-        JButton buttonLoadConfigFromFile = new JButton();
+        buttonLoadConfigFromFile = new JButton();
         buttonLoadConfigFromFile.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.buttonloadconfig"));
         buttonLoadConfigFromFile.setIcon(loadIcon);
         buttonLoadConfigFromFile.setMinimumSize(miscButtonDimension);
         buttonLoadConfigFromFile.setPreferredSize(miscButtonDimension);
         buttonLoadConfigFromFile.setMaximumSize(miscButtonDimension);
         buttonLoadConfigFromFile.addActionListener(e -> {
+            configChooser = new JFileChooser();
 
-            JFileChooser fileChooser = new JFileChooser();
-            fileChooser.setCurrentDirectory(new File("."));
-            fileChooser.setDialogTitle(localizationManager.getLocalizedString("createserverpack.gui.buttonloadconfig.title"));
-            fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
-            fileChooser.setFileFilter(new FileNameExtensionFilter(localizationManager.getLocalizedString("createserverpack.gui.buttonloadconfig.filter"),"conf"));
-            fileChooser.setAcceptAllFileFilterUsed(false);
-            fileChooser.setMultiSelectionEnabled(false);
-            fileChooser.setPreferredSize(chooserDimension);
+            configChooser.setCurrentDirectory(new File("."));
+            configChooser.setDialogTitle(localizationManager.getLocalizedString("createserverpack.gui.buttonloadconfig.title"));
+            configChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
 
-            if (fileChooser.showOpenDialog(fileChooser) == JFileChooser.APPROVE_OPTION) {
+            configChooser.setFileFilter(new FileNameExtensionFilter(
+                    localizationManager.getLocalizedString("createserverpack.gui.buttonloadconfig.filter"),
+                    "conf"));
+
+            configChooser.setAcceptAllFileFilterUsed(false);
+            configChooser.setMultiSelectionEnabled(false);
+            configChooser.setPreferredSize(chooserDimension);
+
+            if (configChooser.showOpenDialog(configChooser) == JFileChooser.APPROVE_OPTION) {
 
                 Config newConfigFile = null;
 
                 try {
-                    newConfigFile = ConfigFactory.parseFile(new File(fileChooser.getSelectedFile().getCanonicalPath()));
-                    appLogger.info(String.format(localizationManager.getLocalizedString("createserverpack.log.info.buttonloadconfigfromfile"), fileChooser.getSelectedFile().getCanonicalPath()));
+                    newConfigFile = ConfigFactory.parseFile(new File(configChooser.getSelectedFile().getCanonicalPath()));
+
+                    appLogger.info(String.format(
+                            localizationManager.getLocalizedString("createserverpack.log.info.buttonloadconfigfromfile"),
+                            configChooser.getSelectedFile().getCanonicalPath()
+                    ));
+
                 } catch (IOException ex) {
                     appLogger.error(localizationManager.getLocalizedString("createserverpack.log.error.buttonloadconfigfromfile"),ex);
                 }
@@ -456,7 +564,7 @@ public class CreateServerPackTab extends Component {
         createServerPackPanel.add(buttonLoadConfigFromFile, constraints);
 
         //Load config from file
-        JButton buttonInfoWindow = new JButton();
+        buttonInfoWindow = new JButton();
         buttonInfoWindow.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.button"));
         buttonInfoWindow.setIcon(helpIcon);
         buttonInfoWindow.setMinimumSize(miscButtonDimension);
@@ -464,7 +572,7 @@ public class CreateServerPackTab extends Component {
         buttonInfoWindow.setMaximumSize(miscButtonDimension);
         buttonInfoWindow.addActionListener(e -> {
 
-            JTextArea textArea = new JTextArea(String.format(
+            helpTextArea = new JTextArea(String.format(
                     "%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s",
                     localizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.modpackdir"),
                     localizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.clientsidemods"),
@@ -479,21 +587,21 @@ public class CreateServerPackTab extends Component {
                     localizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.copyicon"),
                     localizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.createzip")
             ));
-            textArea.setEditable(false);
-            textArea.setOpaque(false);
+            helpTextArea.setEditable(false);
+            helpTextArea.setOpaque(false);
 
-            JScrollPane scrollPane = new JScrollPane(
-                    textArea,
+            helpScrollPane = new JScrollPane(
+                    helpTextArea,
                     JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
                     JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED
             );
-            scrollPane.setBorder(null);
+            helpScrollPane.setBorder(null);
 
-            textArea.addHierarchyListener(
+            helpTextArea.addHierarchyListener(
                     new HierarchyListener() {
                         @Override
                         public void hierarchyChanged(HierarchyEvent e) {
-                            Window window = SwingUtilities.getWindowAncestor(textArea);
+                            Window window = SwingUtilities.getWindowAncestor(helpTextArea);
                             if (window instanceof Dialog) {
                                 Dialog dialog = (Dialog) window;
                                 if (!dialog.isResizable()) {
@@ -503,7 +611,7 @@ public class CreateServerPackTab extends Component {
                         }
                     });
 
-            JOptionPane.showMessageDialog(new JFrame(), scrollPane, localizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.title"), JOptionPane.INFORMATION_MESSAGE, helpIcon);
+            JOptionPane.showMessageDialog(new JFrame(), helpScrollPane, localizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.title"), JOptionPane.INFORMATION_MESSAGE, helpIcon);
 
         });
         constraints.anchor = GridBagConstraints.CENTER;
@@ -516,7 +624,7 @@ public class CreateServerPackTab extends Component {
         constraints.fill = GridBagConstraints.NONE;
         constraints.insets = new Insets(5,0,5,0);
 
-        JLabel labelGenerateServerPack = new JLabel(localizationManager.getLocalizedString("createserverpack.gui.buttongenerateserverpack.ready"));
+        labelGenerateServerPack = new JLabel(localizationManager.getLocalizedString("createserverpack.gui.buttongenerateserverpack.ready"));
         labelGenerateServerPack.setFont(new Font(labelGenerateServerPack.getFont().getName(), Font.BOLD, labelGenerateServerPack.getFont().getSize()));
         constraints.gridx = 0;
         constraints.gridy = 18;
@@ -526,7 +634,7 @@ public class CreateServerPackTab extends Component {
         constraints.anchor = GridBagConstraints.PAGE_END;
         createServerPackPanel.add(labelGenerateServerPack, constraints);
 
-        JButton buttonGenerateServerPack = new JButton();
+        buttonGenerateServerPack = new JButton();
         buttonGenerateServerPack.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.buttongenerateserverpack.tip"));
         buttonGenerateServerPack.setIcon(startGeneration);
         buttonGenerateServerPack.addActionListener(e -> {
-- 
GitLab


From 67556b18655919a597384b2a57ffc3898f3c1e1a Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Sun, 2 May 2021 00:11:57 +0200
Subject: [PATCH 37/91] refactor(DI): Update javadocs and minor refactorings

---
 .../serverpackcreator/gui/CreateGui.java      | 103 ++++++++++++++----
 1 file changed, 79 insertions(+), 24 deletions(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java b/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java
index 4f15d697f..8b0802f09 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java
@@ -17,7 +17,6 @@
  *
  * The full license can be found at https:github.com/Griefed/ServerPackCreator/blob/main/LICENSE
  */
-//TODO: Write table of contents
 package de.griefed.serverpackcreator.gui;
 
 import com.typesafe.config.Config;
@@ -35,7 +34,17 @@ import java.awt.*;
 import java.awt.event.KeyEvent;
 import java.io.File;
 import java.util.Objects;
-//TODO: Write docs for class
+
+/**
+ * <strong>Table of methods</strong><br>
+ * {@link #CreateGui(LocalizationManager, Configuration, CurseCreateModpack, CreateServerPack)}<br>
+ * {@link #mainGUI()}<br>
+ * {@link #createAndShowGUI()}<p>
+ * This class creates and shows the GUI needed for running ServerPackCreator in....well...GUI mode. Calls {@link #mainGUI()}
+ * which then calls {@link #createAndShowGUI()} in order to create and show the GUI of ServerPackCreator. Instances of
+ * the {@link CreateServerPackTab}, {@link ServerPackCreatorLogTab}, {@link ModloaderInstallerLogTab}, {@link AboutTab}
+ * are created in the constructor of this class to make sure they are ready when the GUI is created and shown to the user.
+ */
 public class CreateGui extends JPanel {
     private static final Logger appLogger = LogManager.getLogger(CreateGui.class);
 
@@ -48,7 +57,22 @@ public class CreateGui extends JPanel {
     private CurseCreateModpack curseCreateModpack;
     private CreateServerPack createServerPack;
 
-    public CreateGui(LocalizationManager injectedLocalizationManager, Configuration injectedConfiguration, CurseCreateModpack injectectedCurseCreateModpack, CreateServerPack injectedCreateServerPack) {
+    /**
+     * <strong>Constructor</strong><p>
+     * Used for Dependency Injection.<p>
+     * Receives an instance of {@link LocalizationManager} or creates one if the received
+     * one is null. Required for use of localization.<p>
+     * Receives an instance of {@link Configuration} required to successfully and correctly create the server pack.<p>
+     * Receives an instance of {@link CurseCreateModpack} in case the modpack has to be created from a combination of
+     * CurseForge projectID and fileID, from which to <em>then</em> create the server pack.
+     * Receives an instance of {@link CreateServerPack} which is required to generate a server pack.
+     * @param injectedLocalizationManager Instance of {@link LocalizationManager} required for localized log messages.
+     * @param injectedConfiguration Instance of {@link Configuration} required to successfully and correctly create the server pack.
+     * @param injectedCurseCreateModpack Instance of {@link CurseCreateModpack} in case the modpack has to be created from a combination of
+     * CurseForge projectID and fileID, from which to <em>then</em> create the server pack.
+     * @param injectedCreateServerPack Instance of {@link CreateServerPack} required for the generation of server packs.
+     */
+    public CreateGui(LocalizationManager injectedLocalizationManager, Configuration injectedConfiguration, CurseCreateModpack injectedCurseCreateModpack, CreateServerPack injectedCreateServerPack) {
         super(new GridLayout(1, 1));
 
         if (injectedLocalizationManager == null) {
@@ -60,7 +84,7 @@ public class CreateGui extends JPanel {
         if (injectedConfiguration == null) {
             this.curseCreateModpack = new CurseCreateModpack(localizationManager);
         } else {
-            this.curseCreateModpack = injectectedCurseCreateModpack;
+            this.curseCreateModpack = injectedCurseCreateModpack;
         }
 
         if (injectedConfiguration == null) {
@@ -77,25 +101,53 @@ public class CreateGui extends JPanel {
 
         JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
 
-        tabbedPane.addTab(localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.createserverpack.title"), null, new CreateServerPackTab(localizationManager, configuration, curseCreateModpack, createServerPack).createServerPackTab(), localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.createserverpack.tip"));
+        tabbedPane.addTab(
+                localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.createserverpack.title"),
+                null,
+                new CreateServerPackTab(localizationManager, configuration, curseCreateModpack, createServerPack).createServerPackTab(),
+                localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.createserverpack.tip"));
+
         tabbedPane.setMnemonicAt(0, KeyEvent.VK_1);
 
-        tabbedPane.addTab(localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.serverpackcreatorlog.title"), null, new ServerPackCreatorLogTab(localizationManager).serverPackCreatorLogTab(), localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.serverpackcreatorlog.tip"));
+        tabbedPane.addTab(
+                localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.serverpackcreatorlog.title"),
+                null,
+                new ServerPackCreatorLogTab(localizationManager).serverPackCreatorLogTab(),
+                localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.serverpackcreatorlog.tip"));
+
         tabbedPane.setMnemonicAt(1, KeyEvent.VK_2);
 
-        tabbedPane.addTab(localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.modloaderinstallerlog.title"), null, new ModloaderInstallerLogTab(localizationManager).modloaderInstallerLogTab(), localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.modloaderinstallerlog.tip"));
+        tabbedPane.addTab(
+                localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.modloaderinstallerlog.title"),
+                null,
+                new ModloaderInstallerLogTab(localizationManager).modloaderInstallerLogTab(),
+                localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.modloaderinstallerlog.tip"));
+
         tabbedPane.setMnemonicAt(2, KeyEvent.VK_3);
 
-        tabbedPane.addTab(localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.about.title"), null, new AboutTab(localizationManager).aboutTab(), localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.about.tip"));
+        tabbedPane.addTab(
+                localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.about.title"),
+                null,
+                new AboutTab(localizationManager).aboutTab(),
+                localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.about.tip"));
+
         tabbedPane.setMnemonicAt(3, KeyEvent.VK_4);
 
-        //Add the tabbed pane to this panel.
         add(tabbedPane);
 
-        //The following line enables to use scrolling tabs.
         tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
     }
 
+    private JFrame serverPackCreatorFrame;
+    private JLabel serverPackCreatorBanner;
+    private File secretFile;
+    private Config secret;
+
+    /**
+     * Shows the GUI from the EDT by using SwingUtilities and it's invokeLater method by calling {@link #createAndShowGUI()}.
+     * Sets the font to bold, which may be overridden by the LookAndFeel which gets automatically determined and depends
+     * on the OS ServerPackCreator is run on.
+     */
     public void mainGUI() {
         SwingUtilities.invokeLater(() -> {
             //Bold fonts = true, else false
@@ -104,8 +156,8 @@ public class CreateGui extends JPanel {
             try {
                 if (new File("serverpackcreator.conf").exists()) {
 
-                    File configFile = new File("serverpackcreator.conf");
-                    Config secret = ConfigFactory.parseFile(configFile);
+                    secretFile = new File("serverpackcreator.conf");
+                    secret = ConfigFactory.parseFile(secretFile);
 
                     if (secret.getString("topsicrets") != null && !secret.getString("topsicrets").equals("") && secret.getString("topsicrets").length() > 0) {
 
@@ -136,24 +188,27 @@ public class CreateGui extends JPanel {
         });
     }
 
+    /**
+     * Creates the frame in which the banner, tabbed pane with all the tabs, icon and title are displayed and shows it.
+     */
     private void createAndShowGUI() {
 
-        JFrame frame = new JFrame(localizationManager.getLocalizedString("createserverpack.gui.createandshowgui"));
-        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+        serverPackCreatorFrame = new JFrame(localizationManager.getLocalizedString("createserverpack.gui.createandshowgui"));
+        serverPackCreatorFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
-        frame.setIconImage(icon);
-        JLabel banner = new JLabel(bannerIcon);
-        banner.setOpaque(false);
+        serverPackCreatorFrame.setIconImage(icon);
+        serverPackCreatorBanner = new JLabel(bannerIcon);
+        serverPackCreatorBanner.setOpaque(false);
 
-        frame.add(banner, BorderLayout.PAGE_START);
-        frame.add(new CreateGui(localizationManager, configuration, curseCreateModpack, createServerPack), BorderLayout.CENTER);
+        serverPackCreatorFrame.add(serverPackCreatorBanner, BorderLayout.PAGE_START);
+        serverPackCreatorFrame.add(new CreateGui(localizationManager, configuration, curseCreateModpack, createServerPack), BorderLayout.CENTER);
 
-        frame.setPreferredSize(windowDimension);
-        frame.setMaximumSize(windowDimension);
-        frame.setResizable(true);
+        serverPackCreatorFrame.setPreferredSize(windowDimension);
+        serverPackCreatorFrame.setMaximumSize(windowDimension);
+        serverPackCreatorFrame.setResizable(true);
 
-        frame.pack();
+        serverPackCreatorFrame.pack();
 
-        frame.setVisible(true);
+        serverPackCreatorFrame.setVisible(true);
     }
 }
\ No newline at end of file
-- 
GitLab


From 3dbc18995144ca762d2c0de5b3a79900b7c66696 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Sun, 2 May 2021 11:19:24 +0200
Subject: [PATCH 38/91] refactor(DI): Update javadocs

---
 .../curseforgemodpack/CurseSplines.java       | 177 +++++++++++++-----
 1 file changed, 135 insertions(+), 42 deletions(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.java b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.java
index b96365bc6..17661d92c 100644
--- a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.java
+++ b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.java
@@ -17,63 +17,156 @@
  *
  * The full license can be found at https:github.com/Griefed/ServerPackCreator/blob/main/LICENSE
  */
-
 package de.griefed.serverpackcreator.curseforgemodpack;
 
 import java.util.Random;
-//TODO: Write docs for class
+
+/**
+ * <strong>Table of methods</strong><br>
+ * {@link #reticulating}<br>
+ * {@link #getRandomInt()}<br>
+ * {@link #getSpline()}<br>
+ * {@link #reticulate()}<p>
+ * Just something fun to brighten the mood. This class provides a list of messages which some of you may know from the
+ * SimCity games. Thanks go out to MAXIS and Sim City, for the ridiculous messages these games contained.
+ * Additional thanks to Larsz for providing a list of all these messages <a href=https://gamefaqs.gamespot.com/pc/561176-simcity-4/faqs/22135>on GameFAQs </a>
+ */
 public class CurseSplines {
-    /*
-    Thanks go out to MAXIS and Sim City, for the ridiculous messages these games contained.
-    Additional thanks to Larsz on GameFAQs for providing a list of all these messages: https://gamefaqs.gamespot.com/pc/561176-simcity-4/faqs/22135
+
+    /**
+     * The list of messages as they were available in SimCity, plus Reticulating Splines added by myself, for good measure.
      */
-    private final String[] reticulating = {"Adding Hidden Agendas","Adjusting Bell Curves","Aesthesizing Industrial Areas",
-            "Aligning Covariance Matrices","Applying Feng Shui Shaders","Applying Theatre Soda Layer",
-            "Asserting Packed Exemplars","Attempting to Lock Back-Buffer","Binding Sapling Root System","Breeding Fauna",
-            "Building Data Trees","Bureacritizing Bureaucracies","Calculating Inverse Probability Matrices",
-            "Calculating Llama Expectoration Trajectory","Calibrating Blue Skies","Charging Ozone Layer",
-            "Coalescing Cloud Formations","Cohorting Exemplars","Collecting Meteor Particles",
-            "Compounding Inert Tessellations","Compressing Fish Files","Computing Optimal Bin Packing",
-            "Concatenating Sub-Contractors","Containing Existential Buffer","Debarking Ark Ramp",
-            "Debunching Unionized Commercial Services","Deciding What Message to Display Next",
-            "Decomposing Singular Values","Decrementing Tectonic Plates","Deleting Ferry Routes",
-            "Depixelating Inner Mountain Surface Back Faces","Depositing Slush Funds",
-            "Destabilizing Economic Indicators","Determining Width of Blast Fronts","Deunionizing Bulldozers",
-            "Dicing Models","Diluting Livestock Nutrition Variables","Downloading Satellite Terrain Data",
-            "Exposing Flash Variables to Streak System","Extracting Resources","Factoring Pay Scale",
-            "Fixing Election Outcome Matrix","Flood-Filling Ground Water","Flushing Pipe Network",
-            "Gathering Particle Sources","Generating Jobs","Gesticulating Mimes","Graphing Whale Migration",
-            "Hiding Willio Webnet Mask","Implementing Impeachment Routine","Increasing Accuracy of RCI Simulators",
-            "Increasing Magmafacation","Initializing My Sim Tracking Mechanism",
-            "Initializing Rhinoceros Breeding Timetable","Initializing Robotic Click-Path AI",
-            "Inserting Sublimated Messages","Integrating Curves","Integrating Illumination Form Factors",
-            "Integrating Population Graphs","Iterating Cellular Automata","Lecturing Errant Subsystems",
-            "Mixing Genetic Pool","Modeling Object Components","Mopping Occupant Leaks","Normalizing Power",
-            "Obfuscating Quigley Matrix","Overconstraining Dirty Industry Calculations",
-            "Partitioning City Grid Singularities","Perturbing Matrices","Pixalating Nude Patch",
-            "Polishing Water Highlights","Populating Lot Templates","Preparing Sprites for Random Walks",
-            "Prioritizing Landmarks","Projecting Law Enforcement Pastry Intake","Realigning Alternate Time Frames",
-            "Reconfiguring User Mental Processes","Relaxing Splines","Removing Road Network Speed Bumps",
-            "Removing Texture Gradients","Removing Vehicle Avoidance Behavior","Resolving GUID Conflict",
-            "Reticulating Splines","Retracting Phong Shader","Retrieving from Back Store",
-            "Reverse Engineering Image Consultant","Routing Neural Network Infanstructure",
-            "Scattering Rhino Food Sources","Scrubbing Terrain","Searching for Llamas",
-            "Seeding Architecture Simulation Parameters","Sequencing Particles","Setting Advisor Moods",
-            "Setting Inner Deity Indicators","Setting Universal Physical Constants",
-            "Sonically Enhancing Occupant-Free Timber","Speculating Stock Market Indices",
-            "Splatting Transforms","Stratifying Ground Layers","Sub-Sampling Water Data","Synthesizing Gravity",
-            "Synthesizing Wavelets","Time-Compressing Simulator Clock","Unable to Reveal Current Activity",
-            "Weathering Buildings","Zeroing Crime Network"};
+    private final String[] reticulating = {
+            "Adding Hidden Agendas",
+            "Adjusting Bell Curves",
+            "Aesthesizing Industrial Areas",
+            "Aligning Covariance Matrices",
+            "Applying Feng Shui Shaders",
+            "Applying Theatre Soda Layer",
+            "Asserting Packed Exemplars",
+            "Attempting to Lock Back-Buffer",
+            "Binding Sapling Root System",
+            "Breeding Fauna",
+            "Building Data Trees",
+            "Bureacritizing Bureaucracies",
+            "Calculating Inverse Probability Matrices",
+            "Calculating Llama Expectoration Trajectory",
+            "Calibrating Blue Skies",
+            "Charging Ozone Layer",
+            "Coalescing Cloud Formations",
+            "Cohorting Exemplars",
+            "Collecting Meteor Particles",
+            "Compounding Inert Tessellations",
+            "Compressing Fish Files",
+            "Computing Optimal Bin Packing",
+            "Concatenating Sub-Contractors",
+            "Containing Existential Buffer",
+            "Debarking Ark Ramp",
+            "Debunching Unionized Commercial Services",
+            "Deciding What Message to Display Next",
+            "Decomposing Singular Values",
+            "Decrementing Tectonic Plates",
+            "Deleting Ferry Routes",
+            "Depixelating Inner Mountain Surface Back Faces",
+            "Depositing Slush Funds",
+            "Destabilizing Economic Indicators",
+            "Determining Width of Blast Fronts",
+            "Deunionizing Bulldozers",
+            "Dicing Models",
+            "Diluting Livestock Nutrition Variables",
+            "Downloading Satellite Terrain Data",
+            "Exposing Flash Variables to Streak System",
+            "Extracting Resources",
+            "Factoring Pay Scale",
+            "Fixing Election Outcome Matrix",
+            "Flood-Filling Ground Water",
+            "Flushing Pipe Network",
+            "Gathering Particle Sources",
+            "Generating Jobs",
+            "Gesticulating Mimes",
+            "Graphing Whale Migration",
+            "Hiding Willio Webnet Mask",
+            "Implementing Impeachment Routine",
+            "Increasing Accuracy of RCI Simulators",
+            "Increasing Magmafacation",
+            "Initializing My Sim Tracking Mechanism",
+            "Initializing Rhinoceros Breeding Timetable",
+            "Initializing Robotic Click-Path AI",
+            "Inserting Sublimated Messages",
+            "Integrating Curves",
+            "Integrating Illumination Form Factors",
+            "Integrating Population Graphs",
+            "Iterating Cellular Automata",
+            "Lecturing Errant Subsystems",
+            "Mixing Genetic Pool",
+            "Modeling Object Components",
+            "Mopping Occupant Leaks",
+            "Normalizing Power",
+            "Obfuscating Quigley Matrix",
+            "Overconstraining Dirty Industry Calculations",
+            "Partitioning City Grid Singularities",
+            "Perturbing Matrices",
+            "Pixalating Nude Patch",
+            "Polishing Water Highlights",
+            "Populating Lot Templates",
+            "Preparing Sprites for Random Walks",
+            "Prioritizing Landmarks",
+            "Projecting Law Enforcement Pastry Intake",
+            "Realigning Alternate Time Frames",
+            "Reconfiguring User Mental Processes",
+            "Relaxing Splines",
+            "Removing Road Network Speed Bumps",
+            "Removing Texture Gradients",
+            "Removing Vehicle Avoidance Behavior",
+            "Resolving GUID Conflict",
+            "Reticulating Splines",
+            "Retracting Phong Shader",
+            "Retrieving from Back Store",
+            "Reverse Engineering Image Consultant",
+            "Routing Neural Network Infanstructure",
+            "Scattering Rhino Food Sources",
+            "Scrubbing Terrain",
+            "Searching for Llamas",
+            "Seeding Architecture Simulation Parameters",
+            "Sequencing Particles",
+            "Setting Advisor Moods",
+            "Setting Inner Deity Indicators",
+            "Setting Universal Physical Constants",
+            "Sonically Enhancing Occupant-Free Timber",
+            "Speculating Stock Market Indices",
+            "Splatting Transforms",
+            "Stratifying Ground Layers",
+            "Sub-Sampling Water Data",
+            "Synthesizing Gravity",
+            "Synthesizing Wavelets",
+            "Time-Compressing Simulator Clock",
+            "Unable to Reveal Current Activity",
+            "Weathering Buildings",
+            "Zeroing Crime Network",
+            "Reticulating Splines"
+    };
 
+    /**
+     * Retrieves the index of a random message in {@link #reticulating}.
+     * @return Integer. Returns a randomly generated index.
+     */
     private int getRandomInt() {
         Random randInt = new Random();
         return randInt.nextInt(reticulating.length);
     }
 
+    /**
+     * Retrieves a message from {@link #reticulating} using a randomly generated index from {@link #getRandomInt()}.
+     * @return String. Returns the message at the index provided by the randomizer.
+     */
     private String getSpline() {
         return reticulating[getRandomInt()];
     }
 
+    /**
+     * Retrieve a random message from {@link #reticulating}.
+     * @return String. Returns a random message.
+     */
     public String reticulate() {
         return getSpline();
     }
-- 
GitLab


From 1f1cd5012fdb21a2fe163cbbc4dacf5fc38cc7b3 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Sun, 2 May 2021 11:42:01 +0200
Subject: [PATCH 39/91] refactor(DI): Update javadocs and minor refactorings

---
 .../curseforgemodpack/CurseModpack.java       | 99 +++++++++++++++----
 1 file changed, 82 insertions(+), 17 deletions(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.java b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.java
index e5b4b16b1..8ec7af1cc 100644
--- a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.java
+++ b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.java
@@ -17,14 +17,34 @@
  *
  * The full license can be found at https:github.com/Griefed/ServerPackCreator/blob/main/LICENSE
  */
-
 package de.griefed.serverpackcreator.curseforgemodpack;
 
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 
 import java.util.List;
-//TODO: Write docs for class
+
+/**
+ * <strong>Table of methods</strong><br>
+ * {@link #getMinecraft()}<br>
+ * {@link #setMinecraft(List)}<br>
+ * {@link #getName()}<br>
+ * {@link #setName(String)}<br>
+ * {@link #getVersion()}<br>
+ * {@link #setVersion(String)}<br>
+ * {@link #getAuthor()}<br>
+ * {@link #setAuthor(String)}<br>
+ * {@link #getFiles()}<br>
+ * {@link #setFiles(List)}<br>
+ * {@link #toString()}<p>
+ * Retrieve information about a CurseForge Minecraft modpack by using {@link com.fasterxml.jackson.databind} JSON parsing.
+ * This class retrieves the name, version and author of a modpack.
+ */
 public class CurseModpack {
+    /**
+     * Ignore unknown values/object. We only want to gather specific information and disregard the rest. Setting this
+     * property allows us setup the class to only gather the information we want, so we don't have to worry about any
+     * additions to the source-data being made, which would otherwise cause an "Unknown property" exception.
+     */
     @JsonIgnoreProperties(ignoreUnknown = true)
     private List<CurseMinecraft> minecraft;
     private String name;
@@ -32,52 +52,97 @@ public class CurseModpack {
     private String author;
     private List<CurseFiles> files;
 
+    /**
+     * Getter for Minecraft related information using {@link CurseMinecraft}.
+     * @return List CurseMinecraft. Returns an instance of CurseMinecraft.class with information related to Minecraft.
+     */
     public List<CurseMinecraft> getMinecraft() {
         return minecraft;
     }
 
-    public void setMinecraft(List<CurseMinecraft> minecraft) {
-        this.minecraft = minecraft;
+    /**
+     * Setter for Minecraft related information using {@link CurseMinecraft}
+     * @param newMinecraft Receives an instance of the CurseMinecraft.class.
+     */
+    public void setMinecraft(List<CurseMinecraft> newMinecraft) {
+        this.minecraft = newMinecraft;
     }
 
+    /**
+     * Getter for the name of the CurseForge modpack.
+     * @return String. Returns the name of modpack acquired from CurseForge.
+     */
     public String getName() {
         return name;
     }
 
-    public void setName(String name) {
-        this.name = name;
+    /**
+     * Setter for the name of the CurseForge modpack.
+     * @param newName Receives the name of the CurseForge modpack.
+     */
+    public void setName(String newName) {
+        this.name = newName;
     }
 
+    /**
+     * Getter for the version of the CurseForge modpack.
+     * @return String. Returns the version of the modpack acquired from CurseForge.
+     */
     public String getVersion() {
         return version;
     }
 
-    public void setVersion(String version) {
-        this.version = version;
+    /**
+     * Setter for the version of the CurseForge modpack.
+     * @param newVersion Receives the version of the modpack acquired from CurseForge.
+     */
+    public void setVersion(String newVersion) {
+        this.version = newVersion;
     }
 
+    /**
+     * Getter for the author of the CurseForge modpack.
+     * @return String. Returns the author of the modpack acquired from CurseForge.
+     */
     public String getAuthor() {
         return author;
     }
 
+    /**
+     * Setter for the author of the CurseForge modpack.
+     * @param newAuthor Receives the author of the modpack acquired from CurseForge.
+     */
+    public void setAuthor(String newAuthor) {
+        this.author = newAuthor;
+    }
+
+    /**
+     * Getter for the files on which the CurseForge modpack depends by using {@link CurseFiles}.
+     * @return List CurseFiles. Returns an instance of CurseFiles.class with information related to the files included
+     * in the CurseForge modpack.
+     */
     public List<CurseFiles> getFiles() {
         return files;
     }
 
-    public void setFiles(List<CurseFiles> files) {
-        this.files = files;
+    /**
+     * Setter for the CurseForge modpack files on which it depends.
+     * @param newFiles Receives an instance of CurseFiles.class with information about the files on which the modpack depends.
+     */
+    public void setFiles(List<CurseFiles> newFiles) {
+        this.files = newFiles;
     }
 
+    /**
+     * String containing information about the CurseForge modpack. Included are {@link #getMinecraft()},
+     * {@link #getName()}, {@link #getVersion()}, {@link #getAuthor()}, {@link #getFiles()}.
+     * @return String. Returns String with information about the CurseForge modpack.
+     */
     @Override
     public String toString() {
         return String.format(
-                "**** Modpack details ****\n" +
-                        "Version & Modloader: %s\n" +
-                        "Name: %s\n" +
-                        "Version: %s\n" +
-                        "Author: %s\n" +
-                        "Files: %s",
-                minecraft, name, version, author, files
+                "Modpack details: Version & Modloader: %s Name: %s Version: %s Author: %s Files: %s",
+                getMinecraft(), getName(), getVersion(), getAuthor(), getFiles()
         );
     }
 }
\ No newline at end of file
-- 
GitLab


From a0e608f9bec7d4dcbc7940b7860f63421694e3e7 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Sun, 2 May 2021 11:52:41 +0200
Subject: [PATCH 40/91] refactor(DI): Update javadocs

---
 .../curseforgemodpack/CurseModLoaders.java    | 28 +++++++++++++++++--
 1 file changed, 26 insertions(+), 2 deletions(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.java b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.java
index fb06a07bc..eac9b41f5 100644
--- a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.java
+++ b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.java
@@ -17,23 +17,47 @@
  *
  * The full license can be found at https:github.com/Griefed/ServerPackCreator/blob/main/LICENSE
  */
-
 package de.griefed.serverpackcreator.curseforgemodpack;
 
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-//TODO: Write docs for class
+
+/**
+ *
+ */
 public class CurseModLoaders {
+    /**
+     * Ignore unknown values/object. We only want to gather specific information and disregard the rest. Setting this
+     * property allows us setup the class to only gather the information we want, so we don't have to worry about any
+     * additions to the source-data being made, which would otherwise cause an "Unknown property" exception.
+     */
     @JsonIgnoreProperties(ignoreUnknown = true)
     private String id;
 
+    /**
+     * Getter for the modloader and modloader version used by the CurseForge modpack. It's a single string in the
+     * manifest.json which contains the modloader and the version of said modloader, for example <code>"id": "forge-36.1.4"</code>
+     * @return String. Returns the id of the modpack acquired from CurseForge containing information about the modloader
+     * and the version of said modloader.
+     */
     public String getId() {
         return id;
     }
 
+    /**
+     * Setter for the modloader and modloader version used by the CurseForge modpack. It's a single string in the
+     * manifest.json which contains the modloader and the version of said modloader, for example <code>"id": "forge-36.1.4"</code>
+     * @param id Receives the id of the CurseForge modpack containing information about the modloader
+     * and the version of said modloader.
+     */
     public void setId(String id) {
         this.id = id;
     }
 
+    /**
+     * String containing information about the CurseForge modpack's used modloader and the modloader version.
+     * @return String. Returns the String with information about the modlaoder and modloader version used by the
+     * CurseForge modpack.
+     */
     @Override
     public String toString() {
         return id;
-- 
GitLab


From 5f820e15b12fdd269b9f8e0e240fc53ab86ad571 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Sun, 2 May 2021 11:52:52 +0200
Subject: [PATCH 41/91] refactor(DI): Update javadocs

---
 .../serverpackcreator/curseforgemodpack/CurseModLoaders.java    | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.java b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.java
index eac9b41f5..02601b95d 100644
--- a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.java
+++ b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.java
@@ -55,7 +55,7 @@ public class CurseModLoaders {
 
     /**
      * String containing information about the CurseForge modpack's used modloader and the modloader version.
-     * @return String. Returns the String with information about the modlaoder and modloader version used by the
+     * @return String. Returns the String with information about the modloader and modloader version used by the
      * CurseForge modpack.
      */
     @Override
-- 
GitLab


From eb891ff03188b79ac34b39798540110c4b026c75 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Sun, 2 May 2021 12:11:56 +0200
Subject: [PATCH 42/91] refactor(DI): Update javadocs

---
 .../curseforgemodpack/CurseFiles.java         | 39 +++++++++++++++++-
 .../curseforgemodpack/CurseMinecraft.java     | 41 ++++++++++++++++++-
 .../curseforgemodpack/CurseModLoaders.java    |  7 +++-
 3 files changed, 82 insertions(+), 5 deletions(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.java b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.java
index 6f409d7f4..ec7645b7a 100644
--- a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.java
+++ b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.java
@@ -17,32 +17,67 @@
  *
  * The full license can be found at https:github.com/Griefed/ServerPackCreator/blob/main/LICENSE
  */
-
 package de.griefed.serverpackcreator.curseforgemodpack;
 
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-//TODO: Write docs for class
+/**
+ * <strong>Table of methods</strong><br>
+ * {@link #getProjectID()}<br>
+ * {@link #setProjectID(String)}<br>
+ * {@link #getFileID()}<br>
+ * {@link #setFileID(String)}<br>
+ * {@link #toString()}<p>
+ * Retrieves information about a CurseForge Minecraft modpack by using {@link com.fasterxml.jackson.databind} JSON parsing.
+ * This class retrieves the projectIDs and fileIDs a modpack acquired from CurseForge depends on. These can be mods,
+ * resource packs, worlds etc. etc.
+ */
 public class CurseFiles {
+    /**
+     * Ignore unknown values/object. We only want to gather specific information and disregard the rest. Setting this
+     * property allows us setup the class to only gather the information we want, so we don't have to worry about any
+     * additions to the source-data being made, which would otherwise cause an "Unknown property" exception.
+     */
     @JsonIgnoreProperties(ignoreUnknown = true)
     private String projectID;
     private String fileID;
 
+    /**
+     * Getter for a projectID of a dependency in the CurseForge modpack.
+     * @return String. Returns a projectID of a dependency in the modpack acquired from CurseForge.
+     */
     public String getProjectID() {
         return projectID;
     }
 
+    /**
+     * Setter for a projectID of a dependency in the CurseForge modpack.
+     * @param projectID Receives the projectID of a dependency in the modpack acquired from CurseForge.
+     */
     public void setProjectID(String projectID) {
         this.projectID = projectID;
     }
 
+    /**
+     * Getter for a fileID of a dependency in the CurseForge modpack.
+     * @return String. Returns a fileID of a dependency in the modpack acquired from CurseForge.
+     */
     public String getFileID() {
         return fileID;
     }
 
+    /**
+     * Setter for a fileID of a dependency in the CurseForge modpack.
+     * @param fileID Receives the fileID of a dependency in the modpack acquired from CurseForge.
+     */
     public void setFileID(String fileID) {
         this.fileID = fileID;
     }
 
+    /**
+     * A comma separated combination of a dependency projectID and fileID of a CurseForge modpack.
+     * @return String. Returns a comma separated projectID,fileID combination of a dependency of a modpack acquired from
+     * CurseForge.
+     */
     @Override
     public String toString() {
         return String.format("%s,%s",projectID,fileID);
diff --git a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.java b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.java
index db63bc4f3..18519df5f 100644
--- a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.java
+++ b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.java
@@ -17,34 +17,71 @@
  *
  * The full license can be found at https:github.com/Griefed/ServerPackCreator/blob/main/LICENSE
  */
-
 package de.griefed.serverpackcreator.curseforgemodpack;
 
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 
 import java.util.List;
-//TODO: Write docs for class
+
+/**
+ * <strong>Table of methods</strong><br>
+ * {@link #getVersion()}<br>
+ * {@link #setVersion(String)}<br>
+ * {@link #getModLoaders()}<br>
+ * {@link #setModLoaders(List)}<br>
+ * {@link #toString()}<p>
+ * Retrieves information about a CurseForge Minecraft modpack by using {@link com.fasterxml.jackson.databind} JSON parsing.
+ * This class retrieves the Minecraft version of a modpack.
+ */
 public class CurseMinecraft {
+    /**
+     * Ignore unknown values/object. We only want to gather specific information and disregard the rest. Setting this
+     * property allows us setup the class to only gather the information we want, so we don't have to worry about any
+     * additions to the source-data being made, which would otherwise cause an "Unknown property" exception.
+     */
     @JsonIgnoreProperties(ignoreUnknown = true)
     private String version;
     private List<CurseModLoaders> modLoaders;
 
+    /**
+     * Getter for the Minecraft version used by the CurseForge modpack.
+     * @return String. Returns the Minecraft version used by the modpack acquired from CurseForge.
+     */
     public String getVersion() {
         return version;
     }
 
+    /**
+     * Setter for the Minecraft version used by the CurseForge modpack.
+     * @param version Receives the Minecraft version of the CurseForge modpack.
+     */
     public void setVersion(String version) {
         this.version = version;
     }
 
+    /**
+     * Getter for modloader related information using {@link CurseModLoaders}.
+     * @return List CurseModLoaders. Returns an isntance of CurseModLoaders.class with information about the modlaoder
+     * and modloader version used by the CurseForge modpack.
+     */
     public List<CurseModLoaders> getModLoaders() {
         return modLoaders;
     }
 
+    /**
+     * Setter for modloader related information using {@link CurseModLoaders}.
+     * @param modLoaders Receives an instance of CurseModLoaders.class.
+     */
     public void setModLoaders(List<CurseModLoaders> modLoaders) {
         this.modLoaders = modLoaders;
     }
 
+    /**
+     * String containing information about the Minecraft version, modloader and modloader version used by the CurseForge
+     * modpack.
+     * @return String. Returns a String with the Minecraft version, used modloader and modloader version of a modpack
+     * acquired from CurseForge.
+     */
     @Override
     public String toString() {
         return String.format("%s,%s",version,modLoaders);
diff --git a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.java b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.java
index 02601b95d..d64bbcf68 100644
--- a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.java
+++ b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.java
@@ -22,7 +22,12 @@ package de.griefed.serverpackcreator.curseforgemodpack;
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 
 /**
- *
+ * <strong>Table of methods</strong><br>
+ * {@link #getId()}<br>
+ * {@link #setId(String)}<br>
+ * {@link #toString()}<p>
+ * Retrieves information about a CurseForge Minecraft modpack by using {@link com.fasterxml.jackson.databind} JSON parsing.
+ * This class retrieves the modloader and modloader version of a modpack.
  */
 public class CurseModLoaders {
     /**
-- 
GitLab


From e5703e4c3d090d65ee2ade1fa0683708c5f57cff Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Sun, 2 May 2021 13:20:27 +0200
Subject: [PATCH 43/91] refactor(DI): Update javadocs

---
 .../curseforgemodpack/CurseCreateModpack.java | 157 ++++++++++++++----
 1 file changed, 126 insertions(+), 31 deletions(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.java b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.java
index d1815ed51..1a8303bcc 100644
--- a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.java
+++ b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.java
@@ -17,7 +17,6 @@
  *
  * The full license can be found at https:github.com/Griefed/ServerPackCreator/blob/main/LICENSE
  */
-//TODO: Write table of contents
 package de.griefed.serverpackcreator.curseforgemodpack;
 
 import com.fasterxml.jackson.databind.DeserializationFeature;
@@ -41,7 +40,36 @@ import java.util.zip.ZipEntry;
 import java.util.zip.ZipInputStream;
 
 import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
-//TODO: Write docs for class
+
+/**
+ * <strong>Table of methods</strong><br>
+ * {@link #CurseCreateModpack(LocalizationManager)}<br>
+ * {@link #setModloaderCase(String)}<br>
+ * {@link #curseForgeModpack(String, Integer, Integer)}<br>
+ * {@link #initializeModpack(String, Integer, Integer)}<br>
+ * {@link #downloadMods(String)}<br>
+ * {@link #copyOverride(String)}<br>
+ * {@link #checkCurseForgeDir(String)}<br>
+ * {@link #unzipArchive(String, String)}<br>
+ * {@link #newFile(File, ZipEntry)}<br>
+ * {@link #cleanupEnvironment(String)}<p>
+ * Download a modpack from CurseForge and create it by unzipping the ZIP-archive, copy all folders and files from the
+ * override directory to the parent directory, download all mods in said modpack, and delete no longer needed files.
+ * Modpacks are create in a ProjectName/FileDisplayName structure. Before a modpack is created, the FileDisplayName folder
+ * is checked for existence and deleted should it already exist. The reason for this is the order in which ServerPackCreator
+ * checks and uses the configuration file.<p>
+ * First: the configuration is checked for a valid CurseForge projectID,fileID combination.<br>
+ * Second: The folder structure is checked for an already existing folder with FileDisplayName and if it exists it is deleted.<br>
+ * Third: The modpack is created and all mods are downloaded etc., files are copied, etc.<br>
+ * Fourth: Information about the modpack is acquired from the modpack's manifest.json and written to a new configuration file
+ * with said information. The configuration for modpackDir, which previously contained a projectID,fileID is replaced
+ * with the path to the new modpack at ProjectName/FileDisplayName.<br>
+ * If modpackDir holds a projectID,fileID combination we have to assume the modpack has yet to be created, thus
+ * we need to make sure the target directory is empty in order to create a clean and fresh modpack.<br>
+ * If modpackDir does not hold a projectID,fileID we have to assume it is a path pointing at a directory which already
+ * contains a modpack we can work with and create a server pack from. Thus, we clean up the environment if modpackDir holds
+ * a projectID,fileID.
+ */
 public class CurseCreateModpack {
     private static final Logger appLogger = LogManager.getLogger(CurseCreateModpack.class);
     private String projectName;
@@ -50,6 +78,13 @@ public class CurseCreateModpack {
 
     private LocalizationManager localizationManager;
 
+    /**
+     * <strong>Constructor</strong><p>
+     * Used for Dependency Injection.<p>
+     * Receives an instance of {@link LocalizationManager} or creates one if the received
+     * one is null. Required for use of localization.
+     * @param injectedLocalizationManager Instance of {@link LocalizationManager} required for localized log messages.
+     */
     public CurseCreateModpack(LocalizationManager injectedLocalizationManager) {
         if (injectedLocalizationManager == null) {
             this.localizationManager = new LocalizationManager();
@@ -58,9 +93,12 @@ public class CurseCreateModpack {
         }
     }
 
-    /** Standardize the specified modloader.
-     * @param modloader String. If any case of Forge or Fabric was specified, return "Forge" or "Fabric", so users can enter "forge" or "fabric" or any combination of upper- and lowercase letters..
-     * @return String. Returns a standardized String of the specified modloader.
+    /**
+     * Ensures the modloader is normalized to first letter upper case and rest lower case. Basically allows the user to
+     * input Forge or Fabric in any combination of upper- and lowercase and ServerPackCreator will still be able to
+     * work with the users input.
+     * @param modloader String. The String to check for case-insensitive cases of either Forge or Fabric.
+     * @return String. Returns a normalized String of the specified modloader.
      */
     String setModloaderCase(String modloader) {
         String returnLoader = null;
@@ -72,11 +110,20 @@ public class CurseCreateModpack {
         return returnLoader;
     }
 
-    /** Gets the names of the specified project and file and makes calls to methods which create the modpack so we can then create a server pack from it.
-     * @param modpackDir String. Combination of project name and file name. Created during download procedure and later added to config file.
-     * @param projectID Integer. The ID of the project. Used to gather information and to download the modpack.
-     * @param fileID Integer. The ID of the file. Used to gather information and to download the modpack.
-     * @return Boolean. Returns true if the modpack was freshly created.
+    /**
+     * Acquires the names of the CurseForge project and file. Should no filename exist, we will use the fileDiskName as
+     * fallback to ensure we always have a folder-structure of projectName/FileDisplayName at hand in which the modpack
+     * will be created. Calls<br>
+     * {@link CurseAPI} and various methods of it in order to acquire information about the modpack.<br>
+     * {@link #checkCurseForgeDir(String)}<br>
+     * {@link #initializeModpack(String, Integer, Integer)}
+     * @param modpackDir String. Combination of project name and file name. Created during download procedure
+     *                  and later replaces the modpackDir variable in the configuration file.
+     * @param projectID Integer. The ID of the project. Used to gather information about the CurseForge project and to
+     *                 download the modpack.
+     * @param fileID Integer. The ID of the file. Used to gather information about the CurseForge file and to download
+     *              the modpack.
+     * @return Boolean. Returns true if the modpack was successfully created.
      */
     @SuppressWarnings({"OptionalGetWithoutIsPresent", "ConstantConditions"})
     public boolean curseForgeModpack(String modpackDir, Integer projectID, Integer fileID) {
@@ -106,8 +153,16 @@ public class CurseCreateModpack {
         return modpackCreated;
     }
 
-    /** Downloads the specified file of the specified project to a directory which is the combination of the project name and file display name. Unzips the downloaded modpack archive, gathers and displays information about the specified project/file and makes calls to methods which further setup the modpack.
-     * @param modpackDir String. Combination of project name and file name. Created during download procedure and later added to config file.
+    /**
+     * Downloads the specified file of the specified project to a directory which is the combination of the project
+     * name and file display name. Unzips the downloaded modpack ZIP-archive, gathers and displays information about the
+     * specified project/file and makes calls to methods which further setup the modpack. Calls<br>
+     * {@link CurseAPI} and various methods of it to create the modpack.<br>
+     * {@link #unzipArchive(String, String)}<br>
+     * {@link #copyOverride(String)}<br>
+     * {@link #downloadMods(String)}<br>
+     * @param modpackDir String. Combination of project name and file name. Created during download procedure and later
+     *                  replaces the modpackDir variable in the configuration file.
      * @param projectID Integer. The ID of the project. Used to gather information and to download the modpack.
      * @param fileID Integer. The ID of the file. Used to gather information and to download the modpack.
      */
@@ -158,8 +213,15 @@ public class CurseCreateModpack {
         downloadMods(modpackDir);
     }
 
-    /** Downloads all mods specified in the modpack's manifest.json file. If a download fails, one retry will be made, if said retry fails, too, then the download url will be sent to the log.
-     * @param modpackDir String. All mods are downloaded to a child directory 'mods'
+    /**
+     * Downloads all mods specified in the modpack's manifest.json file. If a download of a mod fails, it will be
+     * retried once before treating it as "currently unavailable" and adding the URL to the failed download
+     * to a list which will be printed to the console and logs after the method has finished. The user will need to
+     * download these failed mods themself as ServerPackCreator couldn't, for whatever reason, successfully download them.
+     * If the acquisition of the download URL fails as well....well we're out of luck, then. The user will have to figure
+     * this out on their own. Possible reasons for a failed download and failed URL acquisition might be that the file
+     * was taken down, no longer exists, CurseForge is unavailable etc. etc. There's nothing we can do about that.
+     * @param modpackDir String. All mods are downloaded to the child-directory "mods" inside the modpack directory.
      */
     @SuppressWarnings({"OptionalGetWithoutIsPresent", "BusyWait"})
     private void downloadMods(String modpackDir) {
@@ -190,25 +252,42 @@ public class CurseCreateModpack {
                 fileID = Integer.parseInt(mods[1]);
 
                 try {
+
                     modName = CurseAPI.project(modID).get().name();
                     modFileName = Objects.requireNonNull(CurseAPI.project(modID).get().files().fileWithID(fileID)).nameOnDisk();
+
                 } catch (CurseException cex) {
                     appLogger.error(localizationManager.getLocalizedString("createmodpack.log.error.downloadmods.curseforgeinfo"), cex);
                 }
+
                 try {
+
                     appLogger.info(String.format(localizationManager.getLocalizedString("createmodpack.log.info.downloadmods.specificmod"), i+1, curseModpack.getFiles().size(), modName, modFileName));
+                    //Download mod
                     CurseAPI.downloadFileToDirectory(modID, fileID, Paths.get(String.format("%s/mods", modpackDir)));
+
                     try { Thread.sleep(1000); }
                     catch (InterruptedException iex) { appLogger.debug(localizationManager.getLocalizedString("createmodpack.log.debug.downloadmods.sleep"), iex); }
-                } catch (CurseException cex) { appLogger.error(String.format(localizationManager.getLocalizedString("createmodpack.log.error.downloadmods.errordownload"), modName, modID, modFileName, fileID));
+
+                } catch (CurseException cex) {
+                    appLogger.error(String.format(localizationManager.getLocalizedString("createmodpack.log.error.downloadmods.errordownload"), modName, modID, modFileName, fileID));
+
                     try {
+
                         appLogger.info(String.format(localizationManager.getLocalizedString("createmodpack.log.info.downloadmods.tryagain"), modName, modID, modFileName, fileID));
+                        //Retry download if previous attempt failed
                         CurseAPI.downloadFileToDirectory(modID, fileID, Paths.get(String.format("%s/mods", modpackDir)));
+
                     } catch (CurseException cex2) {
+
                         appLogger.error(String.format(localizationManager.getLocalizedString("createmodpack.log.error.downloadmods.retryfail"), modName, modID, modFileName, fileID));
+
                         try {
+                            //Add URL of failed download to list
                             failedDownloads.add(String.format("Mod: %s, ID: %d. File: %s, ID: %d, URL: %s", modName, modID, modFileName, fileID, CurseAPI.fileDownloadURL(modID, fileID)));
+
                         } catch (CurseException cex3) {
+
                             appLogger.error(localizationManager.getLocalizedString("createmodpack.log.error.downloadmods.urlfail"));
                         }
                     }
@@ -218,14 +297,17 @@ public class CurseCreateModpack {
             appLogger.error(localizationManager.getLocalizedString("createmodpack.log.error.downloadmods.fail"));
         }
         if (failedDownloads.size() != 0) {
+            //Print the URLs of failed downloads, if there are any
             for (int i = 0; i <= failedDownloads.size(); i++) {
                 appLogger.error(String.format(localizationManager.getLocalizedString("createmodpack.log.error.downloadmods.urllist"), failedDownloads.get(i)));
             }
         }
     }
 
-    /** Copies all folders and the files therein to the parent modpack directory.
-     * @param modpackDir String. The overrides directory resides in this directory. All folders and files within overrides are copied here.
+    /**
+     * Recursively copy all folders and files from the override directory to the parent directory, our modpack directory.
+     * @param modpackDir String. The overrides directory resides in this directory. All folders and files within overrides
+     *                  are copied to the parent directory, the modpack directory.
      */
     private void copyOverride(String modpackDir) {
         appLogger.info(localizationManager.getLocalizedString("createmodpack.log.info.copyoverrides.info"));
@@ -247,9 +329,14 @@ public class CurseCreateModpack {
         }
     }
 
-    /** Check whether the folder for the specified CurseForge projectID/fileID exists.
+    /**
+     * Check whether the folder for the specified CurseForge projectID/fileID exists and if it does exist, delete it
+     * recursively to ensure we are working with a clean environment when creating a modpack from CurseForge.<br>
+     * Calls {@link #cleanupEnvironment(String)} to ensure a clean environment when we create a new modpack from CurseForge.
      * @param modpackDir String. The path to the modpack directory, a combination of project name and file display name.
-     * @return Boolean. Returns true if the directory exists. False if not.
+     * @return Boolean. Returns true if something went wrong during the cleanup of the modpack directory. If the cleanup
+     * procedure finished successfully and we have a clean environment, false is returned. Returns false if the modpack
+     * directory could not be found, indicating a clean environment.
      */
     private boolean checkCurseForgeDir(String modpackDir) {
         boolean isModpackPresent = false;
@@ -262,10 +349,12 @@ public class CurseCreateModpack {
         return isModpackPresent;
     }
 
-    /** With help from: https://www.baeldung.com/java-compress-and-uncompress
-     * Unzips the downloaded modpack archive to a directory.
-     * @param zipFile String. The name of the zipfile to extract.
-     * @param modpackDir The directory where the archive resides in and will be extracted to.
+    /**
+     * With help from <a href=https://www.baeldung.com/java-compress-and-uncompress>Baeldung Java Tutorials</a>.<br>
+     * Unzips the downloaded modpack ZIP-archive to the specified directory. Calls {@link #newFile(File, ZipEntry)} as
+     * a helper method.
+     * @param zipFile String. The path to the ZIP-archive which we want to unzip.
+     * @param modpackDir The directory into which the ZIP-archive will be unzipped into.
      */
     private void unzipArchive(String zipFile, String modpackDir) {
         appLogger.info(localizationManager.getLocalizedString("createmodpack.log.info.unziparchive"));
@@ -301,10 +390,15 @@ public class CurseCreateModpack {
         }
     }
 
-    /** Helper-Method for unzipArchive. With help from: https://www.baeldung.com/java-compress-and-uncompress
-     * @param destinationDir Check whether the file is outside of the directory it is supposed to be in.
-     * @param zipEntry Zip entry with which to check for location.
-     * @return Returns the correct destination for the new file.
+    /**
+     * With help from <a href=https://www.baeldung.com/java-compress-and-uncompress>Baeldung Java Tutorials</a>.<br>
+     * Helper-Method for unzipArchive. This method guards us against writing any file to the file system <em>outside</em>
+     * of the target folder, thus ensuring all files are successfully unzipped into the desired target directory.
+     * @param destinationDir The directory into which a file from the ZIP-archive is to be unzipped.
+     * @param zipEntry File in the ZIP-archive which is to be unzipped from the ZIP-archive into the desired target
+     *                 directory.
+     * @return File. Returns a file from the ZIP-archive with the path pointing to the desired directory, ensuring proper
+     * unzipping of the ZIP-archive.
      */
     private File newFile(File destinationDir, ZipEntry zipEntry) {
         File destFile = new File(destinationDir, zipEntry.getName());
@@ -328,10 +422,11 @@ public class CurseCreateModpack {
         return destFile;
     }
 
-    /** Deletes all files, directories and ZIP-archives of previously generated server packs to ensure newly generated
-     * server pack is as clean as possible.
-     * @param modpackDir String. The server_pack directory and ZIP-archive will be deleted inside the modpack directory.
-     * @return Boolean. Returns false if every file and folder was successfully deleted.
+    /**
+     * Deletes any and all folder and files, recursively, inside the target directory, thus ensuring we are working in a
+     * clean environment when creating a new modpack from CurseForge.
+     * @param modpackDir String. The directory we want to delete.
+     * @return Boolean. Returns false if every file and folder was, recursively and successfully, deleted.
      */
     private boolean cleanupEnvironment(String modpackDir) {
         boolean cleanedUp = false;
-- 
GitLab


From 87cef199feab89805ac00b06a8d585b002e118df Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Sun, 2 May 2021 13:23:05 +0200
Subject: [PATCH 44/91] refactor(DI): Update javadocs

---
 .../serverpackcreator/Configuration.html      | 935 ++++++++++++++----
 .../serverpackcreator/CreateServerPack.html   | 357 +++++--
 .../griefed/serverpackcreator/FilesSetup.html | 168 +++-
 docs/de/griefed/serverpackcreator/Main.html   |  38 +-
 .../curseforgemodpack/CurseCreateModpack.html | 184 +++-
 .../curseforgemodpack/CurseFiles.html         |  60 +-
 .../curseforgemodpack/CurseMinecraft.html     |  66 +-
 .../curseforgemodpack/CurseModLoaders.html    |  47 +-
 .../curseforgemodpack/CurseModpack.html       | 141 ++-
 .../curseforgemodpack/CurseSplines.html       |  44 +-
 .../curseforgemodpack/package-summary.html    |  69 +-
 .../serverpackcreator/gui/AboutTab.html       | 154 ++-
 .../serverpackcreator/gui/CreateGui.html      | 131 ++-
 .../gui/CreateServerPackTab.html              | 561 ++++++++++-
 .../gui/ModloaderInstallerLogTab.html         |  88 +-
 .../gui/ServerPackCreatorLogTab.html          |  88 +-
 .../gui/package-summary.html                  |  27 +-
 .../i18n/IncorrectLanguageException.html      |   6 +
 .../i18n/LocalizationManager.html             | 123 ++-
 .../i18n/package-summary.html                 |  22 +-
 .../serverpackcreator/package-summary.html    |  28 +-
 docs/index-all.html                           | 837 ++++++++++++----
 docs/serialized-form.html                     | 310 +++++-
 23 files changed, 3805 insertions(+), 679 deletions(-)

diff --git a/docs/de/griefed/serverpackcreator/Configuration.html b/docs/de/griefed/serverpackcreator/Configuration.html
index 7850ce453..52d24ebeb 100644
--- a/docs/de/griefed/serverpackcreator/Configuration.html
+++ b/docs/de/griefed/serverpackcreator/Configuration.html
@@ -17,7 +17,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10,"i38":10,"i39":10,"i40":10,"i41":10,"i42":10,"i43":10,"i44":10,"i45":10,"i46":10,"i47":10,"i48":10,"i49":10,"i50":10,"i51":10,"i52":10,"i53":10,"i54":10,"i55":10,"i56":10,"i57":10,"i58":10,"i59":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":10,"i38":10,"i39":10,"i40":10,"i41":10,"i42":10,"i43":10,"i44":10,"i45":10,"i46":10,"i47":10,"i48":10,"i49":10,"i50":10,"i51":10,"i52":10,"i53":10,"i54":10,"i55":10,"i56":10,"i57":10,"i58":10,"i59":10,"i60":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -109,6 +109,73 @@ var activeTableTab = "activeTableTab";
 <br>
 <pre>public class <span class="typeNameLabel">Configuration</span>
 extends java.lang.Object</pre>
+<div class="block"><strong>Table of methods</strong><p>
+ 1. <a href="../../../de/griefed/serverpackcreator/Configuration.html#Configuration-de.griefed.serverpackcreator.i18n.LocalizationManager-de.griefed.serverpackcreator.curseforgemodpack.CurseCreateModpack-"><code>Configuration(LocalizationManager, CurseCreateModpack)</code></a><br>
+ 2. <a href="../../../de/griefed/serverpackcreator/Configuration.html#getOldConfigFile--"><code>getOldConfigFile()</code></a><br>
+ 3. <a href="../../../de/griefed/serverpackcreator/Configuration.html#getConfigFile--"><code>getConfigFile()</code></a><br>
+ 4. <a href="../../../de/griefed/serverpackcreator/Configuration.html#getMinecraftManifestUrl--"><code>getMinecraftManifestUrl()</code></a><br>
+ 5. <a href="../../../de/griefed/serverpackcreator/Configuration.html#getForgeManifestUrl--"><code>getForgeManifestUrl()</code></a><br>
+ 6. <a href="../../../de/griefed/serverpackcreator/Configuration.html#getFabricManifestUrl--"><code>getFabricManifestUrl()</code></a><br>
+ 7. <a href="../../../de/griefed/serverpackcreator/Configuration.html#getConfig--"><code>getConfig()</code></a><br>
+ 8. <a href="../../../de/griefed/serverpackcreator/Configuration.html#setConfig-com.typesafe.config.Config-"><code>setConfig(Config)</code></a><br>
+ 9. <a href="../../../de/griefed/serverpackcreator/Configuration.html#getFallbackModsList--"><code>getFallbackModsList()</code></a><br>
+ 10.<a href="../../../de/griefed/serverpackcreator/Configuration.html#getClientMods--"><code>getClientMods()</code></a><br>
+ 11.<a href="../../../de/griefed/serverpackcreator/Configuration.html#setClientMods-java.util.List-"><code>setClientMods(List)</code></a><br>
+ 12.<a href="../../../de/griefed/serverpackcreator/Configuration.html#getCopyDirs--"><code>getCopyDirs()</code></a><br>
+ 13.<a href="../../../de/griefed/serverpackcreator/Configuration.html#setCopyDirs-java.util.List-"><code>setCopyDirs(List)</code></a><br>
+ 14.<a href="../../../de/griefed/serverpackcreator/Configuration.html#getModpackDir--"><code>getModpackDir()</code></a><br>
+ 15.<a href="../../../de/griefed/serverpackcreator/Configuration.html#setModpackDir-java.lang.String-"><code>setModpackDir(String)</code></a><br>
+ 16.<a href="../../../de/griefed/serverpackcreator/Configuration.html#getJavaPath--"><code>getJavaPath()</code></a><br>
+ 17.<a href="../../../de/griefed/serverpackcreator/Configuration.html#setJavaPath-java.lang.String-"><code>setJavaPath(String)</code></a><br>
+ 18.<a href="../../../de/griefed/serverpackcreator/Configuration.html#getMinecraftVersion--"><code>getMinecraftVersion()</code></a><br>
+ 19.<a href="../../../de/griefed/serverpackcreator/Configuration.html#setMinecraftVersion-java.lang.String-"><code>setMinecraftVersion(String)</code></a><br>
+ 20.<a href="../../../de/griefed/serverpackcreator/Configuration.html#getModLoader--"><code>getModLoader()</code></a><br>
+ 21.<a href="../../../de/griefed/serverpackcreator/Configuration.html#setModLoader-java.lang.String-"><code>setModLoader(String)</code></a><br>
+ 22.<a href="../../../de/griefed/serverpackcreator/Configuration.html#getModLoaderVersion--"><code>getModLoaderVersion()</code></a><br>
+ 23.<a href="../../../de/griefed/serverpackcreator/Configuration.html#setModLoaderVersion-java.lang.String-"><code>setModLoaderVersion(String)</code></a><br>
+ 24.<a href="../../../de/griefed/serverpackcreator/Configuration.html#getIncludeServerInstallation--"><code>getIncludeServerInstallation()</code></a><br>
+ 25.<a href="../../../de/griefed/serverpackcreator/Configuration.html#setIncludeServerInstallation-boolean-"><code>setIncludeServerInstallation(boolean)</code></a><br>
+ 26.<a href="../../../de/griefed/serverpackcreator/Configuration.html#getIncludeServerIcon--"><code>getIncludeServerIcon()</code></a><br>
+ 27.<a href="../../../de/griefed/serverpackcreator/Configuration.html#setIncludeServerIcon-boolean-"><code>setIncludeServerIcon(boolean)</code></a><br>
+ 28.<a href="../../../de/griefed/serverpackcreator/Configuration.html#getIncludeServerProperties--"><code>getIncludeServerProperties()</code></a><br>
+ 29.<a href="../../../de/griefed/serverpackcreator/Configuration.html#setIncludeServerProperties-boolean-"><code>setIncludeServerProperties(boolean)</code></a><br>
+ 30.<a href="../../../de/griefed/serverpackcreator/Configuration.html#getIncludeStartScripts--"><code>getIncludeStartScripts()</code></a><br>
+ 31.<a href="../../../de/griefed/serverpackcreator/Configuration.html#setIncludeStartScripts-boolean-"><code>setIncludeStartScripts(boolean)</code></a><br>
+ 32.<a href="../../../de/griefed/serverpackcreator/Configuration.html#getIncludeZipCreation--"><code>getIncludeZipCreation()</code></a><br>
+ 33.<a href="../../../de/griefed/serverpackcreator/Configuration.html#setIncludeZipCreation-boolean-"><code>setIncludeZipCreation(boolean)</code></a><br>
+ 34.<a href="../../../de/griefed/serverpackcreator/Configuration.html#getProjectID--"><code>getProjectID()</code></a><br>
+ 35.<a href="../../../de/griefed/serverpackcreator/Configuration.html#setProjectID-int-"><code>setProjectID(int)</code></a><br>
+ 36.<a href="../../../de/griefed/serverpackcreator/Configuration.html#getProjectFileID--"><code>getProjectFileID()</code></a><br>
+ 37.<a href="../../../de/griefed/serverpackcreator/Configuration.html#setProjectFileID-int-"><code>setProjectFileID(int)</code></a><br>
+ 38.<a href="../../../de/griefed/serverpackcreator/Configuration.html#checkConfigFile-java.io.File-boolean-"><code>checkConfigFile(File, boolean)</code></a><br>
+ 39.<a href="../../../de/griefed/serverpackcreator/Configuration.html#isDir-java.lang.String-"><code>isDir(String)</code></a><br>
+ 40.<a href="../../../de/griefed/serverpackcreator/Configuration.html#isCurse--"><code>isCurse()</code></a><br>
+ 41.<a href="../../../de/griefed/serverpackcreator/Configuration.html#containsFabric-de.griefed.serverpackcreator.curseforgemodpack.CurseModpack-"><code>containsFabric(CurseModpack)</code></a><br>
+ 42.<a href="../../../de/griefed/serverpackcreator/Configuration.html#suggestCopyDirs-java.lang.String-"><code>suggestCopyDirs(String)</code></a><br>
+ 43.<a href="../../../de/griefed/serverpackcreator/Configuration.html#checkCurseForge-java.lang.String-"><code>checkCurseForge(String)</code></a><br>
+ 44.<a href="../../../de/griefed/serverpackcreator/Configuration.html#convertToBoolean-java.lang.String-"><code>convertToBoolean(String)</code></a><br>
+ 45.<a href="../../../de/griefed/serverpackcreator/Configuration.html#printConfig-java.lang.String-java.util.List-java.util.List-boolean-java.lang.String-java.lang.String-java.lang.String-java.lang.String-boolean-boolean-boolean-boolean-"><code>printConfig(String, List, List, boolean, String, String, String, String, boolean, boolean, boolean, boolean)</code></a><br>
+ 46.<a href="../../../de/griefed/serverpackcreator/Configuration.html#checkModpackDir-java.lang.String-"><code>checkModpackDir(String)</code></a><br>
+ 47.<a href="../../../de/griefed/serverpackcreator/Configuration.html#checkCopyDirs-java.util.List-java.lang.String-"><code>checkCopyDirs(List, String)</code></a><br>
+ 48.<a href="../../../de/griefed/serverpackcreator/Configuration.html#getJavaPathFromSystem-java.lang.String-"><code>getJavaPathFromSystem(String)</code></a><br>
+ 49.<a href="../../../de/griefed/serverpackcreator/Configuration.html#checkJavaPath-java.lang.String-"><code>checkJavaPath(String)</code></a><br>
+ 50.<a href="../../../de/griefed/serverpackcreator/Configuration.html#checkModloader-java.lang.String-"><code>checkModloader(String)</code></a><br>
+ 51.<a href="../../../de/griefed/serverpackcreator/Configuration.html#setModLoaderCase-java.lang.String-"><code>setModLoaderCase(String)</code></a><br>
+ 52.<a href="../../../de/griefed/serverpackcreator/Configuration.html#checkModloaderVersion-java.lang.String-java.lang.String-"><code>checkModloaderVersion(String, String)</code></a><br>
+ 53.<a href="../../../de/griefed/serverpackcreator/Configuration.html#isMinecraftVersionCorrect-java.lang.String-"><code>isMinecraftVersionCorrect(String)</code></a><br>
+ 54.<a href="../../../de/griefed/serverpackcreator/Configuration.html#isFabricVersionCorrect-java.lang.String-"><code>isFabricVersionCorrect(String)</code></a><br>
+ 55.<a href="../../../de/griefed/serverpackcreator/Configuration.html#isForgeVersionCorrect-java.lang.String-"><code>isForgeVersionCorrect(String)</code></a><br>
+ 56.<a href="../../../de/griefed/serverpackcreator/Configuration.html#latestFabricLoader-java.lang.String-"><code>latestFabricLoader(String)</code></a><br>
+ 57.<a href="../../../de/griefed/serverpackcreator/Configuration.html#createConfigurationFile--"><code>createConfigurationFile()</code></a><br>
+ 58.<a href="../../../de/griefed/serverpackcreator/Configuration.html#readStringArray--"><code>readStringArray()</code></a><br>
+ 59.<a href="../../../de/griefed/serverpackcreator/Configuration.html#buildString-java.lang.String...-"><code>buildString(String...)</code></a><br>
+ 60.<a href="../../../de/griefed/serverpackcreator/Configuration.html#readBoolean--"><code>readBoolean()</code></a><br>
+ 61.<a href="../../../de/griefed/serverpackcreator/Configuration.html#writeConfigToFile-java.lang.String-java.lang.String-java.lang.String-boolean-java.lang.String-java.lang.String-java.lang.String-java.lang.String-boolean-boolean-boolean-boolean-java.io.File-boolean-"><code>writeConfigToFile(String, String, String, boolean, String, String, String, String, boolean, boolean, boolean, boolean, File, boolean)</code></a>
+ <p>
+ Requires an instance of <a href="../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><code>CurseCreateModpack</code></a> in order to create a modpack from scratch should <a href="../../../de/griefed/serverpackcreator/Configuration.html#modpackDir"><code>modpackDir</code></a>
+ be a combination of a CurseForge projectID and fileID.<p>
+ Requires an instance of <a href="../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n"><code>LocalizationManager</code></a> for use of localization, but creates one if injected one is null.<p>
+ Loads a configuration from a serverpackcreator.conf-file in the same directory in which ServerPackCreator resides in.</div>
 </li>
 </ul>
 </div>
@@ -148,53 +215,61 @@ extends java.lang.Object</pre>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#copyDirs">copyDirs</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseCreateModpack</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#curseCreateModpack">curseCreateModpack</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>private java.util.List&lt;java.lang.String&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#fallbackModsList">fallbackModsList</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private java.lang.Boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#includeServerIcon">includeServerIcon</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private java.lang.Boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#includeServerInstallation">includeServerInstallation</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private java.lang.Boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#includeServerProperties">includeServerProperties</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private java.lang.Boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#includeStartScripts">includeStartScripts</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private java.lang.Boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#includeZipCreation">includeZipCreation</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private java.lang.String</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#javaPath">javaPath</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#localizationManager">localizationManager</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private java.lang.String</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#minecraftVersion">minecraftVersion</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private java.lang.String</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#modLoader">modLoader</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private java.lang.String</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#modLoaderVersion">modLoaderVersion</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private java.lang.String</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#modpackDir">modpackDir</a></span></code>&nbsp;</td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><code>private com.fasterxml.jackson.databind.ObjectMapper</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#objectMapper">objectMapper</a></span></code>&nbsp;</td>
+</tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private java.io.File</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#oldConfigFile">oldConfigFile</a></span></code>&nbsp;</td>
@@ -222,7 +297,11 @@ extends java.lang.Object</pre>
 <th class="colOne" scope="col">Constructor and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#Configuration-de.griefed.serverpackcreator.i18n.LocalizationManager-">Configuration</a></span>(<a href="../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a>&nbsp;injectedLocalizationManager)</code>&nbsp;</td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#Configuration-de.griefed.serverpackcreator.i18n.LocalizationManager-de.griefed.serverpackcreator.curseforgemodpack.CurseCreateModpack-">Configuration</a></span>(<a href="../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a>&nbsp;injectedLocalizationManager,
+             <a href="../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseCreateModpack</a>&nbsp;injectedCurseCreateModpack)</code>
+<div class="block"><strong>Constructor</strong>
+ Used for Dependency Injection.</div>
+</td>
 </tr>
 </table>
 </li>
@@ -242,198 +321,258 @@ extends java.lang.Object</pre>
 <tr id="i0" class="altColor">
 <td class="colFirst"><code>java.lang.String</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#buildString-java.lang.String...-">buildString</a></span>(java.lang.String...&nbsp;args)</code>
-<div class="block">Converts list of strings into concatenated string.</div>
+<div class="block">Converts a sequence of Strings, for example from a list, into a concatenated String.</div>
 </td>
 </tr>
 <tr id="i1" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#checkConfigFile-java.io.File-">checkConfigFile</a></span>(java.io.File&nbsp;configFile)</code>
-<div class="block">Check the config file for configuration errors.</div>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#checkConfigFile-java.io.File-boolean-">checkConfigFile</a></span>(java.io.File&nbsp;configFile,
+               boolean&nbsp;shouldModpackBeCreated)</code>
+<div class="block">Sets <a href="../../../de/griefed/serverpackcreator/Configuration.html#setConfig-com.typesafe.config.Config-"><code>setConfig(Config)</code></a> and calls checks for the provided configuration-file.</div>
 </td>
 </tr>
 <tr id="i2" class="altColor">
 <td class="colFirst"><code>(package private) boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#checkCopyDirs-java.util.List-java.lang.String-">checkCopyDirs</a></span>(java.util.List&lt;java.lang.String&gt;&nbsp;copyDirs,
              java.lang.String&nbsp;modpackDir)</code>
-<div class="block">Check whether the specified directories exist in the modpack directory.</div>
+<div class="block">Checks whether the passed list of directories which are supposed to be in the modpack directory is empty and
+ prints a message to the console and serverpackcreator.log if it is.</div>
 </td>
 </tr>
 <tr id="i3" class="rowColor">
 <td class="colFirst"><code>(package private) boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#checkCurseForge-java.lang.String-">checkCurseForge</a></span>(java.lang.String&nbsp;modpackDir)</code>
-<div class="block">Checks whether the modpackDir contains a valid projectID,fileID combination.</div>
+<div class="block">Checks whether the specified modpack directory contains a valid projectID,fileID combination.</div>
 </td>
 </tr>
 <tr id="i4" class="altColor">
 <td class="colFirst"><code>(package private) boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#checkJavaPath-java.lang.String-">checkJavaPath</a></span>(java.lang.String&nbsp;pathToJava)</code>
-<div class="block">Checks whether the correct path to the Java installation was set.</div>
+<div class="block">Checks whether the passed String ends with <code>java.exe</code> or <code>java</code> and whether the files exist.</div>
 </td>
 </tr>
 <tr id="i5" class="rowColor">
 <td class="colFirst"><code>(package private) boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#checkModloader-java.lang.String-">checkModloader</a></span>(java.lang.String&nbsp;modloader)</code>
-<div class="block">Checks whether Forge or Fabric were specified as modloader.</div>
+<div class="block">Checks whether either Forge or Fabric were specified as the modloader.</div>
 </td>
 </tr>
 <tr id="i6" class="altColor">
 <td class="colFirst"><code>(package private) boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#checkModloaderVersion-java.lang.String-java.lang.String-">checkModloaderVersion</a></span>(java.lang.String&nbsp;modloader,
                      java.lang.String&nbsp;modloaderVersion)</code>
-<div class="block">Determine whether to check for correct Forge or correct Fabric modloader version.</div>
+<div class="block">Depending on whether Forge or Fabric was specified as the modloader, this will call the corresponding version check
+ to verify that the user correctly set their modloader version.</div>
 </td>
 </tr>
 <tr id="i7" class="rowColor">
 <td class="colFirst"><code>(package private) boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#checkModpackDir-java.lang.String-">checkModpackDir</a></span>(java.lang.String&nbsp;modpackDir)</code>
-<div class="block">Check whether the specified modpack directory exists.</div>
+<div class="block">Checks whether the passed String is empty and if it is empty, prints the corresponding message to the console and
+ serverpackcreator.log so the user knows what went wrong.</div>
 </td>
 </tr>
 <tr id="i8" class="altColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#containsFabric-de.griefed.serverpackcreator.curseforgemodpack.CurseModpack-">containsFabric</a></span>(<a href="../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModpack</a>&nbsp;modpack)</code>
-<div class="block">Checks for the Jumploader mod in the project list of the modpack.</div>
+<div class="block">Checks whether the projectID for the Jumploader mod is present in the list of mods required by the CurseForge modpack.</div>
 </td>
 </tr>
 <tr id="i9" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#convertToBoolean-java.lang.String-">convertToBoolean</a></span>(java.lang.String&nbsp;stringBoolean)</code>
-<div class="block">Converts various strings to booleans.</div>
+<div class="block">Converts various strings to booleans, by using regex, to allow for more variations in input.</div>
 </td>
 </tr>
 <tr id="i10" class="altColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#createConfigurationFile--">createConfigurationFile</a></span>()</code>
-<div class="block">Generate new configuration file from CLI input.</div>
+<div class="block">Walk the user through the generation of a new ServerPackCreator configuration file by asking them for input,
+ step-by-step, regarding their modpack.</div>
 </td>
 </tr>
 <tr id="i11" class="rowColor">
 <td class="colFirst"><code>(package private) java.util.List&lt;java.lang.String&gt;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getClientMods--">getClientMods</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getClientMods--">getClientMods</a></span>()</code>
+<div class="block">Getter for a list of clientside-only mods to exclude from server pack.</div>
+</td>
 </tr>
 <tr id="i12" class="altColor">
 <td class="colFirst"><code>com.typesafe.config.Config</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getConfig--">getConfig</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getConfig--">getConfig</a></span>()</code>
+<div class="block">Getter for a <code>Config</code> containing a parsed configuration-file.</div>
+</td>
 </tr>
 <tr id="i13" class="rowColor">
 <td class="colFirst"><code>java.io.File</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getConfigFile--">getConfigFile</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getConfigFile--">getConfigFile</a></span>()</code>
+<div class="block">Getter for serverpackcreator.conf.</div>
+</td>
 </tr>
 <tr id="i14" class="altColor">
-<td class="colFirst"><code>(package private) java.util.List&lt;java.lang.String&gt;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getCopyDirs--">getCopyDirs</a></span>()</code>&nbsp;</td>
+<td class="colFirst"><code>java.util.List&lt;java.lang.String&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getCopyDirs--">getCopyDirs</a></span>()</code>
+<div class="block">Getter for the list of directories in the modpack to copy to the server pack.</div>
+</td>
 </tr>
 <tr id="i15" class="rowColor">
 <td class="colFirst"><code>(package private) java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getFabricManifestUrl--">getFabricManifestUrl</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getFabricManifestUrl--">getFabricManifestUrl</a></span>()</code>
+<div class="block">Getter for Fabric's version-manifest.</div>
+</td>
 </tr>
 <tr id="i16" class="altColor">
 <td class="colFirst"><code>(package private) java.util.List&lt;java.lang.String&gt;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getFallbackModsList--">getFallbackModsList</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getFallbackModsList--">getFallbackModsList</a></span>()</code>
+<div class="block">Getter for the fallback clientside-only mods-list, in case no customized one is provided by the user.</div>
+</td>
 </tr>
 <tr id="i17" class="rowColor">
 <td class="colFirst"><code>(package private) java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getForgeManifestUrl--">getForgeManifestUrl</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getForgeManifestUrl--">getForgeManifestUrl</a></span>()</code>
+<div class="block">Getter for Forge's version-manifest.</div>
+</td>
 </tr>
 <tr id="i18" class="altColor">
 <td class="colFirst"><code>(package private) boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getIncludeServerIcon--">getIncludeServerIcon</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getIncludeServerIcon--">getIncludeServerIcon</a></span>()</code>
+<div class="block">Getter for whether the server-icon.png should be included in the server pack.</div>
+</td>
 </tr>
 <tr id="i19" class="rowColor">
 <td class="colFirst"><code>(package private) boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getIncludeServerInstallation--">getIncludeServerInstallation</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getIncludeServerInstallation--">getIncludeServerInstallation</a></span>()</code>
+<div class="block">Getter for whether the modloader server installation should be included.</div>
+</td>
 </tr>
 <tr id="i20" class="altColor">
 <td class="colFirst"><code>(package private) boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getIncludeServerProperties--">getIncludeServerProperties</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getIncludeServerProperties--">getIncludeServerProperties</a></span>()</code>
+<div class="block">Getter for whether the server.properties should be included in the server pack.</div>
+</td>
 </tr>
 <tr id="i21" class="rowColor">
 <td class="colFirst"><code>(package private) boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getIncludeStartScripts--">getIncludeStartScripts</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getIncludeStartScripts--">getIncludeStartScripts</a></span>()</code>
+<div class="block">Getter for whether the start scripts should be included in the server pack.</div>
+</td>
 </tr>
 <tr id="i22" class="altColor">
 <td class="colFirst"><code>(package private) boolean</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getIncludeZipCreation--">getIncludeZipCreation</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getIncludeZipCreation--">getIncludeZipCreation</a></span>()</code>
+<div class="block">Getter for whether a ZIP-archive of the server pack should be created.</div>
+</td>
 </tr>
 <tr id="i23" class="rowColor">
 <td class="colFirst"><code>(package private) java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getJavaPath--">getJavaPath</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getJavaPath--">getJavaPath</a></span>()</code>
+<div class="block">Getter for the path to the Java executable/binary.</div>
+</td>
 </tr>
 <tr id="i24" class="altColor">
 <td class="colFirst"><code>(package private) java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getJavaPath-java.lang.String-">getJavaPath</a></span>(java.lang.String&nbsp;enteredPath)</code>
-<div class="block">Automatically set Java path if none is specified</div>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getJavaPathFromSystem-java.lang.String-">getJavaPathFromSystem</a></span>(java.lang.String&nbsp;enteredPath)</code>
+<div class="block">Checks the passed String whether it is empty, and if it is, automatically acquires the path to the users Java
+ installation and appends bin/java.exe or bin/java depending on whether the path to said installation starts with
+ Windows-typical C: prefix.</div>
 </td>
 </tr>
 <tr id="i25" class="rowColor">
 <td class="colFirst"><code>(package private) java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getMinecraftManifestUrl--">getMinecraftManifestUrl</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getMinecraftManifestUrl--">getMinecraftManifestUrl</a></span>()</code>
+<div class="block">Getter for Mojang's Minecraft version-manifest.</div>
+</td>
 </tr>
 <tr id="i26" class="altColor">
 <td class="colFirst"><code>(package private) java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getMinecraftVersion--">getMinecraftVersion</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getMinecraftVersion--">getMinecraftVersion</a></span>()</code>
+<div class="block">Getter for the version of Minecraft used by the modpack.</div>
+</td>
 </tr>
 <tr id="i27" class="rowColor">
 <td class="colFirst"><code>(package private) java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getModLoader--">getModLoader</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getModLoader--">getModLoader</a></span>()</code>
+<div class="block">Getter for the modloader used by the modpack.</div>
+</td>
 </tr>
 <tr id="i28" class="altColor">
 <td class="colFirst"><code>(package private) java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getModLoaderVersion--">getModLoaderVersion</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getModLoaderVersion--">getModLoaderVersion</a></span>()</code>
+<div class="block">Getter for the version of the modloader used by the modpack.</div>
+</td>
 </tr>
 <tr id="i29" class="rowColor">
-<td class="colFirst"><code>(package private) java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getModpackDir--">getModpackDir</a></span>()</code>&nbsp;</td>
+<td class="colFirst"><code>java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getModpackDir--">getModpackDir</a></span>()</code>
+<div class="block">Getter for the path to the modpack directory.</div>
+</td>
 </tr>
 <tr id="i30" class="altColor">
-<td class="colFirst"><code>java.io.File</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getOldConfigFile--">getOldConfigFile</a></span>()</code>&nbsp;</td>
+<td class="colFirst"><code>com.fasterxml.jackson.databind.ObjectMapper</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getObjectMapper--">getObjectMapper</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i31" class="rowColor">
-<td class="colFirst"><code>(package private) int</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getProjectFileID--">getProjectFileID</a></span>()</code>&nbsp;</td>
+<td class="colFirst"><code>java.io.File</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getOldConfigFile--">getOldConfigFile</a></span>()</code>
+<div class="block">Getter for creator.conf.</div>
+</td>
 </tr>
 <tr id="i32" class="altColor">
 <td class="colFirst"><code>(package private) int</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getProjectID--">getProjectID</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getProjectFileID--">getProjectFileID</a></span>()</code>
+<div class="block">Getter for the CurseForge file of a modpack, which will be created by <a href="../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#curseForgeModpack-java.lang.String-java.lang.Integer-java.lang.Integer-"><code>CurseCreateModpack.curseForgeModpack(String, Integer, Integer)</code></a>.</div>
+</td>
 </tr>
 <tr id="i33" class="rowColor">
+<td class="colFirst"><code>(package private) int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#getProjectID--">getProjectID</a></span>()</code>
+<div class="block">Getter for the CurseForge projectID of a modpack, which will be created by <a href="../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#curseForgeModpack-java.lang.String-java.lang.Integer-java.lang.Integer-"><code>CurseCreateModpack.curseForgeModpack(String, Integer, Integer)</code></a>.</div>
+</td>
+</tr>
+<tr id="i34" class="altColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#isCurse--">isCurse</a></span>()</code>
-<div class="block">Checks whether the specified projectID,fileID combination is a valid CurseForge project and file and whether the resulting directory exists.</div>
+<div class="block">If modpackDir in the configuration file is a CurseForge projectID,fileID combination, then the modpack is first
+ created from said combination, using <a href="../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#curseForgeModpack-java.lang.String-java.lang.Integer-java.lang.Integer-"><code>CurseCreateModpack.curseForgeModpack(String, Integer, Integer)</code></a>,
+ before proceeding to checking the rest of the configuration.</div>
 </td>
 </tr>
-<tr id="i34" class="altColor">
+<tr id="i35" class="rowColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#isDir-java.lang.String-">isDir</a></span>(java.lang.String&nbsp;modpackDir)</code>
-<div class="block">Checks whether the specified modpack exists.</div>
+<div class="block">If the in the configuration specified modpack dir is an existing directory, checks are made for valid configuration
+ of: directories to copy to server pack,<br>
+ if includeServerInstallation is <code>true</code>) path to Java executable/binary, Minecraft version, modloader and modloader version.</div>
 </td>
 </tr>
-<tr id="i35" class="rowColor">
+<tr id="i36" class="altColor">
 <td class="colFirst"><code>(package private) boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#isFabricVersionCorrect-java.lang.String-">isFabricVersionCorrect</a></span>(java.lang.String&nbsp;fabricVersion)</code>
-<div class="block">Check the specified Fabric version against Fabric's version manifest to validate the version.</div>
+<div class="block">Checks whether the passed String is empty and if it is not. check the String against Fabric's version manifest
+ to validate the version.</div>
 </td>
 </tr>
-<tr id="i36" class="altColor">
+<tr id="i37" class="rowColor">
 <td class="colFirst"><code>(package private) boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#isForgeVersionCorrect-java.lang.String-">isForgeVersionCorrect</a></span>(java.lang.String&nbsp;forgeVersion)</code>
-<div class="block">Checks Forge version for errors (basically for its availability in Forge manifest)</div>
+<div class="block">Checks whether the passed String is empty and if it is not. check the String against Forge's version manifest
+ to validate the version.</div>
 </td>
 </tr>
-<tr id="i37" class="rowColor">
+<tr id="i38" class="altColor">
 <td class="colFirst"><code>(package private) boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#isMinecraftVersionCorrect-java.lang.String-">isMinecraftVersionCorrect</a></span>(java.lang.String&nbsp;minecraftVersion)</code>
-<div class="block">Check the specified Minecraft version against Mojang's version manifest to validate the version.</div>
+<div class="block">Checks whether the passed String is empty and if it is not. check the String against Mojang's version manifest
+ to validate the version.</div>
 </td>
 </tr>
-<tr id="i38" class="altColor">
+<tr id="i39" class="rowColor">
 <td class="colFirst"><code>private java.lang.String</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#latestFabricLoader-java.lang.String-">latestFabricLoader</a></span>(java.lang.String&nbsp;modpackDir)</code>
-<div class="block">Returns the latest installer version for the Fabric installer to be used in ServerSetup.installServer.</div>
+<div class="block">Returns the latest version for the Fabric-loader.</div>
 </td>
 </tr>
-<tr id="i39" class="rowColor">
+<tr id="i40" class="altColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#printConfig-java.lang.String-java.util.List-java.util.List-boolean-java.lang.String-java.lang.String-java.lang.String-java.lang.String-boolean-boolean-boolean-boolean-">printConfig</a></span>(java.lang.String&nbsp;modpackDirectory,
            java.util.List&lt;java.lang.String&gt;&nbsp;clientsideMods,
@@ -447,94 +586,124 @@ extends java.lang.Object</pre>
            boolean&nbsp;includeProperties,
            boolean&nbsp;includeScripts,
            boolean&nbsp;includeZip)</code>
-<div class="block">Prints the configuration.</div>
+<div class="block">Prints all passed fields to the console and serverpackcreator.log.</div>
 </td>
 </tr>
-<tr id="i40" class="altColor">
+<tr id="i41" class="rowColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#readBoolean--">readBoolean</a></span>()</code>
-<div class="block">A helper method for config setup.</div>
+<div class="block">A helper method for <a href="../../../de/griefed/serverpackcreator/Configuration.html#createConfigurationFile--"><code>createConfigurationFile()</code></a>.</div>
 </td>
 </tr>
-<tr id="i41" class="rowColor">
+<tr id="i42" class="altColor">
 <td class="colFirst"><code>private java.util.List&lt;java.lang.String&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#readStringArray--">readStringArray</a></span>()</code>
-<div class="block">A helper method for config setup.</div>
+<div class="block">A helper method for <a href="../../../de/griefed/serverpackcreator/Configuration.html#createConfigurationFile--"><code>createConfigurationFile()</code></a>.</div>
 </td>
 </tr>
-<tr id="i42" class="altColor">
-<td class="colFirst"><code>(package private) void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#setClientMods-java.util.List-">setClientMods</a></span>(java.util.List&lt;java.lang.String&gt;&nbsp;newClientMods)</code>&nbsp;</td>
-</tr>
 <tr id="i43" class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#setConfig-com.typesafe.config.Config-">setConfig</a></span>(com.typesafe.config.Config&nbsp;newConfig)</code>&nbsp;</td>
+<td class="colFirst"><code>(package private) void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#setClientMods-java.util.List-">setClientMods</a></span>(java.util.List&lt;java.lang.String&gt;&nbsp;newClientMods)</code>
+<div class="block">Setter for the list of clientside-only mods to exclude from server pack.</div>
+</td>
 </tr>
 <tr id="i44" class="altColor">
-<td class="colFirst"><code>(package private) void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#setCopyDirs-java.util.List-">setCopyDirs</a></span>(java.util.List&lt;java.lang.String&gt;&nbsp;newCopyDirs)</code>&nbsp;</td>
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#setConfig-com.typesafe.config.Config-">setConfig</a></span>(com.typesafe.config.Config&nbsp;newConfig)</code>
+<div class="block">Setter for a <code>Config</code> containing a parsed configuration-file.</div>
+</td>
 </tr>
 <tr id="i45" class="rowColor">
 <td class="colFirst"><code>(package private) void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#setIncludeServerIcon-boolean-">setIncludeServerIcon</a></span>(boolean&nbsp;newIncludeServerIcon)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#setCopyDirs-java.util.List-">setCopyDirs</a></span>(java.util.List&lt;java.lang.String&gt;&nbsp;newCopyDirs)</code>
+<div class="block">Setter for the list of directories in the modpack to copy to the server pack.</div>
+</td>
 </tr>
 <tr id="i46" class="altColor">
 <td class="colFirst"><code>(package private) void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#setIncludeServerInstallation-boolean-">setIncludeServerInstallation</a></span>(boolean&nbsp;newIncludeServerInstallation)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#setIncludeServerIcon-boolean-">setIncludeServerIcon</a></span>(boolean&nbsp;newIncludeServerIcon)</code>
+<div class="block">Setter for whether the server-icon.png should be included in the server pack.</div>
+</td>
 </tr>
 <tr id="i47" class="rowColor">
 <td class="colFirst"><code>(package private) void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#setIncludeServerProperties-boolean-">setIncludeServerProperties</a></span>(boolean&nbsp;newIncludeServerProperties)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#setIncludeServerInstallation-boolean-">setIncludeServerInstallation</a></span>(boolean&nbsp;newIncludeServerInstallation)</code>
+<div class="block">Setter for whether the modloader server installation should be included.</div>
+</td>
 </tr>
 <tr id="i48" class="altColor">
 <td class="colFirst"><code>(package private) void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#setIncludeStartScripts-boolean-">setIncludeStartScripts</a></span>(boolean&nbsp;newIncludeStartScripts)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#setIncludeServerProperties-boolean-">setIncludeServerProperties</a></span>(boolean&nbsp;newIncludeServerProperties)</code>
+<div class="block">Setter for whether the server.properties should be included in the server pack.</div>
+</td>
 </tr>
 <tr id="i49" class="rowColor">
 <td class="colFirst"><code>(package private) void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#setIncludeZipCreation-boolean-">setIncludeZipCreation</a></span>(boolean&nbsp;newIncludeZipCreation)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#setIncludeStartScripts-boolean-">setIncludeStartScripts</a></span>(boolean&nbsp;newIncludeStartScripts)</code>
+<div class="block">Setter for whether the start scripts should be included in the server pack.</div>
+</td>
 </tr>
 <tr id="i50" class="altColor">
 <td class="colFirst"><code>(package private) void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#setJavaPath-java.lang.String-">setJavaPath</a></span>(java.lang.String&nbsp;newJavaPath)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#setIncludeZipCreation-boolean-">setIncludeZipCreation</a></span>(boolean&nbsp;newIncludeZipCreation)</code>
+<div class="block">Setter for whether a ZIP-archive of the server pack should be created.</div>
+</td>
 </tr>
 <tr id="i51" class="rowColor">
 <td class="colFirst"><code>(package private) void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#setMinecraftVersion-java.lang.String-">setMinecraftVersion</a></span>(java.lang.String&nbsp;newMinecraftVersion)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#setJavaPath-java.lang.String-">setJavaPath</a></span>(java.lang.String&nbsp;newJavaPath)</code>
+<div class="block">Setter for the path to the Java executable/binary.</div>
+</td>
 </tr>
 <tr id="i52" class="altColor">
-<td class="colFirst"><code>(package private) java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#setModloader-java.lang.String-">setModloader</a></span>(java.lang.String&nbsp;modloader)</code>
-<div class="block">Standardize the specified modloader.</div>
+<td class="colFirst"><code>(package private) void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#setMinecraftVersion-java.lang.String-">setMinecraftVersion</a></span>(java.lang.String&nbsp;newMinecraftVersion)</code>
+<div class="block">Setter for the Minecraft version used by the modpack.</div>
 </td>
 </tr>
 <tr id="i53" class="rowColor">
 <td class="colFirst"><code>(package private) void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#setModLoader-java.lang.String-">setModLoader</a></span>(java.lang.String&nbsp;newModLoader)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#setModLoader-java.lang.String-">setModLoader</a></span>(java.lang.String&nbsp;newModLoader)</code>
+<div class="block">Setter for the modloader used by the modpack.</div>
+</td>
 </tr>
 <tr id="i54" class="altColor">
-<td class="colFirst"><code>(package private) void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#setModLoaderVersion-java.lang.String-">setModLoaderVersion</a></span>(java.lang.String&nbsp;newModLoaderVersion)</code>&nbsp;</td>
+<td class="colFirst"><code>(package private) java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#setModLoaderCase-java.lang.String-">setModLoaderCase</a></span>(java.lang.String&nbsp;modloader)</code>
+<div class="block">Ensures the modloader is normalized to first letter upper case and rest lower case.</div>
+</td>
 </tr>
 <tr id="i55" class="rowColor">
 <td class="colFirst"><code>(package private) void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#setModpackDir-java.lang.String-">setModpackDir</a></span>(java.lang.String&nbsp;newModpackDir)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#setModLoaderVersion-java.lang.String-">setModLoaderVersion</a></span>(java.lang.String&nbsp;newModLoaderVersion)</code>
+<div class="block">Setter for the version of the modloader used by the modpack.</div>
+</td>
 </tr>
 <tr id="i56" class="altColor">
 <td class="colFirst"><code>(package private) void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#setProjectFileID-int-">setProjectFileID</a></span>(int&nbsp;newProjectFileID)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#setModpackDir-java.lang.String-">setModpackDir</a></span>(java.lang.String&nbsp;newModpackDir)</code>
+<div class="block">Setter for the path to the modpack directory.</div>
+</td>
 </tr>
 <tr id="i57" class="rowColor">
 <td class="colFirst"><code>(package private) void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#setProjectID-int-">setProjectID</a></span>(int&nbsp;newProjectID)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#setProjectFileID-int-">setProjectFileID</a></span>(int&nbsp;newProjectFileID)</code>
+<div class="block">Setter for the CurseForge file of a modpack, which will be created by <a href="../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#curseForgeModpack-java.lang.String-java.lang.Integer-java.lang.Integer-"><code>CurseCreateModpack.curseForgeModpack(String, Integer, Integer)</code></a>.</div>
+</td>
 </tr>
 <tr id="i58" class="altColor">
+<td class="colFirst"><code>(package private) void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#setProjectID-int-">setProjectID</a></span>(int&nbsp;newProjectID)</code>
+<div class="block">Setter for the CurseForge projectID of a modpack, which will be created by <a href="../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#curseForgeModpack-java.lang.String-java.lang.Integer-java.lang.Integer-"><code>CurseCreateModpack.curseForgeModpack(String, Integer, Integer)</code></a>.</div>
+</td>
+</tr>
+<tr id="i59" class="rowColor">
 <td class="colFirst"><code>private java.util.List&lt;java.lang.String&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#suggestCopyDirs-java.lang.String-">suggestCopyDirs</a></span>(java.lang.String&nbsp;modpackDir)</code>
 <div class="block">Creates a list of suggested directories to include in server pack which is later on written to a new configuration file.</div>
 </td>
 </tr>
-<tr id="i59" class="rowColor">
+<tr id="i60" class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Configuration.html#writeConfigToFile-java.lang.String-java.lang.String-java.lang.String-boolean-java.lang.String-java.lang.String-java.lang.String-java.lang.String-boolean-boolean-boolean-boolean-java.io.File-boolean-">writeConfigToFile</a></span>(java.lang.String&nbsp;modpackDir,
                  java.lang.String&nbsp;clientMods,
@@ -584,31 +753,40 @@ extends java.lang.Object</pre>
 <pre>private static final&nbsp;org.apache.logging.log4j.Logger appLogger</pre>
 </li>
 </ul>
-<a name="oldConfigFile">
+<a name="localizationManager">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>oldConfigFile</h4>
-<pre>private final&nbsp;java.io.File oldConfigFile</pre>
+<h4>localizationManager</h4>
+<pre>private&nbsp;<a href="../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a> localizationManager</pre>
 </li>
 </ul>
-<a name="configFile">
+<a name="curseCreateModpack">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>configFile</h4>
-<pre>private final&nbsp;java.io.File configFile</pre>
+<h4>curseCreateModpack</h4>
+<pre>private&nbsp;<a href="../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseCreateModpack</a> curseCreateModpack</pre>
 </li>
 </ul>
-<a name="localizationManager">
+<a name="oldConfigFile">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>localizationManager</h4>
-<pre>private&nbsp;<a href="../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a> localizationManager</pre>
+<h4>oldConfigFile</h4>
+<pre>private final&nbsp;java.io.File oldConfigFile</pre>
+</li>
+</ul>
+<a name="configFile">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>configFile</h4>
+<pre>private final&nbsp;java.io.File configFile</pre>
 </li>
 </ul>
 <a name="fallbackModsList">
@@ -749,12 +927,21 @@ extends java.lang.Object</pre>
 <a name="config">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>config</h4>
 <pre>private&nbsp;com.typesafe.config.Config config</pre>
 </li>
 </ul>
+<a name="objectMapper">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>objectMapper</h4>
+<pre>private&nbsp;com.fasterxml.jackson.databind.ObjectMapper objectMapper</pre>
+</li>
+</ul>
 </li>
 </ul>
 <!-- ========= CONSTRUCTOR DETAIL ======== -->
@@ -763,13 +950,26 @@ extends java.lang.Object</pre>
 <!--   -->
 </a>
 <h3>Constructor Detail</h3>
-<a name="Configuration-de.griefed.serverpackcreator.i18n.LocalizationManager-">
+<a name="Configuration-de.griefed.serverpackcreator.i18n.LocalizationManager-de.griefed.serverpackcreator.curseforgemodpack.CurseCreateModpack-">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>Configuration</h4>
-<pre>public&nbsp;Configuration(<a href="../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a>&nbsp;injectedLocalizationManager)</pre>
+<pre>public&nbsp;Configuration(<a href="../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a>&nbsp;injectedLocalizationManager,
+                     <a href="../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseCreateModpack</a>&nbsp;injectedCurseCreateModpack)</pre>
+<div class="block"><strong>Constructor</strong><p>
+ Used for Dependency Injection.<p>
+ Receives an instance of <a href="../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n"><code>LocalizationManager</code></a> or creates one if the received
+ one is null. Required for use of localization.<p>
+ Receives an instance of <a href="../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><code>CurseCreateModpack</code></a> in case the modpack has to be created from a combination of
+ CurseForge projectID and fileID, from which to <em>then</em> create the server pack.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>injectedLocalizationManager</code> - Instance of <a href="../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n"><code>LocalizationManager</code></a> required for localized log messages.</dd>
+<dd><code>injectedCurseCreateModpack</code> - Instance of <a href="../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><code>CurseCreateModpack</code></a> in case the modpack has to be created from a combination of
+ CurseForge projectID and fileID, from which to <em>then</em> create the server pack.</dd>
+</dl>
 </li>
 </ul>
 </li>
@@ -780,6 +980,15 @@ extends java.lang.Object</pre>
 <!--   -->
 </a>
 <h3>Method Detail</h3>
+<a name="getObjectMapper--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getObjectMapper</h4>
+<pre>public&nbsp;com.fasterxml.jackson.databind.ObjectMapper&nbsp;getObjectMapper()</pre>
+</li>
+</ul>
 <a name="getOldConfigFile--">
 <!--   -->
 </a>
@@ -787,6 +996,11 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>getOldConfigFile</h4>
 <pre>public&nbsp;java.io.File&nbsp;getOldConfigFile()</pre>
+<div class="block">Getter for creator.conf.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>File. Returns the creator.conf-file for use in <a href="../../../de/griefed/serverpackcreator/Configuration.html#writeConfigToFile-java.lang.String-java.lang.String-java.lang.String-boolean-java.lang.String-java.lang.String-java.lang.String-java.lang.String-boolean-boolean-boolean-boolean-java.io.File-boolean-"><code>writeConfigToFile(String, String, String, boolean, String, String, String, String, boolean, boolean, boolean, boolean, File, boolean)</code></a></dd>
+</dl>
 </li>
 </ul>
 <a name="getConfigFile--">
@@ -796,6 +1010,14 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>getConfigFile</h4>
 <pre>public&nbsp;java.io.File&nbsp;getConfigFile()</pre>
+<div class="block">Getter for serverpackcreator.conf.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>File. Returns the serverpackcreator.conf-file for use in <br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#isCurse--"><code>isCurse()</code></a>,<br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#createConfigurationFile--"><code>createConfigurationFile()</code></a>,<br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#writeConfigToFile-java.lang.String-java.lang.String-java.lang.String-boolean-java.lang.String-java.lang.String-java.lang.String-java.lang.String-boolean-boolean-boolean-boolean-java.io.File-boolean-"><code>writeConfigToFile(String, String, String, boolean, String, String, String, String, boolean, boolean, boolean, boolean, File, boolean)</code></a></dd>
+</dl>
 </li>
 </ul>
 <a name="getMinecraftManifestUrl--">
@@ -805,6 +1027,11 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>getMinecraftManifestUrl</h4>
 <pre>java.lang.String&nbsp;getMinecraftManifestUrl()</pre>
+<div class="block">Getter for Mojang's Minecraft version-manifest.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>String. Returns the URL to the JSON-file for use in <a href="../../../de/griefed/serverpackcreator/Configuration.html#isMinecraftVersionCorrect-java.lang.String-"><code>isMinecraftVersionCorrect(String)</code></a></dd>
+</dl>
 </li>
 </ul>
 <a name="getForgeManifestUrl--">
@@ -814,6 +1041,11 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>getForgeManifestUrl</h4>
 <pre>java.lang.String&nbsp;getForgeManifestUrl()</pre>
+<div class="block">Getter for Forge's version-manifest.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>String. Returns the URL to the JSON-file for use in <a href="../../../de/griefed/serverpackcreator/Configuration.html#isForgeVersionCorrect-java.lang.String-"><code>isForgeVersionCorrect(String)</code></a></dd>
+</dl>
 </li>
 </ul>
 <a name="getFabricManifestUrl--">
@@ -823,6 +1055,11 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>getFabricManifestUrl</h4>
 <pre>java.lang.String&nbsp;getFabricManifestUrl()</pre>
+<div class="block">Getter for Fabric's version-manifest.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>String. Returns the URL to the JSON-file for use in <a href="../../../de/griefed/serverpackcreator/Configuration.html#isFabricVersionCorrect-java.lang.String-"><code>isFabricVersionCorrect(String)</code></a></dd>
+</dl>
 </li>
 </ul>
 <a name="getConfig--">
@@ -832,6 +1069,14 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>getConfig</h4>
 <pre>public&nbsp;com.typesafe.config.Config&nbsp;getConfig()</pre>
+<div class="block">Getter for a <code>Config</code> containing a parsed configuration-file.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Config. Returns parsed serverpackcreator.conf for use in<br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#checkConfigFile-java.io.File-boolean-"><code>checkConfigFile(File, boolean)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#isDir-java.lang.String-"><code>isDir(String)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#isCurse--"><code>isCurse()</code></a></dd>
+</dl>
 </li>
 </ul>
 <a name="setConfig-com.typesafe.config.Config-">
@@ -841,6 +1086,12 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>setConfig</h4>
 <pre>public&nbsp;void&nbsp;setConfig(com.typesafe.config.Config&nbsp;newConfig)</pre>
+<div class="block">Setter for a <code>Config</code> containing a parsed configuration-file.
+ For use in <a href="../../../de/griefed/serverpackcreator/Configuration.html#checkConfigFile-java.io.File-boolean-"><code>checkConfigFile(File, boolean)</code></a></div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>newConfig</code> - The new Typesafe Config to store.</dd>
+</dl>
 </li>
 </ul>
 <a name="getFallbackModsList--">
@@ -850,6 +1101,11 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>getFallbackModsList</h4>
 <pre>java.util.List&lt;java.lang.String&gt;&nbsp;getFallbackModsList()</pre>
+<div class="block">Getter for the fallback clientside-only mods-list, in case no customized one is provided by the user.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>List String. Returns the fallback clientside-only mods-list for use in <a href="../../../de/griefed/serverpackcreator/Configuration.html#checkConfigFile-java.io.File-boolean-"><code>checkConfigFile(File, boolean)</code></a></dd>
+</dl>
 </li>
 </ul>
 <a name="getClientMods--">
@@ -859,6 +1115,13 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>getClientMods</h4>
 <pre>java.util.List&lt;java.lang.String&gt;&nbsp;getClientMods()</pre>
+<div class="block">Getter for a list of clientside-only mods to exclude from server pack.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>List String. Returns the list of clientside-only mods for use in<br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#checkConfigFile-java.io.File-boolean-"><code>checkConfigFile(File, boolean)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#isCurse--"><code>isCurse()</code></a></dd>
+</dl>
 </li>
 </ul>
 <a name="setClientMods-java.util.List-">
@@ -868,6 +1131,12 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>setClientMods</h4>
 <pre>void&nbsp;setClientMods(java.util.List&lt;java.lang.String&gt;&nbsp;newClientMods)</pre>
+<div class="block">Setter for the list of clientside-only mods to exclude from server pack.
+ For use in <a href="../../../de/griefed/serverpackcreator/Configuration.html#checkConfigFile-java.io.File-boolean-"><code>checkConfigFile(File, boolean)</code></a></div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>newClientMods</code> - The new list of clientside-only mods to store.</dd>
+</dl>
 </li>
 </ul>
 <a name="getCopyDirs--">
@@ -876,7 +1145,14 @@ extends java.lang.Object</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getCopyDirs</h4>
-<pre>java.util.List&lt;java.lang.String&gt;&nbsp;getCopyDirs()</pre>
+<pre>public&nbsp;java.util.List&lt;java.lang.String&gt;&nbsp;getCopyDirs()</pre>
+<div class="block">Getter for the list of directories in the modpack to copy to the server pack.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>List String. Returns the list of directories to copy to the server pack for use in<br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#checkConfigFile-java.io.File-boolean-"><code>checkConfigFile(File, boolean)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#isCurse--"><code>isCurse()</code></a></dd>
+</dl>
 </li>
 </ul>
 <a name="setCopyDirs-java.util.List-">
@@ -886,6 +1162,12 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>setCopyDirs</h4>
 <pre>void&nbsp;setCopyDirs(java.util.List&lt;java.lang.String&gt;&nbsp;newCopyDirs)</pre>
+<div class="block">Setter for the list of directories in the modpack to copy to the server pack.
+ For use in <a href="../../../de/griefed/serverpackcreator/Configuration.html#isDir-java.lang.String-"><code>isDir(String)</code></a> and <a href="../../../de/griefed/serverpackcreator/Configuration.html#isCurse--"><code>isCurse()</code></a></div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>newCopyDirs</code> - The new list of directories to include in server pack to store.</dd>
+</dl>
 </li>
 </ul>
 <a name="getModpackDir--">
@@ -894,7 +1176,15 @@ extends java.lang.Object</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>getModpackDir</h4>
-<pre>java.lang.String&nbsp;getModpackDir()</pre>
+<pre>public&nbsp;java.lang.String&nbsp;getModpackDir()</pre>
+<div class="block">Getter for the path to the modpack directory.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>String. Returns the path to the modpack directory for use in<br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#checkConfigFile-java.io.File-boolean-"><code>checkConfigFile(File, boolean)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#isDir-java.lang.String-"><code>isDir(String)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#isCurse--"><code>isCurse()</code></a></dd>
+</dl>
 </li>
 </ul>
 <a name="setModpackDir-java.lang.String-">
@@ -904,6 +1194,12 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>setModpackDir</h4>
 <pre>void&nbsp;setModpackDir(java.lang.String&nbsp;newModpackDir)</pre>
+<div class="block">Setter for the path to the modpack directory. Replaces any occurrences of \ with /.
+ For use in <a href="../../../de/griefed/serverpackcreator/Configuration.html#isDir-java.lang.String-"><code>isDir(String)</code></a> and <a href="../../../de/griefed/serverpackcreator/Configuration.html#isCurse--"><code>isCurse()</code></a></div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>newModpackDir</code> - The new modpack directory path to store.</dd>
+</dl>
 </li>
 </ul>
 <a name="getJavaPath--">
@@ -913,6 +1209,11 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>getJavaPath</h4>
 <pre>java.lang.String&nbsp;getJavaPath()</pre>
+<div class="block">Getter for the path to the Java executable/binary.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>String. Returns the path to the Java executable/binary for use in <a href="../../../de/griefed/serverpackcreator/Configuration.html#checkConfigFile-java.io.File-boolean-"><code>checkConfigFile(File, boolean)</code></a> and <a href="../../../de/griefed/serverpackcreator/Configuration.html#isCurse--"><code>isCurse()</code></a></dd>
+</dl>
 </li>
 </ul>
 <a name="setJavaPath-java.lang.String-">
@@ -922,6 +1223,12 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>setJavaPath</h4>
 <pre>void&nbsp;setJavaPath(java.lang.String&nbsp;newJavaPath)</pre>
+<div class="block">Setter for the path to the Java executable/binary. Replaces any occurrences of \ with /.
+ For use in <a href="../../../de/griefed/serverpackcreator/Configuration.html#isDir-java.lang.String-"><code>isDir(String)</code></a> and <a href="../../../de/griefed/serverpackcreator/Configuration.html#isCurse--"><code>isCurse()</code></a></div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>newJavaPath</code> - The new Java path to store.</dd>
+</dl>
 </li>
 </ul>
 <a name="getMinecraftVersion--">
@@ -931,6 +1238,11 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>getMinecraftVersion</h4>
 <pre>java.lang.String&nbsp;getMinecraftVersion()</pre>
+<div class="block">Getter for the version of Minecraft used by the modpack.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>String. Returns the  for use in <a href="../../../de/griefed/serverpackcreator/Configuration.html#checkConfigFile-java.io.File-boolean-"><code>checkConfigFile(File, boolean)</code></a> and <a href="../../../de/griefed/serverpackcreator/Configuration.html#isCurse--"><code>isCurse()</code></a></dd>
+</dl>
 </li>
 </ul>
 <a name="setMinecraftVersion-java.lang.String-">
@@ -940,6 +1252,12 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>setMinecraftVersion</h4>
 <pre>void&nbsp;setMinecraftVersion(java.lang.String&nbsp;newMinecraftVersion)</pre>
+<div class="block">Setter for the Minecraft version used by the modpack.
+ For use in <a href="../../../de/griefed/serverpackcreator/Configuration.html#isDir-java.lang.String-"><code>isDir(String)</code></a> and <a href="../../../de/griefed/serverpackcreator/Configuration.html#isCurse--"><code>isCurse()</code></a></div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>newMinecraftVersion</code> - The new Minecraft version to store.</dd>
+</dl>
 </li>
 </ul>
 <a name="getModLoader--">
@@ -949,6 +1267,14 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>getModLoader</h4>
 <pre>java.lang.String&nbsp;getModLoader()</pre>
+<div class="block">Getter for the modloader used by the modpack.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>String. Returns the modloader used by the modpack for use in<br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#checkConfigFile-java.io.File-boolean-"><code>checkConfigFile(File, boolean)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#isDir-java.lang.String-"><code>isDir(String)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#isCurse--"><code>isCurse()</code></a></dd>
+</dl>
 </li>
 </ul>
 <a name="setModLoader-java.lang.String-">
@@ -958,6 +1284,12 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>setModLoader</h4>
 <pre>void&nbsp;setModLoader(java.lang.String&nbsp;newModLoader)</pre>
+<div class="block">Setter for the modloader used by the modpack.
+ For use in <a href="../../../de/griefed/serverpackcreator/Configuration.html#isDir-java.lang.String-"><code>isDir(String)</code></a> and <a href="../../../de/griefed/serverpackcreator/Configuration.html#isCurse--"><code>isCurse()</code></a></div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>newModLoader</code> - The new modloader to store.</dd>
+</dl>
 </li>
 </ul>
 <a name="getModLoaderVersion--">
@@ -967,6 +1299,11 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>getModLoaderVersion</h4>
 <pre>java.lang.String&nbsp;getModLoaderVersion()</pre>
+<div class="block">Getter for the version of the modloader used by the modpack.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>String. Returns the version of the modloader used by the modpack for use in <a href="../../../de/griefed/serverpackcreator/Configuration.html#checkConfigFile-java.io.File-boolean-"><code>checkConfigFile(File, boolean)</code></a> and <a href="../../../de/griefed/serverpackcreator/Configuration.html#isCurse--"><code>isCurse()</code></a></dd>
+</dl>
 </li>
 </ul>
 <a name="setModLoaderVersion-java.lang.String-">
@@ -976,6 +1313,12 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>setModLoaderVersion</h4>
 <pre>void&nbsp;setModLoaderVersion(java.lang.String&nbsp;newModLoaderVersion)</pre>
+<div class="block">Setter for the version of the modloader used by the modpack.
+ For use in <a href="../../../de/griefed/serverpackcreator/Configuration.html#isDir-java.lang.String-"><code>isDir(String)</code></a> and <a href="../../../de/griefed/serverpackcreator/Configuration.html#isCurse--"><code>isCurse()</code></a></div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>newModLoaderVersion</code> - The new modloader version to store.</dd>
+</dl>
 </li>
 </ul>
 <a name="getIncludeServerInstallation--">
@@ -985,6 +1328,14 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>getIncludeServerInstallation</h4>
 <pre>boolean&nbsp;getIncludeServerInstallation()</pre>
+<div class="block">Getter for whether the modloader server installation should be included.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Boolean. Returns whether the server installation should be included, for use in<br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#checkConfigFile-java.io.File-boolean-"><code>checkConfigFile(File, boolean)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#isDir-java.lang.String-"><code>isDir(String)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#isCurse--"><code>isCurse()</code></a></dd>
+</dl>
 </li>
 </ul>
 <a name="setIncludeServerInstallation-boolean-">
@@ -994,6 +1345,12 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>setIncludeServerInstallation</h4>
 <pre>void&nbsp;setIncludeServerInstallation(boolean&nbsp;newIncludeServerInstallation)</pre>
+<div class="block">Setter for whether the modloader server installation should be included.
+ For use in <a href="../../../de/griefed/serverpackcreator/Configuration.html#checkConfigFile-java.io.File-boolean-"><code>checkConfigFile(File, boolean)</code></a></div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>newIncludeServerInstallation</code> - The new boolean to store.</dd>
+</dl>
 </li>
 </ul>
 <a name="getIncludeServerIcon--">
@@ -1003,6 +1360,12 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>getIncludeServerIcon</h4>
 <pre>boolean&nbsp;getIncludeServerIcon()</pre>
+<div class="block">Getter for whether the server-icon.png should be included in the server pack.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Boolean. Returns whether the server-icon.png should be included in the server pack, for use in <a href="../../../de/griefed/serverpackcreator/Configuration.html#checkConfigFile-java.io.File-boolean-"><code>checkConfigFile(File, boolean)</code></a>
+ and <a href="../../../de/griefed/serverpackcreator/Configuration.html#isCurse--"><code>isCurse()</code></a></dd>
+</dl>
 </li>
 </ul>
 <a name="setIncludeServerIcon-boolean-">
@@ -1012,6 +1375,12 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>setIncludeServerIcon</h4>
 <pre>void&nbsp;setIncludeServerIcon(boolean&nbsp;newIncludeServerIcon)</pre>
+<div class="block">Setter for whether the server-icon.png should be included in the server pack.
+ For use in <a href="../../../de/griefed/serverpackcreator/Configuration.html#checkConfigFile-java.io.File-boolean-"><code>checkConfigFile(File, boolean)</code></a></div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>newIncludeServerIcon</code> - The new boolean to store.</dd>
+</dl>
 </li>
 </ul>
 <a name="getIncludeServerProperties--">
@@ -1021,6 +1390,12 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>getIncludeServerProperties</h4>
 <pre>boolean&nbsp;getIncludeServerProperties()</pre>
+<div class="block">Getter for whether the server.properties should be included in the server pack.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Boolean. Returns whether the server.properties should be included in the server pack, for use in
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#checkConfigFile-java.io.File-boolean-"><code>checkConfigFile(File, boolean)</code></a> and <a href="../../../de/griefed/serverpackcreator/Configuration.html#isCurse--"><code>isCurse()</code></a></dd>
+</dl>
 </li>
 </ul>
 <a name="setIncludeServerProperties-boolean-">
@@ -1030,6 +1405,12 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>setIncludeServerProperties</h4>
 <pre>void&nbsp;setIncludeServerProperties(boolean&nbsp;newIncludeServerProperties)</pre>
+<div class="block">Setter for whether the server.properties should be included in the server pack.
+ For use in <a href="../../../de/griefed/serverpackcreator/Configuration.html#checkConfigFile-java.io.File-boolean-"><code>checkConfigFile(File, boolean)</code></a></div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>newIncludeServerProperties</code> - The new boolean to store.</dd>
+</dl>
 </li>
 </ul>
 <a name="getIncludeStartScripts--">
@@ -1039,6 +1420,11 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>getIncludeStartScripts</h4>
 <pre>boolean&nbsp;getIncludeStartScripts()</pre>
+<div class="block">Getter for whether the start scripts should be included in the server pack.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Boolean. Returns the whether the start scripts should be included in the server pack, for use in <a href="../../../de/griefed/serverpackcreator/Configuration.html#checkConfigFile-java.io.File-boolean-"><code>checkConfigFile(File, boolean)</code></a> and <a href="../../../de/griefed/serverpackcreator/Configuration.html#isCurse--"><code>isCurse()</code></a></dd>
+</dl>
 </li>
 </ul>
 <a name="setIncludeStartScripts-boolean-">
@@ -1048,6 +1434,12 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>setIncludeStartScripts</h4>
 <pre>void&nbsp;setIncludeStartScripts(boolean&nbsp;newIncludeStartScripts)</pre>
+<div class="block">Setter for whether the start scripts should be included in the server pack.
+ For use in <a href="../../../de/griefed/serverpackcreator/Configuration.html#checkConfigFile-java.io.File-boolean-"><code>checkConfigFile(File, boolean)</code></a></div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>newIncludeStartScripts</code> - The new boolean to store.</dd>
+</dl>
 </li>
 </ul>
 <a name="getIncludeZipCreation--">
@@ -1057,6 +1449,11 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>getIncludeZipCreation</h4>
 <pre>boolean&nbsp;getIncludeZipCreation()</pre>
+<div class="block">Getter for whether a ZIP-archive of the server pack should be created.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Boolean. Returns whether a ZIP-archive of the server pack should be created, for use in <a href="../../../de/griefed/serverpackcreator/Configuration.html#checkConfigFile-java.io.File-boolean-"><code>checkConfigFile(File, boolean)</code></a> and <a href="../../../de/griefed/serverpackcreator/Configuration.html#isCurse--"><code>isCurse()</code></a></dd>
+</dl>
 </li>
 </ul>
 <a name="setIncludeZipCreation-boolean-">
@@ -1066,6 +1463,12 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>setIncludeZipCreation</h4>
 <pre>void&nbsp;setIncludeZipCreation(boolean&nbsp;newIncludeZipCreation)</pre>
+<div class="block">Setter for whether a ZIP-archive of the server pack should be created.
+ For use in <a href="../../../de/griefed/serverpackcreator/Configuration.html#checkConfigFile-java.io.File-boolean-"><code>checkConfigFile(File, boolean)</code></a></div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>newIncludeZipCreation</code> - The new boolean to store.</dd>
+</dl>
 </li>
 </ul>
 <a name="getProjectID--">
@@ -1075,6 +1478,11 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>getProjectID</h4>
 <pre>int&nbsp;getProjectID()</pre>
+<div class="block">Getter for the CurseForge projectID of a modpack, which will be created by <a href="../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#curseForgeModpack-java.lang.String-java.lang.Integer-java.lang.Integer-"><code>CurseCreateModpack.curseForgeModpack(String, Integer, Integer)</code></a>.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Integer. Returns the CurseForge projectID of a modpack, for use in <a href="../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#curseForgeModpack-java.lang.String-java.lang.Integer-java.lang.Integer-"><code>CurseCreateModpack.curseForgeModpack(String, Integer, Integer)</code></a> and <a href="../../../de/griefed/serverpackcreator/Configuration.html#checkCurseForge-java.lang.String-"><code>checkCurseForge(String)</code></a></dd>
+</dl>
 </li>
 </ul>
 <a name="setProjectID-int-">
@@ -1084,6 +1492,12 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>setProjectID</h4>
 <pre>void&nbsp;setProjectID(int&nbsp;newProjectID)</pre>
+<div class="block">Setter for the CurseForge projectID of a modpack, which will be created by <a href="../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#curseForgeModpack-java.lang.String-java.lang.Integer-java.lang.Integer-"><code>CurseCreateModpack.curseForgeModpack(String, Integer, Integer)</code></a>.
+ For use in <a href="../../../de/griefed/serverpackcreator/Configuration.html#checkCurseForge-java.lang.String-"><code>checkCurseForge(String)</code></a></div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>newProjectID</code> - The new projectID to store.</dd>
+</dl>
 </li>
 </ul>
 <a name="getProjectFileID--">
@@ -1093,6 +1507,11 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>getProjectFileID</h4>
 <pre>int&nbsp;getProjectFileID()</pre>
+<div class="block">Getter for the CurseForge file of a modpack, which will be created by <a href="../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#curseForgeModpack-java.lang.String-java.lang.Integer-java.lang.Integer-"><code>CurseCreateModpack.curseForgeModpack(String, Integer, Integer)</code></a>.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Integer. Returns the CurseForge fileID of a modpack, for use in <a href="../../../de/griefed/serverpackcreator/Configuration.html#isCurse--"><code>isCurse()</code></a> and <a href="../../../de/griefed/serverpackcreator/Configuration.html#checkCurseForge-java.lang.String-"><code>checkCurseForge(String)</code></a></dd>
+</dl>
 </li>
 </ul>
 <a name="setProjectFileID-int-">
@@ -1102,21 +1521,45 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>setProjectFileID</h4>
 <pre>void&nbsp;setProjectFileID(int&nbsp;newProjectFileID)</pre>
+<div class="block">Setter for the CurseForge file of a modpack, which will be created by <a href="../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#curseForgeModpack-java.lang.String-java.lang.Integer-java.lang.Integer-"><code>CurseCreateModpack.curseForgeModpack(String, Integer, Integer)</code></a>.
+ For use in <a href="../../../de/griefed/serverpackcreator/Configuration.html#checkCurseForge-java.lang.String-"><code>checkCurseForge(String)</code></a></div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>newProjectFileID</code> - The new projectFileID to store.</dd>
+</dl>
 </li>
 </ul>
-<a name="checkConfigFile-java.io.File-">
+<a name="checkConfigFile-java.io.File-boolean-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>checkConfigFile</h4>
-<pre>public&nbsp;boolean&nbsp;checkConfigFile(java.io.File&nbsp;configFile)</pre>
-<div class="block">Check the config file for configuration errors. If an error is found, the log file will tell the user where the error is, so they can fix their config.</div>
+<pre>public&nbsp;boolean&nbsp;checkConfigFile(java.io.File&nbsp;configFile,
+                               boolean&nbsp;shouldModpackBeCreated)</pre>
+<div class="block">Sets <a href="../../../de/griefed/serverpackcreator/Configuration.html#setConfig-com.typesafe.config.Config-"><code>setConfig(Config)</code></a> and calls checks for the provided configuration-file. If any check returns <code>true</code>
+ then the server pack will not be created. In order to find out which check failed, the user has to check their
+ serverpackcreator.log in the logs directory. Calls<br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#setConfig-com.typesafe.config.Config-"><code>setConfig(Config)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#getConfig--"><code>getConfig()</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#setClientMods-java.util.List-"><code>setClientMods(List)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#getFallbackModsList--"><code>getFallbackModsList()</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#setIncludeServerInstallation-boolean-"><code>setIncludeServerInstallation(boolean)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#setIncludeServerIcon-boolean-"><code>setIncludeServerIcon(boolean)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#setIncludeServerProperties-boolean-"><code>setIncludeServerProperties(boolean)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#setIncludeStartScripts-boolean-"><code>setIncludeStartScripts(boolean)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#setIncludeZipCreation-boolean-"><code>setIncludeZipCreation(boolean)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#checkModpackDir-java.lang.String-"><code>checkModpackDir(String)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#checkCurseForge-java.lang.String-"><code>checkCurseForge(String)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#isDir-java.lang.String-"><code>isDir(String)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#isCurse--"><code>isCurse()</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#printConfig-java.lang.String-java.util.List-java.util.List-boolean-java.lang.String-java.lang.String-java.lang.String-java.lang.String-boolean-boolean-boolean-boolean-"><code>printConfig(String, List, List, boolean, String, String, String, String, boolean, boolean, boolean, boolean)</code></a></div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>configFile</code> - The configuration file to check. Must be a valid configuration file for serverpackcreator to work.</dd>
+<dd><code>configFile</code> - File. The configuration file to check. Must be a valid configuration file for serverpackcreator to work.</dd>
+<dd><code>shouldModpackBeCreated</code> - Boolean. Whether the CurseForge modpack should be downloaded and created.</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd>Return true if error is found in user's configuration. If an error is found, the application will exit in main.</dd>
+<dd>Boolean. Returns <code>false</code> if all checks are passed.</dd>
 </dl>
 </li>
 </ul>
@@ -1127,12 +1570,31 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>isDir</h4>
 <pre>private&nbsp;boolean&nbsp;isDir(java.lang.String&nbsp;modpackDir)</pre>
-<div class="block">Checks whether the specified modpack exists. If it does, the config file is checked for errors. Should any error be found, it will return true so the configCheck method informs the user about an invalid configuration.</div>
+<div class="block">If the in the configuration specified modpack dir is an existing directory, checks are made for valid configuration
+ of: directories to copy to server pack,<br>
+ if includeServerInstallation is <code>true</code>) path to Java executable/binary, Minecraft version, modloader and modloader version.
+ Calls<br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#setModpackDir-java.lang.String-"><code>setModpackDir(String)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#getModpackDir--"><code>getModpackDir()</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#checkCopyDirs-java.util.List-java.lang.String-"><code>checkCopyDirs(List, String)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#setCopyDirs-java.util.List-"><code>setCopyDirs(List)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#getIncludeServerInstallation--"><code>getIncludeServerInstallation()</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#checkJavaPath-java.lang.String-"><code>checkJavaPath(String)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#setJavaPath-java.lang.String-"><code>setJavaPath(String)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#getJavaPathFromSystem-java.lang.String-"><code>getJavaPathFromSystem(String)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#isMinecraftVersionCorrect-java.lang.String-"><code>isMinecraftVersionCorrect(String)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#setMinecraftVersion-java.lang.String-"><code>setMinecraftVersion(String)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#checkModloader-java.lang.String-"><code>checkModloader(String)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#setModLoader-java.lang.String-"><code>setModLoader(String)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#setModLoaderCase-java.lang.String-"><code>setModLoaderCase(String)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#checkModloaderVersion-java.lang.String-java.lang.String-"><code>checkModloaderVersion(String, String)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#setModLoaderVersion-java.lang.String-"><code>setModLoaderVersion(String)</code></a><br></div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modpackDir</code> - String. Should an existing modpack be specified, all configurations are read from local file and the server pack is created, if config is correct.</dd>
+<dd><code>modpackDir</code> - String. Should an existing modpack be specified, all configurations are read from the provided
+                   configuration file and checks are made in this directory.</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd>Boolean. Returns true if an error is found during configuration check. False if the configuration is deemed valid.</dd>
+<dd>Boolean. Returns true if an error is found during configuration check.</dd>
 </dl>
 </li>
 </ul>
@@ -1143,10 +1605,30 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>isCurse</h4>
 <pre>private&nbsp;boolean&nbsp;isCurse()</pre>
-<div class="block">Checks whether the specified projectID,fileID combination is a valid CurseForge project and file and whether the resulting directory exists. If the directory does not exist, make calls to other methods which create the modpack. Parses information gathered from the modpack to later replace the previous configuration file.</div>
+<div class="block">If modpackDir in the configuration file is a CurseForge projectID,fileID combination, then the modpack is first
+ created from said combination, using <a href="../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#curseForgeModpack-java.lang.String-java.lang.Integer-java.lang.Integer-"><code>CurseCreateModpack.curseForgeModpack(String, Integer, Integer)</code></a>,
+ before proceeding to checking the rest of the configuration. If everything passes and the modpack was created,
+ a new configuration file is created, replacing the one used to create the modpack in the first place, with the
+ modpackDir field pointing to the newly created modpack. Calls<br>
+ <code>CurseAPI</code> and various methods of it.<br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#setModpackDir-java.lang.String-"><code>setModpackDir(String)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#getModpackDir--"><code>getModpackDir()</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#curseForgeModpack-java.lang.String-java.lang.Integer-java.lang.Integer-"><code>CurseCreateModpack.curseForgeModpack(String, Integer, Integer)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><code>CurseModpack</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#containsFabric-de.griefed.serverpackcreator.curseforgemodpack.CurseModpack-"><code>containsFabric(CurseModpack)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#setModLoader-java.lang.String-"><code>setModLoader(String)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#setModLoaderVersion-java.lang.String-"><code>setModLoaderVersion(String)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#setModLoaderCase-java.lang.String-"><code>setModLoaderCase(String)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#checkJavaPath-java.lang.String-"><code>checkJavaPath(String)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#setJavaPath-java.lang.String-"><code>setJavaPath(String)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#getJavaPathFromSystem-java.lang.String-"><code>getJavaPathFromSystem(String)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#setCopyDirs-java.util.List-"><code>setCopyDirs(List)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#suggestCopyDirs-java.lang.String-"><code>suggestCopyDirs(String)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#writeConfigToFile-java.lang.String-java.lang.String-java.lang.String-boolean-java.lang.String-java.lang.String-java.lang.String-java.lang.String-boolean-boolean-boolean-boolean-java.io.File-boolean-"><code>writeConfigToFile(String, String, String, boolean, String, String, String, String, boolean, boolean, boolean, boolean, File, boolean)</code></a><br></div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd>Boolean. Currently always returns true so serverpackcreator does not go straight into server pack creation after the creation of the specified modpack. Gives the user the chance to check their config before actually creating the server pack.</dd>
+<dd>Boolean. Returns false unless an error was encountered during either the acquisition of the CurseForge
+ project name and displayname, or when the creation of the modpack fails.</dd>
 </dl>
 </li>
 </ul>
@@ -1157,12 +1639,14 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>containsFabric</h4>
 <pre>private&nbsp;boolean&nbsp;containsFabric(<a href="../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModpack</a>&nbsp;modpack)</pre>
-<div class="block">Checks for the Jumploader mod in the project list of the modpack. If Jumploader is found, the modloader in the configuration will be set to Fabric.</div>
+<div class="block">Checks whether the projectID for the Jumploader mod is present in the list of mods required by the CurseForge modpack.
+ If Jumploader is found, the modloader for the new configuration-file will be set to Fabric.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modpack</code> - Object. Contains information about our modpack. Used to get a list of all projects used in the modpack.</dd>
+<dd><code>modpack</code> - CurseModpack. Contains information about the CurseForge modpack. Used to get a list of all projects
+               required by the modpack.</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd>Boolean. Returns true if Jumploader is found, false if not found.</dd>
+<dd>Boolean. Returns true if Jumploader is found.</dd>
 </dl>
 </li>
 </ul>
@@ -1173,12 +1657,16 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>suggestCopyDirs</h4>
 <pre>private&nbsp;java.util.List&lt;java.lang.String&gt;&nbsp;suggestCopyDirs(java.lang.String&nbsp;modpackDir)</pre>
-<div class="block">Creates a list of suggested directories to include in server pack which is later on written to a new configuration file.</div>
+<div class="block">Creates a list of suggested directories to include in server pack which is later on written to a new configuration file.
+ The list of directories to include in the server pack which is generated by this method excludes well know directories
+ which would not be needed by a server pack. If you have suggestions to this list, open an issue on
+ <a href=https://github.com/Griefed/ServerPackCreator/issues>GitHub</a></div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modpackDir</code> - String. The directory for which to gather a list of directories.</dd>
+<dd><code>modpackDir</code> - String. The directory for which to gather a list of directories to copy to the server pack.</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd>List, String. Returns a list of directories inside the modpack, excluding well known client-side only directories which would not be needed by a server pack. If you have suggestions to this list, open an issue on https://github.com/Griefed/ServerPackCreator/issues</dd>
+<dd>List, String. Returns a list of directories inside the modpack, excluding well known client-side only
+ directories.</dd>
 </dl>
 </li>
 </ul>
@@ -1189,7 +1677,11 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>checkCurseForge</h4>
 <pre>boolean&nbsp;checkCurseForge(java.lang.String&nbsp;modpackDir)</pre>
-<div class="block">Checks whether the modpackDir contains a valid projectID,fileID combination. ProjectIDs must be at least two digits long, fileIDs must be at least 5 digits long. Must be numbers separated by a ",".</div>
+<div class="block">Checks whether the specified modpack directory contains a valid projectID,fileID combination.
+ ProjectIDs must be at least two digits long, fileIDs must be at least 5 digits long.
+ Must be numbers separated by a ",". If modpackDir successfully matched a projectID,fileID combination, CurseForge
+ is then checked for existence of said projectID and fileID. If the project can not be found or the file returns null
+ then false is returned and the check is considered failed.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>modpackDir</code> - String. The string which to check for a valid projectID,fileID combination.</dd>
@@ -1205,7 +1697,23 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>convertToBoolean</h4>
 <pre>public&nbsp;boolean&nbsp;convertToBoolean(java.lang.String&nbsp;stringBoolean)</pre>
-<div class="block">Converts various strings to booleans.</div>
+<div class="block">Converts various strings to booleans, by using regex, to allow for more variations in input.<br>
+ <strong>Converted to <code>TRUE</code> are:<br></strong>
+ <code>[Tt]rue</code><br>
+ <code>1</code><br>
+ <code>[Yy]es</code><br>
+ <code>[Yy]</code><br>
+ Language Key <code>cli.input.true</code><br>
+ Language Key <code>cli.input.yes</code><br>
+ Language Key <code>cli.input.yes.short</code><br>
+ <strong>Converted to <code>FALSE</code> are:<br></strong>
+ <code>[Ff]alse</code><br>
+ <code>0</code><br>
+ <code>[Nn]o</code><br>
+ <code>[Nn]</code><br>
+ Language Key <code>cli.input.false</code><br>
+ Language Key <code>cli.input.no</code><br>
+ Language Key <code>cli.input.no.short</code><br></div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>stringBoolean</code> - String. The string which should be converted to boolean if it matches certain patterns.</dd>
@@ -1232,21 +1740,25 @@ extends java.lang.Object</pre>
                  boolean&nbsp;includeProperties,
                  boolean&nbsp;includeScripts,
                  boolean&nbsp;includeZip)</pre>
-<div class="block">Prints the configuration.</div>
+<div class="block">Prints all passed fields to the console and serverpackcreator.log. Used to show the user the configuration before
+ ServerPackCreator starts the generation of the server pack or, if checks failed, to show the user their last
+ configuration so they can more easily identify problems with said configuration.<br>
+ Should a user report an issue on GitHub and include their logs (which I hope they do....), this would also
+ help me help them. Logging is good. People should use more logging.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modpackDirectory</code> - String. Path to modpack directory.</dd>
-<dd><code>clientsideMods</code> - String List. List of clientside mods to delete from server pack.</dd>
-<dd><code>copyDirectories</code> - String List. List of directories to copy to server pack.</dd>
-<dd><code>installServer</code> - Boolean. Whether to install the modloader server.</dd>
-<dd><code>javaInstallPath</code> - String. Path to Java installation needed to install modloader server.</dd>
-<dd><code>minecraftVer</code> - String. Minecraft version the modpack uses.</dd>
-<dd><code>modloader</code> - String. Modloader the modpack uses.</dd>
-<dd><code>modloaderVersion</code> - String. Version of the modloader the modpack uses.</dd>
+<dd><code>modpackDirectory</code> - String. The used modpackDir field either from a configuration file or from configuration setup.</dd>
+<dd><code>clientsideMods</code> - String List. List of clientside-only mods to exclude from the server pack..</dd>
+<dd><code>copyDirectories</code> - String List. List of directories in the modpack which are to be included in the server pack.</dd>
+<dd><code>installServer</code> - Boolean. Whether to install the modloader server in the server pack.</dd>
+<dd><code>javaInstallPath</code> - String. Path to the Java executable/binary needed for installing the modloader server in the server pack.</dd>
+<dd><code>minecraftVer</code> - String. The Minecraft version the modpack uses.</dd>
+<dd><code>modloader</code> - String. The modloader the modpack uses.</dd>
+<dd><code>modloaderVersion</code> - String. The version of the modloader the modpack uses.</dd>
 <dd><code>includeIcon</code> - Boolean. Whether to include the server-icon.png in the server pack.</dd>
 <dd><code>includeProperties</code> - Boolean. Whether to include the server.properties in the server pack.</dd>
-<dd><code>includeScripts</code> - Boolean. Whether to include start scripts for the specified modloader in the server pack.</dd>
-<dd><code>includeZip</code> - Boolean. Whether to create a zip-archive of the server pack.</dd>
+<dd><code>includeScripts</code> - Boolean. Whether to include the start scripts for the specified modloader in the server pack.</dd>
+<dd><code>includeZip</code> - Boolean. Whether to create a zip-archive of the server pack, excluding the Minecraft server JAR according to Mojang's TOS and EULA.</dd>
 </dl>
 </li>
 </ul>
@@ -1257,12 +1769,15 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>checkModpackDir</h4>
 <pre>boolean&nbsp;checkModpackDir(java.lang.String&nbsp;modpackDir)</pre>
-<div class="block">Check whether the specified modpack directory exists.</div>
+<div class="block">Checks whether the passed String is empty and if it is empty, prints the corresponding message to the console and
+ serverpackcreator.log so the user knows what went wrong.<br>
+ Checks whether the passed String is a directory and if it is not, prints the corresponding message to the console
+ and serverpackcreator.log so the user knows what went wrong.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modpackDir</code> - String. The path to the modpack directory.</dd>
+<dd><code>modpackDir</code> - String. The path to the modpack directory to check whether it is empty and whether it is a directory.</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd>Boolean. Returns true if the directory exists. False if not.</dd>
+<dd>Boolean. Returns true if the directory exists.</dd>
 </dl>
 </li>
 </ul>
@@ -1274,29 +1789,37 @@ extends java.lang.Object</pre>
 <h4>checkCopyDirs</h4>
 <pre>boolean&nbsp;checkCopyDirs(java.util.List&lt;java.lang.String&gt;&nbsp;copyDirs,
                       java.lang.String&nbsp;modpackDir)</pre>
-<div class="block">Check whether the specified directories exist in the modpack directory.</div>
+<div class="block">Checks whether the passed list of directories which are supposed to be in the modpack directory is empty and
+ prints a message to the console and serverpackcreator.log if it is.<br>
+ Checks whether all directories in the list exist in the modpack directory and prints a message to the console
+ and serverpackcreator.log if any one of the directories could not be found.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>copyDirs</code> - String. The directories for which to check.</dd>
-<dd><code>modpackDir</code> - String. The path to the modpack directory in which to check for directories.</dd>
+<dd><code>copyDirs</code> - List String. The list of directories to check for existence.</dd>
+<dd><code>modpackDir</code> - String. The path to the modpack directory in which to check for existence of the passed list of
+                  directories.</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd>Boolean. Returns true if all directories exist. False if any one does not.</dd>
+<dd>Boolean. Returns true if every directory was found in the modpack directory. If any single one was not found,
+ false is returned.</dd>
 </dl>
 </li>
 </ul>
-<a name="getJavaPath-java.lang.String-">
+<a name="getJavaPathFromSystem-java.lang.String-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getJavaPath</h4>
-<pre>java.lang.String&nbsp;getJavaPath(java.lang.String&nbsp;enteredPath)</pre>
-<div class="block">Automatically set Java path if none is specified</div>
+<h4>getJavaPathFromSystem</h4>
+<pre>java.lang.String&nbsp;getJavaPathFromSystem(java.lang.String&nbsp;enteredPath)</pre>
+<div class="block">Checks the passed String whether it is empty, and if it is, automatically acquires the path to the users Java
+ installation and appends bin/java.exe or bin/java depending on whether the path to said installation starts with
+ Windows-typical C: prefix.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>enteredPath</code> - String. The path to check whether it is empty.</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd>String. Return the entered Java path if it is not empty. Automatically determine path if empty.</dd>
+<dd>String. Returns the passed String as is if it is not empty. Returns the automatically acquired path to the
+ Java executable/binary if the passed String was empty.</dd>
 </dl>
 </li>
 </ul>
@@ -1307,12 +1830,12 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>checkJavaPath</h4>
 <pre>boolean&nbsp;checkJavaPath(java.lang.String&nbsp;pathToJava)</pre>
-<div class="block">Checks whether the correct path to the Java installation was set.</div>
+<div class="block">Checks whether the passed String ends with <code>java.exe</code> or <code>java</code> and whether the files exist.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>pathToJava</code> - String. The path to check for java.exe or java.</dd>
+<dd><code>pathToJava</code> - String. The path to check for java.exe and java.</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd>Boolean. Returns true if the path was correctly set. False if not.</dd>
+<dd>Boolean. Returns true if the String ends with java.exe or java, and if either of these files exist.</dd>
 </dl>
 </li>
 </ul>
@@ -1323,28 +1846,30 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>checkModloader</h4>
 <pre>boolean&nbsp;checkModloader(java.lang.String&nbsp;modloader)</pre>
-<div class="block">Checks whether Forge or Fabric were specified as modloader.</div>
+<div class="block">Checks whether either Forge or Fabric were specified as the modloader.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>modloader</code> - String. Check case insensitive for Forge or Fabric.</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd>Boolean. Returns true if the specified modloader is either Forge or Fabric. False if not.</dd>
+<dd>Boolean. Returns true if the specified modloader is either Forge or Fabric. False if neither.</dd>
 </dl>
 </li>
 </ul>
-<a name="setModloader-java.lang.String-">
+<a name="setModLoaderCase-java.lang.String-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setModloader</h4>
-<pre>java.lang.String&nbsp;setModloader(java.lang.String&nbsp;modloader)</pre>
-<div class="block">Standardize the specified modloader.</div>
+<h4>setModLoaderCase</h4>
+<pre>java.lang.String&nbsp;setModLoaderCase(java.lang.String&nbsp;modloader)</pre>
+<div class="block">Ensures the modloader is normalized to first letter upper case and rest lower case. Basically allows the user to
+ input Forge or Fabric in any combination of upper- and lowercase and ServerPackCreator will still be able to
+ work with the users input.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modloader</code> - String. If any case of Forge or Fabric was specified, return "Forge" or "Fabric", so users can enter "forge" or "fabric" or any combination of upper- and lowercase letters..</dd>
+<dd><code>modloader</code> - String. The String to check for case-insensitive cases of either Forge or Fabric.</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd>String. Returns a standardized String of the specified modloader.</dd>
+<dd>String. Returns a normalized String of the specified modloader.</dd>
 </dl>
 </li>
 </ul>
@@ -1356,13 +1881,18 @@ extends java.lang.Object</pre>
 <h4>checkModloaderVersion</h4>
 <pre>boolean&nbsp;checkModloaderVersion(java.lang.String&nbsp;modloader,
                               java.lang.String&nbsp;modloaderVersion)</pre>
-<div class="block">Determine whether to check for correct Forge or correct Fabric modloader version.</div>
+<div class="block">Depending on whether Forge or Fabric was specified as the modloader, this will call the corresponding version check
+ to verify that the user correctly set their modloader version.<br>
+ If the user specified Forge as their modloader, <a href="../../../de/griefed/serverpackcreator/Configuration.html#isForgeVersionCorrect-java.lang.String-"><code>isForgeVersionCorrect(String)</code></a> is called and the version
+ the user specified is checked against Forge's version manifest..<br>
+ If the user specified Fabric as their modloader, <a href="../../../de/griefed/serverpackcreator/Configuration.html#isFabricVersionCorrect-java.lang.String-"><code>isFabricVersionCorrect(String)</code></a> is called and the version
+ the user specified is checked against Fabric's version manifest.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modloader</code> - String. Determines whether the check for Forge or Fabric is called.</dd>
-<dd><code>modloaderVersion</code> - String. The version of the modloader to check for.</dd>
+<dd><code>modloader</code> - String. The passed modloader which determines whether the check for Forge or Fabric is called.</dd>
+<dd><code>modloaderVersion</code> - String. The version of the modloader which is checked against the corresponding modloaders manifest.</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd>Boolean. Returns true if the specified modloader version is correct. False if not.</dd>
+<dd>Boolean. Returns true if the specified modloader version was found in the corresponding manifest.</dd>
 </dl>
 </li>
 </ul>
@@ -1373,12 +1903,13 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>isMinecraftVersionCorrect</h4>
 <pre>boolean&nbsp;isMinecraftVersionCorrect(java.lang.String&nbsp;minecraftVersion)</pre>
-<div class="block">Check the specified Minecraft version against Mojang's version manifest to validate the version.</div>
+<div class="block">Checks whether the passed String is empty and if it is not. check the String against Mojang's version manifest
+ to validate the version.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>minecraftVersion</code> - Minecraft version to check.</dd>
+<dd><code>minecraftVersion</code> - String. The version to check for in Mojang's version manifest.</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd>Boolean. Returns true if the specified Minecraft version could be found in Mojang's manifest. False if not.</dd>
+<dd>Boolean. Returns true if the specified Minecraft version could be found in Mojang's manifest.</dd>
 </dl>
 </li>
 </ul>
@@ -1389,12 +1920,13 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>isFabricVersionCorrect</h4>
 <pre>boolean&nbsp;isFabricVersionCorrect(java.lang.String&nbsp;fabricVersion)</pre>
-<div class="block">Check the specified Fabric version against Fabric's version manifest to validate the version.</div>
+<div class="block">Checks whether the passed String is empty and if it is not. check the String against Fabric's version manifest
+ to validate the version.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>fabricVersion</code> - String. The Fabric version to check.</dd>
+<dd><code>fabricVersion</code> - String. The version to check for in Fabric's version manifest.</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd>Boolean. Returns true if the specified Fabric version could be found in Fabric's manifest. False if not.</dd>
+<dd>Boolean. Returns true if the specified fabric version could be found in Fabric's manifest.</dd>
 </dl>
 </li>
 </ul>
@@ -1405,12 +1937,13 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>isForgeVersionCorrect</h4>
 <pre>boolean&nbsp;isForgeVersionCorrect(java.lang.String&nbsp;forgeVersion)</pre>
-<div class="block">Checks Forge version for errors (basically for its availability in Forge manifest)</div>
+<div class="block">Checks whether the passed String is empty and if it is not. check the String against Forge's version manifest
+ to validate the version.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>forgeVersion</code> - String. The Forge version to check.</dd>
+<dd><code>forgeVersion</code> - String. The version to check for in Forge's version manifest.</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd>Boolean. Returns true if Forge version correct and false if it isn't correct.</dd>
+<dd>Boolean. Returns true if the specified Forge version could be found in Forge's manifest.</dd>
 </dl>
 </li>
 </ul>
@@ -1421,10 +1954,12 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>latestFabricLoader</h4>
 <pre>private&nbsp;java.lang.String&nbsp;latestFabricLoader(java.lang.String&nbsp;modpackDir)</pre>
-<div class="block">Returns the latest installer version for the Fabric installer to be used in ServerSetup.installServer.</div>
+<div class="block">Returns the latest version for the Fabric-loader. If Fabric's version manifest should be unreachable for whatever
+ reason, version 0.11.3 is returned by default.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modpackDir</code> - String. /server_pack The directory where the Fabric installer will be placed in.</dd>
+<dd><code>modpackDir</code> - String. The Fabric-loader manifest will be stored inside the server_pack directory inside the modpack
+                   directory.</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>Boolean. Returns true if the download was successful. False if not.</dd>
 </dl>
@@ -1437,7 +1972,30 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>createConfigurationFile</h4>
 <pre>void&nbsp;createConfigurationFile()</pre>
-<div class="block">Generate new configuration file from CLI input. Prompts user to enter config file values and then generates a config file with values entered by user.</div>
+<div class="block">Walk the user through the generation of a new ServerPackCreator configuration file by asking them for input,
+ step-by-step, regarding their modpack. At the end of this method a fully configured serverpackcreator.conf file
+ is saved and any previously existing configuration file replaced by the new one.<br>
+ After every input, said input is displayed to the user and they're asked whether they are satisfied with said
+ input. The user can then decide whether they would like to restart the entry of the field they just configured,
+ or agree and move to the next one.<br>
+ At the end of this method, the user will have a newly configured and created configuration file for ServerPackCreator.<br>
+ <br>
+ Most user-input is checked after entry to ensure the configuration is already in working-condition after completion
+ of this method.<br>
+ Calls<br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#checkModpackDir-java.lang.String-"><code>checkModpackDir(String)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#readBoolean--"><code>readBoolean()</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#getFallbackModsList--"><code>getFallbackModsList()</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#readStringArray--"><code>readStringArray()</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#checkCopyDirs-java.util.List-java.lang.String-"><code>checkCopyDirs(List, String)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#isMinecraftVersionCorrect-java.lang.String-"><code>isMinecraftVersionCorrect(String)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#checkModloader-java.lang.String-"><code>checkModloader(String)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#setModLoaderCase-java.lang.String-"><code>setModLoaderCase(String)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#checkModloaderVersion-java.lang.String-java.lang.String-"><code>checkModloaderVersion(String, String)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#getJavaPathFromSystem-java.lang.String-"><code>getJavaPathFromSystem(String)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#checkJavaPath-java.lang.String-"><code>checkJavaPath(String)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#printConfig-java.lang.String-java.util.List-java.util.List-boolean-java.lang.String-java.lang.String-java.lang.String-java.lang.String-boolean-boolean-boolean-boolean-"><code>printConfig(String, List, List, boolean, String, String, String, String, boolean, boolean, boolean, boolean)</code></a><br>
+ <a href="../../../de/griefed/serverpackcreator/Configuration.html#writeConfigToFile-java.lang.String-java.lang.String-java.lang.String-boolean-java.lang.String-java.lang.String-java.lang.String-java.lang.String-boolean-boolean-boolean-boolean-java.io.File-boolean-"><code>writeConfigToFile(String, String, String, boolean, String, String, String, String, boolean, boolean, boolean, boolean, File, boolean)</code></a></div>
 </li>
 </ul>
 <a name="readStringArray--">
@@ -1447,10 +2005,12 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>readStringArray</h4>
 <pre>private&nbsp;java.util.List&lt;java.lang.String&gt;&nbsp;readStringArray()</pre>
-<div class="block">A helper method for config setup. Prompts user to enter the values that will be stored in arrays in config.</div>
+<div class="block">A helper method for <a href="../../../de/griefed/serverpackcreator/Configuration.html#createConfigurationFile--"><code>createConfigurationFile()</code></a>. Prompts the user to enter the values which will make up
+ a String List in the new configuration file. If the user enters an empty line, the method is exited and the
+ String List returned.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd>String List. Returns list with user input values that will be stored in config.</dd>
+<dd>String List. Returns the list of values entered by the user.</dd>
 </dl>
 </li>
 </ul>
@@ -1461,7 +2021,7 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>buildString</h4>
 <pre>public&nbsp;java.lang.String&nbsp;buildString(java.lang.String...&nbsp;args)</pre>
-<div class="block">Converts list of strings into concatenated string.</div>
+<div class="block">Converts a sequence of Strings, for example from a list, into a concatenated String.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>args</code> - Strings that will be concatenated into one string</dd>
@@ -1477,10 +2037,12 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>readBoolean</h4>
 <pre>private&nbsp;boolean&nbsp;readBoolean()</pre>
-<div class="block">A helper method for config setup. Prompts user to enter boolean values that will be stored in config and checks entered values to prevent storing non-boolean values in boolean variables.</div>
+<div class="block">A helper method for <a href="../../../de/griefed/serverpackcreator/Configuration.html#createConfigurationFile--"><code>createConfigurationFile()</code></a>. Prompts the user to enter values which will then be
+ converted to booleans, either <code>TRUE</code> or <code>FALSE</code>. This prevents any non-boolean values
+ from being written to the new configuration file.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd>Boolean. Converts to boolean and returns value entered by user that will be stored in config.</dd>
+<dd>Boolean. True or False, depending on user input.</dd>
 </dl>
 </li>
 </ul>
@@ -1504,22 +2066,23 @@ extends java.lang.Object</pre>
                                  boolean&nbsp;includeZip,
                                  java.io.File&nbsp;fileName,
                                  boolean&nbsp;isTemporary)</pre>
-<div class="block">Writes a new configuration file with the parameters passed to it.</div>
+<div class="block">Writes a new configuration file with the parameters passed to it.<br>
+ Calls <a href="../../../de/griefed/serverpackcreator/Configuration.html#getConfigFile--"><code>getConfigFile()</code></a><br></div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>modpackDir</code> - String. The path to the modpack.</dd>
 <dd><code>clientMods</code> - List, String. List of clientside-only mods.</dd>
 <dd><code>copyDirs</code> - List, String. List of directories to include in server pack.</dd>
-<dd><code>includeServer</code> - Boolean. Whether to include a modloader server installation.</dd>
-<dd><code>javaPath</code> - String. Path to the java executable.</dd>
+<dd><code>includeServer</code> - Boolean. Whether the modloader server software should be installed.</dd>
+<dd><code>javaPath</code> - String. Path to the java executable/binary.</dd>
 <dd><code>minecraftVersion</code> - String. Minecraft version used by the modpack and server pack.</dd>
 <dd><code>modLoader</code> - String. Modloader used by the modpack and server pack. Ether Forge or Fabric.</dd>
 <dd><code>modLoaderVersion</code> - String. Modloader version used by the modpack and server pack.</dd>
 <dd><code>includeIcon</code> - Boolean. Whether to include a server-icon in the server pack.</dd>
 <dd><code>includeProperties</code> - Boolean. Whether to include a properties file in the server pack.</dd>
 <dd><code>includeScripts</code> - Boolean. Whether to include start scripts in the server pack.</dd>
-<dd><code>includeZip</code> - Boolean. Whether to create a ZIP-archive of the server pack, excluding Mojang's Minecraft server jar.</dd>
-<dd><code>fileName</code> - The name under which to write the new file.</dd>
+<dd><code>includeZip</code> - Boolean. Whether to create a ZIP-archive of the server pack, excluding Mojang's Minecraft server JAR.</dd>
+<dd><code>fileName</code> - The name under which to write the new configuration file.</dd>
 <dd><code>isTemporary</code> - Decides whether to delete existing config-file. If isTemporary is false, existing config files will be deleted before writing the new file.</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>Boolean. Returns true if the configuration file has been successfully written and old ones replaced.</dd>
diff --git a/docs/de/griefed/serverpackcreator/CreateServerPack.html b/docs/de/griefed/serverpackcreator/CreateServerPack.html
index 51d6a84c0..27f25a256 100644
--- a/docs/de/griefed/serverpackcreator/CreateServerPack.html
+++ b/docs/de/griefed/serverpackcreator/CreateServerPack.html
@@ -109,6 +109,43 @@ var activeTableTab = "activeTableTab";
 <br>
 <pre>public class <span class="typeNameLabel">CreateServerPack</span>
 extends java.lang.Object</pre>
+<div class="block"><strong>Table of methods</strong><p>
+ 1. <a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#CreateServerPack-de.griefed.serverpackcreator.i18n.LocalizationManager-de.griefed.serverpackcreator.Configuration-de.griefed.serverpackcreator.curseforgemodpack.CurseCreateModpack-"><code>CreateServerPack(LocalizationManager, Configuration, CurseCreateModpack)</code></a><br>
+ 2. <a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#getPropertiesFile--"><code>getPropertiesFile()</code></a><br>
+ 3. <a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#getIconFile--"><code>getIconFile()</code></a><br>
+ 4. <a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#getForgeWindowsFile--"><code>getForgeWindowsFile()</code></a><br>
+ 5. <a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#getForgeLinuxFile--"><code>getForgeLinuxFile()</code></a><br>
+ 6. <a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#getFabricWindowsFile--"><code>getFabricWindowsFile()</code></a><br>
+ 7. <a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#getFabricLinuxFile--"><code>getFabricLinuxFile()</code></a><br>
+ 8. <a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#run--"><code>run()</code></a><br>
+ 9. <a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#cleanupEnvironment-java.lang.String-"><code>cleanupEnvironment(String)</code></a><br>
+ 10.<a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#copyStartScripts-java.lang.String-java.lang.String-boolean-"><code>copyStartScripts(String, String, boolean)</code></a><br>
+ 11.<a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#copyFiles-java.lang.String-java.util.List-java.util.List-"><code>copyFiles(String, List, List)</code></a><br>
+ 12.<a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#excludeClientMods-java.lang.String-java.util.List-"><code>excludeClientMods(String, List)</code></a><br>
+ 13.<a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#copyIcon-java.lang.String-"><code>copyIcon(String)</code></a><br>
+ 14.<a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#copyProperties-java.lang.String-"><code>copyProperties(String)</code></a><br>
+ 15.<a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#installServer-java.lang.String-java.lang.String-java.lang.String-java.lang.String-java.lang.String-"><code>installServer(String, String, String, String, String)</code></a><br>
+ 16.<a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#zipBuilder-java.lang.String-java.lang.String-java.lang.Boolean-java.lang.String-"><code>zipBuilder(String, String, Boolean, String)</code></a><br>
+ 17.<a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#generateDownloadScripts-java.lang.String-java.lang.String-java.lang.String-"><code>generateDownloadScripts(String, String, String)</code></a><br>
+ 18.<a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#fabricShell-java.lang.String-java.lang.String-"><code>fabricShell(String, String)</code></a><br>
+ 19.<a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#fabricBatch-java.lang.String-java.lang.String-"><code>fabricBatch(String, String)</code></a><br>
+ 20.<a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#forgeShell-java.lang.String-java.lang.String-"><code>forgeShell(String, String)</code></a><br>
+ 21.<a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#forgeBatch-java.lang.String-java.lang.String-"><code>forgeBatch(String, String)</code></a><br>
+ 22.<a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#downloadFabricJar-java.lang.String-"><code>downloadFabricJar(String)</code></a><br>
+ 23.<a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#latestFabricInstaller-java.lang.String-"><code>latestFabricInstaller(String)</code></a><br>
+ 24.<a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#downloadForgeJar-java.lang.String-java.lang.String-java.lang.String-"><code>downloadForgeJar(String, String, String)</code></a><br>
+ 25.<a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#deleteMinecraftJar-java.lang.String-java.lang.String-java.lang.String-"><code>deleteMinecraftJar(String, String, String)</code></a><br>
+ 26.<a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#cleanUpServerPack-java.io.File-java.io.File-java.lang.String-java.lang.String-java.lang.String-java.lang.String-"><code>cleanUpServerPack(File, File, String, String, String, String)</code></a>
+ <p>
+ Requires an instance of <a href="../../../de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator"><code>Configuration</code></a> from which to get all required information about the modpack and the
+ then to be generated server pack.
+ <p>
+ Requires an instance of <a href="../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n"><code>LocalizationManager</code></a> for use of localization, but creates one if injected one is null.
+ <p>
+ Create a server pack from a modpack by copying all specified or required files from the modpack to the server pack
+ as well as installing the modloader server for the specified modloader, modloader version and Minecraft version.
+ Create a ZIP-archive of the server pack, excluding the Minecraft server JAR, for immediate upload to CurseForge or
+ other platforms.</div>
 </li>
 </ul>
 </div>
@@ -136,34 +173,38 @@ extends java.lang.Object</pre>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#configuration">configuration</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseCreateModpack</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#curseCreateModpack">curseCreateModpack</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>private java.io.File</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#fabricLinuxFile">fabricLinuxFile</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private java.io.File</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#fabricWindowsFile">fabricWindowsFile</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private java.io.File</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#forgeLinuxFile">forgeLinuxFile</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private java.io.File</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#forgeWindowsFile">forgeWindowsFile</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private java.io.File</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#iconFile">iconFile</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static org.apache.logging.log4j.Logger</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#installerLogger">installerLogger</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#localizationManager">localizationManager</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private java.io.File</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#propertiesFile">propertiesFile</a></span></code>&nbsp;</td>
 </tr>
@@ -182,8 +223,12 @@ extends java.lang.Object</pre>
 <th class="colOne" scope="col">Constructor and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#CreateServerPack-de.griefed.serverpackcreator.i18n.LocalizationManager-de.griefed.serverpackcreator.Configuration-">CreateServerPack</a></span>(<a href="../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a>&nbsp;injectedLocalizationManager,
-                <a href="../../../de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a>&nbsp;injectedConfigCheck)</code>&nbsp;</td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#CreateServerPack-de.griefed.serverpackcreator.i18n.LocalizationManager-de.griefed.serverpackcreator.Configuration-de.griefed.serverpackcreator.curseforgemodpack.CurseCreateModpack-">CreateServerPack</a></span>(<a href="../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a>&nbsp;injectedLocalizationManager,
+                <a href="../../../de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a>&nbsp;injectedConfiguration,
+                <a href="../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseCreateModpack</a>&nbsp;injectedCurseCreateModpack)</code>
+<div class="block"><strong>Constructor</strong>
+ Used for Dependency Injection.</div>
+</td>
 </tr>
 </table>
 </li>
@@ -203,7 +248,8 @@ extends java.lang.Object</pre>
 <tr id="i0" class="altColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#cleanupEnvironment-java.lang.String-">cleanupEnvironment</a></span>(java.lang.String&nbsp;modpackDir)</code>
-<div class="block">Deletes files from previous runs of serverpackcreator.</div>
+<div class="block">Deletes all files, directories and ZIP-archives of previously generated server packs to ensure newly generated
+ server pack is as clean as possible.</div>
 </td>
 </tr>
 <tr id="i1" class="rowColor">
@@ -214,7 +260,7 @@ extends java.lang.Object</pre>
                  java.lang.String&nbsp;modpackDir,
                  java.lang.String&nbsp;minecraftVersion,
                  java.lang.String&nbsp;modLoaderVersion)</code>
-<div class="block">Deletes remnant files from Fabric/Forge installation no longer needed.</div>
+<div class="block">Cleans up the server_pack directory by deleting left-over files from modloader installations and version checking.</div>
 </td>
 </tr>
 <tr id="i2" class="altColor">
@@ -222,7 +268,8 @@ extends java.lang.Object</pre>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#copyFiles-java.lang.String-java.util.List-java.util.List-">copyFiles</a></span>(java.lang.String&nbsp;modpackDir,
          java.util.List&lt;java.lang.String&gt;&nbsp;copyDirs,
          java.util.List&lt;java.lang.String&gt;&nbsp;clientMods)</code>
-<div class="block">Copies all specified folders and their files to the modpackDir.</div>
+<div class="block">Copies all specified directories and mods, excluding clientside-only mods, from the modpack directory into the
+  server pack directory.</div>
 </td>
 </tr>
 <tr id="i3" class="rowColor">
@@ -242,7 +289,7 @@ extends java.lang.Object</pre>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#copyStartScripts-java.lang.String-java.lang.String-boolean-">copyStartScripts</a></span>(java.lang.String&nbsp;modpackDir,
                 java.lang.String&nbsp;modLoader,
                 boolean&nbsp;includeStartScripts)</code>
-<div class="block">Copies start scripts for Forge modloader into the server_pack folder.</div>
+<div class="block">Copies start scripts for the specified modloader into the server pack.</div>
 </td>
 </tr>
 <tr id="i6" class="altColor">
@@ -250,13 +297,13 @@ extends java.lang.Object</pre>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#deleteMinecraftJar-java.lang.String-java.lang.String-java.lang.String-">deleteMinecraftJar</a></span>(java.lang.String&nbsp;modLoader,
                   java.lang.String&nbsp;modpackDir,
                   java.lang.String&nbsp;minecraftVersion)</code>
-<div class="block">Deletes Mojang's minecraft_server.jar from the zip-archive so users do not accidentally upload a file containing software from Mojang.</div>
+<div class="block">Deletes the Minecraft server JAR from the ZIP-archive as per Mojang's TOS and EULA.</div>
 </td>
 </tr>
 <tr id="i7" class="rowColor">
 <td class="colFirst"><code>(package private) boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#downloadFabricJar-java.lang.String-">downloadFabricJar</a></span>(java.lang.String&nbsp;modpackDir)</code>
-<div class="block">Downloads the specified version of Fabric.</div>
+<div class="block">Downloads the latest Fabric installer into the server pack.</div>
 </td>
 </tr>
 <tr id="i8" class="altColor">
@@ -264,42 +311,42 @@ extends java.lang.Object</pre>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#downloadForgeJar-java.lang.String-java.lang.String-java.lang.String-">downloadForgeJar</a></span>(java.lang.String&nbsp;minecraftVersion,
                 java.lang.String&nbsp;modLoaderVersion,
                 java.lang.String&nbsp;modpackDir)</code>
-<div class="block">Downloads the specified version of the Forge installer to be used in ServerSetup.installServer.</div>
+<div class="block">Downloads the modloader server installer for Forge, for the specified modloader version.</div>
 </td>
 </tr>
 <tr id="i9" class="rowColor">
 <td class="colFirst"><code>(package private) java.util.List&lt;java.lang.String&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#excludeClientMods-java.lang.String-java.util.List-">excludeClientMods</a></span>(java.lang.String&nbsp;modsDir,
                  java.util.List&lt;java.lang.String&gt;&nbsp;clientMods)</code>
-<div class="block">Generate a list of all mods in a modpack EXCEPT clientside-only mods.</div>
+<div class="block">Generates a list of all mods to include in the server pack excluding clientside-only mods.</div>
 </td>
 </tr>
 <tr id="i10" class="altColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#fabricBatch-java.lang.String-java.lang.String-">fabricBatch</a></span>(java.lang.String&nbsp;modpackDir,
            java.lang.String&nbsp;minecraftVersion)</code>
-<div class="block">Generates download scripts for Mojang's Minecraft server for Fabric,Windows.</div>
+<div class="block">Generates Fabric Windows-Batch download scripts for Mojang's Minecraft server JAR for the specified Minecraft version.</div>
 </td>
 </tr>
 <tr id="i11" class="rowColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#fabricShell-java.lang.String-java.lang.String-">fabricShell</a></span>(java.lang.String&nbsp;modpackDir,
            java.lang.String&nbsp;minecraftVersion)</code>
-<div class="block">Generates download scripts for Mojang's Minecraft server for Fabric,Linux.</div>
+<div class="block">Generates Fabric Linux-shell download scripts for Mojang's Minecraft server JAR for the specified Minecraft version.</div>
 </td>
 </tr>
 <tr id="i12" class="altColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#forgeBatch-java.lang.String-java.lang.String-">forgeBatch</a></span>(java.lang.String&nbsp;modpackDir,
           java.lang.String&nbsp;minecraftVersion)</code>
-<div class="block">Generates download scripts for Mojang's Minecraft server for Forge,Windows.</div>
+<div class="block">Generates Forge Windows-Batch download scripts for Mojang's Minecraft server JAR for the specified Minecraft version.</div>
 </td>
 </tr>
 <tr id="i13" class="rowColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#forgeShell-java.lang.String-java.lang.String-">forgeShell</a></span>(java.lang.String&nbsp;modpackDir,
           java.lang.String&nbsp;minecraftVersion)</code>
-<div class="block">Generates download scripts for Mojang's Minecraft server for Forge,Linux.</div>
+<div class="block">Generates Forge Linux-shell download scripts for Mojang's Minecraft server JAR for the specified Minecraft version.</div>
 </td>
 </tr>
 <tr id="i14" class="altColor">
@@ -307,32 +354,45 @@ extends java.lang.Object</pre>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#generateDownloadScripts-java.lang.String-java.lang.String-java.lang.String-">generateDownloadScripts</a></span>(java.lang.String&nbsp;modLoader,
                        java.lang.String&nbsp;modpackDir,
                        java.lang.String&nbsp;minecraftVersion)</code>
-<div class="block">Calls methods for generating download scripts for Mojang's Minecraft server depending on the specified versions and modloader.</div>
+<div class="block">Depending on the specified modloader and Minecraft version, this method makes calls to generate the corresponding
+ download scripts for the Minecraft server JAR.</div>
 </td>
 </tr>
 <tr id="i15" class="rowColor">
 <td class="colFirst"><code>java.io.File</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#getFabricLinuxFile--">getFabricLinuxFile</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#getFabricLinuxFile--">getFabricLinuxFile</a></span>()</code>
+<div class="block">Getter for start-fabric.sh.</div>
+</td>
 </tr>
 <tr id="i16" class="altColor">
 <td class="colFirst"><code>java.io.File</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#getFabricWindowsFile--">getFabricWindowsFile</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#getFabricWindowsFile--">getFabricWindowsFile</a></span>()</code>
+<div class="block">Getter for start-fabric.bat.</div>
+</td>
 </tr>
 <tr id="i17" class="rowColor">
 <td class="colFirst"><code>java.io.File</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#getForgeLinuxFile--">getForgeLinuxFile</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#getForgeLinuxFile--">getForgeLinuxFile</a></span>()</code>
+<div class="block">Getter for start-forge.sh</div>
+</td>
 </tr>
 <tr id="i18" class="altColor">
 <td class="colFirst"><code>java.io.File</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#getForgeWindowsFile--">getForgeWindowsFile</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#getForgeWindowsFile--">getForgeWindowsFile</a></span>()</code>
+<div class="block">Getter for start-forge.bat.</div>
+</td>
 </tr>
 <tr id="i19" class="rowColor">
 <td class="colFirst"><code>java.io.File</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#getIconFile--">getIconFile</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#getIconFile--">getIconFile</a></span>()</code>
+<div class="block">Getter for server-icon.png</div>
+</td>
 </tr>
 <tr id="i20" class="altColor">
 <td class="colFirst"><code>java.io.File</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#getPropertiesFile--">getPropertiesFile</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#getPropertiesFile--">getPropertiesFile</a></span>()</code>
+<div class="block">Getter for server.properties.</div>
+</td>
 </tr>
 <tr id="i21" class="rowColor">
 <td class="colFirst"><code>(package private) void</code></td>
@@ -341,19 +401,19 @@ extends java.lang.Object</pre>
              java.lang.String&nbsp;minecraftVersion,
              java.lang.String&nbsp;modLoaderVersion,
              java.lang.String&nbsp;javaPath)</code>
-<div class="block">Installs the files for a Forge/Fabric server.</div>
+<div class="block">Installs the modloader server for the specified modloader, modloader version and Minecraft version.</div>
 </td>
 </tr>
 <tr id="i22" class="altColor">
 <td class="colFirst"><code>(package private) java.lang.String</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#latestFabricInstaller-java.lang.String-">latestFabricInstaller</a></span>(java.lang.String&nbsp;modpackDir)</code>
-<div class="block">Returns the latest installer version for the Fabric installer to be used in ServerSetup.installServer.</div>
+<div class="block">Acquires the latest version of the Fabric modloader installer and returns it as a string.</div>
 </td>
 </tr>
 <tr id="i23" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#run--">run</a></span>()</code>
-<div class="block">Run when serverpackcreator is run in either -cli or -cgen mode.</div>
+<div class="block">Create a server pack if the check of the configuration file was successfull.</div>
 </td>
 </tr>
 <tr id="i24" class="altColor">
@@ -362,7 +422,7 @@ extends java.lang.Object</pre>
           java.lang.String&nbsp;modLoader,
           java.lang.Boolean&nbsp;includeServerInstallation,
           java.lang.String&nbsp;minecraftVersion)</code>
-<div class="block">Create a zip-archive of the serverpack, excluding Mojang's minecraft_server.jar.</div>
+<div class="block">Creates a ZIP-archive of the server_pack directory and deletes the Minecraft server JAR afterwards.</div>
 </td>
 </tr>
 </table>
@@ -414,6 +474,15 @@ extends java.lang.Object</pre>
 <pre>private&nbsp;<a href="../../../de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a> configuration</pre>
 </li>
 </ul>
+<a name="curseCreateModpack">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>curseCreateModpack</h4>
+<pre>private&nbsp;<a href="../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseCreateModpack</a> curseCreateModpack</pre>
+</li>
+</ul>
 <a name="localizationManager">
 <!--   -->
 </a>
@@ -485,14 +554,29 @@ extends java.lang.Object</pre>
 <!--   -->
 </a>
 <h3>Constructor Detail</h3>
-<a name="CreateServerPack-de.griefed.serverpackcreator.i18n.LocalizationManager-de.griefed.serverpackcreator.Configuration-">
+<a name="CreateServerPack-de.griefed.serverpackcreator.i18n.LocalizationManager-de.griefed.serverpackcreator.Configuration-de.griefed.serverpackcreator.curseforgemodpack.CurseCreateModpack-">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>CreateServerPack</h4>
 <pre>public&nbsp;CreateServerPack(<a href="../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a>&nbsp;injectedLocalizationManager,
-                        <a href="../../../de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a>&nbsp;injectedConfigCheck)</pre>
+                        <a href="../../../de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a>&nbsp;injectedConfiguration,
+                        <a href="../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseCreateModpack</a>&nbsp;injectedCurseCreateModpack)</pre>
+<div class="block"><strong>Constructor</strong><p>
+ Used for Dependency Injection.<p>
+ Receives an instance of <a href="../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n"><code>LocalizationManager</code></a> or creates one if the received
+ one is null. Required for use of localization.<p>
+ Receives an instance of <a href="../../../de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator"><code>Configuration</code></a> required to successfully and correctly create the server pack.<p>
+ Receives an instance of <a href="../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><code>CurseCreateModpack</code></a> in case the modpack has to be created from a combination of
+ CurseForge projectID and fileID, from which to <em>then</em> create the server pack.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>injectedLocalizationManager</code> - Instance of <a href="../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n"><code>LocalizationManager</code></a> required for localized log messages.</dd>
+<dd><code>injectedConfiguration</code> - Instance of <a href="../../../de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator"><code>Configuration</code></a> required to successfully and correctly create the server pack.</dd>
+<dd><code>injectedCurseCreateModpack</code> - Instance of <a href="../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><code>CurseCreateModpack</code></a> in case the modpack has to be created from a combination of
+ CurseForge projectID and fileID, from which to <em>then</em> create the server pack.</dd>
+</dl>
 </li>
 </ul>
 </li>
@@ -510,6 +594,11 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>getPropertiesFile</h4>
 <pre>public&nbsp;java.io.File&nbsp;getPropertiesFile()</pre>
+<div class="block">Getter for server.properties.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Returns the server.properties-file for use in <a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#copyProperties-java.lang.String-"><code>copyProperties(String)</code></a></dd>
+</dl>
 </li>
 </ul>
 <a name="getIconFile--">
@@ -519,6 +608,11 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>getIconFile</h4>
 <pre>public&nbsp;java.io.File&nbsp;getIconFile()</pre>
+<div class="block">Getter for server-icon.png</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Returns the server-icon.png-file for use in <a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#copyIcon-java.lang.String-"><code>copyIcon(String)</code></a></dd>
+</dl>
 </li>
 </ul>
 <a name="getForgeWindowsFile--">
@@ -528,6 +622,11 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>getForgeWindowsFile</h4>
 <pre>public&nbsp;java.io.File&nbsp;getForgeWindowsFile()</pre>
+<div class="block">Getter for start-forge.bat.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Returns the start-forge.bat-file for use in <a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#copyStartScripts-java.lang.String-java.lang.String-boolean-"><code>copyStartScripts(String, String, boolean)</code></a></dd>
+</dl>
 </li>
 </ul>
 <a name="getForgeLinuxFile--">
@@ -537,6 +636,11 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>getForgeLinuxFile</h4>
 <pre>public&nbsp;java.io.File&nbsp;getForgeLinuxFile()</pre>
+<div class="block">Getter for start-forge.sh</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Returns the start-forge.sh-file for use in <a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#copyStartScripts-java.lang.String-java.lang.String-boolean-"><code>copyStartScripts(String, String, boolean)</code></a></dd>
+</dl>
 </li>
 </ul>
 <a name="getFabricWindowsFile--">
@@ -546,6 +650,11 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>getFabricWindowsFile</h4>
 <pre>public&nbsp;java.io.File&nbsp;getFabricWindowsFile()</pre>
+<div class="block">Getter for start-fabric.bat.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Returns the start-fabric.bat-file for use in <a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#copyStartScripts-java.lang.String-java.lang.String-boolean-"><code>copyStartScripts(String, String, boolean)</code></a></dd>
+</dl>
 </li>
 </ul>
 <a name="getFabricLinuxFile--">
@@ -555,6 +664,11 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>getFabricLinuxFile</h4>
 <pre>public&nbsp;java.io.File&nbsp;getFabricLinuxFile()</pre>
+<div class="block">Getter for start-fabric.sh.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Returns the start-fabric.sh-file for use in <a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#copyStartScripts-java.lang.String-java.lang.String-boolean-"><code>copyStartScripts(String, String, boolean)</code></a></dd>
+</dl>
 </li>
 </ul>
 <a name="run--">
@@ -564,10 +678,22 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>run</h4>
 <pre>public&nbsp;boolean&nbsp;run()</pre>
-<div class="block">Run when serverpackcreator is run in either -cli or -cgen mode. Runs what used to be the main content in Main in pre-1.x.x. times. Inits config checks and, if config checks are successfull, calls methods to create the server pack.</div>
+<div class="block">Create a server pack if the check of the configuration file was successfull.<p>
+ Calls<p>
+ <a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#cleanupEnvironment-java.lang.String-"><code>cleanupEnvironment(String)</code></a> to delete any previously generated server packs or ZIP-archives thereof.<p>
+ <a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#copyFiles-java.lang.String-java.util.List-java.util.List-"><code>copyFiles(String, List, List)</code></a> to copy all specified directories and mods, excluding clientside-only mods,
+ to the server pack.<p>
+ <a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#copyStartScripts-java.lang.String-java.lang.String-boolean-"><code>copyStartScripts(String, String, boolean)</code></a> to copy the start scripts for the specified modloader to the
+ server pack.<p>
+ <a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#installServer-java.lang.String-java.lang.String-java.lang.String-java.lang.String-java.lang.String-"><code>installServer(String, String, String, String, String)</code></a> to install the server software for the specified
+ modloader, modloader version and Minecraft version in the server pack.<p>
+ <a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#copyIcon-java.lang.String-"><code>copyIcon(String)</code></a> to copy the server-icon.png to the server pack.<p>
+ <a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#copyProperties-java.lang.String-"><code>copyProperties(String)</code></a> to copy the server.properties to the server pack.<p>
+ <a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#zipBuilder-java.lang.String-java.lang.String-java.lang.Boolean-java.lang.String-"><code>zipBuilder(String, String, Boolean, String)</code></a> to create a ZIP-archive of the server pack and delete the
+ Minecraft server JAR from it.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd>Return true if the serverpack was successfully generated, false if not.</dd>
+<dd>Boolean. Returns true if the server pack was successfully generated.</dd>
 </dl>
 </li>
 </ul>
@@ -578,10 +704,11 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>cleanupEnvironment</h4>
 <pre>void&nbsp;cleanupEnvironment(java.lang.String&nbsp;modpackDir)</pre>
-<div class="block">Deletes files from previous runs of serverpackcreator.</div>
+<div class="block">Deletes all files, directories and ZIP-archives of previously generated server packs to ensure newly generated
+ server pack is as clean as possible.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modpackDir</code> - String. The directory in where to check for files from previous runs.</dd>
+<dd><code>modpackDir</code> - String. The server_pack directory and ZIP-archive will be deleted inside the modpack directory.</dd>
 </dl>
 </li>
 </ul>
@@ -594,12 +721,12 @@ extends java.lang.Object</pre>
 <pre>void&nbsp;copyStartScripts(java.lang.String&nbsp;modpackDir,
                       java.lang.String&nbsp;modLoader,
                       boolean&nbsp;includeStartScripts)</pre>
-<div class="block">Copies start scripts for Forge modloader into the server_pack folder.</div>
+<div class="block">Copies start scripts for the specified modloader into the server pack.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modpackDir</code> - String. Files will be copied into subfolder server_pack. Checks for valid modpackDir are in ConfigCheck.</dd>
-<dd><code>modLoader</code> - String. Determines whether start scripts for Forge or Fabric are copied to modpackDir. Checks for valid modLoader are in ConfigCheck.</dd>
-<dd><code>includeStartScripts</code> - Boolean. Whether to include start scripts in server_pack. Boolean.</dd>
+<dd><code>modpackDir</code> - String. Start scripts are copied into the server_pack directory in the modpack directory.</dd>
+<dd><code>modLoader</code> - String. Whether to copy the Forge or Fabric scripts into the server pack.</dd>
+<dd><code>includeStartScripts</code> - Boolean. Whether to copy the start scripts into the server pack.</dd>
 </dl>
 </li>
 </ul>
@@ -611,16 +738,16 @@ extends java.lang.Object</pre>
 <h4>copyFiles</h4>
 <pre>void&nbsp;copyFiles(java.lang.String&nbsp;modpackDir,
                java.util.List&lt;java.lang.String&gt;&nbsp;copyDirs,
-               java.util.List&lt;java.lang.String&gt;&nbsp;clientMods)
-        throws java.io.IOException</pre>
-<div class="block">Copies all specified folders and their files to the modpackDir.</div>
+               java.util.List&lt;java.lang.String&gt;&nbsp;clientMods)</pre>
+<div class="block">Copies all specified directories and mods, excluding clientside-only mods, from the modpack directory into the
+  server pack directory.
+ Calls <a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#excludeClientMods-java.lang.String-java.util.List-"><code>excludeClientMods(String, List)</code></a> to generate a list of all mods to copy to server pack, excluding
+ clientside-only mods.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modpackDir</code> - String. /server_pack. Directory where all directories listed in copyDirs will be copied into.</dd>
-<dd><code>copyDirs</code> - String List. The folders and files within to copy.</dd>
-<dd><code>clientMods</code> - String List. List of clientside-only mods NOT to copy to server pack.</dd>
-<dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code>java.io.IOException</code> - Only print stacktrace if it does not start with java.nio.file.DirectoryNotEmptyException.</dd>
+<dd><code>modpackDir</code> - String. Files and directories are copied into the server_pack directory inside the modpack directory.</dd>
+<dd><code>copyDirs</code> - String List. All directories and files therein to copy to the server pack.</dd>
+<dd><code>clientMods</code> - String List. List of clientside-only mods to exclude from the server pack.</dd>
 </dl>
 </li>
 </ul>
@@ -632,13 +759,13 @@ extends java.lang.Object</pre>
 <h4>excludeClientMods</h4>
 <pre>java.util.List&lt;java.lang.String&gt;&nbsp;excludeClientMods(java.lang.String&nbsp;modsDir,
                                                    java.util.List&lt;java.lang.String&gt;&nbsp;clientMods)</pre>
-<div class="block">Generate a list of all mods in a modpack EXCEPT clientside-only mods. This list is then used by copyFiles.</div>
+<div class="block">Generates a list of all mods to include in the server pack excluding clientside-only mods.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modsDir</code> - String. /mods The directory in which to generate a list of all available mods.</dd>
-<dd><code>clientMods</code> - List String. A list of all clientside-only mods passed by copyFiles, which is then removed from the list generated in this method.</dd>
+<dd><code>modsDir</code> - String. The mods directory of the modpack of which to generate a list of all it's contents.</dd>
+<dd><code>clientMods</code> - List String. A list of all clientside-only mods.</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd>List String. A list of all mods inside the modpack excluding the specified clientside-only mods.</dd>
+<dd>List String. A list of all mods to include in the server pack.</dd>
 </dl>
 </li>
 </ul>
@@ -652,7 +779,7 @@ extends java.lang.Object</pre>
 <div class="block">Copies the server-icon.png into server_pack.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modpackDir</code> - String. /server_pack. Directory where the server-icon.png will be copied to.</dd>
+<dd><code>modpackDir</code> - String. The server-icon.png is copied into the server_pack directory inside the modpack directory.</dd>
 </dl>
 </li>
 </ul>
@@ -666,7 +793,7 @@ extends java.lang.Object</pre>
 <div class="block">Copies the server.properties into server_pack.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modpackDir</code> - String. /server_pack. Directory where the server.properties. will be copied to.</dd>
+<dd><code>modpackDir</code> - String. The server.properties file is copied into the server_pack directory inside the modpack directory.</dd>
 </dl>
 </li>
 </ul>
@@ -681,14 +808,22 @@ extends java.lang.Object</pre>
                    java.lang.String&nbsp;minecraftVersion,
                    java.lang.String&nbsp;modLoaderVersion,
                    java.lang.String&nbsp;javaPath)</pre>
-<div class="block">Installs the files for a Forge/Fabric server.</div>
+<div class="block">Installs the modloader server for the specified modloader, modloader version and Minecraft version.
+ Calls<p>
+ <a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#downloadFabricJar-java.lang.String-"><code>downloadFabricJar(String)</code></a> to download the Fabric installer into the server_pack directory.<p>
+ <a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#downloadForgeJar-java.lang.String-java.lang.String-java.lang.String-"><code>downloadForgeJar(String, String, String)</code></a> to download the Forge installer for the specified Forge version
+ and Minecraft version.<p>
+ <a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#generateDownloadScripts-java.lang.String-java.lang.String-java.lang.String-"><code>generateDownloadScripts(String, String, String)</code></a> to generate the download scripts of the Minecraft server JAR
+ for the specified Minecraft version and file-name depending on whether the modloader is Forge or Fabric.<p>
+ <a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#cleanUpServerPack-java.io.File-java.io.File-java.lang.String-java.lang.String-java.lang.String-java.lang.String-"><code>cleanUpServerPack(File, File, String, String, String, String)</code></a> to delete no longer needed files generated
+ by the installation process of the modloader server software.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modLoader</code> - String. The modloader for which to install the server.</dd>
-<dd><code>modpackDir</code> - String. /server_pack The directory where the modloader server will be installed in.</dd>
+<dd><code>modLoader</code> - String. The modloader for which to install the server software. Either Forge or Fabric.</dd>
+<dd><code>modpackDir</code> - String. The server software is installed into the server_pack directory inside the modpack directory.</dd>
 <dd><code>minecraftVersion</code> - String. The Minecraft version for which to install the modloader and Minecraft server.</dd>
 <dd><code>modLoaderVersion</code> - String. The modloader version for which to install the modloader and Minecraft server.</dd>
-<dd><code>javaPath</code> - String. Path to Java installation needed to execute the Fabric and Forge installers.</dd>
+<dd><code>javaPath</code> - String. The path to the Java executable/binary which is needed to execute the Forge/Fabric installers.</dd>
 </dl>
 </li>
 </ul>
@@ -702,14 +837,17 @@ extends java.lang.Object</pre>
                 java.lang.String&nbsp;modLoader,
                 java.lang.Boolean&nbsp;includeServerInstallation,
                 java.lang.String&nbsp;minecraftVersion)</pre>
-<div class="block">Create a zip-archive of the serverpack, excluding Mojang's minecraft_server.jar.
- With help from https://stackoverflow.com/questions/1091788/how-to-create-a-zip-file-in-java</div>
+<div class="block">Creates a ZIP-archive of the server_pack directory and deletes the Minecraft server JAR afterwards.<p>
+ With help from <a href="https://stackoverflow.com/questions/1091788/how-to-create-a-zip-file-in-java">Stackoverflow</a><p>
+ Calls<p>
+ <a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#deleteMinecraftJar-java.lang.String-java.lang.String-java.lang.String-"><code>deleteMinecraftJar(String, String, String)</code></a> to delete the Minecraft server JAR from the ZIP-archive,
+ depending on which modloader and Minecraft version is specified.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modpackDir</code> - String. The directory where the zip-archive will be created and saved in.</dd>
-<dd><code>modLoader</code> - String. Determines the name of Minecraft#s server jar which will be deleted from the zip-archive.</dd>
-<dd><code>includeServerInstallation</code> - Boolean. Determines whether the Minecraft server jar needs to be deleted from the zip-archive.</dd>
-<dd><code>minecraftVersion</code> - String. The Minecraft version of which to delete the server jar. Used if modloader is Forge.</dd>
+<dd><code>modpackDir</code> - String. The directory server_pack will be zipped and placed inside the modpack directory.</dd>
+<dd><code>modLoader</code> - String. Determines the name of the Minecraft server JAR to delete from the ZIP-archive.</dd>
+<dd><code>includeServerInstallation</code> - Boolean. Determines whether the Minecraft server JAR needs to be deleted from the ZIP-archive.</dd>
+<dd><code>minecraftVersion</code> - String. Determines the name of the Minecraft server JAR to delete from the ZIP-archive if the modloader is Forge.</dd>
 </dl>
 </li>
 </ul>
@@ -722,12 +860,18 @@ extends java.lang.Object</pre>
 <pre>void&nbsp;generateDownloadScripts(java.lang.String&nbsp;modLoader,
                              java.lang.String&nbsp;modpackDir,
                              java.lang.String&nbsp;minecraftVersion)</pre>
-<div class="block">Calls methods for generating download scripts for Mojang's Minecraft server depending on the specified versions and modloader.</div>
+<div class="block">Depending on the specified modloader and Minecraft version, this method makes calls to generate the corresponding
+ download scripts for the Minecraft server JAR.<p>
+ Calls<p>
+ <a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#fabricShell-java.lang.String-java.lang.String-"><code>fabricShell(String, String)</code></a> if the modloader is Fabric.
+ <a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#fabricBatch-java.lang.String-java.lang.String-"><code>fabricBatch(String, String)</code></a> if the modloader is Fabric.
+ <a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#forgeShell-java.lang.String-java.lang.String-"><code>forgeShell(String, String)</code></a> if the modloader is Forge.
+ <a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#forgeBatch-java.lang.String-java.lang.String-"><code>forgeBatch(String, String)</code></a> if the modloader is Forge.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modLoader</code> - String. The specified modloader determines the name under which Mojang's server jar will be downloaded as.</dd>
-<dd><code>modpackDir</code> - String. /server_pack The directory where the scripts will be placed in.</dd>
-<dd><code>minecraftVersion</code> - String. The version of the Minecraft server jar to download.</dd>
+<dd><code>modLoader</code> - String. Determines whether the scripts are generated for Forge or Fabric.</dd>
+<dd><code>modpackDir</code> - String. The scripts are generated in the server_pack directory inside the modpack directory.</dd>
+<dd><code>minecraftVersion</code> - String. Determines the Minecraft version for which the scripts are generated.</dd>
 </dl>
 </li>
 </ul>
@@ -739,11 +883,11 @@ extends java.lang.Object</pre>
 <h4>fabricShell</h4>
 <pre>void&nbsp;fabricShell(java.lang.String&nbsp;modpackDir,
                  java.lang.String&nbsp;minecraftVersion)</pre>
-<div class="block">Generates download scripts for Mojang's Minecraft server for Fabric,Linux.</div>
+<div class="block">Generates Fabric Linux-shell download scripts for Mojang's Minecraft server JAR for the specified Minecraft version.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modpackDir</code> - String. /server_pack The directory where the scripts will be placed in.</dd>
-<dd><code>minecraftVersion</code> - String. The version of the Minecraft server jar to download.</dd>
+<dd><code>modpackDir</code> - String. The script is generated in the server_pack directory inside the modpack directory.</dd>
+<dd><code>minecraftVersion</code> - String. The Minecraft version for which to download the server JAR.</dd>
 </dl>
 </li>
 </ul>
@@ -755,11 +899,11 @@ extends java.lang.Object</pre>
 <h4>fabricBatch</h4>
 <pre>void&nbsp;fabricBatch(java.lang.String&nbsp;modpackDir,
                  java.lang.String&nbsp;minecraftVersion)</pre>
-<div class="block">Generates download scripts for Mojang's Minecraft server for Fabric,Windows.</div>
+<div class="block">Generates Fabric Windows-Batch download scripts for Mojang's Minecraft server JAR for the specified Minecraft version.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modpackDir</code> - String. /server_pack The directory where the scripts will be placed in.</dd>
-<dd><code>minecraftVersion</code> - String. The version of the Minecraft server jar to download.</dd>
+<dd><code>modpackDir</code> - String. The script is generated in the server_pack directory inside the modpack directory.</dd>
+<dd><code>minecraftVersion</code> - String. The Minecraft version for which to download the server JAR.</dd>
 </dl>
 </li>
 </ul>
@@ -771,11 +915,11 @@ extends java.lang.Object</pre>
 <h4>forgeShell</h4>
 <pre>void&nbsp;forgeShell(java.lang.String&nbsp;modpackDir,
                 java.lang.String&nbsp;minecraftVersion)</pre>
-<div class="block">Generates download scripts for Mojang's Minecraft server for Forge,Linux.</div>
+<div class="block">Generates Forge Linux-shell download scripts for Mojang's Minecraft server JAR for the specified Minecraft version.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modpackDir</code> - String. /server_pack The directory where the scripts will be placed in.</dd>
-<dd><code>minecraftVersion</code> - String. The version of the Minecraft server jar to download.</dd>
+<dd><code>modpackDir</code> - String. The script is generated in the server_pack directory inside the modpack directory.</dd>
+<dd><code>minecraftVersion</code> - String. The Minecraft version for which to download the server JAR.</dd>
 </dl>
 </li>
 </ul>
@@ -787,11 +931,11 @@ extends java.lang.Object</pre>
 <h4>forgeBatch</h4>
 <pre>void&nbsp;forgeBatch(java.lang.String&nbsp;modpackDir,
                 java.lang.String&nbsp;minecraftVersion)</pre>
-<div class="block">Generates download scripts for Mojang's Minecraft server for Forge,Windows.</div>
+<div class="block">Generates Forge Windows-Batch download scripts for Mojang's Minecraft server JAR for the specified Minecraft version.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modpackDir</code> - String. /server_pack The directory where the scripts will be placed in.</dd>
-<dd><code>minecraftVersion</code> - String. The version of the Minecraft server jar to download.</dd>
+<dd><code>modpackDir</code> - String. The script is generated in the server_pack directory inside the modpack directory.</dd>
+<dd><code>minecraftVersion</code> - String. The Minecraft version for which to download the server JAR.</dd>
 </dl>
 </li>
 </ul>
@@ -802,12 +946,14 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>downloadFabricJar</h4>
 <pre>boolean&nbsp;downloadFabricJar(java.lang.String&nbsp;modpackDir)</pre>
-<div class="block">Downloads the specified version of Fabric.</div>
+<div class="block">Downloads the latest Fabric installer into the server pack.<p>
+ Calls<p>
+ <a href="../../../de/griefed/serverpackcreator/CreateServerPack.html#latestFabricInstaller-java.lang.String-"><code>latestFabricInstaller(String)</code></a> to acquire the latest version of the Fabric installer.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modpackDir</code> - String. /server_pack The directory where the Fabric installer will be placed in.</dd>
+<dd><code>modpackDir</code> - String. The Fabric installer is downloaded into the server_pack directory inside the modpack directory.</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd>Boolean. Returns true if the download was successful. False if not.</dd>
+<dd>Boolean. Returns true if the download was successfull.</dd>
 </dl>
 </li>
 </ul>
@@ -818,12 +964,14 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>latestFabricInstaller</h4>
 <pre>java.lang.String&nbsp;latestFabricInstaller(java.lang.String&nbsp;modpackDir)</pre>
-<div class="block">Returns the latest installer version for the Fabric installer to be used in ServerSetup.installServer.</div>
+<div class="block">Acquires the latest version of the Fabric modloader installer and returns it as a string. If acquisition of the
+ latest version fails, version 0.7.2 is returned by default.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modpackDir</code> - String. /server_pack The directory where the Fabric installer will be placed in.</dd>
+<dd><code>modpackDir</code> - String. The fabric-installer.xml-file is saved inside the server_pack directory inside the modpack
+ directory.</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd>Boolean. Returns true if the download was successful. False if not.</dd>
+<dd>String. Returns the version of the latest Fabric modloader installer.</dd>
 </dl>
 </li>
 </ul>
@@ -836,14 +984,14 @@ extends java.lang.Object</pre>
 <pre>boolean&nbsp;downloadForgeJar(java.lang.String&nbsp;minecraftVersion,
                          java.lang.String&nbsp;modLoaderVersion,
                          java.lang.String&nbsp;modpackDir)</pre>
-<div class="block">Downloads the specified version of the Forge installer to be used in ServerSetup.installServer.</div>
+<div class="block">Downloads the modloader server installer for Forge, for the specified modloader version.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>minecraftVersion</code> - String. The Minecraft version corresponding to the Forge version. Minecraft version and Forge version build a pair.</dd>
-<dd><code>modLoaderVersion</code> - String. The Forge version corresponding to the Minecraft version. Minecraft version and Forge version build a pair.</dd>
-<dd><code>modpackDir</code> - String. /server_pack The directory where the Forge installer will be placed in.</dd>
+<dd><code>minecraftVersion</code> - String. The Minecraft version for which to download the modloader server installer.</dd>
+<dd><code>modLoaderVersion</code> - String. The Forge version for which to download the modloader server installer.</dd>
+<dd><code>modpackDir</code> - String. The modloader installer is downloaded to the server_pack directory inside the modloader directory.</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd>Boolean. Returns true if the download was successful. False if not.</dd>
+<dd>Boolean. Returns true if the download was successful.</dd>
 </dl>
 </li>
 </ul>
@@ -856,13 +1004,14 @@ extends java.lang.Object</pre>
 <pre>void&nbsp;deleteMinecraftJar(java.lang.String&nbsp;modLoader,
                         java.lang.String&nbsp;modpackDir,
                         java.lang.String&nbsp;minecraftVersion)</pre>
-<div class="block">Deletes Mojang's minecraft_server.jar from the zip-archive so users do not accidentally upload a file containing software from Mojang.
- With help from https://stackoverflow.com/questions/5244963/delete-files-from-a-zip-archive-without-decompressing-in-java-or-maybe-python and https://bugs.openjdk.java.net/browse/JDK-8186227</div>
+<div class="block">Deletes the Minecraft server JAR from the ZIP-archive as per Mojang's TOS and EULA.
+ With help from <a href=https://stackoverflow.com/questions/5244963/delete-files-from-a-zip-archive-without-decompressing-in-java-or-maybe-python>Stackoverflow</a>
+ and <a href=https://bugs.openjdk.java.net/browse/JDK-8186227>OpenJDK Bugtracker</a>.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modLoader</code> - String. Determines the name of the file to delete.</dd>
-<dd><code>modpackDir</code> - String. /server_pack The directory in which the file will be deleted.</dd>
-<dd><code>minecraftVersion</code> - String. The Minecraft version of which to delete the server jar. Used if modloader is Forge.</dd>
+<dd><code>modLoader</code> - String. The name of the Minecraft server JAR depends on the modloader used.</dd>
+<dd><code>modpackDir</code> - String. The directory in which the ZIP-archive is stored.</dd>
+<dd><code>minecraftVersion</code> - String. The name of the Minecraft server JAR depends on the Minecraft version if the modloader is Forge.</dd>
 </dl>
 </li>
 </ul>
@@ -878,15 +1027,15 @@ extends java.lang.Object</pre>
                        java.lang.String&nbsp;modpackDir,
                        java.lang.String&nbsp;minecraftVersion,
                        java.lang.String&nbsp;modLoaderVersion)</pre>
-<div class="block">Deletes remnant files from Fabric/Forge installation no longer needed.</div>
+<div class="block">Cleans up the server_pack directory by deleting left-over files from modloader installations and version checking.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>fabricInstaller</code> - File. Fabric installer to be deleted.</dd>
-<dd><code>forgeInstaller</code> - File. Forge installer to be deleted.</dd>
+<dd><code>fabricInstaller</code> - File. The Fabric installer file which is to be deleted.</dd>
+<dd><code>forgeInstaller</code> - File. The Forge installer file which is to be deleted.</dd>
 <dd><code>modLoader</code> - String. Whether Forge or Fabric files are to be deleted.</dd>
-<dd><code>modpackDir</code> - String. /server_pack The directory where files are to be deleted.</dd>
-<dd><code>minecraftVersion</code> - String. Needed for renaming the Forge server jar to work with launch scripts provided by serverpackcreator.</dd>
-<dd><code>modLoaderVersion</code> - String. Needed for renaming the Forge server jar to work with launch scripts provided by serverpackcreator.</dd>
+<dd><code>modpackDir</code> - String. Cleanup tasks are done inside the server_pack directory inside the modpack directory.</dd>
+<dd><code>minecraftVersion</code> - String. Needed for renaming the Forge server JAR to work with launch scripts provided by ServerPackCreator.</dd>
+<dd><code>modLoaderVersion</code> - String. Needed for renaming the Forge server JAR to work with launch scripts provided by ServerPackCreator.</dd>
 </dl>
 </li>
 </ul>
diff --git a/docs/de/griefed/serverpackcreator/FilesSetup.html b/docs/de/griefed/serverpackcreator/FilesSetup.html
index 34c6204fe..f64d2bf42 100644
--- a/docs/de/griefed/serverpackcreator/FilesSetup.html
+++ b/docs/de/griefed/serverpackcreator/FilesSetup.html
@@ -109,6 +109,40 @@ var activeTableTab = "activeTableTab";
 <br>
 <pre>public class <span class="typeNameLabel">FilesSetup</span>
 extends java.lang.Object</pre>
+<div class="block"><strong>Table of methods</strong>
+ <p>
+ 1. <a href="../../../de/griefed/serverpackcreator/FilesSetup.html#FilesSetup-de.griefed.serverpackcreator.i18n.LocalizationManager-"><code>FilesSetup(LocalizationManager)</code></a><br>
+ 2. <a href="../../../de/griefed/serverpackcreator/FilesSetup.html#getConfigFile--"><code>getConfigFile()</code></a><br>
+ 3. <a href="../../../de/griefed/serverpackcreator/FilesSetup.html#getOldConfigFile--"><code>getOldConfigFile()</code></a><br>
+ 4. <a href="../../../de/griefed/serverpackcreator/FilesSetup.html#getPropertiesFile--"><code>getPropertiesFile()</code></a><br>
+ 5. <a href="../../../de/griefed/serverpackcreator/FilesSetup.html#getIconFile--"><code>getIconFile()</code></a><br>
+ 6. <a href="../../../de/griefed/serverpackcreator/FilesSetup.html#getForgeWindowsFile--"><code>getForgeWindowsFile()</code></a><br>
+ 7. <a href="../../../de/griefed/serverpackcreator/FilesSetup.html#getForgeLinuxFile--"><code>getForgeLinuxFile()</code></a><br>
+ 8. <a href="../../../de/griefed/serverpackcreator/FilesSetup.html#getFabricWindowsFile--"><code>getFabricWindowsFile()</code></a><br>
+ 9. <a href="../../../de/griefed/serverpackcreator/FilesSetup.html#getFabricLinuxFile--"><code>getFabricLinuxFile()</code></a><br>
+ 10.<a href="../../../de/griefed/serverpackcreator/FilesSetup.html#filesSetup--"><code>filesSetup()</code></a><br>
+ 11.<a href="../../../de/griefed/serverpackcreator/FilesSetup.html#checkForConfig--"><code>checkForConfig()</code></a><br>
+ 12.<a href="../../../de/griefed/serverpackcreator/FilesSetup.html#checkForFabricLinux--"><code>checkForFabricLinux()</code></a><br>
+ 13.<a href="../../../de/griefed/serverpackcreator/FilesSetup.html#checkForFabricWindows--"><code>checkForFabricWindows()</code></a><br>
+ 14.<a href="../../../de/griefed/serverpackcreator/FilesSetup.html#checkForForgeLinux--"><code>checkForForgeLinux()</code></a><br>
+ 15.<a href="../../../de/griefed/serverpackcreator/FilesSetup.html#checkForForgeWindows--"><code>checkForForgeWindows()</code></a><br>
+ 16.<a href="../../../de/griefed/serverpackcreator/FilesSetup.html#checkForProperties--"><code>checkForProperties()</code></a><br>
+ 17.<a href="../../../de/griefed/serverpackcreator/FilesSetup.html#checkForIcon--"><code>checkForIcon()</code></a>
+ <p>
+ Requires instances of <a href="../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n"><code>LocalizationManager</code></a> for use of localization, but creates one if injected one is null.
+ <p>
+ Ensures all files needed by ServerPackCreator are available. If any one is missing, a new one is generated from the
+ template. Among the default files are:<p>
+ <strong>serverpackcreator.conf</strong><br>
+ <strong>server.properties</strong><br>
+ <strong>server-icon.png</strong><br>
+ <strong>start-forge.bar</strong><br>
+ <strong>start-forge.sh</strong><br>
+ <strong>start-fabric.bat</strong><br>
+ <strong>start-fabric.sh</strong>
+ <p>
+ Should an old configuration file, <em>creator.conf</em>, be detected, it is renamed to <em>serverpackcreator.conf</em>
+ to ensure a configuration file is present at all times.</div>
 </li>
 </ul>
 </div>
@@ -182,7 +216,10 @@ extends java.lang.Object</pre>
 <th class="colOne" scope="col">Constructor and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/FilesSetup.html#FilesSetup-de.griefed.serverpackcreator.i18n.LocalizationManager-">FilesSetup</a></span>(<a href="../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a>&nbsp;injectedLocalizationManager)</code>&nbsp;</td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/FilesSetup.html#FilesSetup-de.griefed.serverpackcreator.i18n.LocalizationManager-">FilesSetup</a></span>(<a href="../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a>&nbsp;injectedLocalizationManager)</code>
+<div class="block"><strong>Constructor</strong>
+ Used for Dependency Injection.</div>
+</td>
 </tr>
 </table>
 </li>
@@ -249,35 +286,51 @@ extends java.lang.Object</pre>
 </tr>
 <tr id="i8" class="altColor">
 <td class="colFirst"><code>java.io.File</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/FilesSetup.html#getConfigFile--">getConfigFile</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/FilesSetup.html#getConfigFile--">getConfigFile</a></span>()</code>
+<div class="block">Getter for serverpackcreator.conf.</div>
+</td>
 </tr>
 <tr id="i9" class="rowColor">
 <td class="colFirst"><code>java.io.File</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/FilesSetup.html#getFabricLinuxFile--">getFabricLinuxFile</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/FilesSetup.html#getFabricLinuxFile--">getFabricLinuxFile</a></span>()</code>
+<div class="block">Getter for start-fabric.sh.</div>
+</td>
 </tr>
 <tr id="i10" class="altColor">
 <td class="colFirst"><code>java.io.File</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/FilesSetup.html#getFabricWindowsFile--">getFabricWindowsFile</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/FilesSetup.html#getFabricWindowsFile--">getFabricWindowsFile</a></span>()</code>
+<div class="block">Getter for start-fabric.bat.</div>
+</td>
 </tr>
 <tr id="i11" class="rowColor">
 <td class="colFirst"><code>java.io.File</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/FilesSetup.html#getForgeLinuxFile--">getForgeLinuxFile</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/FilesSetup.html#getForgeLinuxFile--">getForgeLinuxFile</a></span>()</code>
+<div class="block">Getter for start-forge.sh.</div>
+</td>
 </tr>
 <tr id="i12" class="altColor">
 <td class="colFirst"><code>java.io.File</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/FilesSetup.html#getForgeWindowsFile--">getForgeWindowsFile</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/FilesSetup.html#getForgeWindowsFile--">getForgeWindowsFile</a></span>()</code>
+<div class="block">Getter for start-forge.bat.</div>
+</td>
 </tr>
 <tr id="i13" class="rowColor">
 <td class="colFirst"><code>java.io.File</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/FilesSetup.html#getIconFile--">getIconFile</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/FilesSetup.html#getIconFile--">getIconFile</a></span>()</code>
+<div class="block">Getter for server-icon.png</div>
+</td>
 </tr>
 <tr id="i14" class="altColor">
 <td class="colFirst"><code>java.io.File</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/FilesSetup.html#getOldConfigFile--">getOldConfigFile</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/FilesSetup.html#getOldConfigFile--">getOldConfigFile</a></span>()</code>
+<div class="block">Getter for creator.conf.</div>
+</td>
 </tr>
 <tr id="i15" class="rowColor">
 <td class="colFirst"><code>java.io.File</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/FilesSetup.html#getPropertiesFile--">getPropertiesFile</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/FilesSetup.html#getPropertiesFile--">getPropertiesFile</a></span>()</code>
+<div class="block">Getter for server.properties.</div>
+</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -310,6 +363,15 @@ extends java.lang.Object</pre>
 <pre>private static final&nbsp;org.apache.logging.log4j.Logger appLogger</pre>
 </li>
 </ul>
+<a name="localizationManager">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>localizationManager</h4>
+<pre>private&nbsp;<a href="../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a> localizationManager</pre>
+</li>
+</ul>
 <a name="configFile">
 <!--   -->
 </a>
@@ -376,21 +438,12 @@ extends java.lang.Object</pre>
 <a name="fabricLinuxFile">
 <!--   -->
 </a>
-<ul class="blockList">
+<ul class="blockListLast">
 <li class="blockList">
 <h4>fabricLinuxFile</h4>
 <pre>private final&nbsp;java.io.File fabricLinuxFile</pre>
 </li>
 </ul>
-<a name="localizationManager">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>localizationManager</h4>
-<pre>private&nbsp;<a href="../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a> localizationManager</pre>
-</li>
-</ul>
 </li>
 </ul>
 <!-- ========= CONSTRUCTOR DETAIL ======== -->
@@ -406,6 +459,13 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>FilesSetup</h4>
 <pre>public&nbsp;FilesSetup(<a href="../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a>&nbsp;injectedLocalizationManager)</pre>
+<div class="block"><strong>Constructor</strong><p>
+ Used for Dependency Injection. Receives an instance of <a href="../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n"><code>LocalizationManager</code></a> or creates one if the received
+ one is null. Required for use of localization.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>injectedLocalizationManager</code> - Instance of <a href="../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n"><code>LocalizationManager</code></a> required for localized log messages.</dd>
+</dl>
 </li>
 </ul>
 </li>
@@ -423,6 +483,11 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>getConfigFile</h4>
 <pre>public&nbsp;java.io.File&nbsp;getConfigFile()</pre>
+<div class="block">Getter for serverpackcreator.conf.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Returns the serverpackcreator.conf-file for use in <a href="../../../de/griefed/serverpackcreator/FilesSetup.html#checkForConfig--"><code>checkForConfig()</code></a></dd>
+</dl>
 </li>
 </ul>
 <a name="getOldConfigFile--">
@@ -432,6 +497,11 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>getOldConfigFile</h4>
 <pre>public&nbsp;java.io.File&nbsp;getOldConfigFile()</pre>
+<div class="block">Getter for creator.conf.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Returns the creator.conf-file for use in <a href="../../../de/griefed/serverpackcreator/FilesSetup.html#checkForConfig--"><code>checkForConfig()</code></a>.</dd>
+</dl>
 </li>
 </ul>
 <a name="getPropertiesFile--">
@@ -441,6 +511,11 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>getPropertiesFile</h4>
 <pre>public&nbsp;java.io.File&nbsp;getPropertiesFile()</pre>
+<div class="block">Getter for server.properties.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Returns the server.properties-file for use in <a href="../../../de/griefed/serverpackcreator/FilesSetup.html#checkForProperties--"><code>checkForProperties()</code></a></dd>
+</dl>
 </li>
 </ul>
 <a name="getIconFile--">
@@ -450,6 +525,11 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>getIconFile</h4>
 <pre>public&nbsp;java.io.File&nbsp;getIconFile()</pre>
+<div class="block">Getter for server-icon.png</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Returns the server-icon.png-file for use in <a href="../../../de/griefed/serverpackcreator/FilesSetup.html#checkForIcon--"><code>checkForIcon()</code></a></dd>
+</dl>
 </li>
 </ul>
 <a name="getForgeWindowsFile--">
@@ -459,6 +539,11 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>getForgeWindowsFile</h4>
 <pre>public&nbsp;java.io.File&nbsp;getForgeWindowsFile()</pre>
+<div class="block">Getter for start-forge.bat.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Returns the start-forge.bat-file for use in <a href="../../../de/griefed/serverpackcreator/FilesSetup.html#checkForForgeWindows--"><code>checkForForgeWindows()</code></a></dd>
+</dl>
 </li>
 </ul>
 <a name="getForgeLinuxFile--">
@@ -468,6 +553,11 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>getForgeLinuxFile</h4>
 <pre>public&nbsp;java.io.File&nbsp;getForgeLinuxFile()</pre>
+<div class="block">Getter for start-forge.sh.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Returns the start-forge.sh-file for use in <a href="../../../de/griefed/serverpackcreator/FilesSetup.html#checkForForgeLinux--"><code>checkForForgeLinux()</code></a></dd>
+</dl>
 </li>
 </ul>
 <a name="getFabricWindowsFile--">
@@ -477,6 +567,11 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>getFabricWindowsFile</h4>
 <pre>public&nbsp;java.io.File&nbsp;getFabricWindowsFile()</pre>
+<div class="block">Getter for start-fabric.bat.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Returns the start-fabric.bat-file for use in <a href="../../../de/griefed/serverpackcreator/FilesSetup.html#checkForFabricWindows--"><code>checkForFabricWindows()</code></a></dd>
+</dl>
 </li>
 </ul>
 <a name="getFabricLinuxFile--">
@@ -486,6 +581,11 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>getFabricLinuxFile</h4>
 <pre>public&nbsp;java.io.File&nbsp;getFabricLinuxFile()</pre>
+<div class="block">Getter for start-fabric.sh.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Returns the start-fabric.sh-file for use in <a href="../../../de/griefed/serverpackcreator/FilesSetup.html#checkForFabricLinux--"><code>checkForFabricLinux()</code></a></dd>
+</dl>
 </li>
 </ul>
 <a name="filesSetup--">
@@ -495,7 +595,11 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>filesSetup</h4>
 <pre>void&nbsp;filesSetup()</pre>
-<div class="block">Calls individual methods which check for existence of default files. If any of these methods return true, serverpackcreator will exit, giving the user the chance to customize it before the program runs in production.</div>
+<div class="block">Calls individual methods which check for existence of default files. Only this method should be called to check
+ for existence of all default files.<p>
+ If any file was newly generated from it's template, a warning is printed informing the user about said newly
+ generated file. If every file was present and none was generated, "Setup completed." is printed to the console
+ and log.</div>
 </li>
 </ul>
 <a name="checkForConfig--">
@@ -505,10 +609,12 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>checkForConfig</h4>
 <pre>boolean&nbsp;checkForConfig()</pre>
-<div class="block">Check for old config file, if found rename to new name. If neither old nor new config file can be found, a new config file is generated.</div>
+<div class="block">Check for old config file, if found rename to new name. If neither old nor new config file can be found, a new
+ config file is generated.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd>Boolean. Returns true if new config file was generated.</dd>
+<dd>Boolean. Returns true if the file was generated, so <a href="../../../de/griefed/serverpackcreator/FilesSetup.html#filesSetup--"><code>filesSetup()</code></a> can inform the user about
+ said newly generated file.</dd>
 </dl>
 </li>
 </ul>
@@ -522,7 +628,8 @@ extends java.lang.Object</pre>
 <div class="block">Checks for existence of Fabric start script for Linux. If it is not found, it is generated.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd>Boolean. Returns true if the file was generated.</dd>
+<dd>Boolean. Returns true if the file was generated, so <a href="../../../de/griefed/serverpackcreator/FilesSetup.html#filesSetup--"><code>filesSetup()</code></a> can inform the user about
+ said newly generated file.</dd>
 </dl>
 </li>
 </ul>
@@ -536,7 +643,8 @@ extends java.lang.Object</pre>
 <div class="block">Checks for existence of Fabric start script for Windows. If it is not found, it is generated.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd>Boolean. Returns true if the file was generated.</dd>
+<dd>Boolean. Returns true if the file was generated, so <a href="../../../de/griefed/serverpackcreator/FilesSetup.html#filesSetup--"><code>filesSetup()</code></a> can inform the user about
+ said newly generated file.</dd>
 </dl>
 </li>
 </ul>
@@ -550,7 +658,8 @@ extends java.lang.Object</pre>
 <div class="block">Checks for existence of Forge start script for Linux. If it is not found, it is generated.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd>Boolean. Returns true if the file was generated.</dd>
+<dd>Boolean. Returns true if the file was generated, so <a href="../../../de/griefed/serverpackcreator/FilesSetup.html#filesSetup--"><code>filesSetup()</code></a> can inform the user about
+ said newly generated file.</dd>
 </dl>
 </li>
 </ul>
@@ -564,7 +673,8 @@ extends java.lang.Object</pre>
 <div class="block">Checks for existence of Forge start script for Windows. If it is not found, it is generated.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd>Boolean. Returns true if the file was generated.</dd>
+<dd>Boolean. Returns true if the file was generated, so <a href="../../../de/griefed/serverpackcreator/FilesSetup.html#filesSetup--"><code>filesSetup()</code></a> can inform the user about
+ said newly generated file.</dd>
 </dl>
 </li>
 </ul>
@@ -578,7 +688,8 @@ extends java.lang.Object</pre>
 <div class="block">Checks for existence of server.properties file. If it is not found, it is generated.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd>Boolean. Returns true if the file was generated.</dd>
+<dd>Boolean. Returns true if the file was generated, so <a href="../../../de/griefed/serverpackcreator/FilesSetup.html#filesSetup--"><code>filesSetup()</code></a> can inform the user about
+ said newly generated file.</dd>
 </dl>
 </li>
 </ul>
@@ -592,7 +703,8 @@ extends java.lang.Object</pre>
 <div class="block">Checks for existence of server-icon.png file. If it is not found, it is generated.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd>Boolean. Returns true if the file was generated.</dd>
+<dd>Boolean. Returns true if the file was generated, so <a href="../../../de/griefed/serverpackcreator/FilesSetup.html#filesSetup--"><code>filesSetup()</code></a> can inform the user about
+ said newly generated file.</dd>
 </dl>
 </li>
 </ul>
diff --git a/docs/de/griefed/serverpackcreator/Main.html b/docs/de/griefed/serverpackcreator/Main.html
index ebd1b2ce1..7bf7b9667 100644
--- a/docs/de/griefed/serverpackcreator/Main.html
+++ b/docs/de/griefed/serverpackcreator/Main.html
@@ -109,6 +109,34 @@ var activeTableTab = "activeTableTab";
 <br>
 <pre>public class <span class="typeNameLabel">Main</span>
 extends java.lang.Object</pre>
+<div class="block"><strong>Table of methods</strong>
+ <p>
+ <a href="../../../de/griefed/serverpackcreator/Main.html#main-java.lang.String:A-"><code>main(String[])</code></a>
+ <p>
+ Depending on the passed commandline arguments and whether ServerPackCreator is run in a headless environment,
+ one of the following modes will be entered:<p>
+ <strong>-cgen</strong><p>
+ When ServerPackCreator is run with the <code>-cgen</code>-argument, you will be guided through a step-by-step
+ generation of a new configuration file.<p>
+ This mode is also entered if:<p>
+ ServerPackCreator is run with the <code>-cli</code>-argument <strong>AND</strong> if no configuration-file exists.<p>
+ ServerPackCreator can not find any configuration-file when run in cli-mode, for whatever reason.
+ <p>
+ <strong>-cli</strong><p>
+ When ServerPackCreator is run with the <code>-cli</code>-argument, it will be executed in commandline-mode only.
+ Use this argument if you explicitly want to execute ServerPackCreator without GUI. *
+ <p>
+ <strong>-lang</strong><p>
+ Specifies the locale with which ServerPackCreator is run. If no locale is specified or if this argument is not
+ used, ServerPackCreator will use the default locale <code>en_us</code><p>
+ Correct usage is:<p>
+ <code>-lang your_locale</code><p>
+ Examples:<p>
+ <code>-lang de_de</code><p>
+ <code>-lang en_us</code><p>
+ <strong>Headless environments</strong><p>
+ If ServerPackCreator is run in a headless environment, without any graphical environment, it should automatically
+ enter <code>-cli</code>-mode.</div>
 </li>
 </ul>
 </div>
@@ -166,7 +194,7 @@ extends java.lang.Object</pre>
 <tr id="i0" class="altColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../de/griefed/serverpackcreator/Main.html#main-java.lang.String:A-">main</a></span>(java.lang.String[]&nbsp;args)</code>
-<div class="block">Init and "main" has been moved to Handler-class.</div>
+<div class="block">Initializes all objects needed for running ServerPackCreator and ensures Dependency Injection.</div>
 </td>
 </tr>
 </table>
@@ -232,10 +260,14 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>main</h4>
 <pre>public static&nbsp;void&nbsp;main(java.lang.String[]&nbsp;args)</pre>
-<div class="block">Init and "main" has been moved to Handler-class. Main now only inits the LocalizationManager and passes the cli args, if any,  to Handler, which then runs the usual operations as they used to be in pre-2.x.x</div>
+<div class="block">Initializes all objects needed for running ServerPackCreator and ensures Dependency Injection.
+ Calls <a href="../../../de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator"><code>FilesSetup</code></a> so all default files are available.
+ Checks arguments to determine which mode to enter.
+ Lists a couple of environment variables important for reporting issues.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>args</code> - Commandline arguments with which ServerPackCreator is run. Passed to Handler-class which then decides what to do corresponding to input.</dd>
+<dd><code>args</code> - Commandline arguments with which ServerPackCreator is run. Determines which mode ServerPackCreator
+ will enter and which locale is used.</dd>
 </dl>
 </li>
 </ul>
diff --git a/docs/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html b/docs/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html
index 6b9f41b19..74a7ab7c9 100644
--- a/docs/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html
+++ b/docs/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html
@@ -17,7 +17,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -109,6 +109,33 @@ var activeTableTab = "activeTableTab";
 <br>
 <pre>public class <span class="typeNameLabel">CurseCreateModpack</span>
 extends java.lang.Object</pre>
+<div class="block"><strong>Table of methods</strong><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#CurseCreateModpack-de.griefed.serverpackcreator.i18n.LocalizationManager-"><code>CurseCreateModpack(LocalizationManager)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#setModloaderCase-java.lang.String-"><code>setModloaderCase(String)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#curseForgeModpack-java.lang.String-java.lang.Integer-java.lang.Integer-"><code>curseForgeModpack(String, Integer, Integer)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#initializeModpack-java.lang.String-java.lang.Integer-java.lang.Integer-"><code>initializeModpack(String, Integer, Integer)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#downloadMods-java.lang.String-"><code>downloadMods(String)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#copyOverride-java.lang.String-"><code>copyOverride(String)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#checkCurseForgeDir-java.lang.String-"><code>checkCurseForgeDir(String)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#unzipArchive-java.lang.String-java.lang.String-"><code>unzipArchive(String, String)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#newFile-java.io.File-java.util.zip.ZipEntry-"><code>newFile(File, ZipEntry)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#cleanupEnvironment-java.lang.String-"><code>cleanupEnvironment(String)</code></a><p>
+ Download a modpack from CurseForge and create it by unzipping the ZIP-archive, copy all folders and files from the
+ override directory to the parent directory, download all mods in said modpack, and delete no longer needed files.
+ Modpacks are create in a ProjectName/FileDisplayName structure. Before a modpack is created, the FileDisplayName folder
+ is checked for existence and deleted should it already exist. The reason for this is the order in which ServerPackCreator
+ checks and uses the configuration file.<p>
+ First: the configuration is checked for a valid CurseForge projectID,fileID combination.<br>
+ Second: The folder structure is checked for an already existing folder with FileDisplayName and if it exists it is deleted.<br>
+ Third: The modpack is created and all mods are downloaded etc., files are copied, etc.<br>
+ Fourth: Information about the modpack is acquired from the modpack's manifest.json and written to a new configuration file
+ with said information. The configuration for modpackDir, which previously contained a projectID,fileID is replaced
+ with the path to the new modpack at ProjectName/FileDisplayName.<br>
+ If modpackDir holds a projectID,fileID combination we have to assume the modpack has yet to be created, thus
+ we need to make sure the target directory is empty in order to create a clean and fresh modpack.<br>
+ If modpackDir does not hold a projectID,fileID we have to assume it is a path pointing at a directory which already
+ contains a modpack we can work with and create a server pack from. Thus, we clean up the environment if modpackDir holds
+ a projectID,fileID.</div>
 </li>
 </ul>
 </div>
@@ -162,7 +189,10 @@ extends java.lang.Object</pre>
 <th class="colOne" scope="col">Constructor and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#CurseCreateModpack-de.griefed.serverpackcreator.i18n.LocalizationManager-">CurseCreateModpack</a></span>(<a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a>&nbsp;injectedLocalizationManager)</code>&nbsp;</td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#CurseCreateModpack-de.griefed.serverpackcreator.i18n.LocalizationManager-">CurseCreateModpack</a></span>(<a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a>&nbsp;injectedLocalizationManager)</code>
+<div class="block"><strong>Constructor</strong>
+ Used for Dependency Injection.</div>
+</td>
 </tr>
 </table>
 </li>
@@ -182,56 +212,64 @@ extends java.lang.Object</pre>
 <tr id="i0" class="altColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#checkCurseForgeDir-java.lang.String-">checkCurseForgeDir</a></span>(java.lang.String&nbsp;modpackDir)</code>
-<div class="block">Check whether the folder for the specified CurseForge projectID/fileID exists.</div>
+<div class="block">Check whether the folder for the specified CurseForge projectID/fileID exists and if it does exist, delete it
+ recursively to ensure we are working with a clean environment when creating a modpack from CurseForge.</div>
 </td>
 </tr>
 <tr id="i1" class="rowColor">
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#cleanupEnvironment-java.lang.String-">cleanupEnvironment</a></span>(java.lang.String&nbsp;modpackDir)</code>
+<div class="block">Deletes any and all folder and files, recursively, inside the target directory, thus ensuring we are working in a
+ clean environment when creating a new modpack from CurseForge.</div>
+</td>
+</tr>
+<tr id="i2" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#copyOverride-java.lang.String-">copyOverride</a></span>(java.lang.String&nbsp;modpackDir)</code>
-<div class="block">Copies all folders and the files therein to the parent modpack directory.</div>
+<div class="block">Recursively copy all folders and files from the override directory to the parent directory, our modpack directory.</div>
 </td>
 </tr>
-<tr id="i2" class="altColor">
+<tr id="i3" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#curseForgeModpack-java.lang.String-java.lang.Integer-java.lang.Integer-">curseForgeModpack</a></span>(java.lang.String&nbsp;modpackDir,
                  java.lang.Integer&nbsp;projectID,
                  java.lang.Integer&nbsp;fileID)</code>
-<div class="block">Gets the names of the specified project and file and makes calls to methods which create the modpack so we can then create a server pack from it.</div>
+<div class="block">Acquires the names of the CurseForge project and file.</div>
 </td>
 </tr>
-<tr id="i3" class="rowColor">
+<tr id="i4" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#downloadMods-java.lang.String-">downloadMods</a></span>(java.lang.String&nbsp;modpackDir)</code>
 <div class="block">Downloads all mods specified in the modpack's manifest.json file.</div>
 </td>
 </tr>
-<tr id="i4" class="altColor">
+<tr id="i5" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#initializeModpack-java.lang.String-java.lang.Integer-java.lang.Integer-">initializeModpack</a></span>(java.lang.String&nbsp;modpackDir,
                  java.lang.Integer&nbsp;projectID,
                  java.lang.Integer&nbsp;fileID)</code>
-<div class="block">Downloads the specified file of the specified project to a directory which is the combination of the project name and file display name.</div>
+<div class="block">Downloads the specified file of the specified project to a directory which is the combination of the project
+ name and file display name.</div>
 </td>
 </tr>
-<tr id="i5" class="rowColor">
+<tr id="i6" class="altColor">
 <td class="colFirst"><code>private java.io.File</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#newFile-java.io.File-java.util.zip.ZipEntry-">newFile</a></span>(java.io.File&nbsp;destinationDir,
        java.util.zip.ZipEntry&nbsp;zipEntry)</code>
-<div class="block">Helper-Method for unzipArchive.</div>
+<div class="block">With help from <a href=https://www.baeldung.com/java-compress-and-uncompress>Baeldung Java Tutorials</a>.</div>
 </td>
 </tr>
-<tr id="i6" class="altColor">
+<tr id="i7" class="rowColor">
 <td class="colFirst"><code>(package private) java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#setModloader-java.lang.String-">setModloader</a></span>(java.lang.String&nbsp;modloader)</code>
-<div class="block">Standardize the specified modloader.</div>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#setModloaderCase-java.lang.String-">setModloaderCase</a></span>(java.lang.String&nbsp;modloader)</code>
+<div class="block">Ensures the modloader is normalized to first letter upper case and rest lower case.</div>
 </td>
 </tr>
-<tr id="i7" class="rowColor">
+<tr id="i8" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#unzipArchive-java.lang.String-java.lang.String-">unzipArchive</a></span>(java.lang.String&nbsp;zipFile,
             java.lang.String&nbsp;modpackDir)</code>
-<div class="block">With help from: https://www.baeldung.com/java-compress-and-uncompress
- Unzips the downloaded modpack archive to a directory.</div>
+<div class="block">With help from <a href=https://www.baeldung.com/java-compress-and-uncompress>Baeldung Java Tutorials</a>.</div>
 </td>
 </tr>
 </table>
@@ -316,6 +354,14 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>CurseCreateModpack</h4>
 <pre>public&nbsp;CurseCreateModpack(<a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a>&nbsp;injectedLocalizationManager)</pre>
+<div class="block"><strong>Constructor</strong><p>
+ Used for Dependency Injection.<p>
+ Receives an instance of <a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n"><code>LocalizationManager</code></a> or creates one if the received
+ one is null. Required for use of localization.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>injectedLocalizationManager</code> - Instance of <a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n"><code>LocalizationManager</code></a> required for localized log messages.</dd>
+</dl>
 </li>
 </ul>
 </li>
@@ -326,6 +372,24 @@ extends java.lang.Object</pre>
 <!--   -->
 </a>
 <h3>Method Detail</h3>
+<a name="setModloaderCase-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setModloaderCase</h4>
+<pre>java.lang.String&nbsp;setModloaderCase(java.lang.String&nbsp;modloader)</pre>
+<div class="block">Ensures the modloader is normalized to first letter upper case and rest lower case. Basically allows the user to
+ input Forge or Fabric in any combination of upper- and lowercase and ServerPackCreator will still be able to
+ work with the users input.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>modloader</code> - String. The String to check for case-insensitive cases of either Forge or Fabric.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>String. Returns a normalized String of the specified modloader.</dd>
+</dl>
+</li>
+</ul>
 <a name="curseForgeModpack-java.lang.String-java.lang.Integer-java.lang.Integer-">
 <!--   -->
 </a>
@@ -335,14 +399,22 @@ extends java.lang.Object</pre>
 <pre>public&nbsp;boolean&nbsp;curseForgeModpack(java.lang.String&nbsp;modpackDir,
                                  java.lang.Integer&nbsp;projectID,
                                  java.lang.Integer&nbsp;fileID)</pre>
-<div class="block">Gets the names of the specified project and file and makes calls to methods which create the modpack so we can then create a server pack from it.</div>
+<div class="block">Acquires the names of the CurseForge project and file. Should no filename exist, we will use the fileDiskName as
+ fallback to ensure we always have a folder-structure of projectName/FileDisplayName at hand in which the modpack
+ will be created. Calls<br>
+ <code>CurseAPI</code> and various methods of it in order to acquire information about the modpack.<br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#checkCurseForgeDir-java.lang.String-"><code>checkCurseForgeDir(String)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#initializeModpack-java.lang.String-java.lang.Integer-java.lang.Integer-"><code>initializeModpack(String, Integer, Integer)</code></a></div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modpackDir</code> - String. Combination of project name and file name. Created during download procedure and later added to config file.</dd>
-<dd><code>projectID</code> - Integer. The ID of the project. Used to gather information and to download the modpack.</dd>
-<dd><code>fileID</code> - Integer. The ID of the file. Used to gather information and to download the modpack.</dd>
+<dd><code>modpackDir</code> - String. Combination of project name and file name. Created during download procedure
+                  and later replaces the modpackDir variable in the configuration file.</dd>
+<dd><code>projectID</code> - Integer. The ID of the project. Used to gather information about the CurseForge project and to
+                 download the modpack.</dd>
+<dd><code>fileID</code> - Integer. The ID of the file. Used to gather information about the CurseForge file and to download
+              the modpack.</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd>Boolean. Returns true if the modpack was freshly created.</dd>
+<dd>Boolean. Returns true if the modpack was successfully created.</dd>
 </dl>
 </li>
 </ul>
@@ -355,10 +427,17 @@ extends java.lang.Object</pre>
 <pre>private&nbsp;void&nbsp;initializeModpack(java.lang.String&nbsp;modpackDir,
                                java.lang.Integer&nbsp;projectID,
                                java.lang.Integer&nbsp;fileID)</pre>
-<div class="block">Downloads the specified file of the specified project to a directory which is the combination of the project name and file display name. Unzips the downloaded modpack archive, gathers and displays information about the specified project/file and makes calls to methods which further setup the modpack.</div>
+<div class="block">Downloads the specified file of the specified project to a directory which is the combination of the project
+ name and file display name. Unzips the downloaded modpack ZIP-archive, gathers and displays information about the
+ specified project/file and makes calls to methods which further setup the modpack. Calls<br>
+ <code>CurseAPI</code> and various methods of it to create the modpack.<br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#unzipArchive-java.lang.String-java.lang.String-"><code>unzipArchive(String, String)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#copyOverride-java.lang.String-"><code>copyOverride(String)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#downloadMods-java.lang.String-"><code>downloadMods(String)</code></a><br></div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modpackDir</code> - String. Combination of project name and file name. Created during download procedure and later added to config file.</dd>
+<dd><code>modpackDir</code> - String. Combination of project name and file name. Created during download procedure and later
+                  replaces the modpackDir variable in the configuration file.</dd>
 <dd><code>projectID</code> - Integer. The ID of the project. Used to gather information and to download the modpack.</dd>
 <dd><code>fileID</code> - Integer. The ID of the file. Used to gather information and to download the modpack.</dd>
 </dl>
@@ -371,10 +450,16 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>downloadMods</h4>
 <pre>private&nbsp;void&nbsp;downloadMods(java.lang.String&nbsp;modpackDir)</pre>
-<div class="block">Downloads all mods specified in the modpack's manifest.json file. If a download fails, one retry will be made, if said retry fails, too, then the download url will be sent to the log.</div>
+<div class="block">Downloads all mods specified in the modpack's manifest.json file. If a download of a mod fails, it will be
+ retried once before treating it as "currently unavailable" and adding the URL to the failed download
+ to a list which will be printed to the console and logs after the method has finished. The user will need to
+ download these failed mods themself as ServerPackCreator couldn't, for whatever reason, successfully download them.
+ If the acquisition of the download URL fails as well....well we're out of luck, then. The user will have to figure
+ this out on their own. Possible reasons for a failed download and failed URL acquisition might be that the file
+ was taken down, no longer exists, CurseForge is unavailable etc. etc. There's nothing we can do about that.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modpackDir</code> - String. All mods are downloaded to a child directory 'mods'</dd>
+<dd><code>modpackDir</code> - String. All mods are downloaded to the child-directory "mods" inside the modpack directory.</dd>
 </dl>
 </li>
 </ul>
@@ -385,10 +470,11 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>copyOverride</h4>
 <pre>private&nbsp;void&nbsp;copyOverride(java.lang.String&nbsp;modpackDir)</pre>
-<div class="block">Copies all folders and the files therein to the parent modpack directory.</div>
+<div class="block">Recursively copy all folders and files from the override directory to the parent directory, our modpack directory.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modpackDir</code> - String. The overrides directory resides in this directory. All folders and files within overrides are copied here.</dd>
+<dd><code>modpackDir</code> - String. The overrides directory resides in this directory. All folders and files within overrides
+                  are copied to the parent directory, the modpack directory.</dd>
 </dl>
 </li>
 </ul>
@@ -399,12 +485,16 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>checkCurseForgeDir</h4>
 <pre>private&nbsp;boolean&nbsp;checkCurseForgeDir(java.lang.String&nbsp;modpackDir)</pre>
-<div class="block">Check whether the folder for the specified CurseForge projectID/fileID exists.</div>
+<div class="block">Check whether the folder for the specified CurseForge projectID/fileID exists and if it does exist, delete it
+ recursively to ensure we are working with a clean environment when creating a modpack from CurseForge.<br>
+ Calls <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#cleanupEnvironment-java.lang.String-"><code>cleanupEnvironment(String)</code></a> to ensure a clean environment when we create a new modpack from CurseForge.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>modpackDir</code> - String. The path to the modpack directory, a combination of project name and file display name.</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd>Boolean. Returns true if the directory exists. False if not.</dd>
+<dd>Boolean. Returns true if something went wrong during the cleanup of the modpack directory. If the cleanup
+ procedure finished successfully and we have a clean environment, false is returned. Returns false if the modpack
+ directory could not be found, indicating a clean environment.</dd>
 </dl>
 </li>
 </ul>
@@ -416,12 +506,13 @@ extends java.lang.Object</pre>
 <h4>unzipArchive</h4>
 <pre>private&nbsp;void&nbsp;unzipArchive(java.lang.String&nbsp;zipFile,
                           java.lang.String&nbsp;modpackDir)</pre>
-<div class="block">With help from: https://www.baeldung.com/java-compress-and-uncompress
- Unzips the downloaded modpack archive to a directory.</div>
+<div class="block">With help from <a href=https://www.baeldung.com/java-compress-and-uncompress>Baeldung Java Tutorials</a>.<br>
+ Unzips the downloaded modpack ZIP-archive to the specified directory. Calls <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#newFile-java.io.File-java.util.zip.ZipEntry-"><code>newFile(File, ZipEntry)</code></a> as
+ a helper method.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>zipFile</code> - String. The name of the zipfile to extract.</dd>
-<dd><code>modpackDir</code> - The directory where the archive resides in and will be extracted to.</dd>
+<dd><code>zipFile</code> - String. The path to the ZIP-archive which we want to unzip.</dd>
+<dd><code>modpackDir</code> - The directory into which the ZIP-archive will be unzipped into.</dd>
 </dl>
 </li>
 </ul>
@@ -433,29 +524,34 @@ extends java.lang.Object</pre>
 <h4>newFile</h4>
 <pre>private&nbsp;java.io.File&nbsp;newFile(java.io.File&nbsp;destinationDir,
                              java.util.zip.ZipEntry&nbsp;zipEntry)</pre>
-<div class="block">Helper-Method for unzipArchive. With help from: https://www.baeldung.com/java-compress-and-uncompress</div>
+<div class="block">With help from <a href=https://www.baeldung.com/java-compress-and-uncompress>Baeldung Java Tutorials</a>.<br>
+ Helper-Method for unzipArchive. This method guards us against writing any file to the file system <em>outside</em>
+ of the target folder, thus ensuring all files are successfully unzipped into the desired target directory.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>destinationDir</code> - Check whether the file is outside of the directory it is supposed to be in.</dd>
-<dd><code>zipEntry</code> - Zip entry with which to check for location.</dd>
+<dd><code>destinationDir</code> - The directory into which a file from the ZIP-archive is to be unzipped.</dd>
+<dd><code>zipEntry</code> - File in the ZIP-archive which is to be unzipped from the ZIP-archive into the desired target
+                 directory.</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd>Returns the correct destination for the new file.</dd>
+<dd>File. Returns a file from the ZIP-archive with the path pointing to the desired directory, ensuring proper
+ unzipping of the ZIP-archive.</dd>
 </dl>
 </li>
 </ul>
-<a name="setModloader-java.lang.String-">
+<a name="cleanupEnvironment-java.lang.String-">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>setModloader</h4>
-<pre>java.lang.String&nbsp;setModloader(java.lang.String&nbsp;modloader)</pre>
-<div class="block">Standardize the specified modloader.</div>
+<h4>cleanupEnvironment</h4>
+<pre>private&nbsp;boolean&nbsp;cleanupEnvironment(java.lang.String&nbsp;modpackDir)</pre>
+<div class="block">Deletes any and all folder and files, recursively, inside the target directory, thus ensuring we are working in a
+ clean environment when creating a new modpack from CurseForge.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>modloader</code> - String. If any case of Forge or Fabric was specified, return "Forge" or "Fabric", so users can enter "forge" or "fabric" or any combination of upper- and lowercase letters..</dd>
+<dd><code>modpackDir</code> - String. The directory we want to delete.</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd>String. Returns a standardized String of the specified modloader.</dd>
+<dd>Boolean. Returns false if every file and folder was, recursively and successfully, deleted.</dd>
 </dl>
 </li>
 </ul>
diff --git a/docs/de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html b/docs/de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html
index 265587130..cf8b045f0 100644
--- a/docs/de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html
+++ b/docs/de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html
@@ -109,6 +109,15 @@ var activeTableTab = "activeTableTab";
 <br>
 <pre>public class <span class="typeNameLabel">CurseFiles</span>
 extends java.lang.Object</pre>
+<div class="block"><strong>Table of methods</strong><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#getProjectID--"><code>getProjectID()</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#setProjectID-java.lang.String-"><code>setProjectID(String)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#getFileID--"><code>getFileID()</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#setFileID-java.lang.String-"><code>setFileID(String)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#toString--"><code>toString()</code></a><p>
+ Retrieves information about a CurseForge Minecraft modpack by using <code>com.fasterxml.jackson.databind</code> JSON parsing.
+ This class retrieves the projectIDs and fileIDs a modpack acquired from CurseForge depends on. These can be mods,
+ resource packs, worlds etc. etc.</div>
 </li>
 </ul>
 </div>
@@ -133,7 +142,9 @@ extends java.lang.Object</pre>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#projectID">projectID</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#projectID">projectID</a></span></code>
+<div class="block">Ignore unknown values/object.</div>
+</td>
 </tr>
 </table>
 </li>
@@ -169,23 +180,33 @@ extends java.lang.Object</pre>
 </tr>
 <tr id="i0" class="altColor">
 <td class="colFirst"><code>java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#getFileID--">getFileID</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#getFileID--">getFileID</a></span>()</code>
+<div class="block">Getter for a fileID of a dependency in the CurseForge modpack.</div>
+</td>
 </tr>
 <tr id="i1" class="rowColor">
 <td class="colFirst"><code>java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#getProjectID--">getProjectID</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#getProjectID--">getProjectID</a></span>()</code>
+<div class="block">Getter for a projectID of a dependency in the CurseForge modpack.</div>
+</td>
 </tr>
 <tr id="i2" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#setFileID-java.lang.String-">setFileID</a></span>(java.lang.String&nbsp;fileID)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#setFileID-java.lang.String-">setFileID</a></span>(java.lang.String&nbsp;fileID)</code>
+<div class="block">Setter for a fileID of a dependency in the CurseForge modpack.</div>
+</td>
 </tr>
 <tr id="i3" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#setProjectID-java.lang.String-">setProjectID</a></span>(java.lang.String&nbsp;projectID)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#setProjectID-java.lang.String-">setProjectID</a></span>(java.lang.String&nbsp;projectID)</code>
+<div class="block">Setter for a projectID of a dependency in the CurseForge modpack.</div>
+</td>
 </tr>
 <tr id="i4" class="altColor">
 <td class="colFirst"><code>java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#toString--">toString</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#toString--">toString</a></span>()</code>
+<div class="block">A comma separated combination of a dependency projectID and fileID of a CurseForge modpack.</div>
+</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -216,6 +237,9 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>projectID</h4>
 <pre>private&nbsp;java.lang.String projectID</pre>
+<div class="block">Ignore unknown values/object. We only want to gather specific information and disregard the rest. Setting this
+ property allows us setup the class to only gather the information we want, so we don't have to worry about any
+ additions to the source-data being made, which would otherwise cause an "Unknown property" exception.</div>
 </li>
 </ul>
 <a name="fileID">
@@ -259,6 +283,11 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>getProjectID</h4>
 <pre>public&nbsp;java.lang.String&nbsp;getProjectID()</pre>
+<div class="block">Getter for a projectID of a dependency in the CurseForge modpack.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>String. Returns a projectID of a dependency in the modpack acquired from CurseForge.</dd>
+</dl>
 </li>
 </ul>
 <a name="setProjectID-java.lang.String-">
@@ -268,6 +297,11 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>setProjectID</h4>
 <pre>public&nbsp;void&nbsp;setProjectID(java.lang.String&nbsp;projectID)</pre>
+<div class="block">Setter for a projectID of a dependency in the CurseForge modpack.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>projectID</code> - Receives the projectID of a dependency in the modpack acquired from CurseForge.</dd>
+</dl>
 </li>
 </ul>
 <a name="getFileID--">
@@ -277,6 +311,11 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>getFileID</h4>
 <pre>public&nbsp;java.lang.String&nbsp;getFileID()</pre>
+<div class="block">Getter for a fileID of a dependency in the CurseForge modpack.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>String. Returns a fileID of a dependency in the modpack acquired from CurseForge.</dd>
+</dl>
 </li>
 </ul>
 <a name="setFileID-java.lang.String-">
@@ -286,6 +325,11 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>setFileID</h4>
 <pre>public&nbsp;void&nbsp;setFileID(java.lang.String&nbsp;fileID)</pre>
+<div class="block">Setter for a fileID of a dependency in the CurseForge modpack.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>fileID</code> - Receives the fileID of a dependency in the modpack acquired from CurseForge.</dd>
+</dl>
 </li>
 </ul>
 <a name="toString--">
@@ -295,9 +339,13 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>toString</h4>
 <pre>public&nbsp;java.lang.String&nbsp;toString()</pre>
+<div class="block">A comma separated combination of a dependency projectID and fileID of a CurseForge modpack.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code>toString</code>&nbsp;in class&nbsp;<code>java.lang.Object</code></dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>String. Returns a comma separated projectID,fileID combination of a dependency of a modpack acquired from
+ CurseForge.</dd>
 </dl>
 </li>
 </ul>
diff --git a/docs/de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html b/docs/de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html
index 5989e2acf..56f610116 100644
--- a/docs/de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html
+++ b/docs/de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html
@@ -107,8 +107,16 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <hr>
 <br>
-<pre>class <span class="typeNameLabel">CurseMinecraft</span>
+<pre>public class <span class="typeNameLabel">CurseMinecraft</span>
 extends java.lang.Object</pre>
+<div class="block"><strong>Table of methods</strong><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#getVersion--"><code>getVersion()</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#setVersion-java.lang.String-"><code>setVersion(String)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#getModLoaders--"><code>getModLoaders()</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#setModLoaders-java.util.List-"><code>setModLoaders(List)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#toString--"><code>toString()</code></a><p>
+ Retrieves information about a CurseForge Minecraft modpack by using <code>com.fasterxml.jackson.databind</code> JSON parsing.
+ This class retrieves the Minecraft version of a modpack.</div>
 </li>
 </ul>
 </div>
@@ -133,7 +141,9 @@ extends java.lang.Object</pre>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#version">version</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#version">version</a></span></code>
+<div class="block">Ignore unknown values/object.</div>
+</td>
 </tr>
 </table>
 </li>
@@ -169,23 +179,34 @@ extends java.lang.Object</pre>
 </tr>
 <tr id="i0" class="altColor">
 <td class="colFirst"><code>java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModLoaders</a>&gt;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#getModLoaders--">getModLoaders</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#getModLoaders--">getModLoaders</a></span>()</code>
+<div class="block">Getter for modloader related information using <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><code>CurseModLoaders</code></a>.</div>
+</td>
 </tr>
 <tr id="i1" class="rowColor">
 <td class="colFirst"><code>java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#getVersion--">getVersion</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#getVersion--">getVersion</a></span>()</code>
+<div class="block">Getter for the Minecraft version used by the CurseForge modpack.</div>
+</td>
 </tr>
 <tr id="i2" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#setModLoaders-java.util.List-">setModLoaders</a></span>(java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModLoaders</a>&gt;&nbsp;modLoaders)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#setModLoaders-java.util.List-">setModLoaders</a></span>(java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModLoaders</a>&gt;&nbsp;modLoaders)</code>
+<div class="block">Setter for modloader related information using <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><code>CurseModLoaders</code></a>.</div>
+</td>
 </tr>
 <tr id="i3" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#setVersion-java.lang.String-">setVersion</a></span>(java.lang.String&nbsp;version)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#setVersion-java.lang.String-">setVersion</a></span>(java.lang.String&nbsp;version)</code>
+<div class="block">Setter for the Minecraft version used by the CurseForge modpack.</div>
+</td>
 </tr>
 <tr id="i4" class="altColor">
 <td class="colFirst"><code>java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#toString--">toString</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#toString--">toString</a></span>()</code>
+<div class="block">String containing information about the Minecraft version, modloader and modloader version used by the CurseForge
+ modpack.</div>
+</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -216,6 +237,9 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>version</h4>
 <pre>private&nbsp;java.lang.String version</pre>
+<div class="block">Ignore unknown values/object. We only want to gather specific information and disregard the rest. Setting this
+ property allows us setup the class to only gather the information we want, so we don't have to worry about any
+ additions to the source-data being made, which would otherwise cause an "Unknown property" exception.</div>
 </li>
 </ul>
 <a name="modLoaders">
@@ -241,7 +265,7 @@ extends java.lang.Object</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>CurseMinecraft</h4>
-<pre>CurseMinecraft()</pre>
+<pre>public&nbsp;CurseMinecraft()</pre>
 </li>
 </ul>
 </li>
@@ -259,6 +283,11 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>getVersion</h4>
 <pre>public&nbsp;java.lang.String&nbsp;getVersion()</pre>
+<div class="block">Getter for the Minecraft version used by the CurseForge modpack.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>String. Returns the Minecraft version used by the modpack acquired from CurseForge.</dd>
+</dl>
 </li>
 </ul>
 <a name="setVersion-java.lang.String-">
@@ -268,6 +297,11 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>setVersion</h4>
 <pre>public&nbsp;void&nbsp;setVersion(java.lang.String&nbsp;version)</pre>
+<div class="block">Setter for the Minecraft version used by the CurseForge modpack.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>version</code> - Receives the Minecraft version of the CurseForge modpack.</dd>
+</dl>
 </li>
 </ul>
 <a name="getModLoaders--">
@@ -277,6 +311,12 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>getModLoaders</h4>
 <pre>public&nbsp;java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModLoaders</a>&gt;&nbsp;getModLoaders()</pre>
+<div class="block">Getter for modloader related information using <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><code>CurseModLoaders</code></a>.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>List CurseModLoaders. Returns an isntance of CurseModLoaders.class with information about the modlaoder
+ and modloader version used by the CurseForge modpack.</dd>
+</dl>
 </li>
 </ul>
 <a name="setModLoaders-java.util.List-">
@@ -286,6 +326,11 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>setModLoaders</h4>
 <pre>public&nbsp;void&nbsp;setModLoaders(java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModLoaders</a>&gt;&nbsp;modLoaders)</pre>
+<div class="block">Setter for modloader related information using <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><code>CurseModLoaders</code></a>.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>modLoaders</code> - Receives an instance of CurseModLoaders.class.</dd>
+</dl>
 </li>
 </ul>
 <a name="toString--">
@@ -295,9 +340,14 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>toString</h4>
 <pre>public&nbsp;java.lang.String&nbsp;toString()</pre>
+<div class="block">String containing information about the Minecraft version, modloader and modloader version used by the CurseForge
+ modpack.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code>toString</code>&nbsp;in class&nbsp;<code>java.lang.Object</code></dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>String. Returns a String with the Minecraft version, used modloader and modloader version of a modpack
+ acquired from CurseForge.</dd>
 </dl>
 </li>
 </ul>
diff --git a/docs/de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html b/docs/de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html
index f12e1bd49..5fef031b5 100644
--- a/docs/de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html
+++ b/docs/de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html
@@ -107,8 +107,14 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <hr>
 <br>
-<pre>class <span class="typeNameLabel">CurseModLoaders</span>
+<pre>public class <span class="typeNameLabel">CurseModLoaders</span>
 extends java.lang.Object</pre>
+<div class="block"><strong>Table of methods</strong><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html#getId--"><code>getId()</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html#setId-java.lang.String-"><code>setId(String)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html#toString--"><code>toString()</code></a><p>
+ Retrieves information about a CurseForge Minecraft modpack by using <code>com.fasterxml.jackson.databind</code> JSON parsing.
+ This class retrieves the modloader and modloader version of a modpack.</div>
 </li>
 </ul>
 </div>
@@ -129,7 +135,9 @@ extends java.lang.Object</pre>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html#id">id</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html#id">id</a></span></code>
+<div class="block">Ignore unknown values/object.</div>
+</td>
 </tr>
 </table>
 </li>
@@ -165,15 +173,21 @@ extends java.lang.Object</pre>
 </tr>
 <tr id="i0" class="altColor">
 <td class="colFirst"><code>java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html#getId--">getId</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html#getId--">getId</a></span>()</code>
+<div class="block">Getter for the modloader and modloader version used by the CurseForge modpack.</div>
+</td>
 </tr>
 <tr id="i1" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html#setId-java.lang.String-">setId</a></span>(java.lang.String&nbsp;id)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html#setId-java.lang.String-">setId</a></span>(java.lang.String&nbsp;id)</code>
+<div class="block">Setter for the modloader and modloader version used by the CurseForge modpack.</div>
+</td>
 </tr>
 <tr id="i2" class="altColor">
 <td class="colFirst"><code>java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html#toString--">toString</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html#toString--">toString</a></span>()</code>
+<div class="block">String containing information about the CurseForge modpack's used modloader and the modloader version.</div>
+</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -204,6 +218,9 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>id</h4>
 <pre>private&nbsp;java.lang.String id</pre>
+<div class="block">Ignore unknown values/object. We only want to gather specific information and disregard the rest. Setting this
+ property allows us setup the class to only gather the information we want, so we don't have to worry about any
+ additions to the source-data being made, which would otherwise cause an "Unknown property" exception.</div>
 </li>
 </ul>
 </li>
@@ -220,7 +237,7 @@ extends java.lang.Object</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>CurseModLoaders</h4>
-<pre>CurseModLoaders()</pre>
+<pre>public&nbsp;CurseModLoaders()</pre>
 </li>
 </ul>
 </li>
@@ -238,6 +255,13 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>getId</h4>
 <pre>public&nbsp;java.lang.String&nbsp;getId()</pre>
+<div class="block">Getter for the modloader and modloader version used by the CurseForge modpack. It's a single string in the
+ manifest.json which contains the modloader and the version of said modloader, for example <code>"id": "forge-36.1.4"</code></div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>String. Returns the id of the modpack acquired from CurseForge containing information about the modloader
+ and the version of said modloader.</dd>
+</dl>
 </li>
 </ul>
 <a name="setId-java.lang.String-">
@@ -247,6 +271,13 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>setId</h4>
 <pre>public&nbsp;void&nbsp;setId(java.lang.String&nbsp;id)</pre>
+<div class="block">Setter for the modloader and modloader version used by the CurseForge modpack. It's a single string in the
+ manifest.json which contains the modloader and the version of said modloader, for example <code>"id": "forge-36.1.4"</code></div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>id</code> - Receives the id of the CurseForge modpack containing information about the modloader
+ and the version of said modloader.</dd>
+</dl>
 </li>
 </ul>
 <a name="toString--">
@@ -256,9 +287,13 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>toString</h4>
 <pre>public&nbsp;java.lang.String&nbsp;toString()</pre>
+<div class="block">String containing information about the CurseForge modpack's used modloader and the modloader version.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code>toString</code>&nbsp;in class&nbsp;<code>java.lang.Object</code></dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>String. Returns the String with information about the modloader and modloader version used by the
+ CurseForge modpack.</dd>
 </dl>
 </li>
 </ul>
diff --git a/docs/de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html b/docs/de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html
index 6b71df42e..54b8b67cf 100644
--- a/docs/de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html
+++ b/docs/de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html
@@ -17,7 +17,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -109,6 +109,20 @@ var activeTableTab = "activeTableTab";
 <br>
 <pre>public class <span class="typeNameLabel">CurseModpack</span>
 extends java.lang.Object</pre>
+<div class="block"><strong>Table of methods</strong><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#getMinecraft--"><code>getMinecraft()</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#setMinecraft-java.util.List-"><code>setMinecraft(List)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#getName--"><code>getName()</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#setName-java.lang.String-"><code>setName(String)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#getVersion--"><code>getVersion()</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#setVersion-java.lang.String-"><code>setVersion(String)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#getAuthor--"><code>getAuthor()</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#setAuthor-java.lang.String-"><code>setAuthor(String)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#getFiles--"><code>getFiles()</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#setFiles-java.util.List-"><code>setFiles(List)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#toString--"><code>toString()</code></a><p>
+ Retrieve information about a CurseForge Minecraft modpack by using <code>com.fasterxml.jackson.databind</code> JSON parsing.
+ This class retrieves the name, version and author of a modpack.</div>
 </li>
 </ul>
 </div>
@@ -137,7 +151,9 @@ extends java.lang.Object</pre>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseMinecraft</a>&gt;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#minecraft">minecraft</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#minecraft">minecraft</a></span></code>
+<div class="block">Ignore unknown values/object.</div>
+</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private java.lang.String</code></td>
@@ -181,43 +197,69 @@ extends java.lang.Object</pre>
 </tr>
 <tr id="i0" class="altColor">
 <td class="colFirst"><code>java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#getAuthor--">getAuthor</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#getAuthor--">getAuthor</a></span>()</code>
+<div class="block">Getter for the author of the CurseForge modpack.</div>
+</td>
 </tr>
 <tr id="i1" class="rowColor">
 <td class="colFirst"><code>java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseFiles</a>&gt;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#getFiles--">getFiles</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#getFiles--">getFiles</a></span>()</code>
+<div class="block">Getter for the files on which the CurseForge modpack depends by using <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><code>CurseFiles</code></a>.</div>
+</td>
 </tr>
 <tr id="i2" class="altColor">
 <td class="colFirst"><code>java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseMinecraft</a>&gt;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#getMinecraft--">getMinecraft</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#getMinecraft--">getMinecraft</a></span>()</code>
+<div class="block">Getter for Minecraft related information using <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><code>CurseMinecraft</code></a>.</div>
+</td>
 </tr>
 <tr id="i3" class="rowColor">
 <td class="colFirst"><code>java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#getName--">getName</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#getName--">getName</a></span>()</code>
+<div class="block">Getter for the name of the CurseForge modpack.</div>
+</td>
 </tr>
 <tr id="i4" class="altColor">
 <td class="colFirst"><code>java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#getVersion--">getVersion</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#getVersion--">getVersion</a></span>()</code>
+<div class="block">Getter for the version of the CurseForge modpack.</div>
+</td>
 </tr>
 <tr id="i5" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#setFiles-java.util.List-">setFiles</a></span>(java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseFiles</a>&gt;&nbsp;files)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#setAuthor-java.lang.String-">setAuthor</a></span>(java.lang.String&nbsp;newAuthor)</code>
+<div class="block">Setter for the author of the CurseForge modpack.</div>
+</td>
 </tr>
 <tr id="i6" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#setMinecraft-java.util.List-">setMinecraft</a></span>(java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseMinecraft</a>&gt;&nbsp;minecraft)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#setFiles-java.util.List-">setFiles</a></span>(java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseFiles</a>&gt;&nbsp;newFiles)</code>
+<div class="block">Setter for the CurseForge modpack files on which it depends.</div>
+</td>
 </tr>
 <tr id="i7" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#setName-java.lang.String-">setName</a></span>(java.lang.String&nbsp;name)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#setMinecraft-java.util.List-">setMinecraft</a></span>(java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseMinecraft</a>&gt;&nbsp;newMinecraft)</code>
+<div class="block">Setter for Minecraft related information using <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><code>CurseMinecraft</code></a></div>
+</td>
 </tr>
 <tr id="i8" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#setVersion-java.lang.String-">setVersion</a></span>(java.lang.String&nbsp;version)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#setName-java.lang.String-">setName</a></span>(java.lang.String&nbsp;newName)</code>
+<div class="block">Setter for the name of the CurseForge modpack.</div>
+</td>
 </tr>
 <tr id="i9" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#setVersion-java.lang.String-">setVersion</a></span>(java.lang.String&nbsp;newVersion)</code>
+<div class="block">Setter for the version of the CurseForge modpack.</div>
+</td>
+</tr>
+<tr id="i10" class="altColor">
 <td class="colFirst"><code>java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#toString--">toString</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#toString--">toString</a></span>()</code>
+<div class="block">String containing information about the CurseForge modpack.</div>
+</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -248,6 +290,9 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>minecraft</h4>
 <pre>private&nbsp;java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseMinecraft</a>&gt; minecraft</pre>
+<div class="block">Ignore unknown values/object. We only want to gather specific information and disregard the rest. Setting this
+ property allows us setup the class to only gather the information we want, so we don't have to worry about any
+ additions to the source-data being made, which would otherwise cause an "Unknown property" exception.</div>
 </li>
 </ul>
 <a name="name">
@@ -318,6 +363,11 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>getMinecraft</h4>
 <pre>public&nbsp;java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseMinecraft</a>&gt;&nbsp;getMinecraft()</pre>
+<div class="block">Getter for Minecraft related information using <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><code>CurseMinecraft</code></a>.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>List CurseMinecraft. Returns an instance of CurseMinecraft.class with information related to Minecraft.</dd>
+</dl>
 </li>
 </ul>
 <a name="setMinecraft-java.util.List-">
@@ -326,7 +376,12 @@ extends java.lang.Object</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>setMinecraft</h4>
-<pre>public&nbsp;void&nbsp;setMinecraft(java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseMinecraft</a>&gt;&nbsp;minecraft)</pre>
+<pre>public&nbsp;void&nbsp;setMinecraft(java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseMinecraft</a>&gt;&nbsp;newMinecraft)</pre>
+<div class="block">Setter for Minecraft related information using <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><code>CurseMinecraft</code></a></div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>newMinecraft</code> - Receives an instance of the CurseMinecraft.class.</dd>
+</dl>
 </li>
 </ul>
 <a name="getName--">
@@ -336,6 +391,11 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>getName</h4>
 <pre>public&nbsp;java.lang.String&nbsp;getName()</pre>
+<div class="block">Getter for the name of the CurseForge modpack.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>String. Returns the name of modpack acquired from CurseForge.</dd>
+</dl>
 </li>
 </ul>
 <a name="setName-java.lang.String-">
@@ -344,7 +404,12 @@ extends java.lang.Object</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>setName</h4>
-<pre>public&nbsp;void&nbsp;setName(java.lang.String&nbsp;name)</pre>
+<pre>public&nbsp;void&nbsp;setName(java.lang.String&nbsp;newName)</pre>
+<div class="block">Setter for the name of the CurseForge modpack.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>newName</code> - Receives the name of the CurseForge modpack.</dd>
+</dl>
 </li>
 </ul>
 <a name="getVersion--">
@@ -354,6 +419,11 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>getVersion</h4>
 <pre>public&nbsp;java.lang.String&nbsp;getVersion()</pre>
+<div class="block">Getter for the version of the CurseForge modpack.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>String. Returns the version of the modpack acquired from CurseForge.</dd>
+</dl>
 </li>
 </ul>
 <a name="setVersion-java.lang.String-">
@@ -362,7 +432,12 @@ extends java.lang.Object</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>setVersion</h4>
-<pre>public&nbsp;void&nbsp;setVersion(java.lang.String&nbsp;version)</pre>
+<pre>public&nbsp;void&nbsp;setVersion(java.lang.String&nbsp;newVersion)</pre>
+<div class="block">Setter for the version of the CurseForge modpack.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>newVersion</code> - Receives the version of the modpack acquired from CurseForge.</dd>
+</dl>
 </li>
 </ul>
 <a name="getAuthor--">
@@ -372,6 +447,25 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>getAuthor</h4>
 <pre>public&nbsp;java.lang.String&nbsp;getAuthor()</pre>
+<div class="block">Getter for the author of the CurseForge modpack.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>String. Returns the author of the modpack acquired from CurseForge.</dd>
+</dl>
+</li>
+</ul>
+<a name="setAuthor-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setAuthor</h4>
+<pre>public&nbsp;void&nbsp;setAuthor(java.lang.String&nbsp;newAuthor)</pre>
+<div class="block">Setter for the author of the CurseForge modpack.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>newAuthor</code> - Receives the author of the modpack acquired from CurseForge.</dd>
+</dl>
 </li>
 </ul>
 <a name="getFiles--">
@@ -381,6 +475,12 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>getFiles</h4>
 <pre>public&nbsp;java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseFiles</a>&gt;&nbsp;getFiles()</pre>
+<div class="block">Getter for the files on which the CurseForge modpack depends by using <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><code>CurseFiles</code></a>.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>List CurseFiles. Returns an instance of CurseFiles.class with information related to the files included
+ in the CurseForge modpack.</dd>
+</dl>
 </li>
 </ul>
 <a name="setFiles-java.util.List-">
@@ -389,7 +489,12 @@ extends java.lang.Object</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>setFiles</h4>
-<pre>public&nbsp;void&nbsp;setFiles(java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseFiles</a>&gt;&nbsp;files)</pre>
+<pre>public&nbsp;void&nbsp;setFiles(java.util.List&lt;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseFiles</a>&gt;&nbsp;newFiles)</pre>
+<div class="block">Setter for the CurseForge modpack files on which it depends.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>newFiles</code> - Receives an instance of CurseFiles.class with information about the files on which the modpack depends.</dd>
+</dl>
 </li>
 </ul>
 <a name="toString--">
@@ -399,9 +504,13 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>toString</h4>
 <pre>public&nbsp;java.lang.String&nbsp;toString()</pre>
+<div class="block">String containing information about the CurseForge modpack. Included are <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#getMinecraft--"><code>getMinecraft()</code></a>,
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#getName--"><code>getName()</code></a>, <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#getVersion--"><code>getVersion()</code></a>, <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#getAuthor--"><code>getAuthor()</code></a>, <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#getFiles--"><code>getFiles()</code></a>.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code>toString</code>&nbsp;in class&nbsp;<code>java.lang.Object</code></dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>String. Returns String with information about the CurseForge modpack.</dd>
 </dl>
 </li>
 </ul>
diff --git a/docs/de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html b/docs/de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html
index c85ff1e0c..af22d346e 100644
--- a/docs/de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html
+++ b/docs/de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html
@@ -107,8 +107,16 @@ var activeTableTab = "activeTableTab";
 <li class="blockList">
 <hr>
 <br>
-<pre>class <span class="typeNameLabel">CurseSplines</span>
+<pre>public class <span class="typeNameLabel">CurseSplines</span>
 extends java.lang.Object</pre>
+<div class="block"><strong>Table of methods</strong><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html#reticulating"><code>reticulating</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html#getRandomInt--"><code>getRandomInt()</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html#getSpline--"><code>getSpline()</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html#reticulate--"><code>reticulate()</code></a><p>
+ Just something fun to brighten the mood. This class provides a list of messages which some of you may know from the
+ SimCity games. Thanks go out to MAXIS and Sim City, for the ridiculous messages these games contained.
+ Additional thanks to Larsz for providing a list of all these messages <a href=https://gamefaqs.gamespot.com/pc/561176-simcity-4/faqs/22135>on GameFAQs </a></div>
 </li>
 </ul>
 </div>
@@ -129,7 +137,9 @@ extends java.lang.Object</pre>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private java.lang.String[]</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html#reticulating">reticulating</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html#reticulating">reticulating</a></span></code>
+<div class="block">The list of messages as they were available in SimCity, plus Reticulating Splines added by myself, for good measure.</div>
+</td>
 </tr>
 </table>
 </li>
@@ -165,15 +175,21 @@ extends java.lang.Object</pre>
 </tr>
 <tr id="i0" class="altColor">
 <td class="colFirst"><code>private int</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html#getRandomInt--">getRandomInt</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html#getRandomInt--">getRandomInt</a></span>()</code>
+<div class="block">Retrieves the index of a random message in <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html#reticulating"><code>reticulating</code></a>.</div>
+</td>
 </tr>
 <tr id="i1" class="rowColor">
 <td class="colFirst"><code>private java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html#getSpline--">getSpline</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html#getSpline--">getSpline</a></span>()</code>
+<div class="block">Retrieves a message from <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html#reticulating"><code>reticulating</code></a> using a randomly generated index from <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html#getRandomInt--"><code>getRandomInt()</code></a>.</div>
+</td>
 </tr>
 <tr id="i2" class="altColor">
 <td class="colFirst"><code>java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html#reticulate--">reticulate</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html#reticulate--">reticulate</a></span>()</code>
+<div class="block">Retrieve a random message from <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html#reticulating"><code>reticulating</code></a>.</div>
+</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -204,6 +220,7 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>reticulating</h4>
 <pre>private final&nbsp;java.lang.String[] reticulating</pre>
+<div class="block">The list of messages as they were available in SimCity, plus Reticulating Splines added by myself, for good measure.</div>
 </li>
 </ul>
 </li>
@@ -220,7 +237,7 @@ extends java.lang.Object</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>CurseSplines</h4>
-<pre>CurseSplines()</pre>
+<pre>public&nbsp;CurseSplines()</pre>
 </li>
 </ul>
 </li>
@@ -238,6 +255,11 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>getRandomInt</h4>
 <pre>private&nbsp;int&nbsp;getRandomInt()</pre>
+<div class="block">Retrieves the index of a random message in <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html#reticulating"><code>reticulating</code></a>.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Integer. Returns a randomly generated index.</dd>
+</dl>
 </li>
 </ul>
 <a name="getSpline--">
@@ -247,6 +269,11 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>getSpline</h4>
 <pre>private&nbsp;java.lang.String&nbsp;getSpline()</pre>
+<div class="block">Retrieves a message from <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html#reticulating"><code>reticulating</code></a> using a randomly generated index from <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html#getRandomInt--"><code>getRandomInt()</code></a>.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>String. Returns the message at the index provided by the randomizer.</dd>
+</dl>
 </li>
 </ul>
 <a name="reticulate--">
@@ -256,6 +283,11 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>reticulate</h4>
 <pre>public&nbsp;java.lang.String&nbsp;reticulate()</pre>
+<div class="block">Retrieve a random message from <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html#reticulating"><code>reticulating</code></a>.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>String. Returns a random message.</dd>
+</dl>
 </li>
 </ul>
 </li>
diff --git a/docs/de/griefed/serverpackcreator/curseforgemodpack/package-summary.html b/docs/de/griefed/serverpackcreator/curseforgemodpack/package-summary.html
index 802b0cf25..f75910fbf 100644
--- a/docs/de/griefed/serverpackcreator/curseforgemodpack/package-summary.html
+++ b/docs/de/griefed/serverpackcreator/curseforgemodpack/package-summary.html
@@ -82,27 +82,84 @@
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseCreateModpack</a></td>
-<td class="colLast">&nbsp;</td>
+<td class="colLast">
+<div class="block"><strong>Table of methods</strong><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#CurseCreateModpack-de.griefed.serverpackcreator.i18n.LocalizationManager-"><code>CurseCreateModpack.CurseCreateModpack(LocalizationManager)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#setModloaderCase-java.lang.String-"><code>CurseCreateModpack.setModloaderCase(String)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#curseForgeModpack-java.lang.String-java.lang.Integer-java.lang.Integer-"><code>CurseCreateModpack.curseForgeModpack(String, Integer, Integer)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#initializeModpack-java.lang.String-java.lang.Integer-java.lang.Integer-"><code>CurseCreateModpack.initializeModpack(String, Integer, Integer)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#downloadMods-java.lang.String-"><code>CurseCreateModpack.downloadMods(String)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#copyOverride-java.lang.String-"><code>CurseCreateModpack.copyOverride(String)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#checkCurseForgeDir-java.lang.String-"><code>CurseCreateModpack.checkCurseForgeDir(String)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#unzipArchive-java.lang.String-java.lang.String-"><code>CurseCreateModpack.unzipArchive(String, String)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#newFile-java.io.File-java.util.zip.ZipEntry-"><code>CurseCreateModpack.newFile(File, ZipEntry)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#cleanupEnvironment-java.lang.String-"><code>CurseCreateModpack.cleanupEnvironment(String)</code></a>
+ Download a modpack from CurseForge and create it by unzipping the ZIP-archive, copy all folders and files from the
+ override directory to the parent directory, download all mods in said modpack, and delete no longer needed files.</div>
+</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseFiles</a></td>
-<td class="colLast">&nbsp;</td>
+<td class="colLast">
+<div class="block"><strong>Table of methods</strong><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#getProjectID--"><code>CurseFiles.getProjectID()</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#setProjectID-java.lang.String-"><code>CurseFiles.setProjectID(String)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#getFileID--"><code>CurseFiles.getFileID()</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#setFileID-java.lang.String-"><code>CurseFiles.setFileID(String)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#toString--"><code>CurseFiles.toString()</code></a>
+ Retrieves information about a CurseForge Minecraft modpack by using <code>com.fasterxml.jackson.databind</code> JSON parsing.</div>
+</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseMinecraft</a></td>
-<td class="colLast">&nbsp;</td>
+<td class="colLast">
+<div class="block"><strong>Table of methods</strong><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#getVersion--"><code>CurseMinecraft.getVersion()</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#setVersion-java.lang.String-"><code>CurseMinecraft.setVersion(String)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#getModLoaders--"><code>CurseMinecraft.getModLoaders()</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#setModLoaders-java.util.List-"><code>CurseMinecraft.setModLoaders(List)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#toString--"><code>CurseMinecraft.toString()</code></a>
+ Retrieves information about a CurseForge Minecraft modpack by using <code>com.fasterxml.jackson.databind</code> JSON parsing.</div>
+</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModLoaders</a></td>
-<td class="colLast">&nbsp;</td>
+<td class="colLast">
+<div class="block"><strong>Table of methods</strong><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html#getId--"><code>CurseModLoaders.getId()</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html#setId-java.lang.String-"><code>CurseModLoaders.setId(String)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html#toString--"><code>CurseModLoaders.toString()</code></a>
+ Retrieves information about a CurseForge Minecraft modpack by using <code>com.fasterxml.jackson.databind</code> JSON parsing.</div>
+</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModpack</a></td>
-<td class="colLast">&nbsp;</td>
+<td class="colLast">
+<div class="block"><strong>Table of methods</strong><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#getMinecraft--"><code>CurseModpack.getMinecraft()</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#setMinecraft-java.util.List-"><code>CurseModpack.setMinecraft(List)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#getName--"><code>CurseModpack.getName()</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#setName-java.lang.String-"><code>CurseModpack.setName(String)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#getVersion--"><code>CurseModpack.getVersion()</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#setVersion-java.lang.String-"><code>CurseModpack.setVersion(String)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#getAuthor--"><code>CurseModpack.getAuthor()</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#setAuthor-java.lang.String-"><code>CurseModpack.setAuthor(String)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#getFiles--"><code>CurseModpack.getFiles()</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#setFiles-java.util.List-"><code>CurseModpack.setFiles(List)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#toString--"><code>CurseModpack.toString()</code></a>
+ Retrieve information about a CurseForge Minecraft modpack by using <code>com.fasterxml.jackson.databind</code> JSON parsing.</div>
+</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseSplines</a></td>
-<td class="colLast">&nbsp;</td>
+<td class="colLast">
+<div class="block"><strong>Table of methods</strong><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html#reticulating"><code>CurseSplines.reticulating</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html#getRandomInt--"><code>CurseSplines.getRandomInt()</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html#getSpline--"><code>CurseSplines.getSpline()</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html#reticulate--"><code>CurseSplines.reticulate()</code></a>
+ Just something fun to brighten the mood.</div>
+</td>
 </tr>
 </tbody>
 </table>
diff --git a/docs/de/griefed/serverpackcreator/gui/AboutTab.html b/docs/de/griefed/serverpackcreator/gui/AboutTab.html
index 43070616e..524a56ca9 100644
--- a/docs/de/griefed/serverpackcreator/gui/AboutTab.html
+++ b/docs/de/griefed/serverpackcreator/gui/AboutTab.html
@@ -116,8 +116,15 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>class <span class="typeNameLabel">AboutTab</span>
+<pre>public class <span class="typeNameLabel">AboutTab</span>
 extends java.awt.Component</pre>
+<div class="block">This class creates the tab which displays the About-tab, with the about text, the list of contributors, buttons for
+ opening PasteBin in your browser, opening ServerPackCreator's issue page on GitHub and for opening the invite link
+ to Griefed#s discord server in your browser.</div>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../serialized-form.html#de.griefed.serverpackcreator.gui.AboutTab">Serialized Form</a></dd>
+</dl>
 </li>
 </ul>
 </div>
@@ -152,29 +159,61 @@ extends java.awt.Component</pre>
 <th class="colLast" scope="col">Field and Description</th>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>private javax.swing.JComponent</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html#aboutPanel">aboutPanel</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>private static org.apache.logging.log4j.Logger</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html#appLogger">appLogger</a></span></code>&nbsp;</td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><code>private javax.swing.text.SimpleAttributeSet</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html#attributeSet">attributeSet</a></span></code>&nbsp;</td>
+</tr>
 <tr class="rowColor">
+<td class="colFirst"><code>private javax.swing.JButton</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html#buttonCreatePasteBin">buttonCreatePasteBin</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private javax.swing.JButton</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html#buttonDiscord">buttonDiscord</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private javax.swing.JButton</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html#buttonOpenIssue">buttonOpenIssue</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private java.awt.GridBagConstraints</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html#constraints">constraints</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private javax.swing.text.StyledDocument</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html#document">document</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>private javax.swing.ImageIcon</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html#issueIcon">issueIcon</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html#localizationManager">localizationManager</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private java.awt.Dimension</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html#miscButtonDimension">miscButtonDimension</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private javax.swing.ImageIcon</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html#pastebinIcon">pastebinIcon</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private javax.swing.ImageIcon</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html#prosperIcon">prosperIcon</a></span></code>&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private javax.swing.JTextPane</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html#textPane">textPane</a></span></code>&nbsp;</td>
+</tr>
 </table>
 <ul class="blockList">
 <li class="blockList"><a name="fields.inherited.from.class.java.awt.Component">
@@ -204,7 +243,10 @@ extends java.awt.Component</pre>
 <th class="colOne" scope="col">Constructor and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html#AboutTab-de.griefed.serverpackcreator.i18n.LocalizationManager-">AboutTab</a></span>(<a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a>&nbsp;injectedLocalizationManager)</code>&nbsp;</td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html#AboutTab-de.griefed.serverpackcreator.i18n.LocalizationManager-">AboutTab</a></span>(<a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a>&nbsp;injectedLocalizationManager)</code>
+<div class="block"><strong>Constructor</strong>
+ Used for Dependency Injection.</div>
+</td>
 </tr>
 </table>
 </li>
@@ -223,7 +265,9 @@ extends java.awt.Component</pre>
 </tr>
 <tr id="i0" class="altColor">
 <td class="colFirst"><code>(package private) javax.swing.JComponent</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html#aboutTab--">aboutTab</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html#aboutTab--">aboutTab</a></span>()</code>
+<div class="block">Create the tab for the About-page of ServerpackCreator.</div>
+</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -263,6 +307,15 @@ extends java.awt.Component</pre>
 <pre>private static final&nbsp;org.apache.logging.log4j.Logger appLogger</pre>
 </li>
 </ul>
+<a name="localizationManager">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>localizationManager</h4>
+<pre>private&nbsp;<a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a> localizationManager</pre>
+</li>
+</ul>
 <a name="miscButtonDimension">
 <!--   -->
 </a>
@@ -299,13 +352,76 @@ extends java.awt.Component</pre>
 <pre>private final&nbsp;javax.swing.ImageIcon prosperIcon</pre>
 </li>
 </ul>
-<a name="localizationManager">
+<a name="aboutPanel">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>aboutPanel</h4>
+<pre>private&nbsp;javax.swing.JComponent aboutPanel</pre>
+</li>
+</ul>
+<a name="constraints">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>constraints</h4>
+<pre>private&nbsp;java.awt.GridBagConstraints constraints</pre>
+</li>
+</ul>
+<a name="textPane">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>textPane</h4>
+<pre>private&nbsp;javax.swing.JTextPane textPane</pre>
+</li>
+</ul>
+<a name="attributeSet">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>attributeSet</h4>
+<pre>private&nbsp;javax.swing.text.SimpleAttributeSet attributeSet</pre>
+</li>
+</ul>
+<a name="document">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>document</h4>
+<pre>private&nbsp;javax.swing.text.StyledDocument document</pre>
+</li>
+</ul>
+<a name="buttonCreatePasteBin">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>buttonCreatePasteBin</h4>
+<pre>private&nbsp;javax.swing.JButton buttonCreatePasteBin</pre>
+</li>
+</ul>
+<a name="buttonOpenIssue">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>buttonOpenIssue</h4>
+<pre>private&nbsp;javax.swing.JButton buttonOpenIssue</pre>
+</li>
+</ul>
+<a name="buttonDiscord">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>localizationManager</h4>
-<pre>private&nbsp;<a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a> localizationManager</pre>
+<h4>buttonDiscord</h4>
+<pre>private&nbsp;javax.swing.JButton buttonDiscord</pre>
 </li>
 </ul>
 </li>
@@ -323,6 +439,14 @@ extends java.awt.Component</pre>
 <li class="blockList">
 <h4>AboutTab</h4>
 <pre>public&nbsp;AboutTab(<a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a>&nbsp;injectedLocalizationManager)</pre>
+<div class="block"><strong>Constructor</strong><p>
+ Used for Dependency Injection.<p>
+ Receives an instance of <a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n"><code>LocalizationManager</code></a> or creates one if the received
+ one is null. Required for use of localization.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>injectedLocalizationManager</code> - Instance of <a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n"><code>LocalizationManager</code></a> required for localized log messages.</dd>
+</dl>
 </li>
 </ul>
 </li>
@@ -340,6 +464,16 @@ extends java.awt.Component</pre>
 <li class="blockList">
 <h4>aboutTab</h4>
 <pre>javax.swing.JComponent&nbsp;aboutTab()</pre>
+<div class="block">Create the tab for the About-page of ServerpackCreator. This tab displays the about text, the list of contributors
+ to ServerPackCreator and offers three buttons to the user. Left to right: Open PasteBin in the user's browser to
+ create pastes of the the log files or configuration files or whatever they wish. Open ServerPackCreator's issues
+ page on GitHub in case the user wants to report an issue. Open the invite link to Griefed's discord server in the
+ users browser.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>JComponent. Returns a JPanel containing a JTextPane with the about text in a styled document, as well as
+ the three aforementioned buttons.</dd>
+</dl>
 </li>
 </ul>
 </li>
diff --git a/docs/de/griefed/serverpackcreator/gui/CreateGui.html b/docs/de/griefed/serverpackcreator/gui/CreateGui.html
index 0dc4b6863..b81258b3b 100644
--- a/docs/de/griefed/serverpackcreator/gui/CreateGui.html
+++ b/docs/de/griefed/serverpackcreator/gui/CreateGui.html
@@ -133,6 +133,14 @@ var activeTableTab = "activeTableTab";
 <br>
 <pre>public class <span class="typeNameLabel">CreateGui</span>
 extends javax.swing.JPanel</pre>
+<div class="block"><strong>Table of methods</strong><br>
+ <a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#CreateGui-de.griefed.serverpackcreator.i18n.LocalizationManager-de.griefed.serverpackcreator.Configuration-de.griefed.serverpackcreator.curseforgemodpack.CurseCreateModpack-de.griefed.serverpackcreator.CreateServerPack-"><code>CreateGui(LocalizationManager, Configuration, CurseCreateModpack, CreateServerPack)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#mainGUI--"><code>mainGUI()</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#createAndShowGUI--"><code>createAndShowGUI()</code></a><p>
+ This class creates and shows the GUI needed for running ServerPackCreator in....well...GUI mode. Calls <a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#mainGUI--"><code>mainGUI()</code></a>
+ which then calls <a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#createAndShowGUI--"><code>createAndShowGUI()</code></a> in order to create and show the GUI of ServerPackCreator. Instances of
+ the <a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui"><code>CreateServerPackTab</code></a>, <a href="../../../../de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html" title="class in de.griefed.serverpackcreator.gui"><code>ServerPackCreatorLogTab</code></a>, <a href="../../../../de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html" title="class in de.griefed.serverpackcreator.gui"><code>ModloaderInstallerLogTab</code></a>, <a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui"><code>AboutTab</code></a>
+ are created in the constructor of this class to make sure they are ready when the GUI is created and shown to the user.</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../serialized-form.html#de.griefed.serverpackcreator.gui.CreateGui">Serialized Form</a></dd>
@@ -204,6 +212,14 @@ extends javax.swing.JPanel</pre>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#configuration">configuration</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#createServerPack">createServerPack</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseCreateModpack</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#curseCreateModpack">curseCreateModpack</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>private java.awt.Image</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#icon">icon</a></span></code>&nbsp;</td>
 </tr>
@@ -212,6 +228,22 @@ extends javax.swing.JPanel</pre>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#localizationManager">localizationManager</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>private com.typesafe.config.Config</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#secret">secret</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private java.io.File</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#secretFile">secretFile</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private javax.swing.JLabel</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#serverPackCreatorBanner">serverPackCreatorBanner</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private javax.swing.JFrame</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#serverPackCreatorFrame">serverPackCreatorFrame</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>private java.awt.Dimension</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#windowDimension">windowDimension</a></span></code>&nbsp;</td>
 </tr>
@@ -251,8 +283,13 @@ extends javax.swing.JPanel</pre>
 <th class="colOne" scope="col">Constructor and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#CreateGui-de.griefed.serverpackcreator.i18n.LocalizationManager-de.griefed.serverpackcreator.Configuration-">CreateGui</a></span>(<a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a>&nbsp;injectedLocalizationManager,
-         <a href="../../../../de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a>&nbsp;injectedConfigCheck)</code>&nbsp;</td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#CreateGui-de.griefed.serverpackcreator.i18n.LocalizationManager-de.griefed.serverpackcreator.Configuration-de.griefed.serverpackcreator.curseforgemodpack.CurseCreateModpack-de.griefed.serverpackcreator.CreateServerPack-">CreateGui</a></span>(<a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a>&nbsp;injectedLocalizationManager,
+         <a href="../../../../de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a>&nbsp;injectedConfiguration,
+         <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseCreateModpack</a>&nbsp;injectedCurseCreateModpack,
+         <a href="../../../../de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a>&nbsp;injectedCreateServerPack)</code>
+<div class="block"><strong>Constructor</strong>
+ Used for Dependency Injection.</div>
+</td>
 </tr>
 </table>
 </li>
@@ -271,11 +308,15 @@ extends javax.swing.JPanel</pre>
 </tr>
 <tr id="i0" class="altColor">
 <td class="colFirst"><code>private void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#createAndShowGUI--">createAndShowGUI</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#createAndShowGUI--">createAndShowGUI</a></span>()</code>
+<div class="block">Creates the frame in which the banner, tabbed pane with all the tabs, icon and title are displayed and shows it.</div>
+</td>
 </tr>
 <tr id="i1" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#mainGUI--">mainGUI</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#mainGUI--">mainGUI</a></span>()</code>
+<div class="block">Shows the GUI from the EDT by using SwingUtilities and it's invokeLater method by calling <a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#createAndShowGUI--"><code>createAndShowGUI()</code></a>.</div>
+</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -375,12 +416,66 @@ extends javax.swing.JPanel</pre>
 <a name="configuration">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>configuration</h4>
 <pre>private&nbsp;<a href="../../../../de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a> configuration</pre>
 </li>
 </ul>
+<a name="curseCreateModpack">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>curseCreateModpack</h4>
+<pre>private&nbsp;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseCreateModpack</a> curseCreateModpack</pre>
+</li>
+</ul>
+<a name="createServerPack">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>createServerPack</h4>
+<pre>private&nbsp;<a href="../../../../de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a> createServerPack</pre>
+</li>
+</ul>
+<a name="serverPackCreatorFrame">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>serverPackCreatorFrame</h4>
+<pre>private&nbsp;javax.swing.JFrame serverPackCreatorFrame</pre>
+</li>
+</ul>
+<a name="serverPackCreatorBanner">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>serverPackCreatorBanner</h4>
+<pre>private&nbsp;javax.swing.JLabel serverPackCreatorBanner</pre>
+</li>
+</ul>
+<a name="secretFile">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>secretFile</h4>
+<pre>private&nbsp;java.io.File secretFile</pre>
+</li>
+</ul>
+<a name="secret">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>secret</h4>
+<pre>private&nbsp;com.typesafe.config.Config secret</pre>
+</li>
+</ul>
 </li>
 </ul>
 <!-- ========= CONSTRUCTOR DETAIL ======== -->
@@ -389,14 +484,32 @@ extends javax.swing.JPanel</pre>
 <!--   -->
 </a>
 <h3>Constructor Detail</h3>
-<a name="CreateGui-de.griefed.serverpackcreator.i18n.LocalizationManager-de.griefed.serverpackcreator.Configuration-">
+<a name="CreateGui-de.griefed.serverpackcreator.i18n.LocalizationManager-de.griefed.serverpackcreator.Configuration-de.griefed.serverpackcreator.curseforgemodpack.CurseCreateModpack-de.griefed.serverpackcreator.CreateServerPack-">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>CreateGui</h4>
 <pre>public&nbsp;CreateGui(<a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a>&nbsp;injectedLocalizationManager,
-                 <a href="../../../../de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a>&nbsp;injectedConfigCheck)</pre>
+                 <a href="../../../../de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a>&nbsp;injectedConfiguration,
+                 <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseCreateModpack</a>&nbsp;injectedCurseCreateModpack,
+                 <a href="../../../../de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a>&nbsp;injectedCreateServerPack)</pre>
+<div class="block"><strong>Constructor</strong><p>
+ Used for Dependency Injection.<p>
+ Receives an instance of <a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n"><code>LocalizationManager</code></a> or creates one if the received
+ one is null. Required for use of localization.<p>
+ Receives an instance of <a href="../../../../de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator"><code>Configuration</code></a> required to successfully and correctly create the server pack.<p>
+ Receives an instance of <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><code>CurseCreateModpack</code></a> in case the modpack has to be created from a combination of
+ CurseForge projectID and fileID, from which to <em>then</em> create the server pack.
+ Receives an instance of <a href="../../../../de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator"><code>CreateServerPack</code></a> which is required to generate a server pack.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>injectedLocalizationManager</code> - Instance of <a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n"><code>LocalizationManager</code></a> required for localized log messages.</dd>
+<dd><code>injectedConfiguration</code> - Instance of <a href="../../../../de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator"><code>Configuration</code></a> required to successfully and correctly create the server pack.</dd>
+<dd><code>injectedCurseCreateModpack</code> - Instance of <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><code>CurseCreateModpack</code></a> in case the modpack has to be created from a combination of
+ CurseForge projectID and fileID, from which to <em>then</em> create the server pack.</dd>
+<dd><code>injectedCreateServerPack</code> - Instance of <a href="../../../../de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator"><code>CreateServerPack</code></a> required for the generation of server packs.</dd>
+</dl>
 </li>
 </ul>
 </li>
@@ -414,6 +527,9 @@ extends javax.swing.JPanel</pre>
 <li class="blockList">
 <h4>mainGUI</h4>
 <pre>public&nbsp;void&nbsp;mainGUI()</pre>
+<div class="block">Shows the GUI from the EDT by using SwingUtilities and it's invokeLater method by calling <a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#createAndShowGUI--"><code>createAndShowGUI()</code></a>.
+ Sets the font to bold, which may be overridden by the LookAndFeel which gets automatically determined and depends
+ on the OS ServerPackCreator is run on.</div>
 </li>
 </ul>
 <a name="createAndShowGUI--">
@@ -423,6 +539,7 @@ extends javax.swing.JPanel</pre>
 <li class="blockList">
 <h4>createAndShowGUI</h4>
 <pre>private&nbsp;void&nbsp;createAndShowGUI()</pre>
+<div class="block">Creates the frame in which the banner, tabbed pane with all the tabs, icon and title are displayed and shows it.</div>
 </li>
 </ul>
 </li>
diff --git a/docs/de/griefed/serverpackcreator/gui/CreateServerPackTab.html b/docs/de/griefed/serverpackcreator/gui/CreateServerPackTab.html
index a30a2928e..eaf81e0e3 100644
--- a/docs/de/griefed/serverpackcreator/gui/CreateServerPackTab.html
+++ b/docs/de/griefed/serverpackcreator/gui/CreateServerPackTab.html
@@ -118,6 +118,17 @@ var activeTableTab = "activeTableTab";
 <br>
 <pre>public class <span class="typeNameLabel">CreateServerPackTab</span>
 extends java.awt.Component</pre>
+<div class="block">This class creates the tab which displays the labels, textfields, buttons and functions in order to create a new
+ server pack. Available are:<br>
+ JLabels and JTextFields for modpackDir, clientMods, copyDirs, javaPath, minecraftVersion, modLoader, modLoaderVersion<br>
+ Checkboxes for Include- serverInstallation, serverIcon, serverProperties, startScripts, ZIParchive<br>
+ Buttons opening the file explorer and choosing: modpackDir, clientMods, copyDirs, javaPath, loadConfigFromFile<br>
+ A button for displaying an information windows which provides detailed explanation of the important parts of the GUI.<br>
+ The button start the generation of a new server pack.<br>
+ The label under the button to start the generation of a new server pack, which displays the latest log entry of the
+ serverpackcreator.log <em>during</em> the creation of a new server pack.<p>
+     If a configuration file is found during startup of ServerPackCreator, it is automatically loaded into the GUI.
+ </p></div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../serialized-form.html#de.griefed.serverpackcreator.gui.CreateServerPackTab">Serialized Form</a></dd>
@@ -160,25 +171,145 @@ extends java.awt.Component</pre>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#appLogger">appLogger</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>private javax.swing.JButton</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#buttonClientMods">buttonClientMods</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private javax.swing.JButton</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#buttonCopyDirs">buttonCopyDirs</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private javax.swing.JButton</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#buttonGenerateServerPack">buttonGenerateServerPack</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private javax.swing.JButton</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#buttonInfoWindow">buttonInfoWindow</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private javax.swing.JButton</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#buttonJavaPath">buttonJavaPath</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private javax.swing.JButton</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#buttonLoadConfigFromFile">buttonLoadConfigFromFile</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private javax.swing.JButton</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#buttonModpackDir">buttonModpackDir</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private javax.swing.JCheckBox</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#checkBoxIcon">checkBoxIcon</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private javax.swing.JCheckBox</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#checkBoxProperties">checkBoxProperties</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private javax.swing.JCheckBox</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#checkBoxScripts">checkBoxScripts</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private javax.swing.JCheckBox</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#checkBoxServer">checkBoxServer</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private javax.swing.JCheckBox</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#checkBoxZIP">checkBoxZIP</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>private java.awt.Dimension</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#chooserDimension">chooserDimension</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>private javax.swing.JFileChooser</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#clientModsChooser">clientModsChooser</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private javax.swing.JFileChooser</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#configChooser">configChooser</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#configuration">configuration</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>private java.awt.GridBagConstraints</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#constraints">constraints</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private javax.swing.JFileChooser</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#copyDirsChooser">copyDirsChooser</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#createServerPack">createServerPack</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private javax.swing.JComponent</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#createServerPackPanel">createServerPackPanel</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseCreateModpack</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#curseCreateModpack">curseCreateModpack</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>private java.awt.Dimension</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#folderButtonDimension">folderButtonDimension</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private javax.swing.ImageIcon</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#folderIcon">folderIcon</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private javax.swing.ImageIcon</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#helpIcon">helpIcon</a></span></code>&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private javax.swing.JScrollPane</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#helpScrollPane">helpScrollPane</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private javax.swing.JTextArea</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#helpTextArea">helpTextArea</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private javax.swing.JFileChooser</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#javaChooser">javaChooser</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private javax.swing.JLabel</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#labelClientMods">labelClientMods</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private javax.swing.JLabel</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#labelCopyDirs">labelCopyDirs</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private javax.swing.JLabel</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#labelGenerateServerPack">labelGenerateServerPack</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private javax.swing.JLabel</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#labelJavaPath">labelJavaPath</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private javax.swing.JLabel</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#labelMinecraftVersion">labelMinecraftVersion</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private javax.swing.JLabel</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#labelModloader">labelModloader</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private javax.swing.JLabel</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#labelModloaderVersion">labelModloaderVersion</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private javax.swing.JLabel</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#labelModpackDir">labelModpackDir</a></span></code>&nbsp;</td>
+</tr>
 <tr class="altColor">
 <td class="colFirst"><code>private javax.swing.ImageIcon</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#loadIcon">loadIcon</a></span></code>&nbsp;</td>
@@ -192,9 +323,41 @@ extends java.awt.Component</pre>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#miscButtonDimension">miscButtonDimension</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>private javax.swing.JFileChooser</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#modpackDirChooser">modpackDirChooser</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>private javax.swing.ImageIcon</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#startGeneration">startGeneration</a></span></code>&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private javax.swing.JTextField</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#textClientMods">textClientMods</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private javax.swing.JTextField</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#textCopyDirs">textCopyDirs</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private javax.swing.JTextField</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#textJavaPath">textJavaPath</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private javax.swing.JTextField</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#textMinecraftVersion">textMinecraftVersion</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private javax.swing.JTextField</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#textModloader">textModloader</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private javax.swing.JTextField</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#textModloaderVersion">textModloaderVersion</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private javax.swing.JTextField</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#textModpackDir">textModpackDir</a></span></code>&nbsp;</td>
+</tr>
 </table>
 <ul class="blockList">
 <li class="blockList"><a name="fields.inherited.from.class.java.awt.Component">
@@ -224,8 +387,13 @@ extends java.awt.Component</pre>
 <th class="colOne" scope="col">Constructor and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#CreateServerPackTab-de.griefed.serverpackcreator.i18n.LocalizationManager-de.griefed.serverpackcreator.Configuration-">CreateServerPackTab</a></span>(<a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a>&nbsp;injectedLocalizationManager,
-                   <a href="../../../../de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a>&nbsp;injectedConfigCheck)</code>&nbsp;</td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#CreateServerPackTab-de.griefed.serverpackcreator.i18n.LocalizationManager-de.griefed.serverpackcreator.Configuration-de.griefed.serverpackcreator.curseforgemodpack.CurseCreateModpack-de.griefed.serverpackcreator.CreateServerPack-">CreateServerPackTab</a></span>(<a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a>&nbsp;injectedLocalizationManager,
+                   <a href="../../../../de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a>&nbsp;injectedConfiguration,
+                   <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseCreateModpack</a>&nbsp;injectedCurseCreateModpack,
+                   <a href="../../../../de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a>&nbsp;injectedCreateServerPack)</code>
+<div class="block"><strong>Constructor</strong>
+ Used for Dependency Injection.</div>
+</td>
 </tr>
 </table>
 </li>
@@ -244,7 +412,9 @@ extends java.awt.Component</pre>
 </tr>
 <tr id="i0" class="altColor">
 <td class="colFirst"><code>(package private) javax.swing.JComponent</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#createServerPackTab--">createServerPackTab</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#createServerPackTab--">createServerPackTab</a></span>()</code>
+<div class="block">Create the tab which displays every component related to configuring ServerPackCreator and creating a server pack.</div>
+</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -284,6 +454,42 @@ extends java.awt.Component</pre>
 <pre>private static final&nbsp;org.apache.logging.log4j.Logger appLogger</pre>
 </li>
 </ul>
+<a name="configuration">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>configuration</h4>
+<pre>private&nbsp;<a href="../../../../de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a> configuration</pre>
+</li>
+</ul>
+<a name="localizationManager">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>localizationManager</h4>
+<pre>private&nbsp;<a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a> localizationManager</pre>
+</li>
+</ul>
+<a name="curseCreateModpack">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>curseCreateModpack</h4>
+<pre>private&nbsp;<a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseCreateModpack</a> curseCreateModpack</pre>
+</li>
+</ul>
+<a name="createServerPack">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>createServerPack</h4>
+<pre>private&nbsp;<a href="../../../../de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a> createServerPack</pre>
+</li>
+</ul>
 <a name="loadIcon">
 <!--   -->
 </a>
@@ -347,22 +553,328 @@ extends java.awt.Component</pre>
 <pre>private final&nbsp;java.awt.Dimension chooserDimension</pre>
 </li>
 </ul>
-<a name="configuration">
+<a name="createServerPackPanel">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>configuration</h4>
-<pre>private&nbsp;<a href="../../../../de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a> configuration</pre>
+<h4>createServerPackPanel</h4>
+<pre>private&nbsp;javax.swing.JComponent createServerPackPanel</pre>
 </li>
 </ul>
-<a name="localizationManager">
+<a name="helpScrollPane">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>helpScrollPane</h4>
+<pre>private&nbsp;javax.swing.JScrollPane helpScrollPane</pre>
+</li>
+</ul>
+<a name="constraints">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>constraints</h4>
+<pre>private&nbsp;java.awt.GridBagConstraints constraints</pre>
+</li>
+</ul>
+<a name="labelModpackDir">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>labelModpackDir</h4>
+<pre>private&nbsp;javax.swing.JLabel labelModpackDir</pre>
+</li>
+</ul>
+<a name="labelClientMods">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>labelClientMods</h4>
+<pre>private&nbsp;javax.swing.JLabel labelClientMods</pre>
+</li>
+</ul>
+<a name="labelCopyDirs">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>labelCopyDirs</h4>
+<pre>private&nbsp;javax.swing.JLabel labelCopyDirs</pre>
+</li>
+</ul>
+<a name="labelJavaPath">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>labelJavaPath</h4>
+<pre>private&nbsp;javax.swing.JLabel labelJavaPath</pre>
+</li>
+</ul>
+<a name="labelMinecraftVersion">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>labelMinecraftVersion</h4>
+<pre>private&nbsp;javax.swing.JLabel labelMinecraftVersion</pre>
+</li>
+</ul>
+<a name="labelModloader">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>labelModloader</h4>
+<pre>private&nbsp;javax.swing.JLabel labelModloader</pre>
+</li>
+</ul>
+<a name="labelModloaderVersion">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>labelModloaderVersion</h4>
+<pre>private&nbsp;javax.swing.JLabel labelModloaderVersion</pre>
+</li>
+</ul>
+<a name="labelGenerateServerPack">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>labelGenerateServerPack</h4>
+<pre>private&nbsp;javax.swing.JLabel labelGenerateServerPack</pre>
+</li>
+</ul>
+<a name="textModpackDir">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>textModpackDir</h4>
+<pre>private&nbsp;javax.swing.JTextField textModpackDir</pre>
+</li>
+</ul>
+<a name="textClientMods">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>textClientMods</h4>
+<pre>private&nbsp;javax.swing.JTextField textClientMods</pre>
+</li>
+</ul>
+<a name="textCopyDirs">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>textCopyDirs</h4>
+<pre>private&nbsp;javax.swing.JTextField textCopyDirs</pre>
+</li>
+</ul>
+<a name="textJavaPath">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>textJavaPath</h4>
+<pre>private&nbsp;javax.swing.JTextField textJavaPath</pre>
+</li>
+</ul>
+<a name="textMinecraftVersion">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>textMinecraftVersion</h4>
+<pre>private&nbsp;javax.swing.JTextField textMinecraftVersion</pre>
+</li>
+</ul>
+<a name="textModloader">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>textModloader</h4>
+<pre>private&nbsp;javax.swing.JTextField textModloader</pre>
+</li>
+</ul>
+<a name="textModloaderVersion">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>textModloaderVersion</h4>
+<pre>private&nbsp;javax.swing.JTextField textModloaderVersion</pre>
+</li>
+</ul>
+<a name="helpTextArea">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>helpTextArea</h4>
+<pre>private&nbsp;javax.swing.JTextArea helpTextArea</pre>
+</li>
+</ul>
+<a name="checkBoxServer">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>checkBoxServer</h4>
+<pre>private&nbsp;javax.swing.JCheckBox checkBoxServer</pre>
+</li>
+</ul>
+<a name="checkBoxIcon">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>checkBoxIcon</h4>
+<pre>private&nbsp;javax.swing.JCheckBox checkBoxIcon</pre>
+</li>
+</ul>
+<a name="checkBoxProperties">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>checkBoxProperties</h4>
+<pre>private&nbsp;javax.swing.JCheckBox checkBoxProperties</pre>
+</li>
+</ul>
+<a name="checkBoxScripts">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>checkBoxScripts</h4>
+<pre>private&nbsp;javax.swing.JCheckBox checkBoxScripts</pre>
+</li>
+</ul>
+<a name="checkBoxZIP">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>checkBoxZIP</h4>
+<pre>private&nbsp;javax.swing.JCheckBox checkBoxZIP</pre>
+</li>
+</ul>
+<a name="buttonModpackDir">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>buttonModpackDir</h4>
+<pre>private&nbsp;javax.swing.JButton buttonModpackDir</pre>
+</li>
+</ul>
+<a name="buttonClientMods">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>buttonClientMods</h4>
+<pre>private&nbsp;javax.swing.JButton buttonClientMods</pre>
+</li>
+</ul>
+<a name="buttonCopyDirs">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>buttonCopyDirs</h4>
+<pre>private&nbsp;javax.swing.JButton buttonCopyDirs</pre>
+</li>
+</ul>
+<a name="buttonJavaPath">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>buttonJavaPath</h4>
+<pre>private&nbsp;javax.swing.JButton buttonJavaPath</pre>
+</li>
+</ul>
+<a name="buttonLoadConfigFromFile">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>buttonLoadConfigFromFile</h4>
+<pre>private&nbsp;javax.swing.JButton buttonLoadConfigFromFile</pre>
+</li>
+</ul>
+<a name="buttonInfoWindow">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>buttonInfoWindow</h4>
+<pre>private&nbsp;javax.swing.JButton buttonInfoWindow</pre>
+</li>
+</ul>
+<a name="buttonGenerateServerPack">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>buttonGenerateServerPack</h4>
+<pre>private&nbsp;javax.swing.JButton buttonGenerateServerPack</pre>
+</li>
+</ul>
+<a name="modpackDirChooser">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>modpackDirChooser</h4>
+<pre>private&nbsp;javax.swing.JFileChooser modpackDirChooser</pre>
+</li>
+</ul>
+<a name="clientModsChooser">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>clientModsChooser</h4>
+<pre>private&nbsp;javax.swing.JFileChooser clientModsChooser</pre>
+</li>
+</ul>
+<a name="copyDirsChooser">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>copyDirsChooser</h4>
+<pre>private&nbsp;javax.swing.JFileChooser copyDirsChooser</pre>
+</li>
+</ul>
+<a name="javaChooser">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>javaChooser</h4>
+<pre>private&nbsp;javax.swing.JFileChooser javaChooser</pre>
+</li>
+</ul>
+<a name="configChooser">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>localizationManager</h4>
-<pre>private&nbsp;<a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a> localizationManager</pre>
+<h4>configChooser</h4>
+<pre>private&nbsp;javax.swing.JFileChooser configChooser</pre>
 </li>
 </ul>
 </li>
@@ -373,14 +885,32 @@ extends java.awt.Component</pre>
 <!--   -->
 </a>
 <h3>Constructor Detail</h3>
-<a name="CreateServerPackTab-de.griefed.serverpackcreator.i18n.LocalizationManager-de.griefed.serverpackcreator.Configuration-">
+<a name="CreateServerPackTab-de.griefed.serverpackcreator.i18n.LocalizationManager-de.griefed.serverpackcreator.Configuration-de.griefed.serverpackcreator.curseforgemodpack.CurseCreateModpack-de.griefed.serverpackcreator.CreateServerPack-">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>CreateServerPackTab</h4>
 <pre>public&nbsp;CreateServerPackTab(<a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a>&nbsp;injectedLocalizationManager,
-                           <a href="../../../../de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a>&nbsp;injectedConfigCheck)</pre>
+                           <a href="../../../../de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a>&nbsp;injectedConfiguration,
+                           <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseCreateModpack</a>&nbsp;injectedCurseCreateModpack,
+                           <a href="../../../../de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a>&nbsp;injectedCreateServerPack)</pre>
+<div class="block"><strong>Constructor</strong><p>
+ Used for Dependency Injection.<p>
+ Receives an instance of <a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n"><code>LocalizationManager</code></a> or creates one if the received
+ one is null. Required for use of localization.<p>
+ Receives an instance of <a href="../../../../de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator"><code>Configuration</code></a> required to successfully and correctly create the server pack.<p>
+ Receives an instance of <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><code>CurseCreateModpack</code></a> in case the modpack has to be created from a combination of
+ CurseForge projectID and fileID, from which to <em>then</em> create the server pack.
+ Receives an instance of <a href="../../../../de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator"><code>CreateServerPack</code></a> which is required to generate a server pack.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>injectedLocalizationManager</code> - Instance of <a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n"><code>LocalizationManager</code></a> required for localized log messages.</dd>
+<dd><code>injectedConfiguration</code> - Instance of <a href="../../../../de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator"><code>Configuration</code></a> required to successfully and correctly create the server pack.</dd>
+<dd><code>injectedCurseCreateModpack</code> - Instance of <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><code>CurseCreateModpack</code></a> in case the modpack has to be created from a combination of
+ CurseForge projectID and fileID, from which to <em>then</em> create the server pack.</dd>
+<dd><code>injectedCreateServerPack</code> - Instance of <a href="../../../../de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator"><code>CreateServerPack</code></a> required for the generation of server packs.</dd>
+</dl>
 </li>
 </ul>
 </li>
@@ -398,6 +928,11 @@ extends java.awt.Component</pre>
 <li class="blockList">
 <h4>createServerPackTab</h4>
 <pre>javax.swing.JComponent&nbsp;createServerPackTab()</pre>
+<div class="block">Create the tab which displays every component related to configuring ServerPackCreator and creating a server pack.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>JComponent. Returns a JPanel everything needed for displaying the CreateServerPackTab.</dd>
+</dl>
 </li>
 </ul>
 </li>
diff --git a/docs/de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html b/docs/de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html
index aea07d964..b01639d66 100644
--- a/docs/de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html
+++ b/docs/de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html
@@ -116,8 +116,13 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>class <span class="typeNameLabel">ModloaderInstallerLogTab</span>
+<pre>public class <span class="typeNameLabel">ModloaderInstallerLogTab</span>
 extends java.awt.Component</pre>
+<div class="block">This class creates the tab which display the latest modloader_installer.log tailer.</div>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../serialized-form.html#de.griefed.serverpackcreator.gui.ModloaderInstallerLogTab">Serialized Form</a></dd>
+</dl>
 </li>
 </ul>
 </div>
@@ -152,9 +157,25 @@ extends java.awt.Component</pre>
 <th class="colLast" scope="col">Field and Description</th>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>private java.awt.GridBagConstraints</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html#constraints">constraints</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html#localizationManager">localizationManager</a></span></code>&nbsp;</td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><code>private javax.swing.JComponent</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html#modloaderInstallerLogPanel">modloaderInstallerLogPanel</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private javax.swing.JScrollPane</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html#scrollPane">scrollPane</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private javax.swing.JTextArea</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html#textArea">textArea</a></span></code>&nbsp;</td>
+</tr>
 </table>
 <ul class="blockList">
 <li class="blockList"><a name="fields.inherited.from.class.java.awt.Component">
@@ -184,7 +205,10 @@ extends java.awt.Component</pre>
 <th class="colOne" scope="col">Constructor and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html#ModloaderInstallerLogTab-de.griefed.serverpackcreator.i18n.LocalizationManager-">ModloaderInstallerLogTab</a></span>(<a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a>&nbsp;injectedLocalizationManager)</code>&nbsp;</td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html#ModloaderInstallerLogTab-de.griefed.serverpackcreator.i18n.LocalizationManager-">ModloaderInstallerLogTab</a></span>(<a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a>&nbsp;injectedLocalizationManager)</code>
+<div class="block"><strong>Constructor</strong>
+ Used for Dependency Injection.</div>
+</td>
 </tr>
 </table>
 </li>
@@ -203,7 +227,10 @@ extends java.awt.Component</pre>
 </tr>
 <tr id="i0" class="altColor">
 <td class="colFirst"><code>(package private) javax.swing.JComponent</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html#modloaderInstallerLogTab--">modloaderInstallerLogTab</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html#modloaderInstallerLogTab--">modloaderInstallerLogTab</a></span>()</code>
+<div class="block">Create the tab for the modloader_installer.log tailer in a JScrollPane with an always available vertical scrollbar
+ and a horizontal scrollbar available as needed.</div>
+</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -237,12 +264,48 @@ extends java.awt.Component</pre>
 <a name="localizationManager">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>localizationManager</h4>
 <pre>private&nbsp;<a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a> localizationManager</pre>
 </li>
 </ul>
+<a name="modloaderInstallerLogPanel">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>modloaderInstallerLogPanel</h4>
+<pre>private&nbsp;javax.swing.JComponent modloaderInstallerLogPanel</pre>
+</li>
+</ul>
+<a name="constraints">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>constraints</h4>
+<pre>private&nbsp;java.awt.GridBagConstraints constraints</pre>
+</li>
+</ul>
+<a name="textArea">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>textArea</h4>
+<pre>private&nbsp;javax.swing.JTextArea textArea</pre>
+</li>
+</ul>
+<a name="scrollPane">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>scrollPane</h4>
+<pre>private&nbsp;javax.swing.JScrollPane scrollPane</pre>
+</li>
+</ul>
 </li>
 </ul>
 <!-- ========= CONSTRUCTOR DETAIL ======== -->
@@ -258,6 +321,14 @@ extends java.awt.Component</pre>
 <li class="blockList">
 <h4>ModloaderInstallerLogTab</h4>
 <pre>public&nbsp;ModloaderInstallerLogTab(<a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a>&nbsp;injectedLocalizationManager)</pre>
+<div class="block"><strong>Constructor</strong><p>
+ Used for Dependency Injection.<p>
+ Receives an instance of <a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n"><code>LocalizationManager</code></a> or creates one if the received
+ one is null. Required for use of localization.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>injectedLocalizationManager</code> - Instance of <a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n"><code>LocalizationManager</code></a> required for localized log messages.</dd>
+</dl>
 </li>
 </ul>
 </li>
@@ -275,6 +346,15 @@ extends java.awt.Component</pre>
 <li class="blockList">
 <h4>modloaderInstallerLogTab</h4>
 <pre>javax.swing.JComponent&nbsp;modloaderInstallerLogTab()</pre>
+<div class="block">Create the tab for the modloader_installer.log tailer in a JScrollPane with an always available vertical scrollbar
+ and a horizontal scrollbar available as needed. Uses Apache commons-io's <code>Tailer</code> to keep the JTextArea up
+ to date with the latest log entries. Should any line contain "Starting Fabric installation." or
+ "Starting Forge installation." the textarea is cleared.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>JComponent. Returns a JPanel containing a JScrollPane containing the JTextArea with the latest
+ modloader_installer.log entries.</dd>
+</dl>
 </li>
 </ul>
 </li>
diff --git a/docs/de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html b/docs/de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html
index aac0717bc..3c42bf0d9 100644
--- a/docs/de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html
+++ b/docs/de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html
@@ -116,8 +116,13 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>class <span class="typeNameLabel">ServerPackCreatorLogTab</span>
+<pre>public class <span class="typeNameLabel">ServerPackCreatorLogTab</span>
 extends java.awt.Component</pre>
+<div class="block">This class creates the tab which display the latest serverpackcreator.log tailer.</div>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../serialized-form.html#de.griefed.serverpackcreator.gui.ServerPackCreatorLogTab">Serialized Form</a></dd>
+</dl>
 </li>
 </ul>
 </div>
@@ -152,9 +157,25 @@ extends java.awt.Component</pre>
 <th class="colLast" scope="col">Field and Description</th>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>private java.awt.GridBagConstraints</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html#constraints">constraints</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html#localizationManager">localizationManager</a></span></code>&nbsp;</td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><code>private javax.swing.JScrollPane</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html#scrollPane">scrollPane</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private javax.swing.JComponent</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html#serverPackCreatorLogPanel">serverPackCreatorLogPanel</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private javax.swing.JTextArea</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html#textArea">textArea</a></span></code>&nbsp;</td>
+</tr>
 </table>
 <ul class="blockList">
 <li class="blockList"><a name="fields.inherited.from.class.java.awt.Component">
@@ -184,7 +205,10 @@ extends java.awt.Component</pre>
 <th class="colOne" scope="col">Constructor and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colOne"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html#ServerPackCreatorLogTab-de.griefed.serverpackcreator.i18n.LocalizationManager-">ServerPackCreatorLogTab</a></span>(<a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a>&nbsp;injectedLocalizationManager)</code>&nbsp;</td>
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html#ServerPackCreatorLogTab-de.griefed.serverpackcreator.i18n.LocalizationManager-">ServerPackCreatorLogTab</a></span>(<a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a>&nbsp;injectedLocalizationManager)</code>
+<div class="block"><strong>Constructor</strong>
+ Used for Dependency Injection.</div>
+</td>
 </tr>
 </table>
 </li>
@@ -203,7 +227,10 @@ extends java.awt.Component</pre>
 </tr>
 <tr id="i0" class="altColor">
 <td class="colFirst"><code>(package private) javax.swing.JComponent</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html#serverPackCreatorLogTab--">serverPackCreatorLogTab</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html#serverPackCreatorLogTab--">serverPackCreatorLogTab</a></span>()</code>
+<div class="block">Create the tab for the serverpackcreator.log tailer in a JScrollPane with an always available vertical scrollbar
+ and a horizontal scrollbar available as needed.</div>
+</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -237,12 +264,48 @@ extends java.awt.Component</pre>
 <a name="localizationManager">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>localizationManager</h4>
 <pre>private&nbsp;<a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a> localizationManager</pre>
 </li>
 </ul>
+<a name="serverPackCreatorLogPanel">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>serverPackCreatorLogPanel</h4>
+<pre>private&nbsp;javax.swing.JComponent serverPackCreatorLogPanel</pre>
+</li>
+</ul>
+<a name="constraints">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>constraints</h4>
+<pre>private&nbsp;java.awt.GridBagConstraints constraints</pre>
+</li>
+</ul>
+<a name="textArea">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>textArea</h4>
+<pre>private&nbsp;javax.swing.JTextArea textArea</pre>
+</li>
+</ul>
+<a name="scrollPane">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>scrollPane</h4>
+<pre>private&nbsp;javax.swing.JScrollPane scrollPane</pre>
+</li>
+</ul>
 </li>
 </ul>
 <!-- ========= CONSTRUCTOR DETAIL ======== -->
@@ -258,6 +321,14 @@ extends java.awt.Component</pre>
 <li class="blockList">
 <h4>ServerPackCreatorLogTab</h4>
 <pre>public&nbsp;ServerPackCreatorLogTab(<a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a>&nbsp;injectedLocalizationManager)</pre>
+<div class="block"><strong>Constructor</strong><p>
+ Used for Dependency Injection.<p>
+ Receives an instance of <a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n"><code>LocalizationManager</code></a> or creates one if the received
+ one is null. Required for use of localization.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>injectedLocalizationManager</code> - Instance of <a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n"><code>LocalizationManager</code></a> required for localized log messages.</dd>
+</dl>
 </li>
 </ul>
 </li>
@@ -275,6 +346,15 @@ extends java.awt.Component</pre>
 <li class="blockList">
 <h4>serverPackCreatorLogTab</h4>
 <pre>javax.swing.JComponent&nbsp;serverPackCreatorLogTab()</pre>
+<div class="block">Create the tab for the serverpackcreator.log tailer in a JScrollPane with an always available vertical scrollbar
+ and a horizontal scrollbar available as needed. Uses Apache commons-io's <code>Tailer</code> to keep the JTextArea up
+ to date with the latest log entries. Should any line contain "Checking entered configuration." the textarea is
+ cleared.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>JComponent. Returns a JPanel containing a JScrollPane containing the JTextArea with the latest
+ serverpackcreator.log entries.</dd>
+</dl>
 </li>
 </ul>
 </li>
diff --git a/docs/de/griefed/serverpackcreator/gui/package-summary.html b/docs/de/griefed/serverpackcreator/gui/package-summary.html
index 2215a12ad..4103dc391 100644
--- a/docs/de/griefed/serverpackcreator/gui/package-summary.html
+++ b/docs/de/griefed/serverpackcreator/gui/package-summary.html
@@ -82,23 +82,40 @@
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui">AboutTab</a></td>
-<td class="colLast">&nbsp;</td>
+<td class="colLast">
+<div class="block">This class creates the tab which displays the About-tab, with the about text, the list of contributors, buttons for
+ opening PasteBin in your browser, opening ServerPackCreator's issue page on GitHub and for opening the invite link
+ to Griefed#s discord server in your browser.</div>
+</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui">CreateGui</a></td>
-<td class="colLast">&nbsp;</td>
+<td class="colLast">
+<div class="block"><strong>Table of methods</strong><br>
+ <a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#CreateGui-de.griefed.serverpackcreator.i18n.LocalizationManager-de.griefed.serverpackcreator.Configuration-de.griefed.serverpackcreator.curseforgemodpack.CurseCreateModpack-de.griefed.serverpackcreator.CreateServerPack-"><code>CreateGui.CreateGui(LocalizationManager, Configuration, CurseCreateModpack, CreateServerPack)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#mainGUI--"><code>CreateGui.mainGUI()</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#createAndShowGUI--"><code>CreateGui.createAndShowGUI()</code></a>
+ This class creates and shows the GUI needed for running ServerPackCreator in....well...GUI mode.</div>
+</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></td>
-<td class="colLast">&nbsp;</td>
+<td class="colLast">
+<div class="block">This class creates the tab which displays the labels, textfields, buttons and functions in order to create a new
+ server pack.</div>
+</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a href="../../../../de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html" title="class in de.griefed.serverpackcreator.gui">ModloaderInstallerLogTab</a></td>
-<td class="colLast">&nbsp;</td>
+<td class="colLast">
+<div class="block">This class creates the tab which display the latest modloader_installer.log tailer.</div>
+</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><a href="../../../../de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html" title="class in de.griefed.serverpackcreator.gui">ServerPackCreatorLogTab</a></td>
-<td class="colLast">&nbsp;</td>
+<td class="colLast">
+<div class="block">This class creates the tab which display the latest serverpackcreator.log tailer.</div>
+</td>
 </tr>
 </tbody>
 </table>
diff --git a/docs/de/griefed/serverpackcreator/i18n/IncorrectLanguageException.html b/docs/de/griefed/serverpackcreator/i18n/IncorrectLanguageException.html
index 38e9f9856..f9569c952 100644
--- a/docs/de/griefed/serverpackcreator/i18n/IncorrectLanguageException.html
+++ b/docs/de/griefed/serverpackcreator/i18n/IncorrectLanguageException.html
@@ -117,6 +117,12 @@
 <br>
 <pre>public class <span class="typeNameLabel">IncorrectLanguageException</span>
 extends java.lang.Exception</pre>
+<div class="block"><strong>Table of Exceptions</strong><br>
+ <a href="../../../../de/griefed/serverpackcreator/i18n/IncorrectLanguageException.html#IncorrectLanguageException--"><code>IncorrectLanguageException()</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/i18n/IncorrectLanguageException.html#IncorrectLanguageException-java.lang.String-"><code>IncorrectLanguageException(String)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/i18n/IncorrectLanguageException.html#IncorrectLanguageException-java.lang.Throwable-"><code>IncorrectLanguageException(Throwable)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/i18n/IncorrectLanguageException.html#IncorrectLanguageException-java.lang.String-java.lang.Throwable-"><code>IncorrectLanguageException(String, Throwable)</code></a><p>
+ Provides exceptions to <a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n"><code>LocalizationManager</code></a></div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../serialized-form.html#de.griefed.serverpackcreator.i18n.IncorrectLanguageException">Serialized Form</a></dd>
diff --git a/docs/de/griefed/serverpackcreator/i18n/LocalizationManager.html b/docs/de/griefed/serverpackcreator/i18n/LocalizationManager.html
index e42752bb2..5c4a57f8a 100644
--- a/docs/de/griefed/serverpackcreator/i18n/LocalizationManager.html
+++ b/docs/de/griefed/serverpackcreator/i18n/LocalizationManager.html
@@ -109,13 +109,25 @@ var activeTableTab = "activeTableTab";
 <br>
 <pre>public class <span class="typeNameLabel">LocalizationManager</span>
 extends java.lang.Object</pre>
-<div class="block">This class is localization manager for your application.
- <p>To use it, firstly run LocalizationManager.init().
- Then use LocalizationManager.getLocalizedString() to find the localized string in config file.
- All localization config files need to be stored in <code>resources/i18n</code> directory
+<div class="block"><strong>Table of methods</strong><br>
+ <a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#getSupportedLanguages--"><code>getSupportedLanguages()</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#getLangPropertiesFile--"><code>getLangPropertiesFile()</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#getLocale--"><code>getLocale()</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#init-java.lang.String-"><code>init(String)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#init-java.io.File-"><code>init(File)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#init--"><code>init()</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#getLocalizedString-java.lang.String-"><code>getLocalizedString(String)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#checkLocaleFile--"><code>checkLocaleFile()</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#writeLocaleToFile-java.lang.String-"><code>writeLocaleToFile(String)</code></a>
+ <p>
+ This is the localizationManager for ServerPackCreator.<br>
+ To use it, initialize it by calling <a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#init--"><code>init()</code></a>.
+ Then use <a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#getLocalizedString-java.lang.String-"><code>getLocalizedString(String)</code></a> to use a language key from the resource bundle corresponding to the
+ specified locale. If no locale is provided during the launch of ServerPackCreator, en_US is used by default.<br>
+ All localization properties-files need to be stored in the <code>de/griefed/resources/lang/</code>-directory
  and be named using following pattern: lang_{language code in lowercase}_{country code in lowercase}.
- For example: lang_en_us.lang.</p>
- Currently supports only strings to be used in localized fields.</div>
+ For example: <code>lang_en_us.properties</code>.<br>
+ Currently only supports Strings to be used in localized fields.</div>
 </li>
 </ul>
 </div>
@@ -141,7 +153,7 @@ extends java.lang.Object</pre>
 <tr class="rowColor">
 <td class="colFirst"><code>private java.util.Map&lt;java.lang.String,java.lang.String&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#currentLanguage">currentLanguage</a></span></code>
-<div class="block">Current language of application, mapped for easier further reference.</div>
+<div class="block">Current language of ServerPackCreator, mapped for easier further reference.</div>
 </td>
 </tr>
 <tr class="altColor">
@@ -161,12 +173,14 @@ extends java.lang.Object</pre>
 <tr class="rowColor">
 <td class="colFirst"><code>private java.util.ResourceBundle</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#localeResources">localeResources</a></span></code>
-<div class="block">Localized strings that application uses.</div>
+<div class="block">Localized strings which ServerPackCreator uses.</div>
 </td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private java.lang.String[]</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#SUPPORTED_LANGUAGES">SUPPORTED_LANGUAGES</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#SUPPORTED_LANGUAGES">SUPPORTED_LANGUAGES</a></span></code>
+<div class="block">Languages supported by ServerPackCreator.</div>
+</td>
 </tr>
 </table>
 </li>
@@ -201,47 +215,58 @@ extends java.lang.Object</pre>
 <th class="colLast" scope="col">Method and Description</th>
 </tr>
 <tr id="i0" class="altColor">
-<td class="colFirst"><code>boolean</code></td>
+<td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#checkLocaleFile--">checkLocaleFile</a></span>()</code>
-<div class="block">Check for existence of a lang.properties-file and if found assign language specified therein.</div>
+<div class="block">Check for existence of a lang.properties file and, if found, assign the language specified therein.</div>
 </td>
 </tr>
 <tr id="i1" class="rowColor">
 <td class="colFirst"><code>(package private) java.io.File</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#getLangPropertiesFile--">getLangPropertiesFile</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#getLangPropertiesFile--">getLangPropertiesFile</a></span>()</code>
+<div class="block">Getter for the lang.properties file which will set the locale for ServerPackCreator.</div>
+</td>
 </tr>
 <tr id="i2" class="altColor">
 <td class="colFirst"><code>java.lang.String</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#getLocale--">getLocale</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#getLocale--">getLocale</a></span>()</code>
+<div class="block">Getter for a String containing the currently used language.</div>
+</td>
 </tr>
 <tr id="i3" class="rowColor">
 <td class="colFirst"><code>java.lang.String</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#getLocalizedString-java.lang.String-">getLocalizedString</a></span>(java.lang.String&nbsp;languageKey)</code>
-<div class="block">Gets localized string from localization resource bundle.</div>
+<div class="block">Acquires a localized String for the provided language key from the initialized locale resource.</div>
 </td>
 </tr>
 <tr id="i4" class="altColor">
 <td class="colFirst"><code>(package private) java.lang.String[]</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#getSupportedLanguages--">getSupportedLanguages</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#getSupportedLanguages--">getSupportedLanguages</a></span>()</code>
+<div class="block">Getter for the array of languages supported by ServerPackCreator.</div>
+</td>
 </tr>
 <tr id="i5" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#init--">init</a></span>()</code>
-<div class="block">Initializer with default localization properties path.</div>
+<div class="block">Initialize the LocalizationManager with en_us as the locale.</div>
 </td>
 </tr>
 <tr id="i6" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#init-java.io.File-">init</a></span>(java.io.File&nbsp;localePropertiesFile)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#init-java.io.File-">init</a></span>(java.io.File&nbsp;localePropertiesFile)</code>
+<div class="block">Initializes the LocalizationManager with a provided localePropertiesFile.</div>
+</td>
 </tr>
 <tr id="i7" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#init-java.lang.String-">init</a></span>(java.lang.String&nbsp;locale)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#init-java.lang.String-">init</a></span>(java.lang.String&nbsp;locale)</code>
+<div class="block">Initializes the LocalizationManager with a provided locale.</div>
+</td>
 </tr>
 <tr id="i8" class="altColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#writeLocaleToFile-java.lang.String-">writeLocaleToFile</a></span>(java.lang.String&nbsp;locale)</code>
-<div class="block">Writes the specified locale from -lang your_locale to a lang.properties file to ensure every subsequent start of serverpackcreator is executed using said locale.</div>
+<div class="block">Writes the specified locale from -lang your_locale to a lang.properties file to ensure every subsequent start
+ of serverpackcreator is executed using said locale.</div>
 </td>
 </tr>
 </table>
@@ -291,7 +316,7 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>currentLanguage</h4>
 <pre>private&nbsp;java.util.Map&lt;java.lang.String,java.lang.String&gt; currentLanguage</pre>
-<div class="block">Current language of application, mapped for easier further reference.</div>
+<div class="block">Current language of ServerPackCreator, mapped for easier further reference.</div>
 </li>
 </ul>
 <a name="localeResources">
@@ -301,7 +326,7 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>localeResources</h4>
 <pre>private&nbsp;java.util.ResourceBundle localeResources</pre>
-<div class="block">Localized strings that application uses.</div>
+<div class="block">Localized strings which ServerPackCreator uses.</div>
 </li>
 </ul>
 <a name="LANGUAGE_MAP_PATH">
@@ -338,6 +363,7 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>SUPPORTED_LANGUAGES</h4>
 <pre>private final&nbsp;java.lang.String[] SUPPORTED_LANGUAGES</pre>
+<div class="block">Languages supported by ServerPackCreator.</div>
 </li>
 </ul>
 </li>
@@ -372,6 +398,11 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>getSupportedLanguages</h4>
 <pre>java.lang.String[]&nbsp;getSupportedLanguages()</pre>
+<div class="block">Getter for the array of languages supported by ServerPackCreator.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>String Array. Returns the array of languages supported by ServerPackCreator.</dd>
+</dl>
 </li>
 </ul>
 <a name="getLangPropertiesFile--">
@@ -381,6 +412,11 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>getLangPropertiesFile</h4>
 <pre>java.io.File&nbsp;getLangPropertiesFile()</pre>
+<div class="block">Getter for the lang.properties file which will set the locale for ServerPackCreator.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>File. Returns the file which will set the locale for ServerPackCreator.</dd>
+</dl>
 </li>
 </ul>
 <a name="getLocale--">
@@ -390,6 +426,11 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>getLocale</h4>
 <pre>public&nbsp;java.lang.String&nbsp;getLocale()</pre>
+<div class="block">Getter for a String containing the currently used language.</div>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>String. Returns a String containing the currently used language.</dd>
+</dl>
 </li>
 </ul>
 <a name="init-java.lang.String-">
@@ -400,11 +441,17 @@ extends java.lang.Object</pre>
 <h4>init</h4>
 <pre>public&nbsp;void&nbsp;init(java.lang.String&nbsp;locale)
           throws <a href="../../../../de/griefed/serverpackcreator/i18n/IncorrectLanguageException.html" title="class in de.griefed.serverpackcreator.i18n">IncorrectLanguageException</a></pre>
+<div class="block">Initializes the LocalizationManager with a provided locale.
+ Calls<br>
+ <a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#getSupportedLanguages--"><code>getSupportedLanguages()</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#getLocalizedString-java.lang.String-"><code>getLocalizedString(String)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#writeLocaleToFile-java.lang.String-"><code>writeLocaleToFile(String)</code></a></div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>locale</code> - Locale to be used by application in this run.</dd>
 <dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="../../../../de/griefed/serverpackcreator/i18n/IncorrectLanguageException.html" title="class in de.griefed.serverpackcreator.i18n">IncorrectLanguageException</a></code> - Thrown if the language specified in the properties file is not supported by SPC or specified in the invalid format.</dd>
+<dd><code><a href="../../../../de/griefed/serverpackcreator/i18n/IncorrectLanguageException.html" title="class in de.griefed.serverpackcreator.i18n">IncorrectLanguageException</a></code> - Thrown if the language specified in the properties file is not supported by
+ ServerPackCreator or specified in the invalid format.</dd>
 </dl>
 </li>
 </ul>
@@ -416,11 +463,13 @@ extends java.lang.Object</pre>
 <h4>init</h4>
 <pre>public&nbsp;void&nbsp;init(java.io.File&nbsp;localePropertiesFile)
           throws <a href="../../../../de/griefed/serverpackcreator/i18n/IncorrectLanguageException.html" title="class in de.griefed.serverpackcreator.i18n">IncorrectLanguageException</a></pre>
+<div class="block">Initializes the LocalizationManager with a provided localePropertiesFile.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>localePropertiesFile</code> - Path to the properties file with the language specified.</dd>
+<dd><code>localePropertiesFile</code> - Path to the locale properties file which specifies the language to use.</dd>
 <dt><span class="throwsLabel">Throws:</span></dt>
-<dd><code><a href="../../../../de/griefed/serverpackcreator/i18n/IncorrectLanguageException.html" title="class in de.griefed.serverpackcreator.i18n">IncorrectLanguageException</a></code> - Thrown if the language specified in the properties file is not supported by SPC or specified in the invalid format.</dd>
+<dd><code><a href="../../../../de/griefed/serverpackcreator/i18n/IncorrectLanguageException.html" title="class in de.griefed.serverpackcreator.i18n">IncorrectLanguageException</a></code> - Thrown if the language specified in the properties file is not supported by
+ ServerPackCreator or specified in the invalid format.</dd>
 </dl>
 </li>
 </ul>
@@ -431,7 +480,7 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>init</h4>
 <pre>public&nbsp;void&nbsp;init()</pre>
-<div class="block">Initializer with default localization properties path.</div>
+<div class="block">Initialize the LocalizationManager with en_us as the locale.</div>
 </li>
 </ul>
 <a name="getLocalizedString-java.lang.String-">
@@ -441,12 +490,12 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>getLocalizedString</h4>
 <pre>public&nbsp;java.lang.String&nbsp;getLocalizedString(java.lang.String&nbsp;languageKey)</pre>
-<div class="block">Gets localized string from localization resource bundle.</div>
+<div class="block">Acquires a localized String for the provided language key from the initialized locale resource.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>languageKey</code> - The language key to search for.</dd>
 <dt><span class="returnLabel">Returns:</span></dt>
-<dd>Localized string that is referred by the language key.</dd>
+<dd>Localized string that is referred to by the language key.</dd>
 </dl>
 </li>
 </ul>
@@ -456,13 +505,11 @@ extends java.lang.Object</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>checkLocaleFile</h4>
-<pre>public&nbsp;boolean&nbsp;checkLocaleFile()</pre>
-<div class="block">Check for existence of a lang.properties-file and if found assign language specified therein. If assigning the specified language fails because it is not supported, default to en_US.
- This method should not contain the LocalizationManager, as the initialization of said manager is called from here. Therefore, localized string are not yet available.</div>
-<dl>
-<dt><span class="returnLabel">Returns:</span></dt>
-<dd>Always returns true. Dirty hack until I one day figure out how to init Localization before UI start correctly.</dd>
-</dl>
+<pre>public&nbsp;void&nbsp;checkLocaleFile()</pre>
+<div class="block">Check for existence of a lang.properties file and, if found, assign the language specified therein.
+ If assigning the specified language fails because it is not supported, default to en_us.
+ This method should <strong>not</strong> call <a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#getLocalizedString-java.lang.String-"><code>getLocalizedString(String)</code></a>, as the initialization of
+ said manager is called from here. Therefore, localized strings are not yet available.</div>
 </li>
 </ul>
 <a name="writeLocaleToFile-java.lang.String-">
@@ -472,11 +519,13 @@ extends java.lang.Object</pre>
 <li class="blockList">
 <h4>writeLocaleToFile</h4>
 <pre>void&nbsp;writeLocaleToFile(java.lang.String&nbsp;locale)</pre>
-<div class="block">Writes the specified locale from -lang your_locale to a lang.properties file to ensure every subsequent start of serverpackcreator is executed using said locale.</div>
+<div class="block">Writes the specified locale from -lang your_locale to a lang.properties file to ensure every subsequent start
+ of serverpackcreator is executed using said locale. This method should <strong>not</strong> call
+ <a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#getLocalizedString-java.lang.String-"><code>getLocalizedString(String)</code></a>, as the initialization of said manager is called from here. Therefore,
+ localized strings are not yet available.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>locale</code> - The locale the user specified when they ran serverpackcreator with -lang -your_locale.
- This method should not contain the LocalizationManager, as the initialization of said manager is called from here. Therefore, localized string are not yet available.</dd>
+<dd><code>locale</code> - The locale the user specified when they ran serverpackcreator with -lang -your_locale.</dd>
 </dl>
 </li>
 </ul>
diff --git a/docs/de/griefed/serverpackcreator/i18n/package-summary.html b/docs/de/griefed/serverpackcreator/i18n/package-summary.html
index 96f5915a6..a3ea2b1fe 100644
--- a/docs/de/griefed/serverpackcreator/i18n/package-summary.html
+++ b/docs/de/griefed/serverpackcreator/i18n/package-summary.html
@@ -83,7 +83,18 @@
 <tr class="altColor">
 <td class="colFirst"><a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></td>
 <td class="colLast">
-<div class="block">This class is localization manager for your application.</div>
+<div class="block"><strong>Table of methods</strong><br>
+ <a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#getSupportedLanguages--"><code>getSupportedLanguages()</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#getLangPropertiesFile--"><code>getLangPropertiesFile()</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#getLocale--"><code>getLocale()</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#init-java.lang.String-"><code>init(String)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#init-java.io.File-"><code>init(File)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#init--"><code>init()</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#getLocalizedString-java.lang.String-"><code>getLocalizedString(String)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#checkLocaleFile--"><code>checkLocaleFile()</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html#writeLocaleToFile-java.lang.String-"><code>writeLocaleToFile(String)</code></a>
+ 
+ This is the localizationManager for ServerPackCreator.</div>
 </td>
 </tr>
 </tbody>
@@ -99,7 +110,14 @@
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><a href="../../../../de/griefed/serverpackcreator/i18n/IncorrectLanguageException.html" title="class in de.griefed.serverpackcreator.i18n">IncorrectLanguageException</a></td>
-<td class="colLast">&nbsp;</td>
+<td class="colLast">
+<div class="block"><strong>Table of Exceptions</strong><br>
+ <a href="../../../../de/griefed/serverpackcreator/i18n/IncorrectLanguageException.html#IncorrectLanguageException--"><code>IncorrectLanguageException.IncorrectLanguageException()</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/i18n/IncorrectLanguageException.html#IncorrectLanguageException-java.lang.String-"><code>IncorrectLanguageException.IncorrectLanguageException(String)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/i18n/IncorrectLanguageException.html#IncorrectLanguageException-java.lang.Throwable-"><code>IncorrectLanguageException.IncorrectLanguageException(Throwable)</code></a><br>
+ <a href="../../../../de/griefed/serverpackcreator/i18n/IncorrectLanguageException.html#IncorrectLanguageException-java.lang.String-java.lang.Throwable-"><code>IncorrectLanguageException.IncorrectLanguageException(String, Throwable)</code></a>
+ Provides exceptions to <a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n"><code>LocalizationManager</code></a></div>
+</td>
 </tr>
 </tbody>
 </table>
diff --git a/docs/de/griefed/serverpackcreator/package-summary.html b/docs/de/griefed/serverpackcreator/package-summary.html
index 1eb964f52..f606d08ba 100644
--- a/docs/de/griefed/serverpackcreator/package-summary.html
+++ b/docs/de/griefed/serverpackcreator/package-summary.html
@@ -82,19 +82,39 @@
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><a href="../../../de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></td>
-<td class="colLast">&nbsp;</td>
+<td class="colLast">
+<div class="block"><strong>Table of methods</strong>
+ 1.</div>
+</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a href="../../../de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></td>
-<td class="colLast">&nbsp;</td>
+<td class="colLast">
+<div class="block"><strong>Table of methods</strong>
+ 1.</div>
+</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><a href="../../../de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator">FilesSetup</a></td>
-<td class="colLast">&nbsp;</td>
+<td class="colLast">
+<div class="block"><strong>Table of methods</strong>
+ 
+ 1.</div>
+</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a href="../../../de/griefed/serverpackcreator/Main.html" title="class in de.griefed.serverpackcreator">Main</a></td>
-<td class="colLast">&nbsp;</td>
+<td class="colLast">
+<div class="block"><strong>Table of methods</strong>
+ 
+ <a href="../../../de/griefed/serverpackcreator/Main.html#main-java.lang.String:A-"><code>Main.main(String[])</code></a>
+ 
+ Depending on the passed commandline arguments and whether ServerPackCreator is run in a headless environment,
+ one of the following modes will be entered:
+ <strong>-cgen</strong>
+ When ServerPackCreator is run with the <code>-cgen</code>-argument, you will be guided through a step-by-step
+ generation of a new configuration file.</div>
+</td>
 </tr>
 </tbody>
 </table>
diff --git a/docs/index-all.html b/docs/index-all.html
index 20f3a8570..a54654d17 100644
--- a/docs/index-all.html
+++ b/docs/index-all.html
@@ -72,12 +72,23 @@
 </a>
 <h2 class="title">A</h2>
 <dl>
-<dt><a href="de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">AboutTab</span></a> - Class in <a href="de/griefed/serverpackcreator/gui/package-summary.html">de.griefed.serverpackcreator.gui</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/AboutTab.html#aboutPanel">aboutPanel</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui">AboutTab</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">AboutTab</span></a> - Class in <a href="de/griefed/serverpackcreator/gui/package-summary.html">de.griefed.serverpackcreator.gui</a></dt>
+<dd>
+<div class="block">This class creates the tab which displays the About-tab, with the about text, the list of contributors, buttons for
+ opening PasteBin in your browser, opening ServerPackCreator's issue page on GitHub and for opening the invite link
+ to Griefed#s discord server in your browser.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/AboutTab.html#AboutTab-de.griefed.serverpackcreator.i18n.LocalizationManager-">AboutTab(LocalizationManager)</a></span> - Constructor for class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui">AboutTab</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block"><strong>Constructor</strong>
+ Used for Dependency Injection.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/AboutTab.html#aboutTab--">aboutTab()</a></span> - Method in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui">AboutTab</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Create the tab for the About-page of ServerpackCreator.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#appLogger">appLogger</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#appLogger">appLogger</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
@@ -94,6 +105,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Main.html#appLogger">appLogger</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Main.html" title="class in de.griefed.serverpackcreator">Main</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/AboutTab.html#attributeSet">attributeSet</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui">AboutTab</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#author">author</a></span> - Variable in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModpack</a></dt>
 <dd>&nbsp;</dd>
 </dl>
@@ -106,29 +119,61 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#buildString-java.lang.String...-">buildString(String...)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
-<div class="block">Converts list of strings into concatenated string.</div>
+<div class="block">Converts a sequence of Strings, for example from a list, into a concatenated String.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#buttonClientMods">buttonClientMods</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#buttonCopyDirs">buttonCopyDirs</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/AboutTab.html#buttonCreatePasteBin">buttonCreatePasteBin</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui">AboutTab</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/AboutTab.html#buttonDiscord">buttonDiscord</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui">AboutTab</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#buttonGenerateServerPack">buttonGenerateServerPack</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#buttonInfoWindow">buttonInfoWindow</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#buttonJavaPath">buttonJavaPath</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#buttonLoadConfigFromFile">buttonLoadConfigFromFile</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#buttonModpackDir">buttonModpackDir</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/AboutTab.html#buttonOpenIssue">buttonOpenIssue</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui">AboutTab</a></dt>
+<dd>&nbsp;</dd>
 </dl>
 <a name="I:C">
 <!--   -->
 </a>
 <h2 class="title">C</h2>
 <dl>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#checkConfigFile-java.io.File-">checkConfigFile(File)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#checkBoxIcon">checkBoxIcon</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#checkBoxProperties">checkBoxProperties</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#checkBoxScripts">checkBoxScripts</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#checkBoxServer">checkBoxServer</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#checkBoxZIP">checkBoxZIP</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#checkConfigFile-java.io.File-boolean-">checkConfigFile(File, boolean)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
-<div class="block">Check the config file for configuration errors.</div>
+<div class="block">Sets <a href="de/griefed/serverpackcreator/Configuration.html#setConfig-com.typesafe.config.Config-"><code>Configuration.setConfig(Config)</code></a> and calls checks for the provided configuration-file.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#checkCopyDirs-java.util.List-java.lang.String-">checkCopyDirs(List&lt;String&gt;, String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
-<div class="block">Check whether the specified directories exist in the modpack directory.</div>
+<div class="block">Checks whether the passed list of directories which are supposed to be in the modpack directory is empty and
+ prints a message to the console and serverpackcreator.log if it is.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#checkCurseForge-java.lang.String-">checkCurseForge(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
-<div class="block">Checks whether the modpackDir contains a valid projectID,fileID combination.</div>
+<div class="block">Checks whether the specified modpack directory contains a valid projectID,fileID combination.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#checkCurseForgeDir-java.lang.String-">checkCurseForgeDir(String)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseCreateModpack</a></dt>
 <dd>
-<div class="block">Check whether the folder for the specified CurseForge projectID/fileID exists.</div>
+<div class="block">Check whether the folder for the specified CurseForge projectID/fileID exists and if it does exist, delete it
+ recursively to ensure we are working with a clean environment when creating a modpack from CurseForge.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/FilesSetup.html#checkForConfig--">checkForConfig()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator">FilesSetup</a></dt>
 <dd>
@@ -160,65 +205,94 @@
 </dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#checkJavaPath-java.lang.String-">checkJavaPath(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
-<div class="block">Checks whether the correct path to the Java installation was set.</div>
+<div class="block">Checks whether the passed String ends with <code>java.exe</code> or <code>java</code> and whether the files exist.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#checkLocaleFile--">checkLocaleFile()</a></span> - Method in class de.griefed.serverpackcreator.i18n.<a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></dt>
 <dd>
-<div class="block">Check for existence of a lang.properties-file and if found assign language specified therein.</div>
+<div class="block">Check for existence of a lang.properties file and, if found, assign the language specified therein.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#checkModloader-java.lang.String-">checkModloader(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
-<div class="block">Checks whether Forge or Fabric were specified as modloader.</div>
+<div class="block">Checks whether either Forge or Fabric were specified as the modloader.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#checkModloaderVersion-java.lang.String-java.lang.String-">checkModloaderVersion(String, String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
-<div class="block">Determine whether to check for correct Forge or correct Fabric modloader version.</div>
+<div class="block">Depending on whether Forge or Fabric was specified as the modloader, this will call the corresponding version check
+ to verify that the user correctly set their modloader version.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#checkModpackDir-java.lang.String-">checkModpackDir(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
-<div class="block">Check whether the specified modpack directory exists.</div>
+<div class="block">Checks whether the passed String is empty and if it is empty, prints the corresponding message to the console and
+ serverpackcreator.log so the user knows what went wrong.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#chooserDimension">chooserDimension</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#cleanupEnvironment-java.lang.String-">cleanupEnvironment(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>
-<div class="block">Deletes files from previous runs of serverpackcreator.</div>
+<div class="block">Deletes all files, directories and ZIP-archives of previously generated server packs to ensure newly generated
+ server pack is as clean as possible.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#cleanupEnvironment-java.lang.String-">cleanupEnvironment(String)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseCreateModpack</a></dt>
+<dd>
+<div class="block">Deletes any and all folder and files, recursively, inside the target directory, thus ensuring we are working in a
+ clean environment when creating a new modpack from CurseForge.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#cleanUpServerPack-java.io.File-java.io.File-java.lang.String-java.lang.String-java.lang.String-java.lang.String-">cleanUpServerPack(File, File, String, String, String, String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>
-<div class="block">Deletes remnant files from Fabric/Forge installation no longer needed.</div>
+<div class="block">Cleans up the server_pack directory by deleting left-over files from modloader installations and version checking.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#clientMods">clientMods</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#clientModsChooser">clientModsChooser</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#config">config</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#configChooser">configChooser</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#configFile">configFile</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/FilesSetup.html#configFile">configFile</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator">FilesSetup</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Configuration</span></a> - Class in <a href="de/griefed/serverpackcreator/package-summary.html">de.griefed.serverpackcreator</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#Configuration-de.griefed.serverpackcreator.i18n.LocalizationManager-">Configuration(LocalizationManager)</a></span> - Constructor for class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block"><strong>Table of methods</strong>
+ 1.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#Configuration-de.griefed.serverpackcreator.i18n.LocalizationManager-de.griefed.serverpackcreator.curseforgemodpack.CurseCreateModpack-">Configuration(LocalizationManager, CurseCreateModpack)</a></span> - Constructor for class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
+<dd>
+<div class="block"><strong>Constructor</strong>
+ Used for Dependency Injection.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#configuration">configuration</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateGui.html#configuration">configuration</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui">CreateGui</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#configuration">configuration</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/AboutTab.html#constraints">constraints</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui">AboutTab</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#constraints">constraints</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html#constraints">constraints</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html" title="class in de.griefed.serverpackcreator.gui">ModloaderInstallerLogTab</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html#constraints">constraints</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html" title="class in de.griefed.serverpackcreator.gui">ServerPackCreatorLogTab</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#containsFabric-de.griefed.serverpackcreator.curseforgemodpack.CurseModpack-">containsFabric(CurseModpack)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
-<div class="block">Checks for the Jumploader mod in the project list of the modpack.</div>
+<div class="block">Checks whether the projectID for the Jumploader mod is present in the list of mods required by the CurseForge modpack.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#convertToBoolean-java.lang.String-">convertToBoolean(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
-<div class="block">Converts various strings to booleans.</div>
+<div class="block">Converts various strings to booleans, by using regex, to allow for more variations in input.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#copyDirs">copyDirs</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#copyDirsChooser">copyDirsChooser</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#copyFiles-java.lang.String-java.util.List-java.util.List-">copyFiles(String, List&lt;String&gt;, List&lt;String&gt;)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>
-<div class="block">Copies all specified folders and their files to the modpackDir.</div>
+<div class="block">Copies all specified directories and mods, excluding clientside-only mods, from the modpack directory into the
+  server pack directory.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#copyIcon-java.lang.String-">copyIcon(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>
@@ -226,7 +300,7 @@
 </dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#copyOverride-java.lang.String-">copyOverride(String)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseCreateModpack</a></dt>
 <dd>
-<div class="block">Copies all folders and the files therein to the parent modpack directory.</div>
+<div class="block">Recursively copy all folders and files from the override directory to the parent directory, our modpack directory.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#copyProperties-java.lang.String-">copyProperties(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>
@@ -234,60 +308,160 @@
 </dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#copyStartScripts-java.lang.String-java.lang.String-boolean-">copyStartScripts(String, String, boolean)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>
-<div class="block">Copies start scripts for Forge modloader into the server_pack folder.</div>
+<div class="block">Copies start scripts for the specified modloader into the server pack.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#COUNTRY_MAP_PATH">COUNTRY_MAP_PATH</a></span> - Variable in class de.griefed.serverpackcreator.i18n.<a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateGui.html#createAndShowGUI--">createAndShowGUI()</a></span> - Method in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui">CreateGui</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Creates the frame in which the banner, tabbed pane with all the tabs, icon and title are displayed and shows it.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#createConfigurationFile--">createConfigurationFile()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
-<div class="block">Generate new configuration file from CLI input.</div>
+<div class="block">Walk the user through the generation of a new ServerPackCreator configuration file by asking them for input,
+ step-by-step, regarding their modpack.</div>
 </dd>
 <dt><a href="de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">CreateGui</span></a> - Class in <a href="de/griefed/serverpackcreator/gui/package-summary.html">de.griefed.serverpackcreator.gui</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateGui.html#CreateGui-de.griefed.serverpackcreator.i18n.LocalizationManager-de.griefed.serverpackcreator.Configuration-">CreateGui(LocalizationManager, Configuration)</a></span> - Constructor for class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui">CreateGui</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block"><strong>Table of methods</strong><br>
+ <a href="de/griefed/serverpackcreator/gui/CreateGui.html#CreateGui-de.griefed.serverpackcreator.i18n.LocalizationManager-de.griefed.serverpackcreator.Configuration-de.griefed.serverpackcreator.curseforgemodpack.CurseCreateModpack-de.griefed.serverpackcreator.CreateServerPack-"><code>CreateGui.CreateGui(LocalizationManager, Configuration, CurseCreateModpack, CreateServerPack)</code></a><br>
+ <a href="de/griefed/serverpackcreator/gui/CreateGui.html#mainGUI--"><code>CreateGui.mainGUI()</code></a><br>
+ <a href="de/griefed/serverpackcreator/gui/CreateGui.html#createAndShowGUI--"><code>CreateGui.createAndShowGUI()</code></a>
+ This class creates and shows the GUI needed for running ServerPackCreator in....well...GUI mode.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateGui.html#CreateGui-de.griefed.serverpackcreator.i18n.LocalizationManager-de.griefed.serverpackcreator.Configuration-de.griefed.serverpackcreator.curseforgemodpack.CurseCreateModpack-de.griefed.serverpackcreator.CreateServerPack-">CreateGui(LocalizationManager, Configuration, CurseCreateModpack, CreateServerPack)</a></span> - Constructor for class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui">CreateGui</a></dt>
+<dd>
+<div class="block"><strong>Constructor</strong>
+ Used for Dependency Injection.</div>
+</dd>
 <dt><a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">CreateServerPack</span></a> - Class in <a href="de/griefed/serverpackcreator/package-summary.html">de.griefed.serverpackcreator</a></dt>
+<dd>
+<div class="block"><strong>Table of methods</strong>
+ 1.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#CreateServerPack-de.griefed.serverpackcreator.i18n.LocalizationManager-de.griefed.serverpackcreator.Configuration-de.griefed.serverpackcreator.curseforgemodpack.CurseCreateModpack-">CreateServerPack(LocalizationManager, Configuration, CurseCreateModpack)</a></span> - Constructor for class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
+<dd>
+<div class="block"><strong>Constructor</strong>
+ Used for Dependency Injection.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateGui.html#createServerPack">createServerPack</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui">CreateGui</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#CreateServerPack-de.griefed.serverpackcreator.i18n.LocalizationManager-de.griefed.serverpackcreator.Configuration-">CreateServerPack(LocalizationManager, Configuration)</a></span> - Constructor for class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
-<dd>&nbsp;</dd>
-<dt><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">CreateServerPackTab</span></a> - Class in <a href="de/griefed/serverpackcreator/gui/package-summary.html">de.griefed.serverpackcreator.gui</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#createServerPack">createServerPack</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#CreateServerPackTab-de.griefed.serverpackcreator.i18n.LocalizationManager-de.griefed.serverpackcreator.Configuration-">CreateServerPackTab(LocalizationManager, Configuration)</a></span> - Constructor for class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#createServerPackPanel">createServerPackPanel</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">CreateServerPackTab</span></a> - Class in <a href="de/griefed/serverpackcreator/gui/package-summary.html">de.griefed.serverpackcreator.gui</a></dt>
+<dd>
+<div class="block">This class creates the tab which displays the labels, textfields, buttons and functions in order to create a new
+ server pack.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#CreateServerPackTab-de.griefed.serverpackcreator.i18n.LocalizationManager-de.griefed.serverpackcreator.Configuration-de.griefed.serverpackcreator.curseforgemodpack.CurseCreateModpack-de.griefed.serverpackcreator.CreateServerPack-">CreateServerPackTab(LocalizationManager, Configuration, CurseCreateModpack, CreateServerPack)</a></span> - Constructor for class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
+<dd>
+<div class="block"><strong>Constructor</strong>
+ Used for Dependency Injection.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#createServerPackTab--">createServerPackTab()</a></span> - Method in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Create the tab which displays every component related to configuring ServerPackCreator and creating a server pack.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#currentLanguage">currentLanguage</a></span> - Variable in class de.griefed.serverpackcreator.i18n.<a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></dt>
 <dd>
-<div class="block">Current language of application, mapped for easier further reference.</div>
+<div class="block">Current language of ServerPackCreator, mapped for easier further reference.</div>
 </dd>
-<dt><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">CurseCreateModpack</span></a> - Class in <a href="de/griefed/serverpackcreator/curseforgemodpack/package-summary.html">de.griefed.serverpackcreator.curseforgemodpack</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#curseCreateModpack">curseCreateModpack</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#curseCreateModpack">curseCreateModpack</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
+<dd>&nbsp;</dd>
+<dt><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">CurseCreateModpack</span></a> - Class in <a href="de/griefed/serverpackcreator/curseforgemodpack/package-summary.html">de.griefed.serverpackcreator.curseforgemodpack</a></dt>
+<dd>
+<div class="block"><strong>Table of methods</strong><br>
+ <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#CurseCreateModpack-de.griefed.serverpackcreator.i18n.LocalizationManager-"><code>CurseCreateModpack.CurseCreateModpack(LocalizationManager)</code></a><br>
+ <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#setModloaderCase-java.lang.String-"><code>CurseCreateModpack.setModloaderCase(String)</code></a><br>
+ <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#curseForgeModpack-java.lang.String-java.lang.Integer-java.lang.Integer-"><code>CurseCreateModpack.curseForgeModpack(String, Integer, Integer)</code></a><br>
+ <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#initializeModpack-java.lang.String-java.lang.Integer-java.lang.Integer-"><code>CurseCreateModpack.initializeModpack(String, Integer, Integer)</code></a><br>
+ <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#downloadMods-java.lang.String-"><code>CurseCreateModpack.downloadMods(String)</code></a><br>
+ <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#copyOverride-java.lang.String-"><code>CurseCreateModpack.copyOverride(String)</code></a><br>
+ <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#checkCurseForgeDir-java.lang.String-"><code>CurseCreateModpack.checkCurseForgeDir(String)</code></a><br>
+ <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#unzipArchive-java.lang.String-java.lang.String-"><code>CurseCreateModpack.unzipArchive(String, String)</code></a><br>
+ <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#newFile-java.io.File-java.util.zip.ZipEntry-"><code>CurseCreateModpack.newFile(File, ZipEntry)</code></a><br>
+ <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#cleanupEnvironment-java.lang.String-"><code>CurseCreateModpack.cleanupEnvironment(String)</code></a>
+ Download a modpack from CurseForge and create it by unzipping the ZIP-archive, copy all folders and files from the
+ override directory to the parent directory, download all mods in said modpack, and delete no longer needed files.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#CurseCreateModpack-de.griefed.serverpackcreator.i18n.LocalizationManager-">CurseCreateModpack(LocalizationManager)</a></span> - Constructor for class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseCreateModpack</a></dt>
+<dd>
+<div class="block"><strong>Constructor</strong>
+ Used for Dependency Injection.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateGui.html#curseCreateModpack">curseCreateModpack</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui">CreateGui</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">CurseFiles</span></a> - Class in <a href="de/griefed/serverpackcreator/curseforgemodpack/package-summary.html">de.griefed.serverpackcreator.curseforgemodpack</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#curseCreateModpack">curseCreateModpack</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">CurseFiles</span></a> - Class in <a href="de/griefed/serverpackcreator/curseforgemodpack/package-summary.html">de.griefed.serverpackcreator.curseforgemodpack</a></dt>
+<dd>
+<div class="block"><strong>Table of methods</strong><br>
+ <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#getProjectID--"><code>CurseFiles.getProjectID()</code></a><br>
+ <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#setProjectID-java.lang.String-"><code>CurseFiles.setProjectID(String)</code></a><br>
+ <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#getFileID--"><code>CurseFiles.getFileID()</code></a><br>
+ <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#setFileID-java.lang.String-"><code>CurseFiles.setFileID(String)</code></a><br>
+ <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#toString--"><code>CurseFiles.toString()</code></a>
+ Retrieves information about a CurseForge Minecraft modpack by using <code>com.fasterxml.jackson.databind</code> JSON parsing.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#CurseFiles--">CurseFiles()</a></span> - Constructor for class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseFiles</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#curseForgeModpack-java.lang.String-java.lang.Integer-java.lang.Integer-">curseForgeModpack(String, Integer, Integer)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseCreateModpack</a></dt>
 <dd>
-<div class="block">Gets the names of the specified project and file and makes calls to methods which create the modpack so we can then create a server pack from it.</div>
+<div class="block">Acquires the names of the CurseForge project and file.</div>
 </dd>
 <dt><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">CurseMinecraft</span></a> - Class in <a href="de/griefed/serverpackcreator/curseforgemodpack/package-summary.html">de.griefed.serverpackcreator.curseforgemodpack</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block"><strong>Table of methods</strong><br>
+ <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#getVersion--"><code>CurseMinecraft.getVersion()</code></a><br>
+ <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#setVersion-java.lang.String-"><code>CurseMinecraft.setVersion(String)</code></a><br>
+ <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#getModLoaders--"><code>CurseMinecraft.getModLoaders()</code></a><br>
+ <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#setModLoaders-java.util.List-"><code>CurseMinecraft.setModLoaders(List)</code></a><br>
+ <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#toString--"><code>CurseMinecraft.toString()</code></a>
+ Retrieves information about a CurseForge Minecraft modpack by using <code>com.fasterxml.jackson.databind</code> JSON parsing.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#CurseMinecraft--">CurseMinecraft()</a></span> - Constructor for class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseMinecraft</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">CurseModLoaders</span></a> - Class in <a href="de/griefed/serverpackcreator/curseforgemodpack/package-summary.html">de.griefed.serverpackcreator.curseforgemodpack</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block"><strong>Table of methods</strong><br>
+ <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html#getId--"><code>CurseModLoaders.getId()</code></a><br>
+ <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html#setId-java.lang.String-"><code>CurseModLoaders.setId(String)</code></a><br>
+ <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html#toString--"><code>CurseModLoaders.toString()</code></a>
+ Retrieves information about a CurseForge Minecraft modpack by using <code>com.fasterxml.jackson.databind</code> JSON parsing.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html#CurseModLoaders--">CurseModLoaders()</a></span> - Constructor for class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModLoaders</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">CurseModpack</span></a> - Class in <a href="de/griefed/serverpackcreator/curseforgemodpack/package-summary.html">de.griefed.serverpackcreator.curseforgemodpack</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block"><strong>Table of methods</strong><br>
+ <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#getMinecraft--"><code>CurseModpack.getMinecraft()</code></a><br>
+ <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#setMinecraft-java.util.List-"><code>CurseModpack.setMinecraft(List)</code></a><br>
+ <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#getName--"><code>CurseModpack.getName()</code></a><br>
+ <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#setName-java.lang.String-"><code>CurseModpack.setName(String)</code></a><br>
+ <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#getVersion--"><code>CurseModpack.getVersion()</code></a><br>
+ <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#setVersion-java.lang.String-"><code>CurseModpack.setVersion(String)</code></a><br>
+ <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#getAuthor--"><code>CurseModpack.getAuthor()</code></a><br>
+ <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#setAuthor-java.lang.String-"><code>CurseModpack.setAuthor(String)</code></a><br>
+ <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#getFiles--"><code>CurseModpack.getFiles()</code></a><br>
+ <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#setFiles-java.util.List-"><code>CurseModpack.setFiles(List)</code></a><br>
+ <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#toString--"><code>CurseModpack.toString()</code></a>
+ Retrieve information about a CurseForge Minecraft modpack by using <code>com.fasterxml.jackson.databind</code> JSON parsing.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#CurseModpack--">CurseModpack()</a></span> - Constructor for class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModpack</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><span class="typeNameLink">CurseSplines</span></a> - Class in <a href="de/griefed/serverpackcreator/curseforgemodpack/package-summary.html">de.griefed.serverpackcreator.curseforgemodpack</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block"><strong>Table of methods</strong><br>
+ <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html#reticulating"><code>CurseSplines.reticulating</code></a><br>
+ <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html#getRandomInt--"><code>CurseSplines.getRandomInt()</code></a><br>
+ <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html#getSpline--"><code>CurseSplines.getSpline()</code></a><br>
+ <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html#reticulate--"><code>CurseSplines.reticulate()</code></a>
+ Just something fun to brighten the mood.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html#CurseSplines--">CurseSplines()</a></span> - Constructor for class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseSplines</a></dt>
 <dd>&nbsp;</dd>
 </dl>
@@ -306,15 +480,17 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#deleteMinecraftJar-java.lang.String-java.lang.String-java.lang.String-">deleteMinecraftJar(String, String, String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>
-<div class="block">Deletes Mojang's minecraft_server.jar from the zip-archive so users do not accidentally upload a file containing software from Mojang.</div>
+<div class="block">Deletes the Minecraft server JAR from the ZIP-archive as per Mojang's TOS and EULA.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/AboutTab.html#document">document</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui">AboutTab</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#downloadFabricJar-java.lang.String-">downloadFabricJar(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>
-<div class="block">Downloads the specified version of Fabric.</div>
+<div class="block">Downloads the latest Fabric installer into the server pack.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#downloadForgeJar-java.lang.String-java.lang.String-java.lang.String-">downloadForgeJar(String, String, String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>
-<div class="block">Downloads the specified version of the Forge installer to be used in ServerSetup.installServer.</div>
+<div class="block">Downloads the modloader server installer for Forge, for the specified modloader version.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#downloadMods-java.lang.String-">downloadMods(String)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseCreateModpack</a></dt>
 <dd>
@@ -328,7 +504,7 @@
 <dl>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#excludeClientMods-java.lang.String-java.util.List-">excludeClientMods(String, List&lt;String&gt;)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>
-<div class="block">Generate a list of all mods in a modpack EXCEPT clientside-only mods.</div>
+<div class="block">Generates a list of all mods to include in the server pack excluding clientside-only mods.</div>
 </dd>
 </dl>
 <a name="I:F">
@@ -338,7 +514,7 @@
 <dl>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#fabricBatch-java.lang.String-java.lang.String-">fabricBatch(String, String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>
-<div class="block">Generates download scripts for Mojang's Minecraft server for Fabric,Windows.</div>
+<div class="block">Generates Fabric Windows-Batch download scripts for Mojang's Minecraft server JAR for the specified Minecraft version.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#fabricLinuxFile">fabricLinuxFile</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>&nbsp;</dd>
@@ -346,7 +522,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#fabricShell-java.lang.String-java.lang.String-">fabricShell(String, String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>
-<div class="block">Generates download scripts for Mojang's Minecraft server for Fabric,Linux.</div>
+<div class="block">Generates Fabric Linux-shell download scripts for Mojang's Minecraft server JAR for the specified Minecraft version.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#fabricWindowsFile">fabricWindowsFile</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>&nbsp;</dd>
@@ -363,9 +539,16 @@
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#files">files</a></span> - Variable in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModpack</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">FilesSetup</span></a> - Class in <a href="de/griefed/serverpackcreator/package-summary.html">de.griefed.serverpackcreator</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block"><strong>Table of methods</strong>
+ 
+ 1.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/FilesSetup.html#FilesSetup-de.griefed.serverpackcreator.i18n.LocalizationManager-">FilesSetup(LocalizationManager)</a></span> - Constructor for class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator">FilesSetup</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block"><strong>Constructor</strong>
+ Used for Dependency Injection.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/FilesSetup.html#filesSetup--">filesSetup()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator">FilesSetup</a></dt>
 <dd>
 <div class="block">Calls individual methods which check for existence of default files.</div>
@@ -376,7 +559,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#forgeBatch-java.lang.String-java.lang.String-">forgeBatch(String, String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>
-<div class="block">Generates download scripts for Mojang's Minecraft server for Forge,Windows.</div>
+<div class="block">Generates Forge Windows-Batch download scripts for Mojang's Minecraft server JAR for the specified Minecraft version.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#forgeLinuxFile">forgeLinuxFile</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>&nbsp;</dd>
@@ -384,7 +567,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#forgeShell-java.lang.String-java.lang.String-">forgeShell(String, String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>
-<div class="block">Generates download scripts for Mojang's Minecraft server for Forge,Linux.</div>
+<div class="block">Generates Forge Linux-shell download scripts for Mojang's Minecraft server JAR for the specified Minecraft version.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#forgeWindowsFile">forgeWindowsFile</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>&nbsp;</dd>
@@ -398,116 +581,221 @@
 <dl>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#generateDownloadScripts-java.lang.String-java.lang.String-java.lang.String-">generateDownloadScripts(String, String, String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>
-<div class="block">Calls methods for generating download scripts for Mojang's Minecraft server depending on the specified versions and modloader.</div>
+<div class="block">Depending on the specified modloader and Minecraft version, this method makes calls to generate the corresponding
+ download scripts for the Minecraft server JAR.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#getAuthor--">getAuthor()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModpack</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Getter for the author of the CurseForge modpack.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#getClientMods--">getClientMods()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Getter for a list of clientside-only mods to exclude from server pack.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#getConfig--">getConfig()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Getter for a <code>Config</code> containing a parsed configuration-file.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#getConfigFile--">getConfigFile()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Getter for serverpackcreator.conf.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/FilesSetup.html#getConfigFile--">getConfigFile()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator">FilesSetup</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Getter for serverpackcreator.conf.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#getCopyDirs--">getCopyDirs()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Getter for the list of directories in the modpack to copy to the server pack.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#getFabricLinuxFile--">getFabricLinuxFile()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Getter for start-fabric.sh.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/FilesSetup.html#getFabricLinuxFile--">getFabricLinuxFile()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator">FilesSetup</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Getter for start-fabric.sh.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#getFabricManifestUrl--">getFabricManifestUrl()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Getter for Fabric's version-manifest.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#getFabricWindowsFile--">getFabricWindowsFile()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Getter for start-fabric.bat.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/FilesSetup.html#getFabricWindowsFile--">getFabricWindowsFile()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator">FilesSetup</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Getter for start-fabric.bat.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#getFallbackModsList--">getFallbackModsList()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Getter for the fallback clientside-only mods-list, in case no customized one is provided by the user.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#getFileID--">getFileID()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseFiles</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Getter for a fileID of a dependency in the CurseForge modpack.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#getFiles--">getFiles()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModpack</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Getter for the files on which the CurseForge modpack depends by using <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><code>CurseFiles</code></a>.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#getForgeLinuxFile--">getForgeLinuxFile()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Getter for start-forge.sh</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/FilesSetup.html#getForgeLinuxFile--">getForgeLinuxFile()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator">FilesSetup</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Getter for start-forge.sh.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#getForgeManifestUrl--">getForgeManifestUrl()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Getter for Forge's version-manifest.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#getForgeWindowsFile--">getForgeWindowsFile()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Getter for start-forge.bat.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/FilesSetup.html#getForgeWindowsFile--">getForgeWindowsFile()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator">FilesSetup</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Getter for start-forge.bat.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#getIconFile--">getIconFile()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Getter for server-icon.png</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/FilesSetup.html#getIconFile--">getIconFile()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator">FilesSetup</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Getter for server-icon.png</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html#getId--">getId()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModLoaders</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Getter for the modloader and modloader version used by the CurseForge modpack.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#getIncludeServerIcon--">getIncludeServerIcon()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Getter for whether the server-icon.png should be included in the server pack.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#getIncludeServerInstallation--">getIncludeServerInstallation()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Getter for whether the modloader server installation should be included.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#getIncludeServerProperties--">getIncludeServerProperties()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Getter for whether the server.properties should be included in the server pack.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#getIncludeStartScripts--">getIncludeStartScripts()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Getter for whether the start scripts should be included in the server pack.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#getIncludeZipCreation--">getIncludeZipCreation()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Getter for whether a ZIP-archive of the server pack should be created.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#getJavaPath--">getJavaPath()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#getJavaPath-java.lang.String-">getJavaPath(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
-<div class="block">Automatically set Java path if none is specified</div>
+<div class="block">Getter for the path to the Java executable/binary.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#getJavaPathFromSystem-java.lang.String-">getJavaPathFromSystem(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
+<dd>
+<div class="block">Checks the passed String whether it is empty, and if it is, automatically acquires the path to the users Java
+ installation and appends bin/java.exe or bin/java depending on whether the path to said installation starts with
+ Windows-typical C: prefix.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#getLangPropertiesFile--">getLangPropertiesFile()</a></span> - Method in class de.griefed.serverpackcreator.i18n.<a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Getter for the lang.properties file which will set the locale for ServerPackCreator.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#getLocale--">getLocale()</a></span> - Method in class de.griefed.serverpackcreator.i18n.<a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Getter for a String containing the currently used language.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#getLocalizedString-java.lang.String-">getLocalizedString(String)</a></span> - Method in class de.griefed.serverpackcreator.i18n.<a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></dt>
 <dd>
-<div class="block">Gets localized string from localization resource bundle.</div>
+<div class="block">Acquires a localized String for the provided language key from the initialized locale resource.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#getMinecraft--">getMinecraft()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModpack</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Getter for Minecraft related information using <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><code>CurseMinecraft</code></a>.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#getMinecraftManifestUrl--">getMinecraftManifestUrl()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Getter for Mojang's Minecraft version-manifest.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#getMinecraftVersion--">getMinecraftVersion()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Getter for the version of Minecraft used by the modpack.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#getModLoader--">getModLoader()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Getter for the modloader used by the modpack.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#getModLoaders--">getModLoaders()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseMinecraft</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Getter for modloader related information using <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><code>CurseModLoaders</code></a>.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#getModLoaderVersion--">getModLoaderVersion()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Getter for the version of the modloader used by the modpack.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#getModpackDir--">getModpackDir()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Getter for the path to the modpack directory.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#getName--">getName()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModpack</a></dt>
+<dd>
+<div class="block">Getter for the name of the CurseForge modpack.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#getObjectMapper--">getObjectMapper()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#getOldConfigFile--">getOldConfigFile()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Getter for creator.conf.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/FilesSetup.html#getOldConfigFile--">getOldConfigFile()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator">FilesSetup</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Getter for creator.conf.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#getProjectFileID--">getProjectFileID()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Getter for the CurseForge file of a modpack, which will be created by <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#curseForgeModpack-java.lang.String-java.lang.Integer-java.lang.Integer-"><code>CurseCreateModpack.curseForgeModpack(String, Integer, Integer)</code></a>.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#getProjectID--">getProjectID()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Getter for the CurseForge projectID of a modpack, which will be created by <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#curseForgeModpack-java.lang.String-java.lang.Integer-java.lang.Integer-"><code>CurseCreateModpack.curseForgeModpack(String, Integer, Integer)</code></a>.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#getProjectID--">getProjectID()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseFiles</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Getter for a projectID of a dependency in the CurseForge modpack.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#getPropertiesFile--">getPropertiesFile()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Getter for server.properties.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/FilesSetup.html#getPropertiesFile--">getPropertiesFile()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator">FilesSetup</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Getter for server.properties.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html#getRandomInt--">getRandomInt()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseSplines</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Retrieves the index of a random message in <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html#reticulating"><code>CurseSplines.reticulating</code></a>.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html#getSpline--">getSpline()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseSplines</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Retrieves a message from <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html#reticulating"><code>CurseSplines.reticulating</code></a> using a randomly generated index from <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html#getRandomInt--"><code>CurseSplines.getRandomInt()</code></a>.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#getSupportedLanguages--">getSupportedLanguages()</a></span> - Method in class de.griefed.serverpackcreator.i18n.<a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Getter for the array of languages supported by ServerPackCreator.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#getVersion--">getVersion()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseMinecraft</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Getter for the Minecraft version used by the CurseForge modpack.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#getVersion--">getVersion()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModpack</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Getter for the version of the CurseForge modpack.</div>
+</dd>
 </dl>
 <a name="I:H">
 <!--   -->
@@ -516,6 +804,10 @@
 <dl>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#helpIcon">helpIcon</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#helpScrollPane">helpScrollPane</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#helpTextArea">helpTextArea</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
+<dd>&nbsp;</dd>
 </dl>
 <a name="I:I">
 <!--   -->
@@ -529,7 +821,9 @@
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/FilesSetup.html#iconFile">iconFile</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator">FilesSetup</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html#id">id</a></span> - Variable in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModLoaders</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Ignore unknown values/object.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#includeServerIcon">includeServerIcon</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#includeServerInstallation">includeServerInstallation</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
@@ -541,7 +835,14 @@
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#includeZipCreation">includeZipCreation</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="de/griefed/serverpackcreator/i18n/IncorrectLanguageException.html" title="class in de.griefed.serverpackcreator.i18n"><span class="typeNameLink">IncorrectLanguageException</span></a> - Exception in <a href="de/griefed/serverpackcreator/i18n/package-summary.html">de.griefed.serverpackcreator.i18n</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block"><strong>Table of Exceptions</strong><br>
+ <a href="de/griefed/serverpackcreator/i18n/IncorrectLanguageException.html#IncorrectLanguageException--"><code>IncorrectLanguageException.IncorrectLanguageException()</code></a><br>
+ <a href="de/griefed/serverpackcreator/i18n/IncorrectLanguageException.html#IncorrectLanguageException-java.lang.String-"><code>IncorrectLanguageException.IncorrectLanguageException(String)</code></a><br>
+ <a href="de/griefed/serverpackcreator/i18n/IncorrectLanguageException.html#IncorrectLanguageException-java.lang.Throwable-"><code>IncorrectLanguageException.IncorrectLanguageException(Throwable)</code></a><br>
+ <a href="de/griefed/serverpackcreator/i18n/IncorrectLanguageException.html#IncorrectLanguageException-java.lang.String-java.lang.Throwable-"><code>IncorrectLanguageException.IncorrectLanguageException(String, Throwable)</code></a>
+ Provides exceptions to <a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n"><code>LocalizationManager</code></a></div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/i18n/IncorrectLanguageException.html#IncorrectLanguageException--">IncorrectLanguageException()</a></span> - Constructor for exception de.griefed.serverpackcreator.i18n.<a href="de/griefed/serverpackcreator/i18n/IncorrectLanguageException.html" title="class in de.griefed.serverpackcreator.i18n">IncorrectLanguageException</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/i18n/IncorrectLanguageException.html#IncorrectLanguageException-java.lang.String-">IncorrectLanguageException(String)</a></span> - Constructor for exception de.griefed.serverpackcreator.i18n.<a href="de/griefed/serverpackcreator/i18n/IncorrectLanguageException.html" title="class in de.griefed.serverpackcreator.i18n">IncorrectLanguageException</a></dt>
@@ -551,42 +852,54 @@
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/i18n/IncorrectLanguageException.html#IncorrectLanguageException-java.lang.Throwable-">IncorrectLanguageException(Throwable)</a></span> - Constructor for exception de.griefed.serverpackcreator.i18n.<a href="de/griefed/serverpackcreator/i18n/IncorrectLanguageException.html" title="class in de.griefed.serverpackcreator.i18n">IncorrectLanguageException</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#init-java.lang.String-">init(String)</a></span> - Method in class de.griefed.serverpackcreator.i18n.<a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Initializes the LocalizationManager with a provided locale.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#init-java.io.File-">init(File)</a></span> - Method in class de.griefed.serverpackcreator.i18n.<a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Initializes the LocalizationManager with a provided localePropertiesFile.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#init--">init()</a></span> - Method in class de.griefed.serverpackcreator.i18n.<a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></dt>
 <dd>
-<div class="block">Initializer with default localization properties path.</div>
+<div class="block">Initialize the LocalizationManager with en_us as the locale.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#initializeModpack-java.lang.String-java.lang.Integer-java.lang.Integer-">initializeModpack(String, Integer, Integer)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseCreateModpack</a></dt>
 <dd>
-<div class="block">Downloads the specified file of the specified project to a directory which is the combination of the project name and file display name.</div>
+<div class="block">Downloads the specified file of the specified project to a directory which is the combination of the project
+ name and file display name.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#installerLogger">installerLogger</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#installServer-java.lang.String-java.lang.String-java.lang.String-java.lang.String-java.lang.String-">installServer(String, String, String, String, String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>
-<div class="block">Installs the files for a Forge/Fabric server.</div>
+<div class="block">Installs the modloader server for the specified modloader, modloader version and Minecraft version.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#isCurse--">isCurse()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
-<div class="block">Checks whether the specified projectID,fileID combination is a valid CurseForge project and file and whether the resulting directory exists.</div>
+<div class="block">If modpackDir in the configuration file is a CurseForge projectID,fileID combination, then the modpack is first
+ created from said combination, using <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#curseForgeModpack-java.lang.String-java.lang.Integer-java.lang.Integer-"><code>CurseCreateModpack.curseForgeModpack(String, Integer, Integer)</code></a>,
+ before proceeding to checking the rest of the configuration.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#isDir-java.lang.String-">isDir(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
-<div class="block">Checks whether the specified modpack exists.</div>
+<div class="block">If the in the configuration specified modpack dir is an existing directory, checks are made for valid configuration
+ of: directories to copy to server pack,<br>
+ if includeServerInstallation is <code>true</code>) path to Java executable/binary, Minecraft version, modloader and modloader version.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#isFabricVersionCorrect-java.lang.String-">isFabricVersionCorrect(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
-<div class="block">Check the specified Fabric version against Fabric's version manifest to validate the version.</div>
+<div class="block">Checks whether the passed String is empty and if it is not. check the String against Fabric's version manifest
+ to validate the version.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#isForgeVersionCorrect-java.lang.String-">isForgeVersionCorrect(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
-<div class="block">Checks Forge version for errors (basically for its availability in Forge manifest)</div>
+<div class="block">Checks whether the passed String is empty and if it is not. check the String against Forge's version manifest
+ to validate the version.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#isMinecraftVersionCorrect-java.lang.String-">isMinecraftVersionCorrect(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
-<div class="block">Check the specified Minecraft version against Mojang's version manifest to validate the version.</div>
+<div class="block">Checks whether the passed String is empty and if it is not. check the String against Mojang's version manifest
+ to validate the version.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/AboutTab.html#issueIcon">issueIcon</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui">AboutTab</a></dt>
 <dd>&nbsp;</dd>
@@ -596,6 +909,8 @@
 </a>
 <h2 class="title">J</h2>
 <dl>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#javaChooser">javaChooser</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#javaPath">javaPath</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
 </dl>
@@ -604,6 +919,22 @@
 </a>
 <h2 class="title">L</h2>
 <dl>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#labelClientMods">labelClientMods</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#labelCopyDirs">labelCopyDirs</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#labelGenerateServerPack">labelGenerateServerPack</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#labelJavaPath">labelJavaPath</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#labelMinecraftVersion">labelMinecraftVersion</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#labelModloader">labelModloader</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#labelModloaderVersion">labelModloaderVersion</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#labelModpackDir">labelModpackDir</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#langPropertiesFile">langPropertiesFile</a></span> - Variable in class de.griefed.serverpackcreator.i18n.<a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#LANGUAGE_MAP_PATH">LANGUAGE_MAP_PATH</a></span> - Variable in class de.griefed.serverpackcreator.i18n.<a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></dt>
@@ -612,11 +943,11 @@
 </dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#latestFabricInstaller-java.lang.String-">latestFabricInstaller(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>
-<div class="block">Returns the latest installer version for the Fabric installer to be used in ServerSetup.installServer.</div>
+<div class="block">Acquires the latest version of the Fabric modloader installer and returns it as a string.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#latestFabricLoader-java.lang.String-">latestFabricLoader(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
-<div class="block">Returns the latest installer version for the Fabric installer to be used in ServerSetup.installServer.</div>
+<div class="block">Returns the latest version for the Fabric-loader.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#loadIcon">loadIcon</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
 <dd>&nbsp;</dd>
@@ -624,7 +955,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#localeResources">localeResources</a></span> - Variable in class de.griefed.serverpackcreator.i18n.<a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></dt>
 <dd>
-<div class="block">Localized strings that application uses.</div>
+<div class="block">Localized strings which ServerPackCreator uses.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#localizationManager">localizationManager</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
@@ -646,7 +977,18 @@
 <dd>&nbsp;</dd>
 <dt><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n"><span class="typeNameLink">LocalizationManager</span></a> - Class in <a href="de/griefed/serverpackcreator/i18n/package-summary.html">de.griefed.serverpackcreator.i18n</a></dt>
 <dd>
-<div class="block">This class is localization manager for your application.</div>
+<div class="block"><strong>Table of methods</strong><br>
+ <a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#getSupportedLanguages--"><code>getSupportedLanguages()</code></a><br>
+ <a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#getLangPropertiesFile--"><code>getLangPropertiesFile()</code></a><br>
+ <a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#getLocale--"><code>getLocale()</code></a><br>
+ <a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#init-java.lang.String-"><code>init(String)</code></a><br>
+ <a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#init-java.io.File-"><code>init(File)</code></a><br>
+ <a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#init--"><code>init()</code></a><br>
+ <a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#getLocalizedString-java.lang.String-"><code>getLocalizedString(String)</code></a><br>
+ <a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#checkLocaleFile--"><code>checkLocaleFile()</code></a><br>
+ <a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#writeLocaleToFile-java.lang.String-"><code>writeLocaleToFile(String)</code></a>
+ 
+ This is the localizationManager for ServerPackCreator.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#LocalizationManager--">LocalizationManager()</a></span> - Constructor for class de.griefed.serverpackcreator.i18n.<a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></dt>
 <dd>&nbsp;</dd>
@@ -657,17 +999,31 @@
 <h2 class="title">M</h2>
 <dl>
 <dt><a href="de/griefed/serverpackcreator/Main.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Main</span></a> - Class in <a href="de/griefed/serverpackcreator/package-summary.html">de.griefed.serverpackcreator</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block"><strong>Table of methods</strong>
+ 
+ <a href="de/griefed/serverpackcreator/Main.html#main-java.lang.String:A-"><code>Main.main(String[])</code></a>
+ 
+ Depending on the passed commandline arguments and whether ServerPackCreator is run in a headless environment,
+ one of the following modes will be entered:
+ <strong>-cgen</strong>
+ When ServerPackCreator is run with the <code>-cgen</code>-argument, you will be guided through a step-by-step
+ generation of a new configuration file.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Main.html#Main--">Main()</a></span> - Constructor for class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Main.html" title="class in de.griefed.serverpackcreator">Main</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Main.html#main-java.lang.String:A-">main(String[])</a></span> - Static method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Main.html" title="class in de.griefed.serverpackcreator">Main</a></dt>
 <dd>
-<div class="block">Init and "main" has been moved to Handler-class.</div>
+<div class="block">Initializes all objects needed for running ServerPackCreator and ensures Dependency Injection.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateGui.html#mainGUI--">mainGUI()</a></span> - Method in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui">CreateGui</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Shows the GUI from the EDT by using SwingUtilities and it's invokeLater method by calling <a href="de/griefed/serverpackcreator/gui/CreateGui.html#createAndShowGUI--"><code>CreateGui.createAndShowGUI()</code></a>.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#minecraft">minecraft</a></span> - Variable in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModpack</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Ignore unknown values/object.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#minecraftVersion">minecraftVersion</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/AboutTab.html#miscButtonDimension">miscButtonDimension</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui">AboutTab</a></dt>
@@ -676,18 +1032,30 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#modLoader">modLoader</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
-<dt><a href="de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">ModloaderInstallerLogTab</span></a> - Class in <a href="de/griefed/serverpackcreator/gui/package-summary.html">de.griefed.serverpackcreator.gui</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html#modloaderInstallerLogPanel">modloaderInstallerLogPanel</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html" title="class in de.griefed.serverpackcreator.gui">ModloaderInstallerLogTab</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">ModloaderInstallerLogTab</span></a> - Class in <a href="de/griefed/serverpackcreator/gui/package-summary.html">de.griefed.serverpackcreator.gui</a></dt>
+<dd>
+<div class="block">This class creates the tab which display the latest modloader_installer.log tailer.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html#ModloaderInstallerLogTab-de.griefed.serverpackcreator.i18n.LocalizationManager-">ModloaderInstallerLogTab(LocalizationManager)</a></span> - Constructor for class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html" title="class in de.griefed.serverpackcreator.gui">ModloaderInstallerLogTab</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block"><strong>Constructor</strong>
+ Used for Dependency Injection.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html#modloaderInstallerLogTab--">modloaderInstallerLogTab()</a></span> - Method in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html" title="class in de.griefed.serverpackcreator.gui">ModloaderInstallerLogTab</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Create the tab for the modloader_installer.log tailer in a JScrollPane with an always available vertical scrollbar
+ and a horizontal scrollbar available as needed.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#modLoaders">modLoaders</a></span> - Variable in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseMinecraft</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#modLoaderVersion">modLoaderVersion</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#modpackDir">modpackDir</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#modpackDirChooser">modpackDirChooser</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
+<dd>&nbsp;</dd>
 </dl>
 <a name="I:N">
 <!--   -->
@@ -698,7 +1066,7 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#newFile-java.io.File-java.util.zip.ZipEntry-">newFile(File, ZipEntry)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseCreateModpack</a></dt>
 <dd>
-<div class="block">Helper-Method for unzipArchive.</div>
+<div class="block">With help from <a href=https://www.baeldung.com/java-compress-and-uncompress>Baeldung Java Tutorials</a>.</div>
 </dd>
 </dl>
 <a name="I:O">
@@ -706,6 +1074,8 @@
 </a>
 <h2 class="title">O</h2>
 <dl>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#objectMapper">objectMapper</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#oldConfigFile">oldConfigFile</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/FilesSetup.html#oldConfigFile">oldConfigFile</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator">FilesSetup</a></dt>
@@ -720,14 +1090,16 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#printConfig-java.lang.String-java.util.List-java.util.List-boolean-java.lang.String-java.lang.String-java.lang.String-java.lang.String-boolean-boolean-boolean-boolean-">printConfig(String, List&lt;String&gt;, List&lt;String&gt;, boolean, String, String, String, String, boolean, boolean, boolean, boolean)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
-<div class="block">Prints the configuration.</div>
+<div class="block">Prints all passed fields to the console and serverpackcreator.log.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#projectFileID">projectFileID</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#projectID">projectID</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#projectID">projectID</a></span> - Variable in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseFiles</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Ignore unknown values/object.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#projectName">projectName</a></span> - Variable in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseCreateModpack</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#propertiesFile">propertiesFile</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
@@ -744,19 +1116,23 @@
 <dl>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#readBoolean--">readBoolean()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
-<div class="block">A helper method for config setup.</div>
+<div class="block">A helper method for <a href="de/griefed/serverpackcreator/Configuration.html#createConfigurationFile--"><code>Configuration.createConfigurationFile()</code></a>.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#readStringArray--">readStringArray()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
-<div class="block">A helper method for config setup.</div>
+<div class="block">A helper method for <a href="de/griefed/serverpackcreator/Configuration.html#createConfigurationFile--"><code>Configuration.createConfigurationFile()</code></a>.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html#reticulate--">reticulate()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseSplines</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Retrieve a random message from <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html#reticulating"><code>CurseSplines.reticulating</code></a>.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html#reticulating">reticulating</a></span> - Variable in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseSplines</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">The list of messages as they were available in SimCity, plus Reticulating Splines added by myself, for good measure.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#run--">run()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>
-<div class="block">Run when serverpackcreator is run in either -cli or -cgen mode.</div>
+<div class="block">Create a server pack if the check of the configuration file was successfull.</div>
 </dd>
 </dl>
 <a name="I:S">
@@ -764,68 +1140,142 @@
 </a>
 <h2 class="title">S</h2>
 <dl>
-<dt><a href="de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">ServerPackCreatorLogTab</span></a> - Class in <a href="de/griefed/serverpackcreator/gui/package-summary.html">de.griefed.serverpackcreator.gui</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html#scrollPane">scrollPane</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html" title="class in de.griefed.serverpackcreator.gui">ModloaderInstallerLogTab</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html#ServerPackCreatorLogTab-de.griefed.serverpackcreator.i18n.LocalizationManager-">ServerPackCreatorLogTab(LocalizationManager)</a></span> - Constructor for class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html" title="class in de.griefed.serverpackcreator.gui">ServerPackCreatorLogTab</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html#scrollPane">scrollPane</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html" title="class in de.griefed.serverpackcreator.gui">ServerPackCreatorLogTab</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html#serverPackCreatorLogTab--">serverPackCreatorLogTab()</a></span> - Method in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html" title="class in de.griefed.serverpackcreator.gui">ServerPackCreatorLogTab</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateGui.html#secret">secret</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui">CreateGui</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#setClientMods-java.util.List-">setClientMods(List&lt;String&gt;)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateGui.html#secretFile">secretFile</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui">CreateGui</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#setConfig-com.typesafe.config.Config-">setConfig(Config)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateGui.html#serverPackCreatorBanner">serverPackCreatorBanner</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui">CreateGui</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#setCopyDirs-java.util.List-">setCopyDirs(List&lt;String&gt;)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateGui.html#serverPackCreatorFrame">serverPackCreatorFrame</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui">CreateGui</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#setFileID-java.lang.String-">setFileID(String)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseFiles</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html#serverPackCreatorLogPanel">serverPackCreatorLogPanel</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html" title="class in de.griefed.serverpackcreator.gui">ServerPackCreatorLogTab</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">ServerPackCreatorLogTab</span></a> - Class in <a href="de/griefed/serverpackcreator/gui/package-summary.html">de.griefed.serverpackcreator.gui</a></dt>
+<dd>
+<div class="block">This class creates the tab which display the latest serverpackcreator.log tailer.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html#ServerPackCreatorLogTab-de.griefed.serverpackcreator.i18n.LocalizationManager-">ServerPackCreatorLogTab(LocalizationManager)</a></span> - Constructor for class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html" title="class in de.griefed.serverpackcreator.gui">ServerPackCreatorLogTab</a></dt>
+<dd>
+<div class="block"><strong>Constructor</strong>
+ Used for Dependency Injection.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html#serverPackCreatorLogTab--">serverPackCreatorLogTab()</a></span> - Method in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html" title="class in de.griefed.serverpackcreator.gui">ServerPackCreatorLogTab</a></dt>
+<dd>
+<div class="block">Create the tab for the serverpackcreator.log tailer in a JScrollPane with an always available vertical scrollbar
+ and a horizontal scrollbar available as needed.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#setAuthor-java.lang.String-">setAuthor(String)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModpack</a></dt>
+<dd>
+<div class="block">Setter for the author of the CurseForge modpack.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#setClientMods-java.util.List-">setClientMods(List&lt;String&gt;)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
+<dd>
+<div class="block">Setter for the list of clientside-only mods to exclude from server pack.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#setConfig-com.typesafe.config.Config-">setConfig(Config)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
+<dd>
+<div class="block">Setter for a <code>Config</code> containing a parsed configuration-file.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#setCopyDirs-java.util.List-">setCopyDirs(List&lt;String&gt;)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
+<dd>
+<div class="block">Setter for the list of directories in the modpack to copy to the server pack.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#setFileID-java.lang.String-">setFileID(String)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseFiles</a></dt>
+<dd>
+<div class="block">Setter for a fileID of a dependency in the CurseForge modpack.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#setFiles-java.util.List-">setFiles(List&lt;CurseFiles&gt;)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModpack</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Setter for the CurseForge modpack files on which it depends.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html#setId-java.lang.String-">setId(String)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModLoaders</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Setter for the modloader and modloader version used by the CurseForge modpack.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#setIncludeServerIcon-boolean-">setIncludeServerIcon(boolean)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Setter for whether the server-icon.png should be included in the server pack.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#setIncludeServerInstallation-boolean-">setIncludeServerInstallation(boolean)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Setter for whether the modloader server installation should be included.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#setIncludeServerProperties-boolean-">setIncludeServerProperties(boolean)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Setter for whether the server.properties should be included in the server pack.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#setIncludeStartScripts-boolean-">setIncludeStartScripts(boolean)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Setter for whether the start scripts should be included in the server pack.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#setIncludeZipCreation-boolean-">setIncludeZipCreation(boolean)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Setter for whether a ZIP-archive of the server pack should be created.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#setJavaPath-java.lang.String-">setJavaPath(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Setter for the path to the Java executable/binary.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#setMinecraft-java.util.List-">setMinecraft(List&lt;CurseMinecraft&gt;)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModpack</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Setter for Minecraft related information using <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><code>CurseMinecraft</code></a></div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#setMinecraftVersion-java.lang.String-">setMinecraftVersion(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Setter for the Minecraft version used by the modpack.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#setModLoader-java.lang.String-">setModLoader(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#setModloader-java.lang.String-">setModloader(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
-<div class="block">Standardize the specified modloader.</div>
+<div class="block">Setter for the modloader used by the modpack.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#setModloader-java.lang.String-">setModloader(String)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseCreateModpack</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#setModLoaderCase-java.lang.String-">setModLoaderCase(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
-<div class="block">Standardize the specified modloader.</div>
+<div class="block">Ensures the modloader is normalized to first letter upper case and rest lower case.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#setModloaderCase-java.lang.String-">setModloaderCase(String)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseCreateModpack</a></dt>
+<dd>
+<div class="block">Ensures the modloader is normalized to first letter upper case and rest lower case.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#setModLoaders-java.util.List-">setModLoaders(List&lt;CurseModLoaders&gt;)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseMinecraft</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Setter for modloader related information using <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack"><code>CurseModLoaders</code></a>.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#setModLoaderVersion-java.lang.String-">setModLoaderVersion(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Setter for the version of the modloader used by the modpack.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#setModpackDir-java.lang.String-">setModpackDir(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Setter for the path to the modpack directory.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#setName-java.lang.String-">setName(String)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModpack</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Setter for the name of the CurseForge modpack.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#setProjectFileID-int-">setProjectFileID(int)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Setter for the CurseForge file of a modpack, which will be created by <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#curseForgeModpack-java.lang.String-java.lang.Integer-java.lang.Integer-"><code>CurseCreateModpack.curseForgeModpack(String, Integer, Integer)</code></a>.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#setProjectID-int-">setProjectID(int)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Setter for the CurseForge projectID of a modpack, which will be created by <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#curseForgeModpack-java.lang.String-java.lang.Integer-java.lang.Integer-"><code>CurseCreateModpack.curseForgeModpack(String, Integer, Integer)</code></a>.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#setProjectID-java.lang.String-">setProjectID(String)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseFiles</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Setter for a projectID of a dependency in the CurseForge modpack.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#setVersion-java.lang.String-">setVersion(String)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseMinecraft</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Setter for the Minecraft version used by the CurseForge modpack.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#setVersion-java.lang.String-">setVersion(String)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModpack</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Setter for the version of the CurseForge modpack.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#startGeneration">startGeneration</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#suggestCopyDirs-java.lang.String-">suggestCopyDirs(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
@@ -833,21 +1283,52 @@
 <div class="block">Creates a list of suggested directories to include in server pack which is later on written to a new configuration file.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#SUPPORTED_LANGUAGES">SUPPORTED_LANGUAGES</a></span> - Variable in class de.griefed.serverpackcreator.i18n.<a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Languages supported by ServerPackCreator.</div>
+</dd>
 </dl>
 <a name="I:T">
 <!--   -->
 </a>
 <h2 class="title">T</h2>
 <dl>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#toString--">toString()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseFiles</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html#textArea">textArea</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html" title="class in de.griefed.serverpackcreator.gui">ModloaderInstallerLogTab</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#toString--">toString()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseMinecraft</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html#textArea">textArea</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html" title="class in de.griefed.serverpackcreator.gui">ServerPackCreatorLogTab</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html#toString--">toString()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModLoaders</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#textClientMods">textClientMods</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#toString--">toString()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModpack</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#textCopyDirs">textCopyDirs</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#textJavaPath">textJavaPath</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#textMinecraftVersion">textMinecraftVersion</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#textModloader">textModloader</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#textModloaderVersion">textModloaderVersion</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#textModpackDir">textModpackDir</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/AboutTab.html#textPane">textPane</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui">AboutTab</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#toString--">toString()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseFiles</a></dt>
+<dd>
+<div class="block">A comma separated combination of a dependency projectID and fileID of a CurseForge modpack.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#toString--">toString()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseMinecraft</a></dt>
+<dd>
+<div class="block">String containing information about the Minecraft version, modloader and modloader version used by the CurseForge
+ modpack.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html#toString--">toString()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModLoaders</a></dt>
+<dd>
+<div class="block">String containing information about the CurseForge modpack's used modloader and the modloader version.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#toString--">toString()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModpack</a></dt>
+<dd>
+<div class="block">String containing information about the CurseForge modpack.</div>
+</dd>
 </dl>
 <a name="I:U">
 <!--   -->
@@ -856,8 +1337,7 @@
 <dl>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#unzipArchive-java.lang.String-java.lang.String-">unzipArchive(String, String)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseCreateModpack</a></dt>
 <dd>
-<div class="block">With help from: https://www.baeldung.com/java-compress-and-uncompress
- Unzips the downloaded modpack archive to a directory.</div>
+<div class="block">With help from <a href=https://www.baeldung.com/java-compress-and-uncompress>Baeldung Java Tutorials</a>.</div>
 </dd>
 </dl>
 <a name="I:V">
@@ -866,7 +1346,9 @@
 <h2 class="title">V</h2>
 <dl>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#version">version</a></span> - Variable in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseMinecraft</a></dt>
-<dd>&nbsp;</dd>
+<dd>
+<div class="block">Ignore unknown values/object.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#version">version</a></span> - Variable in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModpack</a></dt>
 <dd>&nbsp;</dd>
 </dl>
@@ -883,7 +1365,8 @@
 </dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html#writeLocaleToFile-java.lang.String-">writeLocaleToFile(String)</a></span> - Method in class de.griefed.serverpackcreator.i18n.<a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></dt>
 <dd>
-<div class="block">Writes the specified locale from -lang your_locale to a lang.properties file to ensure every subsequent start of serverpackcreator is executed using said locale.</div>
+<div class="block">Writes the specified locale from -lang your_locale to a lang.properties file to ensure every subsequent start
+ of serverpackcreator is executed using said locale.</div>
 </dd>
 </dl>
 <a name="I:Z">
@@ -893,7 +1376,7 @@
 <dl>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#zipBuilder-java.lang.String-java.lang.String-java.lang.Boolean-java.lang.String-">zipBuilder(String, String, Boolean, String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
 <dd>
-<div class="block">Create a zip-archive of the serverpack, excluding Mojang's minecraft_server.jar.</div>
+<div class="block">Creates a ZIP-archive of the server_pack directory and deletes the Minecraft server JAR afterwards.</div>
 </dd>
 </dl>
 <a href="#I:A">A</a>&nbsp;<a href="#I:B">B</a>&nbsp;<a href="#I:C">C</a>&nbsp;<a href="#I:D">D</a>&nbsp;<a href="#I:E">E</a>&nbsp;<a href="#I:F">F</a>&nbsp;<a href="#I:G">G</a>&nbsp;<a href="#I:H">H</a>&nbsp;<a href="#I:I">I</a>&nbsp;<a href="#I:J">J</a>&nbsp;<a href="#I:L">L</a>&nbsp;<a href="#I:M">M</a>&nbsp;<a href="#I:N">N</a>&nbsp;<a href="#I:O">O</a>&nbsp;<a href="#I:P">P</a>&nbsp;<a href="#I:R">R</a>&nbsp;<a href="#I:S">S</a>&nbsp;<a href="#I:T">T</a>&nbsp;<a href="#I:U">U</a>&nbsp;<a href="#I:V">V</a>&nbsp;<a href="#I:W">W</a>&nbsp;<a href="#I:Z">Z</a>&nbsp;</div>
diff --git a/docs/serialized-form.html b/docs/serialized-form.html
index f972898ce..1ea730567 100644
--- a/docs/serialized-form.html
+++ b/docs/serialized-form.html
@@ -75,6 +75,70 @@
 <li class="blockList">
 <h2 title="Package">Package&nbsp;de.griefed.serverpackcreator.gui</h2>
 <ul class="blockList">
+<li class="blockList"><a name="de.griefed.serverpackcreator.gui.AboutTab">
+<!--   -->
+</a>
+<h3>Class <a href="de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui">de.griefed.serverpackcreator.gui.AboutTab</a> extends java.awt.Component implements Serializable</h3>
+<ul class="blockList">
+<li class="blockList">
+<h3>Serialized Fields</h3>
+<ul class="blockList">
+<li class="blockList">
+<h4>localizationManager</h4>
+<pre><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a> localizationManager</pre>
+</li>
+<li class="blockList">
+<h4>miscButtonDimension</h4>
+<pre>java.awt.Dimension miscButtonDimension</pre>
+</li>
+<li class="blockList">
+<h4>issueIcon</h4>
+<pre>javax.swing.ImageIcon issueIcon</pre>
+</li>
+<li class="blockList">
+<h4>pastebinIcon</h4>
+<pre>javax.swing.ImageIcon pastebinIcon</pre>
+</li>
+<li class="blockList">
+<h4>prosperIcon</h4>
+<pre>javax.swing.ImageIcon prosperIcon</pre>
+</li>
+<li class="blockList">
+<h4>aboutPanel</h4>
+<pre>javax.swing.JComponent aboutPanel</pre>
+</li>
+<li class="blockList">
+<h4>constraints</h4>
+<pre>java.awt.GridBagConstraints constraints</pre>
+</li>
+<li class="blockList">
+<h4>textPane</h4>
+<pre>javax.swing.JTextPane textPane</pre>
+</li>
+<li class="blockList">
+<h4>attributeSet</h4>
+<pre>javax.swing.text.SimpleAttributeSet attributeSet</pre>
+</li>
+<li class="blockList">
+<h4>document</h4>
+<pre>javax.swing.text.StyledDocument document</pre>
+</li>
+<li class="blockList">
+<h4>buttonCreatePasteBin</h4>
+<pre>javax.swing.JButton buttonCreatePasteBin</pre>
+</li>
+<li class="blockList">
+<h4>buttonOpenIssue</h4>
+<pre>javax.swing.JButton buttonOpenIssue</pre>
+</li>
+<li class="blockListLast">
+<h4>buttonDiscord</h4>
+<pre>javax.swing.JButton buttonDiscord</pre>
+</li>
+</ul>
+</li>
+</ul>
+</li>
 <li class="blockList"><a name="de.griefed.serverpackcreator.gui.CreateGui">
 <!--   -->
 </a>
@@ -99,10 +163,34 @@
 <h4>localizationManager</h4>
 <pre><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a> localizationManager</pre>
 </li>
-<li class="blockListLast">
+<li class="blockList">
 <h4>configuration</h4>
 <pre><a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a> configuration</pre>
 </li>
+<li class="blockList">
+<h4>curseCreateModpack</h4>
+<pre><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseCreateModpack</a> curseCreateModpack</pre>
+</li>
+<li class="blockList">
+<h4>createServerPack</h4>
+<pre><a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a> createServerPack</pre>
+</li>
+<li class="blockList">
+<h4>serverPackCreatorFrame</h4>
+<pre>javax.swing.JFrame serverPackCreatorFrame</pre>
+</li>
+<li class="blockList">
+<h4>serverPackCreatorBanner</h4>
+<pre>javax.swing.JLabel serverPackCreatorBanner</pre>
+</li>
+<li class="blockList">
+<h4>secretFile</h4>
+<pre>java.io.File secretFile</pre>
+</li>
+<li class="blockListLast">
+<h4>secret</h4>
+<pre>com.typesafe.config.Config secret</pre>
+</li>
 </ul>
 </li>
 </ul>
@@ -116,6 +204,22 @@
 <h3>Serialized Fields</h3>
 <ul class="blockList">
 <li class="blockList">
+<h4>configuration</h4>
+<pre><a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a> configuration</pre>
+</li>
+<li class="blockList">
+<h4>localizationManager</h4>
+<pre><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a> localizationManager</pre>
+</li>
+<li class="blockList">
+<h4>curseCreateModpack</h4>
+<pre><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseCreateModpack</a> curseCreateModpack</pre>
+</li>
+<li class="blockList">
+<h4>createServerPack</h4>
+<pre><a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a> createServerPack</pre>
+</li>
+<li class="blockList">
 <h4>loadIcon</h4>
 <pre>javax.swing.ImageIcon loadIcon</pre>
 </li>
@@ -144,13 +248,213 @@
 <pre>java.awt.Dimension chooserDimension</pre>
 </li>
 <li class="blockList">
-<h4>configuration</h4>
-<pre><a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a> configuration</pre>
+<h4>createServerPackPanel</h4>
+<pre>javax.swing.JComponent createServerPackPanel</pre>
+</li>
+<li class="blockList">
+<h4>helpScrollPane</h4>
+<pre>javax.swing.JScrollPane helpScrollPane</pre>
+</li>
+<li class="blockList">
+<h4>constraints</h4>
+<pre>java.awt.GridBagConstraints constraints</pre>
+</li>
+<li class="blockList">
+<h4>labelModpackDir</h4>
+<pre>javax.swing.JLabel labelModpackDir</pre>
+</li>
+<li class="blockList">
+<h4>labelClientMods</h4>
+<pre>javax.swing.JLabel labelClientMods</pre>
+</li>
+<li class="blockList">
+<h4>labelCopyDirs</h4>
+<pre>javax.swing.JLabel labelCopyDirs</pre>
+</li>
+<li class="blockList">
+<h4>labelJavaPath</h4>
+<pre>javax.swing.JLabel labelJavaPath</pre>
+</li>
+<li class="blockList">
+<h4>labelMinecraftVersion</h4>
+<pre>javax.swing.JLabel labelMinecraftVersion</pre>
+</li>
+<li class="blockList">
+<h4>labelModloader</h4>
+<pre>javax.swing.JLabel labelModloader</pre>
+</li>
+<li class="blockList">
+<h4>labelModloaderVersion</h4>
+<pre>javax.swing.JLabel labelModloaderVersion</pre>
+</li>
+<li class="blockList">
+<h4>labelGenerateServerPack</h4>
+<pre>javax.swing.JLabel labelGenerateServerPack</pre>
+</li>
+<li class="blockList">
+<h4>textModpackDir</h4>
+<pre>javax.swing.JTextField textModpackDir</pre>
+</li>
+<li class="blockList">
+<h4>textClientMods</h4>
+<pre>javax.swing.JTextField textClientMods</pre>
+</li>
+<li class="blockList">
+<h4>textCopyDirs</h4>
+<pre>javax.swing.JTextField textCopyDirs</pre>
+</li>
+<li class="blockList">
+<h4>textJavaPath</h4>
+<pre>javax.swing.JTextField textJavaPath</pre>
+</li>
+<li class="blockList">
+<h4>textMinecraftVersion</h4>
+<pre>javax.swing.JTextField textMinecraftVersion</pre>
+</li>
+<li class="blockList">
+<h4>textModloader</h4>
+<pre>javax.swing.JTextField textModloader</pre>
+</li>
+<li class="blockList">
+<h4>textModloaderVersion</h4>
+<pre>javax.swing.JTextField textModloaderVersion</pre>
+</li>
+<li class="blockList">
+<h4>helpTextArea</h4>
+<pre>javax.swing.JTextArea helpTextArea</pre>
+</li>
+<li class="blockList">
+<h4>checkBoxServer</h4>
+<pre>javax.swing.JCheckBox checkBoxServer</pre>
+</li>
+<li class="blockList">
+<h4>checkBoxIcon</h4>
+<pre>javax.swing.JCheckBox checkBoxIcon</pre>
+</li>
+<li class="blockList">
+<h4>checkBoxProperties</h4>
+<pre>javax.swing.JCheckBox checkBoxProperties</pre>
+</li>
+<li class="blockList">
+<h4>checkBoxScripts</h4>
+<pre>javax.swing.JCheckBox checkBoxScripts</pre>
+</li>
+<li class="blockList">
+<h4>checkBoxZIP</h4>
+<pre>javax.swing.JCheckBox checkBoxZIP</pre>
+</li>
+<li class="blockList">
+<h4>buttonModpackDir</h4>
+<pre>javax.swing.JButton buttonModpackDir</pre>
+</li>
+<li class="blockList">
+<h4>buttonClientMods</h4>
+<pre>javax.swing.JButton buttonClientMods</pre>
+</li>
+<li class="blockList">
+<h4>buttonCopyDirs</h4>
+<pre>javax.swing.JButton buttonCopyDirs</pre>
+</li>
+<li class="blockList">
+<h4>buttonJavaPath</h4>
+<pre>javax.swing.JButton buttonJavaPath</pre>
+</li>
+<li class="blockList">
+<h4>buttonLoadConfigFromFile</h4>
+<pre>javax.swing.JButton buttonLoadConfigFromFile</pre>
+</li>
+<li class="blockList">
+<h4>buttonInfoWindow</h4>
+<pre>javax.swing.JButton buttonInfoWindow</pre>
+</li>
+<li class="blockList">
+<h4>buttonGenerateServerPack</h4>
+<pre>javax.swing.JButton buttonGenerateServerPack</pre>
+</li>
+<li class="blockList">
+<h4>modpackDirChooser</h4>
+<pre>javax.swing.JFileChooser modpackDirChooser</pre>
+</li>
+<li class="blockList">
+<h4>clientModsChooser</h4>
+<pre>javax.swing.JFileChooser clientModsChooser</pre>
+</li>
+<li class="blockList">
+<h4>copyDirsChooser</h4>
+<pre>javax.swing.JFileChooser copyDirsChooser</pre>
+</li>
+<li class="blockList">
+<h4>javaChooser</h4>
+<pre>javax.swing.JFileChooser javaChooser</pre>
+</li>
+<li class="blockListLast">
+<h4>configChooser</h4>
+<pre>javax.swing.JFileChooser configChooser</pre>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="blockList"><a name="de.griefed.serverpackcreator.gui.ModloaderInstallerLogTab">
+<!--   -->
+</a>
+<h3>Class <a href="de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html" title="class in de.griefed.serverpackcreator.gui">de.griefed.serverpackcreator.gui.ModloaderInstallerLogTab</a> extends java.awt.Component implements Serializable</h3>
+<ul class="blockList">
+<li class="blockList">
+<h3>Serialized Fields</h3>
+<ul class="blockList">
+<li class="blockList">
+<h4>localizationManager</h4>
+<pre><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a> localizationManager</pre>
+</li>
+<li class="blockList">
+<h4>modloaderInstallerLogPanel</h4>
+<pre>javax.swing.JComponent modloaderInstallerLogPanel</pre>
+</li>
+<li class="blockList">
+<h4>constraints</h4>
+<pre>java.awt.GridBagConstraints constraints</pre>
+</li>
+<li class="blockList">
+<h4>textArea</h4>
+<pre>javax.swing.JTextArea textArea</pre>
 </li>
 <li class="blockListLast">
+<h4>scrollPane</h4>
+<pre>javax.swing.JScrollPane scrollPane</pre>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="blockList"><a name="de.griefed.serverpackcreator.gui.ServerPackCreatorLogTab">
+<!--   -->
+</a>
+<h3>Class <a href="de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html" title="class in de.griefed.serverpackcreator.gui">de.griefed.serverpackcreator.gui.ServerPackCreatorLogTab</a> extends java.awt.Component implements Serializable</h3>
+<ul class="blockList">
+<li class="blockList">
+<h3>Serialized Fields</h3>
+<ul class="blockList">
+<li class="blockList">
 <h4>localizationManager</h4>
 <pre><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a> localizationManager</pre>
 </li>
+<li class="blockList">
+<h4>serverPackCreatorLogPanel</h4>
+<pre>javax.swing.JComponent serverPackCreatorLogPanel</pre>
+</li>
+<li class="blockList">
+<h4>constraints</h4>
+<pre>java.awt.GridBagConstraints constraints</pre>
+</li>
+<li class="blockList">
+<h4>textArea</h4>
+<pre>javax.swing.JTextArea textArea</pre>
+</li>
+<li class="blockListLast">
+<h4>scrollPane</h4>
+<pre>javax.swing.JScrollPane scrollPane</pre>
+</li>
 </ul>
 </li>
 </ul>
-- 
GitLab


From 1f2e28dd3371ddf96a7fbf81c01ea4e9dcb24e7f Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Sun, 2 May 2021 14:05:15 +0200
Subject: [PATCH 45/91] refactor(DI): Add check whether user is satisfied with
 modpack directory and list directories in modpack directory when asked to
 specify copy directories

---
 .../serverpackcreator/Configuration.java      | 24 +++++++++++++++----
 .../resources/lang/lang_de_de.properties      |  2 ++
 .../resources/lang/lang_en_us.properties      |  2 ++
 .../resources/lang/lang_uk_ua.properties      |  2 ++
 4 files changed, 25 insertions(+), 5 deletions(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/Configuration.java b/src/main/java/de/griefed/serverpackcreator/Configuration.java
index 2e56f6b92..9d9820316 100644
--- a/src/main/java/de/griefed/serverpackcreator/Configuration.java
+++ b/src/main/java/de/griefed/serverpackcreator/Configuration.java
@@ -1557,9 +1557,17 @@ public class Configuration {
             appLogger.info(localizationManager.getLocalizedString("clisetup.log.info.modpack.example"));
 
             do {
-                System.out.print(localizationManager.getLocalizedString("clisetup.log.info.modpack.cli"));
-                tmpModpackDir = reader.nextLine();
-            } while (!checkModpackDir(tmpModpackDir));
+
+                do {
+                    System.out.print(localizationManager.getLocalizedString("clisetup.log.info.modpack.cli"));
+                    tmpModpackDir = reader.nextLine();
+                } while (!checkModpackDir(tmpModpackDir));
+
+                appLogger.info(String.format(localizationManager.getLocalizedString("clisetup.log.info.checkreturn"), tmpModpackDir));
+                appLogger.info(localizationManager.getLocalizedString("clisetup.log.info.modpack.checkreturninfo"));
+                System.out.print(localizationManager.getLocalizedString("clisetup.log.info.answer"));
+
+            } while (!readBoolean());
 
             modpackDir = tmpModpackDir.replace("\\", "/");
             appLogger.info(String.format(localizationManager.getLocalizedString("clisetup.log.info.checkreturn"), modpackDir));
@@ -1570,8 +1578,7 @@ public class Configuration {
             do {
                 clientMods.addAll(readStringArray());
                 appLogger.info(String.format(localizationManager.getLocalizedString("clisetup.log.info.checkreturn"), clientMods));
-                appLogger.info(localizationManager.getLocalizedString("clisetup.log.info.clientmods.checkreturninfo"));
-                System.out.print(localizationManager.getLocalizedString("clisetup.log.info.answer"));
+
                 if (clientMods.isEmpty()) {
                     clientMods = getFallbackModsList();
                     appLogger.warn(localizationManager.getLocalizedString("configcheck.log.warn.checkconfig.clientmods"));
@@ -1580,6 +1587,10 @@ public class Configuration {
                         appLogger.warn(String.format("    %s", clientMods.get(i))); }
                     //TODO: @Griefed Test whether this works
                 }
+
+                appLogger.info(localizationManager.getLocalizedString("clisetup.log.info.clientmods.checkreturninfo"));
+                System.out.print(localizationManager.getLocalizedString("clisetup.log.info.answer"));
+
             } while (!readBoolean());
             appLogger.info(String.format(localizationManager.getLocalizedString("clisetup.log.info.checkreturn"), clientMods));
             tmpClientMods = new String[clientMods.size()];
@@ -1588,6 +1599,9 @@ public class Configuration {
 
 //---------------------------------------------------------------------------DIRECTORIES TO COPY TO SERVER PACK---------
             appLogger.info(localizationManager.getLocalizedString("clisetup.log.info.copydirs.enter"));
+            File directories = new File(modpackDir);
+            List<String> dirList = Arrays.asList(Objects.requireNonNull(directories.list((current, name) -> new File(current, name).isDirectory())));
+            appLogger.info(String.format(localizationManager.getLocalizedString("clisetup.log.info.copydirs.dirsinmodpack"), dirList.toString().replace("[","").replace("]","")));
             do {
                 do {
                     copyDirs.clear();
diff --git a/src/main/resources/de/griefed/resources/lang/lang_de_de.properties b/src/main/resources/de/griefed/resources/lang/lang_de_de.properties
index 6dfd2575c..b47910450 100644
--- a/src/main/resources/de/griefed/resources/lang/lang_de_de.properties
+++ b/src/main/resources/de/griefed/resources/lang/lang_de_de.properties
@@ -215,11 +215,13 @@ clisetup.log.info.start=You started ServerPackCreator with the "%s" argument. St
 clisetup.log.info.modpack.enter=Please enter your modpack path. This path can be relative to ServerPackCreator, or absolute.
 clisetup.log.info.modpack.example=Example: "./Some Modpack" or "C:/Minecraft/Some Modpack"
 clisetup.log.info.modpack.cli=Path to modpack directory:
+clisetup.log.info.modpack.checkreturninfo=If you are satisfied with this setting, enter ture. If not, enter false to restart modpack directory configuration.
 clisetup.log.info.clientmods.enter=Enter filenames of clientside-only mods, one per line. When you are done, simply press enter with empty input.
 clisetup.log.info.checkreturn=You entered: %s
 clisetup.log.info.clientmods.checkreturninfo=If you are satisfied with these values, enter true. If not, enter false to restart clientmod configuration.
 clisetup.log.info.answer=Answer:
 clisetup.log.info.copydirs.enter=Which directories should be copied to the server pack? These are folder names inside your modpack directory.
+clisetup.log.info.copydirs.dirsinmodpack=The modpack directory you specified contains the following directories: %s
 clisetup.log.info.copydirs.specify=Specify your directories you want to be copied:
 clisetup.log.info.copydirs.checkreturninfo=If you are satisfied with these values, enter true. If not, enter false to restart clientmod configuration.
 clisetup.log.info.server.enter=Do you want ServerPackCreator to install the modloader server for your server pack? Must be true or false.
diff --git a/src/main/resources/de/griefed/resources/lang/lang_en_us.properties b/src/main/resources/de/griefed/resources/lang/lang_en_us.properties
index 9583239cb..0a9c2c330 100644
--- a/src/main/resources/de/griefed/resources/lang/lang_en_us.properties
+++ b/src/main/resources/de/griefed/resources/lang/lang_en_us.properties
@@ -215,11 +215,13 @@ clisetup.log.info.start=You started ServerPackCreator with the "%s" argument. St
 clisetup.log.info.modpack.enter=Please enter your modpack path. This path can be relative to ServerPackCreator, or absolute.
 clisetup.log.info.modpack.example=Example: "./Some Modpack" or "C:/Minecraft/Some Modpack"
 clisetup.log.info.modpack.cli=Path to modpack directory:
+clisetup.log.info.modpack.checkreturninfo=If you are satisfied with this setting, enter ture. If not, enter false to restart modpack directory configuration.
 clisetup.log.info.clientmods.enter=Enter filenames of clientside-only mods, one per line. When you are done, simply press enter with empty input.
 clisetup.log.info.checkreturn=You entered: %s
 clisetup.log.info.clientmods.checkreturninfo=If you are satisfied with these values, enter true. If not, enter false to restart clientmod configuration.
 clisetup.log.info.answer=Answer:
 clisetup.log.info.copydirs.enter=Which directories should be copied to the server pack? These are folder names inside your modpack directory.
+clisetup.log.info.copydirs.dirsinmodpack=The modpack directory you specified contains the following directories: %s
 clisetup.log.info.copydirs.specify=Specify your directories you want to be copied:
 clisetup.log.info.copydirs.checkreturninfo=If you are satisfied with these values, enter true. If not, enter false to restart clientmod configuration.
 clisetup.log.info.server.enter=Do you want ServerPackCreator to install the modloader server for your server pack? Must be true or false.
diff --git a/src/main/resources/de/griefed/resources/lang/lang_uk_ua.properties b/src/main/resources/de/griefed/resources/lang/lang_uk_ua.properties
index 7b26ef92f..10989a2ed 100644
--- a/src/main/resources/de/griefed/resources/lang/lang_uk_ua.properties
+++ b/src/main/resources/de/griefed/resources/lang/lang_uk_ua.properties
@@ -215,11 +215,13 @@ clisetup.log.info.start=You started ServerPackCreator with the "%s" argument. St
 clisetup.log.info.modpack.enter=Please enter your modpack path. This path can be relative to ServerPackCreator, or absolute.
 clisetup.log.info.modpack.example=Example: "./Some Modpack" or "C:/Minecraft/Some Modpack"
 clisetup.log.info.modpack.cli=Path to modpack directory:
+clisetup.log.info.modpack.checkreturninfo=If you are satisfied with this setting, enter ture. If not, enter false to restart modpack directory configuration.
 clisetup.log.info.clientmods.enter=Enter filenames of clientside-only mods, one per line. When you are done, simply press enter with empty input.
 clisetup.log.info.checkreturn=You entered: %s
 clisetup.log.info.clientmods.checkreturninfo=If you are satisfied with these values, enter true. If not, enter false to restart clientmod configuration.
 clisetup.log.info.answer=Answer:
 clisetup.log.info.copydirs.enter=Which directories should be copied to the server pack? These are folder names inside your modpack directory.
+clisetup.log.info.copydirs.dirsinmodpack=The modpack directory you specified contains the following directories: %s
 clisetup.log.info.copydirs.specify=Specify your directories you want to be copied:
 clisetup.log.info.copydirs.checkreturninfo=If you are satisfied with these values, enter true. If not, enter false to restart clientmod configuration.
 clisetup.log.info.server.enter=Do you want ServerPackCreator to install the modloader server for your server pack? Must be true or false.
-- 
GitLab


From 78dedeb93b39df0515d6726adbe215508a178bfe Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Sun, 2 May 2021 14:05:52 +0200
Subject: [PATCH 46/91] refactor(DI): Remove no longer needed TODO

---
 src/main/java/de/griefed/serverpackcreator/Configuration.java | 1 -
 1 file changed, 1 deletion(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/Configuration.java b/src/main/java/de/griefed/serverpackcreator/Configuration.java
index 9d9820316..eb5421cc9 100644
--- a/src/main/java/de/griefed/serverpackcreator/Configuration.java
+++ b/src/main/java/de/griefed/serverpackcreator/Configuration.java
@@ -1585,7 +1585,6 @@ public class Configuration {
 
                     for (int i = 0; i < clientMods.size(); i++) {
                         appLogger.warn(String.format("    %s", clientMods.get(i))); }
-                    //TODO: @Griefed Test whether this works
                 }
 
                 appLogger.info(localizationManager.getLocalizedString("clisetup.log.info.clientmods.checkreturninfo"));
-- 
GitLab


From 53cca064002d67356e16d598b153fe6c17474d1b Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Mon, 3 May 2021 13:27:37 +0200
Subject: [PATCH 47/91] refactor(DI): Implement HasteBin wrapper and change
 button functionality to create pastes of configuration and
 serverpackcreator.log files

---
 build.gradle                                  |   1 +
 img/pastebin.png                              | Bin 22072 -> 0 bytes
 img/pastebin.xcf                              | Bin 11765 -> 0 bytes
 .../serverpackcreator/gui/AboutTab.java       | 167 ++++++++++++++++--
 .../serverpackcreator/gui/CreateGui.java      |  18 +-
 .../gui/CreateServerPackTab.java              |   9 +-
 .../de/griefed/resources/gui/hastebin.png     | Bin 0 -> 16102 bytes
 .../de/griefed/resources/gui/pastebin.png     | Bin 22072 -> 0 bytes
 .../resources/lang/lang_de_de.properties      |  13 +-
 .../resources/lang/lang_en_us.properties      |  13 +-
 .../resources/lang/lang_uk_ua.properties      |  13 +-
 11 files changed, 213 insertions(+), 21 deletions(-)
 delete mode 100644 img/pastebin.png
 delete mode 100644 img/pastebin.xcf
 create mode 100644 src/main/resources/de/griefed/resources/gui/hastebin.png
 delete mode 100644 src/main/resources/de/griefed/resources/gui/pastebin.png

diff --git a/build.gradle b/build.gradle
index c68708e46..78b4104bd 100644
--- a/build.gradle
+++ b/build.gradle
@@ -85,6 +85,7 @@ javadoc {
     options.memberLevel = JavadocMemberLevel.PRIVATE
     classpath = sourceSets.main.runtimeClasspath
 }
+
 java {
     withSourcesJar()
     withJavadocJar()
diff --git a/img/pastebin.png b/img/pastebin.png
deleted file mode 100644
index c013b4038789fd3e273362c964b4517eafb275da..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 22072
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
Wu&_>9kAgJ-0000<MNUMnLSTYu=E9-?

diff --git a/img/pastebin.xcf b/img/pastebin.xcf
deleted file mode 100644
index 506efb66929744e72beca172b02ca2507ba7aa93..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 11765
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

diff --git a/src/main/java/de/griefed/serverpackcreator/gui/AboutTab.java b/src/main/java/de/griefed/serverpackcreator/gui/AboutTab.java
index 7d06ef495..84dc6a337 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/AboutTab.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/AboutTab.java
@@ -20,14 +20,19 @@
 package de.griefed.serverpackcreator.gui;
 
 import de.griefed.serverpackcreator.i18n.LocalizationManager;
+import org.apache.commons.io.FileUtils;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
+import javax.net.ssl.HttpsURLConnection;
 import javax.swing.*;
 import javax.swing.text.*;
 import java.awt.*;
-import java.io.IOException;
-import java.net.URI;
+import java.awt.datatransfer.Clipboard;
+import java.awt.datatransfer.StringSelection;
+import java.io.*;
+import java.net.*;
+import java.nio.charset.StandardCharsets;
 import java.util.Objects;
 
 /**
@@ -56,19 +61,41 @@ public class AboutTab extends Component {
     }
 
     private final Dimension miscButtonDimension = new Dimension(50,50);
+
     private final ImageIcon issueIcon           = new ImageIcon(Objects.requireNonNull(CreateGui.class.getResource("/de/griefed/resources/gui/issue.png")));
-    private final ImageIcon pastebinIcon        = new ImageIcon(Objects.requireNonNull(CreateGui.class.getResource("/de/griefed/resources/gui/pastebin.png")));
+    private final ImageIcon hastebinIcon        = new ImageIcon(Objects.requireNonNull(CreateGui.class.getResource("/de/griefed/resources/gui/hastebin.png")));
     private final ImageIcon prosperIcon         = new ImageIcon(Objects.requireNonNull(CreateGui.class.getResource("/de/griefed/resources/gui/prosper.png")));
 
     private JComponent aboutPanel;
+
     private GridBagConstraints constraints;
+
     private JTextPane textPane;
+
     private SimpleAttributeSet attributeSet;
+
     private StyledDocument document;
+
     private JButton buttonCreatePasteBin;
     private JButton buttonOpenIssue;
     private JButton buttonDiscord;
 
+    private JTextArea textArea;
+
+    private String configURL;
+    private String spclogURL;
+    private String textAreaContent;
+
+    private StringSelection stringSelection;
+
+    private Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
+
+    private final File serverPackCreatorConf = new File("serverpackcreator.conf");
+    private final File serverPackCreatorLog = new File("logs/serverpackcreator.log");
+
+    private String[] options;
+    private int userResponse;
+
     /**
      * Create the tab for the About-page of ServerpackCreator. This tab displays the about text, the list of contributors
      * to ServerPackCreator and offers three buttons to the user. Left to right: Open PasteBin in the user's browser to
@@ -129,21 +156,65 @@ public class AboutTab extends Component {
         constraints.ipady = 40;
         constraints.gridwidth = 1;
 
-        //Button to upload log file to pastebin
+        //Button to upload log file to hastebin
         buttonCreatePasteBin = new JButton();
-        buttonCreatePasteBin.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.about.pastebin"));
-        buttonCreatePasteBin.setIcon(pastebinIcon);
+        buttonCreatePasteBin.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.about.hastebin"));
+        buttonCreatePasteBin.setIcon(hastebinIcon);
         buttonCreatePasteBin.setPreferredSize(miscButtonDimension);
         buttonCreatePasteBin.addActionListener(e -> {
 
-            try {
-                if (Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)) {
-                    Desktop.getDesktop().browse(URI.create("https://pastebin.com"));
-                }
-            } catch (IOException ex) {
-                appLogger.error(localizationManager.getLocalizedString("about.log.error.browser"), ex);
-            }
+            textArea = new JTextArea();
+            textArea.setOpaque(false);
+            configURL = createHasteBinFromFile(serverPackCreatorConf);
+            spclogURL = createHasteBinFromFile(serverPackCreatorLog);
+            textAreaContent = String.format(
+                    "%s\n%s\n" +
+                    "%s\n%s\n",
+                    localizationManager.getLocalizedString("createserverpack.gui.about.hastebin.conf"),
+                    configURL,
+                    localizationManager.getLocalizedString("createserverpack.gui.about.hastebin.spclog"),
+                    spclogURL
+            );
+
+            textArea.setText(textAreaContent);
 
+            options = new String[] {
+                    localizationManager.getLocalizedString("createserverpack.gui.about.hastebin.dialog.yes"),
+                    localizationManager.getLocalizedString("createserverpack.gui.about.hastebin.dialog.no"),
+                    localizationManager.getLocalizedString("createserverpack.gui.about.hastebin.dialog.clipboard"),
+            };
+
+            userResponse = JOptionPane.showOptionDialog(
+                    aboutPanel,
+                    textArea,
+                    localizationManager.getLocalizedString("createserverpack.gui.about.hastebin.dialog"),
+                    JOptionPane.DEFAULT_OPTION,
+                    JOptionPane.INFORMATION_MESSAGE,
+                    hastebinIcon,
+                    options,
+                    options[0]
+            );
+
+            switch (userResponse) {
+                case 0:
+                    try {
+                        if (Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)) {
+
+                            Desktop.getDesktop().browse(URI.create(configURL));
+                            Desktop.getDesktop().browse(URI.create(spclogURL));
+                        }
+                    } catch (IOException ex) {
+                        appLogger.error(localizationManager.getLocalizedString("about.log.error.browser"), ex);
+                    }
+                    break;
+                case 2:
+                    stringSelection = new StringSelection(textAreaContent);
+                    clipboard.setContents(stringSelection, null);
+                    break;
+                default:
+
+                    break;
+            }
         });
         constraints.gridx = 0;
         constraints.gridy = 2;
@@ -192,4 +263,74 @@ public class AboutTab extends Component {
         return aboutPanel;
     }
 
+    /**
+     * Create a HasteBin post from a given text file. The text file provided is read into a string and then passed onto
+     * <a href="https://haste.zneix.eu">Haste zneix</a> which creates a HasteBin post out of the passed String and
+     * returns the URL to the newly created post.<br>
+     * Created with the help of <a href="https://github.com/kaimu-kun/hastebin.java">kaimu-kun's hastebin.java (MIT License)</a>
+     * and edited to use HasteBin fork <a href="https://github.com/zneix/haste-server">zneix/haste-server</a>. My fork
+     * of kaimu-kun's hastebin.java is available at <a href="https://github.com/Griefed/hastebin.java">Griefed/hastebin.java</a>.
+     * @param textFile The file which will be read into a String of which then to create a HasteBin post of.
+     * @return String. Returns a String containing the URL to the newly created HasteBin post.
+     */
+    private String createHasteBinFromFile(File textFile) {
+        String text = null;
+        String requestURL = "https://haste.zneix.eu/documents";
+        String response = null;
+
+        int postDataLength;
+
+        URL url = null;
+
+        HttpsURLConnection conn = null;
+
+        byte[] postData;
+
+        DataOutputStream dataOutputStream;
+
+        BufferedReader bufferedReader;
+
+        try { url = new URL(requestURL); }
+        catch (IOException ex) {appLogger.error(localizationManager.getLocalizedString("createserverpack.log.error.abouttab.hastebin.request"), ex);}
+
+        try { text = FileUtils.readFileToString(textFile, "UTF-8"); }
+        catch (IOException ex) { appLogger.error(localizationManager.getLocalizedString("createserverpack.log.error.abouttab.hastebin.readfile"),ex); }
+
+        postData = Objects.requireNonNull(text).getBytes(StandardCharsets.UTF_8);
+        postDataLength = postData.length;
+
+        try { conn = (HttpsURLConnection) Objects.requireNonNull(url).openConnection(); }
+        catch (IOException ex) {appLogger.error(localizationManager.getLocalizedString("createserverpack.log.error.abouttab.hastebin.connection"), ex);}
+
+        Objects.requireNonNull(conn).setDoOutput(true);
+        conn.setInstanceFollowRedirects(false);
+
+        try { conn.setRequestMethod("POST"); }
+        catch (ProtocolException ex) {appLogger.error(localizationManager.getLocalizedString("createserverpack.log.error.abouttab.hastebin.method"), ex);}
+
+        conn.setRequestProperty("User-Agent", "HasteBin-Creator for ServerPackCreator");
+        conn.setRequestProperty("Content-Length", Integer.toString(postDataLength));
+        conn.setUseCaches(false);
+
+        try {
+            dataOutputStream = new DataOutputStream(conn.getOutputStream());
+            dataOutputStream.write(postData);
+            bufferedReader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
+            response = bufferedReader.readLine();
+        } catch (IOException ex) {
+            appLogger.error(localizationManager.getLocalizedString("createserverpack.log.error.abouttab.hastebin.response"), ex);
+        }
+
+        if (Objects.requireNonNull(response).contains("\"key\"")) {
+            response = "https://haste.zneix.eu/" + response.substring(response.indexOf(":") + 2, response.length() - 2);
+        }
+
+        if (response.contains("https://haste.zneix.eu")) {
+            return response;
+        } else {
+            return localizationManager.getLocalizedString("createserverpack.log.error.abouttab.hastebin.response");
+        }
+
+    }
+
 }
\ No newline at end of file
diff --git a/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java b/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java
index 8b0802f09..0da4b63a1 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java
@@ -57,6 +57,11 @@ public class CreateGui extends JPanel {
     private CurseCreateModpack curseCreateModpack;
     private CreateServerPack createServerPack;
 
+    private CreateServerPackTab createServerPackTab;
+    private ServerPackCreatorLogTab serverPackCreatorLogTab;
+    private ModloaderInstallerLogTab modloaderInstallerLogTab;
+    private AboutTab aboutTab;
+
     /**
      * <strong>Constructor</strong><p>
      * Used for Dependency Injection.<p>
@@ -99,12 +104,17 @@ public class CreateGui extends JPanel {
             this.createServerPack = injectedCreateServerPack;
         }
 
+        createServerPackTab = new CreateServerPackTab(localizationManager, configuration, curseCreateModpack, createServerPack);
+        serverPackCreatorLogTab = new ServerPackCreatorLogTab(localizationManager);
+        modloaderInstallerLogTab = new ModloaderInstallerLogTab(localizationManager);
+        aboutTab = new AboutTab(localizationManager);
+
         JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
 
         tabbedPane.addTab(
                 localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.createserverpack.title"),
                 null,
-                new CreateServerPackTab(localizationManager, configuration, curseCreateModpack, createServerPack).createServerPackTab(),
+                createServerPackTab.createServerPackTab(),
                 localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.createserverpack.tip"));
 
         tabbedPane.setMnemonicAt(0, KeyEvent.VK_1);
@@ -112,7 +122,7 @@ public class CreateGui extends JPanel {
         tabbedPane.addTab(
                 localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.serverpackcreatorlog.title"),
                 null,
-                new ServerPackCreatorLogTab(localizationManager).serverPackCreatorLogTab(),
+                serverPackCreatorLogTab.serverPackCreatorLogTab(),
                 localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.serverpackcreatorlog.tip"));
 
         tabbedPane.setMnemonicAt(1, KeyEvent.VK_2);
@@ -120,7 +130,7 @@ public class CreateGui extends JPanel {
         tabbedPane.addTab(
                 localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.modloaderinstallerlog.title"),
                 null,
-                new ModloaderInstallerLogTab(localizationManager).modloaderInstallerLogTab(),
+                modloaderInstallerLogTab.modloaderInstallerLogTab(),
                 localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.modloaderinstallerlog.tip"));
 
         tabbedPane.setMnemonicAt(2, KeyEvent.VK_3);
@@ -128,7 +138,7 @@ public class CreateGui extends JPanel {
         tabbedPane.addTab(
                 localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.about.title"),
                 null,
-                new AboutTab(localizationManager).aboutTab(),
+                aboutTab.aboutTab(),
                 localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.about.tip"));
 
         tabbedPane.setMnemonicAt(3, KeyEvent.VK_4);
diff --git a/src/main/java/de/griefed/serverpackcreator/gui/CreateServerPackTab.java b/src/main/java/de/griefed/serverpackcreator/gui/CreateServerPackTab.java
index 773d71310..7d58029f3 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/CreateServerPackTab.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/CreateServerPackTab.java
@@ -587,6 +587,7 @@ public class CreateServerPackTab extends Component {
                     localizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.copyicon"),
                     localizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.createzip")
             ));
+
             helpTextArea.setEditable(false);
             helpTextArea.setOpaque(false);
 
@@ -611,7 +612,13 @@ public class CreateServerPackTab extends Component {
                         }
                     });
 
-            JOptionPane.showMessageDialog(new JFrame(), helpScrollPane, localizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.title"), JOptionPane.INFORMATION_MESSAGE, helpIcon);
+            JOptionPane.showMessageDialog(
+                    createServerPackPanel,
+                    helpScrollPane,
+                    localizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.title"),
+                    JOptionPane.INFORMATION_MESSAGE,
+                    helpIcon
+            );
 
         });
         constraints.anchor = GridBagConstraints.CENTER;
diff --git a/src/main/resources/de/griefed/resources/gui/hastebin.png b/src/main/resources/de/griefed/resources/gui/hastebin.png
new file mode 100644
index 0000000000000000000000000000000000000000..8e15ebae11f4f9ee8fa13eed96f0547d874345be
GIT binary patch
literal 16102
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
V4y^UwZ%<tSvXV*?)nZ0L{|A?G0zUu%

literal 0
HcmV?d00001

diff --git a/src/main/resources/de/griefed/resources/gui/pastebin.png b/src/main/resources/de/griefed/resources/gui/pastebin.png
deleted file mode 100644
index c013b4038789fd3e273362c964b4517eafb275da..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 22072
zcmeFYWmH_v(l$J}yGw9)x8Uw>K>`B|?k>R{f@^SsyE_C83GVLh?*5Yd+~+*!tndBv
zto6PB&aAa(_U^8_s_N?MUfnY_;mV3qNbvaZ0000<Mp|6;{ZshQ1q=QDUTWd63INci
zda7$Xs{-9f>>ce)Ev!K#&K~w45|F!vDFEQUSdn4ly4^gQ|7L~d2KW8GgU~07{bTCR
z7)H*dtA<vG_t<b^+ljLdtqLS+7(hh-$oH+v`(;n)&B0A^1D-WSU9I&2$Ff*yOQL10
z({^p;!*SaS!ddqHOUhkUl@NdX&cnf2)s4rRLHn51-RtMI$mX$&Yz*(u&HZKfFQK!m
zcTZJkcXvTb4=>_pu<akUe(XK@--*9^NL?d)x0A~@Y#Z3xMBfc=c$a;7BmUx}D$fM-
zBXn<+SL1Wa9`d(`4E%i}r3Q?j?70SZUwqyOA6W{`JofB<2nlAWc)px{*)m&iyV}_l
z-lOk?JbQS(H^=ZbmJR8WKJv<S^;Os%YkA1Z>wJE)vpsUba0+BD^Ui$Ye!KU)N%z{m
z{c$$-v_>s!Amqz>wC9cE>$T>qzxx0Z-+3Aw8$(OFPc%4v2-UdD0-b?i4040}1d8qo
z1)Gejc&e=$kB!5thTr1m7Jkqf?AYFQx$L^2kd<D^xu9^ZGBqEhE!i%NZ9t15j(M^P
zWt$ngbZAvec!#8n1pZ)Z%KrLL#GLB0PM_73T~))=X4^1?q;>vuz;o%4F?<nTRduw-
z{KjnX#xt=Rfwy;h$*J}ANClG(@sr{jFMMG0%P1{&hjqltocP-_b+0D_u1y*O_x!1k
z;zZulEhF<s`bTnu4GD&nJumRWFe@qOEq?6ggsTb4@pF$_r(xr6!KgS4KP9(0d!~Lf
zw!u(yIowd1^~En#A3xrPk9iPW_n}TuXR{(*gx83MH7g<S^n~hMv-aVt4cGMH>t4#B
zC95h1Y$SUl^X?`(F}3V!eu1M*R(GT=NY>0gWH#i}+^k8~v9i*uci8POB9N+|%|7+o
zuPMs%I%sI}fBMR@DNP>3c4&U}?KKVZQl5Q`?Z|qFQO_b6OH0QiNkeO?dGYq+ar4w@
z+i~ks%FO4oSIdSq#ycV1kq%9-Vdd9N-Pc-tyS-=LV2lj$1;j{!ZiyXc20t;O+68?*
z*cgVn@U+NwG4;Ms6-hiZzE6k<Av;;kD=8;G81JOo^mCsL7ET^k98=`)-g^JMr|-O4
zGzn?j(BUE0rAlmo5<I<nVjwgvlq_WPd|z9**wdT#kbg0d-{G!&y}vot8k{-%VRrKD
zu?A<q>9=CMNTJqgwm5Xr;Z*lChE=fWcOa0G+gpEls(rS6Yha`z^-A8SD3k#BrR6pg
z$1Pw6`YdMpa5&Yvuhq&_uVuD|$Ji6S&Xp3d9MeLL!Sc;-=RUPeUefkseJO?RrXKy?
z`bw|;7GdPqE(862pyFtoeoLc1Eu!L&t7+}Q$-56)H_I^W)mjEa4{__NU}tC<C?D7#
zhrOVx=H?Ek-1;|KeQZ9lD%XB?BDVrRamsf>()YjHvdr+B-_bcddrEm7FYDc$=$~?B
zUWWb=cd^<BBz=m)m=7kp<J8fA{z66{Qgv45WInfUIrT9zCA~@RC)Tga&gc@Z(^e<(
z<p-bU1D~5g<>m)$&(fs6Pg7OwGoIOu1IKO1%VaQ_6qOTAQCU2Az$Uqa=yq+dGkRe4
zg6GlILGJ0PYvv{EtD9FU!F|JAG~*VCurv9S^|pA}*U4QX?_<_6EP+omoT9<Su6@4i
z%OsFjN0E{;>W5TjuHJEO7na%I$a6{^jK|DZw+MW!@9e`ru^wmMQ3TjY`A~h?8Iao#
zAa%R8TR-k&-e`HHY<)dXpbc~$@aNtd&OA4TuJUFMo;&4=sia&tDH1j`qW&JV&!ZB*
zcj$KH;DLK)8BQ_VayLU_&$yEEt<H%>jYrI?5+ph~G==rUq6v=`C2VRo#PnYCwlCQ7
zmNf*hzI`%@KX-ay;UxOoK9!om2%M0TD*Sm~_V^+zbBqqRowr{e(ad)3#Z?<JHH(y)
zjnN^79T^-)*b}o>0=EBLrkn{HQ%?2XXjB#34>Oy4vXAl-uEHa@Wv*RmS$w#4WXc#q
z6^lrsQt(8;Q7}tB>`HFu=30T2fC2dtYIzTCT**m2q~Uj$m3h2bT{H4M3nX&wJo&`j
z;gP~?%FySNvAKpo-{<btS*bzWV49(b+RGM8s#zV-U=!J`(+q4k`D=Je(b^a!dsb#0
z1hO}bJ4Erg3^YoDOg-Xqm&5MS1?NtB7bDg=slz$gGGk&oamgI3Xn-I(Y6}vJ3w1ky
z_-KXtGkEbmToX-@9%O<p7`gjdDz(UUxy_8o;xes}cl3hnyvFbSfz}V9;esqB+tJM*
zyL?@izqohvK<Kk$&;15LcD+!61@PM}5L`1Q8=9W7ue0O>QNx^7%;@Ik@9R(|f>Sju
zM?cH_c-b)<7GN0n0Ins@L9bD{>ZPpY#Y=8F`|@r60viT{`<7u$bjm4y3XDCFYR0Ga
zaYm*@Ffq4?_;9tGr6{-}%I=6`C|-ytT03eXfdDHk0bfk7P9Xv=uWPPU2_T0i4oDe>
z7Z6T%F||&_^Hg*KpLCnLX(9AvVvb&!v1&g7e<_SF+>EcW`~g9NAVRyWqh!1ZC5M_O
zg|$4Kh<kC0+oGEhwd@)E0Fg3pa;>z!9#6tBz<VvlK9xjLgKi%ZKXFEsgYUnz(46ht
z@meeGpFYD7U<eJ3m8iKn;!BwqG)otj6^GOJGM_Syc0!3r{IhR|86APEM;g%pmC~$+
zXDc~NpKjbV_JV!VSd{!Hz9wD_p}=}Qj#kBwyRHsD3ydd+BQo&128#pX4Do)$;ugUK
z*kEsT#K1(Yot&($7@SmHGujdVnsB|}*;dE-+%zP0(Q88YXcM0X#xYXY&N31P;9S4L
z4S>Nj$BvhMhG5t52jB<R*{h($YC+!*q;V(4^4hK^r-T}<B<_ltyE=^xod)vb8<Qh2
zvtZwwkIvl-8+FIk)1|D9#Ujm~Dzkizp?)Ohw?4J1)Le&0{J2?4@;Dd)*DnnHN-QMn
znP#&txb7*h6(UjZL9f<Ov$3sa8oX_4{#J8-H&$#o-Evi_vFGDj+qZZ0bEk-*uiD6N
zVlwYdHs<J~fUR6C!BG6E--AdkB7!Ia=b1$hDN4zHsQU1SEgwUwg-{hD3wsq{??SP2
zzb_V5(228W@!(V_IdT=vq!63C;RPJol^xu#vIi>7sC%-A>*_ihOYJrBaB-3;j|qTi
z5V<1<RgO?wiUk2)s3kv?g~>K3@q?y9ANx9&@SQ*wDkCtCkI8R7TMtjJ(SoW!6+5y<
zRox?X$3E^gF?(BF<a~rYY3|3T<0ylKXfid#Y8q#_)oamaM0)^#Cx8h)FBY+HJ~%ir
z$CQLO?mqoDeDiMVhmcbwhkP^Fjyqt7JRZjf`4BEcI{wsWMBtmu%^pLuHg;7%jeBlP
zpVkB{8*7dAHu-P{wmTd;Bbs`85j`g)?qIAJE+o4q*uDux90qT2zKG3LSNN75B0MgP
z3j`60JhP+i2OQr|6KpRbL5u@J(Bk}>D)5GjW6{ROm$Vm4hs|!Z(9vJo@(AI=$nK~y
zQzN%FniFl~UZ17O<C-K!DJsP4EIFeIQKYig2MKEi1pLFXILJcJ63%LN$CqUpOX0VI
zR=-q3XlRI8lJ|u&qv9<IE#CzhbDP?M$<7svre2GrUNG!j!7um`l#79WO9sa=enjsz
zU+q{1N9+31%?^uZy$w{A9yA`mXEpae`81qG^W$3z<`woJm#B6~nSrx7EM5+QiR!#n
zfSs_fJ$RphVN3jz5tId1JIMf-)Z!O<O3Wr|^Qhl1g;TLxEfFzmX(h=-K4aJiB71hE
zqps1Jgs>l@=GK#&q0SR&vVv085BN&2UpGqSn0^x8i}{<*L4_og(20YyMVNZ)1gF`=
zm_o2XFabzW3EZVKn|o74QbCdha53^Pgk<(GcaKm5JL}8D+^m?;tobXs+n<j?a~;G_
z3U3uaFzb5nFN^MnME7WE>v5u2#2IJA8E;Uar5}09$OOGLV5wlhjX?Pgn!$w>X_hN@
z@iIh*?X%f@he)YGjPzeMFHQGHaG?;g$%7wQ-WW-vYzjXT2@n^j)du25yqQ|5FjJY&
zjGqdtLAmO%e7ELt-WZ+4J`rG_U&C=C+oA3!PKK&{K-x6cKr7Z;Qn2Tz?-I%`=#g(-
zKNDpspuqirK>+<Jh<|wvWzQsVlW_Q>z3R9y3*j`DAYBJNMe)JoX8S$UH11lJYj%ev
z%`%BROp{dxDkN1n{0?e&Mh9tzu<LJ5i+xeK^+#;sL0f3=x}hU<j$MDdc|b1V<hM`Y
z&5!e4(BnHngNfl)v@s2-q#QaXzm>5bZ1EEKw=Auj$zEGgg^2oL6rD&Heq%{?^2Q9q
zPxl}|Cq&dj-(x!Y3<e9cgQQdh?U9L%c~-{Pofg2=nW#uhADzKu8}_X8{Bl-`$FS`B
zQ1Pno;YfL>7!&1UJu@P!=T%8M&l8R)X`borolS9!f@wU}d6ub$Lz19jXMOId!++l-
z#;3Qca;d9?ud7}lTr-uP`Og=mw2I^P2hn~vRMVI@G-Bm0HWqVDA9fF-Lq3pLU4Tfk
z*<Bz0jhN^XY~$iFg!&cil;|m962HJe^59p|^QB+YWMf1C{T{b37pfpX#eLUZ>CX@i
zr0ak$YP4B?)B!L$LJ<LjQu)sC&Rj8aOwX5^&q@B=6={f@mhC>ew;P`8tSk<BD**RR
zVnHNg=?F!hnSu<~onLz0&-a)->cr|`S1QYQST+HEh!gk@OAjrN>QE5P9f_-(JPQ>b
zp(mo5CO~vyjHF-dB$_`h!t^tl>Z{Lh2HlBxtNR!)ygxBI?0#gPhqG9mWp5-SCHqXI
zy-{Z)+zjV1gq3TeP3JsgC=m@_b@oN%llV0<m|7uHsJ?oc;&Eq9s)4k;S=hc$ydVpr
z*rNWtUn(}*_TwEUoJNmINyHc<Nx*T+2k6MAyRUpvBMZBODIs#nl?YOTU`W-yx+v`I
zm%(S48()={kwZOV68v?aDVIpwXd`*T&Z&s~qv0DpynwuHc14bcwr_sCLzbc<lTcrt
zD+hy1)xJw8=0f7U{&0n4E7b~Cu3_+z%u;1S>kc_S+>+NxTEb<pc7wyk<d0N`Run=L
zJrW?p4E?Zet++_seK>U6?BJI~A8!O1ZXQ#jx(Jm<L*K>t+i9?JnR_&qENI{Wd)o|r
zfNCQLo;=y`^NXaYFnTOBRbW^{(9|*{9#QD1o4L%T7PjD!Z^5Jl?}oLHOubww|7VP!
z7rY;Kdn*p|m%#@XQ^!gG#T<lC?XQWSNd$`S!I2;_+^CdT62NDnq+7vFw~9Z|Q76yu
zBu>&@fh?a&O8mmzNwTJ)x?lsCZllBA^7EcEqrY~G!NIqNgQ2%8$`Q4np{^O`dEn$3
zQH5Va2a*KRTd=OQo|}r7meY>w$}9(;u0;r(R@}e&#exk<Z&uXl@Rlt$i?t1;v+DIZ
z9#(9!Q}B#VhxV968CyQ96xX&Fhrw>-$qtqiiTu<f2sfy1iJD2oA3#t$!uW!ZgRz;X
zId%h$xG)&c?QjK%LXM@`4*it`IivU-s>?yBDqjv`BCnoA@kwJYLPvI$^(}ZCI%u4v
zB-R0cyT%~1v)2|B>_87iW2XTjS@r>s342{<8F8UH$fy-D+!ku$Gen_{gh7K5K=U(`
zpMWKaJ`Rsd8PT^!8!BaU0*QxaDd`q)dFTW1Q74I7fAsvlG$_p=hy-HF3k@DsBxZd7
zovf}c%?elP$}_tYmUMYyIw<xrEvzrr)ix`fbY6}6sv<5q(6$x**Ql5q8clGMiW2yJ
z=^r6S4dGxBM>&~`_qhV1p}oKd^x-qhiKH`>dJsZDKBKat6e<GunwXwf=-JAviG(RZ
zU2TN-5xKxc<fJaj*a=km%UD^Xp7g>rwDyde7Y}d>3AnF6nu&Fn>`(_2^UKf|V4abg
z@Hl<H%DytiTp7ve7NJgMH0VdDJBmMVJ6jywliljB9S&-(1UebRBds?QgmhGpka8Bx
zG?&>=_Q^*ubDbx8kS)pYOk^(4;;Ud&gY$WMt+yGO@?o(Ge9J4Jgjg1rz)oaR37;#D
zCRe}2*TcaZS-`waj1=x)F@lt7K}gDAG<TpEJ33<E2~Pj2QwaYpX#%sGvhue#waBtP
z3AGQ!d08p>`qh)LUUEB07W1h{5(nrjb@rD=2ChlnCtY+5zmjXWxn+LMm1i05(|Lci
z%e+v2d(SZ&tMSrroBFsYOoPs%cP$@)mDqZXzc=>Sw%1z}!TfvY%6_G^bYR6Nm!8vi
z{n#Fc)KY`OzAGQHJ_RSaTpwR&aawY0`#xa?Rx@9908YtbCp^p}zabPWC=8!Ht#kSc
z;rU2k)w|XU3^^YIN_cY|eSw!L6S6mLZfgg3pHRs}CGOu%JiC7mTaPQI+4aU}$4JP9
zu1ik+uz4&out4N~NN6-`j$D5M?<htlCAX~Vien@NmgA_IN*oy$^o6zo`q=UUy;siA
z-rM+4$22PdGN{_}6`8lpDCJksd6-vMJoyGDP|Qppb|n7(_uRpS*Ze+tc)iAe0!Gsy
z4wV+gBg}WH*iCbaL$b>KE)Oz1YGq2A$9+RlI~O(fdW~NmDMf9+NH-#6aD&SO2q;xq
zop-n-N?61KSu5h|N6pW+ja5$~yU2C7&%noT^uZpP03K^E3b14cj-6W$f@FR3VAl>7
z8g|R$k5T~|$4Uq;;~x4@%`Vd5CO{iYZp-~e)1gwGYb$*X2Jj?$iIVx!!2?|#BU3<Q
zpnWN$f;es%n+7KBN9~@L2BTI>a>52_RL>hy$|T9j+)`EMtmclKy{@|C7wH5|Nmd^o
z+taTklWF{clTmMUW%3#~934a7M~F1b++?9#8!Mh7+}gjzf1L4J&xx17e$sRFOd{`#
zP|0g3S&c?)@6#jjB`Qr8l-$v9p;Q<yg<FaR_js5Zde%qe)0XNcz~##N;C@oxT8ht*
zkRfeQz%9&_&8B?QC?1D0qlFe{(Y^6&tgU&}W*JWmY=9GbGkSR+2dtDX5n1*n47`fp
z46&l47<+)bc3m+gXdqJ3y<7u^7i{5_ig~VFLO|VZ4qT3Zy0lwI7=tP;NQQ)(anD7&
zVo~65>GUEG7HMu6kyQ($EJH`<EF{hyF(w3XlmpV~^7g#mP}O5Wmxv+B`;n+qkVc#q
zf=kxatXq@ka>s|#{Nb{45)kxZw2D7|8mBkMZXoL*k(~t1z2tC=Mx;e&B%5>5HbRpG
zr+wO0stSu9F;ZU`9%oX>3(8)jM*I+L%5QFvAxGC-7+e^@d1$L{F5coVHyx+XNGG6u
zb9a8fnON{aS{Qu5GE_O^<~jq5a|TA)%RbH7`JUZ>@k_fKt`f9Z3-b-*{e^|}!za2H
znb|`T8eQH7@Sump;JKXw`lOQU4ee$028<gnWW6?CzjzqGaJHm$GTC@Wi4scjI@Hu*
zIr=p<Ntzr@N>?3?J2|zjX;*n6dk@*tp{2*v;`grrZws}yx@wJj3a}J!s3KI0ahXTX
zHKGEz0t0hPugLruTuPyHw|WE{<M;_mNA#uGci~V=J)|K+l(Bj&lRl)i=C{job%%AS
zl_;zE&Vp5-k5hs%uaU6t>+mqC;{aDa!!uJnd$sJVG2){dg=8N=J;qnOf{_8sA;mz0
z(p6Us@#aYQlW)|12v?q^rao;D_OYIu7%fFa=}m5dITvo>;>#t+m~7~$aGarN<y{T<
z^5{_Cie@fjP0ex#utgnYz*bdFbd`m<5Wxqa-~74;yO=Oh=D!ig1i6jbXct%zt}XVJ
zEMG@8fA`CfXg1vXXnEB$CQ7}6u2ZWKRO93}6uVH;71^I4zjT%(PN%%HRc@T=Z=sD7
z4&vMynmx+B?xav2%0?9EBzGHfIE`H{@hZDijZDU@Vvcyh3Hb0K5qifV;aO%TEbKh2
zgMxG~u#%`4>C3feIY>$Z+#kvDs7--Hqo*fQw9-qb=k!xhjqG(<mw!3Z6%+1fihwJm
z&{QO;pYdgi63xjsqO$6Bo~n_-YEQ(5!u@^q)jNWgrtt0xVKnu=RrK|-uCyax+_6+h
zwRymx30O*U&?g{&e!&qz9crG`Ri(0_$}Fn?FyuULhsMsx9FCwnD7xO2RBxU&9t+n7
zBRcr#tPaF+q#rQ6PMuaTORX|#&qaq6!T}A(qBH+MprQs6L0TjrlSUu@viEz#8QP=5
zGxNw|E7d$F=!`;C0!OjE$^VACqT`|xny!hP7C}|2eeVrMe`xdRD$f8Sci4>+!-Arr
zlfKFT5&izF!$(Ft8U(qlYb+*>;pX%fA?Ip$3PuXtK1myF8Z<6m*<#xxN?sh0I?tvf
zMF%*nes-VvRt;ZT8j^p#R7aJWzQzg3Sx@7{7{lYYhFPWdg?j#dpD%A3Yx$*98$Sh>
zJdgThG2-**tz0ZMsvq<+8ATu=OmafjgD~|>T3a%Bp{BJ~p;xxC8``PS4Rbfe1!3y#
zioV}D5Gw^#c6Z;cb5BX}w{=tFUqM~e#{)Ut?8j&c7diIoN{e*9;?tG(1qVIX-!?vy
zOjKD6B3Wt8&>B9ln9%o!ee3yF9hZh%fmfjcXNzS5JJ2+6sutbyy5#wFzrtl@K~`E&
z&R?u#z3c7<qVwji>Qt+F#J!g7yNaaJY4K-Jn(7;D=bR9Yc>)poXcEfki*W(&C8BsK
zX00C&MC+bsj=gLqmWd{dBCCLi6XjbZ$2uHjp{C7DL(+^k1(EKkB{T7oLfH=-xP1lk
zm`C*0$<d|En?}m=s#^mae1DMhhVgW5vS;B}egk6;9Qx>32>VBS5%i?J>l)|qF0s#I
znlf+Ut)2P9?ui-rE3FZUKKgk1>i%HRM`DO}bv^AHg}&NLSu#_3^T(4aW*d6Bku!=K
z>-ru1xh6d=UU3w<qp&AbD}2jQ-Bgf*>`8G)x|n5U9u94Cj0;@DpoWFzxFu8{2{+D5
z_zJ^YhdlJ!^G-V}B*6of9hVBf5y`>N+X!Tc)YbUSmEG;kGD4i8R3?4N`x?wqGnT=c
zF%(tfvLFRS)hf)$WbFFy8~65{Rz+rT-3|B^ju|1#_QR6~#XxLVm))I}2CstTs-iwA
z5Ux<<eFnA{5u<*|R#6$aqIjd98(VzymTvZk#_JKiITTF2++vaaep<rU$*kDG*{bxL
zDx>zg9y9$hc8iX0F^UpDwDwM&;Ti1|0(IpAR$G0aY0u%ObLtEc@@0=^kgJm6)C6`w
za)ClKd>GzXNviRxslQpMGYn3=FS82yuGGn;191*N2ivG+M(VS3WdxxUd2fu<?fnj|
z-N3d4WAMJJfrlSp=N)&n($RvLDv4by)n4!1AjP6~lMuR9K6IheK;^Rwb$?qRjXo{b
z>1@2*FWUJYSf3XRnCW7!YJ%Z|qA6cb#Dg^@?56zA8#AVwHJEoO7&jboHMOM|d+LXE
z5LO;>t~Q>(D>xtlb*(mcQdEgh{GC6`pR%<<Zg9++cd^Gag<f(kHF+s{ayrunU1Uls
zK(i(>wlYsJ46lL;Uje(SvWVWGl~jrBmF>oES-VS9-O+0)1&t;9lU5BS8);eb45|YA
zOd3jF4|25#77-JN`OGA15M@s24r$TIdSZrGtG;!SP$WHv0sj^6>M2YG<#r%(ih9jc
zfv~D!Y?a-^T+_2I#9XQ29^ql~ttC%(5e5fUu>m;+Y7aS1IYDlU3ME<9DnSbs3+3Xp
z4i4uH$$n-%{8jU+6)UhZVzJep{yRbDHX6eD?B{8qcX6_gx?OXvCep7M`8o!likV@4
zg`;mc@)4xx*sFLbZl|_M=qeDhxZLGAl~V+!CI;#TWrClFkPzxs)5osue=}h#eMK|*
zX+Nkt(o<GSRM?6ipq{H{hl1x`NS>sWAnrI~@j`B(Q9k_UZyH)2t_q_yn)Mvlpoc+R
z++ChqrQ1<C<jcXgF4S?e+0G6~&<elIl1l9b$I9>4^oW{?rp9JuBW==9n6NCj+<H~j
z*lZIa9wt~vZ)LXx8_-oM4U2l(G5UC2cOyD2lQb<@Nr?tNT|y&+ySc6bu5!iIAYY;w
zUkClbR8#t+WJyV0)t>#DpzHj@N{kW!!;-82JX-->a|cpRBkh+-qX`NEr+7Uy6~=Z<
z1d`ke&V?uU)clOk@6U!8RE|wTD>NV<&8duHaOI8fX6GVaniS5<KPN0+O3>4c)7A0~
z5E6E=be{UljFgWY)XSP>W!%4!oWRrRL=fhzys!gCwP)yJ6sa*rOA73*TETdffaS+^
z$Q7mA<33DZpj@uM$f6VpNqB9z+FJ^&XNgBXe#%yvs*_!QT{#U39!x<8bXK9ZU5d@u
zO4TLtSh(qi9T8El``lJgLeMi0QHC&Nj?kJM*SYM152-T`2riDVX@=(L)37oavZ_-P
zY9cLry6hhCFpeP#Zb~m4PQt|eNX|!$0T8<9H|fnot(ukO_%dUe`zr)*7A+#vje~y4
zMLK*7bl$bpS4IC?lS>_<r9o?v(91~L$@RGZt%2Cq@WTYwY2-A)3tOeEA`yjogK2Ia
z={FWX-pI62$k`xO2|AS8Se^85Z7CpO0@SeRxS}H~CnboV0oRZGE3K0Y!=grl)7*Z3
zOZw_&ueF`RIjfmm>aJL+{Ga(JG-OJf7Xy-#-OA^Ad@W{lw_1Lx@~$meQa?bH{3!2z
zy*>~YnJMrKUO7mnw&hT~p)X;94@cJlU$C(6td61i=K1}swu4+}iTNI@1kBf}vFv-t
z%OMGqJNEf-GI0YXY4GU}j`HlpW1~YN8_U5WZAkmg3OdI26M7bT%+AKlIhkUyu1NUt
zPK`z&dEXAiK*)h;t(%YXGb)MoqiePf@OTUnpV?(lkL9MHumny)Eu*18?qP{VY9kl|
z5-fEV-8yehWxUWFPuiRgh9*DcRuq?C+rhPd-`UwMmmw8qadNLHzw|>za$1tvGth;q
zuC-v#=IbN;Jt@HSCv;xh7K0JhQE|y&NNY!aV+E;kI}7hLGc}Q6n>K%Hl-RB9m$V0H
zRJugDW5QUJW^zQM2(N?ax%7ly^%dcv<Wh=*UAl7Y=QPdIsM7Niv0@82Zg*WS9<0EZ
z)xb#qXD5tg{Y3{W^P^+2)~=JBTb6iIOFSby6YKq``_5y^d(Qe%O?|=_^+oxq%a)sU
z71-D#hIZ55+X84x4rsSe==1FjKdcU^2~sJyh-UM6>v{HeC@lML*bN$IBtJ@uhZMp?
zld;p;Dm`%Q`LtHxWE+_>9!x=e8g0z3F!C)=c^rxLR`bRT+rhX$tCYLJ`mU83@N1><
zi%XjDroWgAkx%oXL`a&5_oy(3F^)jj8PSpkH`Ik<-RTu?u&gwqj#Z=1!c_mdeto9X
zJXO`9P$Vx+u!7~$s5It+#1oZG87xJ^&n94-H-6*GQZ<rf!qW^q90`f;cdYBS<e$2;
zk7ct}dCBfkx9Sy;+Hn*mdrsfXypqn{U802SKB|drw#&p&MtHeq+^*<~R0d2)NQ`3B
z^0cMy?sVBUpX2s=*j(+;nn{&P+tV)W)tj-%sgVBSNJa#c%9G7CuL7aV^u*Y+y&cdi
zIF4{x^On=f*p+qMpGEn~Gm+(@Rl6BGTjHL@NTs8bO(JXyG*GrnU@XHQkX=<8gP%B>
zv%I(^ObWTaY~wPa)WN*=weh)H#=ry_qQ2S+x!GI(TC8h$O+wr|JQIJLw5_URr{vSc
zsr0R+rinXkZJu0k61BD*3r`cd0LR>pF_r2Mmi(BS)oH?|{5`$G4#8yN@oi;XN<U5W
zWR@`$o7wRrLrPe07ZUfuTXCk;a1itU1(BRWfJ>)9)~Olu>&>rL+{Wga>-YRFacP+m
z|FJnY`+@S(R_}%3Xzkn@uE}e2Tt`ZPUf-#GWO`pp-q6bB$iQ*1V8(v9btcVSHb?(T
z`P{Y-;}UcD3o7!;A}O1h?aC}_ol8rs`}*bZTEp6^_)rDh!Lp7r6VIY@W93u*Xyi!Y
zXV~ML<w5MzY5IztVBX0>N0v0_veLB$=p0T`J@$@jV~!U&iWHyF%BVH??PFfqEGHm)
z1#9U=PJ5f73{`P6*l<a`<84*2>va7HW20Zy(8Qds_4NbalI7cvGEIc_sNv-x8*bBL
zy5!NObhsvW&`U#S$nZ)-xr0WT>~>xDoo1%_W3R%GTYx247gE1pHnKyT>xnOc>QshL
z=E<*He#Y7J&M70uady;L=QC(Uo8o$f556ZgE<Y@2eS%a5enZaUz8+Wo7=^ZC#PPMM
zd2Q*{xxD)|8${eDPBLL0X1M%ezD2%i=(5)c=W|7-_`-?;@};5qhhtwfLwDM27{$77
zTJhXU1R}hjoLzSO1~WGq3{DhS=kT6dG2#33T?zSQ7#qalImOmiS7{2M&u4=gjk7Ek
zhV627RbMUe6XvTI-eieK=o?n^y({jiYSR`gVbNUn+k<CVd(YBmY^W${MlJiY`KIEt
z%pFQ_CK$F*B&a->d@q0kd4cl4wvbSK$g1_@2OOQM`;d-Y*?=sqc*Uy{uvdYZ`lT72
z*sHcgfrg3X_5SB0>+)fpX4}PQ^Vsl6i>ExU@Rddviyv)MhRcI*s|$^?KA~01r8eG{
z)-^?SGr?cr%%Lwysi5VTEv)%YW)~InRy~aZyc|)DbUP=A8suy+X^Ww#mozOaLNzr4
zI<oR7^0*S?a~pc=<GdU8)?=(UAHQRysz+@#c8qi39I9x|z?Xe$lWF6`edc3xXOr=e
zRTO@iO;0sA7s{lw{GyG#2iZvAcbIl4BpxWmr2}s65>1?5v9U0!u2X52Vo9crD)M68
zO;-BD_0{h;dvXrtIx4^fx8mxxKSZa$^D|A7<l`zb&y4F)d67tQ>P>xI5lq=z=d6yh
zJ?__598|*eWu@=R)tCJOmJ@2UAvRQ#`i0Z=MeSK5C`()>WA0*3U4v$fM}EIe;urjM
zRK-uhA0v7xU6`}4V3q2z#WSRCI61T_f0zlNnlazHUl-#nf!HeR+?*|^^b-(dqKv#Y
zT}x*M6LoRz?re5!9HOjOil_>OK=VfmtiD2<ggG{~AFu%=T$8WRLDSPcDOu5EWhLIU
zqC#&r1TUSe*;b`OtQmb(g06mt)4{&B_wMz0xT2Z?Sq0<)`9J7R_Cqle*2BZ(#)Rfg
za|>7T1iB1$;bt4->fHzi%)E|y?E><)s<?@MuD7@PtP~XfKD58SmlpmNk~yyL=?-2p
zlH`eTs^&FXpKVZ}H@0-!_3crUTwIU7DP);OC#ia`;MyR|XL2cz%~$hj0}0h(?e3HM
zIO!U}aah~Xi_O*t?i|78x^Sr-$eU*KgkXv#+fD)df=Dq}iooQS7E(qZ2A8Rau!6f3
z!H1d#)+{NN=N||t!`Q`(gR5s+8$5#8-OvIHd7ab&4wh9V0t*u9_|BcHO-BY?;N&>!
zXEo_w^)ZufOEtB=8LimoH)&`1-_w3muvtS$%Fn9u)F)s!PdzqZr-xw+P;IE}HDW0Q
z5Cv25k?s<oc{al6pp7+N7Q?to-AHpT=$}DK+wvT31u=VYN!r*e<HVi_T+F?OH{8xg
z?E02RKZ82C_)@Hi&Uz{=Qx46wpbu<8>uzN?Po>LmCrTBh_pujw)2pT=^d#;Ync`?$
zcZva3$TAuta~5q+{PSR?iJ`{g3I$3-;Rl~kjOg#r#VgJaCJfEqGzJXU7VfVX#*yo$
zD#^X9V{{;Q8x%Ho&phyzotcG)3SF(!_Zd)Rx}S=$gmac48kC(Eh~i?8jZ(6@cWg+H
zQ_RW{Z9LObWz)wm8~23DiN}0tP%VXQYxb;B@|(kozLySnG)(DzJXf0NBT~)td{PJ~
z_w~$>dzH{Mczfl+IZ?J%tc|pvj<-eB*rC6Fc{ZD=LO)DS_IxRD#`RtK`PLCG^yL*5
zS*Am<2M6FSh*CwWI<s?dlN#@*{dnTf-}7qye85iw?SgWDB%{!T-bEjs$#qgu81=$w
zVbEp6Y4SFP?-(D~fhFVhR<qMyp}osx$y%N;+1Msvhf;23{`-4q{Q(*+tg*npXoo|r
z-@XQZ8F7C|K9BctDMZIi(4cx5f7J})%*atpd}sU$vf6jWXwQ!J7z&9jtN?d%e#-r%
zk7&(<9cuSWVrliffdj8XUi5)&P#PFM003B!g_xMKjF{LzYc$_0Gc&y71f+X~34a<)
z$x6_DcSUvht(?ga7QrKn6=|4TkEP?n(sGTE#z8^L6dhpI-5v9@G%&KR61g&f<Q{Bu
zcQ=2ZjPjM4wm$4)y_xvzRN!<KOf;`Yot*`&I1QA)$;z6pixpS}YY2FO6^TtPp`MJy
zbC0g_y1)0t+4;1(_e$6yyK3U6M3H6O3PiI*9kbTq+w<OJp_hTb;Js)T!J+WkZauyv
z*!$iKK88r}ZJOU9Rhz-JdbzvYq_}UY4^3i*#^85rx&7*9xu#{gi_&Y4@@HKcr_5d0
zO>I$dnXp(DF+42ou*uRmBQl96R+P8uEv0xlDlNRPgb2l=!Q1!UZ|iPNra;R{1^AzS
zl{ibUxKIIY!gaPwYrh&-_`#mXx{_vZwFtV7sSj=%v3bEC8~r1X8mZ2}Qa*N#Coti~
zlRsF%2ZNvcNUkM9K->9eaW*y03Mvx&A-XhtfgmIVH<lRueCO`wW@h)6WpQ%{f#&Dv
zH^{-N^j=GgYw=z)tF0i<XKZJ~1T?WT0x`MU*uU4*0s#C%?)E@qE08mZ5y;HKR)FlR
zt&@zz!bE^fi&KF`!CnkxZXxaI2vYM@R5$jtGUhcQ6B2~ycjtQtumL#(N!)F$ZJqes
z1<3xw<$J&X)67gp@|TFSl>nKxf-;Giog;{ZgNcKQg;B!Y!j+9o5T1nJ(ZrNbRb29K
zi1#M}GIM8Vdp>4nH#avXH+CjFM>A$tUS3{i7B*%!HpX`eMkfzjXP`TytrPhlh<{*+
zgPe>VE$p2w>}*N?U;>ToT$}~S$lm)&{^_5My@JBO;BB4$X5pO=W_O@HGb<AdvyBb&
zziT)-OSry+{O!>HRl`aBz4Vw_735^+;%E$#a0S^qlm9z}iSfVm?OhzL{|d*%m>FaZ
zvUwMEdbi5@A10+_6qNs^@rMF43mf~twBE`74@qYW)BhpsKYaVs^H(_k?#R3Pzi|IU
z`k%4?CHyX>pui_?XYBIFJsEKUvOo6uOzey;O!)q~We0Ksd3ZrUMi38&5hDkPg^Q7w
z%hZ&Sotu}7+t`GY1IS_YZ%{I}PR>AEW6&R{cW@?)cN|U=6Bc%$DH|gXh==nXf(OLN
zYiwf7$i>QL%EN5}Vg<4T{|!RP(c(QTf!6=-)gLI6cPK6nUSn1kZXQMsUS2jv4h|rQ
zk;mlSFBTw>gU!U0+lYge<1Z)^V?IecM;qY#a9Y>^%|Oidwq}2I{2`oAL|I0FjE#xq
ze_E8SfzGDy3h#5k!q&vj&FO!-)Gcg4YR<qve6n(}@^Eu;^RRGpbF*-;{lnB>h?*cr
zr}td^gUZUn^mosnf#G`(=bc*MpG<uR_zU(u8a^>c5YXAqQQgkYT7c{i1j!%GzY?5;
z{~yC5ZQ=AT;qfQu|IT_fki$Qo{xJ!xE&l2vA^9tD`GCg%FyaJs1)2P1=w0t0UB>1>
zTQku64F5Z&{@HHve;KZKQn^8F?3|3;Ko;J2qB&U^jf}XB8M#@Efb6V1Mn*hb{|NkF
z=uUQ~&Tc?QkcioPr0>zZr_f)~kkI^1ChdQE<7N)}!xRe}D<caBBP)+OD=!}hJ0BZ2
z8S~%4GXI&=|BRNO`TxTQ|6c<Cwg|lI{iE%Dad}^>nE$m{{ms`O3jZIz{vL<_hZf$U
z|7+xb#qWRV`Y&DoD+c~o!vD>#|I+opV&H!z{NL>Q|BWvA|2gh}Y~Oc4ZtsT~GGZL>
z_k$3$k(`t`;0?eEz;oQuO?+>GvzPwl1OPCR|GB{23xr(X8)2Mf6eM7FAkoq22~7C6
zL*JY5oF%lK#q4bU?3w|8ZRJ2FByJYY<|Kc%a$5e#H~_#0X&G@5b@#;)FE{7uxo@{u
zt55V(ob07}igB^#T!vk^1b0N-8|ZU=12XM0?F;HpPM6*bJO;G{dry-Y3QJLH_K^r=
zl{}D}@XbK^gdlMhF><(>gHFe@6(I_scvCm^(?_YjeRB@C)2rpCl{@bc`*@`R7ie<T
zpBIwU(J>F<D~7SBzw{>e)kdq^o6HKfGLF+02bj8e0#;>THxrp_VJbv!%*QYqy~%{T
zL;$ehi16s>Y^&yFc^yU9RJ|++`=)kyPux3XAJf#=z|Lc+{haSdL`!$6o+^kEQ<B$A
zmzQ3`R#@Te1A*W)&{9ZOM%Y*1lQ|$o)|Jmidy<et<m}iz6N5FSIYfXce$MR^nxLlr
z;8nI;0VTM$gl{Y>`S<`*NRk^AY5*bWCd+TXQ(80b3qa;4mlTgGft*#!4>(7pt=b5a
z;HMIBck$f{s1}gl2Zm^PZ^;><;?yP;jDIT>-woPvuih$wv{E0eiEv>7(t+6=;(+Vt
zEk-|b@r?diQsEe7jqzW^1JFTi2&t7&u&DrgFiOAy4NW+!lNJEB4_6pp1Oc@kl~wF}
zmqM|ebT6fjAM%4dTWW|A;NvTGpC2sixr{G+?n4<*Mt*<*11Y14grrOBr+OLP2H9ZO
zpRv$gNkJm;82}+aqsj@6)1Tnv@~q^8!jEV&X2UsyYG~R@5q{c%-6GmSVz9WzVB=S?
zWDs+U%v!si({s7iZ`%I0)(Rc+Ri;XKP~|~9`(c{DgonHC<m}jj9MAXM^G?1vqr4Wc
zrx36Th<37GE~I?rH<DT|4NAn`B&(QhgKHpN-OrC{vaQZ4DkxhG5>CTSij&Ok)ui_0
z3FenL)&XuHuBpG8mVQF?rNDWmv7_sl;2Bes?Yz^tpe3uw*_+r-qR3BIJ-Ln5izA3d
zi9}r7QsTSp-T9K~fFc`3qi?obr(_|*mF}F1QT4GG-ZM2vk7R}R(eY_oh!$szaI8o1
zukcb~vTu}tLN|#lLYRg(a-d`uZ~!IAO3<<uQt{fN*d;5FoXB^x7fk4wy=pET?>9S{
zb8g(2U`6OYp{XhjP6};-p{LO>3Akg&q~clJ8y(|wr+XfwA}?4Cbf6RQDbn=$Q`DEq
ze5Cv(33hIp9Y(XO%pmKU$C;`Mum|_C?9AMlJamQ*iM#h|29~^I<el+j=g{XLMX5fg
z+5JWA5Y;eAvW*ehzZqV&+9zC<@czI$2%RE~uHPL2H_7s1EfdBT#15S#1-%oR7j02W
zGz64*@`$zYthpGFz*6DXJ7|1$g};mY-=L}c6BP<UnN`a*$E+jLCz+!O#eG`#B1;yg
z24tnexIrD=Gk>MAu$3*@R=j}W_HWywKe4t5?Di528t~R0S1kz!RL<hICHh%vmC7A!
z92tBxiSc0!dPAJO(5(kVeG-klPp&`jx-jZ-m?Al7{w<XBG9MOC#Rfl+x#@OF^UAww
zt_!d)?M_FM3&hC5n*ils8~|emybED?hk9O34lw{!XsCAeQ#H_AbpzP`<MKX{aZ20S
zJ*P?y1EzqnFD3|K`gZE~bO%Upn4f7skW5g#ZX%YXZ$-JD8Uwtc{j50pnPxaXCzwPq
zhrL&~M;u6Rv$<DwVniR233Alx)43GRGz)qMO&`yZ*VAz%7z{g;G{{|p+GajoB;97A
zC<vE#k6+UW#BoP*`$3dw)^Orz;q+-O1{UF7&)^%UI7H2Df1~17fPnfeWUKFtR>|`O
zj>_u%^KK)?3cset4COIYYPsIVV849vd{N~vK~;&i1G{`<Dj$Hpv^+BkTgj_almDUj
zI_0Tsz9AoMp;><Kae4)w!xLVZIhDmOyK*i*_u^6*wk~pTLXgi7j6U#-5&+?FF9&qS
z)V?+wWHr`-sl_NroM{Ek60c}wvGn6mnH%6Y2_1O!aLs8uUOdCx%@3L9r(Z~NR`vY#
zq7)NX6C4hfA~CQYQ`)j%$mIk6H<BP}u^<Z?Q)mqqh&45UlO$%C;S>D=#DS{=gr7Gt
zy0hVPewC4UN<zOCIT6ZT8Z?K3Sg;VvTJxc+_+^i~?F--Y<BOJqgadD)dKk*}hSpi7
zgb&TvpH91ZjX9Y5;Xn%Zg`rQqlTQ`>Hwl%!0#S{{uK_hHy4{_ki}Mn4C}<u-^WL$|
zQZlfViDi)1R-Kk(_3w2p0zE|M8ntCIQbZQ#7}SA0xUAzrf%_3X3*JT_aXp0~_hqPU
za9cI^?~H*9&f9tfcGss+YVdMJqmsaSz$g09)`*gGTaORPM_pJ<0MQm|zZAFj$SWKs
z36;;7KD|LwQ>OXWUaxWGT|}y789~n>XrQ`&T_$4|9v(1460wDGkfI>2o%3dz<4m@6
zuYyi2d^EJQ4jm9_0PCWN(1CFLidtAVW5h6|P~!m{VD@`TVY%TLLz~SEY}L-DXNlR>
z4}(;Y%`a++i&RrNs7G3GSHgH6`>d-WI<m(e(<y?k#)>7{nkn)Cq_MyH4BuXuTVVZk
zNRBps6~u12I^t8Yw;{4=7;2*qrkQPB4?U9y=<?=lCq{?x4AWO!j57`p$e-QyoCzGT
znG}Gm&z{j>*to%RbLuBLKX{x&jB#*vq0n*u)n0I{7Re;+f6#lnAvnxL)2kuJBs@FV
zJ&kmHvK;xMiT@#7#CqSn+v2ANO$2t=py`G5lPg0+A4^9qzJ^3W7!*0p0JE^ulWl$9
zQa3JXLfxgi_fPnVWfyIPQSPJ@uFHMs(}MlnDqiwZ@(!)l)-wk$Sb%$}Oc!?&H-=O=
z(RV0f+*ckTa`~~~MP}vNN8Mi{1nrfMv}INI=w`=YkyCR8-D6qtI82uh?d5_xU!N);
zFp~}Jp}u<nhs!d9<6eD^iH@PHaguFF({TKgMm9(8iBi9kQ$x|c026Wg4G*DRT~2$<
z9Wi}Yy4vyT9CS|Po%_Achd(kKlcYn387?VKqZ?IN9~|;vnmD!%hwM5|g;gV<^pi7&
zU4MQEt`wR-qSg;h_!xAqIkmJbhhyOr@u5BSBVCh8>(0x74I2zV$9qRKYNEAzt*M-Y
zxoW?0D!H~w&z;c}voBUU>N^i=KPAFgKmD0)*Wlco;pY)~%n&knUpoY%r5nLQ53ypJ
zh;B2_8lO2=7BW~G$ZsJ(U7T2}e2^=JuE5*pYO$EPIwM~?9QdCvuiVcoIB^FHyTXOV
zl~rrM+Mo<1S8__#>i9AqjbF{X4CntA=cb!tRIij;$+pCPLOFt=Xd3w16oGZ<;S9#!
zFRcd7wnR>3FL~}+YH_SuG^0fowjUCpT)b|DV-Tau)PcQW2s=}dM1v#&T*4lNkC>Pt
z{)NKb8SrhDWp{SCuX0oXS2hYz8M!zqD;@y6?!Oa}21{^we)?b_xsr(A_vCePSjc@L
zyQKM*4_hb1lhx8}!<Z1?dwuek6NImTk`n|_pfA~9SW#5u3Zw3}Okm)|XbTA0hmSZZ
zcC8^G?eY~P41%nHk4^tFD@*8Oc=#K}h<<W0ec3kxCY>)2Jx;OmMd!UmM56Osy%y~6
zRYFAsNt7UIQ`P;mlm7L6mP+k*L>v8+`Ib(YWPAJ9;fGY+j~H56E`s0@TTLT&-5=9>
zdXKVt-QHHiv~Iclr?uh6ezg_h9rVPb6OH~_3^TSxtqIbm)@@xxp(JS#qcdPUniM<s
zq+CylHu5A26!^Ygwi{EJ_EUW8uxo2ZtX>%b?HE{+=vN=Qtw!eNzNf)ETL)aB2N>Er
z<Gy@@)a<xn!$p(t^#kdK?ci(;N9gQ-B~KXn-r9`GsEPmPc!9)Y*8L3^m#DAQg?V$J
zX*PHEeB(i1cbsE65`9HH&Q`H<HY_*SRPgnzfP1UfqKK4I4;Afw6##2KH2)@JGM;sm
z6l2N<${X&60`rVjghAzLM>i?n7Q{q@$WWQtC=^fOB++{RjlMk>h`;LQdUCb^6^@ry
zm`l|O8Pj;yH76OO{7En3&eitULJ@P%r4w`LQLBA{u+tuq{DgqJV=q2`$Az7HOD6_E
znIGA8Gv7&-gqkt}35Bf(3QZXecB?jcFQ=UcT8#T#Z^;zk_lqN^U}2{mc;NQFiVuk0
z;rUL+)$BaRfNkaj(fsI6#lT=^0F4T@fJx<F9r<G5WT9?sCzsgo|D}veZNQ(SZbWhI
zsBdb6*bpYdo*VAw_4tXa`1L!Ds-Me9diCzfT#f}H(Ntfn+iDlViNd<LInjaCls$2T
z%N4+#bCuLgTw9Y5NvLg?z1ivjYim!mn2|xu=QHHR%L`2eW{#j9B$S^Ma!lb&G>*R1
zmreT27v+5n-s2$1=1?A<LzFrI8%q=(Bqd;@c;!N}=!pkvt<KJR$=U6b1+4+soBXtf
zf|Lvp?epR}o8&QrrtMPL++w4Vlp`v-@DEe@R&P*#q~KilcSFJF*6`bDmP=<0v$>Jp
zj5N<{<l|q%_N=bax5nOP2(E&QQC7RzfvtxJsal@`70&KRe!JYu2gcw?R1qcxN$Mu~
zE}E->r`ThVAWflIevZK~{GN!L6BMBOE4w-M$N9%9*ZO*ai$lxfQ%jgVLMyHx5oW8t
z5aiKNQZm;j31Q~_VCOJT*E4E+MmJ`i!Eeu#ZuWCOk$Cco(TOUJEk9AVK5edN06%LW
z#rKE|x{N2z$Be!>%tuEpUeczX%T00Qu)2O*sOE4le~~3PnN%Uk>{3Wn8U(M|fwll!
z-exqq3WC^voY@*+G&-um#vIXit!%6><WAsmk}@Okxx3XVKQa$VbaV{VrbUE@DJVq2
z->S|RR^~o`h$K+P9r!idNHv_M85-aIrQB{MfOBazr1lu1p(jLtNrZz-4y!R3uV98I
z8v8q!HsE7|B!5cK5s%7{fFoC`J9ynaq7rLc$Pr|j!70%SgQkxm7(8U`nV*<!hPl`U
z-kd{UPLf2}5zX{4#8hQCwWa&{8O~ae@6$GpgTx9RuB**36GQ0Q(XZ1=*XK7*rOk#B
zJD{Zp)^4IY=>ebl$&n~qrYMjn;vg5iSvCNp7jMQzTUiJva(A>B3C9=QiLOut>>Ljo
z#{PztyUadEQyIQLmq}Q*blraq&V!l*o7|K8sM$ueSs5Uy2cyy(c_<9om>4SyGzIdS
zDrEY{3i&;jTEN;PL3UvwPqr}d>-8?$*on+>sBhzt=N!zlVM?uy1LS-AGWQIEKkjA6
zWG+COYR=@?RTFo*Ka(!s=6PLQxy^}CyBgW%2yZz_1ICSzjAvHGQPrJM#bQ~Mf&gU>
z-m0Ca<tYq9m67;VwpmS>DVZKjt}YE*Ps{?);OpG{xUye`>4F37F^i<+COE25D(Pc!
zVE=gd`N&p`EJ<A9C+4x&-g^<RCHAOpHKYaz>$eHJeXwu^cNlT|IZK)&Ev6$9X=R=v
zf1`b6cbOHZ%#a{N*O1gV|0q@=)2x<oQ(A(UcvUz=S}0VQFw_TBff%!?WJcL`5r*<~
z1pO&gdYb-nb2tjj*VT!jD!~UU=bMwje%@V;+4YKTR9BZKav|oga(m1_chvSs(uaCn
z^dVD2_^XHm^Lp=hFns$MQI-S8o_9J)at&qtEkbZeD~Vm(@%J*qDtSvA*u-&#SVD;T
z84zF*Rt7Z;@%=4|Q(59L93bYfDn2ds*gIm{=zDeJ0zZQo<9mXY;giw#_hWi%ZRF|8
z0wja9(${)d-MJOhSuxhyZ<w}2^R(CM@rWunf*VJgZ##YbVAfvgZ$aqAlL9=>{Kbg@
zpaon73Ra$YKS@OVi6ki}h)HF|jQ(F&JkM;H#d}z$f^E@WaJSX65geNNX+ItItiQJm
zCA;iQSyLvLFSH@4OujF^@SO*}{rXEN+ppGKkyB+>Dr&q~+}VwgHY+FE9WOTf(S7Ml
z+*{nfy5UG2Cx%;CKtC&%h51`++V1e2#DEhX>7qJmkkfb=X*`a&iijZi`(ZO<CbhbJ
zW`5y>ki%xT+w*f_@chXtI+vIUR;|O$(=>7o=u%%e=hJo~Bt$a|CrM&|@=-8#DpJ<S
z{|TWBUi4bF2rvz;ecec=Q^?N?V_GO58Zmg8hPyAj5f>~v8)d~Y5HaK&8~d#c9^CLE
zez*A*^kkFpj|a#DS8=5<H5kP;HS<vB4Psy<0o!tr9}Zz^MHwo}OA(HQp&L39iR4gk
zBJpSS%$t+i<vfUbUp0GN^I!oOAaY8={h-3t4sxSiB8_1H`I?W4JTd%&IJLxX)W3DS
z$u1+>lyluyAw>O~Lp``EmB5VZY53utU&XskTkzRuAHv?AF6>(M7}o4~2Y(-qqg2!3
zV`Ha05plCpz{5Te1=Qsg;GTv%;rIIS{Q7lxxu*m5!7##+Fx2>MQ7Hx6vd}j?@(P}N
zd)=WEW=|oz!&|}6vIiw83AkyDKw;NmF#y1*lTzCt0p<nwRkEu*CG1x2L-mPd16Rt`
zshov-&$<%JFS-(?MI}h4Q)umON3A!6Uv7L6KiT*qI@2SVZg}Bi+CfQ2p~9Dk+h#Ap
zc@;B|7A_<d&Z#{ep+FFsTn4q}Q&8y(AdyZ(N;xSO3=bzVQmOA97Wh3VHKObW;$TLE
zk(*F(5^5`e(Zgaus#(Ba%gc-?T?i1gAQ96kpd5^t73}rY4tdOY!0Ib(SE<{IJYLqh
zuM0o^%L@GK>(8NWU>{7z$F9obK0WB#02BgThb<)vOfNov{x!Jt%yZ$<46NU^9UKhY
z71%#G0H4Q;XkHjy`#RA!(2q#a56;KqgJolAWaOctZ1!R7+$Rnmt9y#+Q)V&0i5Q4D
zpj;pqmw)bg!d`nsg-BoqPcj3a_Y^T2Zz&Tos&t0s(}}Gzc`O3-nUw=fp<&QT7jEp?
zjf`s}%Jl=F$9!61YA}k=ExrVwTzEe64KG^z_hD{P1ukEF9!66McuWsEy4ul~OQI(|
zifw%zm{VMd;%EUJ%feqfT9Bvd@cO)f0uqU2U&r9k{do4R-3RX{?{psaSMr~5Kb0Lg
zB!j?A_&jB_D!EN&4kI9cnRcGPiZ_t{fom|G@<a}O!*7WV$IAv(S3b?;d`Z9@^XdWD
zhNC133=b?RQ5!12H?F+{OHMljM1)1N<{>#SfUUh9=<6FBITVDWaB?|p=-CYq<H$;Z
za&HLbg(dJB9;65Q(K|YVU@!>Baa3o#ca7z`KSk@lNpY%RnRcZo#=k&(a;IDKQVA4=
zJQeJ3$sIx*AfWs<qbe|!KdJ>Oa!80LVwh?a(<904GJ8zHQGJEQfZMztla={G_}t=)
z@x=?S#k6P%(uq-&grYe2^hNmFTd(2qS6{^G)9O(i$;bBgHoVZi6H~k)R2G%O?-{=Y
zP3+Ad#@Tbv!2FqWamC_g*xlTWxRb{4@Q5{#&fF!Rd9&kCA%(A;|3C}T%p;^M;$E5~
zE!FO==3DuM4Ao!Beq|Q1rAHc<GK0c0hwhQL#XHAwgF&Ixbs>+Z=&P6BfQuHLgPd(+
zYFQ=9B89N59E!qG?AzampKafOI!_3v*Um(1`)&**M<HDoHL=REw)toR5CTvNKe+v$
zQ5Y@2mew73>hCY$g_ie_&SqiR_QQ!MU;E{u`-m*zXZlL{eWa1+C`FORO<E+9YApwV
zf^)Sye3kqj(vGYeBL*UdDx-)VP41A^vE0C&Q8sl^VcA(1E?9!$#3+97^zRVTJeXHE
z8+-S4qN=0}>0A~AefuylI)p11kKG-1^mij_dU5f*B{+S?EL^m3DPTKzyk!&mI`-l}
zRzHOwzxEu~ckFg8$8Ano_9IE#{=I7HjvtcxxUY<T+la6w2WA2aP!dYHkkVF`%wbfy
zNV!RPwOE55V;=gluvD5{7{o~<HWq|we6|Jx^bo5vqVhTbe>`SRbggH7O#c@pl{TCj
zMb35b+~zm1blyT3x`A{qi}Jz}oIPbG`V+%QXEG?uFGj1K!FQM4f!gY6c&}+IUU~mb
zywLP6g0{emJGZ)yD_V7lmjL;!BHCmhG8jE5r<N#(X6NEE#k~|%0IWXQBW-+J+Nx8!
z=u<9+p^$*9EKMou%XZ51a&h>_b-y9T5mCS;W&!)E9wL%C1viWBO3>`%Nn%XH`(9ID
z_f8?iERX5IjDj-!Y428ib7UCRu`;~Xv>6vHSc>b<zXBTP5K>}Gdn=|JUi@b5O8n@B
zN3eOY7my^p60NS3s{uU6h~9NpZ8)wtT7mVYJLCg_8up|fCO9KXS^L#}Jx|yxj;Igl
zU1iJh!eI1Z@o}udcm+x>@Wixp^$@{s6%l(-J$O9fk=3|9)pA+=>RlasXPs6*3un)q
zkNv4pBvMHPeF41Ox&?_$8ka9V7g;NZwVO8J<vlx)&SkN6Xhh^(w^f(wB|tqZi8eW_
zHY7is?oY)$#q@Jej2X%W(jD>z<>2v;CXrcg)OpKkePB9|j!R@-bB5I?;w$ZAZ|d?n
z%a+$IUU%aqpU~#i)FWr*;P?6Q^xEgqxOD?Et^=kNc8m-HLJ6-#n=9o@0G?$;?;fee
zeS&JXpdO*;L$mlYrUU6cq9@a(&Wb;6cYI`(Sm_PM&4C)W!c)pLkx@uAiAFbp+vAOP
z<`|=Le~4>uE~=h3`<8RBfXDD)W7B4=ZrOyvOa``Xi>%|exl;ZWz%wTU`XKOLEr=DN
zS^RqLBjkEzF4Za<dY-gbpR`Pl4BQ{8=l|QtCvsB?$!5{$Ch_Tb<IycayY8$X6$Jd>
z4Eua&Nelz76kds42c7ggCkuKa9>ta$0WFA!f_3~xEkLk`luWjWugM%9Jf2MMM1_(X
z^Wwo!9shzJA&kl8<g3nzx=n$439=Xry$1^@jO&&z(-^H$K>PSfPk>IGv|{uoJ<o{J
zbxP1|dr<vUkI;%>ExX`=P;#gEq0Hd_oD!krK_nQ=i=PE+`9B%?MA8P*yG2K?PkqH-
z#qJ?pZMTNx3O9vKJ&!qAvtg+LU_OARQvn(PN<XPb%>s6_SwvsZL#!^-CAUahh5b|b
z)N!e-Oty(1je|dRQrStCVB$Oesq8*a3DcAUa&hSp!SckIUs@{RB-HEnp!}mftky{z
zqw%L5byB{4lg_w-m=R^Sm<4o~7GhH-q%T&lgjvJ@0&;O_r}xTlOA9~!Sj5tkVuFTG
zdP?a({8c<k8sLm5=n<NvDshu?yEQ2PWDluTB8Q$M4Ox%*IXCKz`%vvEV7D7lc83<A
zYOsU)7YcAj6}X>}X%~ID9`!jT@chRrmp?Q`>S6koznYz=05T$nFQo*eNUKhJNIsS8
zmn%dHP4UL#6A@dk7kbOt*F7cdR?SbPlYoCv@gdVKl|3L|az^o`_)2^4N5S!tzcG?(
z76ZO1{Bdhgbwgp1na=`;(n$=&ObTm3c9wE*x-+8Iq?%>oSk@J+=L|%7nx8&tL}(E+
z=!kn%5=ieA54a<^E8h6g)vI(Wf>YJ!%{xQ0_(Mnfj*oHxdsxCAR)Zpk&B9i#%0-t_
z7=?lW!3AItLzL;L;3iGy9!%H#RK`r`#0h$kaHtI^2V!)adu8YE?Z2MP-nCOffV5SI
z5|G3vTa=qpP%dB;FqlQihr~t7#YIXeNO8~*kpN-<)5oMa2f(VaHPRhIdShHM&j;%(
z2_XfBPj>I8h5#3RN+=s3??ji=8kC#Ud*oW?p+$O#PSgCz;~rwnpt0`<8i$;y0+g%Z
zW&n{@LS!)HB-Iu-sn#k7tKF2C=__YH)WcK-0>&k;iT@D<C>O)ZMH+xtTCj4x@(<a4
z;ye2ubN0s?4CV}~Fc@mUF^4qNkcMKWAp!=CfGmKFl1K;(UCPED2(&<<13>bisJ^xQ
zHe;i&j6Gl$vj!z#;}j5ZN@76iO-3MZ7Jr{Kc(eQDx2ys6`0>6(JwAFnFs?k&^i_J3
zVVL=JEA!Bovz_w1o~P~6e>?%pbzP6J2b8P+<fO4R{*<loF+Z^eJ*E`(jbG<K^7G$l
Wu&_>9kAgJ-0000<MNUMnLSTYu=E9-?

diff --git a/src/main/resources/de/griefed/resources/lang/lang_de_de.properties b/src/main/resources/de/griefed/resources/lang/lang_de_de.properties
index b47910450..79ed23879 100644
--- a/src/main/resources/de/griefed/resources/lang/lang_de_de.properties
+++ b/src/main/resources/de/griefed/resources/lang/lang_de_de.properties
@@ -81,7 +81,13 @@ createserverpack.gui.buttongenerateserverpack.ready=ServerPackCreator ready.
 createserverpack.gui.buttongenerateserverpack.tip=Check the configuration for errors and start the generation of the server pack.
 createserverpack.gui.buttongenerateserverpack.fail=Config check not successfull. Check your configuration.
 createserverpack.gui.about.text=ServerPackCreator was made as a training ground for Java\nand because I wanted an easier way to update/make server packs for updates to my modpack.\nIt has grown substantially since the first release, which was when it was CLI only.\nNow it provides a GUI as well!\nThe fact that this is, and always will be, a playground for me, in Java, still remains though. As with every application, bugs are bound to appear, and I will try to fix them whenever I can.\nI am working on this program in my spare time, please keep that in mind when reporting issues or requesting new features to be added.\n\nThis project would not be where it is today without the help from my contributors:\n\nWhitebear60
-createserverpack.gui.about.pastebin=Open pastebin in your browser to create pastes of logs files or config files.
+createserverpack.gui.about.hastebin=Create pastes of your configuration and serverpackcreator.log files.
+createserverpack.gui.about.hastebin.conf=HasteBin URL for configuration file:
+createserverpack.gui.about.hastebin.spclog=HasteBin URL for serverpackcreator.log:
+createserverpack.gui.about.hastebin.dialog=Open HasteBins in Browser?
+createserverpack.gui.about.hastebin.dialog.yes=Yes
+createserverpack.gui.about.hastebin.dialog.no=No
+createserverpack.gui.about.hastebin.dialog.clipboard=Copy to clipboard
 createserverpack.gui.about.issue=Create an issue on GitHub.
 createserverpack.gui.about.discord=Get support and chat on Griefed's Discord server.
 
@@ -189,6 +195,11 @@ createserverpack.log.error.buttonjavapath=Error getting path to java binary/exec
 createserverpack.log.error.buttonloadconfigfromfile=Error loading configuration from selected file.
 createserverpack.log.error.buttoncreateserverpack.tempfile=Could not delete temporary config file.
 createserverpack.log.error.browserserverpack=Error opening file explorer for server pack.
+createserverpack.log.error.abouttab.hastebin.readfile=Error reading text from file.
+createserverpack.log.error.abouttab.hastebin.request=Error during acquisition of request URL.
+createserverpack.log.error.abouttab.hastebin.connection=Error during opening of connection to URL.
+createserverpack.log.error.abouttab.hastebin.method=Error during request of POST method.
+createserverpack.log.error.abouttab.hastebin.response=Error encountered when acquiring response from URL.
 tabbedpane.log.error=Error: There was an error setting the look and feel.
 
 ## Info logs
diff --git a/src/main/resources/de/griefed/resources/lang/lang_en_us.properties b/src/main/resources/de/griefed/resources/lang/lang_en_us.properties
index 0a9c2c330..a78703694 100644
--- a/src/main/resources/de/griefed/resources/lang/lang_en_us.properties
+++ b/src/main/resources/de/griefed/resources/lang/lang_en_us.properties
@@ -81,7 +81,13 @@ createserverpack.gui.buttongenerateserverpack.ready=ServerPackCreator ready.
 createserverpack.gui.buttongenerateserverpack.tip=Check the configuration for errors and start the generation of the server pack.
 createserverpack.gui.buttongenerateserverpack.fail=Config check not successfull. Check your configuration.
 createserverpack.gui.about.text=ServerPackCreator was made as a training ground for Java\nand because I wanted an easier way to update/make server packs for updates to my modpack.\nIt has grown substantially since the first release, which was when it was CLI only.\nNow it provides a GUI as well!\nThe fact that this is, and always will be, a playground for me, in Java, still remains though. As with every application, bugs are bound to appear, and I will try to fix them whenever I can.\nI am working on this program in my spare time, please keep that in mind when reporting issues or requesting new features to be added.\n\nThis project would not be where it is today without the help from my contributors:\n\nWhitebear60
-createserverpack.gui.about.pastebin=Open pastebin in your browser to create pastes of logs files or config files.
+createserverpack.gui.about.hastebin=Create pastes of your configuration and serverpackcreator.log files.
+createserverpack.gui.about.hastebin.conf=HasteBin URL for configuration file:
+createserverpack.gui.about.hastebin.spclog=HasteBin URL for serverpackcreator.log:
+createserverpack.gui.about.hastebin.dialog=Open HasteBins in Browser?
+createserverpack.gui.about.hastebin.dialog.yes=Yes
+createserverpack.gui.about.hastebin.dialog.no=No
+createserverpack.gui.about.hastebin.dialog.clipboard=Copy to clipboard
 createserverpack.gui.about.issue=Create an issue on GitHub.
 createserverpack.gui.about.discord=Get support and chat on Griefed's Discord server.
 
@@ -189,6 +195,11 @@ createserverpack.log.error.buttonjavapath=Error getting path to java binary/exec
 createserverpack.log.error.buttonloadconfigfromfile=Error loading configuration from selected file.
 createserverpack.log.error.buttoncreateserverpack.tempfile=Could not delete temporary config file.
 createserverpack.log.error.browserserverpack=Error opening file explorer for server pack.
+createserverpack.log.error.abouttab.hastebin.readfile=Error reading text from file.
+createserverpack.log.error.abouttab.hastebin.request=Error during acquisition of request URL.
+createserverpack.log.error.abouttab.hastebin.connection=Error during opening of connection to URL.
+createserverpack.log.error.abouttab.hastebin.method=Error during request of POST method.
+createserverpack.log.error.abouttab.hastebin.response=Error encountered when acquiring response from URL.
 tabbedpane.log.error=Error: There was an error setting the look and feel.
 
 ## Info logs
diff --git a/src/main/resources/de/griefed/resources/lang/lang_uk_ua.properties b/src/main/resources/de/griefed/resources/lang/lang_uk_ua.properties
index 10989a2ed..0fe83cba8 100644
--- a/src/main/resources/de/griefed/resources/lang/lang_uk_ua.properties
+++ b/src/main/resources/de/griefed/resources/lang/lang_uk_ua.properties
@@ -81,7 +81,13 @@ createserverpack.gui.buttongenerateserverpack.ready=ServerPackCreator ready.
 createserverpack.gui.buttongenerateserverpack.tip=Check the configuration for errors and start the generation of the server pack.
 createserverpack.gui.buttongenerateserverpack.fail=Config check not successfull. Check your configuration.
 createserverpack.gui.about.text=ServerPackCreator was made as a training ground for Java\nand because I wanted an easier way to update/make server packs for updates to my modpack.\nIt has grown substantially since the first release, which was when it was CLI only.\nNow it provides a GUI as well!\nThe fact that this is, and always will be, a playground for me, in Java, still remains though. As with every application, bugs are bound to appear, and I will try to fix them whenever I can.\nI am working on this program in my spare time, please keep that in mind when reporting issues or requesting new features to be added.\n\nThis project would not be where it is today without the help from my contributors:\n\nWhitebear60
-createserverpack.gui.about.pastebin=Open pastebin in your browser to create pastes of logs files or config files.
+createserverpack.gui.about.hastebin=Create pastes of your configuration and serverpackcreator.log files.
+createserverpack.gui.about.hastebin.conf=HasteBin URL for configuration file:
+createserverpack.gui.about.hastebin.spclog=HasteBin URL for serverpackcreator.log:
+createserverpack.gui.about.hastebin.dialog=Open HasteBins in Browser?
+createserverpack.gui.about.hastebin.dialog.yes=Yes
+createserverpack.gui.about.hastebin.dialog.no=No
+createserverpack.gui.about.hastebin.dialog.clipboard=Copy to clipboard
 createserverpack.gui.about.issue=Create an issue on GitHub.
 createserverpack.gui.about.discord=Get support and chat on Griefed's Discord server.
 
@@ -189,6 +195,11 @@ createserverpack.log.error.buttonjavapath=Error getting path to java binary/exec
 createserverpack.log.error.buttonloadconfigfromfile=Error loading configuration from selected file.
 createserverpack.log.error.buttoncreateserverpack.tempfile=Could not delete temporary config file.
 createserverpack.log.error.browserserverpack=Error opening file explorer for server pack.
+createserverpack.log.error.abouttab.hastebin.readfile=Error reading text from file.
+createserverpack.log.error.abouttab.hastebin.request=Error during acquisition of request URL.
+createserverpack.log.error.abouttab.hastebin.connection=Error during opening of connection to URL.
+createserverpack.log.error.abouttab.hastebin.method=Error during request of POST method.
+createserverpack.log.error.abouttab.hastebin.response=Error encountered when acquiring response from URL.
 tabbedpane.log.error=Error: There was an error setting the look and feel.
 
 ## Info logs
-- 
GitLab


From 0e68979c4788969526f7a78aab9ee9d10e5d4c18 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Mon, 3 May 2021 13:28:21 +0200
Subject: [PATCH 48/91] refactor(DI): Implement HasteBin wrapper and change
 button functionality to create pastes of configuration and
 serverpackcreator.log files

---
 img/hastebin.png | Bin 0 -> 16102 bytes
 img/hastebin.xcf | Bin 0 -> 22800 bytes
 2 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 img/hastebin.png
 create mode 100644 img/hastebin.xcf

diff --git a/img/hastebin.png b/img/hastebin.png
new file mode 100644
index 0000000000000000000000000000000000000000..8e15ebae11f4f9ee8fa13eed96f0547d874345be
GIT binary patch
literal 16102
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
V4y^UwZ%<tSvXV*?)nZ0L{|A?G0zUu%

literal 0
HcmV?d00001

diff --git a/img/hastebin.xcf b/img/hastebin.xcf
new file mode 100644
index 0000000000000000000000000000000000000000..7389491da23ab958413d784a7f18208effd05cf4
GIT binary patch
literal 22800
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

literal 0
HcmV?d00001

-- 
GitLab


From 1cad352639c6a94ea53eea83552935eb7dabf250 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Mon, 3 May 2021 17:11:27 +0200
Subject: [PATCH 49/91] refactor(DI): Remove borders for filechooser buttons

---
 .../griefed/serverpackcreator/gui/CreateServerPackTab.java | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/gui/CreateServerPackTab.java b/src/main/java/de/griefed/serverpackcreator/gui/CreateServerPackTab.java
index 7d58029f3..fa1fa8c48 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/CreateServerPackTab.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/CreateServerPackTab.java
@@ -31,6 +31,7 @@ import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
 import javax.swing.*;
+import javax.swing.border.Border;
 import javax.swing.filechooser.FileNameExtensionFilter;
 import java.awt.*;
 import java.awt.event.HierarchyEvent;
@@ -56,7 +57,7 @@ import java.util.concurrent.Executors;
  *     If a configuration file is found during startup of ServerPackCreator, it is automatically loaded into the GUI.
  * </p>
  */
-public class CreateServerPackTab extends Component {
+public class CreateServerPackTab extends JComponent {
     private static final Logger appLogger = LogManager.getLogger(CreateServerPackTab.class);
 
     private Configuration configuration;
@@ -322,6 +323,7 @@ public class CreateServerPackTab extends Component {
         //Select modpackDir button
         buttonModpackDir = new JButton();
         buttonModpackDir.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.buttonmodpackdir"));
+        buttonModpackDir.setContentAreaFilled(false);
         buttonModpackDir.setIcon(folderIcon);
         buttonModpackDir.setMinimumSize(folderButtonDimension);
         buttonModpackDir.setPreferredSize(folderButtonDimension);
@@ -356,6 +358,7 @@ public class CreateServerPackTab extends Component {
         //Select clientside-mods button
         buttonClientMods = new JButton();
         buttonClientMods.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.buttonclientmods"));
+        buttonClientMods.setContentAreaFilled(false);
         buttonClientMods.setIcon(folderIcon);
         buttonClientMods.setMinimumSize(folderButtonDimension);
         buttonClientMods.setPreferredSize(folderButtonDimension);
@@ -407,6 +410,7 @@ public class CreateServerPackTab extends Component {
         //Select directories to copy to server pack button
         buttonCopyDirs = new JButton();
         buttonCopyDirs.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.buttoncopydirs"));
+        buttonCopyDirs.setContentAreaFilled(false);
         buttonCopyDirs.setIcon(folderIcon);
         buttonCopyDirs.setMinimumSize(folderButtonDimension);
         buttonCopyDirs.setPreferredSize(folderButtonDimension);
@@ -447,6 +451,7 @@ public class CreateServerPackTab extends Component {
         //Select javaPath button
         buttonJavaPath = new JButton();
         buttonJavaPath.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.buttonjavapath"));
+        buttonJavaPath.setContentAreaFilled(false);
         buttonJavaPath.setIcon(folderIcon);
         buttonJavaPath.setMinimumSize(folderButtonDimension);
         buttonJavaPath.setPreferredSize(folderButtonDimension);
-- 
GitLab


From 43db830709ed61146c895a0fd3d67544211060b0 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Mon, 3 May 2021 17:12:14 +0200
Subject: [PATCH 50/91] refactor(DI): Explicitly extend JComponent

---
 .../griefed/serverpackcreator/gui/ModloaderInstallerLogTab.java | 2 +-
 .../griefed/serverpackcreator/gui/ServerPackCreatorLogTab.java  | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.java b/src/main/java/de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.java
index 104e715ee..d1d2e2f6f 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.java
@@ -30,7 +30,7 @@ import java.io.File;
 /**
  * This class creates the tab which display the latest modloader_installer.log tailer.
  */
-public class ModloaderInstallerLogTab extends Component {
+public class ModloaderInstallerLogTab extends JComponent {
 
     private LocalizationManager localizationManager;
 
diff --git a/src/main/java/de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.java b/src/main/java/de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.java
index dc873eddf..0e6dbf1b0 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.java
@@ -30,7 +30,7 @@ import java.io.File;
 /**
  * This class creates the tab which display the latest serverpackcreator.log tailer.
  */
-public class ServerPackCreatorLogTab extends Component {
+public class ServerPackCreatorLogTab extends JComponent {
 
     private LocalizationManager localizationManager;
 
-- 
GitLab


From 744d2ecf3469fff72979e13db9720a46490d53d2 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Mon, 3 May 2021 19:47:11 +0200
Subject: [PATCH 51/91] refactor(DI): Add a tiled background to the JFrame
 holding the JTabbedPane for better visibility of content in the banner.

---
 img/tile.png                                  | Bin 0 -> 19435 bytes
 img/tile2.png                                 | Bin 0 -> 19196 bytes
 .../gui/BackgroundPanel.java                  | 273 ++++++++++++++++++
 .../serverpackcreator/gui/CreateGui.java      |  26 +-
 .../de/griefed/resources/gui/tile.png         | Bin 0 -> 28889 bytes
 5 files changed, 298 insertions(+), 1 deletion(-)
 create mode 100644 img/tile.png
 create mode 100644 img/tile2.png
 create mode 100644 src/main/java/de/griefed/serverpackcreator/gui/BackgroundPanel.java
 create mode 100644 src/main/resources/de/griefed/resources/gui/tile.png

diff --git a/img/tile.png b/img/tile.png
new file mode 100644
index 0000000000000000000000000000000000000000..f63fde3241828f9e71818e97446eae9719841b82
GIT binary patch
literal 19435
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
X@I7F@uhc%^>0Jz-u6{1-oD!M<P4Z*I

literal 0
HcmV?d00001

diff --git a/img/tile2.png b/img/tile2.png
new file mode 100644
index 0000000000000000000000000000000000000000..9c2f2c1c949642195d0f05fbf2a1e1c4e1ad6a44
GIT binary patch
literal 19196
zcmbWfXH-+|);3B<rKvoCbOkBWrG-#b#DE|j5)54lEp#Hi6CXr60s@gB5~PLRlpZV?
z5Q3D@n+ili?;TFu`<!u}Z+v^dW4!*zgt6e)y;iO{uQJzjV?!O53p^L7sHj+U@82_}
zqN3jZ{W(WNxpJ@W{uJfMdGGsB1QiwQr{5py3`tgADypkgy7x5A19Mhdb!#MVz5qQ_
zwtO*Qe)QUndOYL4cDy0-i8FYtc~?nhR3q*1Woj%H-?@lKb*e!tXFCyRuNP#Kw{D*W
z$e(?gi7z^cINM78Tpm%m>X(MyrLJgLi#RoDAkARIPw>LKyL;ri(X(UB;m8cOqGeu`
zK0(^Hli;<tN8TtsJNS}8p20e#U;7wx9I_K`b9SH;isX2kS@x?*%$uZ1ZV5Fm&o#wv
zJUq2+U9fQi(`IFSrTmZE)(m!7fbvTtF8D-zsotxqeMRI*?J0BaD@S={O!cF|F{EX-
z34EUKp;vj$bPnz`M*QfN;n^NMC+>K}(A#(Ox|o>VY~3>x!=uos>M!CBBj+kSbt^=f
z3~k&kj{y%;gSz4@>6|}`YVdL{uMuGpnJi^4c8;JWuI1U?6#g>*{SackmB6Jt=r2-!
z4FSg?^(>3G&s1dB1q?7PIs&bZpqZK%n&qJ>mSYSAaBXnKw`RMYspMI(oUYC&of9#?
zr!+tJXB|n3dbvN>F}aY=@Q8c94k^KF7Jk-kUv^%ev+U)?yZAHz(aH1I3bg)PT|V16
zi#+4fxO?u}8TNao+O?-o&b|6w?-z@$&rDuFedUU4R)DlLbB{$n8;^9O8y<f7X<Xv`
zd&I3$wUHDx=g(-~+xXGYxXgN?JwLNOzb4#FEy7%DhYB*S5})xd-_pYp>lBsY{OV!Q
zwUbttnxuzGn|tJ24}#n@wJR)+E`f#NN-twp-Ti*H;m`_fKBS(Q<M&|CtPalXyoNGq
z{I4zemM5;%06Te;w+h*TXC0;ySZ<k=<EhGrJppm{bSq{P=fAC5jD@jXaE*f$qj%T9
zYF(0Y!bbbXMuCJoN$SyjLqUvew>X2=6K?gfw$4QQe;>AyQyZTFc}xSc5aC@p&)D{X
zd*N|D9=CpZt2-t;%_$3#m1hL23clZXV5y$9WeX!984+#qJ!2u>B-1&<DH8z}gg5`f
zZoY}Cdm)gZ6l^SAGdR&_2>8VUR;q992wr(G5|Y1TSYsRB$bR?!v#S5Gelr$%n!@^j
z9R5T8bxebV<q$kdr%7q!z8G6iQ!QRFL6XJ+q5l{@&H5g!MYPu3o-}*?Y6f?mS@!1n
zXS@lmjND79N0vij{1-M?TY>|;=B8R<We@B@O5JfZ@(#7AYDsx>fRedIUA}>ZB5)Rw
z3l1e*8jH*vkGvVJR&+hUQvmo5<S#dEzc-loHB{JnZRZv9fCjOf*ZAdPIkfQnL6b??
z)TP+`1yhTrH$A%8>@+tj#Praoa^9?3D@Q_*4rFEXD;+~Uiqp?nA#3{*Y`|0Nc@4Iw
z5ta_(n`=C!ajr@56<y-W?qe%~X#w9s5T0L{J8d;PW1^QKm1{J?iQD&4)sa)}Eepys
zd61*L`cj;5xuN<%!V4RuXfp$C!lAn&nu8l}z%myzP*7f|3xE|{Dw!i`0|?;NoB%}<
zC~S{C3~l5)x<7At?i&Axh5xDE)ylYdSM{mg>eGt@*WCYAAE`!W`VoW-rg*y*tUpKc
zXn12QgaFnTx*4`_GhI^OgS30E<1}023!%|(3Xd0}`OGn_rCJTn;EBQ2*+!34lHnar
zg`)1q?4_M0#4J|1{T$-%6Z~K0<h-^hmcX`840ZSs5AxEuto)LIJT}YtrE5A(A+1WB
z59G*)5n>Dd)UAN0S0YE}dU=x;MFLoP*MVCSIzAHitwkfXK0>rXFC1UeUP%b&MEcyE
z73-dg)y<Nv%9rboE9{$zUl;<j3RdMGmB_rK9cytonZJUp?(80Y^CsO~QnJP+;?=6x
zy$UbWkr7Kd>@W=CMnejUKa^LL8-B>$ygW;8!xLlMRMJv~dc3NbzC7@MREGET+Z4!_
z)%zB9zdVjQU{`z9-8jFj|K1o=&<9NL2d;69$(~D#F&F<lOKblt`CqSURK8u<lK{;9
z14sUiCjX(bfbX7Ly!g-W$5VC@Z$lLBzzZWAWbg4=Xc#gc#m~i6{d1FAs$MSs?XH*C
zaBIitq3N0QRksHY5=#s{s_){U0j*KrmD@gfGcoF^<;?pKBQ1fL-JjGg-C>Zu9hTGX
zT-oZ)3Rx6UO97<t9>MJE?2rl_fh8L*o!RD~ia)c?=RtZk`3>#2r_!#34bxQCC_xuu
zL#G~uO#!J8n|Ra;Gztkv>+jrMm@8g@O`X{)8jhG4u3O*kLXg;s=Qh&yRMXonl_HdY
zbvoc(mmS>BRNVVE>Xq=}DK-WhB~)}X5;y@`aMu{^fGDDgdGISGoiO9@nsBL?kuPj&
zpJZ^F{BU`(lZ20JABq!92@iK$aiCeVkK1G&X3kxTRu9nRZftg%<AGh`t&i<vQV-yn
zZ<LOndZ+6jao(PBPfATCU;X=ot*2pBw@Wjn43*mdN5KDgBXB9cOo65Kujt=jfZpHr
z`Xoo73(}0O7qd+evXEs;=&dfP9>am1=SycIKSCfrqw?K%nNfdVN%6}jHf>*;0=klC
zSt?eMqV__WJ;e{40`k7pgSOu*L_-a9os^X3CgIfav<_j!r=8K4d0Kl8?s?7?c+SO!
z5*~yR=o{Obo7z_CrftxQuMv#S7-?T+&-65)i=mU|G}>a#lXbRH=OxK@WG3Ee=n}iH
zypf+g|E3c*xVD<wK>@0yoI0^g^stp&=LLv`JJilfcEeT3+#O|w*R|ZKCE>P^bffiJ
zc-AMAZTyZj`7nlm2q<ehGZC4lkoB7Rf+1R0{*%aDiq6=Hd1~d-oHSOgs&GnZ9_{r+
znL&e{wQR&3S{Z@VkdO_Ugm+|5qH?<8j$uXNn+dyn-%kAOs`3w0x*jq)5mC&#c%dZt
zC0VYAYqz?C5B>~uI)c(q9)416zJ=Eei*pYWff;Jw6f2_34Je%-xrJk_HQMOVqp#gG
zbmEYboAe#jzZ=gtRCtg`{Z`Lu=S040Gg=~VgGK(z;DcJ3)YMl*JlZ&zB>Q*Wy>*LW
zv73`Tn<r(5;d`un4UbYu;AHjhLbbjw1TZOwxeAU+z4lJCPl-&pwiR@i-N$i!B~W!k
zqFhU~O5k}v5^fDD{r;|<%b-8(0r&gpo3TP!hQ^61x|bHt4ToHZt_>MqsJKwQa<}9S
zrpNCvk^|jWd5gB?hSN*H=iv28$WS638C#<IA)@2-<ul7cJGs%@Fz?n5Ub5o%x=`cY
zO*8d@QCx7^2^lPh-A?<?<ZIlTgEjAGRc-w4dS@mp0acB+^CMTPBBjiPwS1`&tcT=s
zLF2BKlAv0(ntCpS4v_Ol^4OINSz9X+2vG`z^Zy&d|65fw|2+r&voBoMPG<^smHBl@
ze`|F2qF~QobA%utEP+m5tVn#C431g@sBWAXJ|XF@sSC~)6*zFV-<-i|vLIE8k&G5=
zLKcHj%<rHGyLOy{6q}N{Neq0L8N5gDSHV_-IEiepS-tVt>hAeO6LuaedjA~1niOjA
z=CGb2_h^gr#aDpP4#bvLu38>5(MrLbw_CFwg+%eoE#2j)CGgsBbDUh{Rv5)d7XKYv
zBO}(^)FR_8`o)AWw+VV)!=@C~j>m`LpSK#Lzsx+Jx>KG6hSy(Z^s`{}+qF+l5(@c?
zwo1l~b4fmMy>L#*ORxObPzf>E$-AQP>SsIS3#%13-UrYfsa>yRr}B4O-;8D!Q>{*G
zTH+3>)#UW$@g|E37kO$s9ldcn@{58dVww(FmS<fY8L?U!Wrs0s9q5$@TTTFDY}4sL
zKnECm9{ZJXY~KjTd+aMl8DkzH{-^rpjo$CJEF16}`;~v!l-YLNo+Ml9;4ola;$7xB
ziv#3ko!7p^wkX$O+sCNSv?3ye_G4{(+k<CW7C-4vMQt32KxFmAgU;ML`|@cE!nq8A
zE@}O9MpseUTNbp8%Q|MC!})lte#%JtPsZj<JV0B$#sxn}-_cI@%T`?SmA6ke6qan1
z(ChF+0hVxMRT7^JsYN23Hh}S<8}AK76})EM`6xhx?@}jrS<lSQxyxpgGg1!tlsc3n
zuj{AH>!+V%hQ0oDCpSQD_aSWgscA%?9eIs0JKtz*=6%#oA$VBrwLK%7Mm#t0ohEvs
z2D9gqsz%~n_PU~|`Hp5nLA6@L=FZqx9?eO0z56mv?dQ>5;sCyHM<Gi`R_(JIzHC9s
zPE6B(YyI>X*;)hDE)tl}XIGol>i46|r-M{*Wvfspu*9hF8Z232oW7{}VroS0_Gc+^
zuVJ@osXv7N9`2w3O?2yp@VX7d-mVLwgdd6)-)LmNDs9xz95%mDQb(}h#>W+hs^2`-
z#-2}P^7Rbx^IT%kS9sSAlWH2@CdamPKWNqCGSP#Zrd3frlMeJ5eaZVi_2{Z+K>&_J
z3T)l+BntS&#7ra=2rL0YQ;x{QFlqX1KU@EAs^*f3^H0Pd)x$rOPIaIsgaT}ZvxqOZ
z-Sap+n)01+=<-yxqS&&p*E6h*wkLISmr~zY4jFq~3d~S`Zqb;xJ!LZ(AT1vi(f|G<
zS9Tg3&@Y~GX)0cnL#Ijy<9T>|5Yo@rlteu*HiLTYZer;=SZC^{sbo0_zl!y@!20XY
zHd>^UC{q*Do|*rnB%IN$0oiQs<qvayTvEUM%3Y`3shVeNmhZ~hL&orB!~8>Vt2&6l
z!@}}n$GEa_JBy@WHun!@{@F+W-A(^Pjgk1xt^Rq3qP1M#?qovZE+5NqkW00KV!-8J
z0sCL8+lThFD(p=xzJ=q^6J~2IXRR*&euJjew-rIMg_#<uEGk{{T;_>3Sd$LppWz&b
zdF|;&&^2$Q-ZXO3#|3x2rF_!+`PK3#MlT?!Z*}>GZpz~2L$T0IsbYjX>i&VI!)sJ@
zys2VZp-a+CJ6G@9rE{z*osDq|?<`^4N<dzw?!-wYfbSj6hIja6r_<<KAN8U4;mB%G
zSeIoA=GR-EJ=Wzfk4%m>80z83Aqks29-nl04xT-Ch+V)~b*X%@?E8L5{~Ywx$Adz$
ze@Zy;)X1##HMxtIjCQ~BwX%<6HJF}wfpgs}6|qXMm{ha@uKpU5Htphgo8gIq1UptC
z9gM$jQ+RYZzJ%BK?q>P<u8+Kq#cgvMO~w+-#U)kJc~6F=h~i%Bt4EnFHaDqW0UUu}
z{t$htt_r$a2$q@Kmjn@+5L6CYFRQ;&hp&%0`;azSTFT_`g0GrstlYif@o%0It=J*#
zdi@EgeCTc5zOPZe2LJlZV~#TqxmmKu9C;FlV8bq=#oye7-^FO&KxyyH@<p9oc`=&I
z<SQKDCrrC}zc#pF^-g1DEwhgc1nkVg66h(vIT`C~m$uN>a3R;Net(+Qq4qCe96g$)
z(%AvnF&g%wnq99}U8z_8iX67=RR#C!Go&4l%K_EI;O)=5Pt;21gfd!$<;0#{Uzlrp
z0~-O`z7~n(Sb>^7;#Ki`m0|YIy%>TW<^~dN(PZ{k$Fw%bHY%~&Kp**!T=QbLVW3``
zr2*w?8Pe~+sgH21`&-C*?V;|V---J*0IJ{<S0NrMIK-AzA6h7DD;q|*5mkE$lf%*;
zrJ4zD7OyFcIQS%>Xku2^^oPfPQFt9=I&e=9hMIz-8fjk8Vl(G(O4M#{@u;<TnCkc>
zzdNntrN=icjVNt+HB@Y!%PrRTBSOb%N~myblObT*4*n%9awSL|<ko{vWF~7j0N%sx
ze3h2%xi*EGzsc)CnQMCX=^?hku^B}bKhAP8EE9pzHs^HxzqdubR%foc7?8)G<LC}*
zC^DNs+zq(3LvYnf+K>o=@vfhsIA&x;(sg*|eSY%p=ZrjnD|+A+tR453SQnN#gRGTi
z8x0-qyJ^|hWoR_<c!%joR(Op?0T&~HA6&}%tEaCWnP>$_ZaSfZYZ-zHv^55lqHRWB
zEPrS}*<uojNNS(!V@W8-Ch+$cRLsP(s1!SKFcLB5r2G;BXZgFuU@tbqBjdTcWI%DJ
z(tV{0I{%1-nj;R8ZdHSHjsE7_i_L<@<u$``|75TKi_zzpx}{k@-ZKCI3$Zj%JC3g2
zz2>0vtgO7W<ORT+e(7q(Y{I5Q#Elq*Zeb0@<R{N5_z$*{22^bx=QZXD^Z+?_R{6Z?
zwKy!+CG0_%5yc1TkS144*93dejjlK{X$|x<e081iq-uAlTKuTrH7rbv0Yg0Ql-=|b
ze0-TzAfYvWJek|tk0<=dZ245}Hn*2{RLxn&j+L=@frYayQXw0e)73z0@lB>Z!N5Mm
z)5N{6o?6GJ_J?@qg-QI}r^F|m?|bXJQj1v|E5Qb{Pp8wxN#w&wXrfUzG4isC*Ay`}
z_tkb|Eq%xn#T()Gf<EZh&s}QF%WTTK7R5p+?S5@n#Wbi@8)TC2K5%a=FmEs5<=)<O
zN05Nx+aUqGF`8(n(NW@-#$2sdtZh}mb4ojGl^dMLR0D6#$%!aBo#uX$q3MwJhXen$
zWn6N1{Ju#%efZDmPhRdU+@%nYJ8Y8@R-eixxUF|ID+=j)uvb2}bn{-}g>bv^zaKBP
z<`?!QDR#;M)`h`U@Q}7t-TfCkwk$*NI#X<1&%+|8W#h<<fRO4<ni~CD%R+jQN5KXk
z?mep0{^-(s5w|)6^`FU`Gs1MeZp^a`D#_4k^E9y=p|ih?3jGDPzs%D++R{ep7@_##
zNxO8vgNqJZ_ZH>~7Uq1T;L8|u;gA$DzPQnkVx^r0#Qk?)HNq$)xM(>1II`A9W8Qs|
ztGkh3X{<i)x|Qr&f86C40E7Fd0fcfLNr|TXr<?aN3#pw6%fnaAT9wmPn)DKn84L}f
z^K)f*&8cu!GK0hzqy%=iKF$(*_WCI}-v5oR(o6QCpx1STJM+p#ZG#^f-#)zU=)PeO
zvE}gmr(W>iRJH%0r^Vvw4am`kVtVVZhJ;U|u^Sr?0_Z4wzAGw-R@wgHX9m82Sx1}r
zK<FZssm0J-Z%I_a;Go{XA}aMG=ch*x7|QYZxW{xcR(h!F=Ms%465LT1L86x?S}2;$
zjmPu#7a%Zn8J^pl1Rol`2bs=;<m%o}jz=Nkcgk~8Ezy80YAo`~c~8ESEhdR=rityO
zG1Y9gSO$sa1Kp&Y@3eVB>;TTjq>GALI}FagymR`HX9F(Szz;G}Sfy?v2byHihbYI}
z`pc8(-7Ck4u{~nm!XK|Yd|;uQSI3K?wV?H2tlHHt`;aez2ayVmx99am&AW;-nCY*S
zj(v^l;vJo->b90vT`@2U8ShB$@wsF)n)6HSmoA!oZo&FR&lqIen&pij_43_bRCEZ2
zZc1}_B4y8$7*hFb>!=9bCn!hyS<=;NFMjQ5%GvyXJN18G{|{%MWpa!3<{&3cv!Un`
zTe<4&RHMW+dO_!uEnGLPNGCfD)S1AspP0$s@3xCuRE<-y`FNiBUC8B+E91CPA0pq-
zg`A%L=V?IUy&dB{rHEAMUJ9wA81ibkTV$>ZBpnUXEH*fmOBTDI(ITpwq0jZugwGL#
z(G;yph1!VuCMa$73md&J7HbKQ?0={6c3;@Cf5+;Q@2-sBZa#gVfkAFadlXW&WoQSK
zlz#$@qul9VXj(btXHuO`^|Or?U5K^qy?pNN-Uluq6N@?deHyIhg@>1mYm-fJTU36z
zPK}SkFnfD%*JM%PerTfj;`Ttn;CoE^5U6j9OMOIru5pQep(RnC^sqzbx>)n9g5E=x
zLz%qEk>bY6H&HuIl1n>`O<TtgPUyQ@MIZQjY2~(q``TNgv{voNt-Nw11EneImHrbo
zpuOSKi+4{mKmKnO&1-@7atlHXKcnTv0(x^2I1>yEI;X{|^q(ze=09g9Qh+{)>Z1p0
zJ_gAcGhy?|+lnu6)pkCnf~p7`?9*fj8#aIs6M3_oJTDHqpGLQ*f5DK;aOeOIAFjWg
z8{KjopUe_Uy3rUNW&3_Loo(yH5PqYSjzEJK9V!;aSgj%+*7O&uZcb%di_PHj7ItV*
z+QT5$Y#ar%ceUGQ9;_}Kqp`zdVI4V3S}_GoqvJk*HP@}W>~RIHKDVCHwV9be*~=f>
zS<$`JBT-t{@~}!LBuzv0_AGx+?q*BG>)lyRG@{>q8o+ZjP%S3suvL(a6EAu1Vp>iA
zRmotl_szRz@`MJ4gP+1AIv!38g@sX`A`#gUzvy@FIk5YukqD05Ljew0a7a)E$n~Sa
zV9W`tp$$~=)gF_oci4T#+_t><T(-shKb&s7E!Jy$W<UAF-N}{LrM;HPJ9o5#EOv{h
zwH>xq`nnxIpeG0)4$~BU6n0<qdvr^gO>0?1QLQTDB;N9KA~VBi<X9|A;7O}fkCB!8
zuSUr033>6iET(!#)DeyoW`8#^Z1N^%9CyMy&^BpmM|2X<d~<nsdqPkKkPY9|LJ{fC
zFNZ&`Ibvz7giMVj_-Y~-qMhpU^CW$}j1v!EP)7Fn+@W}7Kz9@0wlxQAE4cAdFs+zE
zTfsSMu&|qwHLYYR1oGE3&WIoz6t=)FvS&z6%^#W}hp$~4{rfP*Mov6_)P>XMKHe^I
zb5bc^fA+ew!}~~!pyVIm3i`5ut(xhQD7DuR4<klHcdYN@72cl4Rv6&{bqslRUffW8
zY-b2Iazv-5qF;k#>c*dB7ZuU^<(4|p=y>Ov4LqS>5~h#;TTt7M`qn>W%Kt#D{v}^N
z{lDqehaXYY^;|de7MMfZg=6u6HC(bP=LV*NDzwUk_^CSTUia5HI+T%|vc7!7bven(
zM{hXa@+%vtwaBjTxnG(0Vc$G4+&NjMUzpU+-b%;i^ob|ep3n9(>1pD1B(kEwYF@<z
z%4~hmggI;~%){v=+LVhE23&I-OK@G=r4t4M2^!$dmK3mBDR_yu7+j5VT8xxb8Gg;p
z)I+)q3YHSE-YLDeKy^Hq^4X}3wTkJdRP!uNF`}33%bPCdJ~uZ62&@R{LS)9gh$~m$
zYcZ}^qi`Qyy}xZ7@nO+Wmb9L3jDCN9cK!y7p-pgC32&;yamf5nt}=iIthGFvWXW<N
zm*&@f=i%#C@h{w8b^jFfe%xzjxD4(;RV_hGbv*Zr&lx>`Kq@*UU7F7m-GNB!b$Fnn
zc~ja^J4CB~R?jBn3X@@T7~YlihjM-cX08uprZ|I3YPN%iIN4uj)ztqmCRADT{QJw>
zc#hDxk1uKQcbTCz7m>8L9#;H7mU9KJDt99!H<{7FG2Cxm7{E6(X-9pIr2KQ#B3&WQ
zH+w6XJCig!3)#GPf0&(aJJHIEAuj<v)T5vQ29JkN)JXo*I2k_d^4%6qrGcwNyjT_W
z$Lq<pm$Lk%pF;zt>?6Kt?(WIpM|K`xHoTOek+uNKhc8<u?l5(FvT=v3+H)0x{I9{h
zD}0R|YOnqr|9aZMYyOedH1Ts3Hsk~vYY*DJCh3c3uefb=MT8+4btM#BmEYeLcOi~>
zx2bzeTlX`vMQ4ODfxq5r5|8H}!ng9NtT<#0P8-g_4CUvhJBW|^Cl_dQMtxqgAFW9Z
z9@G1=vMIHipwYtz$I&~6Y)UCir3E8BB!G&=jz~x?->mvt?ZVP&tM<8Ta}jF)ZM^^Y
z_5Yx64sab8nIx9_F?tdkimm>3uh#Xb-k?<<Sh^wLs%;A~mR(YhWK-__fs|&%U!QdD
zx^6v<)0(i8fGgX(^I!#Tly(*?-Py>|{t4`TI*B)%x*yK~;CE;DrnmabLJsOp8f8T*
zbmJVW|Gz9ijRvvFny+}ymT147$K#L+pF8I-cio_NGRk7{<-607NN6S|%a5y@o?nSe
zF*NE1N^tYqK+2l4;Oz(wk!DeY6O9xljR$CFHYY!qbLB@=g3Y%+e}00;m&50#c}F`Q
zW$-81ttVy(m_E%(ea$zgLS!&(u5I_Aub0<`zwJ8{Ja)3A$;#-HmplULer78nE~g$?
zD{67Pm9%1UL^F?K2Jr$0_)-mGX{*dP?oJa`BsT8_v1Bn!_)DO%QGnKMyGjbe1-v0Q
z8%tzm1ju6%j21<pifP{NP+KLea^zrcjXTRf1)Tq8s{aRfCFj!i-i_zfMAq~ZmG~gP
z-y8!>tF?<UIr52}CFQ9-->B!YxAoBO!NMq>*DK~msrOr>LtzH?5VLfs2xI9btocVu
zp5gL5fnq5I``uk#Dmk6?!<2p1tkv&p=Q>+*72X8O?f_4yC-L%Fz>!hkH@ey7Y$-x+
z1g%9?OZfR5T+TM;ud^h3g4VzfHE(CLdBUZjTHV$$>bD=JQ5TNZdb*l0*Ly%;Y{e7(
z(;cT-17oznfXl_H+76n%#!))KYQURgLR$4DZ+KGQls;?8w*;0G|LRzMt?NG{#MV;6
zxJr4}>$`PXE|rO6Sza59dJpN_hafrXH6c&Jam2+N7E=tlRu(~?O2s_drPYeYiBoXf
zIxPx)TU8I$6l)P|(oYw68wyC`E)%DRnpB7rq4isF)51k-m;Ug`Rgf>P5lbxPy?1x>
z2)1_*a!OmF>C<E8?|G!wXI4c|C#-SAk6(!|BVC;^s&VJ1fZY!ZxOs@o2IYA?1YM=e
z-AxH7zw8U|{kDCV0;!ke6Cc|s({@^7c7?kW`4j=0>K!>nx(n)JvoHaZ9E!gM%}iTf
zn~ywGhTMn-g*yxir~1n&%gFEE>s~16c2YCxT)6Jw1{y0jEOQNs<fw;2%x7jBS4H{^
zT=p=lZCcarV6WkPvytr~196kxp?hO4cSO?k#y=xTheCb5;^m4imaZ)neNBA+<Xs=s
z-`?gBbRlq+G6``8F@|aF)(|bjOq>JnU$VU0Tq)G56?0%T$S<w3Vv#oJNii!GO7?R5
zR~g4n;;cQ3WCG6Ty|{(t4ngWQX>O$%Rq1#P2$>tRV1&X>^V5GmTc-KLBhL|&?-ljQ
z>10u{8Ih<N=82MS5UKtw-#yBVs&-|rYDkEY?4+wG6t}?A-^z0Pfvo2rjr707E2rYE
zWYO4^$2Vl7pzo%6TFUioMLX$7Uee=MO_8aq8D-*?1Fp7?-nhFxV5xg`QQClSWfbaL
zYl^+}32>VENllovYfMsx!se74Rl_>U`<^l1;3}>ad`sB+yJgH|<cI;0J7npHr>lU|
z6eaNeyn5OG{A}Z`uZU;-39Ve*ue@e^V>Ab2X!UprzPXhQ6-hj3Rp(i40nIc+c6nb6
zPbs5Hwd+fEHHIoCi($T>6bqJjzENO)iL-a47eCKR_O%np>8f@SDA5Wk026;CB!zr4
zf0&L8hO?4~zGV+NsN3LdZ|NBLQw)aoFkWNG%E{Lqkl{|b;ZA6zm0+#YTw5yl(F+dH
z_GZ!Z-*e11)4w7(|G_l>_x1l^ozF(qXGFjs-+TO$jPap;X=$m%eYpg-=xnIEK3U$4
z@Ias0daUmE-CkfC&HW-SG2&`c=)x{3t2_%9#d0U$ja!F|TcxT#cZ#MpPTMc<zo-Um
z@-pu5TEH%Q!Y}i{LU`&mzVPpdkL0t$Y5XTSJ}0@cELYaov{Rof_MsL7ZR`m@#Syl&
z-k$HI2rF^SL<1J02vTDliRx1e^n5tiNdGShlJ_77d6+{D%!Z<S&O65CqHd7e?IH7T
z)M8)QB#Jh_j5Re)6HVf*YVZAen#-HDRR?bn>&EY(QbS(bgFY4r1cHKUOOp#@F6)$+
zjYJs7kj*Tf>h~8Gx~OzK?@h}Y-KRc!mD?^9N#YUiE9cUi;V1r8Z@=6RbH4*Egx2bx
zoyd&RRWyiOY_a&uG1ut7iy{q!bC;M#JAOF+{HHVc-*O}WDKVmHJ6vHq94wUPeL2mW
z8K>B6F1yVuH`y(r2R=A%b!kCad(ehsY(9Ibvj?sgL{)6DgjP8iBQH4?2lpD6+oeC;
zzi3rPZyyh(*dUyfjmnLP!)Vnn&xRU-_SeQGI3I`6It;cJoFnn72LyK^yyA0u3WEv+
zXO|6(e0KSKJ+Z3qxb*t@B5t76<j#K-ny(jMtaBY$tc%*o#TM4)ry<C>UznCncpQ`S
zH7$17i}FJaiw<&Dn95v_jNQiHT<<BRc|`4}Y+L?-(J-Vmcw9k+*DR&>QL56^5UP!>
zO6Ox)(a9a?r`pNJ9Q+P?&S#J}lq*;EM&$!MHbIpxJ73$NKX$t2>_U5MYPkkJ3Q9>i
zl>cHC-F^vzuEixx8YE8oBX`C%3snVY4S-H7X=<Ywx75vC?v^)ZDF8+EtotWjLg&+#
zJ+sz;Kh$<q*k&CKYDGnO)-eW(k8O#(`(B<G&pfnmjc#mp+!9yXzOnl~BlYCU9N}Zg
z0VN{1Ldgtrr}|}oim(cpo0O@^Pq`!dX!z<_R!5Fm3NTr1(~ryG@15Dkay){>!tIGA
zbknTK05(>glF8Nu1n#$L3<d$r)bn7c5~4Si*><jDHs@Hf!HP}@?OFxPkEsJd_h{(z
zH{{#m+?yq1x#xolOiI6}AgqXu23~T?ZLsC`E#S|;FC%rJYkxBnO<0H&%GX3UIl}Wf
ztktNB>ErcgZ+;w!&-uiqHt&Tt67hxi?Ha4E?>N2xx1<^*l2$FyVyuIy)e+O?xJWyl
zzCWZtOEnxa|2ml^p?6WF(@87n17z!|8@&U1u$sCY;70JEIa<P`@68ZGC1$Nbl@(s}
zQ_D{VdRKXSg08>_KuRbtI@jk9&t9DMif5bNpcnUkxN_{8g|K&%_2nWr?XIY2qKrx6
z?HdEf+L@`fT%X36C@^3<*SJczYE6lJY|$nC06t&LkgocCm))wz-5%tW!O_dDzIP6#
zZKWv!5X-2ulf&+&K#5f0st9OkyBh78$2oa$vZ;4`;p{ZtNMOjQ0w3l_ZbQlHeF(+J
zCD5z6pqB0LiiwfCs=3xBCdAGD4fkx~B0Iy$S@h^cn?CKkg)Zi1iXO8M#4Aww2S$Qw
zUbBslGDtB@W#Y*-`CD|(zNk6<;5o$0*L^`0(@hi|zm-R*zmG18nf^=Cd9y7QpoT|q
z%|)-0qb;BKqH_71JJ4=vY9!hoiJrsL{5|nsA?g0<4lVZ+CB}t|LWU@$&i|#&6~k}b
ztGc%O@#^b^0)Z!aq+9ciAGvZ8kFJR{QHbx(V}m~>xHZ=@-H8cp>?$FTOwAN&ZcB)5
zU@pj?Z$&-j9?RAAFbWV3@cg#?h0a&AQoJ$m7VU#_Is;yPoT7q>el1N5&l!`1`nQ=6
zP(IKe2oa9Y@rqX;C=_r7W#=18)gRCaEZ*$;$rsmErut*N1Mvlv8}ge#egAeovbv3&
z!+XW5ECJ28-?&!xxbu+zZ2`r~#?!YB(I?`&AHe5X7<vwrQ5Mk1lfYnLvE+D%L4X`(
zyv)<h64v8u4S$Yd395y><enC9+!N_*H5Oej&c>~7?d6voh9@xO?0&_&+EHM+_sn0g
zr+cZR`xgt#VT=s@epB<vli`T*+|@fV2U2TytHr<8b-`+Mo_B!QktU+v!}_z$SFNl>
zrY&*7=*(+Nlv7^0=8S3U0PnrPGIe`SDK*!JcQnrm_~yh=@eG%DmHwf!lOio=uEnlZ
zPiK!hkSZLrkCF@o_|R8gP_OHM{*04-ebw}@HP1V&<Z?<n(BBQ*yrY`Z5BQ4y$v6qr
z*dd6Q*TF3p-EpHI@uRWw=4npFs<dS5#9{8Y8NmjU8mTiXB{Nwm=lLQ;*SUZpY}tr#
zVcG+cq#vUxGcLph54^p3)Hjj2CGEy><LC+^-4y$|FsA_xJL%2)uO=ILV3&CsRcGu$
zU#?23vQa`G&@{P#SwI6QK6w+ExPV9!FWDa`_|X`}udb*!1WXsRc1+Hp52!F$4Fyyk
zAv31D@N^Au8aCF}De&}a%z$2bVFrPFUhG*}noh_ZEP0uppv_xPp)51Or0T2h#=gc8
zmexQDixM6*4p!;au39DS*uVmdJB0y|5w2{Ut${t43E%;l>^zhj?Q|8BGtn{dJMS9)
zzYdDXP2pNp8E;lv(^$BrV=>fDQ;wg?Uh#SF5+n%IDBP%Y_vjLp#TRJ#S2n%c(70bp
zuV-b4Z$5YRw@6Pf_DMCPY8cI)_gP^`%IAksIB|e~{3I}sxwDKrp`Iq~o9iv7_&grv
zF4#+&gvqJ+)R15~QVE`=i0M6oB)&QsX{s1OZw;{j;(;CYVd@^4QnCvOM+(v=X9fl^
zjnCNZy%VhxDiXP{M#)PJU$EgC#rO>6^w7B*aVahSwQ_g3E1h9@sa&*KwMr)-qfzEk
zIbhMG1y|N1UK>ZB)z=k&(Bhs)IFj&dGps`XEKqxo;kSl?*ySgTlqPhx{p~hLllkf9
zE6fKpYhG9C&#C>o@06PK1mmgf0(c-`E?+uCX79F5GEIcvarSP<O|zf8*C^46BM|dQ
zaMnD6&af&bV0|b+F8Zf?xTne=4)=8|`zHS2w2LB-1jwK%#u^Q0?jIBY*E8GWILHBq
z5$3g>rml8cfC`Jv%!UH(ZBRnP^Om?WW!c&b;>n6`0<IdVNY$>KH40pPyiUl~^eiv|
z$a~@JnXy+AmbiKkt|0`}i-|S`kP4c$3e}BOQ+iL>6QQ3r0KFK#A-f%XlayDOjPEP-
zF!%hVQ*Wamezy!BVkofO4}~RvV7aWab@hBsLmr=b>vwNVC_yvrc0fuynX}8zgX=w9
zr_r(>fxZ=>X**wG>v&Jb#gywwFj6m9wxl50-d$IISKU~7t?U5Hkdvqh>iw&uF;162
zbioD7a*Uf%AMv(|<_Nis7b|&CLSBQ+#0ar59>z|dF#5uCr9SW~@;EL|SyIxMV}4RK
zduvX!oFG&`0Q+^;A*(emID6FGBTxJq9T4GuxQgUuzkBY$j`e>%-Y2Nn<q3?N8y6O5
zUfcVduVDi~H(K5qTTDq-AD5iZN~4YNBa{M*@vr!YUe!})IZ3-cz9w%@Nu~ACmbsuD
zL8o*Amf4@Qn%i*Ayn;Wb%I{zmUs-x_PBku~&(J`i9VIqqvUl!n04r+RmB*Wuz!9)|
z8Xb@1$y;UewOi5(ZDwzbPHT!DWJF_&dVs?1H;-vTm{7HuKoYYPM|2N-5?59McH%Jf
zR^Ftjz$~-+o>10_r!`ha<tKBvID&-aCO%P$tR3_J=Iwvyhud_{^i_MsxfETruE=|b
ztzC5%Qt>8P&l9APdwBSrjWA^9qbrJ!c34)e?R=e^qpCfKPv)6gkdG+OaipFnR3b<?
zGsHM^Le0BEF9Wf&#y1qZ3s^jDq6@!LX@c+sPy|(pX5-tlr6JwmKb>y4_w8@RvNZ@T
z`I;@&T;&?VGNJs_`x;~4LioJp!-xf+WW9|iv{r`CIn|40XUwFmz3VQMd8R&4D!J(b
z0<8?Q6%#koEvGJ(x!kYGSBT^=7$YO1)JXB~5&g7javXlf(%z()Lc@jIgHo>;V_r!=
zem~D&29OF?rn%DW$RGbhBElpStMfb^q@dhx?;VP_cT0_$ge8YkLF+{xY<ST4d76;R
zo)=LvA<FPusYj~1=ra%NFEruD`nFQ{yo?7*OePefffLse{({~WWV5*08C;W;Y`sh>
z*y;&?14V?G$zpJ~bx<1NdYds#!Ht;k3k{};A&d^sK%IxOr9>_GJdGYRp~jX=Q>Ro{
z@Y%mun&pt#tKBYY5%e_b3F@-S%1yG`J_E5zwxrV=={_CuZO)dKP@v>1`ls%AOO!>n
z-4C#6dOkN%zXg!)*i<SM>noqQ088T7_sV2HleS7pzk-Ujy+5ib;f_k+8_HuPKONBP
zvtxxb$c$Zq$ve>0Hsv#C^S<ADq{PTUaYxI?9T^M9+KL?y85}Az6FfMeaKldJtMlAg
z`r|#~>(PUmgByAOc4nujC7{kX?A39rMHJ6G0vG(%%q`;%dau~e&>o`HUFJ?}r(lp_
zv8P>9B}=(~SDFFb%{=Q{3r>pXw-^@YR9sfEnqtE)n<UoZX6c&gP-^7OVmGxF+=vF(
z*l=Wx2I7!-fiJ1>nM0FF_r_I#yFkwvXEtKu8xdSVz_Z_alHo(UWPq)B7X{d^8wXrg
zwJ_lyicFX+OWI&G7uI;oL)$&lO6fiKNaO)T1_h43F%yk(=-Rk#<>+eZu7`j4q(7X-
znNHXZY%j5H@=ggIBx=zYj;&BK$xKz746=}EXq2=vuwKT5lHp+1PVO1acXA&y7Fd)(
zw6)>9c?BQ82f~KIN=v@f0j##GIiBmZ7JQ#L-MELwN=KFX#1X#3JNa~k{PQ`kj1g~s
z<{u;i@J$Iwn2mC}ldDp1&DEs=tY0>Bv9_Wq3sU_NCU@PJV$Ou6-_v^?DfuwJDf-vk
zbq(Mdt5+|VO4_4z1#T}ntRlYbv~}7&l8J|M|Jk#r(@@jDmsijeOH7majcZ?9c#4TG
zZy}uXlghn~{CrihYZ5O=<99>=l4(HAYrWV1R#c`0p&Wa6CsWS1bQ6`3fG14ky!?V6
zW@&LNjPpyk=IOgQT9`Vzn&pHBk4y(c!jLwjwx;>qB4q-oDwJ%M&ZBgVrhXabCZ=o1
z!CYj{u6OiFZ`!i#pEg(iVkdu-WJRR@ha0h`O4p7y%#Svta9>d^fl$dBt9P%bETdRd
zRO+ew(a7mW9{YHpaKmVHPLB<`XE_yVIoHT8KWV5mxk<50&j+_3QPuJ|WrO`@2^HOF
zGa7Brg#3HjO!^-RsI#s`p7c^ON-S5xOg`TI@^cM@SZo_(&gtQVm9mIDvh-v7NDWDM
zZu}k#d9oNMnhpzrzgRh>S9`DV#EbPhgg`+DTH+N*eJqnVy;mhcT5o1bDGVTHe>rA<
z3({Yf&;ti{#O><N{LNMj3xtaZUkMRW>ItaJ2MxxUw5^t?DPSf?J{~i}($A~IMXM-F
zRdGE*nlJY&Uhc2cudSV=?2QB}F6Jw*(U;y#GG&>-$tX%T%e^7x9!?r}AZp>eBu2jv
zMcdfufsEEdNk%4#>{sUUHnaQ*nDop)OhU=m{EQy=>7uccQm+1dSMz+hZA<eO!|<?T
zY(4lJqV?9^U5abrWRuIH9#Dhg3yj42y~Lj9PB3BVT#l0F?3R7a9#|k6t793kPMc{p
z6b1?^(A>H|LL2BZAthjWK!fSKeb4X}(>_yJV5+o5I-r@7DW&5wFkSKpr#)K<?8+L8
zEc^N~HrvvewRD7UDB;Czq-ey;r#Y>~&E9X)hfG+lK!jW~XRm`u%M~Mv;y|mlBM{yu
zv+1Nn@^8b9It+br+~(kb#U|nt^$%rQI=-1K1t@!yy1LOM+0FZcrn&}oCxXW{UYT?f
zjZ4pcD3)+y%@LqGj9+n&$enKPUVuGT`?BBit@(EMMC(<-5DUQ&8GFdH5f4x+!KJcU
zTE6Gil?ATgRBh?m$2g*mR)EH)U;JTHIO8pU=)GrzUrXv&#=`y(btvkAaa$ZUhnIcm
zTTKML^g45&sP@z*!!6S3<=3@A_V34pVkYdP>iq!K4TiL#gs#{=;Pp9f?GuGv(91<F
zgfai7AGT~n$YPyjX)BgRROu>%(}!aa`91UJE~_A8{_Z^2)093JLp=|3>g{qDpBRKU
zkQSr<R^hl2ez(HjoRYBZh#S``Bv0EDc0{yLw1@^U=@{hv^P00mX&#|yQ1$h!ev@wR
z!{i$M`29q7)#{?$(G6P26AeEQZ&rqlBV_M9SzX_h)Eq@(^&eb(bFyQKT}qt9XQ~sp
zjT7MoJiD~H6S<p{n+$zBvO%78v!ux(#jiv8@5;K+l}x=sLz5QQui9B2B@6^03)d=G
z4@SWi)6}6~S)t>gonLc*m1JmznENG5$xpmOt!z;7-{_U+CUp=?#}EFNf34FSYTJ%?
zkHDAw{4;}=jw?#dA}!XIOOKUL30QUSYTChd`LS(n(eDq?t-M*)AFry;N6Ui(djD!Q
z5&fQ*{d9u?VTdf`_r!(sSyT%;vvmr9I-Ov03`$o<Xdrb#P?N4=2xaazp)dg9VP!e2
zlOseXuV++h*by;HXrNGDmhki~<h~b^JZSIrjSDbagy@L{jYULb;}!#hAU2`P&bVtm
zMekHd=uE9$PS@*>Qd}y0pU%JPo}cDzarXU^u@;t|Qp;>&D@LKQ*zANMBgfWM*P>so
zxMm*JvFfGSx5Yvrs^A-&C^z)y0}_Q{ci=}qU;EgiS8htv<~bBoWsUQk(y6xkat`uD
z1ls>A<$PImfc~$QBzfg~#-yAAf)lNuGIj`<H#c3@)ha?YIN>ZU+nu0<;<ge}vA9*j
zl{lSlHp3Po6d!2XH$xe%L=g*rcKA;lscTm$Nj?Vq_ace&6ai|;RbX+G{`USdTeV;j
z`y3)SZ4S}Eu43bVxd`ht3uwApIPxuWD%h&pst+KiT$Fj`)gzstjQA|S9a?6<UOEjy
z;P|b2+^=+nnjkjfaUAV5y7I?V(A*N|j$dCaBpn9A(y~rKK0i|69?jLph#IBC)LdVz
z#1T4o)p$AHM-!e)W|>5LexsX;2#J}etvD<SuH{B!uae034zOtpmD4PfK~?R`5N}Z<
zF=t;Y8q5K7l*?CB$4~Q%>?mgGjpy}Ezt+Ph46XBKX^jsjw9r6$aErxBsTBtK$WrRV
zW}4U>31_y&ZcuyuI!Om?Ym?ynXzcH;#Y|&0zF&meNnq%m@=Y^1k?&z8#qbT5!?xnf
zE~r}A_7V4~1KM(-&O3YgT}}BhrvRF=Q!hHHVx!e@F)>9-!t@VCoT?n$;<y+k<dhCk
zrDRuQ@r)1T{hM&3i1h06NbK-ea0o4;hGnw|50PsqDShW|zueY6N~9`s8+4rJh>by}
zIaYAhXz1KLZv_g9F|4rM4ybeGbCJX~*HT)@KE1=BR%g=rgx357w0}CRxp*o#&%F<-
zF~EOaD+UB>34Mdblm=6uOlE#IN)ogu78X6MKQEG`ZNSHG^5fUr=NQV)$m#YA8iHE4
zCxsNB2g}1nESPe7%AcpXN_+ohWp>n0X$hs}4U``4K-4dDffzc2DXDKlcL^`8uU&0!
z7u$OEgjwkF=X}1OqGHbD9jCeR%ax!o%px`*q67Wx*(8w5dmNeRAx*v9)`vPcW(ZMi
zgC$=M_8cO0(k<keQ<tmh0d1#MZ`;$nDjRFzep|~>|0w|WT-NmIE(rboO@(aDAY=XD
z|3Bwj^bHJCQC)cX`@I1Fefjo3m?+<OacJJSCIlq~Jsj5w<y-FvJpqP@w^u)}_oL(t
zs!O=7jGHiqJ55ng0PEx7DX#nceA?AiAJ4Dmh&68IMDhmR^AUb_4(=z`_&sp|`piz%
zje6B>*Ys%?F3!~4LM}>m&4lc(Uh^}KqOsK`p$Ned#+Mh&R{3V|31KDRrH(lFR1Rsp
z=M>RX+NITYWFqAVP7G@mMj>7R?e5qsVw#?DI%X>qb;Mv-U&F6XoICD(IW(#s<s4{e
zisK#2MULkZqx702GWcYTv2N*>8N6k9wsru$dH~;0m;0>ybxCL8Jiec0z)s0vF6A(;
z-+2%+EQX=e2^@-{x5`o^13hNzzJSdhN&b=;tZbogdDHooSM{3Rp1IxL%-B~^On@A|
zEJpT9$n7Cv%EA{}qTZL=9K%qeea}m80Py!8jy@Ftd63<YC-ZcC4Ht=zw(z@Bl$cJ6
zZlDX@;{zd`jcd2E4)WSnjZ&$&6#Yl4o$ua2nRo`~_l)W)IEXP;<nojSd*Ju1KJV2E
zWI2_)e1OwVm(~C1ZHUX!7n?T_^d{}6s~J%QvEBp359KN*rwp4c9&cfzjAx{C5<%BX
zV6Bn8OWM^z7U{?)S62As9rR#nb7UyNER3Llv^3C!D?z+{WyF|#To|#d_L@og7CJY9
zvlp}zw_4eKjWLr!+PUj*a=k%G)n;D;Cp)bCrA_Is7xQqKC+hgSnKTpM0P4uR!Bcn-
z0T^M6Avffg>MB!C&ZG45gMjXhph#6Cit)-b*TxgXrEb|T>tC;GPAc`gWz4xD<@&bc
zs@+Izr5fdHlKgD)ARK9P#kPrw(;TC0aB`BDwv}%4&}4YK5IXpW$RkGyL)mI-Xw7MR
zlC=*RYN+Fh`XAPQW8v3P`SlL>i-J;O>lR|ga=?hFnLu^L2##`>0gic=to%nDW>4-d
zCS?|?iOy+j`w924$uH&R_Z+ZgfrH?xlHFmgN_#toc@Qm%>_C59rMzz@8WD;8DP=Lm
zLbhg9it>^pg&BVxic}L54lv{-mg<&6VDldEc^eLEezY~eL}^Bvr8M=}SExIVJLtog
zK6c6`uJTs|tzLRBN?eU+R@+uP=~EyQFwZk*z|AIyb$balp!haJB}rV~!j&eI_v8Jm
z7FjEPO?WE!l3FNnLa9xNtlBT;BO&w~(ew+v^Yy)g#)<1gb&r@T777KFRr|F2w#b?y
z?}RcG^E|F#6j;Px0o;_=A`J=UVqY*)Kk}iU0D7wYii?Vv9C99z$Z`V@;h0-wC|c#4
z8`}88WZ)zvrugvEYnqy(nsGBfo$ROaqdt_>8DNLGFEZ3H@lGB6WMfbxVxMCC-Tu_v
zEYThQq`gIN-P(c@=Vi!kF5jGd5vfMPyhk*=0b2E%Na0NfFOJW%g!4_<{g{##k3x*l
z89LlSM?^GCuqGHZyM+JbEh}z=fdqnTL9Jt5Gy$vTp8?m6NqpeqTHG%MgT!0UE~_Z<
z5yLgh$F<-}IeC!1g67v9IW{T4BU)?eT5B64dmGQRma8|St8aFVUP6y91w6i;NBC*B
zbWCs2_ssfak2RNJ`4k4*tK@g2k$rJQRv7KLJoLT-XDn^V40g~gPf%u$5PEHv=x?DZ
zf=$zF0F2rly*Q~CA9?3m;ia`y-!$D2RqdZqP4CB1Y4aJF-fJ~a_`MO@3O&;<S`}Hc
zQHIe}T9N?2fD0lT&;Af_7I@!-zg+bMPZ@LmC>@7ud%}#<)~NzKYb~wR<k~*ui+<;Y
z(Kcm@BlcKNMOoqv8G>rHTgL*a%oKZtp4aofhxuR3bk{C<@vKk}!sdR*;u8a3YHCPH
zYV*}SKZ`xTU|OU7(5_*9wf#pc){5ZE-1t{K_zfCKJxs;9d4y^&sqE5~Fd0{gGDb0y
zOifCp|LvvK5Vqaozs4|j{ikZ}n-!cxa5wqv^vE?X%zikn?_XYie^ttk&TL#eYF@@E
zOmabEk0N)5i^}#kXB!<-Nhsz8_voGj%1-Pv%~k6*`@Ivb3o7B7%4<6*?$bQDMqel)
z1GLy|Fc`qDXOV=eP!}#b{KnQRiBteG0MqEx$Bqf{$@UPDuAg`BIE4(Ku>7(vDSRcH
zex%wR$C;ke;&yj4IC`tapyox~q(#x{(make34FxR%|5MUl=X-AppaSWlS1s@f#H#k
zsv4i=`6B}zJ;8XInuZ!nD@vZyOG)etvu7B6<4(eA=r42_^{Lgyrt>mI+s|{dX^CXX
z(ype)YEGA>{!ItVUa<Q>W)z9IWrQYDHua5#YlPT(OP={V%|;t)-s>fIlv$@j6FG=u
z^sNdH*S5_(q~F7zSbb#mzb0#X-1J7TLcW2n%J#KmE2nF}L4aRVq)u=WC4rYPX`|rF
zm<|qcgLr_#F=p-k|DtJ-y1ca7Gs7fCLnj$Kv_j2AixTbnSr$J77Q}W8c^B0Ytq=qN
zri~;e^nw;9m8)3%Gdvzn&yr7HVA;n%n7#9UV$WD9p{Anfz0=^kbMNJ1!OO+Vn&rFK
z>n&&OBi>~$R0_QsDeVo(2O6o8cty~xs3&m4>r;j(P=c!IaMBat`f4(G`cJv;9iNyp
z;?^^&oC>x0L9h@WyRBPL0*PF6Zru-mK)pG+3K~8P_&`3PA0A%6==N0*$0=E>>dpdm
zhwwGPaHB4;<$8)!uU+5AQ}elO{P8ZW)TiCQnEG>mRW4r-8KfzNy@WGgYHZVe859;Z
zqjKw$mlP$3zy~WkqiL>JAMym{et(<${qH%v$vl38DV(`Q;D@#hz4cV9^@;4q&2~&O
z?>CvrCZ;W}9&+HX60KbCZ|puG<HVb~O8L|b4)TxXD#Sek2kXB3&^AYu%fl4K!z?mJ
z25@mLL=OHu$fK9ns%a4NK;S%r!E5hQK?|*XikDIf;~Z#)40<j8C2)Z6=XY)024q(L
z1M2$mR{aI-Beh?rhIZb{glAHNg7%DGDX*~*`1Oh4D=IbwHe8XQ_A4mkUp$P~OJai-
z8i^aJbjLluqaF6r5dV+e@qcfS|A)#``umkG|7^|&XH+ZMv^JBSZOW9_SyAbN4DVIk
IwU7RP0GFHQ%K!iX

literal 0
HcmV?d00001

diff --git a/src/main/java/de/griefed/serverpackcreator/gui/BackgroundPanel.java b/src/main/java/de/griefed/serverpackcreator/gui/BackgroundPanel.java
new file mode 100644
index 000000000..25edcc61f
--- /dev/null
+++ b/src/main/java/de/griefed/serverpackcreator/gui/BackgroundPanel.java
@@ -0,0 +1,273 @@
+package de.griefed.serverpackcreator.gui;
+
+import javax.swing.*;
+import java.awt.*;
+
+/**
+ * Hey, Griefed here. I tried to add a tiled background image to the frame which holds the JTabbedPane, but after serveral
+ * failed attempts, I gave up and almost threw the idea out of the window. I wanted to set the background to a tiled image,
+ * because simply setting a colour seemed too boring, and I needed <em>something</em> in the background so the banner
+ * icon would be more clear to the eye. So, I activated my Google-Fu and encountered this holy grail of tiling images
+ * for Swing.<br>
+ * Links:<br>
+ * <a href="https://tips4java.wordpress.com/2008/10/12/background-panel/">Background Panel by Rob Camick from October 12, 2008</a><br>
+ * <a href="http://www.camick.com/java/source/BackgroundPanel.java">BackgroundPanel.java</a><br>
+ * Seriously, give this man an award, because this class is a <strong>BEAST</strong>.<p>
+ * Rob, if you somehow ever get wind of your class being used here: Thank you, thank you, thank you, thank you, thank you
+ * so very much! You seriously made my day here.<br>
+ * Rob, you rule.
+ */
+public class BackgroundPanel extends JPanel {
+    public static final int SCALED = 0;
+    public static final int TILED = 1;
+    public static final int ACTUAL = 2;
+
+    private Paint painter;
+
+    private Image image;
+
+    private int style = SCALED;
+
+    private float alignmentX = 0.5f;
+    private float alignmentY = 0.5f;
+
+    private boolean isTransparentAdd = true;
+
+    /**
+     * <strong>Constructor</strong><br>
+     * Set image as the background with the SCALED style.
+     * @param image Pass an image to the constructor to be used in the new JPanel.
+     */
+    public BackgroundPanel(Image image) {
+        this(image, SCALED);
+    }
+
+    /**
+     * <strong>Constructor</strong><br>
+     * Set image as the background with the specified style.
+     * @param image Pass an image to the constructor to be used in the new JPanel.
+     * @param style The style with which the image should be painted. See {@link #SCALED}, {@link #TILED}, {@link #ACTUAL}
+     */
+    public BackgroundPanel(Image image, int style) {
+        setImage( image );
+        setStyle( style );
+        setLayout( new BorderLayout() );
+    }
+
+    /**
+     * <strong>Constructor</strong><br>
+     * Set image as the background with the specified style and alignment.
+     * @param image Pass an image to the constructor to be used in the new JPanel.
+     * @param style The style with which the image should be painted. See {@link #SCALED}, {@link #TILED}, {@link #ACTUAL}
+     * @param alignmentX Alignment along the x-axis.
+     * @param alignmentY Alignment along the y axis.
+     */
+    public BackgroundPanel(Image image, int style, float alignmentX, float alignmentY) {
+        setImage( image );
+        setStyle( style );
+        setImageAlignmentX( alignmentX );
+        setImageAlignmentY( alignmentY );
+        setLayout( new BorderLayout() );
+    }
+
+    /**
+     * <strong>Constructor</strong><br>
+     * Use the Paint interface to paint a background.
+     * @param painter Pass a painter to be used as the background in the new JPanel.
+     */
+    public BackgroundPanel(Paint painter) {
+        setPaint( painter );
+        setLayout( new BorderLayout() );
+    }
+
+    /**
+     * Setter for the image used as the background.
+     * @param image Image to be set as the background.
+     */
+    public void setImage(Image image) {
+        this.image = image;
+        repaint();
+    }
+
+    /**
+     * Setter the style used to paint the background image.
+     * @param style Sets the style with which the image should be painted.
+     */
+    public void setStyle(int style) {
+        this.style = style;
+        repaint();
+    }
+
+    /**
+     * Setter for the Paint object used to paint the background.
+     * @param painter Sets the painter with which the background should be painted.
+     */
+    public void setPaint(Paint painter) {
+        this.painter = painter;
+        repaint();
+    }
+
+    /**
+     * Setter for the horizontal alignment of the image when using ACTUAL style.
+     * @param alignmentX Sets the alignment along the x-axis.
+     */
+    public void setImageAlignmentX(float alignmentX) {
+        this.alignmentX = alignmentX > 1.0f ? 1.0f : alignmentX < 0.0f ? 0.0f : alignmentX;
+        repaint();
+    }
+
+    /**
+     * Setter for the horizontal alignment of the image when using ACTUAL style.
+     * @param alignmentY Sets the alignment along the y-axis.
+     */
+    public void setImageAlignmentY(float alignmentY) {
+        this.alignmentY = alignmentY > 1.0f ? 1.0f : alignmentY < 0.0f ? 0.0f : alignmentY;
+        repaint();
+    }
+
+    /**
+     * Override method so we can make the component transparent.
+     * @param component JComponent to add to the panel.
+     */
+    public void add(JComponent component) {
+        add(component, null);
+    }
+
+    /**
+     * Override to provide a preferred size equal to the image size.
+     * @return Dimension. Returns the dimension of the passed image.
+     */
+    @Override
+    public Dimension getPreferredSize() {
+        if (image == null)
+            return super.getPreferredSize();
+        else
+            return new Dimension(image.getWidth(null), image.getHeight(null));
+    }
+
+    /**
+     * Override method so we can make the component transparent.
+     * @param component JComponent to add to the panel.
+     * @param constraints Contraints wich which the panel should be added.
+     */
+    public void add(JComponent component, Object constraints) {
+        if (isTransparentAdd)
+        {
+            makeComponentTransparent(component);
+        }
+
+        super.add(component, constraints);
+    }
+
+    /**
+     * Controls whether components added to this panel should automatically
+     * be made transparent. That is, setOpaque(false) will be invoked.
+     * The default is set to true.
+     * @param isTransparentAdd Whether to automatically make components transparent.
+     */
+    public void setTransparentAdd(boolean isTransparentAdd) {
+        this.isTransparentAdd = isTransparentAdd;
+    }
+
+    /**
+     * Try to make the component transparent.
+     * For components that use renderers, like JTable, you will also need to
+     * change the renderer to be transparent. An easy way to do this it to
+     * set the background of the table to a Color using an alpha value of 0.
+     * @param component The component to make transparent.
+     */
+    private void makeComponentTransparent(JComponent component) {
+        component.setOpaque( false );
+
+        if (component instanceof JScrollPane) {
+            JScrollPane scrollPane = (JScrollPane)component;
+            JViewport viewport = scrollPane.getViewport();
+            viewport.setOpaque( false );
+            Component c = viewport.getView();
+
+            if (c instanceof JComponent) {
+                ((JComponent)c).setOpaque( false );
+            }
+        }
+    }
+
+    /**
+     * Add custom painting.
+     * @param g Received from parent.
+     */
+    @Override
+    protected void paintComponent(Graphics g) {
+        super.paintComponent(g);
+
+        //  Invoke the painter for the background
+
+        if (painter != null) {
+            Dimension d = getSize();
+            Graphics2D g2 = (Graphics2D) g;
+            g2.setPaint(painter);
+            g2.fill( new Rectangle(0, 0, d.width, d.height) );
+        }
+
+        //  Draw the image
+
+        if (image == null ) return;
+
+        switch (style) {
+            case SCALED :
+                drawScaled(g);
+                break;
+
+            case TILED  :
+                drawTiled(g);
+                break;
+
+            case ACTUAL :
+                drawActual(g);
+                break;
+
+            default:
+                drawScaled(g);
+        }
+    }
+
+    /**
+     * Custom painting code for drawing a SCALED image as the background.
+     * @param g Received from parent.
+     */
+    private void drawScaled(Graphics g) {
+        Dimension d = getSize();
+        g.drawImage(image, 0, 0, d.width, d.height, null);
+    }
+
+    /**
+     * Custom painting code for drawing TILED images as the background.
+     * @param g Received from parent.
+     */
+    private void drawTiled(Graphics g) {
+        Dimension d = getSize();
+        int width = image.getWidth( null );
+        int height = image.getHeight( null );
+
+        for (int x = 0; x < d.width; x += width) {
+            for (int y = 0; y < d.height; y += height) {
+                g.drawImage( image, x, y, null, null );
+            }
+        }
+    }
+
+    /**
+     * Custom painting code for drawing the ACTUAL image as the background.
+     * The image is positioned in the panel based on the horizontal and
+     * vertical alignments specified.
+     * @param g Received from parent.
+     */
+    private void drawActual(Graphics g) {
+        Dimension d = getSize();
+        Insets insets = getInsets();
+        int width = d.width - insets.left - insets.right;
+        int height = d.height - insets.top - insets.left;
+        float x = (width - image.getWidth(null)) * alignmentX;
+        float y = (height - image.getHeight(null)) * alignmentY;
+        g.drawImage(image, (int)x + insets.left, (int)y + insets.top, this);
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java b/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java
index 0da4b63a1..7d05cdc9f 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java
@@ -29,10 +29,13 @@ import de.griefed.serverpackcreator.i18n.LocalizationManager;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
+import javax.imageio.ImageIO;
 import javax.swing.*;
 import java.awt.*;
 import java.awt.event.KeyEvent;
+import java.awt.image.BufferedImage;
 import java.io.File;
+import java.io.IOException;
 import java.util.Objects;
 
 /**
@@ -51,6 +54,17 @@ public class CreateGui extends JPanel {
     private final ImageIcon bannerIcon      = new ImageIcon(Objects.requireNonNull(CreateGui.class.getResource("/de/griefed/resources/gui/banner.png")));
     private final Image icon                = Toolkit.getDefaultToolkit().getImage(Objects.requireNonNull(CreateGui.class.getResource("/de/griefed/resources/gui/app.png")));
     private final Dimension windowDimension = new Dimension(800,860);
+    private final Image tile                = Toolkit.getDefaultToolkit().getImage(Objects.requireNonNull(CreateGui.class.getResource("/de/griefed/resources/gui/tile.png")));
+    private BufferedImage bufferedImage;
+    {
+        try {
+            bufferedImage = ImageIO.read(getClass().getResource("/de/griefed/resources/gui/tile.png"));
+        } catch (IOException ex) {
+            //Can't use localization here.
+            appLogger.error("Could not read image for tiling.", ex);
+        }
+    }
+
 
     private LocalizationManager localizationManager;
     private Configuration configuration;
@@ -61,6 +75,7 @@ public class CreateGui extends JPanel {
     private ServerPackCreatorLogTab serverPackCreatorLogTab;
     private ModloaderInstallerLogTab modloaderInstallerLogTab;
     private AboutTab aboutTab;
+    private BackgroundPanel backgroundPanel;
 
     /**
      * <strong>Constructor</strong><p>
@@ -109,8 +124,12 @@ public class CreateGui extends JPanel {
         modloaderInstallerLogTab = new ModloaderInstallerLogTab(localizationManager);
         aboutTab = new AboutTab(localizationManager);
 
+        backgroundPanel = new BackgroundPanel(bufferedImage, BackgroundPanel.TILED, 0.0f, 0.0f);
+
         JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
 
+        setOpaque(false);
+
         tabbedPane.addTab(
                 localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.createserverpack.title"),
                 null,
@@ -144,7 +163,7 @@ public class CreateGui extends JPanel {
         tabbedPane.setMnemonicAt(3, KeyEvent.VK_4);
 
         add(tabbedPane);
-
+        tabbedPane.setOpaque(false);
         tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
     }
 
@@ -206,13 +225,18 @@ public class CreateGui extends JPanel {
         serverPackCreatorFrame = new JFrame(localizationManager.getLocalizedString("createserverpack.gui.createandshowgui"));
         serverPackCreatorFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
+        serverPackCreatorFrame.setContentPane(backgroundPanel);
+
         serverPackCreatorFrame.setIconImage(icon);
+
         serverPackCreatorBanner = new JLabel(bannerIcon);
         serverPackCreatorBanner.setOpaque(false);
 
         serverPackCreatorFrame.add(serverPackCreatorBanner, BorderLayout.PAGE_START);
+
         serverPackCreatorFrame.add(new CreateGui(localizationManager, configuration, curseCreateModpack, createServerPack), BorderLayout.CENTER);
 
+        serverPackCreatorFrame.setSize(windowDimension);
         serverPackCreatorFrame.setPreferredSize(windowDimension);
         serverPackCreatorFrame.setMaximumSize(windowDimension);
         serverPackCreatorFrame.setResizable(true);
diff --git a/src/main/resources/de/griefed/resources/gui/tile.png b/src/main/resources/de/griefed/resources/gui/tile.png
new file mode 100644
index 0000000000000000000000000000000000000000..5e3a93aaaddbcf3d163b4046134269f15f9c5b3c
GIT binary patch
literal 28889
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
U;rv`+Q`5gJFWQ(^o<~Lh7jrB{ApigX

literal 0
HcmV?d00001

-- 
GitLab


From d66eb708388211078df4be0d8c3b9290ee26304b Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Mon, 3 May 2021 19:47:26 +0200
Subject: [PATCH 52/91] refactor(DI): Get rid of pmd. Not that useful anyway.

---
 build.gradle | 9 ---------
 1 file changed, 9 deletions(-)

diff --git a/build.gradle b/build.gradle
index 78b4104bd..f0b019289 100644
--- a/build.gradle
+++ b/build.gradle
@@ -4,7 +4,6 @@ plugins {
     id 'java'
     id 'maven-publish'
     id 'idea'
-    id 'pmd'
     id 'edu.sc.seis.launch4j' version '2.5.0'
 }
 
@@ -41,14 +40,6 @@ launch4j {
     icon = "${projectDir}/src/main/resources/de/griefed/resources/gui/icon.ico"
 }
 
-pmd {
-    consoleOutput = true
-    toolVersion = "6.21.0"
-    //noinspection GroovyAccessibility, GroovyAssignabilityCheck
-    rulesMinimumPriority = 1
-    ruleSets = ["category/java/errorprone.xml", "category/java/bestpractices.xml"]
-}
-
 configurations {
     embed
     implementation.extendsFrom(embed)
-- 
GitLab


From 52dc9dd79a559692800c0e1972ee79de0e3dfd32 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Mon, 3 May 2021 19:50:17 +0200
Subject: [PATCH 53/91] refactor(DI): Some more whitespace

---
 src/main/java/de/griefed/serverpackcreator/gui/AboutTab.java | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/gui/AboutTab.java b/src/main/java/de/griefed/serverpackcreator/gui/AboutTab.java
index 84dc6a337..0f1d06e96 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/AboutTab.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/AboutTab.java
@@ -197,6 +197,7 @@ public class AboutTab extends Component {
 
             switch (userResponse) {
                 case 0:
+
                     try {
                         if (Desktop.getDesktop().isSupported(Desktop.Action.BROWSE)) {
 
@@ -207,12 +208,14 @@ public class AboutTab extends Component {
                         appLogger.error(localizationManager.getLocalizedString("about.log.error.browser"), ex);
                     }
                     break;
+
                 case 2:
+
                     stringSelection = new StringSelection(textAreaContent);
                     clipboard.setContents(stringSelection, null);
                     break;
-                default:
 
+                default:
                     break;
             }
         });
-- 
GitLab


From 59d5aa360bf12909e74fb01ce9480b8a453c9245 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Mon, 3 May 2021 19:51:13 +0200
Subject: [PATCH 54/91] refactor(DI): Remove borders and implement mouse hover.
 Add "(optional)" to javapath label

---
 .../gui/CreateServerPackTab.java              | 74 ++++++++++++++++++-
 .../resources/lang/lang_de_de.properties      |  2 +-
 .../resources/lang/lang_en_us.properties      |  2 +-
 .../resources/lang/lang_uk_ua.properties      |  2 +-
 4 files changed, 74 insertions(+), 6 deletions(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/gui/CreateServerPackTab.java b/src/main/java/de/griefed/serverpackcreator/gui/CreateServerPackTab.java
index fa1fa8c48..5b59a87c5 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/CreateServerPackTab.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/CreateServerPackTab.java
@@ -31,7 +31,6 @@ import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
 import javax.swing.*;
-import javax.swing.border.Border;
 import javax.swing.filechooser.FileNameExtensionFilter;
 import java.awt.*;
 import java.awt.event.HierarchyEvent;
@@ -112,6 +111,7 @@ public class CreateServerPackTab extends JComponent {
     private final ImageIcon helpIcon              = new ImageIcon(Objects.requireNonNull(CreateGui.class.getResource("/de/griefed/resources/gui/help.png")));
     private final Dimension folderButtonDimension = new Dimension(24,24);
     private final Dimension miscButtonDimension   = new Dimension(50,50);
+    private final Dimension startDimension        = new Dimension(64,64);
     private final Dimension chooserDimension      = new Dimension(750,450);
 
     private JComponent createServerPackPanel;
@@ -351,6 +351,15 @@ public class CreateServerPackTab extends JComponent {
                 }
             }
         });
+        buttonModpackDir.addMouseListener(new java.awt.event.MouseAdapter() {
+            public void mouseEntered(java.awt.event.MouseEvent evt) {
+                buttonModpackDir.setContentAreaFilled(true);
+            }
+
+            public void mouseExited(java.awt.event.MouseEvent evt) {
+                buttonModpackDir.setContentAreaFilled(false);
+            }
+        });
         constraints.gridx = 2;
         constraints.gridy = 1;
         createServerPackPanel.add(buttonModpackDir, constraints);
@@ -403,6 +412,15 @@ public class CreateServerPackTab extends JComponent {
                 appLogger.info(String.format(localizationManager.getLocalizedString("createserverpack.log.info.buttonclientmods"), clientModsFilenames));
             }
         });
+        buttonClientMods.addMouseListener(new java.awt.event.MouseAdapter() {
+            public void mouseEntered(java.awt.event.MouseEvent evt) {
+                buttonClientMods.setContentAreaFilled(true);
+            }
+
+            public void mouseExited(java.awt.event.MouseEvent evt) {
+                buttonClientMods.setContentAreaFilled(false);
+            }
+        });
         constraints.gridx = 2;
         constraints.gridy = 3;
         createServerPackPanel.add(buttonClientMods, constraints);
@@ -444,6 +462,15 @@ public class CreateServerPackTab extends JComponent {
                 appLogger.info(String.format(localizationManager.getLocalizedString("createserverpack.log.info.buttoncopydirs"), copyDirsNames));
             }
         });
+        buttonCopyDirs.addMouseListener(new java.awt.event.MouseAdapter() {
+            public void mouseEntered(java.awt.event.MouseEvent evt) {
+                buttonCopyDirs.setContentAreaFilled(true);
+            }
+
+            public void mouseExited(java.awt.event.MouseEvent evt) {
+                buttonCopyDirs.setContentAreaFilled(false);
+            }
+        });
         constraints.gridx = 2;
         constraints.gridy = 5;
         createServerPackPanel.add(buttonCopyDirs, constraints);
@@ -490,6 +517,15 @@ public class CreateServerPackTab extends JComponent {
                 }
             }
         });
+        buttonJavaPath.addMouseListener(new java.awt.event.MouseAdapter() {
+            public void mouseEntered(java.awt.event.MouseEvent evt) {
+                buttonJavaPath.setContentAreaFilled(true);
+            }
+
+            public void mouseExited(java.awt.event.MouseEvent evt) {
+                buttonJavaPath.setContentAreaFilled(false);
+            }
+        });
         constraints.gridx = 2;
         constraints.gridy = 7;
         createServerPackPanel.add(buttonJavaPath, constraints);
@@ -497,6 +533,7 @@ public class CreateServerPackTab extends JComponent {
         //Load config from file
         buttonLoadConfigFromFile = new JButton();
         buttonLoadConfigFromFile.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.buttonloadconfig"));
+        buttonLoadConfigFromFile.setContentAreaFilled(false);
         buttonLoadConfigFromFile.setIcon(loadIcon);
         buttonLoadConfigFromFile.setMinimumSize(miscButtonDimension);
         buttonLoadConfigFromFile.setPreferredSize(miscButtonDimension);
@@ -562,15 +599,25 @@ public class CreateServerPackTab extends JComponent {
                 }
             }
         });
+        buttonLoadConfigFromFile.addMouseListener(new java.awt.event.MouseAdapter() {
+            public void mouseEntered(java.awt.event.MouseEvent evt) {
+                buttonLoadConfigFromFile.setContentAreaFilled(true);
+            }
+
+            public void mouseExited(java.awt.event.MouseEvent evt) {
+                buttonLoadConfigFromFile.setContentAreaFilled(false);
+            }
+        });
         constraints.anchor = GridBagConstraints.CENTER;
         constraints.gridx = 3;
         constraints.gridy = 1;
         constraints.gridheight = 3;
         createServerPackPanel.add(buttonLoadConfigFromFile, constraints);
 
-        //Load config from file
+        //Open window with detailed information about the UI
         buttonInfoWindow = new JButton();
         buttonInfoWindow.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.button"));
+        buttonInfoWindow.setContentAreaFilled(false);
         buttonInfoWindow.setIcon(helpIcon);
         buttonInfoWindow.setMinimumSize(miscButtonDimension);
         buttonInfoWindow.setPreferredSize(miscButtonDimension);
@@ -626,6 +673,15 @@ public class CreateServerPackTab extends JComponent {
             );
 
         });
+        buttonInfoWindow.addMouseListener(new java.awt.event.MouseAdapter() {
+            public void mouseEntered(java.awt.event.MouseEvent evt) {
+                buttonInfoWindow.setContentAreaFilled(true);
+            }
+
+            public void mouseExited(java.awt.event.MouseEvent evt) {
+                buttonInfoWindow.setContentAreaFilled(false);
+            }
+        });
         constraints.anchor = GridBagConstraints.CENTER;
         constraints.gridx = 3;
         constraints.gridy = 5;
@@ -647,8 +703,12 @@ public class CreateServerPackTab extends JComponent {
         createServerPackPanel.add(labelGenerateServerPack, constraints);
 
         buttonGenerateServerPack = new JButton();
+        buttonGenerateServerPack.setContentAreaFilled(false);
         buttonGenerateServerPack.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.buttongenerateserverpack.tip"));
         buttonGenerateServerPack.setIcon(startGeneration);
+        buttonGenerateServerPack.setMinimumSize(startDimension);
+        buttonGenerateServerPack.setPreferredSize(startDimension);
+        buttonGenerateServerPack.setMaximumSize(startDimension);
         buttonGenerateServerPack.addActionListener(e -> {
 
             buttonGenerateServerPack.setEnabled(false);
@@ -775,12 +835,20 @@ public class CreateServerPackTab extends JComponent {
                 buttonGenerateServerPack.setEnabled(true);
             }
         });
+        buttonGenerateServerPack.addMouseListener(new java.awt.event.MouseAdapter() {
+            public void mouseEntered(java.awt.event.MouseEvent evt) {
+                buttonGenerateServerPack.setContentAreaFilled(true);
+            }
+
+            public void mouseExited(java.awt.event.MouseEvent evt) {
+                buttonGenerateServerPack.setContentAreaFilled(false);
+            }
+        });
         constraints.gridx = 0;
         constraints.gridy = 17;
         constraints.gridwidth = 4;
         constraints.weightx = 1;
         constraints.weighty = 1;
-        constraints.ipadx = 80;
         constraints.anchor = GridBagConstraints.CENTER;
         createServerPackPanel.add(buttonGenerateServerPack, constraints);
 
diff --git a/src/main/resources/de/griefed/resources/lang/lang_de_de.properties b/src/main/resources/de/griefed/resources/lang/lang_de_de.properties
index 79ed23879..9454e0bbd 100644
--- a/src/main/resources/de/griefed/resources/lang/lang_de_de.properties
+++ b/src/main/resources/de/griefed/resources/lang/lang_de_de.properties
@@ -31,7 +31,7 @@ createserverpack.gui.createserverpack.labelclientmods=Enter the list of clientsi
 createserverpack.gui.createserverpack.labelclientmods.tip=Comma separated. Example: AmbientSounds,BackTools,BetterAdvancement,BetterPing
 createserverpack.gui.createserverpack.labelcopydirs=Enter the list of directories in your modpack to include in the server pack:
 createserverpack.gui.createserverpack.labelcopydirs.tip=Comma separated. Example: mods,config,defaultconfigs,scripts
-createserverpack.gui.createserverpack.labeljavapath=Enter the path to your Java executable/binary:
+createserverpack.gui.createserverpack.labeljavapath=Enter the path to your Java executable/binary (optional):
 createserverpack.gui.createserverpack.labeljavapath.tip=Must end with /java.exe or /java. Example: C:/Program Files/AdoptOpenJDK/jdk-8.0.275.1-hotspot/jre/bin/java.exe
 createserverpack.gui.createserverpack.labelminecraft=Enter the Minecraft version your modpack uses:
 createserverpack.gui.createserverpack.labelminecraft.tip=Example: 1.16.5 or 1.12.2
diff --git a/src/main/resources/de/griefed/resources/lang/lang_en_us.properties b/src/main/resources/de/griefed/resources/lang/lang_en_us.properties
index a78703694..5617fffd7 100644
--- a/src/main/resources/de/griefed/resources/lang/lang_en_us.properties
+++ b/src/main/resources/de/griefed/resources/lang/lang_en_us.properties
@@ -31,7 +31,7 @@ createserverpack.gui.createserverpack.labelclientmods=Enter the list of clientsi
 createserverpack.gui.createserverpack.labelclientmods.tip=Comma separated. Example: AmbientSounds,BackTools,BetterAdvancement,BetterPing
 createserverpack.gui.createserverpack.labelcopydirs=Enter the list of directories in your modpack to include in the server pack:
 createserverpack.gui.createserverpack.labelcopydirs.tip=Comma separated. Example: mods,config,defaultconfigs,scripts
-createserverpack.gui.createserverpack.labeljavapath=Enter the path to your Java executable/binary:
+createserverpack.gui.createserverpack.labeljavapath=Enter the path to your Java executable/binary (optional):
 createserverpack.gui.createserverpack.labeljavapath.tip=Must end with /java.exe or /java. Example: C:/Program Files/AdoptOpenJDK/jdk-8.0.275.1-hotspot/jre/bin/java.exe
 createserverpack.gui.createserverpack.labelminecraft=Enter the Minecraft version your modpack uses:
 createserverpack.gui.createserverpack.labelminecraft.tip=Example: 1.16.5 or 1.12.2
diff --git a/src/main/resources/de/griefed/resources/lang/lang_uk_ua.properties b/src/main/resources/de/griefed/resources/lang/lang_uk_ua.properties
index 0fe83cba8..02fc1428a 100644
--- a/src/main/resources/de/griefed/resources/lang/lang_uk_ua.properties
+++ b/src/main/resources/de/griefed/resources/lang/lang_uk_ua.properties
@@ -31,7 +31,7 @@ createserverpack.gui.createserverpack.labelclientmods=Enter the list of clientsi
 createserverpack.gui.createserverpack.labelclientmods.tip=Comma separated. Example: AmbientSounds,BackTools,BetterAdvancement,BetterPing
 createserverpack.gui.createserverpack.labelcopydirs=Enter the list of directories in your modpack to include in the server pack:
 createserverpack.gui.createserverpack.labelcopydirs.tip=Comma separated. Example: mods,config,defaultconfigs,scripts
-createserverpack.gui.createserverpack.labeljavapath=Enter the path to your Java executable/binary:
+createserverpack.gui.createserverpack.labeljavapath=Enter the path to your Java executable/binary (optional):
 createserverpack.gui.createserverpack.labeljavapath.tip=Must end with /java.exe or /java. Example: C:/Program Files/AdoptOpenJDK/jdk-8.0.275.1-hotspot/jre/bin/java.exe
 createserverpack.gui.createserverpack.labelminecraft=Enter the Minecraft version your modpack uses:
 createserverpack.gui.createserverpack.labelminecraft.tip=Example: 1.16.5 or 1.12.2
-- 
GitLab


From 3bd258fa935b2726f7416f26b7e879adeefbdc69 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Mon, 3 May 2021 19:57:24 +0200
Subject: [PATCH 55/91] refactor(DI): Update docs

---
 docs/allclasses-frame.html                    |   1 +
 docs/allclasses-noframe.html                  |   1 +
 docs/constant-values.html                     |  35 +
 .../serverpackcreator/gui/AboutTab.html       | 183 +++-
 .../gui/BackgroundPanel.html                  | 911 ++++++++++++++++++
 .../serverpackcreator/gui/CreateGui.html      | 103 +-
 .../gui/CreateServerPackTab.html              |  80 +-
 .../gui/ModloaderInstallerLogTab.html         |  53 +-
 .../gui/ServerPackCreatorLogTab.html          |  53 +-
 .../serverpackcreator/gui/package-frame.html  |   1 +
 .../gui/package-summary.html                  |  12 +-
 .../serverpackcreator/gui/package-tree.html   |   7 +-
 docs/index-all.html                           | 141 ++-
 docs/overview-tree.html                       |   7 +-
 docs/serialized-form.html                     | 120 ++-
 15 files changed, 1654 insertions(+), 54 deletions(-)
 create mode 100644 docs/de/griefed/serverpackcreator/gui/BackgroundPanel.html

diff --git a/docs/allclasses-frame.html b/docs/allclasses-frame.html
index 9386895c2..55751628c 100644
--- a/docs/allclasses-frame.html
+++ b/docs/allclasses-frame.html
@@ -12,6 +12,7 @@
 <div class="indexContainer">
 <ul>
 <li><a href="de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui" target="classFrame">AboutTab</a></li>
+<li><a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html" title="class in de.griefed.serverpackcreator.gui" target="classFrame">BackgroundPanel</a></li>
 <li><a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator" target="classFrame">Configuration</a></li>
 <li><a href="de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui" target="classFrame">CreateGui</a></li>
 <li><a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator" target="classFrame">CreateServerPack</a></li>
diff --git a/docs/allclasses-noframe.html b/docs/allclasses-noframe.html
index ea3196e74..d64be7783 100644
--- a/docs/allclasses-noframe.html
+++ b/docs/allclasses-noframe.html
@@ -12,6 +12,7 @@
 <div class="indexContainer">
 <ul>
 <li><a href="de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui">AboutTab</a></li>
+<li><a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html" title="class in de.griefed.serverpackcreator.gui">BackgroundPanel</a></li>
 <li><a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></li>
 <li><a href="de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui">CreateGui</a></li>
 <li><a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></li>
diff --git a/docs/constant-values.html b/docs/constant-values.html
index c98ea627c..c4dbce6a5 100644
--- a/docs/constant-values.html
+++ b/docs/constant-values.html
@@ -81,6 +81,41 @@
 <ul class="blockList">
 <li class="blockList">
 <table class="constantsSummary" border="0" cellpadding="3" cellspacing="0" summary="Constant Field Values table, listing constant fields, and values">
+<caption><span>de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html" title="class in de.griefed.serverpackcreator.gui">BackgroundPanel</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th scope="col">Constant Field</th>
+<th class="colLast" scope="col">Value</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><a name="de.griefed.serverpackcreator.gui.BackgroundPanel.ACTUAL">
+<!--   -->
+</a><code>public&nbsp;static&nbsp;final&nbsp;int</code></td>
+<td><code><a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html#ACTUAL">ACTUAL</a></code></td>
+<td class="colLast"><code>2</code></td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a name="de.griefed.serverpackcreator.gui.BackgroundPanel.SCALED">
+<!--   -->
+</a><code>public&nbsp;static&nbsp;final&nbsp;int</code></td>
+<td><code><a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html#SCALED">SCALED</a></code></td>
+<td class="colLast"><code>0</code></td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><a name="de.griefed.serverpackcreator.gui.BackgroundPanel.TILED">
+<!--   -->
+</a><code>public&nbsp;static&nbsp;final&nbsp;int</code></td>
+<td><code><a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html#TILED">TILED</a></code></td>
+<td class="colLast"><code>1</code></td>
+</tr>
+</tbody>
+</table>
+</li>
+</ul>
+<ul class="blockList">
+<li class="blockList">
+<table class="constantsSummary" border="0" cellpadding="3" cellspacing="0" summary="Constant Field Values table, listing constant fields, and values">
 <caption><span>de.griefed.serverpackcreator.i18n.<a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></span><span class="tabEnd">&nbsp;</span></caption>
 <tr>
 <th class="colFirst" scope="col">Modifier and Type</th>
diff --git a/docs/de/griefed/serverpackcreator/gui/AboutTab.html b/docs/de/griefed/serverpackcreator/gui/AboutTab.html
index 524a56ca9..2e3a8226a 100644
--- a/docs/de/griefed/serverpackcreator/gui/AboutTab.html
+++ b/docs/de/griefed/serverpackcreator/gui/AboutTab.html
@@ -17,7 +17,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10};
+var methods = {"i0":10,"i1":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -48,7 +48,7 @@ var activeTableTab = "activeTableTab";
 <div class="subNav">
 <ul class="navList">
 <li>Prev&nbsp;Class</li>
-<li><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../de/griefed/serverpackcreator/gui/BackgroundPanel.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../index.html?de/griefed/serverpackcreator/gui/AboutTab.html" target="_top">Frames</a></li>
@@ -183,6 +183,14 @@ extends java.awt.Component</pre>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html#buttonOpenIssue">buttonOpenIssue</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>private java.awt.datatransfer.Clipboard</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html#clipboard">clipboard</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html#configURL">configURL</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>private java.awt.GridBagConstraints</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html#constraints">constraints</a></span></code>&nbsp;</td>
 </tr>
@@ -192,28 +200,60 @@ extends java.awt.Component</pre>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private javax.swing.ImageIcon</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html#issueIcon">issueIcon</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html#hastebinIcon">hastebinIcon</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>private javax.swing.ImageIcon</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html#issueIcon">issueIcon</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html#localizationManager">localizationManager</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private java.awt.Dimension</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html#miscButtonDimension">miscButtonDimension</a></span></code>&nbsp;</td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><code>private java.lang.String[]</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html#options">options</a></span></code>&nbsp;</td>
+</tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private javax.swing.ImageIcon</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html#pastebinIcon">pastebinIcon</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html#prosperIcon">prosperIcon</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>private javax.swing.ImageIcon</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html#prosperIcon">prosperIcon</a></span></code>&nbsp;</td>
+<td class="colFirst"><code>private java.io.File</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html#serverPackCreatorConf">serverPackCreatorConf</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private java.io.File</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html#serverPackCreatorLog">serverPackCreatorLog</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html#spclogURL">spclogURL</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>private java.awt.datatransfer.StringSelection</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html#stringSelection">stringSelection</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private javax.swing.JTextArea</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html#textArea">textArea</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html#textAreaContent">textAreaContent</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>private javax.swing.JTextPane</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html#textPane">textPane</a></span></code>&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html#userResponse">userResponse</a></span></code>&nbsp;</td>
+</tr>
 </table>
 <ul class="blockList">
 <li class="blockList"><a name="fields.inherited.from.class.java.awt.Component">
@@ -269,6 +309,12 @@ extends java.awt.Component</pre>
 <div class="block">Create the tab for the About-page of ServerpackCreator.</div>
 </td>
 </tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>private java.lang.String</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html#createHasteBinFromFile-java.io.File-">createHasteBinFromFile</a></span>(java.io.File&nbsp;textFile)</code>
+<div class="block">Create a HasteBin post from a given text file.</div>
+</td>
+</tr>
 </table>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.awt.Component">
@@ -334,13 +380,13 @@ extends java.awt.Component</pre>
 <pre>private final&nbsp;javax.swing.ImageIcon issueIcon</pre>
 </li>
 </ul>
-<a name="pastebinIcon">
+<a name="hastebinIcon">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>pastebinIcon</h4>
-<pre>private final&nbsp;javax.swing.ImageIcon pastebinIcon</pre>
+<h4>hastebinIcon</h4>
+<pre>private final&nbsp;javax.swing.ImageIcon hastebinIcon</pre>
 </li>
 </ul>
 <a name="prosperIcon">
@@ -418,12 +464,102 @@ extends java.awt.Component</pre>
 <a name="buttonDiscord">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>buttonDiscord</h4>
 <pre>private&nbsp;javax.swing.JButton buttonDiscord</pre>
 </li>
 </ul>
+<a name="textArea">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>textArea</h4>
+<pre>private&nbsp;javax.swing.JTextArea textArea</pre>
+</li>
+</ul>
+<a name="configURL">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>configURL</h4>
+<pre>private&nbsp;java.lang.String configURL</pre>
+</li>
+</ul>
+<a name="spclogURL">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>spclogURL</h4>
+<pre>private&nbsp;java.lang.String spclogURL</pre>
+</li>
+</ul>
+<a name="textAreaContent">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>textAreaContent</h4>
+<pre>private&nbsp;java.lang.String textAreaContent</pre>
+</li>
+</ul>
+<a name="stringSelection">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>stringSelection</h4>
+<pre>private&nbsp;java.awt.datatransfer.StringSelection stringSelection</pre>
+</li>
+</ul>
+<a name="clipboard">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>clipboard</h4>
+<pre>private&nbsp;java.awt.datatransfer.Clipboard clipboard</pre>
+</li>
+</ul>
+<a name="serverPackCreatorConf">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>serverPackCreatorConf</h4>
+<pre>private final&nbsp;java.io.File serverPackCreatorConf</pre>
+</li>
+</ul>
+<a name="serverPackCreatorLog">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>serverPackCreatorLog</h4>
+<pre>private final&nbsp;java.io.File serverPackCreatorLog</pre>
+</li>
+</ul>
+<a name="options">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>options</h4>
+<pre>private&nbsp;java.lang.String[] options</pre>
+</li>
+</ul>
+<a name="userResponse">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>userResponse</h4>
+<pre>private&nbsp;int userResponse</pre>
+</li>
+</ul>
 </li>
 </ul>
 <!-- ========= CONSTRUCTOR DETAIL ======== -->
@@ -460,7 +596,7 @@ extends java.awt.Component</pre>
 <a name="aboutTab--">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>aboutTab</h4>
 <pre>javax.swing.JComponent&nbsp;aboutTab()</pre>
@@ -476,6 +612,27 @@ extends java.awt.Component</pre>
 </dl>
 </li>
 </ul>
+<a name="createHasteBinFromFile-java.io.File-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>createHasteBinFromFile</h4>
+<pre>private&nbsp;java.lang.String&nbsp;createHasteBinFromFile(java.io.File&nbsp;textFile)</pre>
+<div class="block">Create a HasteBin post from a given text file. The text file provided is read into a string and then passed onto
+ <a href="https://haste.zneix.eu">Haste zneix</a> which creates a HasteBin post out of the passed String and
+ returns the URL to the newly created post.<br>
+ Created with the help of <a href="https://github.com/kaimu-kun/hastebin.java">kaimu-kun's hastebin.java (MIT License)</a>
+ and edited to use HasteBin fork <a href="https://github.com/zneix/haste-server">zneix/haste-server</a>. My fork
+ of kaimu-kun's hastebin.java is available at <a href="https://github.com/Griefed/hastebin.java">Griefed/hastebin.java</a>.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>textFile</code> - The file which will be read into a String of which then to create a HasteBin post of.</dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>String. Returns a String containing the URL to the newly created HasteBin post.</dd>
+</dl>
+</li>
+</ul>
 </li>
 </ul>
 </li>
@@ -504,7 +661,7 @@ extends java.awt.Component</pre>
 <div class="subNav">
 <ul class="navList">
 <li>Prev&nbsp;Class</li>
-<li><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../de/griefed/serverpackcreator/gui/BackgroundPanel.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../index.html?de/griefed/serverpackcreator/gui/AboutTab.html" target="_top">Frames</a></li>
diff --git a/docs/de/griefed/serverpackcreator/gui/BackgroundPanel.html b/docs/de/griefed/serverpackcreator/gui/BackgroundPanel.html
new file mode 100644
index 000000000..2eeae20f5
--- /dev/null
+++ b/docs/de/griefed/serverpackcreator/gui/BackgroundPanel.html
@@ -0,0 +1,911 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="de">
+<head>
+<!-- Generated by javadoc -->
+<title>BackgroundPanel (serverpackcreator API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../stylesheet.css" title="Style">
+<script type="text/javascript" src="../../../../script.js"></script>
+</head>
+<body>
+<script type="text/javascript"><!--
+    try {
+        if (location.href.indexOf('is-external=true') == -1) {
+            parent.document.title="BackgroundPanel (serverpackcreator API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10};
+var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
+var altColor = "altColor";
+var rowColor = "rowColor";
+var tableTab = "tableTab";
+var activeTableTab = "activeTableTab";
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar.top">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.top.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?de/griefed/serverpackcreator/gui/BackgroundPanel.html" target="_top">Frames</a></li>
+<li><a href="BackgroundPanel.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_top");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested.classes.inherited.from.class.javax.swing.JPanel">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">de.griefed.serverpackcreator.gui</div>
+<h2 title="Class BackgroundPanel" class="title">Class BackgroundPanel</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li>java.lang.Object</li>
+<li>
+<ul class="inheritance">
+<li>java.awt.Component</li>
+<li>
+<ul class="inheritance">
+<li>java.awt.Container</li>
+<li>
+<ul class="inheritance">
+<li>javax.swing.JComponent</li>
+<li>
+<ul class="inheritance">
+<li>javax.swing.JPanel</li>
+<li>
+<ul class="inheritance">
+<li>de.griefed.serverpackcreator.gui.BackgroundPanel</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd>java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable, javax.accessibility.Accessible</dd>
+</dl>
+<hr>
+<br>
+<pre>public class <span class="typeNameLabel">BackgroundPanel</span>
+extends javax.swing.JPanel</pre>
+<div class="block">Hey, Griefed here. I tried to add a tiled background image to the frame which holds the JTabbedPane, but after serveral
+ failed attempts, I gave up and almost threw the idea out of the window. I wanted to set the background to a tiled image,
+ because simply setting a colour seemed too boring, and I needed <em>something</em> in the background so the banner
+ icon would be more clear to the eye. So, I activated my Google-Fu and encountered this holy grail of tiling images
+ for Swing.<br>
+ Links:<br>
+ <a href="https://tips4java.wordpress.com/2008/10/12/background-panel/">Background Panel by Rob Camick from October 12, 2008</a><br>
+ <a href="http://www.camick.com/java/source/BackgroundPanel.java">BackgroundPanel.java</a><br>
+ Seriously, give this man an award, because this class is a <strong>BEAST</strong>.<p>
+ Rob, if you somehow ever get wind of your class being used here: Thank you, thank you, thank you, thank you, thank you
+ so very much! You seriously made my day here.<br>
+ Rob, you rule.</div>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../serialized-form.html#de.griefed.serverpackcreator.gui.BackgroundPanel">Serialized Form</a></dd>
+</dl>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="nested.class.summary">
+<!--   -->
+</a>
+<h3>Nested Class Summary</h3>
+<ul class="blockList">
+<li class="blockList"><a name="nested.classes.inherited.from.class.javax.swing.JPanel">
+<!--   -->
+</a>
+<h3>Nested classes/interfaces inherited from class&nbsp;javax.swing.JPanel</h3>
+<code>javax.swing.JPanel.AccessibleJPanel</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="nested.classes.inherited.from.class.javax.swing.JComponent">
+<!--   -->
+</a>
+<h3>Nested classes/interfaces inherited from class&nbsp;javax.swing.JComponent</h3>
+<code>javax.swing.JComponent.AccessibleJComponent</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="nested.classes.inherited.from.class.java.awt.Container">
+<!--   -->
+</a>
+<h3>Nested classes/interfaces inherited from class&nbsp;java.awt.Container</h3>
+<code>java.awt.Container.AccessibleAWTContainer</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="nested.classes.inherited.from.class.java.awt.Component">
+<!--   -->
+</a>
+<h3>Nested classes/interfaces inherited from class&nbsp;java.awt.Component</h3>
+<code>java.awt.Component.AccessibleAWTComponent, java.awt.Component.BaselineResizeBehavior, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy</code></li>
+</ul>
+</li>
+</ul>
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/BackgroundPanel.html#ACTUAL">ACTUAL</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private float</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/BackgroundPanel.html#alignmentX">alignmentX</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private float</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/BackgroundPanel.html#alignmentY">alignmentY</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private java.awt.Image</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/BackgroundPanel.html#image">image</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/BackgroundPanel.html#isTransparentAdd">isTransparentAdd</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private java.awt.Paint</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/BackgroundPanel.html#painter">painter</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/BackgroundPanel.html#SCALED">SCALED</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/BackgroundPanel.html#style">style</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>static int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/BackgroundPanel.html#TILED">TILED</a></span></code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="fields.inherited.from.class.javax.swing.JComponent">
+<!--   -->
+</a>
+<h3>Fields inherited from class&nbsp;javax.swing.JComponent</h3>
+<code>listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="fields.inherited.from.class.java.awt.Component">
+<!--   -->
+</a>
+<h3>Fields inherited from class&nbsp;java.awt.Component</h3>
+<code>accessibleContext, BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="fields.inherited.from.class.java.awt.image.ImageObserver">
+<!--   -->
+</a>
+<h3>Fields inherited from interface&nbsp;java.awt.image.ImageObserver</h3>
+<code>ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH</code></li>
+</ul>
+</li>
+</ul>
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
+<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/BackgroundPanel.html#BackgroundPanel-java.awt.Image-">BackgroundPanel</a></span>(java.awt.Image&nbsp;image)</code>
+<div class="block"><strong>Constructor</strong><br>
+ Set image as the background with the SCALED style.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/BackgroundPanel.html#BackgroundPanel-java.awt.Image-int-">BackgroundPanel</a></span>(java.awt.Image&nbsp;image,
+               int&nbsp;style)</code>
+<div class="block"><strong>Constructor</strong><br>
+ Set image as the background with the specified style.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/BackgroundPanel.html#BackgroundPanel-java.awt.Image-int-float-float-">BackgroundPanel</a></span>(java.awt.Image&nbsp;image,
+               int&nbsp;style,
+               float&nbsp;alignmentX,
+               float&nbsp;alignmentY)</code>
+<div class="block"><strong>Constructor</strong><br>
+ Set image as the background with the specified style and alignment.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colOne"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/BackgroundPanel.html#BackgroundPanel-java.awt.Paint-">BackgroundPanel</a></span>(java.awt.Paint&nbsp;painter)</code>
+<div class="block"><strong>Constructor</strong><br>
+ Use the Paint interface to paint a background.</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr id="i0" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/BackgroundPanel.html#add-javax.swing.JComponent-">add</a></span>(javax.swing.JComponent&nbsp;component)</code>
+<div class="block">Override method so we can make the component transparent.</div>
+</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/BackgroundPanel.html#add-javax.swing.JComponent-java.lang.Object-">add</a></span>(javax.swing.JComponent&nbsp;component,
+   java.lang.Object&nbsp;constraints)</code>
+<div class="block">Override method so we can make the component transparent.</div>
+</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/BackgroundPanel.html#drawActual-java.awt.Graphics-">drawActual</a></span>(java.awt.Graphics&nbsp;g)</code>
+<div class="block">Custom painting code for drawing the ACTUAL image as the background.</div>
+</td>
+</tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/BackgroundPanel.html#drawScaled-java.awt.Graphics-">drawScaled</a></span>(java.awt.Graphics&nbsp;g)</code>
+<div class="block">Custom painting code for drawing a SCALED image as the background.</div>
+</td>
+</tr>
+<tr id="i4" class="altColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/BackgroundPanel.html#drawTiled-java.awt.Graphics-">drawTiled</a></span>(java.awt.Graphics&nbsp;g)</code>
+<div class="block">Custom painting code for drawing TILED images as the background.</div>
+</td>
+</tr>
+<tr id="i5" class="rowColor">
+<td class="colFirst"><code>java.awt.Dimension</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/BackgroundPanel.html#getPreferredSize--">getPreferredSize</a></span>()</code>
+<div class="block">Override to provide a preferred size equal to the image size.</div>
+</td>
+</tr>
+<tr id="i6" class="altColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/BackgroundPanel.html#makeComponentTransparent-javax.swing.JComponent-">makeComponentTransparent</a></span>(javax.swing.JComponent&nbsp;component)</code>
+<div class="block">Try to make the component transparent.</div>
+</td>
+</tr>
+<tr id="i7" class="rowColor">
+<td class="colFirst"><code>protected void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/BackgroundPanel.html#paintComponent-java.awt.Graphics-">paintComponent</a></span>(java.awt.Graphics&nbsp;g)</code>
+<div class="block">Add custom painting.</div>
+</td>
+</tr>
+<tr id="i8" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/BackgroundPanel.html#setImage-java.awt.Image-">setImage</a></span>(java.awt.Image&nbsp;image)</code>
+<div class="block">Setter for the image used as the background.</div>
+</td>
+</tr>
+<tr id="i9" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/BackgroundPanel.html#setImageAlignmentX-float-">setImageAlignmentX</a></span>(float&nbsp;alignmentX)</code>
+<div class="block">Setter for the horizontal alignment of the image when using ACTUAL style.</div>
+</td>
+</tr>
+<tr id="i10" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/BackgroundPanel.html#setImageAlignmentY-float-">setImageAlignmentY</a></span>(float&nbsp;alignmentY)</code>
+<div class="block">Setter for the horizontal alignment of the image when using ACTUAL style.</div>
+</td>
+</tr>
+<tr id="i11" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/BackgroundPanel.html#setPaint-java.awt.Paint-">setPaint</a></span>(java.awt.Paint&nbsp;painter)</code>
+<div class="block">Setter for the Paint object used to paint the background.</div>
+</td>
+</tr>
+<tr id="i12" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/BackgroundPanel.html#setStyle-int-">setStyle</a></span>(int&nbsp;style)</code>
+<div class="block">Setter the style used to paint the background image.</div>
+</td>
+</tr>
+<tr id="i13" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/BackgroundPanel.html#setTransparentAdd-boolean-">setTransparentAdd</a></span>(boolean&nbsp;isTransparentAdd)</code>
+<div class="block">Controls whether components added to this panel should automatically
+ be made transparent.</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.javax.swing.JPanel">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;javax.swing.JPanel</h3>
+<code>getAccessibleContext, getUI, getUIClassID, paramString, setUI, updateUI</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.javax.swing.JComponent">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;javax.swing.JComponent</h3>
+<code>addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, hide, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingOrigin, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, paintImmediately, paintImmediately, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.awt.Container">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.awt.Container</h3>
+<code>add, add, add, add, add, addContainerListener, addImpl, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusDownCycle, validate, validateTree</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.awt.Component">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.awt.Component</h3>
+<code>action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
+<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait</code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field.detail">
+<!--   -->
+</a>
+<h3>Field Detail</h3>
+<a name="SCALED">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>SCALED</h4>
+<pre>public static final&nbsp;int SCALED</pre>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../constant-values.html#de.griefed.serverpackcreator.gui.BackgroundPanel.SCALED">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
+<a name="TILED">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>TILED</h4>
+<pre>public static final&nbsp;int TILED</pre>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../constant-values.html#de.griefed.serverpackcreator.gui.BackgroundPanel.TILED">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
+<a name="ACTUAL">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>ACTUAL</h4>
+<pre>public static final&nbsp;int ACTUAL</pre>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../constant-values.html#de.griefed.serverpackcreator.gui.BackgroundPanel.ACTUAL">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
+<a name="painter">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>painter</h4>
+<pre>private&nbsp;java.awt.Paint painter</pre>
+</li>
+</ul>
+<a name="image">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>image</h4>
+<pre>private&nbsp;java.awt.Image image</pre>
+</li>
+</ul>
+<a name="style">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>style</h4>
+<pre>private&nbsp;int style</pre>
+</li>
+</ul>
+<a name="alignmentX">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>alignmentX</h4>
+<pre>private&nbsp;float alignmentX</pre>
+</li>
+</ul>
+<a name="alignmentY">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>alignmentY</h4>
+<pre>private&nbsp;float alignmentY</pre>
+</li>
+</ul>
+<a name="isTransparentAdd">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>isTransparentAdd</h4>
+<pre>private&nbsp;boolean isTransparentAdd</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="BackgroundPanel-java.awt.Image-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>BackgroundPanel</h4>
+<pre>public&nbsp;BackgroundPanel(java.awt.Image&nbsp;image)</pre>
+<div class="block"><strong>Constructor</strong><br>
+ Set image as the background with the SCALED style.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>image</code> - Pass an image to the constructor to be used in the new JPanel.</dd>
+</dl>
+</li>
+</ul>
+<a name="BackgroundPanel-java.awt.Image-int-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>BackgroundPanel</h4>
+<pre>public&nbsp;BackgroundPanel(java.awt.Image&nbsp;image,
+                       int&nbsp;style)</pre>
+<div class="block"><strong>Constructor</strong><br>
+ Set image as the background with the specified style.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>image</code> - Pass an image to the constructor to be used in the new JPanel.</dd>
+<dd><code>style</code> - The style with which the image should be painted. See <a href="../../../../de/griefed/serverpackcreator/gui/BackgroundPanel.html#SCALED"><code>SCALED</code></a>, <a href="../../../../de/griefed/serverpackcreator/gui/BackgroundPanel.html#TILED"><code>TILED</code></a>, <a href="../../../../de/griefed/serverpackcreator/gui/BackgroundPanel.html#ACTUAL"><code>ACTUAL</code></a></dd>
+</dl>
+</li>
+</ul>
+<a name="BackgroundPanel-java.awt.Image-int-float-float-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>BackgroundPanel</h4>
+<pre>public&nbsp;BackgroundPanel(java.awt.Image&nbsp;image,
+                       int&nbsp;style,
+                       float&nbsp;alignmentX,
+                       float&nbsp;alignmentY)</pre>
+<div class="block"><strong>Constructor</strong><br>
+ Set image as the background with the specified style and alignment.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>image</code> - Pass an image to the constructor to be used in the new JPanel.</dd>
+<dd><code>style</code> - The style with which the image should be painted. See <a href="../../../../de/griefed/serverpackcreator/gui/BackgroundPanel.html#SCALED"><code>SCALED</code></a>, <a href="../../../../de/griefed/serverpackcreator/gui/BackgroundPanel.html#TILED"><code>TILED</code></a>, <a href="../../../../de/griefed/serverpackcreator/gui/BackgroundPanel.html#ACTUAL"><code>ACTUAL</code></a></dd>
+<dd><code>alignmentX</code> - Alignment along the x-axis.</dd>
+<dd><code>alignmentY</code> - Alignment along the y axis.</dd>
+</dl>
+</li>
+</ul>
+<a name="BackgroundPanel-java.awt.Paint-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>BackgroundPanel</h4>
+<pre>public&nbsp;BackgroundPanel(java.awt.Paint&nbsp;painter)</pre>
+<div class="block"><strong>Constructor</strong><br>
+ Use the Paint interface to paint a background.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>painter</code> - Pass a painter to be used as the background in the new JPanel.</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="setImage-java.awt.Image-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setImage</h4>
+<pre>public&nbsp;void&nbsp;setImage(java.awt.Image&nbsp;image)</pre>
+<div class="block">Setter for the image used as the background.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>image</code> - Image to be set as the background.</dd>
+</dl>
+</li>
+</ul>
+<a name="setStyle-int-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setStyle</h4>
+<pre>public&nbsp;void&nbsp;setStyle(int&nbsp;style)</pre>
+<div class="block">Setter the style used to paint the background image.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>style</code> - Sets the style with which the image should be painted.</dd>
+</dl>
+</li>
+</ul>
+<a name="setPaint-java.awt.Paint-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setPaint</h4>
+<pre>public&nbsp;void&nbsp;setPaint(java.awt.Paint&nbsp;painter)</pre>
+<div class="block">Setter for the Paint object used to paint the background.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>painter</code> - Sets the painter with which the background should be painted.</dd>
+</dl>
+</li>
+</ul>
+<a name="setImageAlignmentX-float-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setImageAlignmentX</h4>
+<pre>public&nbsp;void&nbsp;setImageAlignmentX(float&nbsp;alignmentX)</pre>
+<div class="block">Setter for the horizontal alignment of the image when using ACTUAL style.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>alignmentX</code> - Sets the alignment along the x-axis.</dd>
+</dl>
+</li>
+</ul>
+<a name="setImageAlignmentY-float-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setImageAlignmentY</h4>
+<pre>public&nbsp;void&nbsp;setImageAlignmentY(float&nbsp;alignmentY)</pre>
+<div class="block">Setter for the horizontal alignment of the image when using ACTUAL style.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>alignmentY</code> - Sets the alignment along the y-axis.</dd>
+</dl>
+</li>
+</ul>
+<a name="add-javax.swing.JComponent-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>add</h4>
+<pre>public&nbsp;void&nbsp;add(javax.swing.JComponent&nbsp;component)</pre>
+<div class="block">Override method so we can make the component transparent.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>component</code> - JComponent to add to the panel.</dd>
+</dl>
+</li>
+</ul>
+<a name="getPreferredSize--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getPreferredSize</h4>
+<pre>public&nbsp;java.awt.Dimension&nbsp;getPreferredSize()</pre>
+<div class="block">Override to provide a preferred size equal to the image size.</div>
+<dl>
+<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
+<dd><code>getPreferredSize</code>&nbsp;in class&nbsp;<code>javax.swing.JComponent</code></dd>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>Dimension. Returns the dimension of the passed image.</dd>
+</dl>
+</li>
+</ul>
+<a name="add-javax.swing.JComponent-java.lang.Object-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>add</h4>
+<pre>public&nbsp;void&nbsp;add(javax.swing.JComponent&nbsp;component,
+                java.lang.Object&nbsp;constraints)</pre>
+<div class="block">Override method so we can make the component transparent.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>component</code> - JComponent to add to the panel.</dd>
+<dd><code>constraints</code> - Contraints wich which the panel should be added.</dd>
+</dl>
+</li>
+</ul>
+<a name="setTransparentAdd-boolean-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>setTransparentAdd</h4>
+<pre>public&nbsp;void&nbsp;setTransparentAdd(boolean&nbsp;isTransparentAdd)</pre>
+<div class="block">Controls whether components added to this panel should automatically
+ be made transparent. That is, setOpaque(false) will be invoked.
+ The default is set to true.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>isTransparentAdd</code> - Whether to automatically make components transparent.</dd>
+</dl>
+</li>
+</ul>
+<a name="makeComponentTransparent-javax.swing.JComponent-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>makeComponentTransparent</h4>
+<pre>private&nbsp;void&nbsp;makeComponentTransparent(javax.swing.JComponent&nbsp;component)</pre>
+<div class="block">Try to make the component transparent.
+ For components that use renderers, like JTable, you will also need to
+ change the renderer to be transparent. An easy way to do this it to
+ set the background of the table to a Color using an alpha value of 0.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>component</code> - The component to make transparent.</dd>
+</dl>
+</li>
+</ul>
+<a name="paintComponent-java.awt.Graphics-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>paintComponent</h4>
+<pre>protected&nbsp;void&nbsp;paintComponent(java.awt.Graphics&nbsp;g)</pre>
+<div class="block">Add custom painting.</div>
+<dl>
+<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
+<dd><code>paintComponent</code>&nbsp;in class&nbsp;<code>javax.swing.JComponent</code></dd>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>g</code> - Received from parent.</dd>
+</dl>
+</li>
+</ul>
+<a name="drawScaled-java.awt.Graphics-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>drawScaled</h4>
+<pre>private&nbsp;void&nbsp;drawScaled(java.awt.Graphics&nbsp;g)</pre>
+<div class="block">Custom painting code for drawing a SCALED image as the background.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>g</code> - Received from parent.</dd>
+</dl>
+</li>
+</ul>
+<a name="drawTiled-java.awt.Graphics-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>drawTiled</h4>
+<pre>private&nbsp;void&nbsp;drawTiled(java.awt.Graphics&nbsp;g)</pre>
+<div class="block">Custom painting code for drawing TILED images as the background.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>g</code> - Received from parent.</dd>
+</dl>
+</li>
+</ul>
+<a name="drawActual-java.awt.Graphics-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>drawActual</h4>
+<pre>private&nbsp;void&nbsp;drawActual(java.awt.Graphics&nbsp;g)</pre>
+<div class="block">Custom painting code for drawing the ACTUAL image as the background.
+ The image is positioned in the panel based on the horizontal and
+ vertical alignments specified.</div>
+<dl>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>g</code> - Received from parent.</dd>
+</dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar.bottom">
+<!--   -->
+</a>
+<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
+<a name="navbar.bottom.firstrow">
+<!--   -->
+</a>
+<ul class="navList" title="Navigation">
+<li><a href="../../../../overview-summary.html">Overview</a></li>
+<li><a href="package-summary.html">Package</a></li>
+<li class="navBarCell1Rev">Class</li>
+<li><a href="package-tree.html">Tree</a></li>
+<li><a href="../../../../deprecated-list.html">Deprecated</a></li>
+<li><a href="../../../../index-all.html">Index</a></li>
+<li><a href="../../../../help-doc.html">Help</a></li>
+</ul>
+</div>
+<div class="subNav">
+<ul class="navList">
+<li><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../index.html?de/griefed/serverpackcreator/gui/BackgroundPanel.html" target="_top">Frames</a></li>
+<li><a href="BackgroundPanel.html" target="_top">No&nbsp;Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
+</ul>
+<div>
+<script type="text/javascript"><!--
+  allClassesLink = document.getElementById("allclasses_navbar_bottom");
+  if(window==top) {
+    allClassesLink.style.display = "block";
+  }
+  else {
+    allClassesLink.style.display = "none";
+  }
+  //-->
+</script>
+</div>
+<div>
+<ul class="subNavList">
+<li>Summary:&nbsp;</li>
+<li><a href="#nested.classes.inherited.from.class.javax.swing.JPanel">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
+<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method.detail">Method</a></li>
+</ul>
+</div>
+<a name="skip.navbar.bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+</body>
+</html>
diff --git a/docs/de/griefed/serverpackcreator/gui/CreateGui.html b/docs/de/griefed/serverpackcreator/gui/CreateGui.html
index b81258b3b..710997e75 100644
--- a/docs/de/griefed/serverpackcreator/gui/CreateGui.html
+++ b/docs/de/griefed/serverpackcreator/gui/CreateGui.html
@@ -47,7 +47,7 @@ var activeTableTab = "activeTableTab";
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../de/griefed/serverpackcreator/gui/BackgroundPanel.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -200,21 +200,37 @@ extends javax.swing.JPanel</pre>
 <th class="colLast" scope="col">Field and Description</th>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui">AboutTab</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#aboutTab">aboutTab</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>private static org.apache.logging.log4j.Logger</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#appLogger">appLogger</a></span></code>&nbsp;</td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../de/griefed/serverpackcreator/gui/BackgroundPanel.html" title="class in de.griefed.serverpackcreator.gui">BackgroundPanel</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#backgroundPanel">backgroundPanel</a></span></code>&nbsp;</td>
+</tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private javax.swing.ImageIcon</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#bannerIcon">bannerIcon</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>private java.awt.image.BufferedImage</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#bufferedImage">bufferedImage</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#configuration">configuration</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#createServerPack">createServerPack</a></span></code>&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#createServerPackTab">createServerPackTab</a></span></code>&nbsp;</td>
+</tr>
 <tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseCreateModpack</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#curseCreateModpack">curseCreateModpack</a></span></code>&nbsp;</td>
@@ -228,22 +244,34 @@ extends javax.swing.JPanel</pre>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#localizationManager">localizationManager</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html" title="class in de.griefed.serverpackcreator.gui">ModloaderInstallerLogTab</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#modloaderInstallerLogTab">modloaderInstallerLogTab</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>private com.typesafe.config.Config</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#secret">secret</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private java.io.File</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#secretFile">secretFile</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private javax.swing.JLabel</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#serverPackCreatorBanner">serverPackCreatorBanner</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private javax.swing.JFrame</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#serverPackCreatorFrame">serverPackCreatorFrame</a></span></code>&nbsp;</td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html" title="class in de.griefed.serverpackcreator.gui">ServerPackCreatorLogTab</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#serverPackCreatorLogTab">serverPackCreatorLogTab</a></span></code>&nbsp;</td>
+</tr>
 <tr class="rowColor">
+<td class="colFirst"><code>private java.awt.Image</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#tile">tile</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>private java.awt.Dimension</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html#windowDimension">windowDimension</a></span></code>&nbsp;</td>
 </tr>
@@ -404,6 +432,24 @@ extends javax.swing.JPanel</pre>
 <pre>private final&nbsp;java.awt.Dimension windowDimension</pre>
 </li>
 </ul>
+<a name="tile">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>tile</h4>
+<pre>private final&nbsp;java.awt.Image tile</pre>
+</li>
+</ul>
+<a name="bufferedImage">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>bufferedImage</h4>
+<pre>private&nbsp;java.awt.image.BufferedImage bufferedImage</pre>
+</li>
+</ul>
 <a name="localizationManager">
 <!--   -->
 </a>
@@ -440,6 +486,51 @@ extends javax.swing.JPanel</pre>
 <pre>private&nbsp;<a href="../../../../de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a> createServerPack</pre>
 </li>
 </ul>
+<a name="createServerPackTab">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>createServerPackTab</h4>
+<pre>private&nbsp;<a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a> createServerPackTab</pre>
+</li>
+</ul>
+<a name="serverPackCreatorLogTab">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>serverPackCreatorLogTab</h4>
+<pre>private&nbsp;<a href="../../../../de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html" title="class in de.griefed.serverpackcreator.gui">ServerPackCreatorLogTab</a> serverPackCreatorLogTab</pre>
+</li>
+</ul>
+<a name="modloaderInstallerLogTab">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>modloaderInstallerLogTab</h4>
+<pre>private&nbsp;<a href="../../../../de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html" title="class in de.griefed.serverpackcreator.gui">ModloaderInstallerLogTab</a> modloaderInstallerLogTab</pre>
+</li>
+</ul>
+<a name="aboutTab">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>aboutTab</h4>
+<pre>private&nbsp;<a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui">AboutTab</a> aboutTab</pre>
+</li>
+</ul>
+<a name="backgroundPanel">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>backgroundPanel</h4>
+<pre>private&nbsp;<a href="../../../../de/griefed/serverpackcreator/gui/BackgroundPanel.html" title="class in de.griefed.serverpackcreator.gui">BackgroundPanel</a> backgroundPanel</pre>
+</li>
+</ul>
 <a name="serverPackCreatorFrame">
 <!--   -->
 </a>
@@ -569,7 +660,7 @@ extends javax.swing.JPanel</pre>
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../de/griefed/serverpackcreator/gui/BackgroundPanel.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
diff --git a/docs/de/griefed/serverpackcreator/gui/CreateServerPackTab.html b/docs/de/griefed/serverpackcreator/gui/CreateServerPackTab.html
index eaf81e0e3..7ca391aea 100644
--- a/docs/de/griefed/serverpackcreator/gui/CreateServerPackTab.html
+++ b/docs/de/griefed/serverpackcreator/gui/CreateServerPackTab.html
@@ -72,7 +72,7 @@ var activeTableTab = "activeTableTab";
 <div>
 <ul class="subNavList">
 <li>Summary:&nbsp;</li>
-<li><a href="#nested.classes.inherited.from.class.java.awt.Component">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#nested.classes.inherited.from.class.javax.swing.JComponent">Nested</a>&nbsp;|&nbsp;</li>
 <li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
 <li><a href="#method.summary">Method</a></li>
@@ -101,12 +101,22 @@ var activeTableTab = "activeTableTab";
 <li>java.awt.Component</li>
 <li>
 <ul class="inheritance">
+<li>java.awt.Container</li>
+<li>
+<ul class="inheritance">
+<li>javax.swing.JComponent</li>
+<li>
+<ul class="inheritance">
 <li>de.griefed.serverpackcreator.gui.CreateServerPackTab</li>
 </ul>
 </li>
 </ul>
 </li>
 </ul>
+</li>
+</ul>
+</li>
+</ul>
 <div class="description">
 <ul class="blockList">
 <li class="blockList">
@@ -117,7 +127,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>public class <span class="typeNameLabel">CreateServerPackTab</span>
-extends java.awt.Component</pre>
+extends javax.swing.JComponent</pre>
 <div class="block">This class creates the tab which displays the labels, textfields, buttons and functions in order to create a new
  server pack. Available are:<br>
  JLabels and JTextFields for modpackDir, clientMods, copyDirs, javaPath, minecraftVersion, modLoader, modLoaderVersion<br>
@@ -146,6 +156,20 @@ extends java.awt.Component</pre>
 </a>
 <h3>Nested Class Summary</h3>
 <ul class="blockList">
+<li class="blockList"><a name="nested.classes.inherited.from.class.javax.swing.JComponent">
+<!--   -->
+</a>
+<h3>Nested classes/interfaces inherited from class&nbsp;javax.swing.JComponent</h3>
+<code>javax.swing.JComponent.AccessibleJComponent</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="nested.classes.inherited.from.class.java.awt.Container">
+<!--   -->
+</a>
+<h3>Nested classes/interfaces inherited from class&nbsp;java.awt.Container</h3>
+<code>java.awt.Container.AccessibleAWTContainer</code></li>
+</ul>
+<ul class="blockList">
 <li class="blockList"><a name="nested.classes.inherited.from.class.java.awt.Component">
 <!--   -->
 </a>
@@ -327,39 +351,50 @@ extends java.awt.Component</pre>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#modpackDirChooser">modpackDirChooser</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>private java.awt.Dimension</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#startDimension">startDimension</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>private javax.swing.ImageIcon</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#startGeneration">startGeneration</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private javax.swing.JTextField</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#textClientMods">textClientMods</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private javax.swing.JTextField</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#textCopyDirs">textCopyDirs</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private javax.swing.JTextField</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#textJavaPath">textJavaPath</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private javax.swing.JTextField</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#textMinecraftVersion">textMinecraftVersion</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private javax.swing.JTextField</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#textModloader">textModloader</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private javax.swing.JTextField</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#textModloaderVersion">textModloaderVersion</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private javax.swing.JTextField</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html#textModpackDir">textModpackDir</a></span></code>&nbsp;</td>
 </tr>
 </table>
 <ul class="blockList">
+<li class="blockList"><a name="fields.inherited.from.class.javax.swing.JComponent">
+<!--   -->
+</a>
+<h3>Fields inherited from class&nbsp;javax.swing.JComponent</h3>
+<code>listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW</code></li>
+</ul>
+<ul class="blockList">
 <li class="blockList"><a name="fields.inherited.from.class.java.awt.Component">
 <!--   -->
 </a>
@@ -418,11 +453,25 @@ extends java.awt.Component</pre>
 </tr>
 </table>
 <ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.javax.swing.JComponent">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;javax.swing.JComponent</h3>
+<code>addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getPreferredSize, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getUIClassID, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, hide, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingOrigin, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, paintComponent, paintImmediately, paintImmediately, paramString, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update, updateUI</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.awt.Container">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.awt.Container</h3>
+<code>add, add, add, add, add, addContainerListener, addImpl, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusDownCycle, validate, validateTree</code></li>
+</ul>
+<ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.awt.Component">
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;java.awt.Component</h3>
-<code>action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, addNotify, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, bounds, checkImage, checkImage, coalesceEvents, contains, contains, createImage, createImage, createVolatileImage, createVolatileImage, deliverEvent, disable, disableEvents, dispatchEvent, doLayout, enable, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getAccessibleContext, getAlignmentX, getAlignmentY, getBackground, getBaseline, getBaselineResizeBehavior, getBounds, getBounds, getColorModel, getComponentAt, getComponentAt, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeys, getFocusTraversalKeysEnabled, getFont, getFontMetrics, getForeground, getGraphics, getGraphicsConfiguration, getHeight, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getListeners, getLocale, getLocation, getLocation, getLocationOnScreen, getMaximumSize, getMinimumSize, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPreferredSize, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getSize, getToolkit, getTreeLock, getWidth, getX, getY, gotFocus, handleEvent, hasFocus, hide, imageUpdate, inside, invalidate, isBackgroundSet, isCursorSet, isDisplayable, isDoubleBuffered, isEnabled, isFocusable, isFocusCycleRoot, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isOpaque, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, layout, list, list, list, list, list, locate, location, lostFocus, minimumSize, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paint, paintAll, paramString, postEvent, preferredSize, prepareImage, prepareImage, print, printAll, processComponentEvent, processEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processKeyEvent, processMouseEvent, processMouseMotionEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removeNotify, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, repaint, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, reshape, resize, resize, revalidate, setBackground, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setEnabled, setFocusable, setFocusTraversalKeys, setFocusTraversalKeysEnabled, setFont, setForeground, setIgnoreRepaint, setLocale, setLocation, setLocation, setMaximumSize, setMinimumSize, setName, setPreferredSize, setSize, setSize, setVisible, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle, update, validate</code></li>
+<code>action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getAccessibleContext, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle</code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
@@ -544,6 +593,15 @@ extends java.awt.Component</pre>
 <pre>private final&nbsp;java.awt.Dimension miscButtonDimension</pre>
 </li>
 </ul>
+<a name="startDimension">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>startDimension</h4>
+<pre>private final&nbsp;java.awt.Dimension startDimension</pre>
+</li>
+</ul>
 <a name="chooserDimension">
 <!--   -->
 </a>
@@ -987,7 +1045,7 @@ extends java.awt.Component</pre>
 <div>
 <ul class="subNavList">
 <li>Summary:&nbsp;</li>
-<li><a href="#nested.classes.inherited.from.class.java.awt.Component">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#nested.classes.inherited.from.class.javax.swing.JComponent">Nested</a>&nbsp;|&nbsp;</li>
 <li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
 <li><a href="#method.summary">Method</a></li>
diff --git a/docs/de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html b/docs/de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html
index b01639d66..bf9d5e420 100644
--- a/docs/de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html
+++ b/docs/de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html
@@ -72,7 +72,7 @@ var activeTableTab = "activeTableTab";
 <div>
 <ul class="subNavList">
 <li>Summary:&nbsp;</li>
-<li><a href="#nested.classes.inherited.from.class.java.awt.Component">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#nested.classes.inherited.from.class.javax.swing.JComponent">Nested</a>&nbsp;|&nbsp;</li>
 <li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
 <li><a href="#method.summary">Method</a></li>
@@ -101,12 +101,22 @@ var activeTableTab = "activeTableTab";
 <li>java.awt.Component</li>
 <li>
 <ul class="inheritance">
+<li>java.awt.Container</li>
+<li>
+<ul class="inheritance">
+<li>javax.swing.JComponent</li>
+<li>
+<ul class="inheritance">
 <li>de.griefed.serverpackcreator.gui.ModloaderInstallerLogTab</li>
 </ul>
 </li>
 </ul>
 </li>
 </ul>
+</li>
+</ul>
+</li>
+</ul>
 <div class="description">
 <ul class="blockList">
 <li class="blockList">
@@ -117,7 +127,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>public class <span class="typeNameLabel">ModloaderInstallerLogTab</span>
-extends java.awt.Component</pre>
+extends javax.swing.JComponent</pre>
 <div class="block">This class creates the tab which display the latest modloader_installer.log tailer.</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -136,6 +146,20 @@ extends java.awt.Component</pre>
 </a>
 <h3>Nested Class Summary</h3>
 <ul class="blockList">
+<li class="blockList"><a name="nested.classes.inherited.from.class.javax.swing.JComponent">
+<!--   -->
+</a>
+<h3>Nested classes/interfaces inherited from class&nbsp;javax.swing.JComponent</h3>
+<code>javax.swing.JComponent.AccessibleJComponent</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="nested.classes.inherited.from.class.java.awt.Container">
+<!--   -->
+</a>
+<h3>Nested classes/interfaces inherited from class&nbsp;java.awt.Container</h3>
+<code>java.awt.Container.AccessibleAWTContainer</code></li>
+</ul>
+<ul class="blockList">
 <li class="blockList"><a name="nested.classes.inherited.from.class.java.awt.Component">
 <!--   -->
 </a>
@@ -178,6 +202,13 @@ extends java.awt.Component</pre>
 </tr>
 </table>
 <ul class="blockList">
+<li class="blockList"><a name="fields.inherited.from.class.javax.swing.JComponent">
+<!--   -->
+</a>
+<h3>Fields inherited from class&nbsp;javax.swing.JComponent</h3>
+<code>listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW</code></li>
+</ul>
+<ul class="blockList">
 <li class="blockList"><a name="fields.inherited.from.class.java.awt.Component">
 <!--   -->
 </a>
@@ -234,11 +265,25 @@ extends java.awt.Component</pre>
 </tr>
 </table>
 <ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.javax.swing.JComponent">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;javax.swing.JComponent</h3>
+<code>addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getPreferredSize, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getUIClassID, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, hide, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingOrigin, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, paintComponent, paintImmediately, paintImmediately, paramString, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update, updateUI</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.awt.Container">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.awt.Container</h3>
+<code>add, add, add, add, add, addContainerListener, addImpl, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusDownCycle, validate, validateTree</code></li>
+</ul>
+<ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.awt.Component">
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;java.awt.Component</h3>
-<code>action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, addNotify, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, bounds, checkImage, checkImage, coalesceEvents, contains, contains, createImage, createImage, createVolatileImage, createVolatileImage, deliverEvent, disable, disableEvents, dispatchEvent, doLayout, enable, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getAccessibleContext, getAlignmentX, getAlignmentY, getBackground, getBaseline, getBaselineResizeBehavior, getBounds, getBounds, getColorModel, getComponentAt, getComponentAt, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeys, getFocusTraversalKeysEnabled, getFont, getFontMetrics, getForeground, getGraphics, getGraphicsConfiguration, getHeight, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getListeners, getLocale, getLocation, getLocation, getLocationOnScreen, getMaximumSize, getMinimumSize, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPreferredSize, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getSize, getToolkit, getTreeLock, getWidth, getX, getY, gotFocus, handleEvent, hasFocus, hide, imageUpdate, inside, invalidate, isBackgroundSet, isCursorSet, isDisplayable, isDoubleBuffered, isEnabled, isFocusable, isFocusCycleRoot, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isOpaque, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, layout, list, list, list, list, list, locate, location, lostFocus, minimumSize, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paint, paintAll, paramString, postEvent, preferredSize, prepareImage, prepareImage, print, printAll, processComponentEvent, processEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processKeyEvent, processMouseEvent, processMouseMotionEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removeNotify, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, repaint, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, reshape, resize, resize, revalidate, setBackground, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setEnabled, setFocusable, setFocusTraversalKeys, setFocusTraversalKeysEnabled, setFont, setForeground, setIgnoreRepaint, setLocale, setLocation, setLocation, setMaximumSize, setMinimumSize, setName, setPreferredSize, setSize, setSize, setVisible, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle, update, validate</code></li>
+<code>action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getAccessibleContext, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle</code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
@@ -409,7 +454,7 @@ extends java.awt.Component</pre>
 <div>
 <ul class="subNavList">
 <li>Summary:&nbsp;</li>
-<li><a href="#nested.classes.inherited.from.class.java.awt.Component">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#nested.classes.inherited.from.class.javax.swing.JComponent">Nested</a>&nbsp;|&nbsp;</li>
 <li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
 <li><a href="#method.summary">Method</a></li>
diff --git a/docs/de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html b/docs/de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html
index 3c42bf0d9..24beabf88 100644
--- a/docs/de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html
+++ b/docs/de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html
@@ -72,7 +72,7 @@ var activeTableTab = "activeTableTab";
 <div>
 <ul class="subNavList">
 <li>Summary:&nbsp;</li>
-<li><a href="#nested.classes.inherited.from.class.java.awt.Component">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#nested.classes.inherited.from.class.javax.swing.JComponent">Nested</a>&nbsp;|&nbsp;</li>
 <li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
 <li><a href="#method.summary">Method</a></li>
@@ -101,12 +101,22 @@ var activeTableTab = "activeTableTab";
 <li>java.awt.Component</li>
 <li>
 <ul class="inheritance">
+<li>java.awt.Container</li>
+<li>
+<ul class="inheritance">
+<li>javax.swing.JComponent</li>
+<li>
+<ul class="inheritance">
 <li>de.griefed.serverpackcreator.gui.ServerPackCreatorLogTab</li>
 </ul>
 </li>
 </ul>
 </li>
 </ul>
+</li>
+</ul>
+</li>
+</ul>
 <div class="description">
 <ul class="blockList">
 <li class="blockList">
@@ -117,7 +127,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>public class <span class="typeNameLabel">ServerPackCreatorLogTab</span>
-extends java.awt.Component</pre>
+extends javax.swing.JComponent</pre>
 <div class="block">This class creates the tab which display the latest serverpackcreator.log tailer.</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -136,6 +146,20 @@ extends java.awt.Component</pre>
 </a>
 <h3>Nested Class Summary</h3>
 <ul class="blockList">
+<li class="blockList"><a name="nested.classes.inherited.from.class.javax.swing.JComponent">
+<!--   -->
+</a>
+<h3>Nested classes/interfaces inherited from class&nbsp;javax.swing.JComponent</h3>
+<code>javax.swing.JComponent.AccessibleJComponent</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="nested.classes.inherited.from.class.java.awt.Container">
+<!--   -->
+</a>
+<h3>Nested classes/interfaces inherited from class&nbsp;java.awt.Container</h3>
+<code>java.awt.Container.AccessibleAWTContainer</code></li>
+</ul>
+<ul class="blockList">
 <li class="blockList"><a name="nested.classes.inherited.from.class.java.awt.Component">
 <!--   -->
 </a>
@@ -178,6 +202,13 @@ extends java.awt.Component</pre>
 </tr>
 </table>
 <ul class="blockList">
+<li class="blockList"><a name="fields.inherited.from.class.javax.swing.JComponent">
+<!--   -->
+</a>
+<h3>Fields inherited from class&nbsp;javax.swing.JComponent</h3>
+<code>listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW</code></li>
+</ul>
+<ul class="blockList">
 <li class="blockList"><a name="fields.inherited.from.class.java.awt.Component">
 <!--   -->
 </a>
@@ -234,11 +265,25 @@ extends java.awt.Component</pre>
 </tr>
 </table>
 <ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.javax.swing.JComponent">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;javax.swing.JComponent</h3>
+<code>addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getPreferredSize, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getUIClassID, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, hide, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingOrigin, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, paintComponent, paintImmediately, paintImmediately, paramString, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update, updateUI</code></li>
+</ul>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.java.awt.Container">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.awt.Container</h3>
+<code>add, add, add, add, add, addContainerListener, addImpl, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusDownCycle, validate, validateTree</code></li>
+</ul>
+<ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.awt.Component">
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;java.awt.Component</h3>
-<code>action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, addNotify, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, bounds, checkImage, checkImage, coalesceEvents, contains, contains, createImage, createImage, createVolatileImage, createVolatileImage, deliverEvent, disable, disableEvents, dispatchEvent, doLayout, enable, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getAccessibleContext, getAlignmentX, getAlignmentY, getBackground, getBaseline, getBaselineResizeBehavior, getBounds, getBounds, getColorModel, getComponentAt, getComponentAt, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeys, getFocusTraversalKeysEnabled, getFont, getFontMetrics, getForeground, getGraphics, getGraphicsConfiguration, getHeight, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getListeners, getLocale, getLocation, getLocation, getLocationOnScreen, getMaximumSize, getMinimumSize, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPreferredSize, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getSize, getToolkit, getTreeLock, getWidth, getX, getY, gotFocus, handleEvent, hasFocus, hide, imageUpdate, inside, invalidate, isBackgroundSet, isCursorSet, isDisplayable, isDoubleBuffered, isEnabled, isFocusable, isFocusCycleRoot, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isOpaque, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, layout, list, list, list, list, list, locate, location, lostFocus, minimumSize, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paint, paintAll, paramString, postEvent, preferredSize, prepareImage, prepareImage, print, printAll, processComponentEvent, processEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processKeyEvent, processMouseEvent, processMouseMotionEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removeNotify, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, repaint, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, reshape, resize, resize, revalidate, setBackground, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setEnabled, setFocusable, setFocusTraversalKeys, setFocusTraversalKeysEnabled, setFont, setForeground, setIgnoreRepaint, setLocale, setLocation, setLocation, setMaximumSize, setMinimumSize, setName, setPreferredSize, setSize, setSize, setVisible, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle, update, validate</code></li>
+<code>action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getAccessibleContext, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle</code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
@@ -409,7 +454,7 @@ extends java.awt.Component</pre>
 <div>
 <ul class="subNavList">
 <li>Summary:&nbsp;</li>
-<li><a href="#nested.classes.inherited.from.class.java.awt.Component">Nested</a>&nbsp;|&nbsp;</li>
+<li><a href="#nested.classes.inherited.from.class.javax.swing.JComponent">Nested</a>&nbsp;|&nbsp;</li>
 <li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
 <li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
 <li><a href="#method.summary">Method</a></li>
diff --git a/docs/de/griefed/serverpackcreator/gui/package-frame.html b/docs/de/griefed/serverpackcreator/gui/package-frame.html
index f2da25ef0..d86f4cc52 100644
--- a/docs/de/griefed/serverpackcreator/gui/package-frame.html
+++ b/docs/de/griefed/serverpackcreator/gui/package-frame.html
@@ -13,6 +13,7 @@
 <h2 title="Classes">Classes</h2>
 <ul title="Classes">
 <li><a href="AboutTab.html" title="class in de.griefed.serverpackcreator.gui" target="classFrame">AboutTab</a></li>
+<li><a href="BackgroundPanel.html" title="class in de.griefed.serverpackcreator.gui" target="classFrame">BackgroundPanel</a></li>
 <li><a href="CreateGui.html" title="class in de.griefed.serverpackcreator.gui" target="classFrame">CreateGui</a></li>
 <li><a href="CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui" target="classFrame">CreateServerPackTab</a></li>
 <li><a href="ModloaderInstallerLogTab.html" title="class in de.griefed.serverpackcreator.gui" target="classFrame">ModloaderInstallerLogTab</a></li>
diff --git a/docs/de/griefed/serverpackcreator/gui/package-summary.html b/docs/de/griefed/serverpackcreator/gui/package-summary.html
index 4103dc391..740b16a0c 100644
--- a/docs/de/griefed/serverpackcreator/gui/package-summary.html
+++ b/docs/de/griefed/serverpackcreator/gui/package-summary.html
@@ -89,6 +89,12 @@
 </td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><a href="../../../../de/griefed/serverpackcreator/gui/BackgroundPanel.html" title="class in de.griefed.serverpackcreator.gui">BackgroundPanel</a></td>
+<td class="colLast">
+<div class="block">Hey, Griefed here.</div>
+</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui">CreateGui</a></td>
 <td class="colLast">
 <div class="block"><strong>Table of methods</strong><br>
@@ -98,20 +104,20 @@
  This class creates and shows the GUI needed for running ServerPackCreator in....well...GUI mode.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></td>
 <td class="colLast">
 <div class="block">This class creates the tab which displays the labels, textfields, buttons and functions in order to create a new
  server pack.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html" title="class in de.griefed.serverpackcreator.gui">ModloaderInstallerLogTab</a></td>
 <td class="colLast">
 <div class="block">This class creates the tab which display the latest modloader_installer.log tailer.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html" title="class in de.griefed.serverpackcreator.gui">ServerPackCreatorLogTab</a></td>
 <td class="colLast">
 <div class="block">This class creates the tab which display the latest serverpackcreator.log tailer.</div>
diff --git a/docs/de/griefed/serverpackcreator/gui/package-tree.html b/docs/de/griefed/serverpackcreator/gui/package-tree.html
index 1dfc101db..708275b0c 100644
--- a/docs/de/griefed/serverpackcreator/gui/package-tree.html
+++ b/docs/de/griefed/serverpackcreator/gui/package-tree.html
@@ -86,18 +86,19 @@
 <ul>
 <li type="circle">javax.swing.JComponent (implements java.io.Serializable)
 <ul>
+<li type="circle">de.griefed.serverpackcreator.gui.<a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">CreateServerPackTab</span></a></li>
 <li type="circle">javax.swing.JPanel (implements javax.accessibility.Accessible)
 <ul>
+<li type="circle">de.griefed.serverpackcreator.gui.<a href="../../../../de/griefed/serverpackcreator/gui/BackgroundPanel.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">BackgroundPanel</span></a></li>
 <li type="circle">de.griefed.serverpackcreator.gui.<a href="../../../../de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">CreateGui</span></a></li>
 </ul>
 </li>
+<li type="circle">de.griefed.serverpackcreator.gui.<a href="../../../../de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">ModloaderInstallerLogTab</span></a></li>
+<li type="circle">de.griefed.serverpackcreator.gui.<a href="../../../../de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">ServerPackCreatorLogTab</span></a></li>
 </ul>
 </li>
 </ul>
 </li>
-<li type="circle">de.griefed.serverpackcreator.gui.<a href="../../../../de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">CreateServerPackTab</span></a></li>
-<li type="circle">de.griefed.serverpackcreator.gui.<a href="../../../../de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">ModloaderInstallerLogTab</span></a></li>
-<li type="circle">de.griefed.serverpackcreator.gui.<a href="../../../../de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">ServerPackCreatorLogTab</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/docs/index-all.html b/docs/index-all.html
index a54654d17..57bd307f6 100644
--- a/docs/index-all.html
+++ b/docs/index-all.html
@@ -89,6 +89,22 @@
 <dd>
 <div class="block">Create the tab for the About-page of ServerpackCreator.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateGui.html#aboutTab">aboutTab</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui">CreateGui</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html#ACTUAL">ACTUAL</a></span> - Static variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html" title="class in de.griefed.serverpackcreator.gui">BackgroundPanel</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html#add-javax.swing.JComponent-">add(JComponent)</a></span> - Method in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html" title="class in de.griefed.serverpackcreator.gui">BackgroundPanel</a></dt>
+<dd>
+<div class="block">Override method so we can make the component transparent.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html#add-javax.swing.JComponent-java.lang.Object-">add(JComponent, Object)</a></span> - Method in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html" title="class in de.griefed.serverpackcreator.gui">BackgroundPanel</a></dt>
+<dd>
+<div class="block">Override method so we can make the component transparent.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html#alignmentX">alignmentX</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html" title="class in de.griefed.serverpackcreator.gui">BackgroundPanel</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html#alignmentY">alignmentY</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html" title="class in de.griefed.serverpackcreator.gui">BackgroundPanel</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#appLogger">appLogger</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/CreateServerPack.html#appLogger">appLogger</a></span> - Static variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a></dt>
@@ -115,8 +131,36 @@
 </a>
 <h2 class="title">B</h2>
 <dl>
+<dt><a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">BackgroundPanel</span></a> - Class in <a href="de/griefed/serverpackcreator/gui/package-summary.html">de.griefed.serverpackcreator.gui</a></dt>
+<dd>
+<div class="block">Hey, Griefed here.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html#BackgroundPanel-java.awt.Image-">BackgroundPanel(Image)</a></span> - Constructor for class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html" title="class in de.griefed.serverpackcreator.gui">BackgroundPanel</a></dt>
+<dd>
+<div class="block"><strong>Constructor</strong><br>
+ Set image as the background with the SCALED style.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html#BackgroundPanel-java.awt.Image-int-">BackgroundPanel(Image, int)</a></span> - Constructor for class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html" title="class in de.griefed.serverpackcreator.gui">BackgroundPanel</a></dt>
+<dd>
+<div class="block"><strong>Constructor</strong><br>
+ Set image as the background with the specified style.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html#BackgroundPanel-java.awt.Image-int-float-float-">BackgroundPanel(Image, int, float, float)</a></span> - Constructor for class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html" title="class in de.griefed.serverpackcreator.gui">BackgroundPanel</a></dt>
+<dd>
+<div class="block"><strong>Constructor</strong><br>
+ Set image as the background with the specified style and alignment.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html#BackgroundPanel-java.awt.Paint-">BackgroundPanel(Paint)</a></span> - Constructor for class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html" title="class in de.griefed.serverpackcreator.gui">BackgroundPanel</a></dt>
+<dd>
+<div class="block"><strong>Constructor</strong><br>
+ Use the Paint interface to paint a background.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateGui.html#backgroundPanel">backgroundPanel</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui">CreateGui</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateGui.html#bannerIcon">bannerIcon</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui">CreateGui</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateGui.html#bufferedImage">bufferedImage</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui">CreateGui</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#buildString-java.lang.String...-">buildString(String...)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
 <div class="block">Converts a sequence of Strings, for example from a list, into a concatenated String.</div>
@@ -245,6 +289,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#clientModsChooser">clientModsChooser</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/AboutTab.html#clipboard">clipboard</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui">AboutTab</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#config">config</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#configChooser">configChooser</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
@@ -269,6 +315,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#configuration">configuration</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/AboutTab.html#configURL">configURL</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui">AboutTab</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/AboutTab.html#constraints">constraints</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui">AboutTab</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#constraints">constraints</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
@@ -334,6 +382,10 @@
 <div class="block"><strong>Constructor</strong>
  Used for Dependency Injection.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/AboutTab.html#createHasteBinFromFile-java.io.File-">createHasteBinFromFile(File)</a></span> - Method in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui">AboutTab</a></dt>
+<dd>
+<div class="block">Create a HasteBin post from a given text file.</div>
+</dd>
 <dt><a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">CreateServerPack</span></a> - Class in <a href="de/griefed/serverpackcreator/package-summary.html">de.griefed.serverpackcreator</a></dt>
 <dd>
 <div class="block"><strong>Table of methods</strong>
@@ -350,6 +402,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#createServerPackPanel">createServerPackPanel</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateGui.html#createServerPackTab">createServerPackTab</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui">CreateGui</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">CreateServerPackTab</span></a> - Class in <a href="de/griefed/serverpackcreator/gui/package-summary.html">de.griefed.serverpackcreator.gui</a></dt>
 <dd>
 <div class="block">This class creates the tab which displays the labels, textfields, buttons and functions in order to create a new
@@ -496,6 +550,18 @@
 <dd>
 <div class="block">Downloads all mods specified in the modpack's manifest.json file.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html#drawActual-java.awt.Graphics-">drawActual(Graphics)</a></span> - Method in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html" title="class in de.griefed.serverpackcreator.gui">BackgroundPanel</a></dt>
+<dd>
+<div class="block">Custom painting code for drawing the ACTUAL image as the background.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html#drawScaled-java.awt.Graphics-">drawScaled(Graphics)</a></span> - Method in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html" title="class in de.griefed.serverpackcreator.gui">BackgroundPanel</a></dt>
+<dd>
+<div class="block">Custom painting code for drawing a SCALED image as the background.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html#drawTiled-java.awt.Graphics-">drawTiled(Graphics)</a></span> - Method in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html" title="class in de.griefed.serverpackcreator.gui">BackgroundPanel</a></dt>
+<dd>
+<div class="block">Custom painting code for drawing TILED images as the background.</div>
+</dd>
 </dl>
 <a name="I:E">
 <!--   -->
@@ -756,6 +822,10 @@
 <dd>
 <div class="block">Getter for creator.conf.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html#getPreferredSize--">getPreferredSize()</a></span> - Method in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html" title="class in de.griefed.serverpackcreator.gui">BackgroundPanel</a></dt>
+<dd>
+<div class="block">Override to provide a preferred size equal to the image size.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#getProjectFileID--">getProjectFileID()</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
 <div class="block">Getter for the CurseForge file of a modpack, which will be created by <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#curseForgeModpack-java.lang.String-java.lang.Integer-java.lang.Integer-"><code>CurseCreateModpack.curseForgeModpack(String, Integer, Integer)</code></a>.</div>
@@ -802,6 +872,8 @@
 </a>
 <h2 class="title">H</h2>
 <dl>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/AboutTab.html#hastebinIcon">hastebinIcon</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui">AboutTab</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#helpIcon">helpIcon</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#helpScrollPane">helpScrollPane</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
@@ -824,6 +896,8 @@
 <dd>
 <div class="block">Ignore unknown values/object.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html#image">image</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html" title="class in de.griefed.serverpackcreator.gui">BackgroundPanel</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#includeServerIcon">includeServerIcon</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#includeServerInstallation">includeServerInstallation</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
@@ -903,6 +977,8 @@
 </dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/AboutTab.html#issueIcon">issueIcon</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui">AboutTab</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html#isTransparentAdd">isTransparentAdd</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html" title="class in de.griefed.serverpackcreator.gui">BackgroundPanel</a></dt>
+<dd>&nbsp;</dd>
 </dl>
 <a name="I:J">
 <!--   -->
@@ -1020,6 +1096,10 @@
 <dd>
 <div class="block">Shows the GUI from the EDT by using SwingUtilities and it's invokeLater method by calling <a href="de/griefed/serverpackcreator/gui/CreateGui.html#createAndShowGUI--"><code>CreateGui.createAndShowGUI()</code></a>.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html#makeComponentTransparent-javax.swing.JComponent-">makeComponentTransparent(JComponent)</a></span> - Method in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html" title="class in de.griefed.serverpackcreator.gui">BackgroundPanel</a></dt>
+<dd>
+<div class="block">Try to make the component transparent.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html#minecraft">minecraft</a></span> - Variable in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseModpack</a></dt>
 <dd>
 <div class="block">Ignore unknown values/object.</div>
@@ -1034,6 +1114,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html#modloaderInstallerLogPanel">modloaderInstallerLogPanel</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html" title="class in de.griefed.serverpackcreator.gui">ModloaderInstallerLogTab</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateGui.html#modloaderInstallerLogTab">modloaderInstallerLogTab</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui">CreateGui</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">ModloaderInstallerLogTab</span></a> - Class in <a href="de/griefed/serverpackcreator/gui/package-summary.html">de.griefed.serverpackcreator.gui</a></dt>
 <dd>
 <div class="block">This class creates the tab which display the latest modloader_installer.log tailer.</div>
@@ -1080,13 +1162,19 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/FilesSetup.html#oldConfigFile">oldConfigFile</a></span> - Variable in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/FilesSetup.html" title="class in de.griefed.serverpackcreator">FilesSetup</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/AboutTab.html#options">options</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui">AboutTab</a></dt>
+<dd>&nbsp;</dd>
 </dl>
 <a name="I:P">
 <!--   -->
 </a>
 <h2 class="title">P</h2>
 <dl>
-<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/AboutTab.html#pastebinIcon">pastebinIcon</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui">AboutTab</a></dt>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html#paintComponent-java.awt.Graphics-">paintComponent(Graphics)</a></span> - Method in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html" title="class in de.griefed.serverpackcreator.gui">BackgroundPanel</a></dt>
+<dd>
+<div class="block">Add custom painting.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html#painter">painter</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html" title="class in de.griefed.serverpackcreator.gui">BackgroundPanel</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#printConfig-java.lang.String-java.util.List-java.util.List-boolean-java.lang.String-java.lang.String-java.lang.String-java.lang.String-boolean-boolean-boolean-boolean-">printConfig(String, List&lt;String&gt;, List&lt;String&gt;, boolean, String, String, String, String, boolean, boolean, boolean, boolean)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
@@ -1140,6 +1228,8 @@
 </a>
 <h2 class="title">S</h2>
 <dl>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html#SCALED">SCALED</a></span> - Static variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html" title="class in de.griefed.serverpackcreator.gui">BackgroundPanel</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html#scrollPane">scrollPane</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html" title="class in de.griefed.serverpackcreator.gui">ModloaderInstallerLogTab</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html#scrollPane">scrollPane</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html" title="class in de.griefed.serverpackcreator.gui">ServerPackCreatorLogTab</a></dt>
@@ -1150,10 +1240,16 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateGui.html#serverPackCreatorBanner">serverPackCreatorBanner</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui">CreateGui</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/AboutTab.html#serverPackCreatorConf">serverPackCreatorConf</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui">AboutTab</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateGui.html#serverPackCreatorFrame">serverPackCreatorFrame</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui">CreateGui</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/AboutTab.html#serverPackCreatorLog">serverPackCreatorLog</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui">AboutTab</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html#serverPackCreatorLogPanel">serverPackCreatorLogPanel</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html" title="class in de.griefed.serverpackcreator.gui">ServerPackCreatorLogTab</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateGui.html#serverPackCreatorLogTab">serverPackCreatorLogTab</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui">CreateGui</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">ServerPackCreatorLogTab</span></a> - Class in <a href="de/griefed/serverpackcreator/gui/package-summary.html">de.griefed.serverpackcreator.gui</a></dt>
 <dd>
 <div class="block">This class creates the tab which display the latest serverpackcreator.log tailer.</div>
@@ -1196,6 +1292,18 @@
 <dd>
 <div class="block">Setter for the modloader and modloader version used by the CurseForge modpack.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html#setImage-java.awt.Image-">setImage(Image)</a></span> - Method in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html" title="class in de.griefed.serverpackcreator.gui">BackgroundPanel</a></dt>
+<dd>
+<div class="block">Setter for the image used as the background.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html#setImageAlignmentX-float-">setImageAlignmentX(float)</a></span> - Method in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html" title="class in de.griefed.serverpackcreator.gui">BackgroundPanel</a></dt>
+<dd>
+<div class="block">Setter for the horizontal alignment of the image when using ACTUAL style.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html#setImageAlignmentY-float-">setImageAlignmentY(float)</a></span> - Method in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html" title="class in de.griefed.serverpackcreator.gui">BackgroundPanel</a></dt>
+<dd>
+<div class="block">Setter for the horizontal alignment of the image when using ACTUAL style.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#setIncludeServerIcon-boolean-">setIncludeServerIcon(boolean)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
 <div class="block">Setter for whether the server-icon.png should be included in the server pack.</div>
@@ -1256,6 +1364,10 @@
 <dd>
 <div class="block">Setter for the name of the CurseForge modpack.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html#setPaint-java.awt.Paint-">setPaint(Paint)</a></span> - Method in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html" title="class in de.griefed.serverpackcreator.gui">BackgroundPanel</a></dt>
+<dd>
+<div class="block">Setter for the Paint object used to paint the background.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#setProjectFileID-int-">setProjectFileID(int)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
 <div class="block">Setter for the CurseForge file of a modpack, which will be created by <a href="de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.html#curseForgeModpack-java.lang.String-java.lang.Integer-java.lang.Integer-"><code>CurseCreateModpack.curseForgeModpack(String, Integer, Integer)</code></a>.</div>
@@ -1268,6 +1380,15 @@
 <dd>
 <div class="block">Setter for a projectID of a dependency in the CurseForge modpack.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html#setStyle-int-">setStyle(int)</a></span> - Method in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html" title="class in de.griefed.serverpackcreator.gui">BackgroundPanel</a></dt>
+<dd>
+<div class="block">Setter the style used to paint the background image.</div>
+</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html#setTransparentAdd-boolean-">setTransparentAdd(boolean)</a></span> - Method in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html" title="class in de.griefed.serverpackcreator.gui">BackgroundPanel</a></dt>
+<dd>
+<div class="block">Controls whether components added to this panel should automatically
+ be made transparent.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html#setVersion-java.lang.String-">setVersion(String)</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseMinecraft</a></dt>
 <dd>
 <div class="block">Setter for the Minecraft version used by the CurseForge modpack.</div>
@@ -1276,8 +1397,16 @@
 <dd>
 <div class="block">Setter for the version of the CurseForge modpack.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/AboutTab.html#spclogURL">spclogURL</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui">AboutTab</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#startDimension">startDimension</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#startGeneration">startGeneration</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/AboutTab.html#stringSelection">stringSelection</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui">AboutTab</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html#style">style</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html" title="class in de.griefed.serverpackcreator.gui">BackgroundPanel</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/Configuration.html#suggestCopyDirs-java.lang.String-">suggestCopyDirs(String)</a></span> - Method in class de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator">Configuration</a></dt>
 <dd>
 <div class="block">Creates a list of suggested directories to include in server pack which is later on written to a new configuration file.</div>
@@ -1292,10 +1421,14 @@
 </a>
 <h2 class="title">T</h2>
 <dl>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/AboutTab.html#textArea">textArea</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui">AboutTab</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html#textArea">textArea</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html" title="class in de.griefed.serverpackcreator.gui">ModloaderInstallerLogTab</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html#textArea">textArea</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html" title="class in de.griefed.serverpackcreator.gui">ServerPackCreatorLogTab</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/AboutTab.html#textAreaContent">textAreaContent</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui">AboutTab</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#textClientMods">textClientMods</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html#textCopyDirs">textCopyDirs</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a></dt>
@@ -1312,6 +1445,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/AboutTab.html#textPane">textPane</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui">AboutTab</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/CreateGui.html#tile">tile</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui">CreateGui</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html#TILED">TILED</a></span> - Static variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html" title="class in de.griefed.serverpackcreator.gui">BackgroundPanel</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html#toString--">toString()</a></span> - Method in class de.griefed.serverpackcreator.curseforgemodpack.<a href="de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.html" title="class in de.griefed.serverpackcreator.curseforgemodpack">CurseFiles</a></dt>
 <dd>
 <div class="block">A comma separated combination of a dependency projectID and fileID of a CurseForge modpack.</div>
@@ -1339,6 +1476,8 @@
 <dd>
 <div class="block">With help from <a href=https://www.baeldung.com/java-compress-and-uncompress>Baeldung Java Tutorials</a>.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="de/griefed/serverpackcreator/gui/AboutTab.html#userResponse">userResponse</a></span> - Variable in class de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui">AboutTab</a></dt>
+<dd>&nbsp;</dd>
 </dl>
 <a name="I:V">
 <!--   -->
diff --git a/docs/overview-tree.html b/docs/overview-tree.html
index d9ca2afb7..6fb29b414 100644
--- a/docs/overview-tree.html
+++ b/docs/overview-tree.html
@@ -89,18 +89,19 @@
 <ul>
 <li type="circle">javax.swing.JComponent (implements java.io.Serializable)
 <ul>
+<li type="circle">de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">CreateServerPackTab</span></a></li>
 <li type="circle">javax.swing.JPanel (implements javax.accessibility.Accessible)
 <ul>
+<li type="circle">de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">BackgroundPanel</span></a></li>
 <li type="circle">de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateGui.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">CreateGui</span></a></li>
 </ul>
 </li>
+<li type="circle">de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">ModloaderInstallerLogTab</span></a></li>
+<li type="circle">de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">ServerPackCreatorLogTab</span></a></li>
 </ul>
 </li>
 </ul>
 </li>
-<li type="circle">de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">CreateServerPackTab</span></a></li>
-<li type="circle">de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">ModloaderInstallerLogTab</span></a></li>
-<li type="circle">de.griefed.serverpackcreator.gui.<a href="de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html" title="class in de.griefed.serverpackcreator.gui"><span class="typeNameLink">ServerPackCreatorLogTab</span></a></li>
 </ul>
 </li>
 <li type="circle">de.griefed.serverpackcreator.<a href="de/griefed/serverpackcreator/Configuration.html" title="class in de.griefed.serverpackcreator"><span class="typeNameLink">Configuration</span></a></li>
diff --git a/docs/serialized-form.html b/docs/serialized-form.html
index 1ea730567..cdf9a1d48 100644
--- a/docs/serialized-form.html
+++ b/docs/serialized-form.html
@@ -96,8 +96,8 @@
 <pre>javax.swing.ImageIcon issueIcon</pre>
 </li>
 <li class="blockList">
-<h4>pastebinIcon</h4>
-<pre>javax.swing.ImageIcon pastebinIcon</pre>
+<h4>hastebinIcon</h4>
+<pre>javax.swing.ImageIcon hastebinIcon</pre>
 </li>
 <li class="blockList">
 <h4>prosperIcon</h4>
@@ -131,10 +131,86 @@
 <h4>buttonOpenIssue</h4>
 <pre>javax.swing.JButton buttonOpenIssue</pre>
 </li>
-<li class="blockListLast">
+<li class="blockList">
 <h4>buttonDiscord</h4>
 <pre>javax.swing.JButton buttonDiscord</pre>
 </li>
+<li class="blockList">
+<h4>textArea</h4>
+<pre>javax.swing.JTextArea textArea</pre>
+</li>
+<li class="blockList">
+<h4>configURL</h4>
+<pre>java.lang.String configURL</pre>
+</li>
+<li class="blockList">
+<h4>spclogURL</h4>
+<pre>java.lang.String spclogURL</pre>
+</li>
+<li class="blockList">
+<h4>textAreaContent</h4>
+<pre>java.lang.String textAreaContent</pre>
+</li>
+<li class="blockList">
+<h4>stringSelection</h4>
+<pre>java.awt.datatransfer.StringSelection stringSelection</pre>
+</li>
+<li class="blockList">
+<h4>clipboard</h4>
+<pre>java.awt.datatransfer.Clipboard clipboard</pre>
+</li>
+<li class="blockList">
+<h4>serverPackCreatorConf</h4>
+<pre>java.io.File serverPackCreatorConf</pre>
+</li>
+<li class="blockList">
+<h4>serverPackCreatorLog</h4>
+<pre>java.io.File serverPackCreatorLog</pre>
+</li>
+<li class="blockList">
+<h4>options</h4>
+<pre>java.lang.String[] options</pre>
+</li>
+<li class="blockListLast">
+<h4>userResponse</h4>
+<pre>int userResponse</pre>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="blockList"><a name="de.griefed.serverpackcreator.gui.BackgroundPanel">
+<!--   -->
+</a>
+<h3>Class <a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html" title="class in de.griefed.serverpackcreator.gui">de.griefed.serverpackcreator.gui.BackgroundPanel</a> extends javax.swing.JPanel implements Serializable</h3>
+<ul class="blockList">
+<li class="blockList">
+<h3>Serialized Fields</h3>
+<ul class="blockList">
+<li class="blockList">
+<h4>painter</h4>
+<pre>java.awt.Paint painter</pre>
+</li>
+<li class="blockList">
+<h4>image</h4>
+<pre>java.awt.Image image</pre>
+</li>
+<li class="blockList">
+<h4>style</h4>
+<pre>int style</pre>
+</li>
+<li class="blockList">
+<h4>alignmentX</h4>
+<pre>float alignmentX</pre>
+</li>
+<li class="blockList">
+<h4>alignmentY</h4>
+<pre>float alignmentY</pre>
+</li>
+<li class="blockListLast">
+<h4>isTransparentAdd</h4>
+<pre>boolean isTransparentAdd</pre>
+</li>
 </ul>
 </li>
 </ul>
@@ -160,6 +236,14 @@
 <pre>java.awt.Dimension windowDimension</pre>
 </li>
 <li class="blockList">
+<h4>tile</h4>
+<pre>java.awt.Image tile</pre>
+</li>
+<li class="blockList">
+<h4>bufferedImage</h4>
+<pre>java.awt.image.BufferedImage bufferedImage</pre>
+</li>
+<li class="blockList">
 <h4>localizationManager</h4>
 <pre><a href="de/griefed/serverpackcreator/i18n/LocalizationManager.html" title="class in de.griefed.serverpackcreator.i18n">LocalizationManager</a> localizationManager</pre>
 </li>
@@ -176,6 +260,26 @@
 <pre><a href="de/griefed/serverpackcreator/CreateServerPack.html" title="class in de.griefed.serverpackcreator">CreateServerPack</a> createServerPack</pre>
 </li>
 <li class="blockList">
+<h4>createServerPackTab</h4>
+<pre><a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">CreateServerPackTab</a> createServerPackTab</pre>
+</li>
+<li class="blockList">
+<h4>serverPackCreatorLogTab</h4>
+<pre><a href="de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html" title="class in de.griefed.serverpackcreator.gui">ServerPackCreatorLogTab</a> serverPackCreatorLogTab</pre>
+</li>
+<li class="blockList">
+<h4>modloaderInstallerLogTab</h4>
+<pre><a href="de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html" title="class in de.griefed.serverpackcreator.gui">ModloaderInstallerLogTab</a> modloaderInstallerLogTab</pre>
+</li>
+<li class="blockList">
+<h4>aboutTab</h4>
+<pre><a href="de/griefed/serverpackcreator/gui/AboutTab.html" title="class in de.griefed.serverpackcreator.gui">AboutTab</a> aboutTab</pre>
+</li>
+<li class="blockList">
+<h4>backgroundPanel</h4>
+<pre><a href="de/griefed/serverpackcreator/gui/BackgroundPanel.html" title="class in de.griefed.serverpackcreator.gui">BackgroundPanel</a> backgroundPanel</pre>
+</li>
+<li class="blockList">
 <h4>serverPackCreatorFrame</h4>
 <pre>javax.swing.JFrame serverPackCreatorFrame</pre>
 </li>
@@ -198,7 +302,7 @@
 <li class="blockList"><a name="de.griefed.serverpackcreator.gui.CreateServerPackTab">
 <!--   -->
 </a>
-<h3>Class <a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">de.griefed.serverpackcreator.gui.CreateServerPackTab</a> extends java.awt.Component implements Serializable</h3>
+<h3>Class <a href="de/griefed/serverpackcreator/gui/CreateServerPackTab.html" title="class in de.griefed.serverpackcreator.gui">de.griefed.serverpackcreator.gui.CreateServerPackTab</a> extends javax.swing.JComponent implements Serializable</h3>
 <ul class="blockList">
 <li class="blockList">
 <h3>Serialized Fields</h3>
@@ -244,6 +348,10 @@
 <pre>java.awt.Dimension miscButtonDimension</pre>
 </li>
 <li class="blockList">
+<h4>startDimension</h4>
+<pre>java.awt.Dimension startDimension</pre>
+</li>
+<li class="blockList">
 <h4>chooserDimension</h4>
 <pre>java.awt.Dimension chooserDimension</pre>
 </li>
@@ -398,7 +506,7 @@
 <li class="blockList"><a name="de.griefed.serverpackcreator.gui.ModloaderInstallerLogTab">
 <!--   -->
 </a>
-<h3>Class <a href="de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html" title="class in de.griefed.serverpackcreator.gui">de.griefed.serverpackcreator.gui.ModloaderInstallerLogTab</a> extends java.awt.Component implements Serializable</h3>
+<h3>Class <a href="de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.html" title="class in de.griefed.serverpackcreator.gui">de.griefed.serverpackcreator.gui.ModloaderInstallerLogTab</a> extends javax.swing.JComponent implements Serializable</h3>
 <ul class="blockList">
 <li class="blockList">
 <h3>Serialized Fields</h3>
@@ -430,7 +538,7 @@
 <li class="blockList"><a name="de.griefed.serverpackcreator.gui.ServerPackCreatorLogTab">
 <!--   -->
 </a>
-<h3>Class <a href="de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html" title="class in de.griefed.serverpackcreator.gui">de.griefed.serverpackcreator.gui.ServerPackCreatorLogTab</a> extends java.awt.Component implements Serializable</h3>
+<h3>Class <a href="de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.html" title="class in de.griefed.serverpackcreator.gui">de.griefed.serverpackcreator.gui.ServerPackCreatorLogTab</a> extends javax.swing.JComponent implements Serializable</h3>
 <ul class="blockList">
 <li class="blockList">
 <h3>Serialized Fields</h3>
-- 
GitLab


From a9fb5b8ce327a2f08a792d3776157195134862f1 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Mon, 3 May 2021 21:55:40 +0200
Subject: [PATCH 56/91] refactor(DI): Whoops

---
 .../gui/BackgroundPanel.java                  | 21 ++++++++++++++++++-
 1 file changed, 20 insertions(+), 1 deletion(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/gui/BackgroundPanel.java b/src/main/java/de/griefed/serverpackcreator/gui/BackgroundPanel.java
index 25edcc61f..474df55d3 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/BackgroundPanel.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/BackgroundPanel.java
@@ -1,3 +1,22 @@
+/* Copyright (C) 2021  Griefed
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
+ * USA
+ *
+ * The full license can be found at https:github.com/Griefed/ServerPackCreator/blob/main/LICENSE
+ */
 package de.griefed.serverpackcreator.gui;
 
 import javax.swing.*;
@@ -11,7 +30,7 @@ import java.awt.*;
  * for Swing.<br>
  * Links:<br>
  * <a href="https://tips4java.wordpress.com/2008/10/12/background-panel/">Background Panel by Rob Camick from October 12, 2008</a><br>
- * <a href="http://www.camick.com/java/source/BackgroundPanel.java">BackgroundPanel.java</a><br>
+ * <a href="https://www.camick.com/java/source/BackgroundPanel.java">BackgroundPanel.java</a><br>
  * Seriously, give this man an award, because this class is a <strong>BEAST</strong>.<p>
  * Rob, if you somehow ever get wind of your class being used here: Thank you, thank you, thank you, thank you, thank you
  * so very much! You seriously made my day here.<br>
-- 
GitLab


From b70a0a7e0690f52c898871af29a79ccd9d5ac2a9 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Tue, 4 May 2021 04:05:28 -0700
Subject: [PATCH 57/91] refactor(DI): Small fixes in javadoc

---
 .../griefed/serverpackcreator/curseforgemodpack/CurseFiles.java | 2 +-
 .../serverpackcreator/curseforgemodpack/CurseMinecraft.java     | 2 +-
 .../serverpackcreator/curseforgemodpack/CurseModLoaders.java    | 2 +-
 .../serverpackcreator/curseforgemodpack/CurseModpack.java       | 2 +-
 4 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.java b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.java
index ec7645b7a..e1649720e 100644
--- a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.java
+++ b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseFiles.java
@@ -27,7 +27,7 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
  * {@link #getFileID()}<br>
  * {@link #setFileID(String)}<br>
  * {@link #toString()}<p>
- * Retrieves information about a CurseForge Minecraft modpack by using {@link com.fasterxml.jackson.databind} JSON parsing.
+ * Retrieves information about a CurseForge Minecraft modpack by using {@linkplain com.fasterxml.jackson.databind} JSON parsing.
  * This class retrieves the projectIDs and fileIDs a modpack acquired from CurseForge depends on. These can be mods,
  * resource packs, worlds etc. etc.
  */
diff --git a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.java b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.java
index 18519df5f..31a3fb8d8 100644
--- a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.java
+++ b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.java
@@ -30,7 +30,7 @@ import java.util.List;
  * {@link #getModLoaders()}<br>
  * {@link #setModLoaders(List)}<br>
  * {@link #toString()}<p>
- * Retrieves information about a CurseForge Minecraft modpack by using {@link com.fasterxml.jackson.databind} JSON parsing.
+ * Retrieves information about a CurseForge Minecraft modpack by using {@linkplain com.fasterxml.jackson.databind} JSON parsing.
  * This class retrieves the Minecraft version of a modpack.
  */
 public class CurseMinecraft {
diff --git a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.java b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.java
index d64bbcf68..12f08aa83 100644
--- a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.java
+++ b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseModLoaders.java
@@ -26,7 +26,7 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
  * {@link #getId()}<br>
  * {@link #setId(String)}<br>
  * {@link #toString()}<p>
- * Retrieves information about a CurseForge Minecraft modpack by using {@link com.fasterxml.jackson.databind} JSON parsing.
+ * Retrieves information about a CurseForge Minecraft modpack by using {@linkplain com.fasterxml.jackson.databind} JSON parsing.
  * This class retrieves the modloader and modloader version of a modpack.
  */
 public class CurseModLoaders {
diff --git a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.java b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.java
index 8ec7af1cc..c998ae781 100644
--- a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.java
+++ b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseModpack.java
@@ -36,7 +36,7 @@ import java.util.List;
  * {@link #getFiles()}<br>
  * {@link #setFiles(List)}<br>
  * {@link #toString()}<p>
- * Retrieve information about a CurseForge Minecraft modpack by using {@link com.fasterxml.jackson.databind} JSON parsing.
+ * Retrieve information about a CurseForge Minecraft modpack by using {@linkplain com.fasterxml.jackson.databind} JSON parsing.
  * This class retrieves the name, version and author of a modpack.
  */
 public class CurseModpack {
-- 
GitLab


From 0eaeacabcf97ffeae06a5413e7f190b0e8b6c4f5 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Tue, 4 May 2021 06:06:23 -0700
Subject: [PATCH 58/91] refactor(DI): Paint the background image into the
 background of the tabbed pane as well.

---
 .../serverpackcreator/gui/CreateGui.java      | 41 +++++++++++++++----
 1 file changed, 33 insertions(+), 8 deletions(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java b/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java
index 7d05cdc9f..3a4ee2c4f 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java
@@ -31,6 +31,8 @@ import org.apache.logging.log4j.Logger;
 
 import javax.imageio.ImageIO;
 import javax.swing.*;
+import javax.swing.border.Border;
+import javax.swing.plaf.basic.BasicTabbedPaneUI;
 import java.awt.*;
 import java.awt.event.KeyEvent;
 import java.awt.image.BufferedImage;
@@ -65,7 +67,6 @@ public class CreateGui extends JPanel {
         }
     }
 
-
     private LocalizationManager localizationManager;
     private Configuration configuration;
     private CurseCreateModpack curseCreateModpack;
@@ -76,6 +77,7 @@ public class CreateGui extends JPanel {
     private ModloaderInstallerLogTab modloaderInstallerLogTab;
     private AboutTab aboutTab;
     private BackgroundPanel backgroundPanel;
+    private JTabbedPane tabbedPane;
 
     /**
      * <strong>Constructor</strong><p>
@@ -123,12 +125,22 @@ public class CreateGui extends JPanel {
         serverPackCreatorLogTab = new ServerPackCreatorLogTab(localizationManager);
         modloaderInstallerLogTab = new ModloaderInstallerLogTab(localizationManager);
         aboutTab = new AboutTab(localizationManager);
-
+        serverPackCreatorFrame = new JFrame(localizationManager.getLocalizedString("createserverpack.gui.createandshowgui"));
         backgroundPanel = new BackgroundPanel(bufferedImage, BackgroundPanel.TILED, 0.0f, 0.0f);
-
-        JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
-
-        setOpaque(false);
+        tabbedPane = new JTabbedPane(JTabbedPane.TOP);
+
+        tabbedPane.setUI(new BasicTabbedPaneUI() {
+            private final Insets borderInsets = new Insets(0, 0, 0, 0);
+
+            /*
+             * Remove the border insets so the panes fully fill out the area available to them. Prevents the image painted
+             * by BackgroundPanel from being displayed along the border of the pane.
+             */
+            @Override
+            protected Insets getContentBorderInsets(int tabPlacement) {
+                return borderInsets;
+            }
+        });
 
         tabbedPane.addTab(
                 localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.createserverpack.title"),
@@ -162,8 +174,15 @@ public class CreateGui extends JPanel {
 
         tabbedPane.setMnemonicAt(3, KeyEvent.VK_4);
 
+        tabbedPane.setOpaque(true);
+
         add(tabbedPane);
+
+        // We need both in order to have a transparent TabbedPane
+        // behind which we can see the image painted by BackgroundPanel
+        setOpaque(false);
         tabbedPane.setOpaque(false);
+
         tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
     }
 
@@ -179,9 +198,15 @@ public class CreateGui extends JPanel {
      */
     public void mainGUI() {
         SwingUtilities.invokeLater(() -> {
-            //Bold fonts = true, else false
+            //Bold fonts = true
             UIManager.put("swing.boldMetal", true);
 
+            /*
+             * A little secret setting which allows the user to temporarily overwrite the Look and Feel of ServerPackCreator.
+             * Note: This setting is not carried over to new configuration files written by ServerPackCreator when,
+             * for example, the configuration file for a modpack acquired from CurseForge is written.
+             * It was just something I wanted to play around with. So I did.
+             */
             try {
                 if (new File("serverpackcreator.conf").exists()) {
 
@@ -213,6 +238,7 @@ public class CreateGui extends JPanel {
                     appLogger.error(localizationManager.getLocalizedString("tabbedpane.log.error"), ex);
                 }
             }
+
             createAndShowGUI();
         });
     }
@@ -222,7 +248,6 @@ public class CreateGui extends JPanel {
      */
     private void createAndShowGUI() {
 
-        serverPackCreatorFrame = new JFrame(localizationManager.getLocalizedString("createserverpack.gui.createandshowgui"));
         serverPackCreatorFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
         serverPackCreatorFrame.setContentPane(backgroundPanel);
-- 
GitLab


From e96fc918441531063aec0f60f71650bbfb75eb1e Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Tue, 4 May 2021 06:08:01 -0700
Subject: [PATCH 59/91] refactor(DI): Paint the background image into the
 background of the tabbed pane as well.

---
 .../griefed/serverpackcreator/gui/CreateGui.java   | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java b/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java
index 3a4ee2c4f..58e28af10 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java
@@ -129,13 +129,13 @@ public class CreateGui extends JPanel {
         backgroundPanel = new BackgroundPanel(bufferedImage, BackgroundPanel.TILED, 0.0f, 0.0f);
         tabbedPane = new JTabbedPane(JTabbedPane.TOP);
 
+        /*
+         * Remove the border insets so the panes fully fill out the area available to them. Prevents the image
+         * painted by BackgroundPanel from being displayed along the border of the pane.
+         */
         tabbedPane.setUI(new BasicTabbedPaneUI() {
             private final Insets borderInsets = new Insets(0, 0, 0, 0);
 
-            /*
-             * Remove the border insets so the panes fully fill out the area available to them. Prevents the image painted
-             * by BackgroundPanel from being displayed along the border of the pane.
-             */
             @Override
             protected Insets getContentBorderInsets(int tabPlacement) {
                 return borderInsets;
@@ -178,8 +178,10 @@ public class CreateGui extends JPanel {
 
         add(tabbedPane);
 
-        // We need both in order to have a transparent TabbedPane
-        // behind which we can see the image painted by BackgroundPanel
+        /*
+         * We need both in order to have a transparent TabbedPane
+         * behind which we can see the image painted by BackgroundPanel
+         */
         setOpaque(false);
         tabbedPane.setOpaque(false);
 
-- 
GitLab


From a632c6d4380feacbcc34033f16c18d435a16502c Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Tue, 4 May 2021 06:08:20 -0700
Subject: [PATCH 60/91] refactor(DI): Paint the background image into the
 background of the tabbed pane as well.

---
 src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java | 1 -
 1 file changed, 1 deletion(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java b/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java
index 58e28af10..be79e14fe 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java
@@ -31,7 +31,6 @@ import org.apache.logging.log4j.Logger;
 
 import javax.imageio.ImageIO;
 import javax.swing.*;
-import javax.swing.border.Border;
 import javax.swing.plaf.basic.BasicTabbedPaneUI;
 import java.awt.*;
 import java.awt.event.KeyEvent;
-- 
GitLab


From d84ce14944d465a948c1e7ca1f08dc3b07e36a65 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Tue, 4 May 2021 21:33:08 +0200
Subject: [PATCH 61/91] refactor(DI): Smartscroll logging tabs

---
 .../gui/ModloaderInstallerLogTab.java         |   3 +
 .../gui/ServerPackCreatorLogTab.java          |   3 +
 .../serverpackcreator/gui/SmartScroller.java  | 231 ++++++++++++++++++
 3 files changed, 237 insertions(+)
 create mode 100644 src/main/java/de/griefed/serverpackcreator/gui/SmartScroller.java

diff --git a/src/main/java/de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.java b/src/main/java/de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.java
index d1d2e2f6f..f05543b7c 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.java
@@ -53,6 +53,7 @@ public class ModloaderInstallerLogTab extends JComponent {
     private GridBagConstraints constraints;
     private JTextArea textArea;
     private JScrollPane scrollPane;
+    private SmartScroller smartScroller;
 
     /**
      * Create the tab for the modloader_installer.log tailer in a JScrollPane with an always available vertical scrollbar
@@ -95,6 +96,8 @@ public class ModloaderInstallerLogTab extends JComponent {
                 JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
                 JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
 
+        smartScroller = new SmartScroller(scrollPane);
+
         modloaderInstallerLogPanel.add(scrollPane, constraints);
 
         return modloaderInstallerLogPanel;
diff --git a/src/main/java/de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.java b/src/main/java/de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.java
index 0e6dbf1b0..6ad2e2564 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.java
@@ -53,6 +53,7 @@ public class ServerPackCreatorLogTab extends JComponent {
     private GridBagConstraints constraints;
     private JTextArea textArea;
     private JScrollPane scrollPane;
+    private SmartScroller smartScroller;
 
     /**
      * Create the tab for the serverpackcreator.log tailer in a JScrollPane with an always available vertical scrollbar
@@ -94,6 +95,8 @@ public class ServerPackCreatorLogTab extends JComponent {
                 JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
                 JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
 
+        smartScroller = new SmartScroller(scrollPane);
+
         serverPackCreatorLogPanel.add(scrollPane, constraints);
 
         return serverPackCreatorLogPanel;
diff --git a/src/main/java/de/griefed/serverpackcreator/gui/SmartScroller.java b/src/main/java/de/griefed/serverpackcreator/gui/SmartScroller.java
new file mode 100644
index 000000000..71f4faa98
--- /dev/null
+++ b/src/main/java/de/griefed/serverpackcreator/gui/SmartScroller.java
@@ -0,0 +1,231 @@
+/* Copyright (C) 2021  Griefed
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
+ * USA
+ *
+ * The full license can be found at https:github.com/Griefed/ServerPackCreator/blob/main/LICENSE
+ *
+ * #####################################################################################################################
+ *
+ * Addendum from the Java Tips Weblog's About page:
+ *
+ * It should be noted that none of the code presented here is used in any real application,  (I only do this for a hobby)
+ * and therefore you use it at your own risk. Although I must admit I took about 5-10 minutes to do extensive testing so
+ * I doubt you will find many bugs :-).
+ *
+ * We assume no responsibility for the code. You are free to use and/or modify and/or distribute any or all code posted
+ * on the Java Tips Weblog without restriction. A credit in the code comments would be nice, but not in any way mandatory.
+ *
+ * “Give somebody a fish and they eat for a day.
+ * Teach somebody to fish they eat for life!”
+ *
+ * In following the philosophy of the above quote, whenever possible, I will also attempt to provide links for related
+ * reading to help you better understand the suggested solution. These readings may include tips to help solve your next
+ * problem. I may include links to:
+ *
+ * technical articles
+ * tutorials
+ * the Java API
+ * The Java API is huge and we don’t have time to read it from start to finish. If the examples don’t solve your problem,
+ * hopefully they can at least give you some ideas and introduce you to new API’s and concepts.
+ *
+ * Rob
+ *
+ * #####################################################################################################################
+ *
+ */
+package de.griefed.serverpackcreator.gui;
+
+import javax.swing.*;
+import javax.swing.text.DefaultCaret;
+import javax.swing.text.JTextComponent;
+import java.awt.*;
+import java.awt.event.AdjustmentEvent;
+import java.awt.event.AdjustmentListener;
+
+/**
+ * Hey, Griefed here. I was playing around with scrolling in Swing and was getting fed up with the ways I came up with
+ * which would allow me to set the scrollbar to the bottom at all times....I mean, it worked, sorta? The problem was
+ * that you couldn't scroll up...making any previous log messages unreadable..I couldn't figure out how to make it so
+ * it would stop scrolling to the end if the user scrolled up, and when I was about to give an just not deal with any
+ * of that scrolling business, I came across this beauty here. Add your scrollpane to this SmartScroller and BAM!
+ * You've got yourself a smartscrolling scroll pane which stops going to the end of the pane after you've scrolled up,
+ * and resumes autoscrolling when you've scrolled to the bottom again. It's beautiful!<br>
+ * Rob, you absolute madlad. You did it again.<br>
+ * Links:<br>
+ *  See <a href="https://tips4java.wordpress.com/2013/03/03/smart-scrolling/">Smart Scrolling</a><br>
+ *  And <a href="https://www.camick.com/java/source/SmartScroller.java">SmartScroller.java</a>
+ * Seriously, give this man an award, because this class is a <strong>BEAST</strong>.<p>
+ * Rob, if you somehow ever get wind of your class being used here: Thank you, thank you, thank you, thank you, thank you
+ * so very much! You seriously made my day here.<br>
+ * Rob, you rule.<br>
+ * <br>
+ *  The SmartScroller will attempt to keep the viewport positioned based on<br>
+ *  the users interaction with the scrollbar. The normal behaviour is to keep<br>
+ *  the viewport positioned to see new data as it is dynamically added.<br>
+ *<br>
+ *  Assuming vertical scrolling and data is added to the bottom:<br>
+ *<br>
+ *  - when the viewport is at the bottom and new data is added,<br>
+ *    then automatically scroll the viewport to the bottom<br>
+ *  - when the viewport is not at the bottom and new data is added,<br>
+ *    then do nothing with the viewport<br>
+ *<br>
+ *  Assuming vertical scrolling and data is added to the top:<br>
+ *<br>
+ *  - when the viewport is at the top and new data is added,<br>
+ *    then do nothing with the viewport<br>
+ *  - when the viewport is not at the top and new data is added, then adjust<br>
+ *    the viewport to the relative position it was at before the data was added<br>
+ *<br>
+ *  Similar logic would apply for horizontal scrolling.
+ */
+public class SmartScroller implements AdjustmentListener {
+    public final static int HORIZONTAL = 0;
+    public final static int VERTICAL = 1;
+
+    public final static int START = 0;
+    public final static int END = 1;
+
+    private int viewportPosition;
+
+    private JScrollBar scrollBar;
+    private boolean adjustScrollBar = true;
+
+    private int previousValue = -1;
+    private int previousMaximum = -1;
+
+    /**
+     *  Convenience constructor.<br>
+     *  Scroll direction is VERTICAL and viewport position is at the END.
+     *
+     *  @param scrollPane the scroll pane to monitor
+     */
+    public SmartScroller(JScrollPane scrollPane) {
+        this(scrollPane, VERTICAL, END);
+    }
+
+    /**
+     *  Convenience constructor.<br>
+     *  Scroll direction is VERTICAL.
+     *
+     *  @param scrollPane the scroll pane to monitor
+     *  @param viewportPosition valid values are START and END
+     */
+    public SmartScroller(JScrollPane scrollPane, int viewportPosition) {
+        this(scrollPane, VERTICAL, viewportPosition);
+    }
+
+    /**
+     *  Specify how the SmartScroller will function.
+     *
+     *  @param scrollPane the scroll pane to monitor
+     *  @param scrollDirection indicates which JScrollBar to monitor.
+     *                         Valid values are HORIZONTAL and VERTICAL.
+     *  @param viewportPosition indicates where the viewport will normally be
+     *                          positioned as data is added.
+     *                          Valid values are START and END
+     */
+    public SmartScroller(JScrollPane scrollPane, int scrollDirection, int viewportPosition) {
+        if (scrollDirection != HORIZONTAL
+                &&  scrollDirection != VERTICAL) {
+            throw new IllegalArgumentException("invalid scroll direction specified");
+        }
+        if (viewportPosition != START
+                &&  viewportPosition != END) {
+            throw new IllegalArgumentException("invalid viewport position specified");
+        }
+
+        this.viewportPosition = viewportPosition;
+
+        if (scrollDirection == HORIZONTAL) {
+            scrollBar = scrollPane.getHorizontalScrollBar();
+        } else {
+            scrollBar = scrollPane.getVerticalScrollBar();
+        }
+
+        scrollBar.addAdjustmentListener( this );
+
+        //  Turn off automatic scrolling for text components
+
+        Component view = scrollPane.getViewport().getView();
+
+        if (view instanceof JTextComponent) {
+
+            JTextComponent textComponent = (JTextComponent)view;
+            DefaultCaret caret = (DefaultCaret)textComponent.getCaret();
+            caret.setUpdatePolicy(DefaultCaret.NEVER_UPDATE);
+        }
+    }
+
+    @Override
+    public void adjustmentValueChanged(final AdjustmentEvent e) {
+        SwingUtilities.invokeLater(() -> checkScrollBar(e));
+    }
+
+    /**
+     *  Analyze every adjustment event to determine when the viewport needs to be repositioned.
+     * @param e Adjustment event to analyse
+     */
+    private void checkScrollBar(AdjustmentEvent e) {
+        /*
+         * The scroll bar listModel contains information needed to determine
+         * whether the viewport should be repositioned or not.
+         */
+
+        JScrollBar scrollBar = (JScrollBar)e.getSource();
+        BoundedRangeModel listModel = scrollBar.getModel();
+        int value = listModel.getValue();
+        int extent = listModel.getExtent();
+        int maximum = listModel.getMaximum();
+
+        boolean valueChanged = previousValue != value;
+        boolean maximumChanged = previousMaximum != maximum;
+
+        //  Check if the user has manually repositioned the scrollbar
+
+        if (valueChanged && !maximumChanged) {
+            if (viewportPosition == START)
+                adjustScrollBar = value != 0;
+            else
+                adjustScrollBar = value + extent >= maximum;
+        }
+
+        /*
+         * Reset the "value" so we can reposition the viewport and
+         * distinguish between a user scroll and a program scroll.
+         * (ie. valueChanged will be false on a program scroll)
+         */
+
+        if (adjustScrollBar && viewportPosition == END) {
+            //  Scroll the viewport to the end.
+            scrollBar.removeAdjustmentListener( this );
+            value = maximum - extent;
+            scrollBar.setValue( value );
+            scrollBar.addAdjustmentListener( this );
+        }
+
+        if (adjustScrollBar && viewportPosition == START) {
+            //  Keep the viewport at the same relative viewportPosition
+            scrollBar.removeAdjustmentListener( this );
+            value = value + maximum - previousMaximum;
+            scrollBar.setValue( value );
+            scrollBar.addAdjustmentListener( this );
+        }
+
+        previousValue = value;
+        previousMaximum = maximum;
+    }
+}
\ No newline at end of file
-- 
GitLab


From 85bede99f27ae8abb824dfb24777c50087c6b469 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Tue, 4 May 2021 21:33:25 +0200
Subject: [PATCH 62/91] refactor(DI): Addendum to license block

---
 .../gui/BackgroundPanel.java                  | 29 +++++++++++++++++++
 1 file changed, 29 insertions(+)

diff --git a/src/main/java/de/griefed/serverpackcreator/gui/BackgroundPanel.java b/src/main/java/de/griefed/serverpackcreator/gui/BackgroundPanel.java
index 474df55d3..f3310516e 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/BackgroundPanel.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/BackgroundPanel.java
@@ -16,6 +16,35 @@
  * USA
  *
  * The full license can be found at https:github.com/Griefed/ServerPackCreator/blob/main/LICENSE
+ *
+ * #####################################################################################################################
+ *
+ * Addendum from the Java Tips Weblog's About page:
+ *
+ * It should be noted that none of the code presented here is used in any real application,  (I only do this for a hobby)
+ * and therefore you use it at your own risk. Although I must admit I took about 5-10 minutes to do extensive testing so
+ * I doubt you will find many bugs :-).
+ *
+ * We assume no responsibility for the code. You are free to use and/or modify and/or distribute any or all code posted
+ * on the Java Tips Weblog without restriction. A credit in the code comments would be nice, but not in any way mandatory.
+ *
+ * “Give somebody a fish and they eat for a day.
+ * Teach somebody to fish they eat for life!”
+ *
+ * In following the philosophy of the above quote, whenever possible, I will also attempt to provide links for related
+ * reading to help you better understand the suggested solution. These readings may include tips to help solve your next
+ * problem. I may include links to:
+ *
+ * technical articles
+ * tutorials
+ * the Java API
+ * The Java API is huge and we don’t have time to read it from start to finish. If the examples don’t solve your problem,
+ * hopefully they can at least give you some ideas and introduce you to new API’s and concepts.
+ *
+ * Rob
+ *
+ * #####################################################################################################################
+ *
  */
 package de.griefed.serverpackcreator.gui;
 
-- 
GitLab


From 02393dd4e765effbf394a86c20486a70f6a130b6 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Wed, 5 May 2021 18:08:47 +0200
Subject: [PATCH 63/91] refactor(DI): Write more tests and move tests to
 correct class

---
 .../serverpackcreator/ConfigurationTest.java  | 131 +++++++++
 .../serverpackcreator/FilesSetupTest.java     | 250 +++++++-----------
 2 files changed, 224 insertions(+), 157 deletions(-)

diff --git a/src/test/java/de/griefed/serverpackcreator/ConfigurationTest.java b/src/test/java/de/griefed/serverpackcreator/ConfigurationTest.java
index d528b365f..ca42ba612 100644
--- a/src/test/java/de/griefed/serverpackcreator/ConfigurationTest.java
+++ b/src/test/java/de/griefed/serverpackcreator/ConfigurationTest.java
@@ -365,4 +365,135 @@ class ConfigurationTest {
         Assertions.assertFalse(result);
         new File("forge-manifest.json").delete();
     }
+
+    @SuppressWarnings("ResultOfMethodCallIgnored")
+    @Test
+    void writeConfigToFileTestFabric() {
+        String modpackDir = "./src/test/resources/fabric_tests";
+        List<String> clientMods = Arrays.asList(
+                "AmbientSounds",
+                "BackTools",
+                "BetterAdvancement",
+                "BetterPing",
+                "cherished",
+                "ClientTweaks",
+                "Controlling",
+                "DefaultOptions",
+                "durability",
+                "DynamicSurroundings",
+                "itemzoom",
+                "jei-professions",
+                "jeiintegration",
+                "JustEnoughResources",
+                "MouseTweaks",
+                "Neat",
+                "OldJavaWarning",
+                "PackMenu",
+                "preciseblockplacing",
+                "SimpleDiscordRichPresence",
+                "SpawnerFix",
+                "TipTheScales",
+                "WorldNameRandomizer"
+        );
+        List<String> copyDirs = Arrays.asList(
+                "config",
+                "mods",
+                "scripts",
+                "seeds",
+                "defaultconfigs"
+        );
+        String javaPath;
+        String autoJavaPath = System.getProperty("java.home").replace("\\", "/") + "/bin/java";
+        if (autoJavaPath.startsWith("C:")) {
+            autoJavaPath = String.format("%s.exe", autoJavaPath);
+        }
+        if (new File("/usr/bin/java").exists()) {
+            javaPath = "/usr/bin/java";
+        } else {
+            javaPath = autoJavaPath;
+        }
+        String minecraftVersion = "1.16.5";
+        String modLoader = "Fabric";
+        String modLoaderVersion = "0.11.3";
+        boolean result = configuration.writeConfigToFile(
+                modpackDir,
+                configuration.buildString(clientMods.toString()),
+                configuration.buildString(copyDirs.toString()),
+                true,
+                javaPath,
+                minecraftVersion,
+                modLoader,
+                modLoaderVersion,
+                true,
+                true,
+                true,
+                true,
+                configuration.getConfigFile(),
+                false
+        );
+        Assertions.assertTrue(result);
+        Assertions.assertTrue(new File("./serverpackcreator.conf").exists());
+        new File("./serverpackcreator.conf").delete();
+    }
+
+    @SuppressWarnings("ResultOfMethodCallIgnored")
+    @Test
+    void testWriteConfigToFileForge() {
+        String modpackDir = "./src/test/resources/forge_tests";
+        List<String> clientMods = Arrays.asList(
+                "AmbientSounds",
+                "BackTools",
+                "BetterAdvancement",
+                "BetterPing",
+                "cherished",
+                "ClientTweaks",
+                "Controlling",
+                "DefaultOptions",
+                "durability",
+                "DynamicSurroundings",
+                "itemzoom",
+                "jei-professions",
+                "jeiintegration",
+                "JustEnoughResources",
+                "MouseTweaks",
+                "Neat",
+                "OldJavaWarning",
+                "PackMenu",
+                "preciseblockplacing",
+                "SimpleDiscordRichPresence",
+                "SpawnerFix",
+                "TipTheScales",
+                "WorldNameRandomizer"
+        );
+        List<String> copyDirs = Arrays.asList(
+                "config",
+                "mods",
+                "scripts",
+                "seeds",
+                "defaultconfigs"
+        );
+        String javaPath = "/use/bin/java";
+        String minecraftVersion = "1.16.5";
+        String modLoader = "Forge";
+        String modLoaderVersion = "36.1.2";
+        boolean result = configuration.writeConfigToFile(
+                modpackDir,
+                configuration.buildString(clientMods.toString()),
+                configuration.buildString(copyDirs.toString()),
+                true,
+                javaPath,
+                minecraftVersion,
+                modLoader,
+                modLoaderVersion,
+                true,
+                true,
+                true,
+                true,
+                configuration.getConfigFile(),
+                false
+        );
+        Assertions.assertTrue(result);
+        Assertions.assertTrue(new File("./serverpackcreator.conf").exists());
+        new File("./serverpackcreator.conf").delete();
+    }
 }
diff --git a/src/test/java/de/griefed/serverpackcreator/FilesSetupTest.java b/src/test/java/de/griefed/serverpackcreator/FilesSetupTest.java
index ec381a0d2..bef5f7628 100644
--- a/src/test/java/de/griefed/serverpackcreator/FilesSetupTest.java
+++ b/src/test/java/de/griefed/serverpackcreator/FilesSetupTest.java
@@ -22,11 +22,9 @@ package de.griefed.serverpackcreator;
 
 import de.griefed.serverpackcreator.curseforgemodpack.CurseCreateModpack;
 import de.griefed.serverpackcreator.i18n.LocalizationManager;
-import org.apache.logging.log4j.Logger;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
-import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
 import java.io.File;
@@ -34,24 +32,45 @@ import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
-import java.util.Arrays;
 import java.util.Comparator;
-import java.util.List;
 
+/**
+ * <strong>Table of tests</strong>
+ * <p>
+ * 1. {@link #FilesSetupTest()} tests {@link FilesSetup#FilesSetup(LocalizationManager)}<br>
+ * 2. {@link #getConfigFileTest()} tests {@link FilesSetup#getConfigFile()}<br>
+ * 3. {@link #getOldConfigFileTest()} tests {@link FilesSetup#getOldConfigFile()}<br>
+ * 4. {@link #getPropertiesFileTest()} tests {@link FilesSetup#getPropertiesFile()}<br>
+ * 5. {@link #getIconFileTest()} tests {@link FilesSetup#getIconFile()}<br>
+ * 6. {@link #getForgeWindowsFileTest()} tests {@link FilesSetup#getForgeWindowsFile()}<br>
+ * 7. {@link #getForgeLinuxFileTest()} tests {@link FilesSetup#getForgeLinuxFile()}<br>
+ * 8. {@link #getFabricWindowsFileTest()} tests {@link FilesSetup#getFabricWindowsFile()}<br>
+ * 9. {@link #getFabricLinuxFileTest()} tests {@link FilesSetup#getFabricLinuxFile()}<br>
+ * 10.{@link #checkForConfigTestOld} tests {@link FilesSetup#checkForConfig()}<br>
+ * 11.{@link #checkForConfigTest} tests {@link FilesSetup#checkForConfig()}<br>
+ * 12.{@link #checkForConfigTestNew} tests {@link FilesSetup#checkForConfig()}<br>
+ * 13.{@link #checkForFabricLinuxTest} tests {@link FilesSetup#checkForFabricLinux()}<br>
+ * 14.{@link #checkForFabricLinuxTestNew} tests {@link FilesSetup#checkForForgeLinux()}<br>
+ * 15.{@link #checkForFabricWindowsTest} tests {@link FilesSetup#checkForFabricWindows()}<br>
+ * 16.{@link #checkForFabricWindowsTestNew} tests {@link FilesSetup#checkForFabricWindows()}<br>
+ * 17.{@link #checkForForgeLinuxTest} tests {@link FilesSetup#checkForForgeLinux()}<br>
+ * 18.{@link #checkForForgeLinuxTestNew} tests {@link FilesSetup#checkForForgeLinux()}<br>
+ * 19.{@link #checkForForgeWindowsTest} tests {@link FilesSetup#checkForForgeWindows()}<br>
+ * 20.{@link #checkForForgeWindowsTestNew} tests {@link FilesSetup#checkForForgeWindows()}<br>
+ * 21.{@link #checkForPropertiesTest} tests {@link FilesSetup#checkForProperties()}<br>
+ * 22.{@link #checkForPropertiesTestNew} tests {@link FilesSetup#checkForProperties()}<br>
+ * 23.{@link #checkForIconTest} tests {@link FilesSetup#checkForIcon()}<br>
+ * 24.{@link #checkForIconTestNew} tests {@link FilesSetup#checkForIcon()}<br>
+ * 25.{@link #filesSetupTest} tests {@link FilesSetup#filesSetup()}
+ */
 class FilesSetupTest {
-    @Mock
-    Logger appLogger;
 
     private FilesSetup filesSetup;
-    private Configuration configCheck;
-    private CurseCreateModpack curseCreateModpack;
     private LocalizationManager localizationManager;
 
     FilesSetupTest() {
         localizationManager = new LocalizationManager();
         filesSetup = new FilesSetup(localizationManager);
-        curseCreateModpack = new CurseCreateModpack(localizationManager);
-        configCheck = new Configuration(localizationManager, curseCreateModpack);
     }
 
     @BeforeEach
@@ -60,9 +79,57 @@ class FilesSetupTest {
         MockitoAnnotations.openMocks(this);
     }
 
+    @Test
+    void getConfigFileTest() {
+        File file = filesSetup.getConfigFile();
+        Assertions.assertNotNull(file);
+    }
+
+    @Test
+    void getOldConfigFileTest() {
+        File file = filesSetup.getOldConfigFile();
+        Assertions.assertNotNull(file);
+    }
+
+    @Test
+    void getPropertiesFileTest() {
+        File file = filesSetup.getPropertiesFile();
+        Assertions.assertNotNull(file);
+    }
+
+    @Test
+    void getIconFileTest() {
+        File file = filesSetup.getIconFile();
+        Assertions.assertNotNull(file);
+    }
+
+    @Test
+    void getForgeWindowsFileTest() {
+        File file = filesSetup.getForgeWindowsFile();
+        Assertions.assertNotNull(file);
+    }
+
+    @Test
+    void getForgeLinuxFileTest() {
+        File file = filesSetup.getForgeLinuxFile();
+        Assertions.assertNotNull(file);
+    }
+
+    @Test
+    void getFabricWindowsFileTest() {
+        File file = filesSetup.getFabricWindowsFile();
+        Assertions.assertNotNull(file);
+    }
+
+    @Test
+    void getFabricLinuxFileTest() {
+        File file = filesSetup.getFabricLinuxFile();
+        Assertions.assertNotNull(file);
+    }
+
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void testRenameOldConfig() throws IOException {
+    void checkForConfigTestOld() throws IOException {
         File oldConfigFile = new File("creator.conf");
         oldConfigFile.createNewFile();
         Assertions.assertFalse(filesSetup.checkForConfig());
@@ -73,7 +140,7 @@ class FilesSetupTest {
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void testCheckForConfig() throws IOException {
+    void checkForConfigTest() throws IOException {
         File configFile = new File("serverpackcreator.conf");
         configFile.createNewFile();
         Assertions.assertFalse(filesSetup.checkForConfig());
@@ -82,7 +149,7 @@ class FilesSetupTest {
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void testCheckForConfigNew() {
+    void checkForConfigTestNew() {
         File configFile = new File("serverpackcreator.conf");
         Assertions.assertTrue(filesSetup.checkForConfig());
         configFile.delete();
@@ -90,7 +157,7 @@ class FilesSetupTest {
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void testCheckForFabricLinux() throws IOException {
+    void checkForFabricLinuxTest() throws IOException {
         File fabricLinux = new File("start-fabric.sh");
         fabricLinux.createNewFile();
         Assertions.assertFalse(filesSetup.checkForFabricLinux());
@@ -99,7 +166,7 @@ class FilesSetupTest {
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void testCheckForFabricLinuxNew() {
+    void checkForFabricLinuxTestNew() {
         File fabricLinux = new File("start-fabric.sh");
         Assertions.assertTrue(filesSetup.checkForFabricLinux());
         fabricLinux.delete();
@@ -107,7 +174,7 @@ class FilesSetupTest {
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void testCheckForFabricWindows() throws IOException {
+    void checkForFabricWindowsTest() throws IOException {
         File fabricWindows = new File("start-fabric.bat");
         fabricWindows.createNewFile();
         Assertions.assertFalse(filesSetup.checkForFabricWindows());
@@ -116,7 +183,7 @@ class FilesSetupTest {
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void testCheckForFabricWindowsNew() {
+    void checkForFabricWindowsTestNew() {
         File fabricWindows = new File("start-fabric.bat");
         Assertions.assertTrue(filesSetup.checkForFabricWindows());
         fabricWindows.delete();
@@ -124,7 +191,7 @@ class FilesSetupTest {
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void testCheckForForgeLinux() throws IOException {
+    void checkForForgeLinuxTest() throws IOException {
         File forgeLinux = new File("start-forge.sh");
         forgeLinux.createNewFile();
         Assertions.assertFalse(filesSetup.checkForForgeLinux());
@@ -133,7 +200,7 @@ class FilesSetupTest {
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void testCheckForForgeLinuxNew() {
+    void checkForForgeLinuxTestNew() {
         File forgeLinux = new File("start-forge.sh");
         Assertions.assertTrue(filesSetup.checkForForgeLinux());
         forgeLinux.delete();
@@ -141,7 +208,7 @@ class FilesSetupTest {
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void testCheckForForgeWindows() throws IOException {
+    void checkForForgeWindowsTest() throws IOException {
         File forgeWindows = new File("start-forge.bat");
         forgeWindows.createNewFile();
         Assertions.assertFalse(filesSetup.checkForForgeWindows());
@@ -150,7 +217,7 @@ class FilesSetupTest {
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void testCheckForForgeWindowsNew() {
+    void checkForForgeWindowsTestNew() {
         File forgeWindows = new File("start-forge.bat");
         Assertions.assertTrue(filesSetup.checkForForgeWindows());
         forgeWindows.delete();
@@ -158,7 +225,7 @@ class FilesSetupTest {
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void testCheckForProperties() throws IOException {
+    void checkForPropertiesTest() throws IOException {
         File properties = new File("server.properties");
         properties.createNewFile();
         Assertions.assertFalse(filesSetup.checkForProperties());
@@ -167,7 +234,7 @@ class FilesSetupTest {
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void testCheckForPropertiesNew() {
+    void checkForPropertiesTestNew() {
         File properties = new File("server.properties");
         Assertions.assertTrue(filesSetup.checkForProperties());
         properties.delete();
@@ -175,7 +242,7 @@ class FilesSetupTest {
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void testCheckForIcon() throws IOException {
+    void checkForIconTest() throws IOException {
         File icon = new File("server-icon.png");
         icon.createNewFile();
         Assertions.assertFalse(filesSetup.checkForIcon());
@@ -184,7 +251,7 @@ class FilesSetupTest {
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void testCheckForIconNew() {
+    void checkForIconTestNew() {
         File icon = new File("server-icon.png");
         Assertions.assertTrue(filesSetup.checkForIcon());
         icon.delete();
@@ -192,7 +259,7 @@ class FilesSetupTest {
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void testFilesSetup() throws IOException {
+    void filesSetupTest() throws IOException {
         filesSetup.filesSetup();
         Assertions.assertTrue(new File("./server_files").isDirectory());
         Assertions.assertTrue(new File("./server_files/server.properties").exists());
@@ -212,135 +279,4 @@ class FilesSetupTest {
         }
         new File("./serverpackcreator.conf").delete();
     }
-
-    @SuppressWarnings("ResultOfMethodCallIgnored")
-    @Test
-    void testWriteConfigToFileFabric() {
-        String modpackDir = "./src/test/resources/fabric_tests";
-        List<String> clientMods = Arrays.asList(
-                "AmbientSounds",
-                "BackTools",
-                "BetterAdvancement",
-                "BetterPing",
-                "cherished",
-                "ClientTweaks",
-                "Controlling",
-                "DefaultOptions",
-                "durability",
-                "DynamicSurroundings",
-                "itemzoom",
-                "jei-professions",
-                "jeiintegration",
-                "JustEnoughResources",
-                "MouseTweaks",
-                "Neat",
-                "OldJavaWarning",
-                "PackMenu",
-                "preciseblockplacing",
-                "SimpleDiscordRichPresence",
-                "SpawnerFix",
-                "TipTheScales",
-                "WorldNameRandomizer"
-        );
-        List<String> copyDirs = Arrays.asList(
-                "config",
-                "mods",
-                "scripts",
-                "seeds",
-                "defaultconfigs"
-        );
-        String javaPath;
-        String autoJavaPath = System.getProperty("java.home").replace("\\", "/") + "/bin/java";
-        if (autoJavaPath.startsWith("C:")) {
-            autoJavaPath = String.format("%s.exe", autoJavaPath);
-        }
-        if (new File("/usr/bin/java").exists()) {
-            javaPath = "/usr/bin/java";
-        } else {
-            javaPath = autoJavaPath;
-        }
-        String minecraftVersion = "1.16.5";
-        String modLoader = "Fabric";
-        String modLoaderVersion = "0.11.3";
-        boolean result = configCheck.writeConfigToFile(
-                modpackDir,
-                configCheck.buildString(clientMods.toString()),
-                configCheck.buildString(copyDirs.toString()),
-                true,
-                javaPath,
-                minecraftVersion,
-                modLoader,
-                modLoaderVersion,
-                true,
-                true,
-                true,
-                true,
-                configCheck.getConfigFile(),
-                false
-        );
-        Assertions.assertTrue(result);
-        Assertions.assertTrue(new File("./serverpackcreator.conf").exists());
-        new File("./serverpackcreator.conf").delete();
-    }
-
-    @SuppressWarnings("ResultOfMethodCallIgnored")
-    @Test
-    void testWriteConfigToFileForge() {
-        String modpackDir = "./src/test/resources/forge_tests";
-        List<String> clientMods = Arrays.asList(
-                "AmbientSounds",
-                "BackTools",
-                "BetterAdvancement",
-                "BetterPing",
-                "cherished",
-                "ClientTweaks",
-                "Controlling",
-                "DefaultOptions",
-                "durability",
-                "DynamicSurroundings",
-                "itemzoom",
-                "jei-professions",
-                "jeiintegration",
-                "JustEnoughResources",
-                "MouseTweaks",
-                "Neat",
-                "OldJavaWarning",
-                "PackMenu",
-                "preciseblockplacing",
-                "SimpleDiscordRichPresence",
-                "SpawnerFix",
-                "TipTheScales",
-                "WorldNameRandomizer"
-        );
-        List<String> copyDirs = Arrays.asList(
-                "config",
-                "mods",
-                "scripts",
-                "seeds",
-                "defaultconfigs"
-        );
-        String javaPath = "/use/bin/java";
-        String minecraftVersion = "1.16.5";
-        String modLoader = "Forge";
-        String modLoaderVersion = "36.1.2";
-        boolean result = configCheck.writeConfigToFile(
-                modpackDir,
-                configCheck.buildString(clientMods.toString()),
-                configCheck.buildString(copyDirs.toString()),
-                true,
-                javaPath,
-                minecraftVersion,
-                modLoader,
-                modLoaderVersion,
-                true,
-                true,
-                true,
-                true,
-                configCheck.getConfigFile(),
-                false
-        );
-        Assertions.assertTrue(result);
-        Assertions.assertTrue(new File("./serverpackcreator.conf").exists());
-        new File("./serverpackcreator.conf").delete();
-    }
 }
-- 
GitLab


From 73d9d3b113e37304119d71ba54c67f013210969b Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Wed, 5 May 2021 18:09:01 +0200
Subject: [PATCH 64/91] refactor(DI): Fix minor issue in docs

---
 .../de/griefed/serverpackcreator/gui/BackgroundPanel.java    | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/gui/BackgroundPanel.java b/src/main/java/de/griefed/serverpackcreator/gui/BackgroundPanel.java
index f3310516e..93b06ba02 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/BackgroundPanel.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/BackgroundPanel.java
@@ -28,8 +28,8 @@
  * We assume no responsibility for the code. You are free to use and/or modify and/or distribute any or all code posted
  * on the Java Tips Weblog without restriction. A credit in the code comments would be nice, but not in any way mandatory.
  *
- * “Give somebody a fish and they eat for a day.
- * Teach somebody to fish they eat for life!”
+ * "Give somebody a fish and they eat for a day.
+ * Teach somebody to fish they eat for life!"
  *
  * In following the philosophy of the above quote, whenever possible, I will also attempt to provide links for related
  * reading to help you better understand the suggested solution. These readings may include tips to help solve your next
@@ -44,7 +44,6 @@
  * Rob
  *
  * #####################################################################################################################
- *
  */
 package de.griefed.serverpackcreator.gui;
 
-- 
GitLab


From fd761bf0c802d9057dd7a7552b4ec06c4a386886 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Wed, 5 May 2021 19:32:31 +0200
Subject: [PATCH 65/91] refactor(DI): Fix minor issue in docs

---
 .../java/de/griefed/serverpackcreator/gui/SmartScroller.java  | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/gui/SmartScroller.java b/src/main/java/de/griefed/serverpackcreator/gui/SmartScroller.java
index 71f4faa98..f3f6f1ad8 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/SmartScroller.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/SmartScroller.java
@@ -28,8 +28,8 @@
  * We assume no responsibility for the code. You are free to use and/or modify and/or distribute any or all code posted
  * on the Java Tips Weblog without restriction. A credit in the code comments would be nice, but not in any way mandatory.
  *
- * “Give somebody a fish and they eat for a day.
- * Teach somebody to fish they eat for life!”
+ * "Give somebody a fish and they eat for a day.
+ * Teach somebody to fish they eat for life!"
  *
  * In following the philosophy of the above quote, whenever possible, I will also attempt to provide links for related
  * reading to help you better understand the suggested solution. These readings may include tips to help solve your next
-- 
GitLab


From 0d2a1baa4d2e1021ed9e97cb3c18048fa03934a8 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Wed, 5 May 2021 22:09:41 +0200
Subject: [PATCH 66/91] refactor(DI): Write more tests and, improve some docs,
 add some getters

---
 .../serverpackcreator/Configuration.java      |  37 ++-
 .../serverpackcreator/CreateServerPack.java   |  56 ++--
 .../CreateServerPackTest.java                 | 250 ++++++++++++++++--
 .../testresources/serverpackcreator.conf      |   2 +-
 4 files changed, 284 insertions(+), 61 deletions(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/Configuration.java b/src/main/java/de/griefed/serverpackcreator/Configuration.java
index eb5421cc9..d3e3b0b53 100644
--- a/src/main/java/de/griefed/serverpackcreator/Configuration.java
+++ b/src/main/java/de/griefed/serverpackcreator/Configuration.java
@@ -151,6 +151,10 @@ public class Configuration {
     private final File oldConfigFile = new File("creator.conf");
     private final File configFile = new File("serverpackcreator.conf");
 
+    private final String minecraftManifest = "https://launchermeta.mojang.com/mc/game/version_manifest.json";
+    private final String forgeManifest = "https://files.minecraftforge.net/net/minecraftforge/forge/maven-metadata.json";
+    private final String fabricManifest = "https://maven.fabricmc.net/net/fabricmc/fabric-loader/maven-metadata.xml";
+
 //-- If you wish to expand this list, fork this repository, make your changes, and submit a PR -------------------------
     private final List<String> fallbackModsList = Arrays.asList(
             "AmbientSounds",
@@ -234,24 +238,33 @@ public class Configuration {
      * Getter for Mojang's Minecraft version-manifest.
      * @return String. Returns the URL to the JSON-file for use in {@link #isMinecraftVersionCorrect(String)}
      */
-    String getMinecraftManifestUrl() {
-        return "https://launchermeta.mojang.com/mc/game/version_manifest.json";
+    URL getMinecraftManifestUrl() {
+        URL minecraftURL = null;
+        try { minecraftURL = new URL(minecraftManifest); }
+        catch (IOException ex) { appLogger.error(ex); }
+        return minecraftURL;
     }
 
     /**
      * Getter for Forge's version-manifest.
      * @return String. Returns the URL to the JSON-file for use in {@link #isForgeVersionCorrect(String)}
      */
-    String getForgeManifestUrl() {
-        return "https://files.minecraftforge.net/net/minecraftforge/forge/maven-metadata.json";
+    URL getForgeManifestUrl() {
+        URL forgeURL = null;
+        try { forgeURL = new URL(forgeManifest); }
+        catch (IOException ex) { appLogger.error(ex); }
+        return forgeURL;
     }
 
     /**
      * Getter for Fabric's version-manifest.
      * @return String. Returns the URL to the JSON-file for use in {@link #isFabricVersionCorrect(String)}
      */
-    String getFabricManifestUrl() {
-        return "https://maven.fabricmc.net/net/fabricmc/fabric-loader/maven-metadata.xml";
+    URL getFabricManifestUrl() {
+        URL fabricURL = null;
+        try { fabricURL = new URL(fabricManifest); }
+        catch (IOException ex) { appLogger.error(ex); }
+        return fabricURL;
     }
 
     /**
@@ -1230,9 +1243,10 @@ public class Configuration {
      * @return Boolean. Returns true if the specified Minecraft version could be found in Mojang's manifest.
      */
     boolean isMinecraftVersionCorrect(String minecraftVersion) {
+        //TODO: Download file during startup of ServerPackCreator. Replace existing file during every restart. Store in same dir as ServerPacKCreator.
         if (!minecraftVersion.equals("")) {
             try {
-                URL manifestJsonURL = new URL(getMinecraftManifestUrl());
+                URL manifestJsonURL = getMinecraftManifestUrl();
                 ReadableByteChannel readableByteChannel = Channels.newChannel(manifestJsonURL.openStream());
                 FileOutputStream downloadManifestOutputStream;
 
@@ -1299,9 +1313,10 @@ public class Configuration {
      * @return Boolean. Returns true if the specified fabric version could be found in Fabric's manifest.
      */
     boolean isFabricVersionCorrect(String fabricVersion) {
+        //TODO: Download file during startup of ServerPackCreator. Replace existing file during every restart. Store in same dir as ServerPacKCreator.
         if (!fabricVersion.equals("")) {
             try {
-                URL manifestJsonURL = new URL(getFabricManifestUrl());
+                URL manifestJsonURL = getFabricManifestUrl();
 
                 ReadableByteChannel readableByteChannel = Channels.newChannel(manifestJsonURL.openStream());
 
@@ -1385,9 +1400,10 @@ public class Configuration {
      * @return Boolean. Returns true if the specified Forge version could be found in Forge's manifest.
      */
     boolean isForgeVersionCorrect(String forgeVersion) {
+        //TODO: Download file during startup of ServerPackCreator. Replace existing file during every restart. Store in same dir as ServerPacKCreator.
         if (!forgeVersion.equals("")) {
             try {
-                URL manifestJsonURL = new URL(getForgeManifestUrl());
+                URL manifestJsonURL = getForgeManifestUrl();
                 ReadableByteChannel readableByteChannel = Channels.newChannel(manifestJsonURL.openStream());
                 FileOutputStream downloadManifestOutputStream;
 
@@ -1472,9 +1488,10 @@ public class Configuration {
      */
     @SuppressWarnings({"ReturnInsideFinallyBlock", "finally"})
     private String latestFabricLoader(String modpackDir) {
+        //TODO: Download file during startup of ServerPackCreator. Replace existing file during every restart. Store in same dir as ServerPacKCreator.
         String result = "0.11.3";
         try {
-            URL downloadFabricXml = new URL(getFabricManifestUrl());
+            URL downloadFabricXml = getFabricManifestUrl();
             ReadableByteChannel downloadFabricXmlReadableByteChannel = Channels.newChannel(downloadFabricXml.openStream());
 
             FileOutputStream downloadFabricXmlFileOutputStream = new FileOutputStream(String.format("%s/server_pack/fabric-loader.xml", modpackDir));
diff --git a/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java b/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
index aada39a61..d9d8f70f0 100644
--- a/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
+++ b/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
@@ -59,25 +59,26 @@ import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
  * 5. {@link #getForgeLinuxFile()}<br>
  * 6. {@link #getFabricWindowsFile()}<br>
  * 7. {@link #getFabricLinuxFile()}<br>
- * 8. {@link #run()}<br>
- * 9. {@link #cleanupEnvironment(String)}<br>
- * 10.{@link #copyStartScripts(String, String, boolean)}<br>
- * 11.{@link #copyFiles(String, List, List)}<br>
- * 12.{@link #excludeClientMods(String, List)}<br>
- * 13.{@link #copyIcon(String)}<br>
- * 14.{@link #copyProperties(String)}<br>
- * 15.{@link #installServer(String, String, String, String, String)}<br>
- * 16.{@link #zipBuilder(String, String, Boolean, String)}<br>
- * 17.{@link #generateDownloadScripts(String, String, String)}<br>
- * 18.{@link #fabricShell(String, String)}<br>
- * 19.{@link #fabricBatch(String, String)}<br>
- * 20.{@link #forgeShell(String, String)}<br>
- * 21.{@link #forgeBatch(String, String)}<br>
- * 22.{@link #downloadFabricJar(String)}<br>
- * 23.{@link #latestFabricInstaller(String)}<br>
- * 24.{@link #downloadForgeJar(String, String, String)}<br>
- * 25.{@link #deleteMinecraftJar(String, String, String)}<br>
- * 26.{@link #cleanUpServerPack(File, File, String, String, String, String)}
+ * 8. {@link #getFabricInstallerManifest()}<br>
+ * 9. {@link #run()}<br>
+ * 10.{@link #cleanupEnvironment(String)}<br>
+ * 11.{@link #copyStartScripts(String, String, boolean)}<br>
+ * 12.{@link #copyFiles(String, List, List)}<br>
+ * 13.{@link #excludeClientMods(String, List)}<br>
+ * 14.{@link #copyIcon(String)}<br>
+ * 15.{@link #copyProperties(String)}<br>
+ * 16.{@link #installServer(String, String, String, String, String)}<br>
+ * 17.{@link #zipBuilder(String, String, Boolean, String)}<br>
+ * 18.{@link #generateDownloadScripts(String, String, String)}<br>
+ * 19.{@link #fabricShell(String, String)}<br>
+ * 20.{@link #fabricBatch(String, String)}<br>
+ * 21.{@link #forgeShell(String, String)}<br>
+ * 22.{@link #forgeBatch(String, String)}<br>
+ * 23.{@link #downloadFabricJar(String)}<br>
+ * 24.{@link #latestFabricInstaller(String)}<br>
+ * 25.{@link #downloadForgeJar(String, String, String)}<br>
+ * 26.{@link #deleteMinecraftJar(String, String, String)}<br>
+ * 27.{@link #cleanUpServerPack(File, File, String, String, String, String)}
  * <p>
  * Requires an instance of {@link Configuration} from which to get all required information about the modpack and the
  * then to be generated server pack.
@@ -137,6 +138,7 @@ public class CreateServerPack {
     private final File fabricWindowsFile = new File("start-fabric.bat");
     private final File fabricLinuxFile   = new File("start-fabric.sh");
 
+    private final String fabricInstallerManifest = "https://maven.fabricmc.net/net/fabricmc/fabric-installer/maven-metadata.xml";
     /**
      * Getter for server.properties.
      * @return Returns the server.properties-file for use in {@link #copyProperties(String)}
@@ -185,6 +187,17 @@ public class CreateServerPack {
         return fabricLinuxFile;
     }
 
+    /**
+     * Getter for the URL to the Fabric Installer Manifest. Gets the string containing the URL and returns it as a URL.
+     * @return Returns the URL to the Fabric Installer Manifest.
+     */
+    public URL getFabricInstallerManifest() {
+        URL downloadURL = null;
+        try { downloadURL = new URL(fabricInstallerManifest); }
+        catch (IOException ex) { appLogger.error(ex); }
+        return downloadURL;
+    }
+
     /**
      * Create a server pack if the check of the configuration file was successfull.<p>
      * Calls<p>
@@ -818,7 +831,8 @@ public class CreateServerPack {
     String latestFabricInstaller(String modpackDir) {
         String result;
         try {
-            URL downloadFabricXml = new URL("https://maven.fabricmc.net/net/fabricmc/fabric-installer/maven-metadata.xml");
+            //TODO: Download file during startup of ServerPackCreator. Replace existing file during every restart. Store in same dir as ServerPacKCreator.
+            URL downloadFabricXml = getFabricInstallerManifest();
 
             ReadableByteChannel downloadFabricXmlReadableByteChannel = Channels.newChannel(downloadFabricXml.openStream());
             FileOutputStream downloadFabricXmlFileOutputStream = new FileOutputStream(String.format("%s/server_pack/fabric-installer.xml", modpackDir));
@@ -840,7 +854,7 @@ public class CreateServerPack {
             appLogger.info(localizationManager.getLocalizedString("serverutilities.log.info.latestfabricinstaller"));
         } catch (IOException | ParserConfigurationException | SAXException | XPathExpressionException ex) {
             appLogger.error(localizationManager.getLocalizedString("serverutilities.log.error.latestfabricinstaller"), ex);
-            result = "0.7.2";
+            result = "0.7.3";
         }
         return result;
     }
diff --git a/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java b/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
index 1373bf901..919b3379e 100644
--- a/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
+++ b/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
@@ -17,16 +17,13 @@
  *
  * The full license can be found at https:github.com/Griefed/ServerPackCreator/blob/main/LICENSE
  */
-
 package de.griefed.serverpackcreator;
 
 import de.griefed.serverpackcreator.curseforgemodpack.CurseCreateModpack;
 import de.griefed.serverpackcreator.i18n.LocalizationManager;
-import org.apache.logging.log4j.Logger;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
-import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
 import java.io.File;
@@ -41,21 +38,55 @@ import java.util.List;
 
 import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
 
+/**
+ * <strong>Table of tests</strong><p>
+ * 1. {@link #CreateServerPackTest()}<br>
+ * 2. {@link #getPropertiesFileTest()}<br>
+ * 3. {@link #getIconFileTest()}<br>
+ * 4. {@link #getForgeWindowsFileTest()}<br>
+ * 5. {@link #getForgeLinuxFileTest()}<br>
+ * 6. {@link #getFabricWindowsFileTest()}<br>
+ * 7. {@link #getFabricLinuxFileTest()}<br>
+ * 8. {@link #runTest()}<br>
+ * 9. {@link #cleanupEnvironmentTest()}<br>
+ * 10.{@link #copyStartScriptsFabricTest()}<br>
+ * 11.{@link #copyStartScriptsForgeTest()}<br>
+ * 12.{@link #copyFilesTest()}<br>
+ * 13.{@link #copyFilesEmptyClientsTest()}<br>
+ * 14.{@link #excludeClientModsTest()}<br>
+ * 15.{@link #copyIconTest()}<br>
+ * 16.{@link #copyPropertiesTest()}<br
+ * 17.{@link #installServerFabricTest()}<br>
+ * 18.{@link #installServerForgeTest()}<br>
+ * 19.{@link #zipBuilderFabricTest()}<br>
+ * 20.{@link #zipBuilderForgeTest()}<br>
+ * 21.{@link #generateDownloadScriptsFabricTest()}<br>
+ * 22.{@link #generateDownloadScriptsForgeTest()}<br>
+ * 23.{@link #fabricShellTest()}<br>
+ * 24.{@link #fabricBatchTest()}<br>
+ * 25.{@link #forgeShellTest()}<br>
+ * 26.{@link #forgeBatchTest()}<br>
+ * 27.{@link #downloadFabricJarTest()}<br>
+ * 28.{@link #latestFabricInstallerTest()}<br>
+ * 29.{@link #downloadForgeJarTest()}<br>
+ * 30.{@link #deleteMinecraftJarFabricTest()}<br>
+ * 31.{@link #deleteMinecraftJarForgeTest()}<br>
+ * 32.{@link #cleanUpServerPackForgeTest()}
+ * 33.{@link #cleanUpServerPackFabricTest()}
+ */
 class CreateServerPackTest {
-    @Mock
-    Logger appLogger;
 
     private CreateServerPack createServerPack;
     private FilesSetup filesSetup;
     private CurseCreateModpack curseCreateModpack;
     private LocalizationManager localizationManager;
-    private Configuration configCheck;
+    private Configuration configuration;
 
     CreateServerPackTest() {
         localizationManager = new LocalizationManager();
         curseCreateModpack = new CurseCreateModpack(localizationManager);
-        configCheck = new Configuration(localizationManager, curseCreateModpack);
-        createServerPack = new CreateServerPack(localizationManager, configCheck, curseCreateModpack);
+        configuration = new Configuration(localizationManager, curseCreateModpack);
+        createServerPack = new CreateServerPack(localizationManager, configuration, curseCreateModpack);
         filesSetup = new FilesSetup(localizationManager);
     }
 
@@ -65,12 +96,107 @@ class CreateServerPackTest {
         MockitoAnnotations.openMocks(this);
     }
 
-    @Mock
-    Logger installerLogger;
+    @Test
+    void getPropertiesFileTest() {
+        File file = createServerPack.getPropertiesFile();
+        Assertions.assertNotNull(file);
+    }
 
+    @Test
+    void getIconFileTest() {
+        File file = createServerPack.getIconFile();
+        Assertions.assertNotNull(file);
+    }
+
+    @Test
+    void getForgeWindowsFileTest() {
+        File file = createServerPack.getForgeWindowsFile();
+        Assertions.assertNotNull(file);
+    }
+
+    @Test
+    void getForgeLinuxFileTest() {
+        File file = createServerPack.getForgeLinuxFile();
+        Assertions.assertNotNull(file);
+    }
+
+    @Test
+    void getFabricWindowsFileTest() {
+        File file = createServerPack.getFabricWindowsFile();
+        Assertions.assertNotNull(file);
+    }
+
+    @Test
+    void getFabricLinuxFileTest() {
+        File file = createServerPack.getFabricLinuxFile();
+        Assertions.assertNotNull(file);
+    }
+
+    @SuppressWarnings("ResultOfMethodCallIgnored")
+    @Test
+    void runTest() throws IOException {
+        filesSetup.filesSetup();
+        Files.copy(Paths.get("./src/test/resources/testresources/serverpackcreator.conf"), Paths.get("./serverpackcreator.conf"), REPLACE_EXISTING);
+        createServerPack.run();
+        Assertions.assertTrue(new File("./src/test/resources/forge_tests/server_pack/libraries").isDirectory());
+        Assertions.assertTrue(new File("./src/test/resources/forge_tests/server_pack/config").isDirectory());
+        Assertions.assertTrue(new File("./src/test/resources/forge_tests/server_pack/defaultconfigs").isDirectory());
+        Assertions.assertTrue(new File("./src/test/resources/forge_tests/server_pack/mods").isDirectory());
+        Assertions.assertTrue(new File("./src/test/resources/forge_tests/server_pack/scripts").isDirectory());
+        Assertions.assertTrue(new File("./src/test/resources/forge_tests/server_pack/seeds").isDirectory());
+
+        Assertions.assertTrue(new File("./src/test/resources/forge_tests/server_pack/1.16.5.json").exists());
+        Assertions.assertTrue(new File("./src/test/resources/forge_tests/server_pack/minecraft_server.1.16.5.jar").exists());
+        Assertions.assertTrue(new File("./src/test/resources/forge_tests/server_pack/download_minecraft-server.jar_forge.bat").exists());
+        Assertions.assertTrue(new File("./src/test/resources/forge_tests/server_pack/download_minecraft-server.jar_forge.sh").exists());
+        Assertions.assertTrue(new File("./src/test/resources/forge_tests/server_pack/forge.jar").exists());
+        Assertions.assertTrue(new File("./src/test/resources/forge_tests/server_pack/server.properties").exists());
+        Assertions.assertTrue(new File("./src/test/resources/forge_tests/server_pack/server-icon.png").exists());
+        Assertions.assertTrue(new File("./src/test/resources/forge_tests/server_pack/start-forge.bat").exists());
+        Assertions.assertTrue(new File("./src/test/resources/forge_tests/server_pack/start-forge.sh").exists());
+
+        if (new File("./src/test/resources/forge_tests/server_pack/libraries").isDirectory()) {
+            Path pathToBeDeleted = Paths.get("./src/test/resources/forge_tests/server_pack/libraries");
+            Files.walk(pathToBeDeleted).sorted(Comparator.reverseOrder()).map(Path::toFile).forEach(File::delete);
+        }
+        if (new File("./src/test/resources/forge_tests/server_pack/config").isDirectory()) {
+            Path pathToBeDeleted = Paths.get("./src/test/resources/forge_tests/server_pack/config");
+            Files.walk(pathToBeDeleted).sorted(Comparator.reverseOrder()).map(Path::toFile).forEach(File::delete);
+        }
+        if (new File("./src/test/resources/forge_tests/server_pack/defaultconfigs").isDirectory()) {
+            Path pathToBeDeleted = Paths.get("./src/test/resources/forge_tests/server_pack/defaultconfigs");
+            Files.walk(pathToBeDeleted).sorted(Comparator.reverseOrder()).map(Path::toFile).forEach(File::delete);
+        }
+        if (new File("./src/test/resources/forge_tests/server_pack/mods").isDirectory()) {
+            Path pathToBeDeleted = Paths.get("./src/test/resources/forge_tests/server_pack/mods");
+            Files.walk(pathToBeDeleted).sorted(Comparator.reverseOrder()).map(Path::toFile).forEach(File::delete);
+        }
+        if (new File("./src/test/resources/forge_tests/server_pack/scripts").isDirectory()) {
+            Path pathToBeDeleted = Paths.get("./src/test/resources/forge_tests/server_pack/scripts");
+            Files.walk(pathToBeDeleted).sorted(Comparator.reverseOrder()).map(Path::toFile).forEach(File::delete);
+        }
+        if (new File("./src/test/resources/forge_tests/server_pack/seeds").isDirectory()) {
+            Path pathToBeDeleted = Paths.get("./src/test/resources/forge_tests/server_pack/seeds");
+            Files.walk(pathToBeDeleted).sorted(Comparator.reverseOrder()).map(Path::toFile).forEach(File::delete);
+        }
+        if (new File("./server_files").isDirectory()) {
+            Path pathToBeDeleted = Paths.get("./server_files");
+            Files.walk(pathToBeDeleted).sorted(Comparator.reverseOrder()).map(Path::toFile).forEach(File::delete);
+        }
+        new File("./src/test/resources/forge_tests/server_pack/1.16.5.json").delete();
+        new File("./src/test/resources/forge_tests/server_pack/minecraft_server.1.16.5.jar").delete();
+        new File("./src/test/resources/forge_tests/server_pack/download_minecraft-server.jar_forge.bat").delete();
+        new File("./src/test/resources/forge_tests/server_pack/download_minecraft-server.jar_forge.sh").delete();
+        new File("./src/test/resources/forge_tests/server_pack/forge.jar").delete();
+        new File("./src/test/resources/forge_tests/server_pack/server.properties").delete();
+        new File("./src/test/resources/forge_tests/server_pack/server-icon.png").delete();
+        new File("./src/test/resources/forge_tests/server_pack/start-forge.bat").delete();
+        new File("./src/test/resources/forge_tests/server_pack/start-forge.sh").delete();
+        new File("./serverpackcreator.conf").delete();
+    }
 
     @Test
-    void testCleanupEnvironment() throws IOException {
+    void cleanupEnvironmentTest() throws IOException {
         //TODO: Figure out how to run this test on GitHub Runners
         if (!new File("/home/runner").isDirectory()) {
             String modpackDir = "./src/test/resources/cleanup_tests";
@@ -82,7 +208,7 @@ class CreateServerPackTest {
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void testCopyStartScriptsFabric() throws IOException {
+    void copyStartScriptsFabricTest() throws IOException {
         //TODO: Figure out how to run this test on GitHub Runners
         if (!new File("/home/runner").isDirectory()) {
             String modpackDir = "./src/test/resources/fabric_tests";
@@ -104,7 +230,7 @@ class CreateServerPackTest {
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void testCopyStartScriptsForge() throws IOException {
+    void copyStartScriptsForgeTest() throws IOException {
         String modpackDir = "./src/test/resources/forge_tests";
         String modLoader = "Forge";
         filesSetup.filesSetup();
@@ -126,7 +252,7 @@ class CreateServerPackTest {
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void testCopyFiles() throws IOException {
+    void copyFilesTest() throws IOException {
         String modpackDir = "./src/test/resources/forge_tests";
         List<String> clientMods = Arrays.asList(
                 "AmbientSounds",
@@ -185,7 +311,7 @@ class CreateServerPackTest {
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void testCopyFilesEmptyClients() throws IOException {
+    void copyFilesEmptyClientsTest() throws IOException {
         String modpackDir = "./src/test/resources/forge_tests";
         List<String> clientMods = new ArrayList<>();
         List<String> copyDirs = Arrays.asList(
@@ -218,9 +344,28 @@ class CreateServerPackTest {
         }
     }
 
+    @Test
+    void excludeClientModsTest() {
+        List<String> clientMods = Arrays.asList(
+                "aaaaa","bbbbb","ccccc","fffff","ggggg","hhhhh","iiiii","jjjjj","kkkkk","lllll",
+                "nnnnn","ppppp","qqqqq","rrrrr","uuuuu","vvvvv","wwwww","xxxxx","yyyyy","zzzzz"
+        );
+        List<String> result = createServerPack.excludeClientMods("./src/test/resources/forge_tests/mods", clientMods);
+        Assertions.assertFalse(result.contains("aaaaa")); Assertions.assertFalse(result.contains("bbbbb"));
+        Assertions.assertFalse(result.contains("ccccc")); Assertions.assertFalse(result.contains("fffff"));
+        Assertions.assertFalse(result.contains("ggggg")); Assertions.assertFalse(result.contains("hhhhh"));
+        Assertions.assertFalse(result.contains("iiiii")); Assertions.assertFalse(result.contains("jjjjj"));
+        Assertions.assertFalse(result.contains("kkkkk")); Assertions.assertFalse(result.contains("lllll"));
+        Assertions.assertFalse(result.contains("nnnnn")); Assertions.assertFalse(result.contains("ppppp"));
+        Assertions.assertFalse(result.contains("qqqqq")); Assertions.assertFalse(result.contains("rrrrr"));
+        Assertions.assertFalse(result.contains("uuuuu")); Assertions.assertFalse(result.contains("vvvvv"));
+        Assertions.assertFalse(result.contains("wwwww")); Assertions.assertFalse(result.contains("xxxxx"));
+        Assertions.assertFalse(result.contains("yyyyy")); Assertions.assertFalse(result.contains("zzzzz"));
+    }
+
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void testCopyIcon() throws IOException {
+    void copyIconTest() throws IOException {
         filesSetup.filesSetup();
         String modpackDir = "./src/test/resources/forge_tests";
         createServerPack.copyIcon(modpackDir);
@@ -239,7 +384,7 @@ class CreateServerPackTest {
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void testCopyProperties() throws IOException {
+    void copyPropertiesTest() throws IOException {
         filesSetup.filesSetup();
         String modpackDir = "./src/test/resources/forge_tests";
         createServerPack.copyProperties(modpackDir);
@@ -258,7 +403,7 @@ class CreateServerPackTest {
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void testInstallServerFabric() {
+    void installServerFabricTest() {
         //TODO: Figure out how to run this test on GitHub Runners
         if (!new File("/home/runner").isDirectory()) {
             String modLoader = "Fabric";
@@ -286,7 +431,7 @@ class CreateServerPackTest {
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void testInstallServerForge() throws IOException {
+    void installServerForgeTest() throws IOException {
         //TODO: Figure out how to run this test on GitHub Runners
         if (!new File("/home/runner").isDirectory()) {
             String modLoader = "Forge";
@@ -326,7 +471,7 @@ class CreateServerPackTest {
     }
 
     @Test
-    void testZipBuilderFabric() throws IOException {
+    void zipBuilderFabricTest() throws IOException {
         //TODO: Figure out how to run this test on GitHub Runners
         if (!new File("/home/runner").isDirectory()) {
             Files.copy(Paths.get("./src/test/resources/testresources/server_pack.zip"), Paths.get("./src/test/resources/fabric_tests/server_pack.zip"), REPLACE_EXISTING);
@@ -338,7 +483,7 @@ class CreateServerPackTest {
     }
 
     @Test
-    void testZipBuilderForge() throws IOException {
+    void zipBuilderForgeTest() throws IOException {
         //TODO: Figure out how to run this test on GitHub Runners
         if (!new File("/home/runner").isDirectory()) {
             Files.copy(Paths.get("./src/test/resources/testresources/server_pack.zip"), Paths.get("./src/test/resources/forge_tests/server_pack.zip"), REPLACE_EXISTING);
@@ -351,7 +496,7 @@ class CreateServerPackTest {
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void testGenerateDownloadScriptsFabric() {
+    void generateDownloadScriptsFabricTest() {
         //TODO: Figure out how to run this test on GitHub Runners
         if (!new File("/home/runner").isDirectory()) {
             String modLoader = "Fabric";
@@ -367,7 +512,7 @@ class CreateServerPackTest {
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void testGenerateDownloadScriptsForge() {
+    void generateDownloadScriptsForgeTest() {
         //TODO: Figure out how to run this test on GitHub Runners
         if (!new File("/home/runner").isDirectory()) {
             String modLoader = "Forge";
@@ -383,7 +528,47 @@ class CreateServerPackTest {
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void testDownloadFabricJar() {
+    void fabricShellTest() {
+        String modpackDir = "./src/test/resources/forge_tests";
+        String minecraftVersion = "1.16.5";
+        createServerPack.fabricShell(modpackDir, minecraftVersion);
+        Assertions.assertTrue(new File("./src/test/resources/forge_tests/server_pack/download_minecraft-server.jar_fabric.sh").exists());
+        new File("./src/test/resources/forge_tests/server_pack/download_minecraft-server.jar_fabric.sh").delete();
+    }
+
+    @SuppressWarnings("ResultOfMethodCallIgnored")
+    @Test
+    void fabricBatchTest() {
+        String modpackDir = "./src/test/resources/forge_tests";
+        String minecraftVersion = "1.16.5";
+        createServerPack.fabricBatch(modpackDir, minecraftVersion);
+        Assertions.assertTrue(new File("./src/test/resources/forge_tests/server_pack/download_minecraft-server.jar_fabric.bat").exists());
+        new File("./src/test/resources/forge_tests/server_pack/download_minecraft-server.jar_fabric.bat").delete();
+    }
+
+    @SuppressWarnings("ResultOfMethodCallIgnored")
+    @Test
+    void forgeShellTest() {
+        String modpackDir = "./src/test/resources/forge_tests";
+        String minecraftVersion = "1.16.5";
+        createServerPack.forgeShell(modpackDir, minecraftVersion);
+        Assertions.assertTrue(new File("./src/test/resources/forge_tests/server_pack/download_minecraft-server.jar_forge.sh").exists());
+        new File("./src/test/resources/forge_tests/server_pack/download_minecraft-server.jar_forge.sh").delete();
+    }
+
+    @SuppressWarnings("ResultOfMethodCallIgnored")
+    @Test
+    void forgeBatchTest() {
+        String modpackDir = "./src/test/resources/forge_tests";
+        String minecraftVersion = "1.16.5";
+        createServerPack.forgeBatch(modpackDir, minecraftVersion);
+        Assertions.assertTrue(new File("./src/test/resources/forge_tests/server_pack/download_minecraft-server.jar_forge.bat").exists());
+        new File("./src/test/resources/forge_tests/server_pack/download_minecraft-server.jar_forge.bat").delete();
+    }
+
+    @SuppressWarnings("ResultOfMethodCallIgnored")
+    @Test
+    void downloadFabricJarTest() {
         //TODO: Figure out how to run this test on GitHub Runners
         if (!new File("/home/runner").isDirectory()) {
             String modpackDir = "./src/test/resources/fabric_tests";
@@ -395,9 +580,16 @@ class CreateServerPackTest {
         }
     }
 
+    @Test
+    void latestFabricInstallerTest() {
+        String modpackDir = "./src/test/resources/forge_tests";
+        String result = createServerPack.latestFabricInstaller(modpackDir);
+        Assertions.assertNotNull(result);
+    }
+
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void testDownloadForgeJar() {
+    void downloadForgeJarTest() {
         //TODO: Figure out how to run this test on GitHub Runners
         if (!new File("/home/runner").isDirectory()) {
             String modLoaderVersion = "36.1.2";
@@ -411,7 +603,7 @@ class CreateServerPackTest {
     }
 
     @Test
-    void testDeleteMinecraftJarFabric() throws IOException {
+    void deleteMinecraftJarFabricTest() throws IOException {
         Files.copy(Paths.get("./src/test/resources/testresources/server_pack.zip"), Paths.get("./src/test/resources/fabric_tests/server_pack.zip"), REPLACE_EXISTING);
         String minecraftVersion = "1.16.5";
         String modLoader = "Fabric";
@@ -420,7 +612,7 @@ class CreateServerPackTest {
     }
 
     @Test
-    void testDeleteMinecraftJarForge() throws IOException {
+    void deleteMinecraftJarForgeTest() throws IOException {
         Files.copy(Paths.get("./src/test/resources/testresources/server_pack.zip"), Paths.get("./src/test/resources/forge_tests/server_pack.zip"), REPLACE_EXISTING);
         String minecraftVersion = "1.16.5";
         String modLoader = "Forge";
@@ -429,7 +621,7 @@ class CreateServerPackTest {
     }
 
     @Test
-    void testCleanUpServerPackForge() {
+    void cleanUpServerPackForgeTest() {
         String modLoader = "Forge";
         String modpackDir = "./src/test/resources/forge_tests";
         String minecraftVersion = "1.16.5";
@@ -444,7 +636,7 @@ class CreateServerPackTest {
     }
 
     @Test
-    void testCleanUpServerPackFabric() {
+    void cleanUpServerPackFabricTest() {
         String modLoader = "Fabric";
         String modpackDir = "./src/test/resources/fabric_tests";
         String minecraftVersion = "1.16.5";
diff --git a/src/test/resources/testresources/serverpackcreator.conf b/src/test/resources/testresources/serverpackcreator.conf
index b0d99ac0e..ff9f2f664 100644
--- a/src/test/resources/testresources/serverpackcreator.conf
+++ b/src/test/resources/testresources/serverpackcreator.conf
@@ -1,7 +1,7 @@
 # Path to your modpack. Can be either relative or absolute.
 # Example: "./Some Modpack" or "C:\Minecraft\Some Modpack"
 # Can also be a combination of CurseForge projectID and fileID. Example for Survive Create Prosper 4 4.6.7 "390331,3215793"
-modpackDir = "src/test/resources/forge_tests"
+modpackDir = "./src/test/resources/forge_tests"
 
 # List of client-only mods to delete from serverpack.
 # No need to include version specifics. Must be the filenames of the mods, not their project names on CurseForge!
-- 
GitLab


From ac4559b7f6b0aa105a6e22734954fc637983e264 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Thu, 6 May 2021 08:13:45 +0200
Subject: [PATCH 67/91] refactor(DI): Try and fix tests which only fail on
 GitHub

---
 .../de/griefed/serverpackcreator/CreateServerPackTest.java    | 1 +
 .../server_pack/download_minecraft-server.jar_fabric.bat      | 1 +
 .../server_pack/download_minecraft-server.jar_fabric.sh       | 4 ++++
 src/test/resources/forge_tests/mods/aaaaa.jar                 | 0
 src/test/resources/forge_tests/mods/bbbbb.jar                 | 0
 src/test/resources/forge_tests/mods/ccccc.jar                 | 0
 src/test/resources/forge_tests/mods/fffff.jar                 | 0
 src/test/resources/forge_tests/mods/ggggg.jar                 | 0
 src/test/resources/forge_tests/mods/hhhhh.jar                 | 0
 src/test/resources/forge_tests/mods/iiiii.jar                 | 0
 src/test/resources/forge_tests/mods/jjjjj.jar                 | 0
 src/test/resources/forge_tests/mods/kkkkk.jar                 | 0
 src/test/resources/forge_tests/mods/lllll.jar                 | 0
 src/test/resources/forge_tests/mods/nnnnn.jar                 | 0
 src/test/resources/forge_tests/mods/ppppp.jar                 | 0
 src/test/resources/forge_tests/mods/qqqqq.jar                 | 0
 src/test/resources/forge_tests/mods/rrrrr.jar                 | 0
 src/test/resources/forge_tests/mods/uuuuu.jar                 | 0
 src/test/resources/forge_tests/mods/vvvvv.jar                 | 0
 src/test/resources/forge_tests/mods/wwwww.jar                 | 0
 src/test/resources/forge_tests/mods/xxxxx.jar                 | 0
 src/test/resources/forge_tests/mods/yyyyy.jar                 | 0
 src/test/resources/forge_tests/mods/zzzzz.jar                 | 0
 23 files changed, 6 insertions(+)
 create mode 100644 src/test/resources/fabric_tests/server_pack/download_minecraft-server.jar_fabric.bat
 create mode 100644 src/test/resources/fabric_tests/server_pack/download_minecraft-server.jar_fabric.sh
 create mode 100644 src/test/resources/forge_tests/mods/aaaaa.jar
 create mode 100644 src/test/resources/forge_tests/mods/bbbbb.jar
 create mode 100644 src/test/resources/forge_tests/mods/ccccc.jar
 create mode 100644 src/test/resources/forge_tests/mods/fffff.jar
 create mode 100644 src/test/resources/forge_tests/mods/ggggg.jar
 create mode 100644 src/test/resources/forge_tests/mods/hhhhh.jar
 create mode 100644 src/test/resources/forge_tests/mods/iiiii.jar
 create mode 100644 src/test/resources/forge_tests/mods/jjjjj.jar
 create mode 100644 src/test/resources/forge_tests/mods/kkkkk.jar
 create mode 100644 src/test/resources/forge_tests/mods/lllll.jar
 create mode 100644 src/test/resources/forge_tests/mods/nnnnn.jar
 create mode 100644 src/test/resources/forge_tests/mods/ppppp.jar
 create mode 100644 src/test/resources/forge_tests/mods/qqqqq.jar
 create mode 100644 src/test/resources/forge_tests/mods/rrrrr.jar
 create mode 100644 src/test/resources/forge_tests/mods/uuuuu.jar
 create mode 100644 src/test/resources/forge_tests/mods/vvvvv.jar
 create mode 100644 src/test/resources/forge_tests/mods/wwwww.jar
 create mode 100644 src/test/resources/forge_tests/mods/xxxxx.jar
 create mode 100644 src/test/resources/forge_tests/mods/yyyyy.jar
 create mode 100644 src/test/resources/forge_tests/mods/zzzzz.jar

diff --git a/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java b/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
index 919b3379e..a55e378ac 100644
--- a/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
+++ b/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
@@ -92,6 +92,7 @@ class CreateServerPackTest {
 
     @BeforeEach
     void setUp() {
+        filesSetup.filesSetup();
         localizationManager.checkLocaleFile();
         MockitoAnnotations.openMocks(this);
     }
diff --git a/src/test/resources/fabric_tests/server_pack/download_minecraft-server.jar_fabric.bat b/src/test/resources/fabric_tests/server_pack/download_minecraft-server.jar_fabric.bat
new file mode 100644
index 000000000..a3159f696
--- /dev/null
+++ b/src/test/resources/fabric_tests/server_pack/download_minecraft-server.jar_fabric.bat
@@ -0,0 +1 @@
+powershell -Command "(New-Object Net.WebClient).DownloadFile('https://launcher.mojang.com/v1/objects/1b557e7b033b583cd9f66746b7a9ab1ec1673ced/server.jar', 'server.jar')"
\ No newline at end of file
diff --git a/src/test/resources/fabric_tests/server_pack/download_minecraft-server.jar_fabric.sh b/src/test/resources/fabric_tests/server_pack/download_minecraft-server.jar_fabric.sh
new file mode 100644
index 000000000..e4d5dffcb
--- /dev/null
+++ b/src/test/resources/fabric_tests/server_pack/download_minecraft-server.jar_fabric.sh
@@ -0,0 +1,4 @@
+#!/bin/bash
+#Download the Minecraft_server.jar for your modpack
+
+wget -O server.jar https://launcher.mojang.com/v1/objects/1b557e7b033b583cd9f66746b7a9ab1ec1673ced/server.jar
\ No newline at end of file
diff --git a/src/test/resources/forge_tests/mods/aaaaa.jar b/src/test/resources/forge_tests/mods/aaaaa.jar
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/test/resources/forge_tests/mods/bbbbb.jar b/src/test/resources/forge_tests/mods/bbbbb.jar
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/test/resources/forge_tests/mods/ccccc.jar b/src/test/resources/forge_tests/mods/ccccc.jar
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/test/resources/forge_tests/mods/fffff.jar b/src/test/resources/forge_tests/mods/fffff.jar
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/test/resources/forge_tests/mods/ggggg.jar b/src/test/resources/forge_tests/mods/ggggg.jar
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/test/resources/forge_tests/mods/hhhhh.jar b/src/test/resources/forge_tests/mods/hhhhh.jar
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/test/resources/forge_tests/mods/iiiii.jar b/src/test/resources/forge_tests/mods/iiiii.jar
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/test/resources/forge_tests/mods/jjjjj.jar b/src/test/resources/forge_tests/mods/jjjjj.jar
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/test/resources/forge_tests/mods/kkkkk.jar b/src/test/resources/forge_tests/mods/kkkkk.jar
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/test/resources/forge_tests/mods/lllll.jar b/src/test/resources/forge_tests/mods/lllll.jar
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/test/resources/forge_tests/mods/nnnnn.jar b/src/test/resources/forge_tests/mods/nnnnn.jar
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/test/resources/forge_tests/mods/ppppp.jar b/src/test/resources/forge_tests/mods/ppppp.jar
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/test/resources/forge_tests/mods/qqqqq.jar b/src/test/resources/forge_tests/mods/qqqqq.jar
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/test/resources/forge_tests/mods/rrrrr.jar b/src/test/resources/forge_tests/mods/rrrrr.jar
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/test/resources/forge_tests/mods/uuuuu.jar b/src/test/resources/forge_tests/mods/uuuuu.jar
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/test/resources/forge_tests/mods/vvvvv.jar b/src/test/resources/forge_tests/mods/vvvvv.jar
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/test/resources/forge_tests/mods/wwwww.jar b/src/test/resources/forge_tests/mods/wwwww.jar
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/test/resources/forge_tests/mods/xxxxx.jar b/src/test/resources/forge_tests/mods/xxxxx.jar
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/test/resources/forge_tests/mods/yyyyy.jar b/src/test/resources/forge_tests/mods/yyyyy.jar
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/test/resources/forge_tests/mods/zzzzz.jar b/src/test/resources/forge_tests/mods/zzzzz.jar
new file mode 100644
index 000000000..e69de29bb
-- 
GitLab


From 598e45d582b2da01dbc822b73931f8a40a39b033 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Thu, 6 May 2021 08:16:59 +0200
Subject: [PATCH 68/91] refactor(DI): Try and fix tests which only fail on
 GitHub

---
 .../java/de/griefed/serverpackcreator/CreateServerPackTest.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java b/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
index a55e378ac..8c69f1a69 100644
--- a/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
+++ b/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
@@ -92,8 +92,8 @@ class CreateServerPackTest {
 
     @BeforeEach
     void setUp() {
-        filesSetup.filesSetup();
         localizationManager.checkLocaleFile();
+        filesSetup.filesSetup();
         MockitoAnnotations.openMocks(this);
     }
 
-- 
GitLab


From 2c006b7b27d892e07b8d2dcbd9142229ce928031 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Thu, 6 May 2021 08:39:40 +0200
Subject: [PATCH 69/91] refactor(DI): Try and fix tests which only fail on
 GitHub

---
 .../CreateServerPackTest.java                 | 36 ++++++++++------
 .../serverpackcreator/FilesSetupTest.java     | 41 ++++++++++++-------
 2 files changed, 50 insertions(+), 27 deletions(-)

diff --git a/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java b/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
index 8c69f1a69..fdbde201f 100644
--- a/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
+++ b/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
@@ -210,8 +210,9 @@ class CreateServerPackTest {
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
     void copyStartScriptsFabricTest() throws IOException {
+        filesSetup.filesSetup();
         //TODO: Figure out how to run this test on GitHub Runners
-        if (!new File("/home/runner").isDirectory()) {
+        //if (!new File("/home/runner").isDirectory()) {
             String modpackDir = "./src/test/resources/fabric_tests";
             String modLoader = "Fabric";
             filesSetup.filesSetup();
@@ -226,12 +227,13 @@ class CreateServerPackTest {
                 Files.walk(pathToBeDeleted).sorted(Comparator.reverseOrder()).map(Path::toFile).forEach(File::delete);
             }
             new File("./serverpackcreator.conf").delete();
-        }
+        //}
     }
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
     void copyStartScriptsForgeTest() throws IOException {
+        filesSetup.filesSetup();
         String modpackDir = "./src/test/resources/forge_tests";
         String modLoader = "Forge";
         filesSetup.filesSetup();
@@ -529,8 +531,10 @@ class CreateServerPackTest {
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void fabricShellTest() {
+    void fabricShellTest() throws IOException {
+        filesSetup.filesSetup();
         String modpackDir = "./src/test/resources/forge_tests";
+        Files.createDirectories(Paths.get("./src/test/resources/forge_tests/server_pack"));
         String minecraftVersion = "1.16.5";
         createServerPack.fabricShell(modpackDir, minecraftVersion);
         Assertions.assertTrue(new File("./src/test/resources/forge_tests/server_pack/download_minecraft-server.jar_fabric.sh").exists());
@@ -539,8 +543,10 @@ class CreateServerPackTest {
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void fabricBatchTest() {
+    void fabricBatchTest() throws IOException {
+        filesSetup.filesSetup();
         String modpackDir = "./src/test/resources/forge_tests";
+        Files.createDirectories(Paths.get("./src/test/resources/forge_tests/server_pack"));
         String minecraftVersion = "1.16.5";
         createServerPack.fabricBatch(modpackDir, minecraftVersion);
         Assertions.assertTrue(new File("./src/test/resources/forge_tests/server_pack/download_minecraft-server.jar_fabric.bat").exists());
@@ -549,8 +555,10 @@ class CreateServerPackTest {
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void forgeShellTest() {
+    void forgeShellTest() throws IOException {
+        filesSetup.filesSetup();
         String modpackDir = "./src/test/resources/forge_tests";
+        Files.createDirectories(Paths.get("./src/test/resources/forge_tests/server_pack"));
         String minecraftVersion = "1.16.5";
         createServerPack.forgeShell(modpackDir, minecraftVersion);
         Assertions.assertTrue(new File("./src/test/resources/forge_tests/server_pack/download_minecraft-server.jar_forge.sh").exists());
@@ -559,8 +567,10 @@ class CreateServerPackTest {
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void forgeBatchTest() {
+    void forgeBatchTest() throws IOException {
+        filesSetup.filesSetup();
         String modpackDir = "./src/test/resources/forge_tests";
+        Files.createDirectories(Paths.get("./src/test/resources/forge_tests/server_pack"));
         String minecraftVersion = "1.16.5";
         createServerPack.forgeBatch(modpackDir, minecraftVersion);
         Assertions.assertTrue(new File("./src/test/resources/forge_tests/server_pack/download_minecraft-server.jar_forge.bat").exists());
@@ -569,16 +579,17 @@ class CreateServerPackTest {
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void downloadFabricJarTest() {
+    void downloadFabricJarTest() throws IOException {
         //TODO: Figure out how to run this test on GitHub Runners
-        if (!new File("/home/runner").isDirectory()) {
+        //if (!new File("/home/runner").isDirectory()) {
             String modpackDir = "./src/test/resources/fabric_tests";
+            Files.createDirectories(Paths.get("./src/test/resources/fabric_tests/server_pack"));
             boolean result = createServerPack.downloadFabricJar(modpackDir);
             Assertions.assertTrue(result);
             Assertions.assertTrue(new File(String.format("%s/server_pack/fabric-installer.jar", modpackDir)).exists());
             new File(String.format("%s/server_pack/fabric-installer.jar", modpackDir)).delete();
             new File(String.format("%s/server_pack/fabric-installer.xml", modpackDir)).delete();
-        }
+        //}
     }
 
     @Test
@@ -590,17 +601,18 @@ class CreateServerPackTest {
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void downloadForgeJarTest() {
+    void downloadForgeJarTest() throws IOException {
         //TODO: Figure out how to run this test on GitHub Runners
-        if (!new File("/home/runner").isDirectory()) {
+        //if (!new File("/home/runner").isDirectory()) {
             String modLoaderVersion = "36.1.2";
             String modpackDir = "./src/test/resources/forge_tests";
+            Files.createDirectories(Paths.get("./src/test/resources/forge_tests/server_pack"));
             String minecraftVersion = "1.16.5";
             boolean result = createServerPack.downloadForgeJar(minecraftVersion, modLoaderVersion, modpackDir);
             Assertions.assertTrue(result);
             Assertions.assertTrue(new File(String.format("%s/server_pack/forge-installer.jar", modpackDir)).exists());
             new File(String.format("%s/server_pack/forge-installer.jar", modpackDir)).delete();
-        }
+        //}
     }
 
     @Test
diff --git a/src/test/java/de/griefed/serverpackcreator/FilesSetupTest.java b/src/test/java/de/griefed/serverpackcreator/FilesSetupTest.java
index bef5f7628..902049e9f 100644
--- a/src/test/java/de/griefed/serverpackcreator/FilesSetupTest.java
+++ b/src/test/java/de/griefed/serverpackcreator/FilesSetupTest.java
@@ -17,10 +17,8 @@
  *
  * The full license can be found at https:github.com/Griefed/ServerPackCreator/blob/main/LICENSE
  */
-
 package de.griefed.serverpackcreator;
 
-import de.griefed.serverpackcreator.curseforgemodpack.CurseCreateModpack;
 import de.griefed.serverpackcreator.i18n.LocalizationManager;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.BeforeEach;
@@ -150,7 +148,8 @@ class FilesSetupTest {
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
     void checkForConfigTestNew() {
-        File configFile = new File("serverpackcreator.conf");
+        File configFile = new File("./serverpackcreator.conf");
+        configFile.delete();
         Assertions.assertTrue(filesSetup.checkForConfig());
         configFile.delete();
     }
@@ -166,8 +165,10 @@ class FilesSetupTest {
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void checkForFabricLinuxTestNew() {
-        File fabricLinux = new File("start-fabric.sh");
+    void checkForFabricLinuxTestNew() throws IOException {
+        Files.createDirectories(Paths.get("./server_files"));
+        File fabricLinux = new File("./server_files/start-fabric.sh");
+        fabricLinux.delete();
         Assertions.assertTrue(filesSetup.checkForFabricLinux());
         fabricLinux.delete();
     }
@@ -183,8 +184,10 @@ class FilesSetupTest {
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void checkForFabricWindowsTestNew() {
-        File fabricWindows = new File("start-fabric.bat");
+    void checkForFabricWindowsTestNew() throws IOException {
+        Files.createDirectories(Paths.get("./server_files"));
+        File fabricWindows = new File("./server_files/start-fabric.bat");
+        fabricWindows.delete();
         Assertions.assertTrue(filesSetup.checkForFabricWindows());
         fabricWindows.delete();
     }
@@ -200,8 +203,10 @@ class FilesSetupTest {
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void checkForForgeLinuxTestNew() {
-        File forgeLinux = new File("start-forge.sh");
+    void checkForForgeLinuxTestNew() throws IOException {
+        Files.createDirectories(Paths.get("./server_files"));
+        File forgeLinux = new File("./server_files/start-forge.sh");
+        forgeLinux.delete();
         Assertions.assertTrue(filesSetup.checkForForgeLinux());
         forgeLinux.delete();
     }
@@ -217,8 +222,10 @@ class FilesSetupTest {
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void checkForForgeWindowsTestNew() {
-        File forgeWindows = new File("start-forge.bat");
+    void checkForForgeWindowsTestNew() throws IOException {
+        Files.createDirectories(Paths.get("./server_files"));
+        File forgeWindows = new File("./server_files/start-forge.bat");
+        forgeWindows.delete();
         Assertions.assertTrue(filesSetup.checkForForgeWindows());
         forgeWindows.delete();
     }
@@ -234,8 +241,10 @@ class FilesSetupTest {
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void checkForPropertiesTestNew() {
-        File properties = new File("server.properties");
+    void checkForPropertiesTestNew() throws IOException {
+        Files.createDirectories(Paths.get("./server_files"));
+        File properties = new File("./server_files/server.properties");
+        properties.delete();
         Assertions.assertTrue(filesSetup.checkForProperties());
         properties.delete();
     }
@@ -251,8 +260,10 @@ class FilesSetupTest {
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void checkForIconTestNew() {
-        File icon = new File("server-icon.png");
+    void checkForIconTestNew() throws IOException {
+        Files.createDirectories(Paths.get("./server_files"));
+        File icon = new File("./server_files/server-icon.png");
+        icon.delete();
         Assertions.assertTrue(filesSetup.checkForIcon());
         icon.delete();
     }
-- 
GitLab


From 3ffce75529c07689216cdcdc9de98438740618ff Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Thu, 6 May 2021 09:01:05 +0200
Subject: [PATCH 70/91] refactor(DI): Try and fix tests which only fail on
 GitHub

---
 .../CreateServerPackTest.java                 | 79 +++++++++----------
 1 file changed, 38 insertions(+), 41 deletions(-)

diff --git a/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java b/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
index fdbde201f..b75e8fbca 100644
--- a/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
+++ b/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
@@ -199,35 +199,32 @@ class CreateServerPackTest {
     @Test
     void cleanupEnvironmentTest() throws IOException {
         //TODO: Figure out how to run this test on GitHub Runners
-        if (!new File("/home/runner").isDirectory()) {
+        Files.createDirectories(Paths.get("./src/test/resources/cleanup_tests/server_pack"));
+        //if (!new File("/home/runner").isDirectory()) {
             String modpackDir = "./src/test/resources/cleanup_tests";
             Files.copy(Paths.get("./src/test/resources/testresources/server_pack.zip"), Paths.get("./src/test/resources/cleanup_tests/server_pack.zip"), REPLACE_EXISTING);
-            Files.createDirectories(Paths.get(String.format("%s/server_pack", modpackDir)));
             createServerPack.cleanupEnvironment(modpackDir);
-        }
+        //}
     }
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
     void copyStartScriptsFabricTest() throws IOException {
         filesSetup.filesSetup();
-        //TODO: Figure out how to run this test on GitHub Runners
-        //if (!new File("/home/runner").isDirectory()) {
-            String modpackDir = "./src/test/resources/fabric_tests";
-            String modLoader = "Fabric";
-            filesSetup.filesSetup();
-            createServerPack.copyStartScripts(modpackDir, modLoader, true);
-            Assertions.assertTrue(new File(String.format("%s/server_pack/start-fabric.bat", modpackDir)).exists());
-            Assertions.assertTrue(new File(String.format("%s/server_pack/start-fabric.sh", modpackDir)).exists());
-            new File(String.format("%s/server_pack/start-fabric.bat", modpackDir)).delete();
-            new File(String.format("%s/server_pack/start-fabric.sh", modpackDir)).delete();
-            String delete = "./server_files";
-            if (new File(delete).isDirectory()) {
-                Path pathToBeDeleted = Paths.get(delete);
-                Files.walk(pathToBeDeleted).sorted(Comparator.reverseOrder()).map(Path::toFile).forEach(File::delete);
-            }
-            new File("./serverpackcreator.conf").delete();
-        //}
+        String modpackDir = "./src/test/resources/fabric_tests";
+        String modLoader = "Fabric";
+        filesSetup.filesSetup();
+        createServerPack.copyStartScripts(modpackDir, modLoader, true);
+        Assertions.assertTrue(new File(String.format("%s/server_pack/start-fabric.bat", modpackDir)).exists());
+        Assertions.assertTrue(new File(String.format("%s/server_pack/start-fabric.sh", modpackDir)).exists());
+        new File(String.format("%s/server_pack/start-fabric.bat", modpackDir)).delete();
+        new File(String.format("%s/server_pack/start-fabric.sh", modpackDir)).delete();
+        String delete = "./server_files";
+        if (new File(delete).isDirectory()) {
+            Path pathToBeDeleted = Paths.get(delete);
+            Files.walk(pathToBeDeleted).sorted(Comparator.reverseOrder()).map(Path::toFile).forEach(File::delete);
+        }
+        new File("./serverpackcreator.conf").delete();
     }
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
@@ -406,9 +403,10 @@ class CreateServerPackTest {
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void installServerFabricTest() {
+    void installServerFabricTest() throws IOException {
         //TODO: Figure out how to run this test on GitHub Runners
-        if (!new File("/home/runner").isDirectory()) {
+        Files.createDirectories(Paths.get("./src/test/resources/fabric_tests/server_pack"));
+        //if (!new File("/home/runner").isDirectory()) {
             String modLoader = "Fabric";
             String modpackDir = "./src/test/resources/fabric_tests";
             String minecraftVersion = "1.16.5";
@@ -429,14 +427,15 @@ class CreateServerPackTest {
             Assertions.assertTrue(new File(String.format("%s/server_pack/server.jar", modpackDir)).exists());
             new File(String.format("%s/server_pack/fabric-server-launch.jar", modpackDir)).delete();
             new File(String.format("%s/server_pack/server.jar", modpackDir)).delete();
-        }
+        //}
     }
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
     void installServerForgeTest() throws IOException {
         //TODO: Figure out how to run this test on GitHub Runners
-        if (!new File("/home/runner").isDirectory()) {
+        Files.createDirectories(Paths.get("./src/test/resources/forge_tests/server_pack"));
+        //if (!new File("/home/runner").isDirectory()) {
             String modLoader = "Forge";
             String modpackDir = "./src/test/resources/forge_tests";
             String minecraftVersion = "1.16.5";
@@ -470,38 +469,41 @@ class CreateServerPackTest {
                 Path pathToBeDeleted = Paths.get(delete);
                 Files.walk(pathToBeDeleted).sorted(Comparator.reverseOrder()).map(Path::toFile).forEach(File::delete);
             }
-        }
+        //}
     }
 
     @Test
     void zipBuilderFabricTest() throws IOException {
         //TODO: Figure out how to run this test on GitHub Runners
-        if (!new File("/home/runner").isDirectory()) {
+        Files.createDirectories(Paths.get("./src/test/resources/fabric_tests/server_pack"));
+        //if (!new File("/home/runner").isDirectory()) {
             Files.copy(Paths.get("./src/test/resources/testresources/server_pack.zip"), Paths.get("./src/test/resources/fabric_tests/server_pack.zip"), REPLACE_EXISTING);
             String minecraftVersion = "1.16.5";
             String modLoader = "Fabric";
             String modpackDir = "src/test/resources/fabric_tests";
             createServerPack.zipBuilder(modpackDir, modLoader, Boolean.TRUE, minecraftVersion);
-        }
+        //}
     }
 
     @Test
     void zipBuilderForgeTest() throws IOException {
         //TODO: Figure out how to run this test on GitHub Runners
-        if (!new File("/home/runner").isDirectory()) {
+        Files.createDirectories(Paths.get("./src/test/resources/forge_tests/server_pack"));
+        //if (!new File("/home/runner").isDirectory()) {
             Files.copy(Paths.get("./src/test/resources/testresources/server_pack.zip"), Paths.get("./src/test/resources/forge_tests/server_pack.zip"), REPLACE_EXISTING);
             String minecraftVersion = "1.16.5";
             String modLoader = "Forge";
             String modpackDir = "./src/test/resources/forge_tests";
             createServerPack.zipBuilder(modpackDir, modLoader, Boolean.TRUE, minecraftVersion);
-        }
+        //}
     }
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void generateDownloadScriptsFabricTest() {
+    void generateDownloadScriptsFabricTest() throws IOException {
         //TODO: Figure out how to run this test on GitHub Runners
-        if (!new File("/home/runner").isDirectory()) {
+        Files.createDirectories(Paths.get("./src/test/resources/fabric_tests/server_pack"));
+        //if (!new File("/home/runner").isDirectory()) {
             String modLoader = "Fabric";
             String modpackDir = "./src/test/resources/fabric_tests";
             String minecraftVersion = "1.16.5";
@@ -510,14 +512,15 @@ class CreateServerPackTest {
             Assertions.assertTrue(new File(String.format("%s/server_pack/download_minecraft-server.jar_fabric.sh", modpackDir)).exists());
             new File(String.format("%s/server_pack/download_minecraft-server.jar_fabric.bat", modpackDir)).delete();
             new File(String.format("%s/server_pack/download_minecraft-server.jar_fabric.sh", modpackDir)).delete();
-        }
+        //}
     }
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void generateDownloadScriptsForgeTest() {
+    void generateDownloadScriptsForgeTest() throws IOException {
         //TODO: Figure out how to run this test on GitHub Runners
-        if (!new File("/home/runner").isDirectory()) {
+        Files.createDirectories(Paths.get("./src/test/resources/forge_tests/server_pack"));
+        //if (!new File("/home/runner").isDirectory()) {
             String modLoader = "Forge";
             String modpackDir = "./src/test/resources/forge_tests";
             String minecraftVersion = "1.16.5";
@@ -526,7 +529,7 @@ class CreateServerPackTest {
             Assertions.assertTrue(new File(String.format("%s/server_pack/download_minecraft-server.jar_forge.sh", modpackDir)).exists());
             new File(String.format("%s/server_pack/download_minecraft-server.jar_forge.bat", modpackDir)).delete();
             new File(String.format("%s/server_pack/download_minecraft-server.jar_forge.sh", modpackDir)).delete();
-        }
+        //}
     }
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
@@ -580,8 +583,6 @@ class CreateServerPackTest {
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
     void downloadFabricJarTest() throws IOException {
-        //TODO: Figure out how to run this test on GitHub Runners
-        //if (!new File("/home/runner").isDirectory()) {
             String modpackDir = "./src/test/resources/fabric_tests";
             Files.createDirectories(Paths.get("./src/test/resources/fabric_tests/server_pack"));
             boolean result = createServerPack.downloadFabricJar(modpackDir);
@@ -589,7 +590,6 @@ class CreateServerPackTest {
             Assertions.assertTrue(new File(String.format("%s/server_pack/fabric-installer.jar", modpackDir)).exists());
             new File(String.format("%s/server_pack/fabric-installer.jar", modpackDir)).delete();
             new File(String.format("%s/server_pack/fabric-installer.xml", modpackDir)).delete();
-        //}
     }
 
     @Test
@@ -602,8 +602,6 @@ class CreateServerPackTest {
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
     void downloadForgeJarTest() throws IOException {
-        //TODO: Figure out how to run this test on GitHub Runners
-        //if (!new File("/home/runner").isDirectory()) {
             String modLoaderVersion = "36.1.2";
             String modpackDir = "./src/test/resources/forge_tests";
             Files.createDirectories(Paths.get("./src/test/resources/forge_tests/server_pack"));
@@ -612,7 +610,6 @@ class CreateServerPackTest {
             Assertions.assertTrue(result);
             Assertions.assertTrue(new File(String.format("%s/server_pack/forge-installer.jar", modpackDir)).exists());
             new File(String.format("%s/server_pack/forge-installer.jar", modpackDir)).delete();
-        //}
     }
 
     @Test
-- 
GitLab


From 495526e6652f4e416c8dfe071288e3c6b9307fcd Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Thu, 6 May 2021 09:27:42 +0200
Subject: [PATCH 71/91] refactor(DI): Add some assertions

---
 .../CreateServerPackTest.java                 | 225 +++++++++---------
 1 file changed, 106 insertions(+), 119 deletions(-)

diff --git a/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java b/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
index b75e8fbca..d5ab4b469 100644
--- a/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
+++ b/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
@@ -198,13 +198,12 @@ class CreateServerPackTest {
 
     @Test
     void cleanupEnvironmentTest() throws IOException {
-        //TODO: Figure out how to run this test on GitHub Runners
         Files.createDirectories(Paths.get("./src/test/resources/cleanup_tests/server_pack"));
-        //if (!new File("/home/runner").isDirectory()) {
-            String modpackDir = "./src/test/resources/cleanup_tests";
-            Files.copy(Paths.get("./src/test/resources/testresources/server_pack.zip"), Paths.get("./src/test/resources/cleanup_tests/server_pack.zip"), REPLACE_EXISTING);
-            createServerPack.cleanupEnvironment(modpackDir);
-        //}
+        String modpackDir = "./src/test/resources/cleanup_tests";
+        Files.copy(Paths.get("./src/test/resources/testresources/server_pack.zip"), Paths.get("./src/test/resources/cleanup_tests/server_pack.zip"), REPLACE_EXISTING);
+        createServerPack.cleanupEnvironment(modpackDir);
+        Assertions.assertFalse(new File("\"./src/test/resources/cleanup_tests/server_pack.zip\"").exists());
+        Assertions.assertFalse(new File("./src/test/resources/cleanup_tests/server_pack").isDirectory());
     }
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
@@ -404,132 +403,116 @@ class CreateServerPackTest {
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
     void installServerFabricTest() throws IOException {
-        //TODO: Figure out how to run this test on GitHub Runners
         Files.createDirectories(Paths.get("./src/test/resources/fabric_tests/server_pack"));
-        //if (!new File("/home/runner").isDirectory()) {
-            String modLoader = "Fabric";
-            String modpackDir = "./src/test/resources/fabric_tests";
-            String minecraftVersion = "1.16.5";
-            String modLoaderVersion = "0.7.3";
-            String javaPath;
-            String autoJavaPath = System.getProperty("java.home").replace("\\", "/") + "/bin/java";
-            if (autoJavaPath.startsWith("C:")) {
-                autoJavaPath = String.format("%s.exe", autoJavaPath);
-            }
-            if (new File("/usr/bin/java").exists()) {
-                javaPath = "/usr/bin/java";
-            } else {
-                javaPath = autoJavaPath;
-            }
-            createServerPack.downloadFabricJar(modpackDir);
-            createServerPack.installServer(modLoader, modpackDir, minecraftVersion, modLoaderVersion, javaPath);
-            Assertions.assertTrue(new File(String.format("%s/server_pack/fabric-server-launch.jar", modpackDir)).exists());
-            Assertions.assertTrue(new File(String.format("%s/server_pack/server.jar", modpackDir)).exists());
-            new File(String.format("%s/server_pack/fabric-server-launch.jar", modpackDir)).delete();
-            new File(String.format("%s/server_pack/server.jar", modpackDir)).delete();
-        //}
+        String modLoader = "Fabric";
+        String modpackDir = "./src/test/resources/fabric_tests";
+        String minecraftVersion = "1.16.5";
+        String modLoaderVersion = "0.7.3";
+        String javaPath;
+        String autoJavaPath = System.getProperty("java.home").replace("\\", "/") + "/bin/java";
+        if (autoJavaPath.startsWith("C:")) {
+            autoJavaPath = String.format("%s.exe", autoJavaPath);
+        }
+        if (new File("/usr/bin/java").exists()) {
+            javaPath = "/usr/bin/java";
+        } else {
+            javaPath = autoJavaPath;
+        }
+        createServerPack.downloadFabricJar(modpackDir);
+        createServerPack.installServer(modLoader, modpackDir, minecraftVersion, modLoaderVersion, javaPath);
+        Assertions.assertTrue(new File(String.format("%s/server_pack/fabric-server-launch.jar", modpackDir)).exists());
+        Assertions.assertTrue(new File(String.format("%s/server_pack/server.jar", modpackDir)).exists());
+        new File(String.format("%s/server_pack/fabric-server-launch.jar", modpackDir)).delete();
+        new File(String.format("%s/server_pack/server.jar", modpackDir)).delete();
     }
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
     void installServerForgeTest() throws IOException {
-        //TODO: Figure out how to run this test on GitHub Runners
         Files.createDirectories(Paths.get("./src/test/resources/forge_tests/server_pack"));
-        //if (!new File("/home/runner").isDirectory()) {
-            String modLoader = "Forge";
-            String modpackDir = "./src/test/resources/forge_tests";
-            String minecraftVersion = "1.16.5";
-            String modLoaderVersion = "36.1.2";
-            String javaPath;
-            String autoJavaPath = System.getProperty("java.home").replace("\\", "/") + "/bin/java";
-            if (autoJavaPath.startsWith("C:")) {
-                autoJavaPath = String.format("%s.exe", autoJavaPath);
-            }
-            if (new File("/usr/bin/java").exists()) {
-                javaPath = "/usr/bin/java";
-            } else {
-                javaPath = autoJavaPath;
-            }
-            createServerPack.downloadForgeJar(minecraftVersion, modLoaderVersion, modpackDir);
-            createServerPack.installServer(modLoader, modpackDir, minecraftVersion, modLoaderVersion, javaPath);
-            Assertions.assertTrue(new File(String.format("%s/server_pack/1.16.5.json", modpackDir)).exists());
-            Assertions.assertTrue(new File(String.format("%s/server_pack/forge.jar", modpackDir)).exists());
-            Assertions.assertTrue(new File(String.format("%s/server_pack/minecraft_server.1.16.5.jar", modpackDir)).exists());
-            Assertions.assertTrue(new File(String.format("%s/server_pack/download_minecraft-server.jar_forge.bat", modpackDir)).exists());
-            Assertions.assertTrue(new File(String.format("%s/server_pack/download_minecraft-server.jar_forge.sh", modpackDir)).exists());
-            new File(String.format("%s/server_pack/1.16.5.json", modpackDir)).delete();
-            new File(String.format("%s/server_pack/forge.jar", modpackDir)).delete();
-            new File(String.format("%s/server_pack/forge-installer.jar", modpackDir)).delete();
-            new File(String.format("%s/server_pack/forge-installer.jar.log", modpackDir)).delete();
-            new File(String.format("%s/server_pack/minecraft_server.1.16.5.jar", modpackDir)).delete();
-            new File(String.format("%s/server_pack/download_minecraft-server.jar_forge.bat", modpackDir)).delete();
-            new File(String.format("%s/server_pack/download_minecraft-server.jar_forge.sh", modpackDir)).delete();
-            String delete = String.format("%s/server_pack/libraries", modpackDir);
-            if (new File(delete).isDirectory()) {
-                Path pathToBeDeleted = Paths.get(delete);
-                Files.walk(pathToBeDeleted).sorted(Comparator.reverseOrder()).map(Path::toFile).forEach(File::delete);
-            }
-        //}
+        String modLoader = "Forge";
+        String modpackDir = "./src/test/resources/forge_tests";
+        String minecraftVersion = "1.16.5";
+        String modLoaderVersion = "36.1.2";
+        String javaPath;
+        String autoJavaPath = System.getProperty("java.home").replace("\\", "/") + "/bin/java";
+        if (autoJavaPath.startsWith("C:")) {
+            autoJavaPath = String.format("%s.exe", autoJavaPath);
+        }
+        if (new File("/usr/bin/java").exists()) {
+            javaPath = "/usr/bin/java";
+        } else {
+            javaPath = autoJavaPath;
+        }
+        createServerPack.downloadForgeJar(minecraftVersion, modLoaderVersion, modpackDir);
+        createServerPack.installServer(modLoader, modpackDir, minecraftVersion, modLoaderVersion, javaPath);
+        Assertions.assertTrue(new File(String.format("%s/server_pack/1.16.5.json", modpackDir)).exists());
+        Assertions.assertTrue(new File(String.format("%s/server_pack/forge.jar", modpackDir)).exists());
+        Assertions.assertTrue(new File(String.format("%s/server_pack/minecraft_server.1.16.5.jar", modpackDir)).exists());
+        Assertions.assertTrue(new File(String.format("%s/server_pack/download_minecraft-server.jar_forge.bat", modpackDir)).exists());
+        Assertions.assertTrue(new File(String.format("%s/server_pack/download_minecraft-server.jar_forge.sh", modpackDir)).exists());
+        new File(String.format("%s/server_pack/1.16.5.json", modpackDir)).delete();
+        new File(String.format("%s/server_pack/forge.jar", modpackDir)).delete();
+        new File(String.format("%s/server_pack/forge-installer.jar", modpackDir)).delete();
+        new File(String.format("%s/server_pack/forge-installer.jar.log", modpackDir)).delete();
+        new File(String.format("%s/server_pack/minecraft_server.1.16.5.jar", modpackDir)).delete();
+        new File(String.format("%s/server_pack/download_minecraft-server.jar_forge.bat", modpackDir)).delete();
+        new File(String.format("%s/server_pack/download_minecraft-server.jar_forge.sh", modpackDir)).delete();
+        String delete = String.format("%s/server_pack/libraries", modpackDir);
+        if (new File(delete).isDirectory()) {
+            Path pathToBeDeleted = Paths.get(delete);
+            Files.walk(pathToBeDeleted).sorted(Comparator.reverseOrder()).map(Path::toFile).forEach(File::delete);
+        }
     }
 
     @Test
     void zipBuilderFabricTest() throws IOException {
-        //TODO: Figure out how to run this test on GitHub Runners
         Files.createDirectories(Paths.get("./src/test/resources/fabric_tests/server_pack"));
-        //if (!new File("/home/runner").isDirectory()) {
-            Files.copy(Paths.get("./src/test/resources/testresources/server_pack.zip"), Paths.get("./src/test/resources/fabric_tests/server_pack.zip"), REPLACE_EXISTING);
-            String minecraftVersion = "1.16.5";
-            String modLoader = "Fabric";
-            String modpackDir = "src/test/resources/fabric_tests";
-            createServerPack.zipBuilder(modpackDir, modLoader, Boolean.TRUE, minecraftVersion);
-        //}
+        //Files.copy(Paths.get("./src/test/resources/testresources/server_pack.zip"), Paths.get("./src/test/resources/fabric_tests/server_pack.zip"), REPLACE_EXISTING);
+        String minecraftVersion = "1.16.5";
+        String modLoader = "Fabric";
+        String modpackDir = "src/test/resources/fabric_tests";
+        createServerPack.zipBuilder(modpackDir, modLoader, Boolean.FALSE, minecraftVersion);
+        Assertions.assertTrue(new File("src/test/resources/fabric_tests/server_pack.zip").exists());
     }
 
     @Test
     void zipBuilderForgeTest() throws IOException {
-        //TODO: Figure out how to run this test on GitHub Runners
         Files.createDirectories(Paths.get("./src/test/resources/forge_tests/server_pack"));
-        //if (!new File("/home/runner").isDirectory()) {
-            Files.copy(Paths.get("./src/test/resources/testresources/server_pack.zip"), Paths.get("./src/test/resources/forge_tests/server_pack.zip"), REPLACE_EXISTING);
-            String minecraftVersion = "1.16.5";
-            String modLoader = "Forge";
-            String modpackDir = "./src/test/resources/forge_tests";
-            createServerPack.zipBuilder(modpackDir, modLoader, Boolean.TRUE, minecraftVersion);
-        //}
+        //Files.copy(Paths.get("./src/test/resources/testresources/server_pack.zip"), Paths.get("./src/test/resources/forge_tests/server_pack.zip"), REPLACE_EXISTING);
+        String minecraftVersion = "1.16.5";
+        String modLoader = "Forge";
+        String modpackDir = "./src/test/resources/forge_tests";
+        createServerPack.zipBuilder(modpackDir, modLoader, Boolean.FALSE, minecraftVersion);
+        Assertions.assertTrue(new File("./src/test/resources/forge_tests/server_pack.zip").exists());
     }
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
     void generateDownloadScriptsFabricTest() throws IOException {
-        //TODO: Figure out how to run this test on GitHub Runners
         Files.createDirectories(Paths.get("./src/test/resources/fabric_tests/server_pack"));
-        //if (!new File("/home/runner").isDirectory()) {
-            String modLoader = "Fabric";
-            String modpackDir = "./src/test/resources/fabric_tests";
-            String minecraftVersion = "1.16.5";
-            createServerPack.generateDownloadScripts(modLoader, modpackDir, minecraftVersion);
-            Assertions.assertTrue(new File(String.format("%s/server_pack/download_minecraft-server.jar_fabric.bat", modpackDir)).exists());
-            Assertions.assertTrue(new File(String.format("%s/server_pack/download_minecraft-server.jar_fabric.sh", modpackDir)).exists());
-            new File(String.format("%s/server_pack/download_minecraft-server.jar_fabric.bat", modpackDir)).delete();
-            new File(String.format("%s/server_pack/download_minecraft-server.jar_fabric.sh", modpackDir)).delete();
-        //}
+        String modLoader = "Fabric";
+        String modpackDir = "./src/test/resources/fabric_tests";
+        String minecraftVersion = "1.16.5";
+        createServerPack.generateDownloadScripts(modLoader, modpackDir, minecraftVersion);
+        Assertions.assertTrue(new File(String.format("%s/server_pack/download_minecraft-server.jar_fabric.bat", modpackDir)).exists());
+        Assertions.assertTrue(new File(String.format("%s/server_pack/download_minecraft-server.jar_fabric.sh", modpackDir)).exists());
+        new File(String.format("%s/server_pack/download_minecraft-server.jar_fabric.bat", modpackDir)).delete();
+        new File(String.format("%s/server_pack/download_minecraft-server.jar_fabric.sh", modpackDir)).delete();
     }
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
     void generateDownloadScriptsForgeTest() throws IOException {
-        //TODO: Figure out how to run this test on GitHub Runners
         Files.createDirectories(Paths.get("./src/test/resources/forge_tests/server_pack"));
-        //if (!new File("/home/runner").isDirectory()) {
-            String modLoader = "Forge";
-            String modpackDir = "./src/test/resources/forge_tests";
-            String minecraftVersion = "1.16.5";
-            createServerPack.generateDownloadScripts(modLoader, modpackDir, minecraftVersion);
-            Assertions.assertTrue(new File(String.format("%s/server_pack/download_minecraft-server.jar_forge.bat", modpackDir)).exists());
-            Assertions.assertTrue(new File(String.format("%s/server_pack/download_minecraft-server.jar_forge.sh", modpackDir)).exists());
-            new File(String.format("%s/server_pack/download_minecraft-server.jar_forge.bat", modpackDir)).delete();
-            new File(String.format("%s/server_pack/download_minecraft-server.jar_forge.sh", modpackDir)).delete();
-        //}
+        String modLoader = "Forge";
+        String modpackDir = "./src/test/resources/forge_tests";
+        String minecraftVersion = "1.16.5";
+        createServerPack.generateDownloadScripts(modLoader, modpackDir, minecraftVersion);
+        Assertions.assertTrue(new File(String.format("%s/server_pack/download_minecraft-server.jar_forge.bat", modpackDir)).exists());
+        Assertions.assertTrue(new File(String.format("%s/server_pack/download_minecraft-server.jar_forge.sh", modpackDir)).exists());
+        new File(String.format("%s/server_pack/download_minecraft-server.jar_forge.bat", modpackDir)).delete();
+        new File(String.format("%s/server_pack/download_minecraft-server.jar_forge.sh", modpackDir)).delete();
     }
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
@@ -583,13 +566,13 @@ class CreateServerPackTest {
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
     void downloadFabricJarTest() throws IOException {
-            String modpackDir = "./src/test/resources/fabric_tests";
-            Files.createDirectories(Paths.get("./src/test/resources/fabric_tests/server_pack"));
-            boolean result = createServerPack.downloadFabricJar(modpackDir);
-            Assertions.assertTrue(result);
-            Assertions.assertTrue(new File(String.format("%s/server_pack/fabric-installer.jar", modpackDir)).exists());
-            new File(String.format("%s/server_pack/fabric-installer.jar", modpackDir)).delete();
-            new File(String.format("%s/server_pack/fabric-installer.xml", modpackDir)).delete();
+        String modpackDir = "./src/test/resources/fabric_tests";
+        Files.createDirectories(Paths.get("./src/test/resources/fabric_tests/server_pack"));
+        boolean result = createServerPack.downloadFabricJar(modpackDir);
+        Assertions.assertTrue(result);
+        Assertions.assertTrue(new File(String.format("%s/server_pack/fabric-installer.jar", modpackDir)).exists());
+        new File(String.format("%s/server_pack/fabric-installer.jar", modpackDir)).delete();
+        new File(String.format("%s/server_pack/fabric-installer.xml", modpackDir)).delete();
     }
 
     @Test
@@ -602,14 +585,14 @@ class CreateServerPackTest {
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
     void downloadForgeJarTest() throws IOException {
-            String modLoaderVersion = "36.1.2";
-            String modpackDir = "./src/test/resources/forge_tests";
-            Files.createDirectories(Paths.get("./src/test/resources/forge_tests/server_pack"));
-            String minecraftVersion = "1.16.5";
-            boolean result = createServerPack.downloadForgeJar(minecraftVersion, modLoaderVersion, modpackDir);
-            Assertions.assertTrue(result);
-            Assertions.assertTrue(new File(String.format("%s/server_pack/forge-installer.jar", modpackDir)).exists());
-            new File(String.format("%s/server_pack/forge-installer.jar", modpackDir)).delete();
+        String modLoaderVersion = "36.1.2";
+        String modpackDir = "./src/test/resources/forge_tests";
+        Files.createDirectories(Paths.get("./src/test/resources/forge_tests/server_pack"));
+        String minecraftVersion = "1.16.5";
+        boolean result = createServerPack.downloadForgeJar(minecraftVersion, modLoaderVersion, modpackDir);
+        Assertions.assertTrue(result);
+        Assertions.assertTrue(new File(String.format("%s/server_pack/forge-installer.jar", modpackDir)).exists());
+        new File(String.format("%s/server_pack/forge-installer.jar", modpackDir)).delete();
     }
 
     @Test
@@ -637,12 +620,14 @@ class CreateServerPackTest {
         String minecraftVersion = "1.16.5";
         String modLoaderVersion = "36.1.2";
         createServerPack.cleanUpServerPack(
-                new File(String.format("%s/server_pack/fabric-installer.jar", modpackDir)),
+                new File(String.format("%s/server_pack/forge-installer.jar", modpackDir)),
                 new File(String.format("%s/server_pack/forge-%s-%s.jar", modpackDir, minecraftVersion, modLoaderVersion)),
                 modLoader,
                 modpackDir,
                 minecraftVersion,
                 modLoaderVersion);
+        Assertions.assertFalse(new File("./src/test/resources/forge_tests/forge-1.16.5-36.1.2.jar").exists());
+        Assertions.assertFalse(new File("./src/test/resources/forge_tests/forge-installer.jar").exists());
     }
 
     @Test
@@ -658,5 +643,7 @@ class CreateServerPackTest {
                 modpackDir,
                 minecraftVersion,
                 modLoaderVersion);
+        Assertions.assertFalse(new File("./src/test/resources/forge_tests/fabric-installer.xml").exists());
+        Assertions.assertFalse(new File("./src/test/resources/forge_tests/fabric-installer.jar").exists());
     }
 }
-- 
GitLab


From cb288ca3b1504e15fdb32d3b472569c31207e18b Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Thu, 6 May 2021 09:27:56 +0200
Subject: [PATCH 72/91] refactor(DI): Some more whitespace

---
 .../de/griefed/serverpackcreator/CreateServerPack.java   | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java b/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
index d9d8f70f0..2cdd3a472 100644
--- a/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
+++ b/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
@@ -954,8 +954,10 @@ public class CreateServerPack {
         appLogger.info(localizationManager.getLocalizedString("serverutilities.log.info.cleanupserverpack.enter"));
         if (modLoader.equalsIgnoreCase("Fabric")) {
             File fabricXML = new File(String.format("%s/server_pack/fabric-installer.xml", modpackDir));
+
             boolean isXmlDeleted = fabricXML.delete();
             boolean isInstallerDeleted = fabricInstaller.delete();
+
             if (isXmlDeleted)
             { appLogger.info(String.format(localizationManager.getLocalizedString("serverutilities.log.info.cleanupserverpack.deleted"), fabricXML.getName())); }
             else
@@ -972,8 +974,13 @@ public class CreateServerPack {
                         Paths.get(String.format("%s/server_pack/forge-%s-%s.jar", modpackDir, minecraftVersion, modLoaderVersion)),
                         Paths.get(String.format("%s/server_pack/forge.jar", modpackDir)),
                         REPLACE_EXISTING);
+
                 boolean isOldJarDeleted = (new File(
-                        String.format("%s/server_pack/forge-%s-%s.jar", modpackDir, minecraftVersion, modLoaderVersion))).delete();
+                        String.format("%s/server_pack/forge-%s-%s.jar",
+                                modpackDir,
+                                minecraftVersion,
+                                modLoaderVersion))).delete();
+
                 boolean isInstallerDeleted = forgeInstaller.delete();
 
                 if ((isOldJarDeleted) && (new File(String.format("%s/server_pack/forge.jar", modpackDir)).exists()))
-- 
GitLab


From 7e96512296ecedc6d97bf98825904b63b18a799f Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Thu, 6 May 2021 15:09:13 +0200
Subject: [PATCH 73/91] refactor(DI): More tests and some other improvements
 here and there

---
 .../serverpackcreator/CreateServerPack.java   |  22 ++
 .../CreateServerPackTest.java                 |   4 +-
 .../CurseCreateModpackTest.java               | 235 +++++++++++++++++-
 .../resources/curseforge_tests/modpack.zip    | Bin 0 -> 62601 bytes
 .../overrides/config/testfile.txt             |   0
 .../overrides/defaultconfigs/testfile.txt     |   0
 .../overridestest/overrides/mods/aaaaa.jar    |   0
 .../overridestest/overrides/mods/bbbbb.jar    |   0
 .../overridestest/overrides/mods/ccccc.jar    |   0
 .../overridestest/overrides/mods/fffff.jar    |   0
 .../overridestest/overrides/mods/ggggg.jar    |   0
 .../overridestest/overrides/mods/hhhhh.jar    |   0
 .../overridestest/overrides/mods/iiiii.jar    |   0
 .../overridestest/overrides/mods/jjjjj.jar    |   0
 .../overridestest/overrides/mods/kkkkk.jar    |   0
 .../overridestest/overrides/mods/lllll.jar    |   0
 .../overridestest/overrides/mods/nnnnn.jar    |   0
 .../overridestest/overrides/mods/ppppp.jar    |   0
 .../overridestest/overrides/mods/qqqqq.jar    |   0
 .../overridestest/overrides/mods/rrrrr.jar    |   0
 .../overridestest/overrides/mods/testmod.jar  |   0
 .../overridestest/overrides/mods/uuuuu.jar    |   0
 .../overridestest/overrides/mods/vvvvv.jar    |   0
 .../overridestest/overrides/mods/wwwww.jar    |   0
 .../overridestest/overrides/mods/xxxxx.jar    |   0
 .../overridestest/overrides/mods/yyyyy.jar    |   0
 .../overridestest/overrides/mods/zzzzz.jar    |   0
 .../overrides/scripts/testscript.zs           |   0
 .../overridestest/overrides/seeds/seed,json   |  43 ++++
 .../overrides/seeds/testjson.json             |  43 ++++
 .../resources/testresources/manifest.json     |  44 ++++
 31 files changed, 376 insertions(+), 15 deletions(-)
 create mode 100644 src/test/resources/curseforge_tests/modpack.zip
 create mode 100644 src/test/resources/overridestest/overrides/config/testfile.txt
 create mode 100644 src/test/resources/overridestest/overrides/defaultconfigs/testfile.txt
 create mode 100644 src/test/resources/overridestest/overrides/mods/aaaaa.jar
 create mode 100644 src/test/resources/overridestest/overrides/mods/bbbbb.jar
 create mode 100644 src/test/resources/overridestest/overrides/mods/ccccc.jar
 create mode 100644 src/test/resources/overridestest/overrides/mods/fffff.jar
 create mode 100644 src/test/resources/overridestest/overrides/mods/ggggg.jar
 create mode 100644 src/test/resources/overridestest/overrides/mods/hhhhh.jar
 create mode 100644 src/test/resources/overridestest/overrides/mods/iiiii.jar
 create mode 100644 src/test/resources/overridestest/overrides/mods/jjjjj.jar
 create mode 100644 src/test/resources/overridestest/overrides/mods/kkkkk.jar
 create mode 100644 src/test/resources/overridestest/overrides/mods/lllll.jar
 create mode 100644 src/test/resources/overridestest/overrides/mods/nnnnn.jar
 create mode 100644 src/test/resources/overridestest/overrides/mods/ppppp.jar
 create mode 100644 src/test/resources/overridestest/overrides/mods/qqqqq.jar
 create mode 100644 src/test/resources/overridestest/overrides/mods/rrrrr.jar
 create mode 100644 src/test/resources/overridestest/overrides/mods/testmod.jar
 create mode 100644 src/test/resources/overridestest/overrides/mods/uuuuu.jar
 create mode 100644 src/test/resources/overridestest/overrides/mods/vvvvv.jar
 create mode 100644 src/test/resources/overridestest/overrides/mods/wwwww.jar
 create mode 100644 src/test/resources/overridestest/overrides/mods/xxxxx.jar
 create mode 100644 src/test/resources/overridestest/overrides/mods/yyyyy.jar
 create mode 100644 src/test/resources/overridestest/overrides/mods/zzzzz.jar
 create mode 100644 src/test/resources/overridestest/overrides/scripts/testscript.zs
 create mode 100644 src/test/resources/overridestest/overrides/seeds/seed,json
 create mode 100644 src/test/resources/overridestest/overrides/seeds/testjson.json
 create mode 100644 src/test/resources/testresources/manifest.json

diff --git a/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java b/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
index 2cdd3a472..4f850ea34 100644
--- a/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
+++ b/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
@@ -354,19 +354,27 @@ public class CreateServerPack {
      */
     void copyFiles(String modpackDir, List<String> copyDirs, List<String> clientMods) {
         String serverPath = String.format("%s/server_pack", modpackDir);
+
         try {
             Files.createDirectories(Paths.get(serverPath));
         } catch (IOException ex) {
             appLogger.error(String.format(localizationManager.getLocalizedString("createmodpack.log.error.unziparchive.createdir"), serverPath));
         }
+
         for (int i = 0; i < copyDirs.size(); i++) {
+
             String clientDir = String.format("%s/%s", modpackDir,copyDirs.get(i));
             String serverDir = String.format("%s/%s", serverPath,copyDirs.get(i));
+
             appLogger.info(String.format(localizationManager.getLocalizedString("copyfiles.log.info.copyfiles.setup"), serverDir));
+
             if (copyDirs.get(i).startsWith("saves/")) {
+
                 String savesDir = String.format("%s/%s", serverPath, copyDirs.get(i).substring(6));
                 try {
+
                     Stream<Path> files = Files.walk(Paths.get(clientDir));
+
                     files.forEach(file -> {
                         try {
 
@@ -384,16 +392,22 @@ public class CreateServerPack {
                             }
                         }
                     });
+
                 } catch (IOException ex) {
                     appLogger.error(localizationManager.getLocalizedString("copyfiles.log.error.copyfiles.saves.world"), ex);
                 }
+
+
             } else if (copyDirs.get(i).startsWith("mods") && clientMods.size() > 0) {
+
                 List<String> listOfFiles = excludeClientMods(clientDir, clientMods);
+
                 try {
                     Files.createDirectories(Paths.get(serverDir));
                 } catch (IOException ex) {
                     appLogger.info(String.format(localizationManager.getLocalizedString("copyfiles.log.info.copyfiles.setup"), serverDir));
                 }
+
                 for (int in = 0; in < listOfFiles.size(); in++) {
                     try {
 
@@ -411,9 +425,13 @@ public class CreateServerPack {
                         }
                     }
                 }
+
+
             } else {
                 try {
+
                     Stream<Path> files = Files.walk(Paths.get(clientDir));
+
                     files.forEach(file -> {
                         try {
 
@@ -430,11 +448,15 @@ public class CreateServerPack {
                             }
                         }
                     });
+
                     files.close();
+
                 } catch (IOException ex) {
                     appLogger.error(localizationManager.getLocalizedString("copyfiles.log.error.copyfiles"), ex);
                 }
             }
+
+
         }
     }
 
diff --git a/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java b/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
index d5ab4b469..4a4637532 100644
--- a/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
+++ b/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
@@ -468,23 +468,23 @@ class CreateServerPackTest {
     @Test
     void zipBuilderFabricTest() throws IOException {
         Files.createDirectories(Paths.get("./src/test/resources/fabric_tests/server_pack"));
-        //Files.copy(Paths.get("./src/test/resources/testresources/server_pack.zip"), Paths.get("./src/test/resources/fabric_tests/server_pack.zip"), REPLACE_EXISTING);
         String minecraftVersion = "1.16.5";
         String modLoader = "Fabric";
         String modpackDir = "src/test/resources/fabric_tests";
         createServerPack.zipBuilder(modpackDir, modLoader, Boolean.FALSE, minecraftVersion);
         Assertions.assertTrue(new File("src/test/resources/fabric_tests/server_pack.zip").exists());
+        Files.copy(Paths.get("./src/test/resources/testresources/server_pack.zip"), Paths.get("./src/test/resources/fabric_tests/server_pack.zip"), REPLACE_EXISTING);
     }
 
     @Test
     void zipBuilderForgeTest() throws IOException {
         Files.createDirectories(Paths.get("./src/test/resources/forge_tests/server_pack"));
-        //Files.copy(Paths.get("./src/test/resources/testresources/server_pack.zip"), Paths.get("./src/test/resources/forge_tests/server_pack.zip"), REPLACE_EXISTING);
         String minecraftVersion = "1.16.5";
         String modLoader = "Forge";
         String modpackDir = "./src/test/resources/forge_tests";
         createServerPack.zipBuilder(modpackDir, modLoader, Boolean.FALSE, minecraftVersion);
         Assertions.assertTrue(new File("./src/test/resources/forge_tests/server_pack.zip").exists());
+        Files.copy(Paths.get("./src/test/resources/testresources/server_pack.zip"), Paths.get("./src/test/resources/forge_tests/server_pack.zip"), REPLACE_EXISTING);
     }
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
diff --git a/src/test/java/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpackTest.java b/src/test/java/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpackTest.java
index fb8f9450c..6479056c6 100644
--- a/src/test/java/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpackTest.java
+++ b/src/test/java/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpackTest.java
@@ -17,7 +17,6 @@
  *
  * The full license can be found at https:github.com/Griefed/ServerPackCreator/blob/main/LICENSE
  */
-
 package de.griefed.serverpackcreator.curseforgemodpack;
 
 import com.therandomlabs.curseapi.CurseAPI;
@@ -32,13 +31,29 @@ import org.mockito.MockitoAnnotations;
 
 import java.io.File;
 import java.io.IOException;
-
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.Comparator;
 import java.util.Objects;
+import java.util.stream.Stream;
+
+import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
 
+/**
+ * <strong>Table of methods</strong><br>
+ * {@link #CurseCreateModpackTest()}<br>
+ * {@link #getsetProjectNameTest}<br>
+ * {@link #getsetFileNameAndDiskNameTest}<br>
+ * {@link #setModloaderCaseTest()}<br>
+ * {@link #curseForgeModpackTest()}<br>
+ * {@link #initializeModpackTest()}<br>
+ * {@link #downloadModsTest()}<br>
+ * {@link #copyOverrideTest()}<br>
+ * {@link #checkCurseForgeDirTest()}<br>
+ * {@link #unzipArchiveTest()}<br>
+ * {@link #cleanupEnvironmentTest()}<p>
+ */
 class CurseCreateModpackTest {
     @Mock
     Logger appLogger;
@@ -57,12 +72,37 @@ class CurseCreateModpackTest {
         MockitoAnnotations.openMocks(this);
     }
 
+    @Test
+    void getsetProjectNameTest() {
+        curseCreateModpack.setProjectName(238298);
+        Assertions.assertEquals("Vanilla Forge", curseCreateModpack.getProjectName());
+        curseCreateModpack.setProjectName(999999);
+        Assertions.assertEquals("999999", curseCreateModpack.getProjectName());
+    }
+
+    @Test
+    void getsetFileNameAndDiskNameTest() {
+        curseCreateModpack.setFileNameAndDiskName(238298,3174854);
+        Assertions.assertEquals("Vanilla Forge 1.16.5", curseCreateModpack.getFileName());
+        Assertions.assertEquals("Vanilla Forge 1.16.5-1.0.zip", curseCreateModpack.getFileDiskName());
+        curseCreateModpack.setFileNameAndDiskName(999999,9999999);
+        Assertions.assertEquals("9999999", curseCreateModpack.getFileName());
+        Assertions.assertEquals("9999999", curseCreateModpack.getFileDiskName());
+    }
+
+    @Test
+    void setModloaderCaseTest() {
+        String forge = "fOrGe";
+        String fabric = "fAbRiC";
+        Assertions.assertEquals("Forge", curseCreateModpack.setModloaderCase(forge));
+        Assertions.assertEquals("Fabric", curseCreateModpack.setModloaderCase(fabric));
+    }
 
     @SuppressWarnings({"OptionalGetWithoutIsPresent", "ResultOfMethodCallIgnored"})
     @Test
-    void testCurseForgeModpack() throws CurseException, IOException {
+    void curseForgeModpackTest() throws CurseException, IOException {
         //TODO: Figure out how to run this test on GitHub Runners
-        if (!new File("/home/runner").isDirectory()) {
+        //if (!new File("/home/runner").isDirectory()) {
             int projectID = 238298;
             int fileID = 3174854;
             String projectName = CurseAPI.project(projectID).get().name();
@@ -72,8 +112,7 @@ class CurseCreateModpackTest {
                     .fileWithID(fileID))
                     .displayName();
             String modpackDir = String.format("./src/test/resources/forge_tests/%s/%s", projectName, displayName);
-            boolean result = curseCreateModpack.curseForgeModpack(modpackDir, projectID, fileID);
-            Assertions.assertTrue(result);
+            Assertions.assertTrue(curseCreateModpack.curseForgeModpack(modpackDir, projectID, fileID));
             String deleteFile = String.format("./src/test/resources/forge_tests/%s/%s", projectName, displayName);
             if (new File(deleteFile).isDirectory()) {
                 Path pathToBeDeleted = Paths.get(deleteFile);
@@ -90,18 +129,188 @@ class CurseCreateModpackTest {
                         .map(Path::toFile)
                         .forEach(File::delete);
             }
-        }
+        //}
+    }
+
+    @SuppressWarnings("OptionalGetWithoutIsPresent")
+    @Test
+    void initializeModpackTest() throws CurseException {
+        int projectID = 238298;
+        int fileID = 3174854;
+        String projectName = CurseAPI.project(projectID).get().name();
+        String displayName = Objects.requireNonNull(CurseAPI.project(projectID)
+                .get()
+                .files()
+                .fileWithID(fileID))
+                .displayName();
+        String modpackDir = String.format("./src/test/resources/forge_tests/%s/%s", projectName, displayName);
+        curseCreateModpack.initializeModpack(modpackDir, projectID, fileID);
+        Assertions.assertTrue(new File(String.format("./src/test/resources/forge_tests/%s", projectName)).isDirectory());
+        Assertions.assertTrue(new File(String.format("./src/test/resources/forge_tests/%s/%s", projectName, displayName)).isDirectory());
     }
 
+    @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void testSetModloaderFabric() {
-        String result = curseCreateModpack.setModloaderCase("fAbRiC");
-        Assertions.assertEquals("Fabric", result);
+    void downloadModsTest() throws IOException {
+        String modpackDir = "./src/test/resources/forge_tests";
+        Files.copy(Paths.get("./src/test/resources/testresources/manifest.json"), Paths.get("./src/test/resources/forge_tests/manifest.json"), REPLACE_EXISTING);
+        curseCreateModpack.downloadMods(modpackDir);
+        Assertions.assertTrue(new File("./src/test/resources/forge_tests/mods/BetterTitleScreen-1.16.4-1.10.2.jar").exists());
+        Assertions.assertTrue(new File("./src/test/resources/forge_tests/mods/jei-professions-1.0.0-1.16.4.jar").exists());
+        Assertions.assertTrue(new File("./src/test/resources/forge_tests/mods/ftb-backups-2.1.1.6.jar").exists());
+        Assertions.assertTrue(new File("./src/test/resources/forge_tests/mods/ftb-gui-library-1604.2.0.29-forge.jar").exists());
+        Assertions.assertTrue(new File("./src/test/resources/forge_tests/mods/JEIEnchantmentInfo-1.16.4-1.2.1.jar").exists());
+        new File("./src/test/resources/forge_tests/mods/BetterTitleScreen-1.16.4-1.10.2.jar").delete();
+        new File("./src/test/resources/forge_tests/mods/jei-professions-1.0.0-1.16.4.jar").delete();
+        new File("./src/test/resources/forge_tests/mods/ftb-backups-2.1.1.6.jar").delete();
+        new File("./src/test/resources/forge_tests/mods/ftb-gui-library-1604.2.0.29-forge.jar").delete();
+        new File("./src/test/resources/forge_tests/mods/JEIEnchantmentInfo-1.16.4-1.2.1.jar").delete();
+        new File("./src/test/resources/forge_tests/manifest.json").delete();
     }
 
+    @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void testSetModloaderForge() {
-        String result = curseCreateModpack.setModloaderCase("fOrGe");
-        Assertions.assertEquals("Forge", result);
+    void copyOverrideTest() throws IOException {
+        String modpackDir = "./src/test/resources/overridestest";
+        curseCreateModpack.copyOverride(modpackDir);
+        Assertions.assertTrue(new File("./src/test/resources/overridestest/config").isDirectory());
+        Assertions.assertTrue(new File("./src/test/resources/overridestest/defaultconfigs").isDirectory());
+        Assertions.assertTrue(new File("./src/test/resources/overridestest/mods").isDirectory());
+        Assertions.assertTrue(new File("./src/test/resources/overridestest/scripts").isDirectory());
+        Assertions.assertTrue(new File("./src/test/resources/overridestest/seeds").isDirectory());
+
+        Assertions.assertTrue(new File("./src/test/resources/overridestest/config/testfile.txt").exists());
+        Assertions.assertTrue(new File("./src/test/resources/overridestest/defaultconfigs/testfile.txt").exists());
+        Assertions.assertTrue(new File("./src/test/resources/overridestest/mods/aaaaa.jar").exists());
+        Assertions.assertTrue(new File("./src/test/resources/overridestest/mods/bbbbb.jar").exists());
+        Assertions.assertTrue(new File("./src/test/resources/overridestest/mods/ccccc.jar").exists());
+        Assertions.assertTrue(new File("./src/test/resources/overridestest/mods/fffff.jar").exists());
+        Assertions.assertTrue(new File("./src/test/resources/overridestest/mods/ggggg.jar").exists());
+        Assertions.assertTrue(new File("./src/test/resources/overridestest/mods/hhhhh.jar").exists());
+        Assertions.assertTrue(new File("./src/test/resources/overridestest/mods/iiiii.jar").exists());
+        Assertions.assertTrue(new File("./src/test/resources/overridestest/mods/jjjjj.jar").exists());
+        Assertions.assertTrue(new File("./src/test/resources/overridestest/mods/kkkkk.jar").exists());
+        Assertions.assertTrue(new File("./src/test/resources/overridestest/mods/lllll.jar").exists());
+        Assertions.assertTrue(new File("./src/test/resources/overridestest/mods/nnnnn.jar").exists());
+        Assertions.assertTrue(new File("./src/test/resources/overridestest/mods/ppppp.jar").exists());
+        Assertions.assertTrue(new File("./src/test/resources/overridestest/mods/qqqqq.jar").exists());
+        Assertions.assertTrue(new File("./src/test/resources/overridestest/mods/rrrrr.jar").exists());
+        Assertions.assertTrue(new File("./src/test/resources/overridestest/mods/testmod.jar").exists());
+        Assertions.assertTrue(new File("./src/test/resources/overridestest/mods/uuuuu.jar").exists());
+        Assertions.assertTrue(new File("./src/test/resources/overridestest/mods/vvvvv.jar").exists());
+        Assertions.assertTrue(new File("./src/test/resources/overridestest/mods/wwwww.jar").exists());
+        Assertions.assertTrue(new File("./src/test/resources/overridestest/mods/xxxxx.jar").exists());
+        Assertions.assertTrue(new File("./src/test/resources/overridestest/mods/yyyyy.jar").exists());
+        Assertions.assertTrue(new File("./src/test/resources/overridestest/mods/zzzzz.jar").exists());
+
+        Assertions.assertTrue(new File("./src/test/resources/overridestest/scripts/testscript.zs").exists());
+        Assertions.assertTrue(new File("./src/test/resources/overridestest/seeds/seed.json").exists());
+        Assertions.assertTrue(new File("./src/test/resources/overridestest/seeds/testjson.json").exists());
+
+        if (new File("./src/test/resources/overridestest/config").isDirectory()) {
+            Path pathToBeDeleted = Paths.get("./src/test/resources/overridestest/config");
+            Files.walk(pathToBeDeleted).sorted(Comparator.reverseOrder()).map(Path::toFile).forEach(File::delete);}
+
+        if (new File("./src/test/resources/overridestest/defaultconfigs").isDirectory()) {
+            Path pathToBeDeleted = Paths.get("./src/test/resources/overridestest/defaultconfigs");
+            Files.walk(pathToBeDeleted).sorted(Comparator.reverseOrder()).map(Path::toFile).forEach(File::delete);}
+
+        if (new File("./src/test/resources/overridestest/mods").isDirectory()) {
+            Path pathToBeDeleted = Paths.get("./src/test/resources/overridestest/mods");
+            Files.walk(pathToBeDeleted).sorted(Comparator.reverseOrder()).map(Path::toFile).forEach(File::delete);}
+
+        if (new File("./src/test/resources/overridestest/scripts").isDirectory()) {
+            Path pathToBeDeleted = Paths.get("./src/test/resources/overridestest/scripts");
+            Files.walk(pathToBeDeleted).sorted(Comparator.reverseOrder()).map(Path::toFile).forEach(File::delete);}
+
+        if (new File("./src/test/resources/overridestest/seeds").isDirectory()) {
+            Path pathToBeDeleted = Paths.get("./src/test/resources/overridestest/seeds");
+            Files.walk(pathToBeDeleted).sorted(Comparator.reverseOrder()).map(Path::toFile).forEach(File::delete);}
+
+        new File("./src/test/resources/overridestest/config/testfile.txt").delete();
+        new File("./src/test/resources/overridestest/defaultconfigs/testfile.txt").delete();
+        new File("./src/test/resources/overridestest/mods/aaaaa.jar").delete();
+        new File("./src/test/resources/overridestest/mods/bbbbb.jar").delete();
+        new File("./src/test/resources/overridestest/mods/ccccc.jar").delete();
+        new File("./src/test/resources/overridestest/mods/fffff.jar").delete();
+        new File("./src/test/resources/overridestest/mods/ggggg.jar").delete();
+        new File("./src/test/resources/overridestest/mods/hhhhh.jar").delete();
+        new File("./src/test/resources/overridestest/mods/iiiii.jar").delete();
+        new File("./src/test/resources/overridestest/mods/jjjjj.jar").delete();
+        new File("./src/test/resources/overridestest/mods/kkkkk.jar").delete();
+        new File("./src/test/resources/overridestest/mods/lllll.jar").delete();
+        new File("./src/test/resources/overridestest/mods/nnnnn.jar").delete();
+        new File("./src/test/resources/overridestest/mods/ppppp.jar").delete();
+        new File("./src/test/resources/overridestest/mods/qqqqq.jar").delete();
+        new File("./src/test/resources/overridestest/mods/rrrrr.jar").delete();
+        new File("./src/test/resources/overridestest/mods/testmod.jar").delete();
+        new File("./src/test/resources/overridestest/mods/uuuuu.jar").delete();
+        new File("./src/test/resources/overridestest/mods/vvvvv.jar").delete();
+        new File("./src/test/resources/overridestest/mods/wwwww.jar").delete();
+        new File("./src/test/resources/overridestest/mods/xxxxx.jar").delete();
+        new File("./src/test/resources/overridestest/mods/yyyyy.jar").delete();
+        new File("./src/test/resources/overridestest/mods/zzzzz.jar").delete();
+
+        new File("./src/test/resources/overridestest/scripts/testscript.zs").delete();
+        new File("./src/test/resources/overridestest/seeds/seed.json").delete();
+        new File("./src/test/resources/overridestest/seeds/testjson.json").delete();
+    }
+
+    @Test
+    void checkCurseForgeDirTest() {
+        String modpackdir = "./src/test/resources/forge_tests/overrides";
+        Assertions.assertFalse(curseCreateModpack.checkCurseForgeDir(modpackdir));
+    }
+
+    @Test
+    void unzipArchiveTest() throws IOException {
+        String modpackDir = "src/test/resources/curseforge_tests";
+        String zipFile = "src/test/resources/curseforge_tests/modpack.zip";
+        curseCreateModpack.unzipArchive(zipFile, modpackDir);
+        Assertions.assertTrue(new File("./src/test/resources/curseforge_tests/manifest.json").exists());
+        Assertions.assertTrue(new File("./src/test/resources/curseforge_tests/modlist.html").exists());
+        Assertions.assertTrue(new File("./src/test/resources/curseforge_tests/overrides").isDirectory());
+        new File("./src/test/resources/curseforge_tests/manifest.json").delete();
+        new File("./src/test/resources/curseforge_tests/modlist.html").delete();
+        if (new File("./src/test/resources/curseforge_tests/overrides").isDirectory()) {
+            Path pathToBeDeleted = Paths.get("./src/test/resources/curseforge_tests/overrides");
+            Files.walk(pathToBeDeleted).sorted(Comparator.reverseOrder()).map(Path::toFile).forEach(File::delete);}
+    }
+
+    @Test
+    void cleanupEnvironmentTest() throws IOException {
+        String clientDir = "./src/test/resources/forge_tests";
+        String serverDir = "./src/test/resources/cleanup_tests/modpack";
+
+        Files.createDirectories(Paths.get(serverDir));
+
+        try {
+            Stream<Path> files = Files.walk(Paths.get(clientDir));
+            files.forEach(file -> {
+                try {
+
+                    Files.copy(
+                            file,
+                            Paths.get(serverDir).resolve(Paths.get(clientDir).relativize(file)),
+                            REPLACE_EXISTING
+                    );
+
+                    appLogger.debug(String.format(localizationManager.getLocalizedString("copyfiles.log.debug.copyfiles"), file.toAbsolutePath().toString()));
+                } catch (IOException ex) {
+                    if (!ex.toString().startsWith("java.nio.file.DirectoryNotEmptyException")) {
+                        appLogger.error(localizationManager.getLocalizedString("copyfiles.log.error.copyfiles.mods"), ex);
+                    }
+                }
+            });
+
+            files.close();
+
+        } catch (IOException ex) {
+            appLogger.error(localizationManager.getLocalizedString("copyfiles.log.error.copyfiles"), ex);
+        }
+
+        curseCreateModpack.cleanupEnvironment(serverDir);
+
+        Assertions.assertFalse(new File("./src/test/resources/cleanup_tests/modpack").isDirectory());
     }
 }
diff --git a/src/test/resources/curseforge_tests/modpack.zip b/src/test/resources/curseforge_tests/modpack.zip
new file mode 100644
index 0000000000000000000000000000000000000000..edea067d015a126db7f693ef8a009a9739a7d68d
GIT binary patch
literal 62601
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

literal 0
HcmV?d00001

diff --git a/src/test/resources/overridestest/overrides/config/testfile.txt b/src/test/resources/overridestest/overrides/config/testfile.txt
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/test/resources/overridestest/overrides/defaultconfigs/testfile.txt b/src/test/resources/overridestest/overrides/defaultconfigs/testfile.txt
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/test/resources/overridestest/overrides/mods/aaaaa.jar b/src/test/resources/overridestest/overrides/mods/aaaaa.jar
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/test/resources/overridestest/overrides/mods/bbbbb.jar b/src/test/resources/overridestest/overrides/mods/bbbbb.jar
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/test/resources/overridestest/overrides/mods/ccccc.jar b/src/test/resources/overridestest/overrides/mods/ccccc.jar
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/test/resources/overridestest/overrides/mods/fffff.jar b/src/test/resources/overridestest/overrides/mods/fffff.jar
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/test/resources/overridestest/overrides/mods/ggggg.jar b/src/test/resources/overridestest/overrides/mods/ggggg.jar
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/test/resources/overridestest/overrides/mods/hhhhh.jar b/src/test/resources/overridestest/overrides/mods/hhhhh.jar
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/test/resources/overridestest/overrides/mods/iiiii.jar b/src/test/resources/overridestest/overrides/mods/iiiii.jar
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/test/resources/overridestest/overrides/mods/jjjjj.jar b/src/test/resources/overridestest/overrides/mods/jjjjj.jar
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/test/resources/overridestest/overrides/mods/kkkkk.jar b/src/test/resources/overridestest/overrides/mods/kkkkk.jar
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/test/resources/overridestest/overrides/mods/lllll.jar b/src/test/resources/overridestest/overrides/mods/lllll.jar
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/test/resources/overridestest/overrides/mods/nnnnn.jar b/src/test/resources/overridestest/overrides/mods/nnnnn.jar
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/test/resources/overridestest/overrides/mods/ppppp.jar b/src/test/resources/overridestest/overrides/mods/ppppp.jar
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/test/resources/overridestest/overrides/mods/qqqqq.jar b/src/test/resources/overridestest/overrides/mods/qqqqq.jar
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/test/resources/overridestest/overrides/mods/rrrrr.jar b/src/test/resources/overridestest/overrides/mods/rrrrr.jar
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/test/resources/overridestest/overrides/mods/testmod.jar b/src/test/resources/overridestest/overrides/mods/testmod.jar
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/test/resources/overridestest/overrides/mods/uuuuu.jar b/src/test/resources/overridestest/overrides/mods/uuuuu.jar
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/test/resources/overridestest/overrides/mods/vvvvv.jar b/src/test/resources/overridestest/overrides/mods/vvvvv.jar
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/test/resources/overridestest/overrides/mods/wwwww.jar b/src/test/resources/overridestest/overrides/mods/wwwww.jar
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/test/resources/overridestest/overrides/mods/xxxxx.jar b/src/test/resources/overridestest/overrides/mods/xxxxx.jar
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/test/resources/overridestest/overrides/mods/yyyyy.jar b/src/test/resources/overridestest/overrides/mods/yyyyy.jar
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/test/resources/overridestest/overrides/mods/zzzzz.jar b/src/test/resources/overridestest/overrides/mods/zzzzz.jar
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/test/resources/overridestest/overrides/scripts/testscript.zs b/src/test/resources/overridestest/overrides/scripts/testscript.zs
new file mode 100644
index 000000000..e69de29bb
diff --git a/src/test/resources/overridestest/overrides/seeds/seed,json b/src/test/resources/overridestest/overrides/seeds/seed,json
new file mode 100644
index 000000000..8d630d4df
--- /dev/null
+++ b/src/test/resources/overridestest/overrides/seeds/seed,json
@@ -0,0 +1,43 @@
+{
+  "bonus_chest": false,
+  "dimensions": {
+    "minecraft:overworld": {
+      "type": "minecraft:overworld",
+      "generator": {
+        "biome_source": {
+          "seed": -8634566777844830259,
+          "type": "minecraft:biomesoplenty_overworld"
+        },
+        "seed": -8634566777844830259,
+        "settings": "minecraft:overworld",
+        "type": "minecraft:noise"
+      }
+    },
+    "minecraft:the_nether": {
+      "type": "minecraft:the_nether",
+      "generator": {
+        "biome_source": {
+          "seed": -8634566777844830259,
+          "type": "byg:bygnether"
+        },
+        "seed": -8634566777844830259,
+        "settings": "minecraft:nether",
+        "type": "minecraft:noise"
+      }
+    },
+    "minecraft:the_end": {
+      "type": "minecraft:the_end",
+      "generator": {
+        "biome_source": {
+          "seed": -8634566777844830259,
+          "type": "byg:bygend"
+        },
+        "seed": -8634566777844830259,
+        "settings": "minecraft:end",
+        "type": "minecraft:noise"
+      }
+    }
+  },
+  "seed": -8634566777844830259,
+  "generate_features": true
+}
\ No newline at end of file
diff --git a/src/test/resources/overridestest/overrides/seeds/testjson.json b/src/test/resources/overridestest/overrides/seeds/testjson.json
new file mode 100644
index 000000000..8d630d4df
--- /dev/null
+++ b/src/test/resources/overridestest/overrides/seeds/testjson.json
@@ -0,0 +1,43 @@
+{
+  "bonus_chest": false,
+  "dimensions": {
+    "minecraft:overworld": {
+      "type": "minecraft:overworld",
+      "generator": {
+        "biome_source": {
+          "seed": -8634566777844830259,
+          "type": "minecraft:biomesoplenty_overworld"
+        },
+        "seed": -8634566777844830259,
+        "settings": "minecraft:overworld",
+        "type": "minecraft:noise"
+      }
+    },
+    "minecraft:the_nether": {
+      "type": "minecraft:the_nether",
+      "generator": {
+        "biome_source": {
+          "seed": -8634566777844830259,
+          "type": "byg:bygnether"
+        },
+        "seed": -8634566777844830259,
+        "settings": "minecraft:nether",
+        "type": "minecraft:noise"
+      }
+    },
+    "minecraft:the_end": {
+      "type": "minecraft:the_end",
+      "generator": {
+        "biome_source": {
+          "seed": -8634566777844830259,
+          "type": "byg:bygend"
+        },
+        "seed": -8634566777844830259,
+        "settings": "minecraft:end",
+        "type": "minecraft:noise"
+      }
+    }
+  },
+  "seed": -8634566777844830259,
+  "generate_features": true
+}
\ No newline at end of file
diff --git a/src/test/resources/testresources/manifest.json b/src/test/resources/testresources/manifest.json
new file mode 100644
index 000000000..612482ef0
--- /dev/null
+++ b/src/test/resources/testresources/manifest.json
@@ -0,0 +1,44 @@
+{
+  "minecraft": {
+    "version": "1.16.5",
+    "modLoaders": [
+      {
+        "id": "forge-36.0.1",
+        "primary": true
+      }
+    ]
+  },
+  "manifestType": "minecraftModpack",
+  "manifestVersion": 1,
+  "name": "Vanilla Forge 1.16.5",
+  "version": "1.0",
+  "author": "",
+  "files": [
+    {
+      "projectID": 224223,
+      "fileID": 3111817,
+      "required": true
+    },
+    {
+      "projectID": 403499,
+      "fileID": 3163628,
+      "required": true
+    },
+    {
+      "projectID": 314904,
+      "fileID": 3038811,
+      "required": true
+    },
+    {
+      "projectID": 404465,
+      "fileID": 3173207,
+      "required": true
+    },
+    {
+      "projectID": 392748,
+      "fileID": 3151372,
+      "required": true
+    }
+  ],
+  "overrides": "overrides"
+}
\ No newline at end of file
-- 
GitLab


From 166aff201d7bd8077ec27320cf1f718ef2b7b399 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Thu, 6 May 2021 15:09:32 +0200
Subject: [PATCH 74/91] refactor(DI): Getters and setters for project related
 things

---
 .../curseforgemodpack/CurseCreateModpack.java | 124 ++++++++++++++----
 1 file changed, 98 insertions(+), 26 deletions(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.java b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.java
index 1a8303bcc..a7089dcd2 100644
--- a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.java
+++ b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.java
@@ -23,7 +23,6 @@ import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.therandomlabs.curseapi.CurseAPI;
 import com.therandomlabs.curseapi.CurseException;
-import com.therandomlabs.curseapi.project.CurseProject;
 import de.griefed.serverpackcreator.i18n.LocalizationManager;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
@@ -93,6 +92,85 @@ public class CurseCreateModpack {
         }
     }
 
+    /**
+     * Getter for the CurseForge project name.
+     * @return String. Returns the name of the CurseForge project name.
+     */
+    String getProjectName() {
+        return projectName;
+    }
+
+    /**
+     * Setter for the name of the CurseForge project name.
+     * @param newProjectID The ID of the new CurseForge project.
+     */
+    void setProjectName(int newProjectID) {
+        String newProjectName = null;
+        try {
+            if (CurseAPI.project(newProjectID).isPresent()) {
+                newProjectName = CurseAPI.project(newProjectID).get().name();
+            } else {
+                newProjectName = String.valueOf(newProjectID);
+            }
+        } catch (CurseException cex) {
+            appLogger.error(cex);
+            newProjectName = String.valueOf(newProjectID);
+        }
+        this.projectName = newProjectName;
+    }
+
+    /**
+     * Getter for the CurseForge file name.
+     * @return String. Returns the file name of the CurseForge project.
+     */
+    String getFileName() {
+        return fileName;
+    }
+
+    /**
+     * Setter for the CurseForge file name and file disk name.
+     * @param newProjectID The ID of the CurseForge project.
+     * @param newFileID The ID of the CurseForge file.
+     */
+    @SuppressWarnings("ConstantConditions")
+    void setFileNameAndDiskName(int newProjectID, int newFileID) {
+        String newFileName = null;
+        String newFileDiskName = null;
+
+        try {
+            if (CurseAPI.project(newProjectID).isPresent()) {
+                try {
+                    newFileName = CurseAPI.project(newProjectID).get().files().fileWithID(newFileID).displayName();
+                }
+                catch (NullPointerException npe) {
+                    newFileName = CurseAPI.project(newProjectID).get().files().fileWithID(newFileID).nameOnDisk();
+                }
+
+                newFileDiskName = CurseAPI.project(newProjectID).get().files().fileWithID(newFileID).nameOnDisk();
+
+            } else {
+                newFileName = String.valueOf(newFileID);
+                newFileDiskName = String.valueOf(newFileID);
+            }
+
+        } catch (CurseException cex) {
+            appLogger.error(cex);
+            newFileName = String.valueOf(newFileID);
+            newFileDiskName = String.valueOf(newFileID);
+        }
+
+        this.fileDiskName = newFileDiskName;
+        this.fileName = newFileName;
+    }
+
+    /**
+     * Getter for the CurseForge file disk name.
+     * @return String. Returns the file disk name of the CurseForge file.
+     */
+    String getFileDiskName() {
+        return fileDiskName;
+    }
+
     /**
      * Ensures the modloader is normalized to first letter upper case and rest lower case. Basically allows the user to
      * input Forge or Fabric in any combination of upper- and lowercase and ServerPackCreator will still be able to
@@ -125,31 +203,25 @@ public class CurseCreateModpack {
      *              the modpack.
      * @return Boolean. Returns true if the modpack was successfully created.
      */
-    @SuppressWarnings({"OptionalGetWithoutIsPresent", "ConstantConditions"})
     public boolean curseForgeModpack(String modpackDir, Integer projectID, Integer fileID) {
         boolean modpackCreated = false;
 
         try {
             if (CurseAPI.project(projectID).isPresent()) {
-                Optional<CurseProject> curseProject = CurseAPI.project(projectID);
-
-                this.projectName = curseProject.get().name();
-                try { this.fileName = curseProject.get().files().fileWithID(fileID).displayName(); }
-                catch (NullPointerException npe) { this.fileName = curseProject.get().files().fileWithID(fileID).nameOnDisk(); }
-                this.fileDiskName = curseProject.get().files().fileWithID(fileID).nameOnDisk();
-
-            } else {
-                this.projectName = projectID.toString();
-                this.fileName = fileID.toString();
-                this.fileDiskName = fileID.toString();
+                setProjectName(projectID);
+                setFileNameAndDiskName(projectID, fileID);
             }
-
         } catch (CurseException cex) { appLogger.error(String.format(localizationManager.getLocalizedString("createmodpack.log.error.curseforgemodpack"), projectID, fileID), cex); }
 
-        if (!checkCurseForgeDir(modpackDir)) {
+        if (!checkCurseForgeDir(modpackDir) &&
+                !getProjectName().equals(String.valueOf(projectID)) &&
+                !getFileDiskName().equals(String.valueOf(fileID))) {
+
+
             initializeModpack(modpackDir, projectID, fileID);
             modpackCreated = true;
         }
+
         return modpackCreated;
     }
 
@@ -167,17 +239,17 @@ public class CurseCreateModpack {
      * @param fileID Integer. The ID of the file. Used to gather information and to download the modpack.
      */
     @SuppressWarnings("ResultOfMethodCallIgnored")
-    private void initializeModpack(String modpackDir, Integer projectID, Integer fileID) {
+    void initializeModpack(String modpackDir, Integer projectID, Integer fileID) {
         try {
-            appLogger.info(String.format(localizationManager.getLocalizedString("createmodpack.log.info.initializemodpack.download"), projectName, fileName));
+            appLogger.info(String.format(localizationManager.getLocalizedString("createmodpack.log.info.initializemodpack.download"), getProjectName(), getFileName()));
 
             CurseAPI.downloadFileToDirectory(projectID, fileID, Paths.get(modpackDir));
         } catch (CurseException cex) {
-            appLogger.error(String.format(localizationManager.getLocalizedString("createmodpack.log.error.initializemodpack.download"), fileName, projectName, modpackDir));
+            appLogger.error(String.format(localizationManager.getLocalizedString("createmodpack.log.error.initializemodpack.download"), getFileName(), getProjectName(), modpackDir));
         }
 
-        unzipArchive(String.format("%s/%s", modpackDir, fileDiskName), modpackDir);
-        boolean isFileDeleted = new File(String.format("%s/%s", modpackDir, fileDiskName)).delete();
+        unzipArchive(String.format("%s/%s", modpackDir, getFileDiskName()), modpackDir);
+        boolean isFileDeleted = new File(String.format("%s/%s", modpackDir, getFileDiskName())).delete();
         if (isFileDeleted) { appLogger.info(localizationManager.getLocalizedString("createmodpack.log.info.initializemodpack.deletezip")); }
 
         try {
@@ -224,7 +296,7 @@ public class CurseCreateModpack {
      * @param modpackDir String. All mods are downloaded to the child-directory "mods" inside the modpack directory.
      */
     @SuppressWarnings({"OptionalGetWithoutIsPresent", "BusyWait"})
-    private void downloadMods(String modpackDir) {
+    void downloadMods(String modpackDir) {
         appLogger.info(localizationManager.getLocalizedString("createmodpack.log.info.downloadmods.info"));
         List<String> failedDownloads = new ArrayList<>();
 
@@ -309,10 +381,10 @@ public class CurseCreateModpack {
      * @param modpackDir String. The overrides directory resides in this directory. All folders and files within overrides
      *                  are copied to the parent directory, the modpack directory.
      */
-    private void copyOverride(String modpackDir) {
+    void copyOverride(String modpackDir) {
         appLogger.info(localizationManager.getLocalizedString("createmodpack.log.info.copyoverrides.info"));
         try {
-            Stream<Path> files = java.nio.file.Files.walk(Paths.get(String.format("%s/overrides", modpackDir)));
+            Stream<Path> files = Files.walk(Paths.get(String.format("%s/overrides", modpackDir)));
             files.forEach(file -> {
                 try {
                     Files.copy(file, Paths.get(modpackDir).resolve(Paths.get(String.format("%s/overrides", modpackDir)).relativize(file)), REPLACE_EXISTING);
@@ -338,7 +410,7 @@ public class CurseCreateModpack {
      * procedure finished successfully and we have a clean environment, false is returned. Returns false if the modpack
      * directory could not be found, indicating a clean environment.
      */
-    private boolean checkCurseForgeDir(String modpackDir) {
+    boolean checkCurseForgeDir(String modpackDir) {
         boolean isModpackPresent = false;
         if (!(new File(modpackDir).isDirectory()) && !(new File(String.format("%s/manifest.json", modpackDir)).exists())) {
             appLogger.info(localizationManager.getLocalizedString("createmodpack.log.info.checkcurseforgedir.create"));
@@ -356,7 +428,7 @@ public class CurseCreateModpack {
      * @param zipFile String. The path to the ZIP-archive which we want to unzip.
      * @param modpackDir The directory into which the ZIP-archive will be unzipped into.
      */
-    private void unzipArchive(String zipFile, String modpackDir) {
+    void unzipArchive(String zipFile, String modpackDir) {
         appLogger.info(localizationManager.getLocalizedString("createmodpack.log.info.unziparchive"));
         File destDir = new File(modpackDir);
         byte[] buffer = new byte[1024];
@@ -428,7 +500,7 @@ public class CurseCreateModpack {
      * @param modpackDir String. The directory we want to delete.
      * @return Boolean. Returns false if every file and folder was, recursively and successfully, deleted.
      */
-    private boolean cleanupEnvironment(String modpackDir) {
+    boolean cleanupEnvironment(String modpackDir) {
         boolean cleanedUp = false;
         if (new File(modpackDir).exists()) {
             appLogger.info(localizationManager.getLocalizedString("createmodpack.log.info.cleanupenvironment.enter"));
-- 
GitLab


From ca1215a0bb35ecd24b8aac4b4ec62db7d56c6547 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Fri, 7 May 2021 08:05:46 +0200
Subject: [PATCH 75/91] refactor(DI): Try and fix tests which fail on GitHub

---
 .../CurseCreateModpackTest.java               | 57 +++++++++----------
 .../overridestest/overrides/seeds/seed,json   | 43 --------------
 2 files changed, 27 insertions(+), 73 deletions(-)
 delete mode 100644 src/test/resources/overridestest/overrides/seeds/seed,json

diff --git a/src/test/java/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpackTest.java b/src/test/java/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpackTest.java
index 6479056c6..7b08f12b7 100644
--- a/src/test/java/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpackTest.java
+++ b/src/test/java/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpackTest.java
@@ -101,35 +101,32 @@ class CurseCreateModpackTest {
     @SuppressWarnings({"OptionalGetWithoutIsPresent", "ResultOfMethodCallIgnored"})
     @Test
     void curseForgeModpackTest() throws CurseException, IOException {
-        //TODO: Figure out how to run this test on GitHub Runners
-        //if (!new File("/home/runner").isDirectory()) {
-            int projectID = 238298;
-            int fileID = 3174854;
-            String projectName = CurseAPI.project(projectID).get().name();
-            String displayName = Objects.requireNonNull(CurseAPI.project(projectID)
-                    .get()
-                    .files()
-                    .fileWithID(fileID))
-                    .displayName();
-            String modpackDir = String.format("./src/test/resources/forge_tests/%s/%s", projectName, displayName);
-            Assertions.assertTrue(curseCreateModpack.curseForgeModpack(modpackDir, projectID, fileID));
-            String deleteFile = String.format("./src/test/resources/forge_tests/%s/%s", projectName, displayName);
-            if (new File(deleteFile).isDirectory()) {
-                Path pathToBeDeleted = Paths.get(deleteFile);
-                Files.walk(pathToBeDeleted)
-                        .sorted(Comparator.reverseOrder())
-                        .map(Path::toFile)
-                        .forEach(File::delete);
-            }
-            String deleteProject = String.format("./src/test/resources/forge_tests/%s", projectName);
-            if (new File(deleteProject).isDirectory()) {
-                Path pathToBeDeleted = Paths.get(deleteProject);
-                Files.walk(pathToBeDeleted)
-                        .sorted(Comparator.reverseOrder())
-                        .map(Path::toFile)
-                        .forEach(File::delete);
-            }
-        //}
+        int projectID = 238298;
+        int fileID = 3174854;
+        String projectName = CurseAPI.project(projectID).get().name();
+        String displayName = Objects.requireNonNull(CurseAPI.project(projectID)
+                .get()
+                .files()
+                .fileWithID(fileID))
+                .displayName();
+        String modpackDir = String.format("./src/test/resources/forge_tests/%s/%s", projectName, displayName);
+        Assertions.assertTrue(curseCreateModpack.curseForgeModpack(modpackDir, projectID, fileID));
+        String deleteFile = String.format("./src/test/resources/forge_tests/%s/%s", projectName, displayName);
+        if (new File(deleteFile).isDirectory()) {
+            Path pathToBeDeleted = Paths.get(deleteFile);
+            Files.walk(pathToBeDeleted)
+                    .sorted(Comparator.reverseOrder())
+                    .map(Path::toFile)
+                    .forEach(File::delete);
+        }
+        String deleteProject = String.format("./src/test/resources/forge_tests/%s", projectName);
+        if (new File(deleteProject).isDirectory()) {
+            Path pathToBeDeleted = Paths.get(deleteProject);
+            Files.walk(pathToBeDeleted)
+                    .sorted(Comparator.reverseOrder())
+                    .map(Path::toFile)
+                    .forEach(File::delete);
+        }
     }
 
     @SuppressWarnings("OptionalGetWithoutIsPresent")
@@ -204,7 +201,7 @@ class CurseCreateModpackTest {
         Assertions.assertTrue(new File("./src/test/resources/overridestest/mods/zzzzz.jar").exists());
 
         Assertions.assertTrue(new File("./src/test/resources/overridestest/scripts/testscript.zs").exists());
-        Assertions.assertTrue(new File("./src/test/resources/overridestest/seeds/seed.json").exists());
+        Assertions.assertTrue(new File("./src/test/resources/overridestest/seeds/seed1.json").exists());
         Assertions.assertTrue(new File("./src/test/resources/overridestest/seeds/testjson.json").exists());
 
         if (new File("./src/test/resources/overridestest/config").isDirectory()) {
diff --git a/src/test/resources/overridestest/overrides/seeds/seed,json b/src/test/resources/overridestest/overrides/seeds/seed,json
deleted file mode 100644
index 8d630d4df..000000000
--- a/src/test/resources/overridestest/overrides/seeds/seed,json
+++ /dev/null
@@ -1,43 +0,0 @@
-{
-  "bonus_chest": false,
-  "dimensions": {
-    "minecraft:overworld": {
-      "type": "minecraft:overworld",
-      "generator": {
-        "biome_source": {
-          "seed": -8634566777844830259,
-          "type": "minecraft:biomesoplenty_overworld"
-        },
-        "seed": -8634566777844830259,
-        "settings": "minecraft:overworld",
-        "type": "minecraft:noise"
-      }
-    },
-    "minecraft:the_nether": {
-      "type": "minecraft:the_nether",
-      "generator": {
-        "biome_source": {
-          "seed": -8634566777844830259,
-          "type": "byg:bygnether"
-        },
-        "seed": -8634566777844830259,
-        "settings": "minecraft:nether",
-        "type": "minecraft:noise"
-      }
-    },
-    "minecraft:the_end": {
-      "type": "minecraft:the_end",
-      "generator": {
-        "biome_source": {
-          "seed": -8634566777844830259,
-          "type": "byg:bygend"
-        },
-        "seed": -8634566777844830259,
-        "settings": "minecraft:end",
-        "type": "minecraft:noise"
-      }
-    }
-  },
-  "seed": -8634566777844830259,
-  "generate_features": true
-}
\ No newline at end of file
-- 
GitLab


From d9c7a561f6748ccdc76227b899ed7871eaf83672 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Fri, 7 May 2021 08:14:12 +0200
Subject: [PATCH 76/91] refactor(DI): Try and fix tests which fail on GitHub

---
 .../serverpackcreator/ConfigurationTest.java  | 36 +++++++++----------
 .../CreateServerPackTest.java                 | 16 ++++-----
 2 files changed, 26 insertions(+), 26 deletions(-)

diff --git a/src/test/java/de/griefed/serverpackcreator/ConfigurationTest.java b/src/test/java/de/griefed/serverpackcreator/ConfigurationTest.java
index ca42ba612..c561833e7 100644
--- a/src/test/java/de/griefed/serverpackcreator/ConfigurationTest.java
+++ b/src/test/java/de/griefed/serverpackcreator/ConfigurationTest.java
@@ -76,13 +76,13 @@ class ConfigurationTest {
 
     @Test
     void testBuildString() {
-        List<String> args = Arrays.asList(
+        List<String> args = new ArrayList<>(Arrays.asList(
                 "config",
                 "mods",
                 "scripts",
                 "seeds",
                 "defaultconfigs"
-        );
+        ));
         String result = configuration.buildString(args.toString());
         Assertions.assertEquals(args.toString(), String.format("[%s]",result));
     }
@@ -115,7 +115,7 @@ class ConfigurationTest {
     @Test
     void testPrintConfig() {
         String modpackDir = "src/test/resources/forge_tests";
-        List<String> clientMods = Arrays.asList(
+        List<String> clientMods = new ArrayList<>(Arrays.asList(
                 "AmbientSounds",
                 "BackTools",
                 "BetterAdvancement",
@@ -139,14 +139,14 @@ class ConfigurationTest {
                 "SpawnerFix",
                 "TipTheScales",
                 "WorldNameRandomizer"
-        );
-        List<String> copyDirs = Arrays.asList(
+        ));
+        List<String> copyDirs = new ArrayList<>(Arrays.asList(
                 "config",
                 "mods",
                 "scripts",
                 "seeds",
                 "defaultconfigs"
-        );
+        ));
         boolean includeServerInstallation = true;
         String javaPath = "/usr/bin/java";
         String minecraftVersion = "1.16.5";
@@ -187,13 +187,13 @@ class ConfigurationTest {
     @Test
     void testCheckCopyDirsCorrect() {
         String modpackDir = "./src/test/resources/forge_tests";
-        List<String> copyDirs = Arrays.asList(
+        List<String> copyDirs = new ArrayList<>(Arrays.asList(
                 "config",
                 "mods",
                 "scripts",
                 "seeds",
                 "defaultconfigs"
-        );
+        ));
         boolean result = configuration.checkCopyDirs(copyDirs, modpackDir);
         Assertions.assertTrue(result);
     }
@@ -201,13 +201,13 @@ class ConfigurationTest {
     @Test
     void testCheckCopyDirsFalse() {
         String modpackDir = "./src/test/resources/forge_tests";
-        List<String> copyDirs = Arrays.asList(
+        List<String> copyDirs = new ArrayList<>(Arrays.asList(
                 "configs",
                 "modss",
                 "scriptss",
                 "seedss",
                 "defaultconfigss"
-        );
+        ));
         boolean result = configuration.checkCopyDirs(copyDirs, modpackDir);
         Assertions.assertFalse(result);
     }
@@ -370,7 +370,7 @@ class ConfigurationTest {
     @Test
     void writeConfigToFileTestFabric() {
         String modpackDir = "./src/test/resources/fabric_tests";
-        List<String> clientMods = Arrays.asList(
+        List<String> clientMods = new ArrayList<>(Arrays.asList(
                 "AmbientSounds",
                 "BackTools",
                 "BetterAdvancement",
@@ -394,14 +394,14 @@ class ConfigurationTest {
                 "SpawnerFix",
                 "TipTheScales",
                 "WorldNameRandomizer"
-        );
-        List<String> copyDirs = Arrays.asList(
+        ));
+        List<String> copyDirs = new ArrayList<>(Arrays.asList(
                 "config",
                 "mods",
                 "scripts",
                 "seeds",
                 "defaultconfigs"
-        );
+        ));
         String javaPath;
         String autoJavaPath = System.getProperty("java.home").replace("\\", "/") + "/bin/java";
         if (autoJavaPath.startsWith("C:")) {
@@ -440,7 +440,7 @@ class ConfigurationTest {
     @Test
     void testWriteConfigToFileForge() {
         String modpackDir = "./src/test/resources/forge_tests";
-        List<String> clientMods = Arrays.asList(
+        List<String> clientMods = new ArrayList<>(Arrays.asList(
                 "AmbientSounds",
                 "BackTools",
                 "BetterAdvancement",
@@ -464,14 +464,14 @@ class ConfigurationTest {
                 "SpawnerFix",
                 "TipTheScales",
                 "WorldNameRandomizer"
-        );
-        List<String> copyDirs = Arrays.asList(
+        ));
+        List<String> copyDirs = new ArrayList<>(Arrays.asList(
                 "config",
                 "mods",
                 "scripts",
                 "seeds",
                 "defaultconfigs"
-        );
+        ));
         String javaPath = "/use/bin/java";
         String minecraftVersion = "1.16.5";
         String modLoader = "Forge";
diff --git a/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java b/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
index 4a4637532..409b8cc3b 100644
--- a/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
+++ b/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
@@ -253,7 +253,7 @@ class CreateServerPackTest {
     @Test
     void copyFilesTest() throws IOException {
         String modpackDir = "./src/test/resources/forge_tests";
-        List<String> clientMods = Arrays.asList(
+        List<String> clientMods = new ArrayList<>(Arrays.asList(
                 "AmbientSounds",
                 "BackTools",
                 "BetterAdvancement",
@@ -277,14 +277,14 @@ class CreateServerPackTest {
                 "SpawnerFix",
                 "TipTheScales",
                 "WorldNameRandomizer"
-        );
-        List<String> copyDirs = Arrays.asList(
+        ));
+        List<String> copyDirs = new ArrayList<>(Arrays.asList(
                 "config",
                 "mods",
                 "scripts",
                 "seeds",
                 "defaultconfigs"
-        );
+        ));
         createServerPack.copyFiles(modpackDir, copyDirs, clientMods);
         Assertions.assertTrue(new File(String.format("%s/server_pack/config",modpackDir)).isDirectory());
         Assertions.assertTrue(new File(String.format("%s/server_pack/mods",modpackDir)).isDirectory());
@@ -313,13 +313,13 @@ class CreateServerPackTest {
     void copyFilesEmptyClientsTest() throws IOException {
         String modpackDir = "./src/test/resources/forge_tests";
         List<String> clientMods = new ArrayList<>();
-        List<String> copyDirs = Arrays.asList(
+        List<String> copyDirs = new ArrayList<>(Arrays.asList(
                 "config",
                 "mods",
                 "scripts",
                 "seeds",
                 "defaultconfigs"
-        );
+        ));
         createServerPack.copyFiles(modpackDir, copyDirs, clientMods);
         Assertions.assertTrue(new File(String.format("%s/server_pack/config",modpackDir)).isDirectory());
         Assertions.assertTrue(new File(String.format("%s/server_pack/mods",modpackDir)).isDirectory());
@@ -345,10 +345,10 @@ class CreateServerPackTest {
 
     @Test
     void excludeClientModsTest() {
-        List<String> clientMods = Arrays.asList(
+        List<String> clientMods = new ArrayList<>(Arrays.asList(
                 "aaaaa","bbbbb","ccccc","fffff","ggggg","hhhhh","iiiii","jjjjj","kkkkk","lllll",
                 "nnnnn","ppppp","qqqqq","rrrrr","uuuuu","vvvvv","wwwww","xxxxx","yyyyy","zzzzz"
-        );
+        ));
         List<String> result = createServerPack.excludeClientMods("./src/test/resources/forge_tests/mods", clientMods);
         Assertions.assertFalse(result.contains("aaaaa")); Assertions.assertFalse(result.contains("bbbbb"));
         Assertions.assertFalse(result.contains("ccccc")); Assertions.assertFalse(result.contains("fffff"));
-- 
GitLab


From 4aad6f8ff7c80e51f04e91bcd11affe35a7eeca9 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Fri, 7 May 2021 08:14:26 +0200
Subject: [PATCH 77/91] refactor(DI): Try and fix tests which fail on GitHub

---
 .../overridestest/overrides/seeds/seed1.json  | 43 +++++++++++++++++++
 1 file changed, 43 insertions(+)
 create mode 100644 src/test/resources/overridestest/overrides/seeds/seed1.json

diff --git a/src/test/resources/overridestest/overrides/seeds/seed1.json b/src/test/resources/overridestest/overrides/seeds/seed1.json
new file mode 100644
index 000000000..8d630d4df
--- /dev/null
+++ b/src/test/resources/overridestest/overrides/seeds/seed1.json
@@ -0,0 +1,43 @@
+{
+  "bonus_chest": false,
+  "dimensions": {
+    "minecraft:overworld": {
+      "type": "minecraft:overworld",
+      "generator": {
+        "biome_source": {
+          "seed": -8634566777844830259,
+          "type": "minecraft:biomesoplenty_overworld"
+        },
+        "seed": -8634566777844830259,
+        "settings": "minecraft:overworld",
+        "type": "minecraft:noise"
+      }
+    },
+    "minecraft:the_nether": {
+      "type": "minecraft:the_nether",
+      "generator": {
+        "biome_source": {
+          "seed": -8634566777844830259,
+          "type": "byg:bygnether"
+        },
+        "seed": -8634566777844830259,
+        "settings": "minecraft:nether",
+        "type": "minecraft:noise"
+      }
+    },
+    "minecraft:the_end": {
+      "type": "minecraft:the_end",
+      "generator": {
+        "biome_source": {
+          "seed": -8634566777844830259,
+          "type": "byg:bygend"
+        },
+        "seed": -8634566777844830259,
+        "settings": "minecraft:end",
+        "type": "minecraft:noise"
+      }
+    }
+  },
+  "seed": -8634566777844830259,
+  "generate_features": true
+}
\ No newline at end of file
-- 
GitLab


From 1bc7671074e6935fab0f40c65dfb2f5cf7b38a7b Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Fri, 7 May 2021 10:14:09 +0200
Subject: [PATCH 78/91] refactor(DI): Try and fix tests which fail on GitHub

---
 .../serverpackcreator/ConfigurationTest.java  |   2 +-
 .../CreateServerPackTest.java                 |  40 ++++++++++++------
 .../CurseCreateModpackTest.java               |   2 +
 .../resources/testresources/server_pack.zip   | Bin 5418 -> 5418 bytes
 4 files changed, 30 insertions(+), 14 deletions(-)

diff --git a/src/test/java/de/griefed/serverpackcreator/ConfigurationTest.java b/src/test/java/de/griefed/serverpackcreator/ConfigurationTest.java
index c561833e7..055ef2b62 100644
--- a/src/test/java/de/griefed/serverpackcreator/ConfigurationTest.java
+++ b/src/test/java/de/griefed/serverpackcreator/ConfigurationTest.java
@@ -186,7 +186,7 @@ class ConfigurationTest {
 
     @Test
     void testCheckCopyDirsCorrect() {
-        String modpackDir = "./src/test/resources/forge_tests";
+        String modpackDir = "src/test/resources/forge_tests";
         List<String> copyDirs = new ArrayList<>(Arrays.asList(
                 "config",
                 "mods",
diff --git a/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java b/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
index 409b8cc3b..d1e78f46c 100644
--- a/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
+++ b/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
@@ -347,19 +347,32 @@ class CreateServerPackTest {
     void excludeClientModsTest() {
         List<String> clientMods = new ArrayList<>(Arrays.asList(
                 "aaaaa","bbbbb","ccccc","fffff","ggggg","hhhhh","iiiii","jjjjj","kkkkk","lllll",
-                "nnnnn","ppppp","qqqqq","rrrrr","uuuuu","vvvvv","wwwww","xxxxx","yyyyy","zzzzz"
+                "nnnnn","ppppp","qqqqq","rrrrr","uuuuu","vvvvv","wwwww","xxxxx","yyyyy"
         ));
-        List<String> result = createServerPack.excludeClientMods("./src/test/resources/forge_tests/mods", clientMods);
-        Assertions.assertFalse(result.contains("aaaaa")); Assertions.assertFalse(result.contains("bbbbb"));
-        Assertions.assertFalse(result.contains("ccccc")); Assertions.assertFalse(result.contains("fffff"));
-        Assertions.assertFalse(result.contains("ggggg")); Assertions.assertFalse(result.contains("hhhhh"));
-        Assertions.assertFalse(result.contains("iiiii")); Assertions.assertFalse(result.contains("jjjjj"));
-        Assertions.assertFalse(result.contains("kkkkk")); Assertions.assertFalse(result.contains("lllll"));
-        Assertions.assertFalse(result.contains("nnnnn")); Assertions.assertFalse(result.contains("ppppp"));
-        Assertions.assertFalse(result.contains("qqqqq")); Assertions.assertFalse(result.contains("rrrrr"));
-        Assertions.assertFalse(result.contains("uuuuu")); Assertions.assertFalse(result.contains("vvvvv"));
-        Assertions.assertFalse(result.contains("wwwww")); Assertions.assertFalse(result.contains("xxxxx"));
-        Assertions.assertFalse(result.contains("yyyyy")); Assertions.assertFalse(result.contains("zzzzz"));
+        List<String> result = createServerPack.excludeClientMods("src/test/resources/forge_tests/mods", clientMods);
+        System.out.println(result);
+        Assertions.assertFalse(result.toString().contains("aaaaa"));
+        Assertions.assertFalse(result.toString().contains("bbbbb"));
+        Assertions.assertFalse(result.toString().contains("ccccc"));
+        Assertions.assertFalse(result.toString().contains("fffff"));
+        Assertions.assertFalse(result.toString().contains("ggggg"));
+        Assertions.assertFalse(result.toString().contains("hhhhh"));
+        Assertions.assertFalse(result.toString().contains("iiiii"));
+        Assertions.assertFalse(result.toString().contains("jjjjj"));
+        Assertions.assertFalse(result.toString().contains("kkkkk"));
+        Assertions.assertFalse(result.toString().contains("lllll"));
+        Assertions.assertFalse(result.toString().contains("nnnnn"));
+        Assertions.assertFalse(result.toString().contains("ppppp"));
+        Assertions.assertFalse(result.toString().contains("qqqqq"));
+        Assertions.assertFalse(result.toString().contains("rrrrr"));
+        Assertions.assertFalse(result.toString().contains("uuuuu"));
+        Assertions.assertFalse(result.toString().contains("vvvvv"));
+        Assertions.assertFalse(result.toString().contains("wwwww"));
+        Assertions.assertFalse(result.toString().contains("xxxxx"));
+        Assertions.assertFalse(result.toString().contains("yyyyy"));
+        Assertions.assertTrue(result.toString().contains("zzzzz"));
+
+        Assertions.assertTrue(result.toString().contains("testmod"));
     }
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
@@ -614,11 +627,12 @@ class CreateServerPackTest {
     }
 
     @Test
-    void cleanUpServerPackForgeTest() {
+    void cleanUpServerPackForgeTest() throws IOException {
         String modLoader = "Forge";
         String modpackDir = "./src/test/resources/forge_tests";
         String minecraftVersion = "1.16.5";
         String modLoaderVersion = "36.1.2";
+        new File("./src/test/resources/forge_tests/server_pack/forge-1.16.5-36.1.2.jar").createNewFile();
         createServerPack.cleanUpServerPack(
                 new File(String.format("%s/server_pack/forge-installer.jar", modpackDir)),
                 new File(String.format("%s/server_pack/forge-%s-%s.jar", modpackDir, minecraftVersion, modLoaderVersion)),
diff --git a/src/test/java/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpackTest.java b/src/test/java/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpackTest.java
index 7b08f12b7..575e30dde 100644
--- a/src/test/java/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpackTest.java
+++ b/src/test/java/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpackTest.java
@@ -140,6 +140,8 @@ class CurseCreateModpackTest {
                 .files()
                 .fileWithID(fileID))
                 .displayName();
+        curseCreateModpack.setProjectName(238298);
+        curseCreateModpack.setFileNameAndDiskName(238298,3174854);
         String modpackDir = String.format("./src/test/resources/forge_tests/%s/%s", projectName, displayName);
         curseCreateModpack.initializeModpack(modpackDir, projectID, fileID);
         Assertions.assertTrue(new File(String.format("./src/test/resources/forge_tests/%s", projectName)).isDirectory());
diff --git a/src/test/resources/testresources/server_pack.zip b/src/test/resources/testresources/server_pack.zip
index 67e2c55730c7e43cd126257d3e8e4225ca41c77c..b0a87033147c241515000c18100a994959789701 100644
GIT binary patch
delta 19
acmZ3bwMuIN6Jz{lMy3uS#`wuyA`1XMss=0o

delta 19
acmZ3bwMuIN6QkZ{My3uSM!m^hA`1XJX$8sv

-- 
GitLab


From 905a92afc00c70eeb799d3e42ed6ca4cba40bb31 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Fri, 7 May 2021 10:16:42 +0200
Subject: [PATCH 79/91] refactor(DI): Improve excludeClientMods

---
 .../serverpackcreator/CreateServerPack.java   | 95 +++++++++++--------
 1 file changed, 54 insertions(+), 41 deletions(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java b/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
index 4f850ea34..65eb9d2af 100644
--- a/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
+++ b/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
@@ -43,7 +43,6 @@ import java.nio.channels.ReadableByteChannel;
 import java.nio.file.*;
 import java.nio.file.attribute.BasicFileAttributes;
 import java.util.*;
-import java.util.stream.Collectors;
 import java.util.stream.Stream;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipOutputStream;
@@ -259,7 +258,8 @@ public class CreateServerPack {
         }
     }
 
-    /** Deletes all files, directories and ZIP-archives of previously generated server packs to ensure newly generated
+    /**
+     * Deletes all files, directories and ZIP-archives of previously generated server packs to ensure newly generated
      * server pack is as clean as possible.
      * @param modpackDir String. The server_pack directory and ZIP-archive will be deleted inside the modpack directory.
      */
@@ -301,7 +301,8 @@ public class CreateServerPack {
         }
     }
 
-    /** Copies start scripts for the specified modloader into the server pack.
+    /**
+     * Copies start scripts for the specified modloader into the server pack.
      * @param modpackDir String. Start scripts are copied into the server_pack directory in the modpack directory.
      * @param modLoader String. Whether to copy the Forge or Fabric scripts into the server pack.
      * @param includeStartScripts Boolean. Whether to copy the start scripts into the server pack.
@@ -344,8 +345,9 @@ public class CreateServerPack {
         }
     }
 
-    /** Copies all specified directories and mods, excluding clientside-only mods, from the modpack directory into the
-     *  server pack directory.
+    /**
+     * Copies all specified directories and mods, excluding clientside-only mods, from the modpack directory into the
+     * server pack directory.
      * Calls {@link #excludeClientMods(String, List)} to generate a list of all mods to copy to server pack, excluding
      * clientside-only mods.
      * @param modpackDir String. Files and directories are copied into the server_pack directory inside the modpack directory.
@@ -460,43 +462,41 @@ public class CreateServerPack {
         }
     }
 
-    /** Generates a list of all mods to include in the server pack excluding clientside-only mods.
+    /**
+     * Generates a list of all mods to include in the server pack excluding clientside-only mods.
      * @param modsDir String. The mods directory of the modpack of which to generate a list of all it's contents.
      * @param clientMods List String. A list of all clientside-only mods.
      * @return List String. A list of all mods to include in the server pack.
      */
-    @SuppressWarnings("UnusedAssignment")
     List<String> excludeClientMods(String modsDir, List<String> clientMods) {
         appLogger.info(localizationManager.getLocalizedString("copyfiles.log.info.excludeclientmods"));
-        String[] copyMods = new String[0];
-        List<String> modpackModList = new ArrayList<>();
-
-        try (Stream<Path> walk = Files.walk(Paths.get(modsDir))) {
-
-            modpackModList = walk.filter(Files::isRegularFile).map(Path::toString).collect(Collectors.toList());
-
-            for (int in = 0; in < modpackModList.size(); in++) {
-
-                for (int i = 0; i < clientMods.size(); i++) {
 
-                    String modpackMod = modpackModList.get(in);
-                    String clientMod = clientMods.get(i);
+        File[] listModsInModpack = new File(modsDir).listFiles();
+        List<String> modsInModpack = new ArrayList<>();
 
-                    if (modpackMod.contains(clientMod)) {
-                        modpackModList.remove(in);
-                    }
+        try {
+            for (File mod : listModsInModpack) {
+                if (mod.isFile()) {
+                    modsInModpack.add(mod.getAbsolutePath());
                 }
             }
-            copyMods = modpackModList.toArray(new String[0]);
-            return Arrays.asList(copyMods.clone());
+        } catch (NullPointerException np) {
+            appLogger.error(localizationManager.getLocalizedString("copyfiles.log.error.excludeclientmods"), np);
+        }
 
-        } catch (IOException ex) {
-            appLogger.error(localizationManager.getLocalizedString("copyfiles.log.error.excludeclientmods"), ex);
+        for (int inc = 0; inc < modsInModpack.size(); inc++) {
+            for (int inc2 = 0; inc2 < clientMods.size(); inc2++) {
+                if (modsInModpack.get(inc).contains(clientMods.get(inc2))) {
+                    modsInModpack.remove(inc);
+                }
+            }
         }
-        return Arrays.asList(copyMods.clone());
+
+        return modsInModpack;
     }
 
-    /** Copies the server-icon.png into server_pack.
+    /**
+     * Copies the server-icon.png into server_pack.
      * @param modpackDir String. The server-icon.png is copied into the server_pack directory inside the modpack directory.
      */
     void copyIcon(String modpackDir) {
@@ -514,7 +514,8 @@ public class CreateServerPack {
         }
     }
 
-    /** Copies the server.properties into server_pack.
+    /**
+     * Copies the server.properties into server_pack.
      * @param modpackDir String. The server.properties file is copied into the server_pack directory inside the modpack directory.
      */
     void copyProperties(String modpackDir) {
@@ -532,7 +533,8 @@ public class CreateServerPack {
         }
     }
 
-    /** Installs the modloader server for the specified modloader, modloader version and Minecraft version.
+    /**
+     * Installs the modloader server for the specified modloader, modloader version and Minecraft version.
      * Calls<p>
      * {@link #downloadFabricJar(String)} to download the Fabric installer into the server_pack directory.<p>
      * {@link #downloadForgeJar(String, String, String)} to download the Forge installer for the specified Forge version
@@ -630,7 +632,8 @@ public class CreateServerPack {
                 modLoaderVersion);
     }
 
-    /** Creates a ZIP-archive of the server_pack directory and deletes the Minecraft server JAR afterwards.<p>
+    /**
+     * Creates a ZIP-archive of the server_pack directory and deletes the Minecraft server JAR afterwards.<p>
      * With help from <a href="https://stackoverflow.com/questions/1091788/how-to-create-a-zip-file-in-java">Stackoverflow</a><p>
      * Calls<p>
      * {@link #deleteMinecraftJar(String, String, String)} to delete the Minecraft server JAR from the ZIP-archive,
@@ -674,7 +677,8 @@ public class CreateServerPack {
         appLogger.info(localizationManager.getLocalizedString("serversetup.log.info.zipbuilder.finish"));
     }
 
-    /** Depending on the specified modloader and Minecraft version, this method makes calls to generate the corresponding
+    /**
+     * Depending on the specified modloader and Minecraft version, this method makes calls to generate the corresponding
      * download scripts for the Minecraft server JAR.<p>
      * Calls<p>
      * {@link #fabricShell(String, String)} if the modloader is Fabric.
@@ -697,7 +701,8 @@ public class CreateServerPack {
         }
     }
 
-    /** Generates Fabric Linux-shell download scripts for Mojang's Minecraft server JAR for the specified Minecraft version.
+    /**
+     * Generates Fabric Linux-shell download scripts for Mojang's Minecraft server JAR for the specified Minecraft version.
      * @param modpackDir String. The script is generated in the server_pack directory inside the modpack directory.
      * @param minecraftVersion String. The Minecraft version for which to download the server JAR.
      */
@@ -724,7 +729,8 @@ public class CreateServerPack {
         appLogger.info(localizationManager.getLocalizedString("serverutilities.log.info.fabricshell"));
     }
 
-    /** Generates Fabric Windows-Batch download scripts for Mojang's Minecraft server JAR for the specified Minecraft version.
+    /**
+     * Generates Fabric Windows-Batch download scripts for Mojang's Minecraft server JAR for the specified Minecraft version.
      * @param modpackDir String. The script is generated in the server_pack directory inside the modpack directory.
      * @param minecraftVersion String. The Minecraft version for which to download the server JAR.
      */
@@ -751,7 +757,8 @@ public class CreateServerPack {
         appLogger.info(localizationManager.getLocalizedString("serverutilities.log.info.fabricbatch"));
     }
 
-    /** Generates Forge Linux-shell download scripts for Mojang's Minecraft server JAR for the specified Minecraft version.
+    /**
+     * Generates Forge Linux-shell download scripts for Mojang's Minecraft server JAR for the specified Minecraft version.
      * @param modpackDir String. The script is generated in the server_pack directory inside the modpack directory.
      * @param minecraftVersion String. The Minecraft version for which to download the server JAR.
      */
@@ -778,7 +785,8 @@ public class CreateServerPack {
         appLogger.info(localizationManager.getLocalizedString("serverutilities.log.info.forgeshell"));
     }
 
-    /** Generates Forge Windows-Batch download scripts for Mojang's Minecraft server JAR for the specified Minecraft version.
+    /**
+     * Generates Forge Windows-Batch download scripts for Mojang's Minecraft server JAR for the specified Minecraft version.
      * @param modpackDir String. The script is generated in the server_pack directory inside the modpack directory.
      * @param minecraftVersion String. The Minecraft version for which to download the server JAR.
      */
@@ -805,7 +813,8 @@ public class CreateServerPack {
         appLogger.info(localizationManager.getLocalizedString("serverutilities.log.info.forgebatch"));
     }
 
-    /** Downloads the latest Fabric installer into the server pack.<p>
+    /**
+     * Downloads the latest Fabric installer into the server pack.<p>
      * Calls<p>
      * {@link #latestFabricInstaller(String)} to acquire the latest version of the Fabric installer.
      * @param modpackDir String. The Fabric installer is downloaded into the server_pack directory inside the modpack directory.
@@ -844,7 +853,8 @@ public class CreateServerPack {
         return downloaded;
     }
 
-    /** Acquires the latest version of the Fabric modloader installer and returns it as a string. If acquisition of the
+    /**
+     * Acquires the latest version of the Fabric modloader installer and returns it as a string. If acquisition of the
      * latest version fails, version 0.7.2 is returned by default.
      * @param modpackDir String. The fabric-installer.xml-file is saved inside the server_pack directory inside the modpack
      * directory.
@@ -881,7 +891,8 @@ public class CreateServerPack {
         return result;
     }
 
-    /** Downloads the modloader server installer for Forge, for the specified modloader version.
+    /**
+     * Downloads the modloader server installer for Forge, for the specified modloader version.
      * @param minecraftVersion String. The Minecraft version for which to download the modloader server installer.
      * @param modLoaderVersion String. The Forge version for which to download the modloader server installer.
      * @param modpackDir String. The modloader installer is downloaded to the server_pack directory inside the modloader directory.
@@ -917,7 +928,8 @@ public class CreateServerPack {
         return downloaded;
     }
 
-    /** Deletes the Minecraft server JAR from the ZIP-archive as per Mojang's TOS and EULA.
+    /**
+     * Deletes the Minecraft server JAR from the ZIP-archive as per Mojang's TOS and EULA.
      * With help from <a href=https://stackoverflow.com/questions/5244963/delete-files-from-a-zip-archive-without-decompressing-in-java-or-maybe-python>Stackoverflow</a>
      * and <a href=https://bugs.openjdk.java.net/browse/JDK-8186227>OpenJDK Bugtracker</a>.
      * @param modLoader String. The name of the Minecraft server JAR depends on the modloader used.
@@ -964,7 +976,8 @@ public class CreateServerPack {
         }
     }
 
-    /** Cleans up the server_pack directory by deleting left-over files from modloader installations and version checking.
+    /**
+     * Cleans up the server_pack directory by deleting left-over files from modloader installations and version checking.
      * @param fabricInstaller File. The Fabric installer file which is to be deleted.
      * @param forgeInstaller File. The Forge installer file which is to be deleted.
      * @param modLoader String. Whether Forge or Fabric files are to be deleted.
-- 
GitLab


From 4e750f3bb5e8b541623e82e402989d5e3411e0cb Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Fri, 7 May 2021 10:18:05 +0200
Subject: [PATCH 80/91] refactor(DI): More logging to help with debugging

---
 .github/workflows/test.yml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 0ea4247f1..3274f59e0 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -29,7 +29,7 @@ jobs:
       - name: Grant execute permission for gradlew
         run: chmod +x gradlew
       - name: Build with Gradle
-        run: ./gradlew clean build createExe
+        run: ./gradlew clean build createExe --info
       - name: List files in libs
         run: ls -ahl build/libs
       # DOCKER RELATED
-- 
GitLab


From 6ab5254384abfb7783d0eb2dd34cc8d5ab2c330f Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Fri, 7 May 2021 10:20:57 +0200
Subject: [PATCH 81/91] refactor(DI): Improve some tests

---
 .../CreateServerPackTest.java                 |   1 +
 .../resources/forge_tests/server_pack.zip     | Bin 5418 -> 5418 bytes
 2 files changed, 1 insertion(+)

diff --git a/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java b/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
index d1e78f46c..7318bea7b 100644
--- a/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
+++ b/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
@@ -194,6 +194,7 @@ class CreateServerPackTest {
         new File("./src/test/resources/forge_tests/server_pack/start-forge.bat").delete();
         new File("./src/test/resources/forge_tests/server_pack/start-forge.sh").delete();
         new File("./serverpackcreator.conf").delete();
+        Files.copy(Paths.get("./src/test/resources/testresources/server_pack.zip"), Paths.get("./src/test/resources/forge_tests/server_pack.zip"), REPLACE_EXISTING);
     }
 
     @Test
diff --git a/src/test/resources/forge_tests/server_pack.zip b/src/test/resources/forge_tests/server_pack.zip
index 67e2c55730c7e43cd126257d3e8e4225ca41c77c..b0a87033147c241515000c18100a994959789701 100644
GIT binary patch
delta 19
acmZ3bwMuIN6Jz{lMy3uS#`wuyA`1XMss=0o

delta 19
acmZ3bwMuIN6QkZ{My3uSM!m^hA`1XJX$8sv

-- 
GitLab


From 76003b310228667224b4bf1610e55c760bca96b4 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Fri, 7 May 2021 11:05:37 +0200
Subject: [PATCH 82/91] refactor(DI): Try to fix test which fails of GitHub
 only

---
 .../de/griefed/serverpackcreator/CreateServerPackTest.java    | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java b/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
index 7318bea7b..0ae4705a6 100644
--- a/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
+++ b/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
@@ -346,10 +346,10 @@ class CreateServerPackTest {
 
     @Test
     void excludeClientModsTest() {
-        List<String> clientMods = new ArrayList<>(Arrays.asList(
+        List<String> clientMods = Arrays.asList(
                 "aaaaa","bbbbb","ccccc","fffff","ggggg","hhhhh","iiiii","jjjjj","kkkkk","lllll",
                 "nnnnn","ppppp","qqqqq","rrrrr","uuuuu","vvvvv","wwwww","xxxxx","yyyyy"
-        ));
+        );
         List<String> result = createServerPack.excludeClientMods("src/test/resources/forge_tests/mods", clientMods);
         System.out.println(result);
         Assertions.assertFalse(result.toString().contains("aaaaa"));
-- 
GitLab


From 6c5c57024376dabe43c8e9f05a3d7782e64ff3cd Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Fri, 7 May 2021 11:30:16 +0200
Subject: [PATCH 83/91] refactor(DI): Refactor excludeClientMods to use
 removeIf, instead of nested for-loop

---
 .../serverpackcreator/CreateServerPack.java        | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java b/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
index 65eb9d2af..0b7d18413 100644
--- a/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
+++ b/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
@@ -21,6 +21,7 @@ package de.griefed.serverpackcreator;
 
 import de.griefed.serverpackcreator.curseforgemodpack.CurseCreateModpack;
 import de.griefed.serverpackcreator.i18n.LocalizationManager;
+import kotlin.internal.AccessibleLateinitPropertyLiteral;
 import net.fabricmc.installer.util.LauncherMeta;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
@@ -475,6 +476,7 @@ public class CreateServerPack {
         List<String> modsInModpack = new ArrayList<>();
 
         try {
+            assert listModsInModpack != null;
             for (File mod : listModsInModpack) {
                 if (mod.isFile()) {
                     modsInModpack.add(mod.getAbsolutePath());
@@ -484,12 +486,12 @@ public class CreateServerPack {
             appLogger.error(localizationManager.getLocalizedString("copyfiles.log.error.excludeclientmods"), np);
         }
 
-        for (int inc = 0; inc < modsInModpack.size(); inc++) {
-            for (int inc2 = 0; inc2 < clientMods.size(); inc2++) {
-                if (modsInModpack.get(inc).contains(clientMods.get(inc2))) {
-                    modsInModpack.remove(inc);
-                }
-            }
+        for (int iclient = 0; iclient < clientMods.size(); iclient++) {
+
+            int i = iclient;
+
+            modsInModpack.removeIf(n -> (n.contains(clientMods.get(i))));
+
         }
 
         return modsInModpack;
-- 
GitLab


From acbdd535d07406113dc792075ce141222f6e6c6e Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Fri, 7 May 2021 18:09:43 +0200
Subject: [PATCH 84/91] refactor(DI): Setters changed: Config, ModLoader.
 Better return in isCurse. Improved suggestCopyDirs

---
 .../serverpackcreator/Configuration.java      | 187 +++++++++---------
 1 file changed, 98 insertions(+), 89 deletions(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/Configuration.java b/src/main/java/de/griefed/serverpackcreator/Configuration.java
index d3e3b0b53..5589a5de7 100644
--- a/src/main/java/de/griefed/serverpackcreator/Configuration.java
+++ b/src/main/java/de/griefed/serverpackcreator/Configuration.java
@@ -56,7 +56,7 @@ import java.util.*;
  * 5. {@link #getForgeManifestUrl()}<br>
  * 6. {@link #getFabricManifestUrl()}<br>
  * 7. {@link #getConfig()}<br>
- * 8. {@link #setConfig(Config)}<br>
+ * 8. {@link #setConfig(File)}<br>
  * 9. {@link #getFallbackModsList()}<br>
  * 10.{@link #getClientMods()}<br>
  * 11.{@link #setClientMods(List)}<br>
@@ -281,10 +281,14 @@ public class Configuration {
     /**
      * Setter for a {@link Config} containing a parsed configuration-file.
      * For use in {@link #checkConfigFile(File, boolean)}
-     * @param newConfig The new Typesafe Config to store.
+     * @param newConfig The new file of which to store a Typesafe Config.
      */
-    public void setConfig(Config newConfig) {
-        this.config = newConfig;
+    public void setConfig(File newConfig) {
+        try {
+            this.config = ConfigFactory.parseFile(newConfig);
+        } catch (ConfigException ex) {
+            appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.checkconfig.start"));
+        }
     }
 
     /**
@@ -414,7 +418,7 @@ public class Configuration {
      * @param newModLoader The new modloader to store.
      */
     void setModLoader(String newModLoader) {
-        this.modLoader = newModLoader;
+        this.modLoader = setModLoaderCase(newModLoader);
     }
 
     /**
@@ -559,10 +563,10 @@ public class Configuration {
     }
 
     /**
-     * Sets {@link #setConfig(Config)} and calls checks for the provided configuration-file. If any check returns <code>true</code>
+     * Sets {@link #setConfig(File)} and calls checks for the provided configuration-file. If any check returns <code>true</code>
      * then the server pack will not be created. In order to find out which check failed, the user has to check their
      * serverpackcreator.log in the logs directory. Calls<br>
-     * {@link #setConfig(Config)}<br>
+     * {@link #setConfig(File)}<br>
      * {@link #getConfig()}<br>
      * {@link #setClientMods(List)}<br>
      * {@link #getFallbackModsList()}<br>
@@ -584,7 +588,7 @@ public class Configuration {
         boolean configHasError = false;
         appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.checkconfig.start"));
         try {
-            setConfig(ConfigFactory.parseFile(configFile));
+            setConfig(configFile);
         } catch (ConfigException ex) {
             appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.checkconfig.start"));
         }
@@ -658,7 +662,7 @@ public class Configuration {
      *                   configuration file and checks are made in this directory.
      * @return Boolean. Returns true if an error is found during configuration check.
      */
-    private boolean isDir(String modpackDir) {
+    boolean isDir(String modpackDir) {
         boolean configHasError = false;
         setModpackDir(modpackDir);
 
@@ -721,7 +725,7 @@ public class Configuration {
      * @return Boolean. Returns false unless an error was encountered during either the acquisition of the CurseForge
      * project name and displayname, or when the creation of the modpack fails.
      */
-    private boolean isCurse() {
+    boolean isCurse() {
         boolean configHasError = false;
         try {
             if (CurseAPI.project(getProjectID()).isPresent()) {
@@ -733,83 +737,93 @@ public class Configuration {
                     catch (NullPointerException npe) { appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.iscurse.display"));
 
                         try { displayName = Objects.requireNonNull(CurseAPI.project(getProjectID()).get().files().fileWithID(getProjectFileID())).nameOnDisk(); }
-                        catch (NullPointerException npe2) { displayName = String.format("%d", getProjectFileID()); }
+                        catch (NullPointerException npe2) {
+                            appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.iscurse.file"), npe2);
+                            displayName = null;
+                        }
                     }
-                }
+                } catch (CurseException cex) { appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.iscurse.curseforge")); }
 
-                catch (CurseException cex) { appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.iscurse.curseforge")); }
+                if (displayName != null && projectName != null) {
 
-                setModpackDir(String.format("./%s/%s", projectName, displayName));
+                    setModpackDir(String.format("./%s/%s", projectName, displayName));
 
-                if (curseCreateModpack.curseForgeModpack(getModpackDir(), getProjectID(), getProjectFileID())) {
-                    try {
-                        byte[] jsonData = Files.readAllBytes(Paths.get(String.format("%s/manifest.json", getModpackDir())));
+                    if (curseCreateModpack.curseForgeModpack(getModpackDir(), getProjectID(), getProjectFileID())) {
+                        try {
+                            byte[] jsonData = Files.readAllBytes(Paths.get(String.format("%s/manifest.json", getModpackDir())));
 
-                        CurseModpack modpack = getObjectMapper().readValue(jsonData, CurseModpack.class);
+                            CurseModpack modpack = getObjectMapper().readValue(jsonData, CurseModpack.class);
 
-                        String[] minecraftLoaderVersions = modpack
-                                .getMinecraft()
-                                .toString()
-                                .split(",");
+                            String[] minecraftLoaderVersions = modpack
+                                    .getMinecraft()
+                                    .toString()
+                                    .split(",");
 
-                        String[] modLoaderVersion = minecraftLoaderVersions[1]
-                                .replace("[", "")
-                                .replace("]", "")
-                                .split("-");
+                            String[] modLoaderVersion = minecraftLoaderVersions[1]
+                                    .replace("[", "")
+                                    .replace("]", "")
+                                    .split("-");
 
-                        setMinecraftVersion(minecraftLoaderVersions[0]
-                                .replace("[", ""));
+                            setMinecraftVersion(minecraftLoaderVersions[0]
+                                    .replace("[", ""));
 
-                        if (containsFabric(modpack)) {
-                            appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.iscurse.fabric"));
+                            if (containsFabric(modpack)) {
+                                appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.iscurse.fabric"));
 
-                            setModLoader("Fabric");
-                            setModLoaderVersion(latestFabricLoader(getModpackDir()));
+                                setModLoader("Fabric");
+                                setModLoaderVersion(latestFabricLoader(getModpackDir()));
 
-                        } else {
+                            } else {
 
-                            setModLoader("Forge");
-                            setModLoaderVersion(modLoaderVersion[1]);
+                                setModLoader("Forge");
+                                setModLoaderVersion(modLoaderVersion[1]);
 
+                            }
+                        } catch (IOException ex) {
+                            appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.iscurse.json"), ex);
                         }
-                    } catch (IOException ex) { appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.iscurse.json"), ex); }
 
-                    if (checkJavaPath(getConfig().getString("javaPath").replace("\\","/"))) {
+                        if (checkJavaPath(getConfig().getString("javaPath").replace("\\", "/"))) {
 
-                        setJavaPath(getConfig().getString("javaPath").replace("\\","/"));
+                            setJavaPath(getConfig().getString("javaPath").replace("\\", "/"));
 
-                    } else {
-                        String tmpJavaPath = getJavaPathFromSystem(getConfig().getString("javaPath").replace("\\","/"));
+                        } else {
+                            String tmpJavaPath = getJavaPathFromSystem(getConfig().getString("javaPath").replace("\\", "/"));
+
+                            if (checkJavaPath(tmpJavaPath)) {
+                                setJavaPath(tmpJavaPath);
+                            }
 
-                        if (checkJavaPath(tmpJavaPath)) {
-                            setJavaPath(tmpJavaPath);
                         }
+                        setCopyDirs(suggestCopyDirs(getModpackDir()));
+
+                        appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.iscurse.replace"));
+
+                        writeConfigToFile(
+                                getModpackDir(),
+                                buildString(getClientMods().toString()),
+                                buildString(getCopyDirs().toString()),
+                                getIncludeServerInstallation(),
+                                getJavaPath(),
+                                getMinecraftVersion(),
+                                getModLoader(),
+                                getModLoaderVersion(),
+                                getIncludeServerIcon(),
+                                getIncludeServerProperties(),
+                                getIncludeStartScripts(),
+                                getIncludeZipCreation(),
+                                getConfigFile(),
+                                false
+                        );
 
+                    } else {
+                        configHasError = true;
                     }
-                    setCopyDirs(suggestCopyDirs(getModpackDir()));
-
-                    appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.iscurse.replace"));
-
-                    writeConfigToFile(
-                            getModpackDir(),
-                            buildString(getClientMods().toString()),
-                            buildString(getCopyDirs().toString()),
-                            getIncludeServerInstallation(),
-                            getJavaPath(),
-                            getMinecraftVersion(),
-                            getModLoader(),
-                            getModLoaderVersion(),
-                            getIncludeServerIcon(),
-                            getIncludeServerProperties(),
-                            getIncludeStartScripts(),
-                            getIncludeZipCreation(),
-                            getConfigFile(),
-                            false
-                    );
-
                 } else {
                     configHasError = true;
                 }
+            } else {
+                configHasError = true;
             }
         } catch (CurseException cex) {
             appLogger.error(String.format(localizationManager.getLocalizedString("configcheck.log.error.iscurse.project"), getProjectID()), cex);
@@ -825,7 +839,7 @@ public class Configuration {
      *               required by the modpack.
      * @return Boolean. Returns true if Jumploader is found.
      */
-    private boolean containsFabric(CurseModpack modpack) {
+    boolean containsFabric(CurseModpack modpack) {
         boolean hasJumploader = false;
 
         for (int i = 0; i < modpack.getFiles().size(); i++) {
@@ -849,40 +863,39 @@ public class Configuration {
      * @return List, String. Returns a list of directories inside the modpack, excluding well known client-side only
      * directories.
      */
-    private List<String> suggestCopyDirs(String modpackDir) {
+    List<String> suggestCopyDirs(String modpackDir) {
         appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.suggestcopydirs.start"));
 
-        String[] dirsNotToCopy = {
+        List<String> dirsNotToCopy = new ArrayList<String>(Arrays.asList(
                 "overrides",
                 "packmenu",
                 "resourcepacks",
                 "server_pack"
-        };
-
-        String[] copyDirs = new String[0];
-        List<String> dirList;
-        File directories = new File(modpackDir);
-
-        String[] dirArray = directories.list((current, name) -> new File(current, name).isDirectory());
+        ));
 
-        if (dirArray != null) {
+        File[] listDirectoriesInModpack = new File(modpackDir).listFiles();
 
-            dirList = new ArrayList<>(Arrays.asList(dirArray));
-            List<String> doNotCopyList = new ArrayList<>(Arrays.asList(dirsNotToCopy));
+        List<String> dirsInModpack = new ArrayList<>();
 
-            for (int i = 0; i < dirsNotToCopy.length; i++) {
-                dirList.remove(doNotCopyList.get(i));
+        try {
+            assert listDirectoriesInModpack != null;
+            for (File dir : listDirectoriesInModpack) {
+                if (dir.isDirectory()) {
+                    dirsInModpack.add(dir.getName());
+                }
             }
+        } catch (NullPointerException np) {
+            appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.suggestcopydirs"));
+        }
 
-            copyDirs = dirList.toArray(new String[0]);
-
-            appLogger.info(String.format(localizationManager.getLocalizedString("configcheck.log.info.suggestcopydirs.list"), dirList));
+        for (int idirs = 0; idirs < dirsNotToCopy.size(); idirs++) {
 
-            return Arrays.asList(copyDirs.clone());
+            int i = idirs;
 
-        } else { appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.suggestcopydirs")); }
+            dirsInModpack.removeIf(n -> (n.contains(dirsNotToCopy.get(i))));
+        }
 
-        return Arrays.asList(copyDirs.clone());
+        return dirsInModpack;
     }
 
     /**
@@ -1243,7 +1256,6 @@ public class Configuration {
      * @return Boolean. Returns true if the specified Minecraft version could be found in Mojang's manifest.
      */
     boolean isMinecraftVersionCorrect(String minecraftVersion) {
-        //TODO: Download file during startup of ServerPackCreator. Replace existing file during every restart. Store in same dir as ServerPacKCreator.
         if (!minecraftVersion.equals("")) {
             try {
                 URL manifestJsonURL = getMinecraftManifestUrl();
@@ -1313,7 +1325,6 @@ public class Configuration {
      * @return Boolean. Returns true if the specified fabric version could be found in Fabric's manifest.
      */
     boolean isFabricVersionCorrect(String fabricVersion) {
-        //TODO: Download file during startup of ServerPackCreator. Replace existing file during every restart. Store in same dir as ServerPacKCreator.
         if (!fabricVersion.equals("")) {
             try {
                 URL manifestJsonURL = getFabricManifestUrl();
@@ -1400,7 +1411,6 @@ public class Configuration {
      * @return Boolean. Returns true if the specified Forge version could be found in Forge's manifest.
      */
     boolean isForgeVersionCorrect(String forgeVersion) {
-        //TODO: Download file during startup of ServerPackCreator. Replace existing file during every restart. Store in same dir as ServerPacKCreator.
         if (!forgeVersion.equals("")) {
             try {
                 URL manifestJsonURL = getForgeManifestUrl();
@@ -1487,8 +1497,7 @@ public class Configuration {
      * @return Boolean. Returns true if the download was successful. False if not.
      */
     @SuppressWarnings({"ReturnInsideFinallyBlock", "finally"})
-    private String latestFabricLoader(String modpackDir) {
-        //TODO: Download file during startup of ServerPackCreator. Replace existing file during every restart. Store in same dir as ServerPacKCreator.
+    String latestFabricLoader(String modpackDir) {
         String result = "0.11.3";
         try {
             URL downloadFabricXml = getFabricManifestUrl();
-- 
GitLab


From 24b4e5642c2aecc9367a9b2d38627963d34331d3 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Fri, 7 May 2021 18:10:06 +0200
Subject: [PATCH 85/91] refactor(DI): Wrote more tests for remaining methods

---
 .../serverpackcreator/ConfigurationTest.java  | 647 ++++++++++++------
 1 file changed, 439 insertions(+), 208 deletions(-)

diff --git a/src/test/java/de/griefed/serverpackcreator/ConfigurationTest.java b/src/test/java/de/griefed/serverpackcreator/ConfigurationTest.java
index 055ef2b62..1f8802141 100644
--- a/src/test/java/de/griefed/serverpackcreator/ConfigurationTest.java
+++ b/src/test/java/de/griefed/serverpackcreator/ConfigurationTest.java
@@ -20,8 +20,10 @@
 
 package de.griefed.serverpackcreator;
 
-import com.typesafe.config.ConfigFactory;
+import com.therandomlabs.curseapi.CurseAPI;
+import com.therandomlabs.curseapi.CurseException;
 import de.griefed.serverpackcreator.curseforgemodpack.CurseCreateModpack;
+import de.griefed.serverpackcreator.curseforgemodpack.CurseModpack;
 import de.griefed.serverpackcreator.i18n.LocalizationManager;
 import org.apache.logging.log4j.Logger;
 import org.junit.jupiter.api.Assertions;
@@ -32,14 +34,60 @@ import org.mockito.MockitoAnnotations;
 
 import java.io.File;
 import java.io.IOException;
+import java.net.URL;
 import java.nio.file.Files;
+import java.nio.file.Path;
 import java.nio.file.Paths;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
+import java.util.*;
 
 import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
 
+/**
+ * <strong>Table of tests</strong><p>
+ * 1. {@link #ConfigurationTest()}<br>
+ * 2. {@link #getOldConfigFileTest()}<br>
+ * 3. {@link #getConfigFileTest()}<br>
+ * 4. {@link #getMinecraftManifestUrlTest()}<br>
+ * 5. {@link #getForgeManifestUrlTest()}<br>
+ * 6. {@link #getFabricManifestUrlTest()}<br>
+ * 7. {@link #getsetConfigTest()}<br>
+ * 9. {@link #getFallbackModsListTest()}<br>
+ * 10.{@link #getsetClientModsTest()}<br>
+ * 12.{@link #getsetCopyDirsTest()}<br>
+ * 14.{@link #getsetModpackDirTest()}<br>
+ * 16.{@link #getsetJavaPathTest()}<br>
+ * 18.{@link #getsetMinecraftVersionTest()}<br>
+ * 20.{@link #getsetModLoaderTest()}<br>
+ * 22.{@link #getsetModLoaderVersionTest()}<br>
+ * 24.{@link #getsetIncludeServerInstallationTest()}<br>
+ * 26.{@link #getsetIncludeServerIconTest()}<br>
+ * 28.{@link #getsetIncludeServerPropertiesTest()}<br>
+ * 30.{@link #getsetIncludeStartScriptsTest()}<br>
+ * 32.{@link #getsetIncludeZipCreationTest()}<br>
+ * 34.{@link #getsetProjectIDTest()}<br>
+ * 36.{@link #getsetProjectFileIDTest()}<br>
+ * 38.{@link #checkConfigFileTest()}<br>
+ * 39.{@link #isDirTest()}<br>
+ * 40.{@link #isCurseTest()}<br>
+ * 41.{@link #containsFabricTest()}<br>
+ * 42.{@link #suggestCopyDirsTest()}<br>
+ * 43.{@link #checkCurseForgeTest()}<br>
+ * 44.{@link #convertToBooleanTest()}<br>
+ * 45.{@link #printConfigTest()}<br>
+ * 46.{@link #checkModpackDirTest()}<br>
+ * 47.{@link #checkCopyDirsTest()}<br>
+ * 48.{@link #getJavaPathFromSystemTest()}<br>
+ * 49.{@link #checkJavaPathTest()}<br>
+ * 50.{@link #checkModloaderTest()}<br>
+ * 51.{@link #setModLoaderCaseTest()}<br>
+ * 52.{@link #checkModloaderVersionTest()}<br>
+ * 53.{@link #isMinecraftVersionCorrectTest()}<br>
+ * 54.{@link #isFabricVersionCorrectTest()}<br>
+ * 55.{@link #isForgeVersionCorrectTest()}<br>
+ * 56.{@link #latestFabricLoaderTest()}<br>
+ * 59.{@link #buildStringTest()}<br>
+ * 61.{@link #writeConfigToFileTest()}
+ */
 class ConfigurationTest {
     @Mock
     Logger appLogger;
@@ -61,7 +109,81 @@ class ConfigurationTest {
     }
 
     @Test
-    void testSetCopyDirs() {
+    void getOldConfigFileTest() {
+        File file = configuration.getOldConfigFile();
+        Assertions.assertNotNull(file);
+    }
+
+    @Test
+    void getConfigFileTest() {
+        File file = configuration.getConfigFile();
+        Assertions.assertNotNull(file);
+    }
+
+    @Test
+    void getMinecraftManifestUrlTest() {
+        URL url = configuration.getMinecraftManifestUrl();
+        Assertions.assertNotNull(url);
+    }
+
+    @Test
+    void getForgeManifestUrlTest() {
+        URL url = configuration.getForgeManifestUrl();
+        Assertions.assertNotNull(url);
+    }
+
+    @Test
+    void getFabricManifestUrlTest() {
+        URL url = configuration.getFabricManifestUrl();
+        Assertions.assertNotNull(url);
+    }
+
+    @Test
+    void getsetConfigTest() {
+        File file = new File("src/test/resources/testresources/serverpackcreator.conf");
+        configuration.setConfig(file);
+        Assertions.assertNotNull(configuration.getConfig());
+    }
+
+    @Test
+    void getFallbackModsListTest() {
+        Assertions.assertNotNull(configuration.getFallbackModsList());
+    }
+
+    @Test
+    void getsetClientModsTest() {
+        List<String> clientMods = new ArrayList<>(Arrays.asList(
+                "AmbientSounds",
+                "BackTools",
+                "BetterAdvancement",
+                "BetterPing",
+                "cherished",
+                "ClientTweaks",
+                "Controlling",
+                "DefaultOptions",
+                "durability",
+                "DynamicSurroundings",
+                "itemzoom",
+                "jei-professions",
+                "jeiintegration",
+                "JustEnoughResources",
+                "MouseTweaks",
+                "Neat",
+                "OldJavaWarning",
+                "PackMenu",
+                "preciseblockplacing",
+                "SimpleDiscordRichPresence",
+                "SpawnerFix",
+                "TipTheScales",
+                "WorldNameRandomizer"
+        ));
+        configuration.setClientMods(clientMods);
+        Assertions.assertNotNull(configuration.getClientMods());
+        Assertions.assertEquals(clientMods, configuration.getClientMods());
+    }
+
+    @Test
+    void getsetCopyDirsTest() {
         List<String> testList = new ArrayList<>(Arrays.asList(
                 "config",
                 "mods",
@@ -70,50 +192,263 @@ class ConfigurationTest {
                 "defaultconfigs",
                 "server_pack"
         ));
-        configuration.setCopyDirs(testList);
-        Assertions.assertFalse(configuration.getCopyDirs().contains("server_pack"));
-    }
-
-    @Test
-    void testBuildString() {
-        List<String> args = new ArrayList<>(Arrays.asList(
+        List<String> getList = new ArrayList<>(Arrays.asList(
                 "config",
                 "mods",
                 "scripts",
                 "seeds",
                 "defaultconfigs"
         ));
-        String result = configuration.buildString(args.toString());
-        Assertions.assertEquals(args.toString(), String.format("[%s]",result));
+        configuration.setCopyDirs(testList);
+        Assertions.assertNotNull(configuration.getCopyDirs());
+        Assertions.assertEquals(getList, configuration.getCopyDirs());
+        Assertions.assertFalse(configuration.getCopyDirs().contains("server_pack"));
     }
 
-    @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void testCheckConfig() throws IOException {
+    void getsetModpackDirTest() {
+        String modpackDir = "src/test/resources/forge_tests";
+        configuration.setModpackDir(modpackDir);
+        Assertions.assertNotNull(configuration.getModpackDir());
+        Assertions.assertEquals(modpackDir, configuration.getModpackDir());
+
+        String modpackDir2 = "src\\test\\resources\\forge_tests";
+        configuration.setModpackDir(modpackDir2);
+        Assertions.assertNotNull(configuration.getModpackDir());
+        Assertions.assertNotEquals(modpackDir2, configuration.getModpackDir());
+        Assertions.assertEquals(modpackDir2.replace("\\","/"),configuration.getModpackDir());
+        Assertions.assertFalse(configuration.getModpackDir().contains("\\"));
+    }
+
+    @Test
+    void getsetJavaPathTest() {
+        String javaPath = "src/test/resources/forge_tests";
+        configuration.setJavaPath(javaPath);
+        Assertions.assertNotNull(configuration.getJavaPath());
+        Assertions.assertEquals(javaPath, configuration.getJavaPath());
+
+        String javaPath2 = "src\\test\\resources\\forge_tests";
+        configuration.setModpackDir(javaPath2);
+        Assertions.assertNotNull(configuration.getJavaPath());
+        Assertions.assertNotEquals(javaPath2, configuration.getJavaPath());
+        Assertions.assertEquals(javaPath2.replace("\\","/"),configuration.getJavaPath());
+        Assertions.assertFalse(configuration.getJavaPath().contains("\\"));
+    }
+
+    @Test
+    void getsetMinecraftVersionTest() {
+        String minecraftVersion = "1.16.5";
+        configuration.setMinecraftVersion(minecraftVersion);
+        Assertions.assertNotNull(configuration.getMinecraftVersion());
+        Assertions.assertEquals(minecraftVersion, configuration.getMinecraftVersion());
+    }
+
+    @Test
+    void getsetModLoaderTest() {
+        String modloader = "FoRgE";
+        configuration.setModLoader(modloader);
+        Assertions.assertNotNull(configuration.getModLoader());
+        Assertions.assertNotEquals(modloader, configuration.getModLoader());
+        Assertions.assertEquals("Forge", configuration.getModLoader());
+    }
+
+    @Test
+    void getsetModLoaderVersionTest() {
+        String modloaderVersion = "36.1.2";
+        configuration.setModLoaderVersion(modloaderVersion);
+        Assertions.assertNotNull(configuration.getModLoaderVersion());
+        Assertions.assertEquals(modloaderVersion, configuration.getModLoaderVersion());
+    }
+
+    @Test
+    void getsetIncludeServerInstallationTest() {
+        configuration.setIncludeServerInstallation(true);
+        Assertions.assertTrue(configuration.getIncludeServerInstallation());
+        configuration.setIncludeServerInstallation(false);
+        Assertions.assertFalse(configuration.getIncludeServerInstallation());
+    }
+
+    @Test
+    void getsetIncludeServerIconTest() {
+        configuration.setIncludeServerIcon(true);
+        Assertions.assertTrue(configuration.getIncludeServerIcon());
+        configuration.setIncludeServerIcon(false);
+        Assertions.assertFalse(configuration.getIncludeServerIcon());
+    }
+
+    @Test
+    void getsetIncludeServerPropertiesTest() {
+        configuration.setIncludeServerProperties(true);
+        Assertions.assertTrue(configuration.getIncludeServerProperties());
+        configuration.setIncludeServerProperties(false);
+        Assertions.assertFalse(configuration.getIncludeServerProperties());
+    }
+
+    @Test
+    void getsetIncludeStartScriptsTest() {
+        configuration.setIncludeStartScripts(true);
+        Assertions.assertTrue(configuration.getIncludeStartScripts());
+        configuration.setIncludeStartScripts(false);
+        Assertions.assertFalse(configuration.getIncludeStartScripts());
+    }
+
+    @Test
+    void getsetIncludeZipCreationTest() {
+        configuration.setIncludeZipCreation(true);
+        Assertions.assertTrue(configuration.getIncludeZipCreation());
+        configuration.setIncludeZipCreation(false);
+        Assertions.assertFalse(configuration.getIncludeZipCreation());
+    }
+
+    @Test
+    void getsetProjectIDTest() {
+        int projectID = 123456;
+        configuration.setProjectID(projectID);
+        Assertions.assertEquals(projectID, configuration.getProjectID());
+    }
+
+    @Test
+    void getsetProjectFileIDTest() {
+        int fileID = 123456;
+        configuration.setProjectFileID(fileID);
+        Assertions.assertEquals(fileID, configuration.getProjectFileID());
+    }
+
+    @Test
+    void checkConfigFileTest() throws IOException {
         Files.copy(Paths.get("./src/test/resources/testresources/serverpackcreator.conf"), Paths.get("./serverpackcreator.conf"), REPLACE_EXISTING);
-        configuration.setConfig(ConfigFactory.parseFile(configuration.getConfigFile()));
+        configuration.setConfig(new File("./serverpackcreator.conf"));
         boolean result = configuration.checkConfigFile(configuration.getConfigFile(), true);
         Assertions.assertFalse(result);
         new File("./serverpackcreator.conf").delete();
     }
 
     @Test
-    void testCheckCurseForgeCorrect() {
-        String modpackDir = "238298,3174854";
-        boolean result = configuration.checkCurseForge(modpackDir);
-        Assertions.assertTrue(result);
+    void isDirTest() throws IOException {
+        Files.copy(Paths.get("./src/test/resources/testresources/serverpackcreator.conf"), Paths.get("./serverpackcreator.conf"), REPLACE_EXISTING);
+        configuration.setConfig(new File("./serverpackcreator.conf"));
+        configuration.setIncludeServerInstallation(true);
+        Assertions.assertFalse(configuration.isDir("./src/test/resources/forge_tests"));
+        new File("./serverpackcreator.conf").delete();
+
+        Files.copy(Paths.get("./src/test/resources/testresources/serverpackcreator_copydirs.conf"), Paths.get("./serverpackcreator.conf"), REPLACE_EXISTING);
+        configuration.setConfig(new File("./serverpackcreator.conf"));
+        configuration.setIncludeServerInstallation(true);
+        Assertions.assertTrue(configuration.isDir("./src/test/resources/forge_tests"));
+        new File("./serverpackcreator.conf").delete();
+
+        Files.copy(Paths.get("./src/test/resources/testresources/serverpackcreator_javapath.conf"), Paths.get("./serverpackcreator.conf"), REPLACE_EXISTING);
+        configuration.setConfig(new File("./serverpackcreator.conf"));
+        configuration.setIncludeServerInstallation(true);
+        Assertions.assertTrue(configuration.isDir("./src/test/resources/forge_tests"));
+        new File("./serverpackcreator.conf").delete();
+
+        Files.copy(Paths.get("./src/test/resources/testresources/serverpackcreator_minecraftversion.conf"), Paths.get("./serverpackcreator.conf"), REPLACE_EXISTING);
+        configuration.setConfig(new File("./serverpackcreator.conf"));
+        configuration.setIncludeServerInstallation(true);
+        Assertions.assertTrue(configuration.isDir("./src/test/resources/forge_tests"));
+        new File("./serverpackcreator.conf").delete();
+
+        Files.copy(Paths.get("./src/test/resources/testresources/serverpackcreator_modloader.conf"), Paths.get("./serverpackcreator.conf"), REPLACE_EXISTING);
+        configuration.setConfig(new File("./serverpackcreator.conf"));
+        configuration.setIncludeServerInstallation(true);
+        Assertions.assertTrue(configuration.isDir("./src/test/resources/forge_tests"));
+        new File("./serverpackcreator.conf").delete();
+
+        Files.copy(Paths.get("./src/test/resources/testresources/serverpackcreator_modloaderversion.conf"), Paths.get("./serverpackcreator.conf"), REPLACE_EXISTING);
+        configuration.setConfig(new File("./serverpackcreator.conf"));
+        configuration.setIncludeServerInstallation(true);
+        Assertions.assertTrue(configuration.isDir("./src/test/resources/forge_tests"));
+        new File("./serverpackcreator.conf").delete();
     }
 
     @Test
-    void testCheckCurseForgeFalse() {
-        String modpackDir = "1,1234";
-        boolean result = configuration.checkCurseForge(modpackDir);
-        Assertions.assertFalse(result);
+    void isCurseTest() throws CurseException, IOException {
+        Files.copy(Paths.get("./src/test/resources/testresources/serverpackcreator.conf"), Paths.get("./serverpackcreator.conf"), REPLACE_EXISTING);
+        configuration.setConfig(new File("./serverpackcreator.conf"));
+        configuration.setProjectID(238298);
+        configuration.setProjectFileID(3174854);
+        String projectName, displayName;
+        projectName = CurseAPI.project(238298).get().name();
+        displayName = CurseAPI.project(238298).get().files().fileWithID(3174854).displayName();
+        configuration.setClientMods(configuration.getFallbackModsList());
+        configuration.setIncludeServerInstallation(true);
+        configuration.setIncludeServerIcon(true);
+        configuration.setIncludeServerProperties(true);
+        configuration.setIncludeStartScripts(true);
+        configuration.setIncludeZipCreation(true);
+        Assertions.assertFalse(configuration.isCurse());
+        if (new File(String.format("./%s/%s",projectName,displayName)).isDirectory()) {
+            Path pathToBeDeleted = Paths.get(String.format("./%s/%s",projectName,displayName));
+            Files.walk(pathToBeDeleted).sorted(Comparator.reverseOrder()).map(Path::toFile).forEach(File::delete);
+        }
+        new File("./serverpackcreator.conf").delete();
+
+        configuration.setProjectID(999999);
+        Assertions.assertTrue(configuration.isCurse());
+        new File("./serverpackcreator.conf").delete();
+
+        Files.copy(Paths.get("./src/test/resources/testresources/serverpackcreator.conf"), Paths.get("./serverpackcreator.conf"), REPLACE_EXISTING);
+        configuration.setConfig(new File("./serverpackcreator.conf"));
+        configuration.setProjectID(238298);
+        configuration.setProjectFileID(999999);
+        Assertions.assertTrue(configuration.isCurse());
+
+        new File("./serverpackcreator.conf").delete();
+    }
+
+    @Test
+    void containsFabricTest() throws IOException {
+        byte[] fabricJsonData = Files.readAllBytes(Paths.get("src/test/resources/testresources/fabric_manifest.json"));
+        CurseModpack fabricModpack = configuration.getObjectMapper().readValue(fabricJsonData, CurseModpack.class);
+        Assertions.assertTrue(configuration.containsFabric(fabricModpack));
+
+        byte[] forgeJsonData = Files.readAllBytes(Paths.get("src/test/resources/testresources/manifest.json"));
+        CurseModpack forgeModpack = configuration.getObjectMapper().readValue(forgeJsonData, CurseModpack.class);
+        Assertions.assertFalse(configuration.containsFabric(forgeModpack));
+    }
+
+    @Test
+    void suggestCopyDirsTest() {
+        String modpackDir = "src/test/resources/forge_tests";
+        Assertions.assertFalse(configuration.suggestCopyDirs(modpackDir).contains("server_pack"));
+        Assertions.assertTrue(configuration.suggestCopyDirs(modpackDir).contains("config"));
+        Assertions.assertTrue(configuration.suggestCopyDirs(modpackDir).contains("defaultconfigs"));
+        Assertions.assertTrue(configuration.suggestCopyDirs(modpackDir).contains("mods"));
+        Assertions.assertTrue(configuration.suggestCopyDirs(modpackDir).contains("scripts"));
+        Assertions.assertTrue(configuration.suggestCopyDirs(modpackDir).contains("seeds"));
+    }
+
+    @Test
+    void checkCurseForgeTest() {
+        String valid = "430517,3266321";
+        Assertions.assertTrue(configuration.checkCurseForge(valid));
+        String invalid = "1,1234";
+        Assertions.assertFalse(configuration.checkCurseForge(invalid));
+    }
+
+    @Test
+    void convertToBooleanTest() {
+        Assertions.assertTrue(configuration.convertToBoolean("True"));
+        Assertions.assertTrue(configuration.convertToBoolean("true"));
+        Assertions.assertTrue(configuration.convertToBoolean("1"));
+        Assertions.assertTrue(configuration.convertToBoolean("Yes"));
+        Assertions.assertTrue(configuration.convertToBoolean("yes"));
+        Assertions.assertTrue(configuration.convertToBoolean("Y"));
+        Assertions.assertTrue(configuration.convertToBoolean("y"));
+
+        Assertions.assertFalse(configuration.convertToBoolean("False"));
+        Assertions.assertFalse(configuration.convertToBoolean("false"));
+        Assertions.assertFalse(configuration.convertToBoolean("0"));
+        Assertions.assertFalse(configuration.convertToBoolean("No"));
+        Assertions.assertFalse(configuration.convertToBoolean("no"));
+        Assertions.assertFalse(configuration.convertToBoolean("N"));
+        Assertions.assertFalse(configuration.convertToBoolean("n"));
     }
 
     @SuppressWarnings("ConstantConditions")
     @Test
-    void testPrintConfig() {
+    void printConfigTest() {
         String modpackDir = "src/test/resources/forge_tests";
         List<String> clientMods = new ArrayList<>(Arrays.asList(
                 "AmbientSounds",
@@ -172,20 +507,15 @@ class ConfigurationTest {
     }
 
     @Test
-    void testCheckModpackDirCorrect() {
-        String modpackDir = "./src/test/resources/forge_tests";
-        boolean result = configuration.checkModpackDir(modpackDir);
-        Assertions.assertTrue(result);
+    void checkModpackDirTest() {
+        String modpackDirCorrect = "./src/test/resources/forge_tests";
+        Assertions.assertTrue(configuration.checkModpackDir(modpackDirCorrect));
+        Assertions.assertFalse(configuration.checkModpackDir("modpackDir"));
     }
 
-    @Test
-    void testCheckModpackDirFalse() {
-        boolean result = configuration.checkModpackDir("modpackDir");
-        Assertions.assertFalse(result);
-    }
 
     @Test
-    void testCheckCopyDirsCorrect() {
+    void checkCopyDirsTest() {
         String modpackDir = "src/test/resources/forge_tests";
         List<String> copyDirs = new ArrayList<>(Arrays.asList(
                 "config",
@@ -194,26 +524,20 @@ class ConfigurationTest {
                 "seeds",
                 "defaultconfigs"
         ));
-        boolean result = configuration.checkCopyDirs(copyDirs, modpackDir);
-        Assertions.assertTrue(result);
-    }
+        Assertions.assertTrue(configuration.checkCopyDirs(copyDirs, modpackDir));
 
-    @Test
-    void testCheckCopyDirsFalse() {
-        String modpackDir = "./src/test/resources/forge_tests";
-        List<String> copyDirs = new ArrayList<>(Arrays.asList(
+        List<String> copyDirsInvalid = new ArrayList<>(Arrays.asList(
                 "configs",
                 "modss",
                 "scriptss",
                 "seedss",
                 "defaultconfigss"
         ));
-        boolean result = configuration.checkCopyDirs(copyDirs, modpackDir);
-        Assertions.assertFalse(result);
+        Assertions.assertFalse(configuration.checkCopyDirs(copyDirsInvalid, modpackDir));
     }
 
     @Test
-    void testGetJavaPath() {
+    void getJavaPathFromSystemTest() {
         String result = configuration.getJavaPathFromSystem("");
         String autoJavaPath = System.getProperty("java.home").replace("\\", "/") + "/bin/java";
         if (autoJavaPath.startsWith("C:")) {
@@ -223,7 +547,7 @@ class ConfigurationTest {
     }
 
     @Test
-    void testCheckJavaPathCorrect() {
+    void checkJavaPathTest() {
         String javaPath;
         String autoJavaPath = System.getProperty("java.home").replace("\\", "/") + "/bin/java";
         if (autoJavaPath.startsWith("C:")) {
@@ -236,140 +560,87 @@ class ConfigurationTest {
         } else {
             javaPath = autoJavaPath;
         }
-        boolean result = configuration.checkJavaPath(javaPath);
-        Assertions.assertTrue(result);
-    }
-
-    @Test
-    void testCheckModloaderFabric() {
-        String modLoader = "Fabric";
-        boolean result = configuration.checkModloader(modLoader);
-        Assertions.assertTrue(result);
-    }
-
-    @Test
-    void testCheckModloaderForge() {
-        String modLoader = "Forge";
-        boolean result = configuration.checkModloader(modLoader);
-        Assertions.assertTrue(result);
-    }
-
-    @Test
-    void testCheckModloaderFalse() {
-        boolean result = configuration.checkModloader("modloader");
-        Assertions.assertFalse(result);
-    }
-
-    @Test
-    void testSetModloaderFabric() {
-        String result = configuration.setModLoaderCase("fAbRiC");
-        Assertions.assertEquals("Fabric", result);
+        Assertions.assertTrue(configuration.checkJavaPath(javaPath));
     }
 
     @Test
-    void testSetModloaderForge() {
-        String result = configuration.setModLoaderCase("fOrGe");
-        Assertions.assertEquals("Forge", result);
+    void checkModloaderTest() {
+        String Fabric = "Fabric";
+        Assertions.assertTrue(configuration.checkModloader(Fabric));
+        String Forge = "Forge";
+        Assertions.assertTrue(configuration.checkModloader(Forge));
+        Assertions.assertFalse(configuration.checkModloader("modloader"));
+        Assertions.assertEquals("Fabric", configuration.setModLoaderCase("fAbRiC"));
+        Assertions.assertEquals("Forge", configuration.setModLoaderCase("fOrGe"));
     }
 
-    @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void testCheckModloaderVersionFabric() {
-        String modLoader = "Fabric";
-        String modLoaderVersion = "0.11.3";
-        boolean result = configuration.checkModloaderVersion(modLoader, modLoaderVersion);
-        Assertions.assertTrue(result);
-        new File("fabric-manifest.xml").delete();
+    void setModLoaderCaseTest() {
+        String forge = "fOrGe";
+        String fabric = "fAbRiC";
+        Assertions.assertEquals("Forge", configuration.setModLoaderCase(forge));
+        Assertions.assertEquals("Fabric", configuration.setModLoaderCase(fabric));
     }
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void testCheckModloaderVersionFabricIncorrect() {
-        String modLoader = "Fabric";
-        String modLoaderVersion = "0.90.3";
-        boolean result = configuration.checkModloaderVersion(modLoader, modLoaderVersion);
-        Assertions.assertFalse(result);
+    void checkModloaderVersionTest() {
+        Assertions.assertTrue(configuration.checkModloaderVersion("Fabric", "0.11.3"));
+        Assertions.assertFalse(configuration.checkModloaderVersion("Fabric", "0.90.3"));
         new File("fabric-manifest.xml").delete();
-    }
 
-    @SuppressWarnings("ResultOfMethodCallIgnored")
-    @Test
-    void testCheckModloaderVersionForge() {
-        String modLoader = "Forge";
-        String modLoaderVersion = "36.1.2";
-        boolean result = configuration.checkModloaderVersion(modLoader, modLoaderVersion);
-        Assertions.assertTrue(result);
-        new File("forge-manifest.json").delete();
-    }
-
-    @SuppressWarnings("ResultOfMethodCallIgnored")
-    @Test
-    void testCheckModloaderVersionForgeIncorrect() {
-        String modLoader = "Forge";
-        String modLoaderVersion = "90.0.0";
-        boolean result = configuration.checkModloaderVersion(modLoader, modLoaderVersion);
-        Assertions.assertFalse(result);
+        Assertions.assertTrue(configuration.checkModloaderVersion("Forge", "36.1.2"));
+        Assertions.assertFalse(configuration.checkModloaderVersion("Forge", "90.0.0"));
         new File("forge-manifest.json").delete();
     }
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void testIsMinecraftVersionCorrect() {
-        String minecraftVersion = "1.16.5";
-        boolean result = configuration.isMinecraftVersionCorrect(minecraftVersion);
-        Assertions.assertTrue(result);
+    void isMinecraftVersionCorrectTest() {
+        Assertions.assertTrue(configuration.isMinecraftVersionCorrect("1.16.5"));
+        Assertions.assertFalse(configuration.isMinecraftVersionCorrect("1.99.5"));
         new File("mcmanifest.json").delete();
     }
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void testIsMinecraftVersionFalse() {
-        String minecraftVersion = "1.99.5";
-        boolean result = configuration.isMinecraftVersionCorrect(minecraftVersion);
-        Assertions.assertFalse(result);
-        new File("mcmanifest.json").delete();
-    }
-
-    @SuppressWarnings("ResultOfMethodCallIgnored")
-    @Test
-    void testIsFabricVersionCorrect() {
-        String fabricVersion = "0.11.3";
-        boolean result = configuration.isFabricVersionCorrect(fabricVersion);
-        Assertions.assertTrue(result);
+    void isFabricVersionCorrectTest() {
+        Assertions.assertTrue(configuration.isFabricVersionCorrect("0.11.3"));
+        Assertions.assertFalse(configuration.isFabricVersionCorrect("0.90.3"));
         new File("fabric-manifest.xml").delete();
     }
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void testIsFabricVersionFalse() {
-        String fabricVersion = "0.90.3";
-        boolean result = configuration.isFabricVersionCorrect(fabricVersion);
-        Assertions.assertFalse(result);
-        new File("fabric-manifest.xml").delete();
+    void isForgeVersionCorrectTest() {
+        Assertions.assertTrue(configuration.isForgeVersionCorrect("36.1.2"));
+        Assertions.assertFalse(configuration.isForgeVersionCorrect("99.0.0"));
+        new File("forge-manifest.json").delete();
     }
 
-    @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void testIsForgeVersionCorrect() {
-        String forgeVersion = "36.1.2";
-        boolean result = configuration.isForgeVersionCorrect(forgeVersion);
-        Assertions.assertTrue(result);
-        new File("forge-manifest.json").delete();
+    void latestFabricLoaderTest() {
+        Assertions.assertNotNull(configuration.latestFabricLoader("src/test/resources/forge_tests"));
     }
 
-    @SuppressWarnings("ResultOfMethodCallIgnored")
+
+
     @Test
-    void testIsForgeVersionFalse() {
-        String forgeVersion = "99.0.0";
-        boolean result = configuration.isForgeVersionCorrect(forgeVersion);
-        Assertions.assertFalse(result);
-        new File("forge-manifest.json").delete();
+    void buildStringTest() {
+        List<String> args = new ArrayList<>(Arrays.asList(
+                "config",
+                "mods",
+                "scripts",
+                "seeds",
+                "defaultconfigs"
+        ));
+        String result = configuration.buildString(args.toString());
+        Assertions.assertEquals(args.toString(), String.format("[%s]",result));
     }
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
-    void writeConfigToFileTestFabric() {
-        String modpackDir = "./src/test/resources/fabric_tests";
+    void writeConfigToFileTest() {
         List<String> clientMods = new ArrayList<>(Arrays.asList(
                 "AmbientSounds",
                 "BackTools",
@@ -402,8 +673,10 @@ class ConfigurationTest {
                 "seeds",
                 "defaultconfigs"
         ));
+
         String javaPath;
         String autoJavaPath = System.getProperty("java.home").replace("\\", "/") + "/bin/java";
+
         if (autoJavaPath.startsWith("C:")) {
             autoJavaPath = String.format("%s.exe", autoJavaPath);
         }
@@ -412,88 +685,46 @@ class ConfigurationTest {
         } else {
             javaPath = autoJavaPath;
         }
-        String minecraftVersion = "1.16.5";
-        String modLoader = "Fabric";
-        String modLoaderVersion = "0.11.3";
-        boolean result = configuration.writeConfigToFile(
-                modpackDir,
+
+        Assertions.assertTrue(configuration.writeConfigToFile(
+                "./src/test/resources/fabric_tests",
                 configuration.buildString(clientMods.toString()),
                 configuration.buildString(copyDirs.toString()),
                 true,
                 javaPath,
-                minecraftVersion,
-                modLoader,
-                modLoaderVersion,
+                "1.16.5",
+                "Fabric",
+                "0.11.3",
                 true,
                 true,
                 true,
                 true,
-                configuration.getConfigFile(),
+                new File("./serverpackcreatorfabric.conf"),
                 false
-        );
-        Assertions.assertTrue(result);
-        Assertions.assertTrue(new File("./serverpackcreator.conf").exists());
-        new File("./serverpackcreator.conf").delete();
-    }
-
-    @SuppressWarnings("ResultOfMethodCallIgnored")
-    @Test
-    void testWriteConfigToFileForge() {
-        String modpackDir = "./src/test/resources/forge_tests";
-        List<String> clientMods = new ArrayList<>(Arrays.asList(
-                "AmbientSounds",
-                "BackTools",
-                "BetterAdvancement",
-                "BetterPing",
-                "cherished",
-                "ClientTweaks",
-                "Controlling",
-                "DefaultOptions",
-                "durability",
-                "DynamicSurroundings",
-                "itemzoom",
-                "jei-professions",
-                "jeiintegration",
-                "JustEnoughResources",
-                "MouseTweaks",
-                "Neat",
-                "OldJavaWarning",
-                "PackMenu",
-                "preciseblockplacing",
-                "SimpleDiscordRichPresence",
-                "SpawnerFix",
-                "TipTheScales",
-                "WorldNameRandomizer"
         ));
-        List<String> copyDirs = new ArrayList<>(Arrays.asList(
-                "config",
-                "mods",
-                "scripts",
-                "seeds",
-                "defaultconfigs"
-        ));
-        String javaPath = "/use/bin/java";
-        String minecraftVersion = "1.16.5";
-        String modLoader = "Forge";
-        String modLoaderVersion = "36.1.2";
-        boolean result = configuration.writeConfigToFile(
-                modpackDir,
+
+        Assertions.assertTrue(new File("./serverpackcreatorfabric.conf").exists());
+        new File("./serverpackcreatorfabric.conf").delete();
+
+        Assertions.assertTrue(configuration.writeConfigToFile(
+                "./src/test/resources/forge_tests",
                 configuration.buildString(clientMods.toString()),
                 configuration.buildString(copyDirs.toString()),
                 true,
                 javaPath,
-                minecraftVersion,
-                modLoader,
-                modLoaderVersion,
+                "1.16.5",
+                "Forge",
+                "36.1.2",
                 true,
                 true,
                 true,
                 true,
-                configuration.getConfigFile(),
+                new File("./serverpackcreatorforge.conf"),
                 false
-        );
-        Assertions.assertTrue(result);
-        Assertions.assertTrue(new File("./serverpackcreator.conf").exists());
-        new File("./serverpackcreator.conf").delete();
+        ));
+
+        Assertions.assertTrue(new File("./serverpackcreatorforge.conf").exists());
+        new File("./serverpackcreatorforge.conf").delete();
     }
+
 }
-- 
GitLab


From f3ca36f02a56bcf9fa5bf51338525eff9923a5bb Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Fri, 7 May 2021 18:10:44 +0200
Subject: [PATCH 86/91] misc

---
 .../java/de/griefed/serverpackcreator/CreateServerPack.java     | 2 --
 1 file changed, 2 deletions(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java b/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
index 0b7d18413..8ca2fda43 100644
--- a/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
+++ b/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
@@ -21,7 +21,6 @@ package de.griefed.serverpackcreator;
 
 import de.griefed.serverpackcreator.curseforgemodpack.CurseCreateModpack;
 import de.griefed.serverpackcreator.i18n.LocalizationManager;
-import kotlin.internal.AccessibleLateinitPropertyLiteral;
 import net.fabricmc.installer.util.LauncherMeta;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
@@ -865,7 +864,6 @@ public class CreateServerPack {
     String latestFabricInstaller(String modpackDir) {
         String result;
         try {
-            //TODO: Download file during startup of ServerPackCreator. Replace existing file during every restart. Store in same dir as ServerPacKCreator.
             URL downloadFabricXml = getFabricInstallerManifest();
 
             ReadableByteChannel downloadFabricXmlReadableByteChannel = Channels.newChannel(downloadFabricXml.openStream());
-- 
GitLab


From 773f4ad7607f3a9a97387fc927ad632a906c2e6f Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Fri, 7 May 2021 18:11:00 +0200
Subject: [PATCH 87/91] refactor(DI): Testfiles

---
 .../testresources/fabric_manifest.json        | 964 ++++++++++++++++++
 .../serverpackcreator_copydirs.conf           |  59 ++
 .../serverpackcreator_javapath.conf           |  59 ++
 .../serverpackcreator_minecraftversion.conf   |  59 ++
 .../serverpackcreator_modloader.conf          |  59 ++
 .../serverpackcreator_modloaderversion.conf   |  59 ++
 6 files changed, 1259 insertions(+)
 create mode 100644 src/test/resources/testresources/fabric_manifest.json
 create mode 100644 src/test/resources/testresources/serverpackcreator_copydirs.conf
 create mode 100644 src/test/resources/testresources/serverpackcreator_javapath.conf
 create mode 100644 src/test/resources/testresources/serverpackcreator_minecraftversion.conf
 create mode 100644 src/test/resources/testresources/serverpackcreator_modloader.conf
 create mode 100644 src/test/resources/testresources/serverpackcreator_modloaderversion.conf

diff --git a/src/test/resources/testresources/fabric_manifest.json b/src/test/resources/testresources/fabric_manifest.json
new file mode 100644
index 000000000..f99a98ce9
--- /dev/null
+++ b/src/test/resources/testresources/fabric_manifest.json
@@ -0,0 +1,964 @@
+{
+  "minecraft": {
+    "version": "1.16.5",
+    "modLoaders": [
+      {
+        "id": "forge-36.1.4",
+        "primary": true
+      }
+    ]
+  },
+  "manifestType": "minecraftModpack",
+  "manifestVersion": 1,
+  "name": "All of Fabric 3",
+  "version": "2.7.2",
+  "author": "",
+  "files": [
+    {
+      "projectID": 412174,
+      "fileID": 3179159,
+      "required": true
+    },
+    {
+      "projectID": 412182,
+      "fileID": 3278684,
+      "required": true
+    },
+    {
+      "projectID": 398780,
+      "fileID": 3240209,
+      "required": true
+    },
+    {
+      "projectID": 373093,
+      "fileID": 3282342,
+      "required": true
+    },
+    {
+      "projectID": 352997,
+      "fileID": 3133994,
+      "required": true
+    },
+    {
+      "projectID": 334011,
+      "fileID": 3029749,
+      "required": true
+    },
+    {
+      "projectID": 378696,
+      "fileID": 3220895,
+      "required": true
+    },
+    {
+      "projectID": 334018,
+      "fileID": 3029797,
+      "required": true
+    },
+    {
+      "projectID": 323974,
+      "fileID": 3193392,
+      "required": true
+    },
+    {
+      "projectID": 418921,
+      "fileID": 3107748,
+      "required": true
+    },
+    {
+      "projectID": 387649,
+      "fileID": 2986964,
+      "required": true
+    },
+    {
+      "projectID": 433447,
+      "fileID": 3157660,
+      "required": true
+    },
+    {
+      "projectID": 393236,
+      "fileID": 3204286,
+      "required": true
+    },
+    {
+      "projectID": 436799,
+      "fileID": 3205453,
+      "required": true
+    },
+    {
+      "projectID": 412225,
+      "fileID": 3264885,
+      "required": true
+    },
+    {
+      "projectID": 373138,
+      "fileID": 3212558,
+      "required": true
+    },
+    {
+      "projectID": 394362,
+      "fileID": 3046119,
+      "required": true
+    },
+    {
+      "projectID": 374274,
+      "fileID": 2934596,
+      "required": true
+    },
+    {
+      "projectID": 361988,
+      "fileID": 3227191,
+      "required": true
+    },
+    {
+      "projectID": 341888,
+      "fileID": 3087345,
+      "required": true
+    },
+    {
+      "projectID": 422316,
+      "fileID": 3122049,
+      "required": true
+    },
+    {
+      "projectID": 363126,
+      "fileID": 3063862,
+      "required": true
+    },
+    {
+      "projectID": 318449,
+      "fileID": 3270712,
+      "required": true
+    },
+    {
+      "projectID": 233564,
+      "fileID": 3244621,
+      "required": true
+    },
+    {
+      "projectID": 435744,
+      "fileID": 3193053,
+      "required": true
+    },
+    {
+      "projectID": 388832,
+      "fileID": 3247476,
+      "required": true
+    },
+    {
+      "projectID": 319582,
+      "fileID": 3237427,
+      "required": true
+    },
+    {
+      "projectID": 433518,
+      "fileID": 3209972,
+      "required": true
+    },
+    {
+      "projectID": 319596,
+      "fileID": 3235711,
+      "required": true
+    },
+    {
+      "projectID": 324066,
+      "fileID": 3157970,
+      "required": true
+    },
+    {
+      "projectID": 433538,
+      "fileID": 3218841,
+      "required": true
+    },
+    {
+      "projectID": 372124,
+      "fileID": 3202749,
+      "required": true
+    },
+    {
+      "projectID": 453681,
+      "fileID": 3236342,
+      "required": true
+    },
+    {
+      "projectID": 373261,
+      "fileID": 3095961,
+      "required": true
+    },
+    {
+      "projectID": 390027,
+      "fileID": 3021434,
+      "required": true
+    },
+    {
+      "projectID": 320778,
+      "fileID": 3135802,
+      "required": true
+    },
+    {
+      "projectID": 393392,
+      "fileID": 3105698,
+      "required": true
+    },
+    {
+      "projectID": 250419,
+      "fileID": 3191163,
+      "required": true
+    },
+    {
+      "projectID": 349850,
+      "fileID": 3124936,
+      "required": true
+    },
+    {
+      "projectID": 401236,
+      "fileID": 3269478,
+      "required": true
+    },
+    {
+      "projectID": 462672,
+      "fileID": 3254442,
+      "required": true
+    },
+    {
+      "projectID": 395659,
+      "fileID": 3111745,
+      "required": true
+    },
+    {
+      "projectID": 365521,
+      "fileID": 3153778,
+      "required": true
+    },
+    {
+      "projectID": 334248,
+      "fileID": 3101172,
+      "required": true
+    },
+    {
+      "projectID": 333141,
+      "fileID": 3271918,
+      "required": true
+    },
+    {
+      "projectID": 364426,
+      "fileID": 3071720,
+      "required": true
+    },
+    {
+      "projectID": 451554,
+      "fileID": 3276317,
+      "required": true
+    },
+    {
+      "projectID": 317514,
+      "fileID": 3197990,
+      "required": true
+    },
+    {
+      "projectID": 413596,
+      "fileID": 3203464,
+      "required": true
+    },
+    {
+      "projectID": 349938,
+      "fileID": 3247975,
+      "required": true
+    },
+    {
+      "projectID": 356643,
+      "fileID": 3073169,
+      "required": true
+    },
+    {
+      "projectID": 356678,
+      "fileID": 3239172,
+      "required": true
+    },
+    {
+      "projectID": 409184,
+      "fileID": 3256820,
+      "required": true
+    },
+    {
+      "projectID": 286328,
+      "fileID": 3197436,
+      "required": true
+    },
+    {
+      "projectID": 355583,
+      "fileID": 3032313,
+      "required": true
+    },
+    {
+      "projectID": 315386,
+      "fileID": 3248247,
+      "required": true
+    },
+    {
+      "projectID": 335493,
+      "fileID": 3175749,
+      "required": true
+    },
+    {
+      "projectID": 223794,
+      "fileID": 3225596,
+      "required": true
+    },
+    {
+      "projectID": 386892,
+      "fileID": 3213023,
+      "required": true
+    },
+    {
+      "projectID": 308702,
+      "fileID": 3268909,
+      "required": true
+    },
+    {
+      "projectID": 408118,
+      "fileID": 3272380,
+      "required": true
+    },
+    {
+      "projectID": 318760,
+      "fileID": 3153988,
+      "required": true
+    },
+    {
+      "projectID": 391366,
+      "fileID": 3281245,
+      "required": true
+    },
+    {
+      "projectID": 325471,
+      "fileID": 3280011,
+      "required": true
+    },
+    {
+      "projectID": 391378,
+      "fileID": 3239861,
+      "required": true
+    },
+    {
+      "projectID": 325492,
+      "fileID": 3207256,
+      "required": true
+    },
+    {
+      "projectID": 395864,
+      "fileID": 3281406,
+      "required": true
+    },
+    {
+      "projectID": 381349,
+      "fileID": 3098872,
+      "required": true
+    },
+    {
+      "projectID": 353426,
+      "fileID": 3171780,
+      "required": true
+    },
+    {
+      "projectID": 313219,
+      "fileID": 3161210,
+      "required": true
+    },
+    {
+      "projectID": 371307,
+      "fileID": 3186845,
+      "required": true
+    },
+    {
+      "projectID": 451744,
+      "fileID": 3221466,
+      "required": true
+    },
+    {
+      "projectID": 326641,
+      "fileID": 3066593,
+      "required": true
+    },
+    {
+      "projectID": 308769,
+      "fileID": 3225502,
+      "required": true
+    },
+    {
+      "projectID": 391429,
+      "fileID": 3189140,
+      "required": true
+    },
+    {
+      "projectID": 308777,
+      "fileID": 3209771,
+      "required": true
+    },
+    {
+      "projectID": 365750,
+      "fileID": 3266839,
+      "required": true
+    },
+    {
+      "projectID": 411557,
+      "fileID": 3087328,
+      "required": true
+    },
+    {
+      "projectID": 373591,
+      "fileID": 3227926,
+      "required": true
+    },
+    {
+      "projectID": 318872,
+      "fileID": 3220890,
+      "required": true
+    },
+    {
+      "projectID": 317756,
+      "fileID": 3224736,
+      "required": true
+    },
+    {
+      "projectID": 393714,
+      "fileID": 3132476,
+      "required": true
+    },
+    {
+      "projectID": 399309,
+      "fileID": 3256690,
+      "required": true
+    },
+    {
+      "projectID": 315534,
+      "fileID": 3155774,
+      "required": true
+    },
+    {
+      "projectID": 421649,
+      "fileID": 3218648,
+      "required": true
+    },
+    {
+      "projectID": 308841,
+      "fileID": 3039289,
+      "required": true
+    },
+    {
+      "projectID": 406021,
+      "fileID": 3048188,
+      "required": true
+    },
+    {
+      "projectID": 317780,
+      "fileID": 3275719,
+      "required": true
+    },
+    {
+      "projectID": 306612,
+      "fileID": 3281140,
+      "required": true
+    },
+    {
+      "projectID": 325625,
+      "fileID": 3138173,
+      "required": true
+    },
+    {
+      "projectID": 416105,
+      "fileID": 3122710,
+      "required": true
+    },
+    {
+      "projectID": 400477,
+      "fileID": 3120448,
+      "required": true
+    },
+    {
+      "projectID": 341284,
+      "fileID": 3100959,
+      "required": true
+    },
+    {
+      "projectID": 383733,
+      "fileID": 3107471,
+      "required": true
+    },
+    {
+      "projectID": 380393,
+      "fileID": 3202525,
+      "required": true
+    },
+    {
+      "projectID": 394915,
+      "fileID": 3245862,
+      "required": true
+    },
+    {
+      "projectID": 364762,
+      "fileID": 3019469,
+      "required": true
+    },
+    {
+      "projectID": 431787,
+      "fileID": 3263166,
+      "required": true
+    },
+    {
+      "projectID": 317856,
+      "fileID": 3214308,
+      "required": true
+    },
+    {
+      "projectID": 240783,
+      "fileID": 2989916,
+      "required": true
+    },
+    {
+      "projectID": 435141,
+      "fileID": 3172144,
+      "required": true
+    },
+    {
+      "projectID": 438495,
+      "fileID": 3237040,
+      "required": true
+    },
+    {
+      "projectID": 438496,
+      "fileID": 3249259,
+      "required": true
+    },
+    {
+      "projectID": 438500,
+      "fileID": 3231743,
+      "required": true
+    },
+    {
+      "projectID": 473131,
+      "fileID": 3280130,
+      "required": true
+    },
+    {
+      "projectID": 369254,
+      "fileID": 3264737,
+      "required": true
+    },
+    {
+      "projectID": 312289,
+      "fileID": 3273758,
+      "required": true
+    },
+    {
+      "projectID": 403889,
+      "fileID": 3039451,
+      "required": true
+    },
+    {
+      "projectID": 388252,
+      "fileID": 3071147,
+      "required": true
+    },
+    {
+      "projectID": 375969,
+      "fileID": 3035557,
+      "required": true
+    },
+    {
+      "projectID": 360333,
+      "fileID": 3186818,
+      "required": true
+    },
+    {
+      "projectID": 408366,
+      "fileID": 3269549,
+      "required": true
+    },
+    {
+      "projectID": 353641,
+      "fileID": 2992917,
+      "required": true
+    },
+    {
+      "projectID": 382694,
+      "fileID": 3196484,
+      "required": true
+    },
+    {
+      "projectID": 238603,
+      "fileID": 3156163,
+      "required": true
+    },
+    {
+      "projectID": 391640,
+      "fileID": 3119850,
+      "required": true
+    },
+    {
+      "projectID": 359248,
+      "fileID": 3209165,
+      "required": true
+    },
+    {
+      "projectID": 310111,
+      "fileID": 3272771,
+      "required": true
+    },
+    {
+      "projectID": 355914,
+      "fileID": 3032328,
+      "required": true
+    },
+    {
+      "projectID": 319057,
+      "fileID": 3261151,
+      "required": true
+    },
+    {
+      "projectID": 387197,
+      "fileID": 3252374,
+      "required": true
+    },
+    {
+      "projectID": 378266,
+      "fileID": 3262002,
+      "required": true
+    },
+    {
+      "projectID": 390557,
+      "fileID": 3133269,
+      "required": true
+    },
+    {
+      "projectID": 400619,
+      "fileID": 3124827,
+      "required": true
+    },
+    {
+      "projectID": 392805,
+      "fileID": 2994761,
+      "required": true
+    },
+    {
+      "projectID": 401753,
+      "fileID": 3274420,
+      "required": true
+    },
+    {
+      "projectID": 320215,
+      "fileID": 3177342,
+      "required": true
+    },
+    {
+      "projectID": 391708,
+      "fileID": 3279979,
+      "required": true
+    },
+    {
+      "projectID": 361550,
+      "fileID": 3119667,
+      "required": true
+    },
+    {
+      "projectID": 408465,
+      "fileID": 3218659,
+      "required": true
+    },
+    {
+      "projectID": 362669,
+      "fileID": 3209365,
+      "required": true
+    },
+    {
+      "projectID": 360438,
+      "fileID": 3215441,
+      "required": true
+    },
+    {
+      "projectID": 380548,
+      "fileID": 3186878,
+      "required": true
+    },
+    {
+      "projectID": 459857,
+      "fileID": 3253564,
+      "required": true
+    },
+    {
+      "projectID": 416294,
+      "fileID": 3279704,
+      "required": true
+    },
+    {
+      "projectID": 368263,
+      "fileID": 3185573,
+      "required": true
+    },
+    {
+      "projectID": 360449,
+      "fileID": 3158251,
+      "required": true
+    },
+    {
+      "projectID": 391737,
+      "fileID": 3134750,
+      "required": true
+    },
+    {
+      "projectID": 361585,
+      "fileID": 3095793,
+      "required": true
+    },
+    {
+      "projectID": 437552,
+      "fileID": 3264888,
+      "required": true
+    },
+    {
+      "projectID": 248787,
+      "fileID": 2987255,
+      "required": true
+    },
+    {
+      "projectID": 315811,
+      "fileID": 3195227,
+      "required": true
+    },
+    {
+      "projectID": 419697,
+      "fileID": 3279825,
+      "required": true
+    },
+    {
+      "projectID": 396245,
+      "fileID": 3212546,
+      "required": true
+    },
+    {
+      "projectID": 421949,
+      "fileID": 3124331,
+      "required": true
+    },
+    {
+      "projectID": 398502,
+      "fileID": 3113127,
+      "required": true
+    },
+    {
+      "projectID": 377281,
+      "fileID": 3191170,
+      "required": true
+    },
+    {
+      "projectID": 384009,
+      "fileID": 3276337,
+      "required": true
+    },
+    {
+      "projectID": 399648,
+      "fileID": 3278801,
+      "required": true
+    },
+    {
+      "projectID": 440979,
+      "fileID": 3274367,
+      "required": true
+    },
+    {
+      "projectID": 309177,
+      "fileID": 3036690,
+      "required": true
+    },
+    {
+      "projectID": 334873,
+      "fileID": 3128781,
+      "required": true
+    },
+    {
+      "projectID": 399679,
+      "fileID": 3038575,
+      "required": true
+    },
+    {
+      "projectID": 407500,
+      "fileID": 3252504,
+      "required": true
+    },
+    {
+      "projectID": 356118,
+      "fileID": 3040466,
+      "required": true
+    },
+    {
+      "projectID": 333779,
+      "fileID": 3121061,
+      "required": true
+    },
+    {
+      "projectID": 263420,
+      "fileID": 3275706,
+      "required": true
+    },
+    {
+      "projectID": 415339,
+      "fileID": 3106070,
+      "required": true
+    },
+    {
+      "projectID": 393000,
+      "fileID": 3212566,
+      "required": true
+    },
+    {
+      "projectID": 394120,
+      "fileID": 3273334,
+      "required": true
+    },
+    {
+      "projectID": 398614,
+      "fileID": 3259847,
+      "required": true
+    },
+    {
+      "projectID": 410902,
+      "fileID": 3157163,
+      "required": true
+    },
+    {
+      "projectID": 422076,
+      "fileID": 3121774,
+      "required": true
+    },
+    {
+      "projectID": 442184,
+      "fileID": 3188519,
+      "required": true
+    },
+    {
+      "projectID": 401978,
+      "fileID": 3128808,
+      "required": true
+    },
+    {
+      "projectID": 385230,
+      "fileID": 3107117,
+      "required": true
+    },
+    {
+      "projectID": 309275,
+      "fileID": 3173974,
+      "required": true
+    },
+    {
+      "projectID": 389718,
+      "fileID": 3181134,
+      "required": true
+    },
+    {
+      "projectID": 317121,
+      "fileID": 3093525,
+      "required": true
+    },
+    {
+      "projectID": 398667,
+      "fileID": 3282067,
+      "required": true
+    },
+    {
+      "projectID": 398676,
+      "fileID": 3104836,
+      "required": true
+    },
+    {
+      "projectID": 415438,
+      "fileID": 3257186,
+      "required": true
+    },
+    {
+      "projectID": 437779,
+      "fileID": 3173720,
+      "required": true
+    },
+    {
+      "projectID": 297038,
+      "fileID": 3266601,
+      "required": true
+    },
+    {
+      "projectID": 413207,
+      "fileID": 3194197,
+      "required": true
+    },
+    {
+      "projectID": 405388,
+      "fileID": 3274195,
+      "required": true
+    },
+    {
+      "projectID": 396461,
+      "fileID": 3124604,
+      "required": true
+    },
+    {
+      "projectID": 400929,
+      "fileID": 3030323,
+      "required": true
+    },
+    {
+      "projectID": 444498,
+      "fileID": 3268237,
+      "required": true
+    },
+    {
+      "projectID": 374143,
+      "fileID": 3206686,
+      "required": true
+    },
+    {
+      "projectID": 354047,
+      "fileID": 3048200,
+      "required": true
+    },
+    {
+      "projectID": 381973,
+      "fileID": 3063422,
+      "required": true
+    },
+    {
+      "projectID": 332831,
+      "fileID": 3111160,
+      "required": true
+    },
+    {
+      "projectID": 393149,
+      "fileID": 3191218,
+      "required": true
+    },
+    {
+      "projectID": 446767,
+      "fileID": 3272633,
+      "required": true
+    },
+    {
+      "projectID": 341772,
+      "fileID": 3060706,
+      "required": true
+    },
+    {
+      "projectID": 431135,
+      "fileID": 3194033,
+      "required": true
+    },
+    {
+      "projectID": 237903,
+      "fileID": 3215288,
+      "required": true
+    },
+    {
+      "projectID": 461316,
+      "fileID": 3282051,
+      "required": true
+    }
+  ],
+  "overrides": "overrides"
+}
\ No newline at end of file
diff --git a/src/test/resources/testresources/serverpackcreator_copydirs.conf b/src/test/resources/testresources/serverpackcreator_copydirs.conf
new file mode 100644
index 000000000..32919d1ed
--- /dev/null
+++ b/src/test/resources/testresources/serverpackcreator_copydirs.conf
@@ -0,0 +1,59 @@
+# Path to your modpack. Can be either relative or absolute.
+# Example: "./Some Modpack" or "C:\Minecraft\Some Modpack"
+# Can also be a combination of CurseForge projectID and fileID. Example for Survive Create Prosper 4 4.6.7 "390331,3215793"
+modpackDir = "./src/test/resources/forge_tests"
+
+# List of client-only mods to delete from serverpack.
+# No need to include version specifics. Must be the filenames of the mods, not their project names on CurseForge!
+# Example: ["AmbientSounds", "ClientTweaks", "PackMenu", "BetterAdvancement", "jeiintegration"]
+clientMods = [AmbientSounds,BackTools,BetterAdvancement,BetterPing,cherished,ClientTweaks,Controlling,DefaultOptions,durability,DynamicSurroundings,itemzoom,jei-professions,jeiintegration,JustEnoughResources,MouseTweaks,Neat,OldJavaWarning,PackMenu,preciseblockplacing,SimpleDiscordRichPresence,SpawnerFix,TipTheScales,WorldNameRandomizer]
+
+# Name of directories to include in serverpack.
+# When specifying "saves/world_name", "world_name" will be copied to the base directory of the serverpack
+# for immediate use with the server. Automatically set when projectID,fileID for modpackDir has been specified.
+# Example: ["config", "mods", "scripts"]
+copyDirs = [config,modss,scripts,seeds,defaultconfigs]
+
+# Whether to install a Forge/Fabric server for the serverpack. Must be true or false.
+# Default value is true.
+includeServerInstallation = true
+
+# Path to the Java executable. On Linux systems it would be something like "/usr/bin/java".
+# Only needed if includeServerInstallation is true.
+javaPath = ""
+
+# Which Minecraft version to use. Example: "1.16.5".
+# Automatically set when projectID,fileID for modpackDir has been specified.
+# Only needed if includeServerInstallation is true.
+minecraftVersion = "1.16.8"
+
+# Which modloader to install. Must be either "Forge" or "Fabric".
+# Automatically set when projectID,fileID for modpackDir has been specified.
+# Only needed if includeServerInstallation is true.
+modLoader = "Forgee"
+
+# The version of the modloader you want to install. Example for Fabric="0.7.3", example for Forge="36.0.15".
+# Automatically set when projectID,fileID for modpackDir has been specified.
+# Only needed if includeServerInstallation is true.
+modLoaderVersion = "36.1.6123"
+
+# Include a server-icon.png in your serverpack. Must be true or false.
+# Customize server-icon.png in ./server_files.
+# Dimensions must be 64x64!
+# Default value is true.
+includeServerIcon = true
+
+# Include a server.properties in your serverpack. Must be true or false.
+# Customize server.properties in ./server_files.
+# If no server.properties is provided but is set to true, a default one will be provided.
+# Default value is true.
+includeServerProperties = true
+
+# Include start scripts for windows and linux systems. Must be true or false.
+# Customize files beginning with "start-" in ./server_files.
+# Default value is true.
+includeStartScripts = true
+
+# Create zip-archive of serverpack. Must be true or false.
+# Default value is true.
+includeZipCreation = true
diff --git a/src/test/resources/testresources/serverpackcreator_javapath.conf b/src/test/resources/testresources/serverpackcreator_javapath.conf
new file mode 100644
index 000000000..c6b75c066
--- /dev/null
+++ b/src/test/resources/testresources/serverpackcreator_javapath.conf
@@ -0,0 +1,59 @@
+# Path to your modpack. Can be either relative or absolute.
+# Example: "./Some Modpack" or "C:\Minecraft\Some Modpack"
+# Can also be a combination of CurseForge projectID and fileID. Example for Survive Create Prosper 4 4.6.7 "390331,3215793"
+modpackDir = "./src/test/resources/forge_tests"
+
+# List of client-only mods to delete from serverpack.
+# No need to include version specifics. Must be the filenames of the mods, not their project names on CurseForge!
+# Example: ["AmbientSounds", "ClientTweaks", "PackMenu", "BetterAdvancement", "jeiintegration"]
+clientMods = [AmbientSounds,BackTools,BetterAdvancement,BetterPing,cherished,ClientTweaks,Controlling,DefaultOptions,durability,DynamicSurroundings,itemzoom,jei-professions,jeiintegration,JustEnoughResources,MouseTweaks,Neat,OldJavaWarning,PackMenu,preciseblockplacing,SimpleDiscordRichPresence,SpawnerFix,TipTheScales,WorldNameRandomizer]
+
+# Name of directories to include in serverpack.
+# When specifying "saves/world_name", "world_name" will be copied to the base directory of the serverpack
+# for immediate use with the server. Automatically set when projectID,fileID for modpackDir has been specified.
+# Example: ["config", "mods", "scripts"]
+copyDirs = [config,mods,scripts,seeds,defaultconfigs]
+
+# Whether to install a Forge/Fabric server for the serverpack. Must be true or false.
+# Default value is true.
+includeServerInstallation = true
+
+# Path to the Java executable. On Linux systems it would be something like "/usr/bin/java".
+# Only needed if includeServerInstallation is true.
+javaPath = "aaaaa"
+
+# Which Minecraft version to use. Example: "1.16.5".
+# Automatically set when projectID,fileID for modpackDir has been specified.
+# Only needed if includeServerInstallation is true.
+minecraftVersion = "1.16.5"
+
+# Which modloader to install. Must be either "Forge" or "Fabric".
+# Automatically set when projectID,fileID for modpackDir has been specified.
+# Only needed if includeServerInstallation is true.
+modLoader = "Forge"
+
+# The version of the modloader you want to install. Example for Fabric="0.7.3", example for Forge="36.0.15".
+# Automatically set when projectID,fileID for modpackDir has been specified.
+# Only needed if includeServerInstallation is true.
+modLoaderVersion = "36.1.2"
+
+# Include a server-icon.png in your serverpack. Must be true or false.
+# Customize server-icon.png in ./server_files.
+# Dimensions must be 64x64!
+# Default value is true.
+includeServerIcon = true
+
+# Include a server.properties in your serverpack. Must be true or false.
+# Customize server.properties in ./server_files.
+# If no server.properties is provided but is set to true, a default one will be provided.
+# Default value is true.
+includeServerProperties = true
+
+# Include start scripts for windows and linux systems. Must be true or false.
+# Customize files beginning with "start-" in ./server_files.
+# Default value is true.
+includeStartScripts = true
+
+# Create zip-archive of serverpack. Must be true or false.
+# Default value is true.
+includeZipCreation = true
diff --git a/src/test/resources/testresources/serverpackcreator_minecraftversion.conf b/src/test/resources/testresources/serverpackcreator_minecraftversion.conf
new file mode 100644
index 000000000..b93cc50a0
--- /dev/null
+++ b/src/test/resources/testresources/serverpackcreator_minecraftversion.conf
@@ -0,0 +1,59 @@
+# Path to your modpack. Can be either relative or absolute.
+# Example: "./Some Modpack" or "C:\Minecraft\Some Modpack"
+# Can also be a combination of CurseForge projectID and fileID. Example for Survive Create Prosper 4 4.6.7 "390331,3215793"
+modpackDir = "./src/test/resources/forge_tests"
+
+# List of client-only mods to delete from serverpack.
+# No need to include version specifics. Must be the filenames of the mods, not their project names on CurseForge!
+# Example: ["AmbientSounds", "ClientTweaks", "PackMenu", "BetterAdvancement", "jeiintegration"]
+clientMods = [AmbientSounds,BackTools,BetterAdvancement,BetterPing,cherished,ClientTweaks,Controlling,DefaultOptions,durability,DynamicSurroundings,itemzoom,jei-professions,jeiintegration,JustEnoughResources,MouseTweaks,Neat,OldJavaWarning,PackMenu,preciseblockplacing,SimpleDiscordRichPresence,SpawnerFix,TipTheScales,WorldNameRandomizer]
+
+# Name of directories to include in serverpack.
+# When specifying "saves/world_name", "world_name" will be copied to the base directory of the serverpack
+# for immediate use with the server. Automatically set when projectID,fileID for modpackDir has been specified.
+# Example: ["config", "mods", "scripts"]
+copyDirs = [config,mods,scripts,seeds,defaultconfigs]
+
+# Whether to install a Forge/Fabric server for the serverpack. Must be true or false.
+# Default value is true.
+includeServerInstallation = true
+
+# Path to the Java executable. On Linux systems it would be something like "/usr/bin/java".
+# Only needed if includeServerInstallation is true.
+javaPath = ""
+
+# Which Minecraft version to use. Example: "1.16.5".
+# Automatically set when projectID,fileID for modpackDir has been specified.
+# Only needed if includeServerInstallation is true.
+minecraftVersion = "1.16.111"
+
+# Which modloader to install. Must be either "Forge" or "Fabric".
+# Automatically set when projectID,fileID for modpackDir has been specified.
+# Only needed if includeServerInstallation is true.
+modLoader = "Forge"
+
+# The version of the modloader you want to install. Example for Fabric="0.7.3", example for Forge="36.0.15".
+# Automatically set when projectID,fileID for modpackDir has been specified.
+# Only needed if includeServerInstallation is true.
+modLoaderVersion = "36.1.2"
+
+# Include a server-icon.png in your serverpack. Must be true or false.
+# Customize server-icon.png in ./server_files.
+# Dimensions must be 64x64!
+# Default value is true.
+includeServerIcon = true
+
+# Include a server.properties in your serverpack. Must be true or false.
+# Customize server.properties in ./server_files.
+# If no server.properties is provided but is set to true, a default one will be provided.
+# Default value is true.
+includeServerProperties = true
+
+# Include start scripts for windows and linux systems. Must be true or false.
+# Customize files beginning with "start-" in ./server_files.
+# Default value is true.
+includeStartScripts = true
+
+# Create zip-archive of serverpack. Must be true or false.
+# Default value is true.
+includeZipCreation = true
diff --git a/src/test/resources/testresources/serverpackcreator_modloader.conf b/src/test/resources/testresources/serverpackcreator_modloader.conf
new file mode 100644
index 000000000..486c229e7
--- /dev/null
+++ b/src/test/resources/testresources/serverpackcreator_modloader.conf
@@ -0,0 +1,59 @@
+# Path to your modpack. Can be either relative or absolute.
+# Example: "./Some Modpack" or "C:\Minecraft\Some Modpack"
+# Can also be a combination of CurseForge projectID and fileID. Example for Survive Create Prosper 4 4.6.7 "390331,3215793"
+modpackDir = "./src/test/resources/forge_tests"
+
+# List of client-only mods to delete from serverpack.
+# No need to include version specifics. Must be the filenames of the mods, not their project names on CurseForge!
+# Example: ["AmbientSounds", "ClientTweaks", "PackMenu", "BetterAdvancement", "jeiintegration"]
+clientMods = [AmbientSounds,BackTools,BetterAdvancement,BetterPing,cherished,ClientTweaks,Controlling,DefaultOptions,durability,DynamicSurroundings,itemzoom,jei-professions,jeiintegration,JustEnoughResources,MouseTweaks,Neat,OldJavaWarning,PackMenu,preciseblockplacing,SimpleDiscordRichPresence,SpawnerFix,TipTheScales,WorldNameRandomizer]
+
+# Name of directories to include in serverpack.
+# When specifying "saves/world_name", "world_name" will be copied to the base directory of the serverpack
+# for immediate use with the server. Automatically set when projectID,fileID for modpackDir has been specified.
+# Example: ["config", "mods", "scripts"]
+copyDirs = [config,mods,scripts,seeds,defaultconfigs]
+
+# Whether to install a Forge/Fabric server for the serverpack. Must be true or false.
+# Default value is true.
+includeServerInstallation = true
+
+# Path to the Java executable. On Linux systems it would be something like "/usr/bin/java".
+# Only needed if includeServerInstallation is true.
+javaPath = ""
+
+# Which Minecraft version to use. Example: "1.16.5".
+# Automatically set when projectID,fileID for modpackDir has been specified.
+# Only needed if includeServerInstallation is true.
+minecraftVersion = "1.16.5"
+
+# Which modloader to install. Must be either "Forge" or "Fabric".
+# Automatically set when projectID,fileID for modpackDir has been specified.
+# Only needed if includeServerInstallation is true.
+modLoader = "Forgeeeee"
+
+# The version of the modloader you want to install. Example for Fabric="0.7.3", example for Forge="36.0.15".
+# Automatically set when projectID,fileID for modpackDir has been specified.
+# Only needed if includeServerInstallation is true.
+modLoaderVersion = "36.1.2"
+
+# Include a server-icon.png in your serverpack. Must be true or false.
+# Customize server-icon.png in ./server_files.
+# Dimensions must be 64x64!
+# Default value is true.
+includeServerIcon = true
+
+# Include a server.properties in your serverpack. Must be true or false.
+# Customize server.properties in ./server_files.
+# If no server.properties is provided but is set to true, a default one will be provided.
+# Default value is true.
+includeServerProperties = true
+
+# Include start scripts for windows and linux systems. Must be true or false.
+# Customize files beginning with "start-" in ./server_files.
+# Default value is true.
+includeStartScripts = true
+
+# Create zip-archive of serverpack. Must be true or false.
+# Default value is true.
+includeZipCreation = true
diff --git a/src/test/resources/testresources/serverpackcreator_modloaderversion.conf b/src/test/resources/testresources/serverpackcreator_modloaderversion.conf
new file mode 100644
index 000000000..b51c66ca8
--- /dev/null
+++ b/src/test/resources/testresources/serverpackcreator_modloaderversion.conf
@@ -0,0 +1,59 @@
+# Path to your modpack. Can be either relative or absolute.
+# Example: "./Some Modpack" or "C:\Minecraft\Some Modpack"
+# Can also be a combination of CurseForge projectID and fileID. Example for Survive Create Prosper 4 4.6.7 "390331,3215793"
+modpackDir = "./src/test/resources/forge_tests"
+
+# List of client-only mods to delete from serverpack.
+# No need to include version specifics. Must be the filenames of the mods, not their project names on CurseForge!
+# Example: ["AmbientSounds", "ClientTweaks", "PackMenu", "BetterAdvancement", "jeiintegration"]
+clientMods = [AmbientSounds,BackTools,BetterAdvancement,BetterPing,cherished,ClientTweaks,Controlling,DefaultOptions,durability,DynamicSurroundings,itemzoom,jei-professions,jeiintegration,JustEnoughResources,MouseTweaks,Neat,OldJavaWarning,PackMenu,preciseblockplacing,SimpleDiscordRichPresence,SpawnerFix,TipTheScales,WorldNameRandomizer]
+
+# Name of directories to include in serverpack.
+# When specifying "saves/world_name", "world_name" will be copied to the base directory of the serverpack
+# for immediate use with the server. Automatically set when projectID,fileID for modpackDir has been specified.
+# Example: ["config", "mods", "scripts"]
+copyDirs = [config,mods,scripts,seeds,defaultconfigs]
+
+# Whether to install a Forge/Fabric server for the serverpack. Must be true or false.
+# Default value is true.
+includeServerInstallation = true
+
+# Path to the Java executable. On Linux systems it would be something like "/usr/bin/java".
+# Only needed if includeServerInstallation is true.
+javaPath = ""
+
+# Which Minecraft version to use. Example: "1.16.5".
+# Automatically set when projectID,fileID for modpackDir has been specified.
+# Only needed if includeServerInstallation is true.
+minecraftVersion = "1.16.5"
+
+# Which modloader to install. Must be either "Forge" or "Fabric".
+# Automatically set when projectID,fileID for modpackDir has been specified.
+# Only needed if includeServerInstallation is true.
+modLoader = "Forge"
+
+# The version of the modloader you want to install. Example for Fabric="0.7.3", example for Forge="36.0.15".
+# Automatically set when projectID,fileID for modpackDir has been specified.
+# Only needed if includeServerInstallation is true.
+modLoaderVersion = "36.1.2222"
+
+# Include a server-icon.png in your serverpack. Must be true or false.
+# Customize server-icon.png in ./server_files.
+# Dimensions must be 64x64!
+# Default value is true.
+includeServerIcon = true
+
+# Include a server.properties in your serverpack. Must be true or false.
+# Customize server.properties in ./server_files.
+# If no server.properties is provided but is set to true, a default one will be provided.
+# Default value is true.
+includeServerProperties = true
+
+# Include start scripts for windows and linux systems. Must be true or false.
+# Customize files beginning with "start-" in ./server_files.
+# Default value is true.
+includeStartScripts = true
+
+# Create zip-archive of serverpack. Must be true or false.
+# Default value is true.
+includeZipCreation = true
-- 
GitLab


From e8166e0dcf22c629c06b65710a9828de0102e405 Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Fri, 7 May 2021 19:05:34 +0200
Subject: [PATCH 88/91] refactor(DI): Some comments here and there

---
 .../serverpackcreator/Configuration.java      | 55 ++++++++++++-------
 .../serverpackcreator/CreateServerPack.java   |  8 +++
 .../griefed/serverpackcreator/FilesSetup.java | 10 ++--
 .../de/griefed/serverpackcreator/Main.java    | 14 +++++
 4 files changed, 63 insertions(+), 24 deletions(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/Configuration.java b/src/main/java/de/griefed/serverpackcreator/Configuration.java
index 5589a5de7..03ab19563 100644
--- a/src/main/java/de/griefed/serverpackcreator/Configuration.java
+++ b/src/main/java/de/griefed/serverpackcreator/Configuration.java
@@ -151,11 +151,7 @@ public class Configuration {
     private final File oldConfigFile = new File("creator.conf");
     private final File configFile = new File("serverpackcreator.conf");
 
-    private final String minecraftManifest = "https://launchermeta.mojang.com/mc/game/version_manifest.json";
-    private final String forgeManifest = "https://files.minecraftforge.net/net/minecraftforge/forge/maven-metadata.json";
-    private final String fabricManifest = "https://maven.fabricmc.net/net/fabricmc/fabric-loader/maven-metadata.xml";
-
-//-- If you wish to expand this list, fork this repository, make your changes, and submit a PR -------------------------
+    //-- If you wish to expand this list, fork this repository, make your changes, and submit a PR -------------------------
     private final List<String> fallbackModsList = Arrays.asList(
             "AmbientSounds",
             "BackTools",
@@ -240,7 +236,9 @@ public class Configuration {
      */
     URL getMinecraftManifestUrl() {
         URL minecraftURL = null;
-        try { minecraftURL = new URL(minecraftManifest); }
+        String minecraftManifest = "https://launchermeta.mojang.com/mc/game/version_manifest.json";
+        try {
+            minecraftURL = new URL(minecraftManifest); }
         catch (IOException ex) { appLogger.error(ex); }
         return minecraftURL;
     }
@@ -251,7 +249,9 @@ public class Configuration {
      */
     URL getForgeManifestUrl() {
         URL forgeURL = null;
-        try { forgeURL = new URL(forgeManifest); }
+        String forgeManifest = "https://files.minecraftforge.net/net/minecraftforge/forge/maven-metadata.json";
+        try {
+            forgeURL = new URL(forgeManifest); }
         catch (IOException ex) { appLogger.error(ex); }
         return forgeURL;
     }
@@ -262,7 +262,9 @@ public class Configuration {
      */
     URL getFabricManifestUrl() {
         URL fabricURL = null;
-        try { fabricURL = new URL(fabricManifest); }
+        String fabricManifest = "https://maven.fabricmc.net/net/fabricmc/fabric-loader/maven-metadata.xml";
+        try {
+            fabricURL = new URL(fabricManifest); }
         catch (IOException ex) { appLogger.error(ex); }
         return fabricURL;
     }
@@ -274,7 +276,7 @@ public class Configuration {
      * {@link #isDir(String)}<br>
      * {@link #isCurse()}
      */
-    public Config getConfig() {
+     Config getConfig() {
         return config;
     }
 
@@ -283,7 +285,7 @@ public class Configuration {
      * For use in {@link #checkConfigFile(File, boolean)}
      * @param newConfig The new file of which to store a Typesafe Config.
      */
-    public void setConfig(File newConfig) {
+    void setConfig(File newConfig) {
         try {
             this.config = ConfigFactory.parseFile(newConfig);
         } catch (ConfigException ex) {
@@ -667,28 +669,45 @@ public class Configuration {
         setModpackDir(modpackDir);
 
         if (checkCopyDirs(getConfig().getStringList("copyDirs"), getModpackDir())) {
+
             setCopyDirs(getConfig().getStringList("copyDirs"));
+
         } else { configHasError = true; }
 
         if (getIncludeServerInstallation()) {
+
             if (checkJavaPath(getConfig().getString("javaPath"))) {
+
                 setJavaPath(getConfig().getString("javaPath"));
+
             } else {
+
                 String tmpJavaPath = getJavaPathFromSystem(getConfig().getString("javaPath"));
+
                 if (checkJavaPath(tmpJavaPath)) {
+
                     setJavaPath(tmpJavaPath);
+
                 } else { configHasError = true; } }
 
+
+
             if (isMinecraftVersionCorrect(getConfig().getString("minecraftVersion"))) {
+
                 setMinecraftVersion(getConfig().getString("minecraftVersion"));
+
             } else { configHasError = true; }
 
             if (checkModloader(getConfig().getString("modLoader"))) {
+
                 setModLoader(setModLoaderCase(getConfig().getString("modLoader")));
+
             } else { configHasError = true; }
 
             if (checkModloaderVersion(getModLoader(), getConfig().getString("modLoaderVersion"))) {
+
                 setModLoaderVersion(getConfig().getString("modLoaderVersion"));
+
             } else { configHasError = true; }
 
         } else {
@@ -729,8 +748,10 @@ public class Configuration {
         boolean configHasError = false;
         try {
             if (CurseAPI.project(getProjectID()).isPresent()) {
+
                 String projectName, displayName;
                 projectName = displayName = "";
+
                 try { projectName = CurseAPI.project(getProjectID()).get().name();
 
                     try { displayName = Objects.requireNonNull(CurseAPI.project(getProjectID()).get().files().fileWithID(getProjectFileID())).displayName(); }
@@ -744,6 +765,7 @@ public class Configuration {
                     }
                 } catch (CurseException cex) { appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.iscurse.curseforge")); }
 
+
                 if (displayName != null && projectName != null) {
 
                     setModpackDir(String.format("./%s/%s", projectName, displayName));
@@ -816,15 +838,10 @@ public class Configuration {
                                 false
                         );
 
-                    } else {
-                        configHasError = true;
-                    }
-                } else {
-                    configHasError = true;
-                }
-            } else {
-                configHasError = true;
-            }
+                    } else { configHasError = true; }
+                } else { configHasError = true; }
+            } else { configHasError = true; }
+
         } catch (CurseException cex) {
             appLogger.error(String.format(localizationManager.getLocalizedString("configcheck.log.error.iscurse.project"), getProjectID()), cex);
             configHasError = true;
diff --git a/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java b/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
index 8ca2fda43..99c6930e2 100644
--- a/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
+++ b/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
@@ -216,36 +216,44 @@ public class CreateServerPack {
     public boolean run() {
         if (!configuration.checkConfigFile(configuration.getConfigFile(), true)) {
 
+            // Make sure no files from previously generated server packs interrupt us.
             cleanupEnvironment(configuration.getModpackDir());
 
+            // Recursively copy all specified directories and files, excluding clientside-only mods, to server pack.
             copyFiles(configuration.getModpackDir(), configuration.getCopyDirs(), configuration.getClientMods());
 
+            // Copy start scripts for specified modloader from server_files to server pack.
             copyStartScripts(configuration.getModpackDir(), configuration.getModLoader(), configuration.getIncludeStartScripts());
 
+            // If true, Install the modloader software for the specified Minecraft version, modloader, modloader version
             if (configuration.getIncludeServerInstallation()) {
                 installServer(configuration.getModLoader(), configuration.getModpackDir(), configuration.getMinecraftVersion(), configuration.getModLoaderVersion(), configuration.getJavaPath());
             } else {
                 appLogger.info(localizationManager.getLocalizedString("handler.log.info.runincli.server"));
             }
 
+            // If true, copy the server-icon.png from server_files to the server pack.
             if (configuration.getIncludeServerIcon()) {
                 copyIcon(configuration.getModpackDir());
             } else {
                 appLogger.info(localizationManager.getLocalizedString("handler.log.info.runincli.icon"));
             }
 
+            // If true, copy the server.properties from server_files to the server pack.
             if (configuration.getIncludeServerProperties()) {
                 copyProperties(configuration.getModpackDir());
             } else {
                 appLogger.info(localizationManager.getLocalizedString("handler.log.info.runincli.properties"));
             }
 
+            // If true, create a ZIP-archive excluding the Minecraft server JAR of the server pack.
             if (configuration.getIncludeZipCreation()) {
                 zipBuilder(configuration.getModpackDir(), configuration.getModLoader(), configuration.getIncludeServerInstallation(), configuration.getMinecraftVersion());
             } else {
                 appLogger.info(localizationManager.getLocalizedString("handler.log.info.runincli.zip"));
             }
 
+            // Inform user about location of newly generated server pack.
             appLogger.info(String.format(localizationManager.getLocalizedString("handler.log.info.runincli.serverpack"), configuration.getModpackDir()));
             appLogger.info(String.format(localizationManager.getLocalizedString("handler.log.info.runincli.archive"), configuration.getModpackDir()));
             appLogger.info(localizationManager.getLocalizedString("handler.log.info.runincli.finish"));
diff --git a/src/main/java/de/griefed/serverpackcreator/FilesSetup.java b/src/main/java/de/griefed/serverpackcreator/FilesSetup.java
index d580ab406..a615f907d 100644
--- a/src/main/java/de/griefed/serverpackcreator/FilesSetup.java
+++ b/src/main/java/de/griefed/serverpackcreator/FilesSetup.java
@@ -163,11 +163,10 @@ public class FilesSetup {
      */
     void filesSetup() {
         appLogger.info(localizationManager.getLocalizedString("filessetup.log.info.filessetup.enter"));
-        try {
-            Files.createDirectories(Paths.get("./server_files"));
-        } catch (IOException ex) {
-            appLogger.error(localizationManager.getLocalizedString("filessetup.log.error.filessetup"), ex);
-        }
+
+        try { Files.createDirectories(Paths.get("./server_files")); }
+        catch (IOException ex) { appLogger.error(localizationManager.getLocalizedString("filessetup.log.error.filessetup"), ex); }
+
         boolean doesConfigExist         = checkForConfig();
         boolean doesFabricLinuxExist    = checkForFabricLinux();
         boolean doesFabricWindowsExist  = checkForFabricWindows();
@@ -176,6 +175,7 @@ public class FilesSetup {
         boolean doesPropertiesExist     = checkForProperties();
         boolean doesIconExist           = checkForIcon();
 
+        // Inform user about customization of files if any of them were generated from the template.
         if (doesConfigExist            ||
                 doesFabricLinuxExist   ||
                 doesFabricWindowsExist ||
diff --git a/src/main/java/de/griefed/serverpackcreator/Main.java b/src/main/java/de/griefed/serverpackcreator/Main.java
index d284df1d3..6bf325c2d 100644
--- a/src/main/java/de/griefed/serverpackcreator/Main.java
+++ b/src/main/java/de/griefed/serverpackcreator/Main.java
@@ -80,16 +80,21 @@ public class Main {
         LocalizationManager localizationManager = new LocalizationManager();
         if (Arrays.asList(args).contains("-lang")) {
             try {
+                // Init the LocalizationManager with the locale passed by the cli arguments.
                 localizationManager.init(programArgs.get(programArgs.indexOf("-lang") + 1));
             } catch (IncorrectLanguageException e) {
                 appLogger.info(programArgs.get(programArgs.indexOf("-lang") + 1));
                 appLogger.error("Incorrect language specified, falling back to English (United States)...");
+
+                // Init the LocalizationManager with the default locale en_US.
                 localizationManager.init();
             }
         } else {
+            // Check local lang.properties file for locale setting.
             localizationManager.checkLocaleFile();
         }
 
+        // Prepare instances for dependency injection
         CurseCreateModpack curseCreateModpack = new CurseCreateModpack(localizationManager);
         Configuration configuration = new Configuration(localizationManager, curseCreateModpack);
         FilesSetup filesSetup = new FilesSetup(localizationManager);
@@ -111,6 +116,7 @@ public class Main {
         appLogger.warn(localizationManager.getLocalizedString("handler.log.warn.wip0"));
 
         try {
+            // Print system information to console and logs.
             jarPath = Main.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath();
             jarName = jarPath.substring(jarPath.lastIndexOf("/") + 1);
             javaVersion = System.getProperty("java.version");
@@ -130,8 +136,10 @@ public class Main {
             appLogger.error(localizationManager.getLocalizedString("handler.log.error.system.properties"), ex);
         }
 
+        // Ensure default files are present.
         filesSetup.filesSetup();
 
+        // Start generation of a new configuration file with user input.
         if (Arrays.asList(args).contains("-cgen")) {
 
             configuration.createConfigurationFile();
@@ -142,8 +150,10 @@ public class Main {
                 System.exit(1);
             }
 
+        // Start ServerPackCreator in commandline mode.
         } else if (Arrays.asList(args).contains("-cli")) {
 
+            // Start generation of a new configuration with user input if no configuration file is present.
             if (!new File("creator.conf").exists() && !new File("serverpackcreator.conf").exists()) {
 
                 configuration.createConfigurationFile();
@@ -154,8 +164,11 @@ public class Main {
             } else {
                 System.exit(1);
             }
+
+        // If the environment is headless, so no possibility for GUI, start in commandline-mode.
         } else if (GraphicsEnvironment.isHeadless()) {
 
+            // Start generation of a new configuration with user input if no configuration file is present.
             if (!new File("creator.conf").exists() && !new File("serverpackcreator.conf").exists()) {
 
                 configuration.createConfigurationFile();
@@ -167,6 +180,7 @@ public class Main {
                 System.exit(1);
             }
 
+        // If no mode is specified and we have a graphical environment, start in GUI mode.
         } else {
 
             tabbedPane.mainGUI();
-- 
GitLab


From ac5673403301ad89ae92b8baeed5be687ba6c76f Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Fri, 7 May 2021 19:06:24 +0200
Subject: [PATCH 89/91] refactor(DI): Move bufferedImage so we can use
 localization for logging

---
 .../griefed/serverpackcreator/gui/CreateGui.java  | 15 ++++++---------
 .../griefed/resources/lang/lang_de_de.properties  |  1 +
 .../griefed/resources/lang/lang_en_us.properties  |  1 +
 .../griefed/resources/lang/lang_uk_ua.properties  |  1 +
 4 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java b/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java
index be79e14fe..aa6f037cc 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java
@@ -55,16 +55,7 @@ public class CreateGui extends JPanel {
     private final ImageIcon bannerIcon      = new ImageIcon(Objects.requireNonNull(CreateGui.class.getResource("/de/griefed/resources/gui/banner.png")));
     private final Image icon                = Toolkit.getDefaultToolkit().getImage(Objects.requireNonNull(CreateGui.class.getResource("/de/griefed/resources/gui/app.png")));
     private final Dimension windowDimension = new Dimension(800,860);
-    private final Image tile                = Toolkit.getDefaultToolkit().getImage(Objects.requireNonNull(CreateGui.class.getResource("/de/griefed/resources/gui/tile.png")));
     private BufferedImage bufferedImage;
-    {
-        try {
-            bufferedImage = ImageIO.read(getClass().getResource("/de/griefed/resources/gui/tile.png"));
-        } catch (IOException ex) {
-            //Can't use localization here.
-            appLogger.error("Could not read image for tiling.", ex);
-        }
-    }
 
     private LocalizationManager localizationManager;
     private Configuration configuration;
@@ -120,12 +111,18 @@ public class CreateGui extends JPanel {
             this.createServerPack = injectedCreateServerPack;
         }
 
+        try { bufferedImage = ImageIO.read(Objects.requireNonNull(getClass().getResource("/de/griefed/resources/gui/tile.png")));}
+        catch (IOException ex) { appLogger.error(localizationManager.getLocalizedString("createserverpack.gui.createandshowgui.image"), ex); }
+
         createServerPackTab = new CreateServerPackTab(localizationManager, configuration, curseCreateModpack, createServerPack);
         serverPackCreatorLogTab = new ServerPackCreatorLogTab(localizationManager);
         modloaderInstallerLogTab = new ModloaderInstallerLogTab(localizationManager);
         aboutTab = new AboutTab(localizationManager);
+
         serverPackCreatorFrame = new JFrame(localizationManager.getLocalizedString("createserverpack.gui.createandshowgui"));
+
         backgroundPanel = new BackgroundPanel(bufferedImage, BackgroundPanel.TILED, 0.0f, 0.0f);
+
         tabbedPane = new JTabbedPane(JTabbedPane.TOP);
 
         /*
diff --git a/src/main/resources/de/griefed/resources/lang/lang_de_de.properties b/src/main/resources/de/griefed/resources/lang/lang_de_de.properties
index 9454e0bbd..f068c9bb1 100644
--- a/src/main/resources/de/griefed/resources/lang/lang_de_de.properties
+++ b/src/main/resources/de/griefed/resources/lang/lang_de_de.properties
@@ -17,6 +17,7 @@ cli.input.false=[Ff]alsch
 
 # GUI
 createserverpack.gui.createandshowgui=ServerPackCreator
+createserverpack.gui.createandshowgui.image=Could not read image for tiling.
 createserverpack.gui.tabbedpane.createserverpack.title=Create Server Pack
 createserverpack.gui.tabbedpane.createserverpack.tip=Configure and start generation of server pack.
 createserverpack.gui.tabbedpane.serverpackcreatorlog.title=ServerPackCreator Log
diff --git a/src/main/resources/de/griefed/resources/lang/lang_en_us.properties b/src/main/resources/de/griefed/resources/lang/lang_en_us.properties
index 5617fffd7..6f82c6b0c 100644
--- a/src/main/resources/de/griefed/resources/lang/lang_en_us.properties
+++ b/src/main/resources/de/griefed/resources/lang/lang_en_us.properties
@@ -17,6 +17,7 @@ cli.input.false=[Ff]alse
 
 # GUI
 createserverpack.gui.createandshowgui=ServerPackCreator
+createserverpack.gui.createandshowgui.image=Could not read image for tiling.
 createserverpack.gui.tabbedpane.createserverpack.title=Create Server Pack
 createserverpack.gui.tabbedpane.createserverpack.tip=Configure and start generation of server pack.
 createserverpack.gui.tabbedpane.serverpackcreatorlog.title=ServerPackCreator Log
diff --git a/src/main/resources/de/griefed/resources/lang/lang_uk_ua.properties b/src/main/resources/de/griefed/resources/lang/lang_uk_ua.properties
index 02fc1428a..c0e356688 100644
--- a/src/main/resources/de/griefed/resources/lang/lang_uk_ua.properties
+++ b/src/main/resources/de/griefed/resources/lang/lang_uk_ua.properties
@@ -17,6 +17,7 @@ cli.input.false=[Ff]alse
 
 # GUI
 createserverpack.gui.createandshowgui=ServerPackCreator
+createserverpack.gui.createandshowgui.image=Could not read image for tiling.
 createserverpack.gui.tabbedpane.createserverpack.title=Create Server Pack
 createserverpack.gui.tabbedpane.createserverpack.tip=Configure and start generation of server pack.
 createserverpack.gui.tabbedpane.serverpackcreatorlog.title=ServerPackCreator Log
-- 
GitLab


From 1a451091ba9a7713c6e5d75a2adbdd26cc18f2be Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Fri, 7 May 2021 21:57:12 +0200
Subject: [PATCH 90/91] refactor(DI): Make appropriate fields final. Adhere to
 final naming convention. Minor refactorings.

---
 .../serverpackcreator/Configuration.java      | 405 +++++++++---------
 .../serverpackcreator/CreateServerPack.java   | 302 ++++++-------
 .../de/griefed/serverpackcreator/Main.java    |  45 +-
 .../curseforgemodpack/CurseCreateModpack.java | 129 +++---
 .../curseforgemodpack/CurseMinecraft.java     |   2 +-
 .../curseforgemodpack/CurseSplines.java       |  14 +-
 .../serverpackcreator/gui/AboutTab.java       | 114 +++--
 .../gui/BackgroundPanel.java                  |  12 +-
 .../serverpackcreator/gui/CreateGui.java      | 147 +++----
 .../gui/CreateServerPackTab.java              | 296 ++++++-------
 .../gui/ModloaderInstallerLogTab.java         |  22 +-
 .../gui/ServerPackCreatorLogTab.java          |  20 +-
 .../serverpackcreator/gui/SmartScroller.java  |   3 +-
 .../i18n/LocalizationManager.java             |  72 ++--
 .../CreateServerPackTest.java                 |   4 +-
 15 files changed, 777 insertions(+), 810 deletions(-)

diff --git a/src/main/java/de/griefed/serverpackcreator/Configuration.java b/src/main/java/de/griefed/serverpackcreator/Configuration.java
index 03ab19563..e929c530f 100644
--- a/src/main/java/de/griefed/serverpackcreator/Configuration.java
+++ b/src/main/java/de/griefed/serverpackcreator/Configuration.java
@@ -115,13 +115,12 @@ import java.util.*;
  * be a combination of a CurseForge projectID and fileID.<p>
  * Requires an instance of {@link LocalizationManager} for use of localization, but creates one if injected one is null.<p>
  * Loads a configuration from a serverpackcreator.conf-file in the same directory in which ServerPackCreator resides in.
- * 
  */
 public class Configuration {
-    private static final Logger appLogger = LogManager.getLogger(Configuration.class);
+    private static final Logger LOG = LogManager.getLogger(Configuration.class);
 
-    private LocalizationManager localizationManager;
-    private CurseCreateModpack curseCreateModpack;
+    private final LocalizationManager LOCALIZATIONMANAGER;
+    private final CurseCreateModpack CURSECREATEMODPACK;
 
     /**
      * <strong>Constructor</strong><p>
@@ -136,23 +135,23 @@ public class Configuration {
      */
     public Configuration(LocalizationManager injectedLocalizationManager, CurseCreateModpack injectedCurseCreateModpack) {
         if (injectedLocalizationManager == null) {
-            this.localizationManager = new LocalizationManager();
+            this.LOCALIZATIONMANAGER = new LocalizationManager();
         } else {
-            this.localizationManager = injectedLocalizationManager;
+            this.LOCALIZATIONMANAGER = injectedLocalizationManager;
         }
 
         if (injectedCurseCreateModpack == null) {
-            this.curseCreateModpack = new CurseCreateModpack(localizationManager);
+            this.CURSECREATEMODPACK = new CurseCreateModpack(LOCALIZATIONMANAGER);
         } else {
-            this.curseCreateModpack = injectedCurseCreateModpack;
+            this.CURSECREATEMODPACK = injectedCurseCreateModpack;
         }
     }
 
-    private final File oldConfigFile = new File("creator.conf");
-    private final File configFile = new File("serverpackcreator.conf");
+    private final File FILE_CONFIG_OLD = new File("creator.conf");
+    private final File FILE_CONFIG = new File("serverpackcreator.conf");
 
-    //-- If you wish to expand this list, fork this repository, make your changes, and submit a PR -------------------------
-    private final List<String> fallbackModsList = Arrays.asList(
+    // If you wish to expand this list, fork this repository, make your changes, and submit a PR.
+    private final List<String> FALLBACKMODSLIST = Arrays.asList(
             "AmbientSounds",
             "BackTools",
             "BetterAdvancement",
@@ -202,12 +201,10 @@ public class Configuration {
 
     private Config config;
 
-    private ObjectMapper objectMapper = new ObjectMapper();
-
     public ObjectMapper getObjectMapper() {
-        this.objectMapper = new ObjectMapper();
-        this.objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
-        this.objectMapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
+        ObjectMapper objectMapper = new ObjectMapper();
+        objectMapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
+        objectMapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
         return objectMapper;
     }
 
@@ -216,7 +213,7 @@ public class Configuration {
      * @return File. Returns the creator.conf-file for use in {@link #writeConfigToFile(String, String, String, boolean, String, String, String, String, boolean, boolean, boolean, boolean, File, boolean)}
      */
     public File getOldConfigFile() {
-        return oldConfigFile;
+        return FILE_CONFIG_OLD;
     }
 
     /**
@@ -227,7 +224,7 @@ public class Configuration {
      * {@link #writeConfigToFile(String, String, String, boolean, String, String, String, String, boolean, boolean, boolean, boolean, File, boolean)}
      */
     public File getConfigFile() {
-        return configFile;
+        return FILE_CONFIG;
     }
 
     /**
@@ -239,7 +236,7 @@ public class Configuration {
         String minecraftManifest = "https://launchermeta.mojang.com/mc/game/version_manifest.json";
         try {
             minecraftURL = new URL(minecraftManifest); }
-        catch (IOException ex) { appLogger.error(ex); }
+        catch (IOException ex) { LOG.error(ex); }
         return minecraftURL;
     }
 
@@ -252,7 +249,7 @@ public class Configuration {
         String forgeManifest = "https://files.minecraftforge.net/net/minecraftforge/forge/maven-metadata.json";
         try {
             forgeURL = new URL(forgeManifest); }
-        catch (IOException ex) { appLogger.error(ex); }
+        catch (IOException ex) { LOG.error(ex); }
         return forgeURL;
     }
 
@@ -265,7 +262,7 @@ public class Configuration {
         String fabricManifest = "https://maven.fabricmc.net/net/fabricmc/fabric-loader/maven-metadata.xml";
         try {
             fabricURL = new URL(fabricManifest); }
-        catch (IOException ex) { appLogger.error(ex); }
+        catch (IOException ex) { LOG.error(ex); }
         return fabricURL;
     }
 
@@ -289,7 +286,7 @@ public class Configuration {
         try {
             this.config = ConfigFactory.parseFile(newConfig);
         } catch (ConfigException ex) {
-            appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.checkconfig.start"));
+            LOG.error(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.error.checkconfig.start"));
         }
     }
 
@@ -298,7 +295,7 @@ public class Configuration {
      * @return List String. Returns the fallback clientside-only mods-list for use in {@link #checkConfigFile(File, boolean)}
      */
     List<String> getFallbackModsList() {
-        return fallbackModsList;
+        return FALLBACKMODSLIST;
     }
 
     /**
@@ -337,13 +334,8 @@ public class Configuration {
      */
     void setCopyDirs(List<String> newCopyDirs) {
         for (int i = 0; i < newCopyDirs.size(); i++) {
-            if (newCopyDirs.get(i).equalsIgnoreCase("server_pack")) {
-                newCopyDirs.remove(i);
-            }
+            newCopyDirs.removeIf(n -> (n.equalsIgnoreCase("server_pack")));
         }
-
-//        String string_server_pack = "server_pack";
-//        newCopyDirs.removeIf(n -> Objects.equals(n, string_server_pack));
         this.copyDirs = newCopyDirs;
     }
 
@@ -588,15 +580,15 @@ public class Configuration {
      */
     public boolean checkConfigFile(File configFile, boolean shouldModpackBeCreated) {
         boolean configHasError = false;
-        appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.checkconfig.start"));
+        LOG.info(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.info.checkconfig.start"));
         try {
             setConfig(configFile);
         } catch (ConfigException ex) {
-            appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.checkconfig.start"));
+            LOG.error(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.error.checkconfig.start"));
         }
 
         if (getConfig().getStringList("clientMods").isEmpty()) {
-            appLogger.warn(localizationManager.getLocalizedString("configcheck.log.warn.checkconfig.clientmods"));
+            LOG.warn(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.warn.checkconfig.clientmods"));
             setClientMods(getFallbackModsList());
         } else {
             setClientMods(getConfig().getStringList("clientMods"));
@@ -613,7 +605,7 @@ public class Configuration {
             if (shouldModpackBeCreated) {
                 configHasError = isCurse();
             } else {
-                appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.checkconfig.skipmodpackcreation"));
+                LOG.info(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.info.checkconfig.skipmodpackcreation"));
             }
         } else {
             configHasError = true;
@@ -633,9 +625,9 @@ public class Configuration {
                 getIncludeZipCreation());
 
         if (!configHasError) {
-            appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.checkconfig.success"));
+            LOG.info(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.info.checkconfig.success"));
         } else {
-            appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.checkconfig.failure"));
+            LOG.error(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.error.checkconfig.failure"));
         }
         return configHasError;
     }
@@ -711,11 +703,11 @@ public class Configuration {
             } else { configHasError = true; }
 
         } else {
-            appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.checkconfig.skipstart"));
-            appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.checkconfig.skipjava"));
-            appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.checkconfig.skipminecraft"));
-            appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.checkconfig.skipmodlaoder"));
-            appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.checkconfig.skipmodloaderversion"));
+            LOG.info(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.info.checkconfig.skipstart"));
+            LOG.info(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.info.checkconfig.skipjava"));
+            LOG.info(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.info.checkconfig.skipminecraft"));
+            LOG.info(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.info.checkconfig.skipmodlaoder"));
+            LOG.info(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.info.checkconfig.skipmodloaderversion"));
         }
         return configHasError;
     }
@@ -755,22 +747,22 @@ public class Configuration {
                 try { projectName = CurseAPI.project(getProjectID()).get().name();
 
                     try { displayName = Objects.requireNonNull(CurseAPI.project(getProjectID()).get().files().fileWithID(getProjectFileID())).displayName(); }
-                    catch (NullPointerException npe) { appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.iscurse.display"));
+                    catch (NullPointerException npe) { LOG.info(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.info.iscurse.display"));
 
                         try { displayName = Objects.requireNonNull(CurseAPI.project(getProjectID()).get().files().fileWithID(getProjectFileID())).nameOnDisk(); }
                         catch (NullPointerException npe2) {
-                            appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.iscurse.file"), npe2);
+                            LOG.error(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.error.iscurse.file"), npe2);
                             displayName = null;
                         }
                     }
-                } catch (CurseException cex) { appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.iscurse.curseforge")); }
+                } catch (CurseException cex) { LOG.error(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.error.iscurse.curseforge")); }
 
 
                 if (displayName != null && projectName != null) {
 
                     setModpackDir(String.format("./%s/%s", projectName, displayName));
 
-                    if (curseCreateModpack.curseForgeModpack(getModpackDir(), getProjectID(), getProjectFileID())) {
+                    if (CURSECREATEMODPACK.curseForgeModpack(getModpackDir(), getProjectID(), getProjectFileID())) {
                         try {
                             byte[] jsonData = Files.readAllBytes(Paths.get(String.format("%s/manifest.json", getModpackDir())));
 
@@ -790,7 +782,7 @@ public class Configuration {
                                     .replace("[", ""));
 
                             if (containsFabric(modpack)) {
-                                appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.iscurse.fabric"));
+                                LOG.info(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.info.iscurse.fabric"));
 
                                 setModLoader("Fabric");
                                 setModLoaderVersion(latestFabricLoader(getModpackDir()));
@@ -802,7 +794,7 @@ public class Configuration {
 
                             }
                         } catch (IOException ex) {
-                            appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.iscurse.json"), ex);
+                            LOG.error(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.error.iscurse.json"), ex);
                         }
 
                         if (checkJavaPath(getConfig().getString("javaPath").replace("\\", "/"))) {
@@ -819,7 +811,7 @@ public class Configuration {
                         }
                         setCopyDirs(suggestCopyDirs(getModpackDir()));
 
-                        appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.iscurse.replace"));
+                        LOG.info(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.info.iscurse.replace"));
 
                         writeConfigToFile(
                                 getModpackDir(),
@@ -843,7 +835,7 @@ public class Configuration {
             } else { configHasError = true; }
 
         } catch (CurseException cex) {
-            appLogger.error(String.format(localizationManager.getLocalizedString("configcheck.log.error.iscurse.project"), getProjectID()), cex);
+            LOG.error(String.format(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.error.iscurse.project"), getProjectID()), cex);
             configHasError = true;
         }
         return configHasError;
@@ -864,7 +856,7 @@ public class Configuration {
             String[] mods = modpack.getFiles().get(i).toString().split(",");
 
             if (mods[0].equalsIgnoreCase("361988") || mods[0].equalsIgnoreCase("306612")) {
-                appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.containsfabric"));
+                LOG.info(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.info.containsfabric"));
                 hasJumploader = true;
             }
         }
@@ -881,9 +873,9 @@ public class Configuration {
      * directories.
      */
     List<String> suggestCopyDirs(String modpackDir) {
-        appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.suggestcopydirs.start"));
+        LOG.info(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.info.suggestcopydirs.start"));
 
-        List<String> dirsNotToCopy = new ArrayList<String>(Arrays.asList(
+        List<String> dirsNotToCopy = new ArrayList<>(Arrays.asList(
                 "overrides",
                 "packmenu",
                 "resourcepacks",
@@ -902,7 +894,7 @@ public class Configuration {
                 }
             }
         } catch (NullPointerException np) {
-            appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.suggestcopydirs"));
+            LOG.error(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.error.suggestcopydirs"));
         }
 
         for (int idirs = 0; idirs < dirsNotToCopy.size(); idirs++) {
@@ -940,7 +932,7 @@ public class Configuration {
                     configCorrect = true;
                 }
             } catch (CurseException cex) {
-                appLogger.error(String.format(localizationManager.getLocalizedString("configcheck.log.error.iscurse.project"), curseProjectID),cex);
+                LOG.error(String.format(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.error.iscurse.project"), curseProjectID),cex);
                 configCorrect = false;
             }
 
@@ -950,16 +942,16 @@ public class Configuration {
                     configCorrect = true;
                 }
             } catch (CurseException cex) {
-                appLogger.error(String.format(localizationManager.getLocalizedString("configcheck.log.error.iscurse.file"), curseFileID), cex);
+                LOG.error(String.format(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.error.iscurse.file"), curseFileID), cex);
                 configCorrect = false;
             }
 
-            appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.checkcurseforge.info"));
-            appLogger.info(String.format(localizationManager.getLocalizedString("configcheck.log.info.checkcurseforge.return"), getProjectID(), getProjectFileID()));
-            appLogger.warn(localizationManager.getLocalizedString("configcheck.log.warn.checkcurseforge.warn"));
+            LOG.info(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.info.checkcurseforge.info"));
+            LOG.info(String.format(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.info.checkcurseforge.return"), getProjectID(), getProjectFileID()));
+            LOG.warn(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.warn.checkcurseforge.warn"));
 
 
-        } else { appLogger.warn(localizationManager.getLocalizedString("configcheck.log.warn.checkcurseforge.warn2")); }
+        } else { LOG.warn(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.warn.checkcurseforge.warn2")); }
 
         return configCorrect;
     }
@@ -992,9 +984,9 @@ public class Configuration {
                 stringBoolean.matches("1")      ||
                 stringBoolean.matches("[Yy]es") ||
                 stringBoolean.matches("[Yy]")   ||
-                stringBoolean.matches(localizationManager.getLocalizedString("cli.input.true")) ||
-                stringBoolean.matches(localizationManager.getLocalizedString("cli.input.yes"))  ||
-                stringBoolean.matches(localizationManager.getLocalizedString("cli.input.yes.short"))
+                stringBoolean.matches(LOCALIZATIONMANAGER.getLocalizedString("cli.input.true")) ||
+                stringBoolean.matches(LOCALIZATIONMANAGER.getLocalizedString("cli.input.yes"))  ||
+                stringBoolean.matches(LOCALIZATIONMANAGER.getLocalizedString("cli.input.yes.short"))
         ){
             returnBoolean = true;
 
@@ -1002,14 +994,14 @@ public class Configuration {
                 stringBoolean.matches("0")           ||
                 stringBoolean.matches("[Nn]o")       ||
                 stringBoolean.matches("[Nn]" )       ||
-                stringBoolean.matches(localizationManager.getLocalizedString("cli.input.false")) ||
-                stringBoolean.matches(localizationManager.getLocalizedString("cli.input.no"))    ||
-                stringBoolean.matches(localizationManager.getLocalizedString("cli.input.no.short"))
+                stringBoolean.matches(LOCALIZATIONMANAGER.getLocalizedString("cli.input.false")) ||
+                stringBoolean.matches(LOCALIZATIONMANAGER.getLocalizedString("cli.input.no"))    ||
+                stringBoolean.matches(LOCALIZATIONMANAGER.getLocalizedString("cli.input.no.short"))
         ){
             returnBoolean = false;
 
         } else {
-            appLogger.warn(localizationManager.getLocalizedString("configcheck.log.warn.converttoboolean.warn"));
+            LOG.warn(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.warn.converttoboolean.warn"));
             returnBoolean = false;
         }
 
@@ -1048,39 +1040,41 @@ public class Configuration {
                      boolean includeScripts,
                      boolean includeZip) {
 
-        appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.printconfig.start"));
-        appLogger.info(String.format(localizationManager.getLocalizedString("configcheck.log.info.printconfig.modpackdir"), modpackDirectory));
+        LOG.info(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.info.printconfig.start"));
+        LOG.info(String.format(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.info.printconfig.modpackdir"), modpackDirectory));
 
         if (clientsideMods.isEmpty()) {
-            appLogger.warn(localizationManager.getLocalizedString("configcheck.log.warn.printconfig.noclientmods"));
+            LOG.warn(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.warn.printconfig.noclientmods"));
         } else {
 
-            appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.printconfig.clientmods"));
-            for (int i = 0; i < clientsideMods.size(); i++) {
-                appLogger.info(String.format("    %s", clientsideMods.get(i))); }
+            LOG.info(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.info.printconfig.clientmods"));
+            for (String mod : clientsideMods) {
+                LOG.info(String.format("    %s", mod));
+            }
 
         }
 
-        appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.printconfig.copydirs"));
+        LOG.info(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.info.printconfig.copydirs"));
 
         if (copyDirectories != null) {
 
-            for (int i = 0; i < copyDirectories.size(); i++) {
-                appLogger.info(String.format("    %s", copyDirectories.get(i))); }
+            for (String directory : copyDirectories) {
+                LOG.info(String.format("    %s", directory));
+            }
 
         } else {
-            appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.printconfig.copydirs"));
+            LOG.error(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.error.printconfig.copydirs"));
         }
 
-        appLogger.info(String.format(localizationManager.getLocalizedString("configcheck.log.info.printconfig.server"), installServer));
-        appLogger.info(String.format(localizationManager.getLocalizedString("configcheck.log.info.printconfig.javapath"), javaInstallPath));
-        appLogger.info(String.format(localizationManager.getLocalizedString("configcheck.log.info.printconfig.minecraftversion"), minecraftVer));
-        appLogger.info(String.format(localizationManager.getLocalizedString("configcheck.log.info.printconfig.modloader"), modloader));
-        appLogger.info(String.format(localizationManager.getLocalizedString("configcheck.log.info.printconfig.modloaderversion"), modloaderVersion));
-        appLogger.info(String.format(localizationManager.getLocalizedString("configcheck.log.info.printconfig.icon"), includeIcon));
-        appLogger.info(String.format(localizationManager.getLocalizedString("configcheck.log.info.printconfig.properties"), includeProperties));
-        appLogger.info(String.format(localizationManager.getLocalizedString("configcheck.log.info.printconfig.scripts"), includeScripts));
-        appLogger.info(String.format(localizationManager.getLocalizedString("configcheck.log.info.printconfig.zip"), includeZip));
+        LOG.info(String.format(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.info.printconfig.server"), installServer));
+        LOG.info(String.format(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.info.printconfig.javapath"), javaInstallPath));
+        LOG.info(String.format(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.info.printconfig.minecraftversion"), minecraftVer));
+        LOG.info(String.format(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.info.printconfig.modloader"), modloader));
+        LOG.info(String.format(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.info.printconfig.modloaderversion"), modloaderVersion));
+        LOG.info(String.format(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.info.printconfig.icon"), includeIcon));
+        LOG.info(String.format(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.info.printconfig.properties"), includeProperties));
+        LOG.info(String.format(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.info.printconfig.scripts"), includeScripts));
+        LOG.info(String.format(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.info.printconfig.zip"), includeZip));
     }
 
     /**
@@ -1096,11 +1090,11 @@ public class Configuration {
 
         if (modpackDir.equals("")) {
 
-            appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.checkmodpackdir"));
+            LOG.error(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.error.checkmodpackdir"));
 
         } else if (!(new File(modpackDir).isDirectory())) {
 
-            appLogger.warn(String.format(localizationManager.getLocalizedString("configcheck.log.warn.checkmodpackdir"), modpackDir));
+            LOG.warn(String.format(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.warn.checkmodpackdir"), modpackDir));
 
         } else {
 
@@ -1115,29 +1109,29 @@ public class Configuration {
      * prints a message to the console and serverpackcreator.log if it is.<br>
      * Checks whether all directories in the list exist in the modpack directory and prints a message to the console
      * and serverpackcreator.log if any one of the directories could not be found.
-     * @param copyDirs List String. The list of directories to check for existence.
+     * @param directoriesToCopy List String. The list of directories to check for existence.
      * @param modpackDir String. The path to the modpack directory in which to check for existence of the passed list of
      *                  directories.
      * @return Boolean. Returns true if every directory was found in the modpack directory. If any single one was not found,
      * false is returned.
      */
-    boolean checkCopyDirs(List<String> copyDirs, String modpackDir) {
+    boolean checkCopyDirs(List<String> directoriesToCopy, String modpackDir) {
         boolean configCorrect = true;
 
-        if (copyDirs.isEmpty()) {
+        if (directoriesToCopy.isEmpty()) {
 
-            appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.checkcopydirs.empty"));
+            LOG.error(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.error.checkcopydirs.empty"));
             configCorrect = false;
 
         } else {
 
-            for (int i = 0; i < copyDirs.size(); i++) {
+            for (String directory : directoriesToCopy) {
 
-                File directory = new File(String.format("%s/%s", modpackDir, copyDirs.get(i)));
+                File dirToCheck = new File(String.format("%s/%s", modpackDir, directory));
 
-                if (!directory.exists() || !directory.isDirectory()) {
+                if (!dirToCheck.exists() || !dirToCheck.isDirectory()) {
 
-                    appLogger.error(String.format(localizationManager.getLocalizedString("configcheck.log.error.checkcopydirs.notfound"), directory.getAbsolutePath()));
+                    LOG.error(String.format(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.error.checkcopydirs.notfound"), dirToCheck.getAbsolutePath()));
                     configCorrect = false;
                 }
             }
@@ -1158,7 +1152,7 @@ public class Configuration {
 
         if (enteredPath.equals("")) {
 
-            appLogger.warn(localizationManager.getLocalizedString("configcheck.log.warn.getjavapath.empty"));
+            LOG.warn(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.warn.getjavapath.empty"));
             autoJavaPath = String.format("%s/bin/java",System.getProperty("java.home").replace("\\", "/"));
 
             if (autoJavaPath.startsWith("C:")) {
@@ -1166,12 +1160,12 @@ public class Configuration {
                 autoJavaPath = String.format("%s.exe", autoJavaPath);
             }
 
-            appLogger.warn(String.format(localizationManager.getLocalizedString("configcheck.log.warn.getjavapath.set"), autoJavaPath));
+            LOG.warn(String.format(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.warn.getjavapath.set"), autoJavaPath));
             return autoJavaPath;
 
         } else {
 
-            appLogger.info(String.format(localizationManager.getLocalizedString("configcheck.log.warn.getjavapath.set"), enteredPath));
+            LOG.info(String.format(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.warn.getjavapath.set"), enteredPath));
             return enteredPath;
         }
     }
@@ -1193,7 +1187,7 @@ public class Configuration {
             configCorrect = true;
 
         } else {
-            appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.checkjavapath"));
+            LOG.error(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.error.checkjavapath"));
         }
         return configCorrect;
     }
@@ -1212,7 +1206,7 @@ public class Configuration {
 
         } else {
 
-            appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.checkmodloader"));
+            LOG.error(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.error.checkmodloader"));
         }
         return configCorrect;
     }
@@ -1261,7 +1255,7 @@ public class Configuration {
             isVersionCorrect = true;
 
         } else {
-            appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.checkmodloaderversion"));
+            LOG.error(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.error.checkmodloaderversion"));
         }
         return isVersionCorrect;
     }
@@ -1283,22 +1277,22 @@ public class Configuration {
                     downloadManifestOutputStream = new FileOutputStream("mcmanifest.json");
                 } catch (FileNotFoundException ex) {
 
-                    appLogger.debug(localizationManager.getLocalizedString("configcheck.log.debug.isminecraftversioncorrect"), ex);
+                    LOG.debug(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.debug.isminecraftversioncorrect"), ex);
 
                     File file = new File("mcmanifest.json");
 
                     if (!file.exists()) {
 
-                        appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.isminecraftversioncorrect.create"));
+                        LOG.info(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.info.isminecraftversioncorrect.create"));
                         boolean jsonCreated = file.createNewFile();
 
                         if (jsonCreated) {
 
-                            appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.isminecraftversioncorrect.created"));
+                            LOG.info(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.info.isminecraftversioncorrect.created"));
 
                         } else {
 
-                            appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.isminecraftversioncorrect.parse"));
+                            LOG.error(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.error.isminecraftversioncorrect.parse"));
                         }
                     }
                     downloadManifestOutputStream = new FileOutputStream("mcmanifest.json");
@@ -1326,11 +1320,11 @@ public class Configuration {
                 return contains;
             } catch (Exception ex) {
 
-                appLogger.error(String.format(localizationManager.getLocalizedString("configcheck.log.error.isminecraftversioncorrect.validate"), minecraftVersion), ex);
+                LOG.error(String.format(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.error.isminecraftversioncorrect.validate"), minecraftVersion), ex);
                 return false;
             }
         } else {
-            appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.isminecraftversioncorrect.empty"));
+            LOG.error(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.error.isminecraftversioncorrect.empty"));
             return false;
         }
     }
@@ -1354,20 +1348,20 @@ public class Configuration {
                     downloadManifestOutputStream = new FileOutputStream("fabric-manifest.xml");
                 } catch (FileNotFoundException ex) {
 
-                    appLogger.debug(localizationManager.getLocalizedString("configcheck.log.debug.isfabricversioncorrect"), ex);
+                    LOG.debug(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.debug.isfabricversioncorrect"), ex);
                     File file = new File("fabric-manifest.xml");
 
                     if (!file.exists()) {
 
-                        appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.isfabricversioncorrect.create"));
+                        LOG.info(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.info.isfabricversioncorrect.create"));
                         boolean jsonCreated = file.createNewFile();
 
                         if (jsonCreated) {
 
-                            appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.isfabricversioncorrect.created"));
+                            LOG.info(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.info.isfabricversioncorrect.created"));
 
                         } else {
-                            appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.isfabricversioncorrect.parse"));
+                            LOG.error(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.error.isfabricversioncorrect.parse"));
                         }
                     }
                     downloadManifestOutputStream = new FileOutputStream("fabric-manifest.xml");
@@ -1410,13 +1404,13 @@ public class Configuration {
 
             } catch (Exception ex) {
 
-                appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.isfabricversioncorrect.validate"), ex);
+                LOG.error(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.error.isfabricversioncorrect.validate"), ex);
                 return false;
             }
 
         } else {
 
-            appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.isfabricversioncorrect.empty"));
+            LOG.error(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.error.isfabricversioncorrect.empty"));
             return false;
         }
     }
@@ -1440,21 +1434,21 @@ public class Configuration {
 
                 } catch (FileNotFoundException ex) {
 
-                    appLogger.debug(localizationManager.getLocalizedString("configcheck.log.debug.isforgeversioncorrect"), ex);
+                    LOG.debug(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.debug.isforgeversioncorrect"), ex);
                     File file = new File("forge-manifest.json");
 
                     if (!file.exists()) {
 
-                        appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.isforgeversioncorrect.create"));
+                        LOG.info(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.info.isforgeversioncorrect.create"));
 
                         boolean jsonCreated = file.createNewFile();
 
                         if (jsonCreated) {
 
-                            appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.isforgeversioncorrect.created"));
+                            LOG.info(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.info.isforgeversioncorrect.created"));
                         } else {
 
-                            appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.isforgeversioncorrect.parse"));
+                            LOG.error(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.error.isforgeversioncorrect.parse"));
                         }
                     }
                     downloadManifestOutputStream = new FileOutputStream("forge-manifest.json");
@@ -1496,12 +1490,12 @@ public class Configuration {
 
             } catch (Exception ex) {
 
-                appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.isforgeversioncorrect.validate"), ex);
+                LOG.error(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.error.isforgeversioncorrect.validate"), ex);
                 return false;
             }
         } else {
 
-            appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.isforgeversioncorrect.empty"));
+            LOG.error(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.error.isforgeversioncorrect.empty"));
             return false;
         }
     }
@@ -1513,9 +1507,9 @@ public class Configuration {
      *                   directory.
      * @return Boolean. Returns true if the download was successful. False if not.
      */
-    @SuppressWarnings({"ReturnInsideFinallyBlock", "finally"})
     String latestFabricLoader(String modpackDir) {
         String result = "0.11.3";
+
         try {
             URL downloadFabricXml = getFabricManifestUrl();
             ReadableByteChannel downloadFabricXmlReadableByteChannel = Channels.newChannel(downloadFabricXml.openStream());
@@ -1536,12 +1530,16 @@ public class Configuration {
             XPath xpath = xPathFactory.newXPath();
 
             result = (String) xpath.evaluate("/metadata/versioning/release", fabricXml, XPathConstants.STRING);
-            appLogger.info(localizationManager.getLocalizedString("configcheck.log.info.latestfabricloader.created"));
+
+            LOG.info(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.info.latestfabricloader.created"));
+
         } catch (IOException | ParserConfigurationException | SAXException | XPathExpressionException ex) {
-            appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.latestfabricloader.parse"), ex);
-        } finally {
-            return result;
+
+            LOG.error(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.error.latestfabricloader.parse"), ex);
         }
+
+        return result;
+
     }
 
     /**
@@ -1593,145 +1591,146 @@ public class Configuration {
 
         Scanner reader = new Scanner(System.in);
 
-        appLogger.info(String.format(localizationManager.getLocalizedString("clisetup.log.info.start"), "-cgen"));
+        LOG.info(String.format(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.start"), "-cgen"));
         do {
 //--------------------------------------------------------------------------------------------MODPACK DIRECTORY---------
-            appLogger.info(localizationManager.getLocalizedString("clisetup.log.info.modpack.enter"));
-            appLogger.info(localizationManager.getLocalizedString("clisetup.log.info.modpack.example"));
+            LOG.info(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.modpack.enter"));
+            LOG.info(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.modpack.example"));
 
             do {
 
                 do {
-                    System.out.print(localizationManager.getLocalizedString("clisetup.log.info.modpack.cli"));
+                    System.out.print(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.modpack.cli"));
                     tmpModpackDir = reader.nextLine();
                 } while (!checkModpackDir(tmpModpackDir));
 
-                appLogger.info(String.format(localizationManager.getLocalizedString("clisetup.log.info.checkreturn"), tmpModpackDir));
-                appLogger.info(localizationManager.getLocalizedString("clisetup.log.info.modpack.checkreturninfo"));
-                System.out.print(localizationManager.getLocalizedString("clisetup.log.info.answer"));
+                LOG.info(String.format(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.checkreturn"), tmpModpackDir));
+                LOG.info(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.modpack.checkreturninfo"));
+                System.out.print(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.answer"));
 
             } while (!readBoolean());
 
             modpackDir = tmpModpackDir.replace("\\", "/");
-            appLogger.info(String.format(localizationManager.getLocalizedString("clisetup.log.info.checkreturn"), modpackDir));
+            LOG.info(String.format(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.checkreturn"), modpackDir));
             System.out.println();
 
 //-----------------------------------------------------------------------------------------CLIENTSIDE-ONLY MODS---------
-            appLogger.info(localizationManager.getLocalizedString("clisetup.log.info.clientmods.enter"));
+            LOG.info(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.clientmods.enter"));
             do {
                 clientMods.addAll(readStringArray());
-                appLogger.info(String.format(localizationManager.getLocalizedString("clisetup.log.info.checkreturn"), clientMods));
+                LOG.info(String.format(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.checkreturn"), clientMods));
 
                 if (clientMods.isEmpty()) {
                     clientMods = getFallbackModsList();
-                    appLogger.warn(localizationManager.getLocalizedString("configcheck.log.warn.checkconfig.clientmods"));
+                    LOG.warn(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.warn.checkconfig.clientmods"));
 
-                    for (int i = 0; i < clientMods.size(); i++) {
-                        appLogger.warn(String.format("    %s", clientMods.get(i))); }
+                    for (String mod : clientMods) {
+                        LOG.warn(String.format("    %s", mod));
+                    }
                 }
 
-                appLogger.info(localizationManager.getLocalizedString("clisetup.log.info.clientmods.checkreturninfo"));
-                System.out.print(localizationManager.getLocalizedString("clisetup.log.info.answer"));
+                LOG.info(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.clientmods.checkreturninfo"));
+                System.out.print(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.answer"));
 
             } while (!readBoolean());
-            appLogger.info(String.format(localizationManager.getLocalizedString("clisetup.log.info.checkreturn"), clientMods));
+            LOG.info(String.format(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.checkreturn"), clientMods));
             tmpClientMods = new String[clientMods.size()];
             clientMods.toArray(tmpClientMods);
             System.out.println();
 
 //---------------------------------------------------------------------------DIRECTORIES TO COPY TO SERVER PACK---------
-            appLogger.info(localizationManager.getLocalizedString("clisetup.log.info.copydirs.enter"));
+            LOG.info(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.copydirs.enter"));
             File directories = new File(modpackDir);
             List<String> dirList = Arrays.asList(Objects.requireNonNull(directories.list((current, name) -> new File(current, name).isDirectory())));
-            appLogger.info(String.format(localizationManager.getLocalizedString("clisetup.log.info.copydirs.dirsinmodpack"), dirList.toString().replace("[","").replace("]","")));
+            LOG.info(String.format(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.copydirs.dirsinmodpack"), dirList.toString().replace("[","").replace("]","")));
             do {
                 do {
                     copyDirs.clear();
-                    appLogger.info(localizationManager.getLocalizedString("clisetup.log.info.copydirs.specify"));
+                    LOG.info(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.copydirs.specify"));
                     copyDirs.addAll(readStringArray());
 
                 } while (!checkCopyDirs(copyDirs, modpackDir));
 
-                appLogger.info(String.format(localizationManager.getLocalizedString("clisetup.log.info.checkreturn"), copyDirs));
-                appLogger.info(localizationManager.getLocalizedString("clisetup.log.info.copydirs.checkreturninfo"));
-                System.out.print(localizationManager.getLocalizedString("clisetup.log.info.answer"));
+                LOG.info(String.format(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.checkreturn"), copyDirs));
+                LOG.info(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.copydirs.checkreturninfo"));
+                System.out.print(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.answer"));
             } while (!readBoolean());
-            appLogger.info(String.format(localizationManager.getLocalizedString("clisetup.log.info.checkreturn"), copyDirs));
+            LOG.info(String.format(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.checkreturn"), copyDirs));
             tmpCopyDirs = new String[copyDirs.size()];
             copyDirs.toArray(tmpCopyDirs);
             System.out.println();
 
 //-------------------------------------------------------------WHETHER TO INCLUDE MODLOADER SERVER INSTALLATION---------
-            appLogger.info(localizationManager.getLocalizedString("clisetup.log.info.server.enter"));
-            System.out.print(localizationManager.getLocalizedString("clisetup.log.info.server.include"));
+            LOG.info(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.server.enter"));
+            System.out.print(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.server.include"));
             includeServerInstallation = readBoolean();
-            appLogger.info(String.format(localizationManager.getLocalizedString("clisetup.log.info.checkreturn"), includeServerInstallation));
+            LOG.info(String.format(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.checkreturn"), includeServerInstallation));
 
 //-------------------------------------------------------------------------------MINECRAFT VERSION MODPACK USES---------
-            appLogger.info(localizationManager.getLocalizedString("clisetup.log.info.minecraft.enter"));
+            LOG.info(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.minecraft.enter"));
             do {
-                System.out.print(localizationManager.getLocalizedString("clisetup.log.info.minecraft.specify"));
+                System.out.print(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.minecraft.specify"));
                 minecraftVersion = reader.nextLine();
             } while (!isMinecraftVersionCorrect(minecraftVersion));
-            appLogger.info(String.format(localizationManager.getLocalizedString("clisetup.log.info.checkreturn"), minecraftVersion));
+            LOG.info(String.format(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.checkreturn"), minecraftVersion));
             System.out.println();
 
 //---------------------------------------------------------------------------------------MODLOADER MODPACK USES---------
-            appLogger.info(localizationManager.getLocalizedString("clisetup.log.info.modloader.enter"));
+            LOG.info(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.modloader.enter"));
             do {
-                System.out.print(localizationManager.getLocalizedString("clisetup.log.info.modloader.cli"));
+                System.out.print(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.modloader.cli"));
                 modLoader = reader.nextLine();
             } while (!checkModloader(modLoader));
             modLoader = setModLoaderCase(modLoader);
-            appLogger.info(String.format(localizationManager.getLocalizedString("clisetup.log.info.checkreturn"), modLoader));
+            LOG.info(String.format(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.checkreturn"), modLoader));
             System.out.println();
 
 //----------------------------------------------------------------------------VERSION OF MODLOADER MODPACK USES---------
-            appLogger.info(String.format(localizationManager.getLocalizedString("clisetup.log.info.modloaderversion.enter"), modLoader));
+            LOG.info(String.format(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.modloaderversion.enter"), modLoader));
             do {
-                System.out.print(localizationManager.getLocalizedString("clisetup.log.info.modloaderversion.cli"));
+                System.out.print(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.modloaderversion.cli"));
                 modLoaderVersion = reader.nextLine();
             } while (!checkModloaderVersion(modLoader, modLoaderVersion));
-            appLogger.info(String.format(localizationManager.getLocalizedString("clisetup.log.info.checkreturn"), modLoaderVersion));
+            LOG.info(String.format(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.checkreturn"), modLoaderVersion));
             System.out.println();
 
 //------------------------------------------------------------------------------------PATH TO JAVA INSTALLATION---------
-            appLogger.info(localizationManager.getLocalizedString("clisetup.log.info.java.enter"));
-            appLogger.info(localizationManager.getLocalizedString("clisetup.log.info.java.enter2"));
-            appLogger.info(localizationManager.getLocalizedString("clisetup.log.info.java.example"));
+            LOG.info(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.java.enter"));
+            LOG.info(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.java.enter2"));
+            LOG.info(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.java.example"));
             do {
-                System.out.print(localizationManager.getLocalizedString("clisetup.log.info.java.cli"));
+                System.out.print(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.java.cli"));
                 String tmpJavaPath = reader.nextLine();
                 javaPath = getJavaPathFromSystem(tmpJavaPath);
             } while (!checkJavaPath(javaPath));
             System.out.println();
 
 //------------------------------------------------------------WHETHER TO INCLUDE SERVER-ICON.PNG IN SERVER PACK---------
-            appLogger.info(localizationManager.getLocalizedString("clisetup.log.info.icon.enter"));
-            System.out.print(localizationManager.getLocalizedString("clisetup.log.info.icon.cli"));
+            LOG.info(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.icon.enter"));
+            System.out.print(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.icon.cli"));
             includeServerIcon = readBoolean();
-            appLogger.info(String.format(localizationManager.getLocalizedString("clisetup.log.info.checkreturn"), includeServerIcon));
+            LOG.info(String.format(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.checkreturn"), includeServerIcon));
             System.out.println();
 
 //----------------------------------------------------------WHETHER TO INCLUDE SERVER.PROPERTIES IN SERVER PACK---------
-            appLogger.info(localizationManager.getLocalizedString("clisetup.log.info.properties.enter"));
-            System.out.print(localizationManager.getLocalizedString("clisetup.log.info.properties.cli"));
+            LOG.info(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.properties.enter"));
+            System.out.print(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.properties.cli"));
             includeServerProperties = readBoolean();
-            appLogger.info(String.format(localizationManager.getLocalizedString("clisetup.log.info.checkreturn"), includeServerProperties));
+            LOG.info(String.format(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.checkreturn"), includeServerProperties));
             System.out.println();
 
 //--------------------------------------------------------------WHETHER TO INCLUDE START SCRIPTS IN SERVER PACK---------
-            appLogger.info(localizationManager.getLocalizedString("clisetup.log.info.scripts.enter"));
-            System.out.print(localizationManager.getLocalizedString("clisetup.log.info.scripts.cli"));
+            LOG.info(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.scripts.enter"));
+            System.out.print(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.scripts.cli"));
             includeStartScripts = readBoolean();
-            appLogger.info(String.format(localizationManager.getLocalizedString("clisetup.log.info.checkreturn"), includeStartScripts));
+            LOG.info(String.format(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.checkreturn"), includeStartScripts));
             System.out.println();
 
 //----------------------------------------------------WHETHER TO INCLUDE CREATION OF ZIP-ARCHIVE OF SERVER PACK---------
-            appLogger.info(localizationManager.getLocalizedString("clisetup.log.info.zip.enter"));
-            System.out.print(localizationManager.getLocalizedString("clisetup.log.info.zip.cli"));
+            LOG.info(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.zip.enter"));
+            System.out.print(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.zip.cli"));
             includeZipCreation = readBoolean();
-            appLogger.info(String.format(localizationManager.getLocalizedString("clisetup.log.info.checkreturn"), includeZipCreation));
+            LOG.info(String.format(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.checkreturn"), includeZipCreation));
 
 //------------------------------------------------------------------------------PRINT CONFIG TO CONSOLE AND LOG---------
             printConfig(modpackDir,
@@ -1746,8 +1745,8 @@ public class Configuration {
                     includeServerProperties,
                     includeStartScripts,
                     includeZipCreation);
-            appLogger.info(localizationManager.getLocalizedString("clisetup.log.info.config.enter"));
-            System.out.print(localizationManager.getLocalizedString("clisetup.log.info.answer"));
+            LOG.info(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.config.enter"));
+            System.out.print(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.answer"));
         } while (!readBoolean());
         reader.close();
 
@@ -1768,7 +1767,7 @@ public class Configuration {
                 getConfigFile(),
                 false
         )) {
-            appLogger.info(localizationManager.getLocalizedString("clisetup.log.info.config.written"));
+            LOG.info(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.info.config.written"));
         }
     }
 
@@ -1819,22 +1818,22 @@ public class Configuration {
                     boolRead.matches("[Yy]es")  ||
                     boolRead.matches("[Yy]")    ||
                     boolRead.matches("1")                                                           ||
-                    boolRead.matches(localizationManager.getLocalizedString("cli.input.true")) ||
-                    boolRead.matches(localizationManager.getLocalizedString("cli.input.yes"))  ||
-                    boolRead.matches(localizationManager.getLocalizedString("cli.input.yes.short"))) {
+                    boolRead.matches(LOCALIZATIONMANAGER.getLocalizedString("cli.input.true")) ||
+                    boolRead.matches(LOCALIZATIONMANAGER.getLocalizedString("cli.input.yes"))  ||
+                    boolRead.matches(LOCALIZATIONMANAGER.getLocalizedString("cli.input.yes.short"))) {
                 return true;
 
             } else if (boolRead.matches("[Ff]alse") ||
                     boolRead.matches("[Nn]o")    ||
                     boolRead.matches("[Nn]" )    ||
                     boolRead.matches("0")                                                            ||
-                    boolRead.matches(localizationManager.getLocalizedString("cli.input.false")) ||
-                    boolRead.matches(localizationManager.getLocalizedString("cli.input.no"))    ||
-                    boolRead.matches(localizationManager.getLocalizedString("cli.input.no.short"))) {
+                    boolRead.matches(LOCALIZATIONMANAGER.getLocalizedString("cli.input.false")) ||
+                    boolRead.matches(LOCALIZATIONMANAGER.getLocalizedString("cli.input.no"))    ||
+                    boolRead.matches(LOCALIZATIONMANAGER.getLocalizedString("cli.input.no.short"))) {
                 return false;
 
             } else {
-                appLogger.error(localizationManager.getLocalizedString("clisetup.log.error.answer"));
+                LOG.error(LOCALIZATIONMANAGER.getLocalizedString("clisetup.log.error.answer"));
             }
         }
     }
@@ -1888,35 +1887,35 @@ public class Configuration {
                         "%s\nincludeServerProperties = %b\n\n" +
                         "%s\nincludeStartScripts = %b\n\n" +
                         "%s\nincludeZipCreation = %b\n",
-                localizationManager.getLocalizedString("filessetup.writeconfigtofile.modpackdir"), modpackDir.replace("\\","/"),
-                localizationManager.getLocalizedString("filessetup.writeconfigtofile.clientmods"), clientMods,
-                localizationManager.getLocalizedString("filessetup.writeconfigtofile.copydirs"), copyDirs,
-                localizationManager.getLocalizedString("filessetup.writeconfigtofile.includeserverinstallation"), includeServer,
-                localizationManager.getLocalizedString("filessetup.writeconfigtofile.javapath"), javaPath.replace("\\","/"),
-                localizationManager.getLocalizedString("filessetup.writeconfigtofile.minecraftversion"), minecraftVersion,
-                localizationManager.getLocalizedString("filessetup.writeconfigtofile.modloader"), modLoader,
-                localizationManager.getLocalizedString("filessetup.writeconfigtofile.modloaderversion"), modLoaderVersion,
-                localizationManager.getLocalizedString("filessetup.writeconfigtofile.includeservericon"), includeIcon,
-                localizationManager.getLocalizedString("filessetup.writeconfigtofile.includeserverproperties"), includeProperties,
-                localizationManager.getLocalizedString("filessetup.writeconfigtofile.includestartscripts"), includeScripts,
-                localizationManager.getLocalizedString("filessetup.writeconfigtofile.includezipcreation"), includeZip
+                LOCALIZATIONMANAGER.getLocalizedString("filessetup.writeconfigtofile.modpackdir"), modpackDir.replace("\\","/"),
+                LOCALIZATIONMANAGER.getLocalizedString("filessetup.writeconfigtofile.clientmods"), clientMods,
+                LOCALIZATIONMANAGER.getLocalizedString("filessetup.writeconfigtofile.copydirs"), copyDirs,
+                LOCALIZATIONMANAGER.getLocalizedString("filessetup.writeconfigtofile.includeserverinstallation"), includeServer,
+                LOCALIZATIONMANAGER.getLocalizedString("filessetup.writeconfigtofile.javapath"), javaPath.replace("\\","/"),
+                LOCALIZATIONMANAGER.getLocalizedString("filessetup.writeconfigtofile.minecraftversion"), minecraftVersion,
+                LOCALIZATIONMANAGER.getLocalizedString("filessetup.writeconfigtofile.modloader"), modLoader,
+                LOCALIZATIONMANAGER.getLocalizedString("filessetup.writeconfigtofile.modloaderversion"), modLoaderVersion,
+                LOCALIZATIONMANAGER.getLocalizedString("filessetup.writeconfigtofile.includeservericon"), includeIcon,
+                LOCALIZATIONMANAGER.getLocalizedString("filessetup.writeconfigtofile.includeserverproperties"), includeProperties,
+                LOCALIZATIONMANAGER.getLocalizedString("filessetup.writeconfigtofile.includestartscripts"), includeScripts,
+                LOCALIZATIONMANAGER.getLocalizedString("filessetup.writeconfigtofile.includezipcreation"), includeZip
         );
 
         if (!isTemporary) {
             if (getConfigFile().exists()) {
                 boolean delConf = getConfigFile().delete();
                 if (delConf) {
-                    appLogger.info(localizationManager.getLocalizedString("filessetup.log.info.writeconfigtofile.config"));
+                    LOG.info(LOCALIZATIONMANAGER.getLocalizedString("filessetup.log.info.writeconfigtofile.config"));
                 } else {
-                    appLogger.error(localizationManager.getLocalizedString("filessetup.log.error.writeconfigtofile.config"));
+                    LOG.error(LOCALIZATIONMANAGER.getLocalizedString("filessetup.log.error.writeconfigtofile.config"));
                 }
             }
             if (getOldConfigFile().exists()) {
                 boolean delOldConf = getOldConfigFile().delete();
                 if (delOldConf) {
-                    appLogger.info(localizationManager.getLocalizedString("filessetup.log.info.writeconfigtofile.old"));
+                    LOG.info(LOCALIZATIONMANAGER.getLocalizedString("filessetup.log.info.writeconfigtofile.old"));
                 } else {
-                    appLogger.error(localizationManager.getLocalizedString("filessetup.log.error.writeconfigtofile.old"));
+                    LOG.error(LOCALIZATIONMANAGER.getLocalizedString("filessetup.log.error.writeconfigtofile.old"));
                 }
             }
         }
@@ -1926,9 +1925,9 @@ public class Configuration {
             writer.write(configString);
             writer.close();
             configWritten = true;
-            appLogger.info(localizationManager.getLocalizedString("filessetup.log.info.writeconfigtofile.confignew"));
+            LOG.info(LOCALIZATIONMANAGER.getLocalizedString("filessetup.log.info.writeconfigtofile.confignew"));
         } catch (IOException ex) {
-            appLogger.error(localizationManager.getLocalizedString("filessetup.log.error.writeconfigtofile"), ex);
+            LOG.error(LOCALIZATIONMANAGER.getLocalizedString("filessetup.log.error.writeconfigtofile"), ex);
         }
 
         return configWritten;
diff --git a/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java b/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
index 99c6930e2..8bedaedac 100644
--- a/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
+++ b/src/main/java/de/griefed/serverpackcreator/CreateServerPack.java
@@ -90,12 +90,11 @@ import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
  * other platforms.
  */
 public class CreateServerPack {
-    private static final Logger appLogger = LogManager.getLogger(FilesSetup.class);
-    private static final Logger installerLogger = LogManager.getLogger("InstallerLogger");
+    private static final Logger LOG = LogManager.getLogger(DefaultFiles.class);
+    private static final Logger LOG_INSTALLER = LogManager.getLogger("InstallerLogger");
 
-    private Configuration configuration;
-    private CurseCreateModpack curseCreateModpack;
-    private LocalizationManager localizationManager;
+    private final Configuration CONFIGURATION;
+    private final LocalizationManager LOCALIZATIONMANAGER;
 
     /**
      * <strong>Constructor</strong><p>
@@ -111,39 +110,40 @@ public class CreateServerPack {
      * CurseForge projectID and fileID, from which to <em>then</em> create the server pack.
      */
     public CreateServerPack(LocalizationManager injectedLocalizationManager, Configuration injectedConfiguration, CurseCreateModpack injectedCurseCreateModpack) {
+        CurseCreateModpack curseCreateModpack;
+
         if (injectedLocalizationManager == null) {
-            this.localizationManager = new LocalizationManager();
+            this.LOCALIZATIONMANAGER = new LocalizationManager();
         } else {
-            this.localizationManager = injectedLocalizationManager;
+            this.LOCALIZATIONMANAGER = injectedLocalizationManager;
         }
 
         if (injectedCurseCreateModpack == null) {
-            this.curseCreateModpack = new CurseCreateModpack(localizationManager);
+            curseCreateModpack = new CurseCreateModpack(LOCALIZATIONMANAGER);
         } else {
-            this.curseCreateModpack = injectedCurseCreateModpack;
+            curseCreateModpack = injectedCurseCreateModpack;
         }
 
         if (injectedConfiguration == null) {
-            this.configuration = new Configuration(localizationManager, curseCreateModpack);
+            this.CONFIGURATION = new Configuration(LOCALIZATIONMANAGER, curseCreateModpack);
         } else {
-            this.configuration = injectedConfiguration;
+            this.CONFIGURATION = injectedConfiguration;
         }
     }
 
-    private final File propertiesFile    = new File("server.properties");
-    private final File iconFile          = new File("server-icon.png");
-    private final File forgeWindowsFile  = new File("start-forge.bat");
-    private final File forgeLinuxFile    = new File("start-forge.sh");
-    private final File fabricWindowsFile = new File("start-fabric.bat");
-    private final File fabricLinuxFile   = new File("start-fabric.sh");
+    private final File FILE_PROPERTIES = new File("server.properties");
+    private final File FILE_ICON = new File("server-icon.png");
+    private final File FILE_FORGE_WINDOWS = new File("start-forge.bat");
+    private final File FILE_FORGE_LINUX = new File("start-forge.sh");
+    private final File FILE_FABRIC_WINDOWS = new File("start-fabric.bat");
+    private final File FILE_FABRIC_LINUX = new File("start-fabric.sh");
 
-    private final String fabricInstallerManifest = "https://maven.fabricmc.net/net/fabricmc/fabric-installer/maven-metadata.xml";
     /**
      * Getter for server.properties.
      * @return Returns the server.properties-file for use in {@link #copyProperties(String)}
      */
     public File getPropertiesFile() {
-        return propertiesFile;
+        return FILE_PROPERTIES;
     }
 
     /**
@@ -151,7 +151,7 @@ public class CreateServerPack {
      * @return Returns the server-icon.png-file for use in {@link #copyIcon(String)}
      */
     public File getIconFile() {
-        return iconFile;
+        return FILE_ICON;
     }
 
     /**
@@ -159,7 +159,7 @@ public class CreateServerPack {
      * @return Returns the start-forge.bat-file for use in {@link #copyStartScripts(String, String, boolean)}
      */
     public File getForgeWindowsFile() {
-        return forgeWindowsFile;
+        return FILE_FORGE_WINDOWS;
     }
 
     /**
@@ -167,7 +167,7 @@ public class CreateServerPack {
      * @return Returns the start-forge.sh-file for use in {@link #copyStartScripts(String, String, boolean)}
      */
     public File getForgeLinuxFile() {
-        return forgeLinuxFile;
+        return FILE_FORGE_LINUX;
     }
 
     /**
@@ -175,7 +175,7 @@ public class CreateServerPack {
      * @return Returns the start-fabric.bat-file for use in {@link #copyStartScripts(String, String, boolean)}
      */
     public File getFabricWindowsFile() {
-        return fabricWindowsFile;
+        return FILE_FABRIC_WINDOWS;
     }
 
     /**
@@ -183,7 +183,7 @@ public class CreateServerPack {
      * @return Returns the start-fabric.sh-file for use in {@link #copyStartScripts(String, String, boolean)}
      */
     public File getFabricLinuxFile() {
-        return fabricLinuxFile;
+        return FILE_FABRIC_LINUX;
     }
 
     /**
@@ -192,8 +192,12 @@ public class CreateServerPack {
      */
     public URL getFabricInstallerManifest() {
         URL downloadURL = null;
+
+        String fabricInstallerManifest = "https://maven.fabricmc.net/net/fabricmc/fabric-installer/maven-metadata.xml";
+
         try { downloadURL = new URL(fabricInstallerManifest); }
-        catch (IOException ex) { appLogger.error(ex); }
+        catch (IOException ex) { LOG.error(ex); }
+
         return downloadURL;
     }
 
@@ -214,54 +218,54 @@ public class CreateServerPack {
      * @return Boolean. Returns true if the server pack was successfully generated.
      */
     public boolean run() {
-        if (!configuration.checkConfigFile(configuration.getConfigFile(), true)) {
+        if (!CONFIGURATION.checkConfigFile(CONFIGURATION.getConfigFile(), true)) {
 
             // Make sure no files from previously generated server packs interrupt us.
-            cleanupEnvironment(configuration.getModpackDir());
+            cleanupEnvironment(CONFIGURATION.getModpackDir());
 
             // Recursively copy all specified directories and files, excluding clientside-only mods, to server pack.
-            copyFiles(configuration.getModpackDir(), configuration.getCopyDirs(), configuration.getClientMods());
+            copyFiles(CONFIGURATION.getModpackDir(), CONFIGURATION.getCopyDirs(), CONFIGURATION.getClientMods());
 
             // Copy start scripts for specified modloader from server_files to server pack.
-            copyStartScripts(configuration.getModpackDir(), configuration.getModLoader(), configuration.getIncludeStartScripts());
+            copyStartScripts(CONFIGURATION.getModpackDir(), CONFIGURATION.getModLoader(), CONFIGURATION.getIncludeStartScripts());
 
             // If true, Install the modloader software for the specified Minecraft version, modloader, modloader version
-            if (configuration.getIncludeServerInstallation()) {
-                installServer(configuration.getModLoader(), configuration.getModpackDir(), configuration.getMinecraftVersion(), configuration.getModLoaderVersion(), configuration.getJavaPath());
+            if (CONFIGURATION.getIncludeServerInstallation()) {
+                installServer(CONFIGURATION.getModLoader(), CONFIGURATION.getModpackDir(), CONFIGURATION.getMinecraftVersion(), CONFIGURATION.getModLoaderVersion(), CONFIGURATION.getJavaPath());
             } else {
-                appLogger.info(localizationManager.getLocalizedString("handler.log.info.runincli.server"));
+                LOG.info(LOCALIZATIONMANAGER.getLocalizedString("handler.log.info.runincli.server"));
             }
 
             // If true, copy the server-icon.png from server_files to the server pack.
-            if (configuration.getIncludeServerIcon()) {
-                copyIcon(configuration.getModpackDir());
+            if (CONFIGURATION.getIncludeServerIcon()) {
+                copyIcon(CONFIGURATION.getModpackDir());
             } else {
-                appLogger.info(localizationManager.getLocalizedString("handler.log.info.runincli.icon"));
+                LOG.info(LOCALIZATIONMANAGER.getLocalizedString("handler.log.info.runincli.icon"));
             }
 
             // If true, copy the server.properties from server_files to the server pack.
-            if (configuration.getIncludeServerProperties()) {
-                copyProperties(configuration.getModpackDir());
+            if (CONFIGURATION.getIncludeServerProperties()) {
+                copyProperties(CONFIGURATION.getModpackDir());
             } else {
-                appLogger.info(localizationManager.getLocalizedString("handler.log.info.runincli.properties"));
+                LOG.info(LOCALIZATIONMANAGER.getLocalizedString("handler.log.info.runincli.properties"));
             }
 
             // If true, create a ZIP-archive excluding the Minecraft server JAR of the server pack.
-            if (configuration.getIncludeZipCreation()) {
-                zipBuilder(configuration.getModpackDir(), configuration.getModLoader(), configuration.getIncludeServerInstallation(), configuration.getMinecraftVersion());
+            if (CONFIGURATION.getIncludeZipCreation()) {
+                zipBuilder(CONFIGURATION.getModpackDir(), CONFIGURATION.getModLoader(), CONFIGURATION.getIncludeServerInstallation(), CONFIGURATION.getMinecraftVersion());
             } else {
-                appLogger.info(localizationManager.getLocalizedString("handler.log.info.runincli.zip"));
+                LOG.info(LOCALIZATIONMANAGER.getLocalizedString("handler.log.info.runincli.zip"));
             }
 
             // Inform user about location of newly generated server pack.
-            appLogger.info(String.format(localizationManager.getLocalizedString("handler.log.info.runincli.serverpack"), configuration.getModpackDir()));
-            appLogger.info(String.format(localizationManager.getLocalizedString("handler.log.info.runincli.archive"), configuration.getModpackDir()));
-            appLogger.info(localizationManager.getLocalizedString("handler.log.info.runincli.finish"));
+            LOG.info(String.format(LOCALIZATIONMANAGER.getLocalizedString("handler.log.info.runincli.serverpack"), CONFIGURATION.getModpackDir()));
+            LOG.info(String.format(LOCALIZATIONMANAGER.getLocalizedString("handler.log.info.runincli.archive"), CONFIGURATION.getModpackDir()));
+            LOG.info(LOCALIZATIONMANAGER.getLocalizedString("handler.log.info.runincli.finish"));
 
             return true;
 
         } else {
-            appLogger.error(localizationManager.getLocalizedString("handler.log.error.runincli"));
+            LOG.error(LOCALIZATIONMANAGER.getLocalizedString("handler.log.error.runincli"));
             return false;
         }
     }
@@ -273,7 +277,7 @@ public class CreateServerPack {
      */
     void cleanupEnvironment(String modpackDir) {
         if (new File(String.format("%s/server_pack", modpackDir)).exists()) {
-            appLogger.info(localizationManager.getLocalizedString("copyfiles.log.info.cleanupenvironment.folder.enter"));
+            LOG.info(LOCALIZATIONMANAGER.getLocalizedString("copyfiles.log.info.cleanupenvironment.folder.enter"));
             Path serverPack = Paths.get(String.format("%s/server_pack", modpackDir));
             try {
                 Files.walkFileTree(serverPack,
@@ -293,18 +297,18 @@ public class CreateServerPack {
                             }
                         });
             } catch (IOException ex) {
-                appLogger.error(String.format(localizationManager.getLocalizedString("copyfiles.log.error.cleanupenvironment.folder.delete"), modpackDir));
+                LOG.error(String.format(LOCALIZATIONMANAGER.getLocalizedString("copyfiles.log.error.cleanupenvironment.folder.delete"), modpackDir));
             } finally {
-                appLogger.info(localizationManager.getLocalizedString("copyfiles.log.info.cleanupenvironment.folder.complete"));
+                LOG.info(LOCALIZATIONMANAGER.getLocalizedString("copyfiles.log.info.cleanupenvironment.folder.complete"));
             }
         }
         if (new File(String.format("%s/server_pack.zip", modpackDir)).exists()) {
-            appLogger.info(localizationManager.getLocalizedString("copyfiles.log.info.cleanupenvironment.zip.enter"));
+            LOG.info(LOCALIZATIONMANAGER.getLocalizedString("copyfiles.log.info.cleanupenvironment.zip.enter"));
             boolean isZipDeleted = new File(String.format("%s/server_pack.zip", modpackDir)).delete();
             if (isZipDeleted) {
-                appLogger.info(localizationManager.getLocalizedString("copyfiles.log.info.cleanupenvironment.zip.complete"));
+                LOG.info(LOCALIZATIONMANAGER.getLocalizedString("copyfiles.log.info.cleanupenvironment.zip.complete"));
             } else {
-                appLogger.error(localizationManager.getLocalizedString("copyfiles.log.error.cleanupenvironment.zip.delete"));
+                LOG.error(LOCALIZATIONMANAGER.getLocalizedString("copyfiles.log.error.cleanupenvironment.zip.delete"));
             }
         }
     }
@@ -317,7 +321,7 @@ public class CreateServerPack {
      */
     void copyStartScripts(String modpackDir, String modLoader, boolean includeStartScripts) {
         if (modLoader.equalsIgnoreCase("Forge") && includeStartScripts) {
-            appLogger.info(localizationManager.getLocalizedString("copyfiles.log.info.copystartscripts.forge"));
+            LOG.info(LOCALIZATIONMANAGER.getLocalizedString("copyfiles.log.info.copystartscripts.forge"));
             try {
                 Files.copy(
                         Paths.get(String.format("./server_files/%s", getForgeWindowsFile())),
@@ -330,10 +334,10 @@ public class CreateServerPack {
                         REPLACE_EXISTING
                 );
             } catch (IOException ex) {
-                appLogger.error(localizationManager.getLocalizedString("copyfiles.log.error.copystartscripts"), ex);
+                LOG.error(LOCALIZATIONMANAGER.getLocalizedString("copyfiles.log.error.copystartscripts"), ex);
             }
         } else if (modLoader.equalsIgnoreCase("Fabric") && includeStartScripts) {
-            appLogger.info(localizationManager.getLocalizedString("copyfiles.log.info.copystartscripts.fabric"));
+            LOG.info(LOCALIZATIONMANAGER.getLocalizedString("copyfiles.log.info.copystartscripts.fabric"));
             try {
                 Files.copy(
                         Paths.get(String.format("./server_files/%s", getFabricWindowsFile())),
@@ -346,10 +350,10 @@ public class CreateServerPack {
                         REPLACE_EXISTING
                 );
             } catch (IOException ex) {
-                appLogger.error(localizationManager.getLocalizedString("copyfiles.log.error.copystartscripts"), ex);
+                LOG.error(LOCALIZATIONMANAGER.getLocalizedString("copyfiles.log.error.copystartscripts"), ex);
             }
         } else {
-            appLogger.error(localizationManager.getLocalizedString("configcheck.log.error.checkmodloader"));
+            LOG.error(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.error.checkmodloader"));
         }
     }
 
@@ -359,28 +363,28 @@ public class CreateServerPack {
      * Calls {@link #excludeClientMods(String, List)} to generate a list of all mods to copy to server pack, excluding
      * clientside-only mods.
      * @param modpackDir String. Files and directories are copied into the server_pack directory inside the modpack directory.
-     * @param copyDirs String List. All directories and files therein to copy to the server pack.
+     * @param directoriesToCopy String List. All directories and files therein to copy to the server pack.
      * @param clientMods String List. List of clientside-only mods to exclude from the server pack.
      */
-    void copyFiles(String modpackDir, List<String> copyDirs, List<String> clientMods) {
+    void copyFiles(String modpackDir, List<String> directoriesToCopy, List<String> clientMods) {
         String serverPath = String.format("%s/server_pack", modpackDir);
 
         try {
             Files.createDirectories(Paths.get(serverPath));
         } catch (IOException ex) {
-            appLogger.error(String.format(localizationManager.getLocalizedString("createmodpack.log.error.unziparchive.createdir"), serverPath));
+            LOG.error(String.format(LOCALIZATIONMANAGER.getLocalizedString("createmodpack.log.error.unziparchive.createdir"), serverPath));
         }
 
-        for (int i = 0; i < copyDirs.size(); i++) {
+        for (String directory : directoriesToCopy) {
 
-            String clientDir = String.format("%s/%s", modpackDir,copyDirs.get(i));
-            String serverDir = String.format("%s/%s", serverPath,copyDirs.get(i));
+            String clientDir = String.format("%s/%s", modpackDir, directory);
+            String serverDir = String.format("%s/%s", serverPath, directory);
 
-            appLogger.info(String.format(localizationManager.getLocalizedString("copyfiles.log.info.copyfiles.setup"), serverDir));
+            LOG.info(String.format(LOCALIZATIONMANAGER.getLocalizedString("copyfiles.log.info.copyfiles.setup"), serverDir));
 
-            if (copyDirs.get(i).startsWith("saves/")) {
+            if (directory.startsWith("saves/")) {
 
-                String savesDir = String.format("%s/%s", serverPath, copyDirs.get(i).substring(6));
+                String savesDir = String.format("%s/%s", serverPath, directory.substring(6));
                 try {
 
                     Stream<Path> files = Files.walk(Paths.get(clientDir));
@@ -394,44 +398,44 @@ public class CreateServerPack {
                                     REPLACE_EXISTING
                             );
 
-                            appLogger.debug(String.format(localizationManager.getLocalizedString("copyfiles.log.debug.copyfiles"), file.toAbsolutePath().toString()));
+                            LOG.debug(String.format(LOCALIZATIONMANAGER.getLocalizedString("copyfiles.log.debug.copyfiles"), file.toAbsolutePath()));
 
                         } catch (IOException ex) {
                             if (!ex.toString().startsWith("java.nio.file.DirectoryNotEmptyException")) {
-                                appLogger.error(localizationManager.getLocalizedString("copyfiles.log.error.copyfiles.saves"), ex);
+                                LOG.error(LOCALIZATIONMANAGER.getLocalizedString("copyfiles.log.error.copyfiles.saves"), ex);
                             }
                         }
                     });
 
                 } catch (IOException ex) {
-                    appLogger.error(localizationManager.getLocalizedString("copyfiles.log.error.copyfiles.saves.world"), ex);
+                    LOG.error(LOCALIZATIONMANAGER.getLocalizedString("copyfiles.log.error.copyfiles.saves.world"), ex);
                 }
 
 
-            } else if (copyDirs.get(i).startsWith("mods") && clientMods.size() > 0) {
+            } else if (directory.startsWith("mods") && clientMods.size() > 0) {
 
                 List<String> listOfFiles = excludeClientMods(clientDir, clientMods);
 
                 try {
                     Files.createDirectories(Paths.get(serverDir));
                 } catch (IOException ex) {
-                    appLogger.info(String.format(localizationManager.getLocalizedString("copyfiles.log.info.copyfiles.setup"), serverDir));
+                    LOG.info(String.format(LOCALIZATIONMANAGER.getLocalizedString("copyfiles.log.info.copyfiles.setup"), serverDir));
                 }
 
-                for (int in = 0; in < listOfFiles.size(); in++) {
+                for (String file : listOfFiles) {
                     try {
 
                         Files.copy(
-                                Paths.get(listOfFiles.get(in)),
-                                Paths.get(String.format("%s/%s",serverDir, new File(listOfFiles.get(in)).getName())),
+                                Paths.get(file),
+                                Paths.get(String.format("%s/%s", serverDir, new File(file).getName())),
                                 REPLACE_EXISTING
                         );
 
-                        appLogger.debug(String.format(localizationManager.getLocalizedString("copyfiles.log.debug.copyfiles"), listOfFiles.get(in)));
+                        LOG.debug(String.format(LOCALIZATIONMANAGER.getLocalizedString("copyfiles.log.debug.copyfiles"), file));
 
                     } catch (IOException ex) {
                         if (!ex.toString().startsWith("java.nio.file.DirectoryNotEmptyException")) {
-                            appLogger.error(localizationManager.getLocalizedString("copyfiles.log.error.copyfiles.mods"), ex);
+                            LOG.error(LOCALIZATIONMANAGER.getLocalizedString("copyfiles.log.error.copyfiles.mods"), ex);
                         }
                     }
                 }
@@ -451,10 +455,10 @@ public class CreateServerPack {
                                     REPLACE_EXISTING
                             );
 
-                            appLogger.debug(String.format(localizationManager.getLocalizedString("copyfiles.log.debug.copyfiles"), file.toAbsolutePath().toString()));
+                            LOG.debug(String.format(LOCALIZATIONMANAGER.getLocalizedString("copyfiles.log.debug.copyfiles"), file.toAbsolutePath()));
                         } catch (IOException ex) {
                             if (!ex.toString().startsWith("java.nio.file.DirectoryNotEmptyException")) {
-                                appLogger.error(localizationManager.getLocalizedString("copyfiles.log.error.copyfiles.mods"), ex);
+                                LOG.error(LOCALIZATIONMANAGER.getLocalizedString("copyfiles.log.error.copyfiles.mods"), ex);
                             }
                         }
                     });
@@ -462,7 +466,7 @@ public class CreateServerPack {
                     files.close();
 
                 } catch (IOException ex) {
-                    appLogger.error(localizationManager.getLocalizedString("copyfiles.log.error.copyfiles"), ex);
+                    LOG.error(LOCALIZATIONMANAGER.getLocalizedString("copyfiles.log.error.copyfiles"), ex);
                 }
             }
 
@@ -477,7 +481,7 @@ public class CreateServerPack {
      * @return List String. A list of all mods to include in the server pack.
      */
     List<String> excludeClientMods(String modsDir, List<String> clientMods) {
-        appLogger.info(localizationManager.getLocalizedString("copyfiles.log.info.excludeclientmods"));
+        LOG.info(LOCALIZATIONMANAGER.getLocalizedString("copyfiles.log.info.excludeclientmods"));
 
         File[] listModsInModpack = new File(modsDir).listFiles();
         List<String> modsInModpack = new ArrayList<>();
@@ -490,7 +494,7 @@ public class CreateServerPack {
                 }
             }
         } catch (NullPointerException np) {
-            appLogger.error(localizationManager.getLocalizedString("copyfiles.log.error.excludeclientmods"), np);
+            LOG.error(LOCALIZATIONMANAGER.getLocalizedString("copyfiles.log.error.excludeclientmods"), np);
         }
 
         for (int iclient = 0; iclient < clientMods.size(); iclient++) {
@@ -509,7 +513,7 @@ public class CreateServerPack {
      * @param modpackDir String. The server-icon.png is copied into the server_pack directory inside the modpack directory.
      */
     void copyIcon(String modpackDir) {
-        appLogger.info(localizationManager.getLocalizedString("copyfiles.log.info.copyicon"));
+        LOG.info(LOCALIZATIONMANAGER.getLocalizedString("copyfiles.log.info.copyicon"));
         try {
 
             Files.copy(
@@ -519,7 +523,7 @@ public class CreateServerPack {
             );
 
         } catch (IOException ex) {
-            appLogger.error(localizationManager.getLocalizedString("copyfiles.log.error.copyicon"), ex);
+            LOG.error(LOCALIZATIONMANAGER.getLocalizedString("copyfiles.log.error.copyicon"), ex);
         }
     }
 
@@ -528,7 +532,7 @@ public class CreateServerPack {
      * @param modpackDir String. The server.properties file is copied into the server_pack directory inside the modpack directory.
      */
     void copyProperties(String modpackDir) {
-        appLogger.info(localizationManager.getLocalizedString("copyfiles.log.info.copyproperties"));
+        LOG.info(LOCALIZATIONMANAGER.getLocalizedString("copyfiles.log.info.copyproperties"));
         try {
 
             Files.copy(
@@ -538,7 +542,7 @@ public class CreateServerPack {
             );
 
         } catch (IOException ex) {
-            appLogger.error(localizationManager.getLocalizedString("copyfiles.log.error.copyproperties"), ex);
+            LOG.error(LOCALIZATIONMANAGER.getLocalizedString("copyfiles.log.error.copyproperties"), ex);
         }
     }
 
@@ -563,10 +567,10 @@ public class CreateServerPack {
         File forgeInstaller = new File(String.format("%s/server_pack/forge-installer.jar", modpackDir));
         if (modLoader.equalsIgnoreCase("Fabric")) {
             try {
-                appLogger.info(localizationManager.getLocalizedString("serversetup.log.info.installserver.fabric.enter"));
-                installerLogger.info(localizationManager.getLocalizedString("serversetup.log.info.installserver.fabric.enter"));
+                LOG.info(LOCALIZATIONMANAGER.getLocalizedString("serversetup.log.info.installserver.fabric.enter"));
+                LOG_INSTALLER.info(LOCALIZATIONMANAGER.getLocalizedString("serversetup.log.info.installserver.fabric.enter"));
                 if (downloadFabricJar(modpackDir)) {
-                    appLogger.info(localizationManager.getLocalizedString("serversetup.log.info.installserver.fabric.download"));
+                    LOG.info(LOCALIZATIONMANAGER.getLocalizedString("serversetup.log.info.installserver.fabric.download"));
                     ProcessBuilder processBuilder = new ProcessBuilder(
                             javaPath,
                             "-jar",
@@ -582,24 +586,24 @@ public class CreateServerPack {
                     while (true) {
                         line = reader.readLine();
                         if (line == null) { break; }
-                        installerLogger.info(line);
+                        LOG_INSTALLER.info(line);
                     }
-                    installerLogger.info(localizationManager.getLocalizedString("serversetup.log.info.installserver"));
+                    LOG_INSTALLER.info(LOCALIZATIONMANAGER.getLocalizedString("serversetup.log.info.installserver"));
                     reader.close();
-                    appLogger.info(localizationManager.getLocalizedString("serversetup.log.info.installserver.fabric.details"));
-                    appLogger.info(localizationManager.getLocalizedString("serversetup.log.info.installserver"));
+                    LOG.info(LOCALIZATIONMANAGER.getLocalizedString("serversetup.log.info.installserver.fabric.details"));
+                    LOG.info(LOCALIZATIONMANAGER.getLocalizedString("serversetup.log.info.installserver"));
                 } else {
-                    appLogger.error(localizationManager.getLocalizedString("serversetup.log.error.installserver.fabric"));
+                    LOG.error(LOCALIZATIONMANAGER.getLocalizedString("serversetup.log.error.installserver.fabric"));
                 }
             } catch (IOException ex) {
-                appLogger.error(localizationManager.getLocalizedString("serversetup.log.error.installserver.fabricfail"), ex);
+                LOG.error(LOCALIZATIONMANAGER.getLocalizedString("serversetup.log.error.installserver.fabricfail"), ex);
             }
         } else if (modLoader.equalsIgnoreCase("Forge")) {
             try {
-                appLogger.info(localizationManager.getLocalizedString("serversetup.log.info.installserver.forge.enter"));
-                installerLogger.info(localizationManager.getLocalizedString("serversetup.log.info.installserver.forge.enter"));
+                LOG.info(LOCALIZATIONMANAGER.getLocalizedString("serversetup.log.info.installserver.forge.enter"));
+                LOG_INSTALLER.info(LOCALIZATIONMANAGER.getLocalizedString("serversetup.log.info.installserver.forge.enter"));
                 if (downloadForgeJar(minecraftVersion, modLoaderVersion, modpackDir)) {
-                    appLogger.info(localizationManager.getLocalizedString("serversetup.log.info.installserver.forge.download"));
+                    LOG.info(LOCALIZATIONMANAGER.getLocalizedString("serversetup.log.info.installserver.forge.download"));
                     ProcessBuilder processBuilder = new ProcessBuilder(
                             javaPath,
                             "-jar",
@@ -613,21 +617,21 @@ public class CreateServerPack {
                     while (true) {
                         line = reader.readLine();
                         if (line == null) { break; }
-                        installerLogger.info(line);
+                        LOG_INSTALLER.info(line);
                     }
-                    installerLogger.info(localizationManager.getLocalizedString("serversetup.log.info.installserver"));
+                    LOG_INSTALLER.info(LOCALIZATIONMANAGER.getLocalizedString("serversetup.log.info.installserver"));
                     reader.close();
-                    appLogger.info(localizationManager.getLocalizedString("serversetup.log.info.installserver.forge.details"));
-                    appLogger.info(localizationManager.getLocalizedString("serversetup.log.info.installserver"));
+                    LOG.info(LOCALIZATIONMANAGER.getLocalizedString("serversetup.log.info.installserver.forge.details"));
+                    LOG.info(LOCALIZATIONMANAGER.getLocalizedString("serversetup.log.info.installserver"));
                     process.destroy();
                 } else {
-                    appLogger.error(localizationManager.getLocalizedString("serversetup.log.error.installserver.forge"));
+                    LOG.error(LOCALIZATIONMANAGER.getLocalizedString("serversetup.log.error.installserver.forge"));
                 }
             } catch (IOException ex) {
-                appLogger.error(localizationManager.getLocalizedString("serversetup.log.error.installserver.forgefail"), ex);
+                LOG.error(LOCALIZATIONMANAGER.getLocalizedString("serversetup.log.error.installserver.forgefail"), ex);
             }
         } else {
-            appLogger.error(String.format(localizationManager.getLocalizedString("configcheck.log.error.checkmodloader"), modLoader));
+            LOG.error(String.format(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.error.checkmodloader"), modLoader));
         }
 
         generateDownloadScripts(modLoader, modpackDir, minecraftVersion);
@@ -655,7 +659,7 @@ public class CreateServerPack {
     void zipBuilder(String modpackDir, String modLoader, Boolean includeServerInstallation, String minecraftVersion) {
         final Path sourceDir = Paths.get(String.format("%s/server_pack", modpackDir));
         String zipFileName = sourceDir.toString().concat(".zip");
-        appLogger.info(localizationManager.getLocalizedString("serversetup.log.info.zipbuilder.enter"));
+        LOG.info(LOCALIZATIONMANAGER.getLocalizedString("serversetup.log.info.zipbuilder.enter"));
         try {
             final ZipOutputStream outputStream = new ZipOutputStream(new FileOutputStream(zipFileName));
             Files.walkFileTree(sourceDir, new SimpleFileVisitor<Path>() {
@@ -668,22 +672,22 @@ public class CreateServerPack {
                         outputStream.write(bytes, 0, bytes.length);
                         outputStream.closeEntry();
                     } catch (IOException ex) {
-                        appLogger.error(localizationManager.getLocalizedString("serversetup.log.error.zipbuilder.create"), ex);
+                        LOG.error(LOCALIZATIONMANAGER.getLocalizedString("serversetup.log.error.zipbuilder.create"), ex);
                     }
                     return FileVisitResult.CONTINUE;
                 }
             });
             outputStream.close();
         } catch (IOException ex) {
-            appLogger.error(localizationManager.getLocalizedString("serversetup.log.error.zipbuilder.create"), ex);
+            LOG.error(LOCALIZATIONMANAGER.getLocalizedString("serversetup.log.error.zipbuilder.create"), ex);
         }
         if (includeServerInstallation) {
             deleteMinecraftJar(modLoader, modpackDir, minecraftVersion);
-            appLogger.warn(localizationManager.getLocalizedString("serversetup.log.warn.zipbuilder.minecraftjar1"));
-            appLogger.warn(localizationManager.getLocalizedString("serversetup.log.warn.zipbuilder.minecraftjar2"));
-            appLogger.warn(localizationManager.getLocalizedString("serversetup.log.warn.zipbuilder.minecraftjar3"));
+            LOG.warn(LOCALIZATIONMANAGER.getLocalizedString("serversetup.log.warn.zipbuilder.minecraftjar1"));
+            LOG.warn(LOCALIZATIONMANAGER.getLocalizedString("serversetup.log.warn.zipbuilder.minecraftjar2"));
+            LOG.warn(LOCALIZATIONMANAGER.getLocalizedString("serversetup.log.warn.zipbuilder.minecraftjar3"));
         }
-        appLogger.info(localizationManager.getLocalizedString("serversetup.log.info.zipbuilder.finish"));
+        LOG.info(LOCALIZATIONMANAGER.getLocalizedString("serversetup.log.info.zipbuilder.finish"));
     }
 
     /**
@@ -706,7 +710,7 @@ public class CreateServerPack {
             forgeShell(modpackDir, minecraftVersion);
             forgeBatch(modpackDir, minecraftVersion);
         } else {
-            appLogger.error(String.format(localizationManager.getLocalizedString("configcheck.log.error.checkmodloader"), modLoader));
+            LOG.error(String.format(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.error.checkmodloader"), modLoader));
         }
     }
 
@@ -731,11 +735,11 @@ public class CreateServerPack {
             byte[] strToBytesSh = shFabric.getBytes();
             Files.write(pathSh, strToBytesSh);
             String readSh = Files.readAllLines(pathSh).get(0);
-            appLogger.debug(String.format(localizationManager.getLocalizedString("serverutilities.log.debug.fabricshell"), readSh));
+            LOG.debug(String.format(LOCALIZATIONMANAGER.getLocalizedString("serverutilities.log.debug.fabricshell"), readSh));
         } catch (IOException ex) {
-            appLogger.error(localizationManager.getLocalizedString("serverutilities.log.error.fabricshell"), ex);
+            LOG.error(LOCALIZATIONMANAGER.getLocalizedString("serverutilities.log.error.fabricshell"), ex);
         }
-        appLogger.info(localizationManager.getLocalizedString("serverutilities.log.info.fabricshell"));
+        LOG.info(LOCALIZATIONMANAGER.getLocalizedString("serverutilities.log.info.fabricshell"));
     }
 
     /**
@@ -759,11 +763,11 @@ public class CreateServerPack {
             byte[] strToBytesBat = batFabric.getBytes();
             Files.write(pathBat, strToBytesBat);
             String readBat = Files.readAllLines(pathBat).get(0);
-            appLogger.debug(String.format(localizationManager.getLocalizedString("serverutilities.log.debug.fabricbatch"), readBat));
+            LOG.debug(String.format(LOCALIZATIONMANAGER.getLocalizedString("serverutilities.log.debug.fabricbatch"), readBat));
         } catch (IOException ex) {
-            appLogger.error(localizationManager.getLocalizedString("serverutilities.log.error.fabricbatch"), ex);
+            LOG.error(LOCALIZATIONMANAGER.getLocalizedString("serverutilities.log.error.fabricbatch"), ex);
         }
-        appLogger.info(localizationManager.getLocalizedString("serverutilities.log.info.fabricbatch"));
+        LOG.info(LOCALIZATIONMANAGER.getLocalizedString("serverutilities.log.info.fabricbatch"));
     }
 
     /**
@@ -787,11 +791,11 @@ public class CreateServerPack {
             byte[] strToBytesSh = shForge.getBytes();
             Files.write(pathSh, strToBytesSh);
             String readSh = Files.readAllLines(pathSh).get(0);
-            appLogger.debug(String.format(localizationManager.getLocalizedString("serverutilities.log.debug.forgeshell"), readSh));
+            LOG.debug(String.format(LOCALIZATIONMANAGER.getLocalizedString("serverutilities.log.debug.forgeshell"), readSh));
         } catch (IOException ex) {
-            appLogger.error(localizationManager.getLocalizedString("serverutilities.log.error.forgeshell"), ex);
+            LOG.error(LOCALIZATIONMANAGER.getLocalizedString("serverutilities.log.error.forgeshell"), ex);
         }
-        appLogger.info(localizationManager.getLocalizedString("serverutilities.log.info.forgeshell"));
+        LOG.info(LOCALIZATIONMANAGER.getLocalizedString("serverutilities.log.info.forgeshell"));
     }
 
     /**
@@ -815,11 +819,11 @@ public class CreateServerPack {
             byte[] strToBytesBat = batForge.getBytes();
             Files.write(pathBat, strToBytesBat);
             String readBat = Files.readAllLines(pathBat).get(0);
-            appLogger.debug(String.format(localizationManager.getLocalizedString("serverutilities.log.debug.forgebatch"), readBat));
+            LOG.debug(String.format(LOCALIZATIONMANAGER.getLocalizedString("serverutilities.log.debug.forgebatch"), readBat));
         } catch (IOException ex) {
-            appLogger.error(localizationManager.getLocalizedString("serverutilities.log.error.forgebatch"), ex);
+            LOG.error(LOCALIZATIONMANAGER.getLocalizedString("serverutilities.log.error.forgebatch"), ex);
         }
-        appLogger.info(localizationManager.getLocalizedString("serverutilities.log.info.forgebatch"));
+        LOG.info(LOCALIZATIONMANAGER.getLocalizedString("serverutilities.log.info.forgebatch"));
     }
 
     /**
@@ -832,7 +836,7 @@ public class CreateServerPack {
     boolean downloadFabricJar(String modpackDir) {
         boolean downloaded = false;
         try {
-            appLogger.info(localizationManager.getLocalizedString("serverutilities.log.info.downloadfabricjar.enter"));
+            LOG.info(LOCALIZATIONMANAGER.getLocalizedString("serverutilities.log.info.downloadfabricjar.enter"));
             String latestFabricInstaller = latestFabricInstaller(modpackDir);
             URL downloadFabric = new URL(String.format("https://maven.fabricmc.net/net/fabricmc/fabric-installer/%s/fabric-installer-%s.jar", latestFabricInstaller, latestFabricInstaller));
 
@@ -847,12 +851,12 @@ public class CreateServerPack {
             downloadFabricFileChannel.close();
 
         } catch (IOException e) {
-            appLogger.error(localizationManager.getLocalizedString("serverutilities.log.error.downloadfabricjar.download"), e);
+            LOG.error(LOCALIZATIONMANAGER.getLocalizedString("serverutilities.log.error.downloadfabricjar.download"), e);
             if (new File(String.format("%s/server_pack/fabric-installer.jar", modpackDir)).exists()) {
                 try {
                     Files.delete(Paths.get(String.format("%s/server_pack/fabric-installer.jar", modpackDir)));
                 } catch (IOException ex) {
-                    appLogger.error(localizationManager.getLocalizedString("serverutilities.log.error.downloadfabricjar.delete"), ex);
+                    LOG.error(LOCALIZATIONMANAGER.getLocalizedString("serverutilities.log.error.downloadfabricjar.delete"), ex);
                 }
             }
         }
@@ -891,9 +895,9 @@ public class CreateServerPack {
             XPath xpath = xPathFactory.newXPath();
 
             result = (String) xpath.evaluate("/metadata/versioning/release", fabricXml, XPathConstants.STRING);
-            appLogger.info(localizationManager.getLocalizedString("serverutilities.log.info.latestfabricinstaller"));
+            LOG.info(LOCALIZATIONMANAGER.getLocalizedString("serverutilities.log.info.latestfabricinstaller"));
         } catch (IOException | ParserConfigurationException | SAXException | XPathExpressionException ex) {
-            appLogger.error(localizationManager.getLocalizedString("serverutilities.log.error.latestfabricinstaller"), ex);
+            LOG.error(LOCALIZATIONMANAGER.getLocalizedString("serverutilities.log.error.latestfabricinstaller"), ex);
             result = "0.7.3";
         }
         return result;
@@ -909,7 +913,7 @@ public class CreateServerPack {
     boolean downloadForgeJar(String minecraftVersion, String modLoaderVersion, String modpackDir) {
         boolean downloaded = false;
         try {
-            appLogger.info(localizationManager.getLocalizedString("serverutilities.log.info.downloadforgejar.enter"));
+            LOG.info(LOCALIZATIONMANAGER.getLocalizedString("serverutilities.log.info.downloadforgejar.enter"));
             URL downloadForge = new URL(String.format("https://files.minecraftforge.net/maven/net/minecraftforge/forge/%s-%s/forge-%s-%s-installer.jar", minecraftVersion, modLoaderVersion, minecraftVersion, modLoaderVersion));
 
             ReadableByteChannel readableByteChannel = Channels.newChannel(downloadForge.openStream());
@@ -923,10 +927,10 @@ public class CreateServerPack {
             downloadForgeFileChannel.close();
 
         } catch (IOException e) {
-            appLogger.error(localizationManager.getLocalizedString("serverutilities.log.error.downloadforgejar.download"), e);
+            LOG.error(LOCALIZATIONMANAGER.getLocalizedString("serverutilities.log.error.downloadforgejar.download"), e);
             if (new File(String.format("%s/server_pack/forge-installer.jar", modpackDir)).exists()) {
                 if (new File(String.format("%s/server_pack/forge-installer.jar", modpackDir)).delete()) {
-                    appLogger.error(localizationManager.getLocalizedString("serverutilities.log.debug.downloadforgejar"));
+                    LOG.error(LOCALIZATIONMANAGER.getLocalizedString("serverutilities.log.debug.downloadforgejar"));
                 }
             }
         }
@@ -946,7 +950,7 @@ public class CreateServerPack {
      */
     void deleteMinecraftJar(String modLoader, String modpackDir, String minecraftVersion) {
         if (modLoader.equalsIgnoreCase("Forge")) {
-            appLogger.info(localizationManager.getLocalizedString("serverutilities.log.info.deleteminecraftjar.enter"));
+            LOG.info(LOCALIZATIONMANAGER.getLocalizedString("serverutilities.log.info.deleteminecraftjar.enter"));
 
             Map<String, String> zip_properties = new HashMap<>();
             zip_properties.put("create", "false");
@@ -958,12 +962,12 @@ public class CreateServerPack {
             try (FileSystem zipfs = FileSystems.newFileSystem(zipUri, zip_properties)) {
                 Path pathInZipfile = zipfs.getPath(String.format("minecraft_server.%s.jar", minecraftVersion));
                 Files.delete(pathInZipfile);
-                appLogger.info(localizationManager.getLocalizedString("serverutilities.log.info.deleteminecraftjar.success"));
+                LOG.info(LOCALIZATIONMANAGER.getLocalizedString("serverutilities.log.info.deleteminecraftjar.success"));
             } catch (IOException ex) {
-                appLogger.error(localizationManager.getLocalizedString("serverutilities.log.error.deleteminecraftjar.delete"), ex);
+                LOG.error(LOCALIZATIONMANAGER.getLocalizedString("serverutilities.log.error.deleteminecraftjar.delete"), ex);
             }
         } else if (modLoader.equalsIgnoreCase("Fabric")) {
-            appLogger.info(localizationManager.getLocalizedString("serverutilities.log.info.deleteminecraftjar.enter"));
+            LOG.info(LOCALIZATIONMANAGER.getLocalizedString("serverutilities.log.info.deleteminecraftjar.enter"));
 
             Map<String, String> zip_properties = new HashMap<>();
             zip_properties.put("create", "false");
@@ -975,12 +979,12 @@ public class CreateServerPack {
             try (FileSystem zipfs = FileSystems.newFileSystem(zipUri, zip_properties)) {
                 Path pathInZipfile = zipfs.getPath("server.jar");
                 Files.delete(pathInZipfile);
-                appLogger.info(localizationManager.getLocalizedString("serverutilities.log.info.deleteminecraftjar.success"));
+                LOG.info(LOCALIZATIONMANAGER.getLocalizedString("serverutilities.log.info.deleteminecraftjar.success"));
             } catch (IOException ex) {
-                appLogger.error(localizationManager.getLocalizedString("serverutilities.log.error.deleteminecraftjar.delete"), ex);
+                LOG.error(LOCALIZATIONMANAGER.getLocalizedString("serverutilities.log.error.deleteminecraftjar.delete"), ex);
             }
         } else {
-            appLogger.error(String.format(localizationManager.getLocalizedString("configcheck.log.error.checkmodloader"), modLoader));
+            LOG.error(String.format(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.error.checkmodloader"), modLoader));
         }
     }
 
@@ -994,7 +998,7 @@ public class CreateServerPack {
      * @param modLoaderVersion String. Needed for renaming the Forge server JAR to work with launch scripts provided by ServerPackCreator.
      */
     void cleanUpServerPack(File fabricInstaller, File forgeInstaller, String modLoader, String modpackDir, String minecraftVersion, String modLoaderVersion) {
-        appLogger.info(localizationManager.getLocalizedString("serverutilities.log.info.cleanupserverpack.enter"));
+        LOG.info(LOCALIZATIONMANAGER.getLocalizedString("serverutilities.log.info.cleanupserverpack.enter"));
         if (modLoader.equalsIgnoreCase("Fabric")) {
             File fabricXML = new File(String.format("%s/server_pack/fabric-installer.xml", modpackDir));
 
@@ -1002,14 +1006,14 @@ public class CreateServerPack {
             boolean isInstallerDeleted = fabricInstaller.delete();
 
             if (isXmlDeleted)
-            { appLogger.info(String.format(localizationManager.getLocalizedString("serverutilities.log.info.cleanupserverpack.deleted"), fabricXML.getName())); }
+            { LOG.info(String.format(LOCALIZATIONMANAGER.getLocalizedString("serverutilities.log.info.cleanupserverpack.deleted"), fabricXML.getName())); }
             else
-            { appLogger.error(String.format(localizationManager.getLocalizedString("serverutilities.log.error.cleanupserverpack.delete"), fabricXML.getName())); }
+            { LOG.error(String.format(LOCALIZATIONMANAGER.getLocalizedString("serverutilities.log.error.cleanupserverpack.delete"), fabricXML.getName())); }
 
             if (isInstallerDeleted)
-            { appLogger.info(String.format(localizationManager.getLocalizedString("serverutilities.log.info.cleanupserverpack.deleted"), fabricInstaller.getName())); }
+            { LOG.info(String.format(LOCALIZATIONMANAGER.getLocalizedString("serverutilities.log.info.cleanupserverpack.deleted"), fabricInstaller.getName())); }
             else
-            { appLogger.error(String.format(localizationManager.getLocalizedString("serverutilities.log.error.cleanupserverpack.delete"), fabricInstaller.getName())); }
+            { LOG.error(String.format(LOCALIZATIONMANAGER.getLocalizedString("serverutilities.log.error.cleanupserverpack.delete"), fabricInstaller.getName())); }
 
         } else if (modLoader.equalsIgnoreCase("Forge")) {
             try {
@@ -1027,20 +1031,20 @@ public class CreateServerPack {
                 boolean isInstallerDeleted = forgeInstaller.delete();
 
                 if ((isOldJarDeleted) && (new File(String.format("%s/server_pack/forge.jar", modpackDir)).exists()))
-                { appLogger.info(localizationManager.getLocalizedString("serverutilities.log.info.cleanupserverpack.rename")); }
+                { LOG.info(LOCALIZATIONMANAGER.getLocalizedString("serverutilities.log.info.cleanupserverpack.rename")); }
                 else
-                { appLogger.error(localizationManager.getLocalizedString("serverutilities.log.error.cleanupserverpack.rename")); }
+                { LOG.error(LOCALIZATIONMANAGER.getLocalizedString("serverutilities.log.error.cleanupserverpack.rename")); }
 
                 if (isInstallerDeleted)
-                { appLogger.info(String.format(localizationManager.getLocalizedString("serverutilities.log.info.cleanupserverpack.deleted"), forgeInstaller.getName())); }
+                { LOG.info(String.format(LOCALIZATIONMANAGER.getLocalizedString("serverutilities.log.info.cleanupserverpack.deleted"), forgeInstaller.getName())); }
                 else
-                { appLogger.error(String.format(localizationManager.getLocalizedString("serverutilities.log.error.cleanupserverpack.delete"), forgeInstaller.getName())); }
+                { LOG.error(String.format(LOCALIZATIONMANAGER.getLocalizedString("serverutilities.log.error.cleanupserverpack.delete"), forgeInstaller.getName())); }
 
             } catch (IOException ex) {
-                appLogger.error(localizationManager.getLocalizedString("serverutilities.log.error.cleanupserverpack"), ex);
+                LOG.error(LOCALIZATIONMANAGER.getLocalizedString("serverutilities.log.error.cleanupserverpack"), ex);
             }
         } else {
-            appLogger.error(String.format(localizationManager.getLocalizedString("configcheck.log.error.checkmodloader"), modLoader));
+            LOG.error(String.format(LOCALIZATIONMANAGER.getLocalizedString("configcheck.log.error.checkmodloader"), modLoader));
         }
     }
 }
\ No newline at end of file
diff --git a/src/main/java/de/griefed/serverpackcreator/Main.java b/src/main/java/de/griefed/serverpackcreator/Main.java
index 6bf325c2d..53ac918f4 100644
--- a/src/main/java/de/griefed/serverpackcreator/Main.java
+++ b/src/main/java/de/griefed/serverpackcreator/Main.java
@@ -63,14 +63,13 @@ import java.util.List;
  * enter <code>-cli</code>-mode.
  */
 public class Main {
-    private static final Logger appLogger = LogManager.getLogger(Main.class);
+    private static final Logger LOG = LogManager.getLogger(Main.class);
 
     /**
      * Initializes all objects needed for running ServerPackCreator and ensures Dependency Injection.
-     * Calls {@link FilesSetup} so all default files are available.
+     * Calls {@link DefaultFiles} so all default files are available.
      * Checks arguments to determine which mode to enter.
      * Lists a couple of environment variables important for reporting issues.
-     *
      * @param args Commandline arguments with which ServerPackCreator is run. Determines which mode ServerPackCreator
      * will enter and which locale is used.
      */
@@ -83,8 +82,9 @@ public class Main {
                 // Init the LocalizationManager with the locale passed by the cli arguments.
                 localizationManager.init(programArgs.get(programArgs.indexOf("-lang") + 1));
             } catch (IncorrectLanguageException e) {
-                appLogger.info(programArgs.get(programArgs.indexOf("-lang") + 1));
-                appLogger.error("Incorrect language specified, falling back to English (United States)...");
+                LOG.info(programArgs.get(programArgs.indexOf("-lang") + 1));
+                // We can not use localized string here, because the localization manager has not yet been initialized.
+                LOG.error("Incorrect language specified, falling back to English (United States)...");
 
                 // Init the LocalizationManager with the default locale en_US.
                 localizationManager.init();
@@ -97,10 +97,11 @@ public class Main {
         // Prepare instances for dependency injection
         CurseCreateModpack curseCreateModpack = new CurseCreateModpack(localizationManager);
         Configuration configuration = new Configuration(localizationManager, curseCreateModpack);
-        FilesSetup filesSetup = new FilesSetup(localizationManager);
+        DefaultFiles defaultFiles = new DefaultFiles(localizationManager);
         CreateServerPack createServerPack = new CreateServerPack(localizationManager, configuration, curseCreateModpack);
         CreateGui tabbedPane = new CreateGui(localizationManager, configuration, curseCreateModpack, createServerPack);
 
+        //noinspection UnusedAssignment
         String jarPath = null,
                 jarName = null,
                 javaVersion = null,
@@ -108,12 +109,12 @@ public class Main {
                 osName = null,
                 osVersion = null;
 
-        appLogger.warn(localizationManager.getLocalizedString("handler.log.warn.wip0"));
-        appLogger.warn(localizationManager.getLocalizedString("handler.log.warn.wip1"));
-        appLogger.warn(localizationManager.getLocalizedString("handler.log.warn.wip2"));
-        appLogger.warn(localizationManager.getLocalizedString("handler.log.warn.wip3"));
-        appLogger.warn(localizationManager.getLocalizedString("handler.log.warn.wip4"));
-        appLogger.warn(localizationManager.getLocalizedString("handler.log.warn.wip0"));
+        LOG.warn(localizationManager.getLocalizedString("handler.log.warn.wip0"));
+        LOG.warn(localizationManager.getLocalizedString("handler.log.warn.wip1"));
+        LOG.warn(localizationManager.getLocalizedString("handler.log.warn.wip2"));
+        LOG.warn(localizationManager.getLocalizedString("handler.log.warn.wip3"));
+        LOG.warn(localizationManager.getLocalizedString("handler.log.warn.wip4"));
+        LOG.warn(localizationManager.getLocalizedString("handler.log.warn.wip0"));
 
         try {
             // Print system information to console and logs.
@@ -123,21 +124,21 @@ public class Main {
             osArch = System.getProperty("os.arch");
             osName = System.getProperty("os.name");
             osVersion = System.getProperty("os.version");
-            appLogger.info(localizationManager.getLocalizedString("handler.log.info.system.enter"));
-            appLogger.info(String.format(localizationManager.getLocalizedString("handler.log.info.system.jarpath"), jarPath));
-            appLogger.info(String.format(localizationManager.getLocalizedString("handler.log.info.system.jarname"), jarName));
-            appLogger.info(String.format(localizationManager.getLocalizedString("handler.log.info.system.java"), javaVersion));
-            appLogger.info(String.format(localizationManager.getLocalizedString("handler.log.info.system.osarchitecture"), osArch));
-            appLogger.info(String.format(localizationManager.getLocalizedString("handler.log.info.system.osname"), osName));
-            appLogger.info(String.format(localizationManager.getLocalizedString("handler.log.info.system.osversion"), osVersion));
-            appLogger.info(localizationManager.getLocalizedString("handler.log.info.system.include"));
+            LOG.info(localizationManager.getLocalizedString("handler.log.info.system.enter"));
+            LOG.info(String.format(localizationManager.getLocalizedString("handler.log.info.system.jarpath"), jarPath));
+            LOG.info(String.format(localizationManager.getLocalizedString("handler.log.info.system.jarname"), jarName));
+            LOG.info(String.format(localizationManager.getLocalizedString("handler.log.info.system.java"), javaVersion));
+            LOG.info(String.format(localizationManager.getLocalizedString("handler.log.info.system.osarchitecture"), osArch));
+            LOG.info(String.format(localizationManager.getLocalizedString("handler.log.info.system.osname"), osName));
+            LOG.info(String.format(localizationManager.getLocalizedString("handler.log.info.system.osversion"), osVersion));
+            LOG.info(localizationManager.getLocalizedString("handler.log.info.system.include"));
 
         } catch (URISyntaxException ex) {
-            appLogger.error(localizationManager.getLocalizedString("handler.log.error.system.properties"), ex);
+            LOG.error(localizationManager.getLocalizedString("handler.log.error.system.properties"), ex);
         }
 
         // Ensure default files are present.
-        filesSetup.filesSetup();
+        defaultFiles.filesSetup();
 
         // Start generation of a new configuration file with user input.
         if (Arrays.asList(args).contains("-cgen")) {
diff --git a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.java b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.java
index a7089dcd2..2d5c00c3b 100644
--- a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.java
+++ b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseCreateModpack.java
@@ -70,13 +70,14 @@ import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
  * a projectID,fileID.
  */
 public class CurseCreateModpack {
-    private static final Logger appLogger = LogManager.getLogger(CurseCreateModpack.class);
+    private static final Logger LOG = LogManager.getLogger(CurseCreateModpack.class);
+
+    private final LocalizationManager LOCALIZATIONMANAGER;
+
     private String projectName;
     private String fileName;
     private String fileDiskName;
 
-    private LocalizationManager localizationManager;
-
     /**
      * <strong>Constructor</strong><p>
      * Used for Dependency Injection.<p>
@@ -86,9 +87,9 @@ public class CurseCreateModpack {
      */
     public CurseCreateModpack(LocalizationManager injectedLocalizationManager) {
         if (injectedLocalizationManager == null) {
-            this.localizationManager = new LocalizationManager();
+            this.LOCALIZATIONMANAGER = new LocalizationManager();
         } else {
-            this.localizationManager = injectedLocalizationManager;
+            this.LOCALIZATIONMANAGER = injectedLocalizationManager;
         }
     }
 
@@ -105,7 +106,7 @@ public class CurseCreateModpack {
      * @param newProjectID The ID of the new CurseForge project.
      */
     void setProjectName(int newProjectID) {
-        String newProjectName = null;
+        String newProjectName;
         try {
             if (CurseAPI.project(newProjectID).isPresent()) {
                 newProjectName = CurseAPI.project(newProjectID).get().name();
@@ -113,40 +114,31 @@ public class CurseCreateModpack {
                 newProjectName = String.valueOf(newProjectID);
             }
         } catch (CurseException cex) {
-            appLogger.error(cex);
+            LOG.error(cex);
             newProjectName = String.valueOf(newProjectID);
         }
         this.projectName = newProjectName;
     }
 
-    /**
-     * Getter for the CurseForge file name.
-     * @return String. Returns the file name of the CurseForge project.
-     */
-    String getFileName() {
-        return fileName;
-    }
-
     /**
      * Setter for the CurseForge file name and file disk name.
      * @param newProjectID The ID of the CurseForge project.
      * @param newFileID The ID of the CurseForge file.
      */
-    @SuppressWarnings("ConstantConditions")
     void setFileNameAndDiskName(int newProjectID, int newFileID) {
-        String newFileName = null;
-        String newFileDiskName = null;
+        String newFileName;
+        String newFileDiskName;
 
         try {
             if (CurseAPI.project(newProjectID).isPresent()) {
                 try {
-                    newFileName = CurseAPI.project(newProjectID).get().files().fileWithID(newFileID).displayName();
+                    newFileName = Objects.requireNonNull(CurseAPI.project(newProjectID).get().files().fileWithID(newFileID)).displayName();
                 }
                 catch (NullPointerException npe) {
-                    newFileName = CurseAPI.project(newProjectID).get().files().fileWithID(newFileID).nameOnDisk();
+                    newFileName = Objects.requireNonNull(CurseAPI.project(newProjectID).get().files().fileWithID(newFileID)).nameOnDisk();
                 }
 
-                newFileDiskName = CurseAPI.project(newProjectID).get().files().fileWithID(newFileID).nameOnDisk();
+                newFileDiskName = Objects.requireNonNull(CurseAPI.project(newProjectID).get().files().fileWithID(newFileID)).nameOnDisk();
 
             } else {
                 newFileName = String.valueOf(newFileID);
@@ -154,7 +146,7 @@ public class CurseCreateModpack {
             }
 
         } catch (CurseException cex) {
-            appLogger.error(cex);
+            LOG.error(cex);
             newFileName = String.valueOf(newFileID);
             newFileDiskName = String.valueOf(newFileID);
         }
@@ -163,6 +155,14 @@ public class CurseCreateModpack {
         this.fileName = newFileName;
     }
 
+    /**
+     * Getter for the CurseForge file name.
+     * @return String. Returns the file name of the CurseForge project.
+     */
+    String getFileName() {
+        return fileName;
+    }
+
     /**
      * Getter for the CurseForge file disk name.
      * @return String. Returns the file disk name of the CurseForge file.
@@ -211,7 +211,7 @@ public class CurseCreateModpack {
                 setProjectName(projectID);
                 setFileNameAndDiskName(projectID, fileID);
             }
-        } catch (CurseException cex) { appLogger.error(String.format(localizationManager.getLocalizedString("createmodpack.log.error.curseforgemodpack"), projectID, fileID), cex); }
+        } catch (CurseException cex) { LOG.error(String.format(LOCALIZATIONMANAGER.getLocalizedString("createmodpack.log.error.curseforgemodpack"), projectID, fileID), cex); }
 
         if (!checkCurseForgeDir(modpackDir) &&
                 !getProjectName().equals(String.valueOf(projectID)) &&
@@ -238,19 +238,18 @@ public class CurseCreateModpack {
      * @param projectID Integer. The ID of the project. Used to gather information and to download the modpack.
      * @param fileID Integer. The ID of the file. Used to gather information and to download the modpack.
      */
-    @SuppressWarnings("ResultOfMethodCallIgnored")
     void initializeModpack(String modpackDir, Integer projectID, Integer fileID) {
         try {
-            appLogger.info(String.format(localizationManager.getLocalizedString("createmodpack.log.info.initializemodpack.download"), getProjectName(), getFileName()));
+            LOG.info(String.format(LOCALIZATIONMANAGER.getLocalizedString("createmodpack.log.info.initializemodpack.download"), getProjectName(), getFileName()));
 
             CurseAPI.downloadFileToDirectory(projectID, fileID, Paths.get(modpackDir));
         } catch (CurseException cex) {
-            appLogger.error(String.format(localizationManager.getLocalizedString("createmodpack.log.error.initializemodpack.download"), getFileName(), getProjectName(), modpackDir));
+            LOG.error(String.format(LOCALIZATIONMANAGER.getLocalizedString("createmodpack.log.error.initializemodpack.download"), getFileName(), getProjectName(), modpackDir));
         }
 
         unzipArchive(String.format("%s/%s", modpackDir, getFileDiskName()), modpackDir);
         boolean isFileDeleted = new File(String.format("%s/%s", modpackDir, getFileDiskName())).delete();
-        if (isFileDeleted) { appLogger.info(localizationManager.getLocalizedString("createmodpack.log.info.initializemodpack.deletezip")); }
+        if (isFileDeleted) { LOG.info(LOCALIZATIONMANAGER.getLocalizedString("createmodpack.log.info.initializemodpack.deletezip")); }
 
         try {
             byte[] jsonData = Files.readAllBytes(Paths.get(String.format("%s/manifest.json", modpackDir)));
@@ -262,23 +261,24 @@ public class CurseCreateModpack {
             String[] minecraftLoaderVersions = modpack.getMinecraft().toString().split(",");
             String[] modLoaderVersion = minecraftLoaderVersions[1].replace("[", "").replace("]", "").split("-");
 
-            appLogger.info(localizationManager.getLocalizedString("createmodpack.log.info.initializemodpack.infoheader"));
-            appLogger.info(String.format(localizationManager.getLocalizedString("createmodpack.log.info.initializemodpack.modpackname"), modpack.getName()));
-            appLogger.info(String.format(localizationManager.getLocalizedString("createmodpack.log.info.initializemodpack.modpackversion"), modpack.getVersion()));
-            appLogger.info(String.format(localizationManager.getLocalizedString("createmodpack.log.info.initializemodpack.modpackauthor"), modpack.getAuthor()));
-            appLogger.info(String.format(localizationManager.getLocalizedString("createmodpack.log.info.initializemodpack.modpackminecraftversion"), minecraftLoaderVersions[0].replace("[", "")));
-            appLogger.info(String.format(localizationManager.getLocalizedString("createmodpack.log.info.initializemodpack.modloader"), setModloaderCase(modLoaderVersion[0])));
-            appLogger.info(String.format(localizationManager.getLocalizedString("createmodpack.log.info.initializemodpack.modloaderversion"), modLoaderVersion[1]));
+            LOG.info(LOCALIZATIONMANAGER.getLocalizedString("createmodpack.log.info.initializemodpack.infoheader"));
+            LOG.info(String.format(LOCALIZATIONMANAGER.getLocalizedString("createmodpack.log.info.initializemodpack.modpackname"), modpack.getName()));
+            LOG.info(String.format(LOCALIZATIONMANAGER.getLocalizedString("createmodpack.log.info.initializemodpack.modpackversion"), modpack.getVersion()));
+            LOG.info(String.format(LOCALIZATIONMANAGER.getLocalizedString("createmodpack.log.info.initializemodpack.modpackauthor"), modpack.getAuthor()));
+            LOG.info(String.format(LOCALIZATIONMANAGER.getLocalizedString("createmodpack.log.info.initializemodpack.modpackminecraftversion"), minecraftLoaderVersions[0].replace("[", "")));
+            LOG.info(String.format(LOCALIZATIONMANAGER.getLocalizedString("createmodpack.log.info.initializemodpack.modloader"), setModloaderCase(modLoaderVersion[0])));
+            LOG.info(String.format(LOCALIZATIONMANAGER.getLocalizedString("createmodpack.log.info.initializemodpack.modloaderversion"), modLoaderVersion[1]));
 
-        } catch (IOException ex) { appLogger.error(localizationManager.getLocalizedString("createmodpack.log.error.initializemodpack.readmodpack"), ex); }
+        } catch (IOException ex) { LOG.error(LOCALIZATIONMANAGER.getLocalizedString("createmodpack.log.error.initializemodpack.readmodpack"), ex); }
 
         copyOverride(modpackDir);
         if (new File(String.format("%s/overrides", modpackDir)).isDirectory()) {
             try {
                 Path pathToBeDeleted = Paths.get(String.format("%s/overrides", modpackDir));
+                //noinspection ResultOfMethodCallIgnored
                 Files.walk(pathToBeDeleted).sorted(Comparator.reverseOrder()).map(Path::toFile).forEach(File::delete);
             } catch (IOException ex) {
-                appLogger.info(localizationManager.getLocalizedString("createmodpack.log.info.initializemodpack.overrides"));
+                LOG.info(LOCALIZATIONMANAGER.getLocalizedString("createmodpack.log.info.initializemodpack.overrides"));
             }
         }
 
@@ -295,9 +295,8 @@ public class CurseCreateModpack {
      * was taken down, no longer exists, CurseForge is unavailable etc. etc. There's nothing we can do about that.
      * @param modpackDir String. All mods are downloaded to the child-directory "mods" inside the modpack directory.
      */
-    @SuppressWarnings({"OptionalGetWithoutIsPresent", "BusyWait"})
     void downloadMods(String modpackDir) {
-        appLogger.info(localizationManager.getLocalizedString("createmodpack.log.info.downloadmods.info"));
+        LOG.info(LOCALIZATIONMANAGER.getLocalizedString("createmodpack.log.info.downloadmods.info"));
         List<String> failedDownloads = new ArrayList<>();
 
         try {
@@ -312,7 +311,7 @@ public class CurseCreateModpack {
             CurseSplines curseSplines = new CurseSplines();
             for (int i = 0; i < curseModpack.getFiles().size(); i++) {
                 if (randInt.nextInt(curseModpack.getFiles().size())==i) {
-                    appLogger.info(curseSplines.reticulate());
+                    LOG.info(curseSplines.reticulate());
                 }
                 String[] mods = curseModpack.getFiles().get(i).toString().split(",");
 
@@ -325,34 +324,36 @@ public class CurseCreateModpack {
 
                 try {
 
+                    //noinspection OptionalGetWithoutIsPresent
                     modName = CurseAPI.project(modID).get().name();
+                    //noinspection OptionalGetWithoutIsPresent
                     modFileName = Objects.requireNonNull(CurseAPI.project(modID).get().files().fileWithID(fileID)).nameOnDisk();
 
                 } catch (CurseException cex) {
-                    appLogger.error(localizationManager.getLocalizedString("createmodpack.log.error.downloadmods.curseforgeinfo"), cex);
+                    LOG.error(LOCALIZATIONMANAGER.getLocalizedString("createmodpack.log.error.downloadmods.curseforgeinfo"), cex);
                 }
 
                 try {
 
-                    appLogger.info(String.format(localizationManager.getLocalizedString("createmodpack.log.info.downloadmods.specificmod"), i+1, curseModpack.getFiles().size(), modName, modFileName));
+                    LOG.info(String.format(LOCALIZATIONMANAGER.getLocalizedString("createmodpack.log.info.downloadmods.specificmod"), i+1, curseModpack.getFiles().size(), modName, modFileName));
                     //Download mod
                     CurseAPI.downloadFileToDirectory(modID, fileID, Paths.get(String.format("%s/mods", modpackDir)));
 
                     try { Thread.sleep(1000); }
-                    catch (InterruptedException iex) { appLogger.debug(localizationManager.getLocalizedString("createmodpack.log.debug.downloadmods.sleep"), iex); }
+                    catch (InterruptedException iex) { LOG.debug(LOCALIZATIONMANAGER.getLocalizedString("createmodpack.log.debug.downloadmods.sleep"), iex); }
 
                 } catch (CurseException cex) {
-                    appLogger.error(String.format(localizationManager.getLocalizedString("createmodpack.log.error.downloadmods.errordownload"), modName, modID, modFileName, fileID));
+                    LOG.error(String.format(LOCALIZATIONMANAGER.getLocalizedString("createmodpack.log.error.downloadmods.errordownload"), modName, modID, modFileName, fileID));
 
                     try {
 
-                        appLogger.info(String.format(localizationManager.getLocalizedString("createmodpack.log.info.downloadmods.tryagain"), modName, modID, modFileName, fileID));
+                        LOG.info(String.format(LOCALIZATIONMANAGER.getLocalizedString("createmodpack.log.info.downloadmods.tryagain"), modName, modID, modFileName, fileID));
                         //Retry download if previous attempt failed
                         CurseAPI.downloadFileToDirectory(modID, fileID, Paths.get(String.format("%s/mods", modpackDir)));
 
                     } catch (CurseException cex2) {
 
-                        appLogger.error(String.format(localizationManager.getLocalizedString("createmodpack.log.error.downloadmods.retryfail"), modName, modID, modFileName, fileID));
+                        LOG.error(String.format(LOCALIZATIONMANAGER.getLocalizedString("createmodpack.log.error.downloadmods.retryfail"), modName, modID, modFileName, fileID));
 
                         try {
                             //Add URL of failed download to list
@@ -360,18 +361,18 @@ public class CurseCreateModpack {
 
                         } catch (CurseException cex3) {
 
-                            appLogger.error(localizationManager.getLocalizedString("createmodpack.log.error.downloadmods.urlfail"));
+                            LOG.error(LOCALIZATIONMANAGER.getLocalizedString("createmodpack.log.error.downloadmods.urlfail"));
                         }
                     }
                 }
             }
         } catch (IOException ex) {
-            appLogger.error(localizationManager.getLocalizedString("createmodpack.log.error.downloadmods.fail"));
+            LOG.error(LOCALIZATIONMANAGER.getLocalizedString("createmodpack.log.error.downloadmods.fail"));
         }
         if (failedDownloads.size() != 0) {
             //Print the URLs of failed downloads, if there are any
             for (int i = 0; i <= failedDownloads.size(); i++) {
-                appLogger.error(String.format(localizationManager.getLocalizedString("createmodpack.log.error.downloadmods.urllist"), failedDownloads.get(i)));
+                LOG.error(String.format(LOCALIZATIONMANAGER.getLocalizedString("createmodpack.log.error.downloadmods.urllist"), failedDownloads.get(i)));
             }
         }
     }
@@ -382,22 +383,22 @@ public class CurseCreateModpack {
      *                  are copied to the parent directory, the modpack directory.
      */
     void copyOverride(String modpackDir) {
-        appLogger.info(localizationManager.getLocalizedString("createmodpack.log.info.copyoverrides.info"));
+        LOG.info(LOCALIZATIONMANAGER.getLocalizedString("createmodpack.log.info.copyoverrides.info"));
         try {
             Stream<Path> files = Files.walk(Paths.get(String.format("%s/overrides", modpackDir)));
             files.forEach(file -> {
                 try {
                     Files.copy(file, Paths.get(modpackDir).resolve(Paths.get(String.format("%s/overrides", modpackDir)).relativize(file)), REPLACE_EXISTING);
-                    appLogger.debug(String.format(localizationManager.getLocalizedString("createmodpack.log.debug.copyoverrides.status"), file.toAbsolutePath().toString()));
+                    LOG.debug(String.format(LOCALIZATIONMANAGER.getLocalizedString("createmodpack.log.debug.copyoverrides.status"), file.toAbsolutePath()));
                 } catch (IOException ex) {
                     if (!ex.toString().startsWith("java.nio.file.DirectoryNotEmptyException")) {
-                        appLogger.error(localizationManager.getLocalizedString("createmodpack.log.error.copyoverrides.copy"), ex);
+                        LOG.error(LOCALIZATIONMANAGER.getLocalizedString("createmodpack.log.error.copyoverrides.copy"), ex);
                     }
                 }
             });
             files.close();
         } catch (IOException ex) {
-            appLogger.error(localizationManager.getLocalizedString("createmodpack.log.error.copyoverrides.copy"), ex);
+            LOG.error(LOCALIZATIONMANAGER.getLocalizedString("createmodpack.log.error.copyoverrides.copy"), ex);
         }
     }
 
@@ -413,9 +414,9 @@ public class CurseCreateModpack {
     boolean checkCurseForgeDir(String modpackDir) {
         boolean isModpackPresent = false;
         if (!(new File(modpackDir).isDirectory()) && !(new File(String.format("%s/manifest.json", modpackDir)).exists())) {
-            appLogger.info(localizationManager.getLocalizedString("createmodpack.log.info.checkcurseforgedir.create"));
+            LOG.info(LOCALIZATIONMANAGER.getLocalizedString("createmodpack.log.info.checkcurseforgedir.create"));
         } else {
-            appLogger.info(localizationManager.getLocalizedString("createmodpack.log.info.checkcurseforgedir"));
+            LOG.info(LOCALIZATIONMANAGER.getLocalizedString("createmodpack.log.info.checkcurseforgedir"));
             isModpackPresent = cleanupEnvironment(modpackDir);
         }
         return isModpackPresent;
@@ -429,7 +430,7 @@ public class CurseCreateModpack {
      * @param modpackDir The directory into which the ZIP-archive will be unzipped into.
      */
     void unzipArchive(String zipFile, String modpackDir) {
-        appLogger.info(localizationManager.getLocalizedString("createmodpack.log.info.unziparchive"));
+        LOG.info(LOCALIZATIONMANAGER.getLocalizedString("createmodpack.log.info.unziparchive"));
         File destDir = new File(modpackDir);
         byte[] buffer = new byte[1024];
         try {
@@ -439,12 +440,12 @@ public class CurseCreateModpack {
                 final File newFile = newFile(destDir, zipEntry);
                 if (zipEntry.isDirectory()) {
                     if (!newFile.isDirectory() && !newFile.mkdirs()) {
-                        appLogger.error(String.format(localizationManager.getLocalizedString("createmodpack.log.error.unziparchive.createdir"), newFile));
+                        LOG.error(String.format(LOCALIZATIONMANAGER.getLocalizedString("createmodpack.log.error.unziparchive.createdir"), newFile));
                     }
                 } else {
                     File parent = newFile.getParentFile();
                     if (!parent.isDirectory() && !parent.mkdirs()) {
-                        appLogger.error(String.format(localizationManager.getLocalizedString("createmodpack.log.error.unziparchive.createdir"), parent));
+                        LOG.error(String.format(LOCALIZATIONMANAGER.getLocalizedString("createmodpack.log.error.unziparchive.createdir"), parent));
                     }
                     final FileOutputStream output = new FileOutputStream(newFile);
                     int length;
@@ -458,7 +459,7 @@ public class CurseCreateModpack {
             input.closeEntry();
             input.close();
         } catch (IOException ex) {
-            appLogger.error(String.format(localizationManager.getLocalizedString("createmodpack.log.error.unziparchive.extract"), zipFile), ex);
+            LOG.error(String.format(LOCALIZATIONMANAGER.getLocalizedString("createmodpack.log.error.unziparchive.extract"), zipFile), ex);
         }
     }
 
@@ -481,15 +482,15 @@ public class CurseCreateModpack {
             destDirPath = destinationDir.getCanonicalPath();
 
         } catch (IOException ex) {
-            appLogger.error(String.format(localizationManager.getLocalizedString("createmodpack.log.error.newfile.path"), destinationDir), ex);
+            LOG.error(String.format(LOCALIZATIONMANAGER.getLocalizedString("createmodpack.log.error.newfile.path"), destinationDir), ex);
         }
         try {
             destFilePath = destFile.getCanonicalPath();
         } catch (IOException ex) {
-            appLogger.error(String.format(localizationManager.getLocalizedString("createmodpack.log.error.newfile.path"), destFile.toString()), ex);
+            LOG.error(String.format(LOCALIZATIONMANAGER.getLocalizedString("createmodpack.log.error.newfile.path"), destFile), ex);
         }
         if (destFilePath != null && !destFilePath.startsWith(destDirPath + File.separator)) {
-            appLogger.error(String.format(localizationManager.getLocalizedString("createmodpack.log.error.newfile.outside"), zipEntry.getName()));
+            LOG.error(String.format(LOCALIZATIONMANAGER.getLocalizedString("createmodpack.log.error.newfile.outside"), zipEntry.getName()));
         }
         return destFile;
     }
@@ -503,7 +504,7 @@ public class CurseCreateModpack {
     boolean cleanupEnvironment(String modpackDir) {
         boolean cleanedUp = false;
         if (new File(modpackDir).exists()) {
-            appLogger.info(localizationManager.getLocalizedString("createmodpack.log.info.cleanupenvironment.enter"));
+            LOG.info(LOCALIZATIONMANAGER.getLocalizedString("createmodpack.log.info.cleanupenvironment.enter"));
             Path modpackPath = Paths.get(modpackDir);
             try {
                 Files.walkFileTree(modpackPath,
@@ -524,9 +525,9 @@ public class CurseCreateModpack {
                         });
             } catch (IOException ex) {
                 cleanedUp = true;
-                appLogger.error(String.format(localizationManager.getLocalizedString("createmodpack.log.error.cleanupenvironment"), modpackDir));
+                LOG.error(String.format(LOCALIZATIONMANAGER.getLocalizedString("createmodpack.log.error.cleanupenvironment"), modpackDir));
             } finally {
-                appLogger.info(localizationManager.getLocalizedString("createmodpack.log.info.cleanupenvironment.complete"));
+                LOG.info(LOCALIZATIONMANAGER.getLocalizedString("createmodpack.log.info.cleanupenvironment.complete"));
             }
         }
         return cleanedUp;
diff --git a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.java b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.java
index 31a3fb8d8..efb9623bd 100644
--- a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.java
+++ b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseMinecraft.java
@@ -61,7 +61,7 @@ public class CurseMinecraft {
 
     /**
      * Getter for modloader related information using {@link CurseModLoaders}.
-     * @return List CurseModLoaders. Returns an isntance of CurseModLoaders.class with information about the modlaoder
+     * @return List CurseModLoaders. Returns an instance of CurseModLoaders.class with information about the modloader
      * and modloader version used by the CurseForge modpack.
      */
     public List<CurseModLoaders> getModLoaders() {
diff --git a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.java b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.java
index 17661d92c..5b1b2dd10 100644
--- a/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.java
+++ b/src/main/java/de/griefed/serverpackcreator/curseforgemodpack/CurseSplines.java
@@ -23,7 +23,7 @@ import java.util.Random;
 
 /**
  * <strong>Table of methods</strong><br>
- * {@link #reticulating}<br>
+ * {@link #RETICULATING}<br>
  * {@link #getRandomInt()}<br>
  * {@link #getSpline()}<br>
  * {@link #reticulate()}<p>
@@ -36,7 +36,7 @@ public class CurseSplines {
     /**
      * The list of messages as they were available in SimCity, plus Reticulating Splines added by myself, for good measure.
      */
-    private final String[] reticulating = {
+    private final String[] RETICULATING = {
             "Adding Hidden Agendas",
             "Adjusting Bell Curves",
             "Aesthesizing Industrial Areas",
@@ -147,24 +147,24 @@ public class CurseSplines {
     };
 
     /**
-     * Retrieves the index of a random message in {@link #reticulating}.
+     * Retrieves the index of a random message in {@link #RETICULATING}.
      * @return Integer. Returns a randomly generated index.
      */
     private int getRandomInt() {
         Random randInt = new Random();
-        return randInt.nextInt(reticulating.length);
+        return randInt.nextInt(RETICULATING.length);
     }
 
     /**
-     * Retrieves a message from {@link #reticulating} using a randomly generated index from {@link #getRandomInt()}.
+     * Retrieves a message from {@link #RETICULATING} using a randomly generated index from {@link #getRandomInt()}.
      * @return String. Returns the message at the index provided by the randomizer.
      */
     private String getSpline() {
-        return reticulating[getRandomInt()];
+        return RETICULATING[getRandomInt()];
     }
 
     /**
-     * Retrieve a random message from {@link #reticulating}.
+     * Retrieve a random message from {@link #RETICULATING}.
      * @return String. Returns a random message.
      */
     public String reticulate() {
diff --git a/src/main/java/de/griefed/serverpackcreator/gui/AboutTab.java b/src/main/java/de/griefed/serverpackcreator/gui/AboutTab.java
index 0f1d06e96..c8294ed00 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/AboutTab.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/AboutTab.java
@@ -41,9 +41,9 @@ import java.util.Objects;
  * to Griefed#s discord server in your browser.
  */
 public class AboutTab extends Component {
-    private static final Logger appLogger = LogManager.getLogger(AboutTab.class);
+    private static final Logger LOG = LogManager.getLogger(AboutTab.class);
 
-    private LocalizationManager localizationManager;
+    private final LocalizationManager LOCALIZATIONMANAGER;
 
     /**
      * <strong>Constructor</strong><p>
@@ -54,31 +54,24 @@ public class AboutTab extends Component {
      */
     public AboutTab(LocalizationManager injectedLocalizationManager) {
         if (injectedLocalizationManager == null) {
-            this.localizationManager = new LocalizationManager();
+            this.LOCALIZATIONMANAGER = new LocalizationManager();
         } else {
-            this.localizationManager = injectedLocalizationManager;
+            this.LOCALIZATIONMANAGER = injectedLocalizationManager;
         }
     }
 
-    private final Dimension miscButtonDimension = new Dimension(50,50);
+    private final Dimension DIMENSION_MISC_BUTTON = new Dimension(50,50);
 
-    private final ImageIcon issueIcon           = new ImageIcon(Objects.requireNonNull(CreateGui.class.getResource("/de/griefed/resources/gui/issue.png")));
-    private final ImageIcon hastebinIcon        = new ImageIcon(Objects.requireNonNull(CreateGui.class.getResource("/de/griefed/resources/gui/hastebin.png")));
-    private final ImageIcon prosperIcon         = new ImageIcon(Objects.requireNonNull(CreateGui.class.getResource("/de/griefed/resources/gui/prosper.png")));
+    private final ImageIcon ICON_ISSUE = new ImageIcon(Objects.requireNonNull(CreateGui.class.getResource("/de/griefed/resources/gui/issue.png")));
+    private final ImageIcon ICON_HASTEBIN = new ImageIcon(Objects.requireNonNull(CreateGui.class.getResource("/de/griefed/resources/gui/hastebin.png")));
+    private final ImageIcon ICON_PROSPER = new ImageIcon(Objects.requireNonNull(CreateGui.class.getResource("/de/griefed/resources/gui/prosper.png")));
 
-    private JComponent aboutPanel;
-
-    private GridBagConstraints constraints;
-
-    private JTextPane textPane;
-
-    private SimpleAttributeSet attributeSet;
+    private final Clipboard CLIPBOARD = Toolkit.getDefaultToolkit().getSystemClipboard();
 
-    private StyledDocument document;
+    private final File FILE_CONFIG = new File("serverpackcreator.conf");
+    private final File LOG_SERVERPACKCREATOR = new File("logs/serverpackcreator.log");
 
-    private JButton buttonCreatePasteBin;
-    private JButton buttonOpenIssue;
-    private JButton buttonDiscord;
+    private JComponent aboutPanel;
 
     private JTextArea textArea;
 
@@ -88,12 +81,8 @@ public class AboutTab extends Component {
 
     private StringSelection stringSelection;
 
-    private Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
-
-    private final File serverPackCreatorConf = new File("serverpackcreator.conf");
-    private final File serverPackCreatorLog = new File("logs/serverpackcreator.log");
-
     private String[] options;
+
     private int userResponse;
 
     /**
@@ -108,7 +97,7 @@ public class AboutTab extends Component {
     JComponent aboutTab() {
         aboutPanel = new JPanel(false);
         aboutPanel.setLayout(new GridBagLayout());
-        constraints = new GridBagConstraints();
+        GridBagConstraints constraints = new GridBagConstraints();
 
         constraints.anchor = GridBagConstraints.CENTER;
         constraints.fill = GridBagConstraints.BOTH;
@@ -117,29 +106,29 @@ public class AboutTab extends Component {
         constraints.gridwidth = 3;
 
         //About Panel
-        textPane = new JTextPane();
+        JTextPane textPane = new JTextPane();
         textPane.setEditable(false);
         textPane.setOpaque(false);
         textPane.setMinimumSize(new Dimension(getMaximumSize().width,520));
         textPane.setPreferredSize(new Dimension(getMaximumSize().width,520));
         textPane.setMaximumSize(new Dimension(getMaximumSize().width,520));
 
-        attributeSet = new SimpleAttributeSet();
+        SimpleAttributeSet attributeSet = new SimpleAttributeSet();
         StyleConstants.setBold(attributeSet, true);
         StyleConstants.setFontSize(attributeSet, 14);
         textPane.setCharacterAttributes(attributeSet, true);
 
-        document = textPane.getStyledDocument();
+        StyledDocument document = textPane.getStyledDocument();
         StyleConstants.setAlignment(attributeSet, StyleConstants.ALIGN_CENTER);
         document.setParagraphAttributes(0, document.getLength(), attributeSet, false);
 
         try {
             document.insertString(
                     document.getLength(),
-                    localizationManager.getLocalizedString("createserverpack.gui.about.text"),
+                    LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.about.text"),
                     attributeSet
             ); } catch (BadLocationException ex) {
-            appLogger.error(localizationManager.getLocalizedString("about.log.error.document"), ex);
+            LOG.error(LOCALIZATIONMANAGER.getLocalizedString("about.log.error.document"), ex);
         }
         aboutPanel.add(textPane, constraints);
 
@@ -157,40 +146,40 @@ public class AboutTab extends Component {
         constraints.gridwidth = 1;
 
         //Button to upload log file to hastebin
-        buttonCreatePasteBin = new JButton();
-        buttonCreatePasteBin.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.about.hastebin"));
-        buttonCreatePasteBin.setIcon(hastebinIcon);
-        buttonCreatePasteBin.setPreferredSize(miscButtonDimension);
+        JButton buttonCreatePasteBin = new JButton();
+        buttonCreatePasteBin.setToolTipText(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.about.hastebin"));
+        buttonCreatePasteBin.setIcon(ICON_HASTEBIN);
+        buttonCreatePasteBin.setPreferredSize(DIMENSION_MISC_BUTTON);
         buttonCreatePasteBin.addActionListener(e -> {
 
             textArea = new JTextArea();
             textArea.setOpaque(false);
-            configURL = createHasteBinFromFile(serverPackCreatorConf);
-            spclogURL = createHasteBinFromFile(serverPackCreatorLog);
+            configURL = createHasteBinFromFile(FILE_CONFIG);
+            spclogURL = createHasteBinFromFile(LOG_SERVERPACKCREATOR);
             textAreaContent = String.format(
                     "%s\n%s\n" +
                     "%s\n%s\n",
-                    localizationManager.getLocalizedString("createserverpack.gui.about.hastebin.conf"),
+                    LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.about.hastebin.conf"),
                     configURL,
-                    localizationManager.getLocalizedString("createserverpack.gui.about.hastebin.spclog"),
+                    LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.about.hastebin.spclog"),
                     spclogURL
             );
 
             textArea.setText(textAreaContent);
 
             options = new String[] {
-                    localizationManager.getLocalizedString("createserverpack.gui.about.hastebin.dialog.yes"),
-                    localizationManager.getLocalizedString("createserverpack.gui.about.hastebin.dialog.no"),
-                    localizationManager.getLocalizedString("createserverpack.gui.about.hastebin.dialog.clipboard"),
+                    LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.about.hastebin.dialog.yes"),
+                    LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.about.hastebin.dialog.no"),
+                    LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.about.hastebin.dialog.clipboard"),
             };
 
             userResponse = JOptionPane.showOptionDialog(
                     aboutPanel,
                     textArea,
-                    localizationManager.getLocalizedString("createserverpack.gui.about.hastebin.dialog"),
+                    LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.about.hastebin.dialog"),
                     JOptionPane.DEFAULT_OPTION,
                     JOptionPane.INFORMATION_MESSAGE,
-                    hastebinIcon,
+                    ICON_HASTEBIN,
                     options,
                     options[0]
             );
@@ -205,14 +194,14 @@ public class AboutTab extends Component {
                             Desktop.getDesktop().browse(URI.create(spclogURL));
                         }
                     } catch (IOException ex) {
-                        appLogger.error(localizationManager.getLocalizedString("about.log.error.browser"), ex);
+                        LOG.error(LOCALIZATIONMANAGER.getLocalizedString("about.log.error.browser"), ex);
                     }
                     break;
 
                 case 2:
 
                     stringSelection = new StringSelection(textAreaContent);
-                    clipboard.setContents(stringSelection, null);
+                    CLIPBOARD.setContents(stringSelection, null);
                     break;
 
                 default:
@@ -224,10 +213,10 @@ public class AboutTab extends Component {
         aboutPanel.add(buttonCreatePasteBin, constraints);
 
         //Button to open a new issue on GitHub
-        buttonOpenIssue = new JButton();
-        buttonOpenIssue.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.about.issue"));
-        buttonOpenIssue.setIcon(issueIcon);
-        buttonOpenIssue.setPreferredSize(miscButtonDimension);
+        JButton buttonOpenIssue = new JButton();
+        buttonOpenIssue.setToolTipText(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.about.issue"));
+        buttonOpenIssue.setIcon(ICON_ISSUE);
+        buttonOpenIssue.setPreferredSize(DIMENSION_MISC_BUTTON);
         buttonOpenIssue.addActionListener(e -> {
 
             try {
@@ -235,7 +224,7 @@ public class AboutTab extends Component {
                     Desktop.getDesktop().browse(URI.create("https://github.com/Griefed/ServerPackCreator/issues"));
                 }
             } catch (IOException ex) {
-                appLogger.error(localizationManager.getLocalizedString("about.log.error.browser"), ex);
+                LOG.error(LOCALIZATIONMANAGER.getLocalizedString("about.log.error.browser"), ex);
             }
 
         });
@@ -244,10 +233,10 @@ public class AboutTab extends Component {
         aboutPanel.add(buttonOpenIssue, constraints);
 
         //Button to open the invite link to the discord server
-        buttonDiscord = new JButton();
-        buttonDiscord.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.about.discord"));
-        buttonDiscord.setIcon(prosperIcon);
-        buttonDiscord.setPreferredSize(miscButtonDimension);
+        JButton buttonDiscord = new JButton();
+        buttonDiscord.setToolTipText(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.about.discord"));
+        buttonDiscord.setIcon(ICON_PROSPER);
+        buttonDiscord.setPreferredSize(DIMENSION_MISC_BUTTON);
         buttonDiscord.addActionListener(e -> {
 
             try {
@@ -255,7 +244,7 @@ public class AboutTab extends Component {
                     Desktop.getDesktop().browse(URI.create("https://discord.griefed.de"));
                 }
             } catch (IOException ex) {
-                appLogger.error(localizationManager.getLocalizedString("about.log.error.browser"), ex);
+                LOG.error(LOCALIZATIONMANAGER.getLocalizedString("about.log.error.browser"), ex);
             }
 
         });
@@ -294,22 +283,25 @@ public class AboutTab extends Component {
         BufferedReader bufferedReader;
 
         try { url = new URL(requestURL); }
-        catch (IOException ex) {appLogger.error(localizationManager.getLocalizedString("createserverpack.log.error.abouttab.hastebin.request"), ex);}
+        catch (IOException ex) {
+            LOG.error(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.log.error.abouttab.hastebin.request"), ex);}
 
         try { text = FileUtils.readFileToString(textFile, "UTF-8"); }
-        catch (IOException ex) { appLogger.error(localizationManager.getLocalizedString("createserverpack.log.error.abouttab.hastebin.readfile"),ex); }
+        catch (IOException ex) { LOG.error(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.log.error.abouttab.hastebin.readfile"),ex); }
 
         postData = Objects.requireNonNull(text).getBytes(StandardCharsets.UTF_8);
         postDataLength = postData.length;
 
         try { conn = (HttpsURLConnection) Objects.requireNonNull(url).openConnection(); }
-        catch (IOException ex) {appLogger.error(localizationManager.getLocalizedString("createserverpack.log.error.abouttab.hastebin.connection"), ex);}
+        catch (IOException ex) {
+            LOG.error(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.log.error.abouttab.hastebin.connection"), ex);}
 
         Objects.requireNonNull(conn).setDoOutput(true);
         conn.setInstanceFollowRedirects(false);
 
         try { conn.setRequestMethod("POST"); }
-        catch (ProtocolException ex) {appLogger.error(localizationManager.getLocalizedString("createserverpack.log.error.abouttab.hastebin.method"), ex);}
+        catch (ProtocolException ex) {
+            LOG.error(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.log.error.abouttab.hastebin.method"), ex);}
 
         conn.setRequestProperty("User-Agent", "HasteBin-Creator for ServerPackCreator");
         conn.setRequestProperty("Content-Length", Integer.toString(postDataLength));
@@ -321,7 +313,7 @@ public class AboutTab extends Component {
             bufferedReader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
             response = bufferedReader.readLine();
         } catch (IOException ex) {
-            appLogger.error(localizationManager.getLocalizedString("createserverpack.log.error.abouttab.hastebin.response"), ex);
+            LOG.error(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.log.error.abouttab.hastebin.response"), ex);
         }
 
         if (Objects.requireNonNull(response).contains("\"key\"")) {
@@ -331,7 +323,7 @@ public class AboutTab extends Component {
         if (response.contains("https://haste.zneix.eu")) {
             return response;
         } else {
-            return localizationManager.getLocalizedString("createserverpack.log.error.abouttab.hastebin.response");
+            return LOCALIZATIONMANAGER.getLocalizedString("createserverpack.log.error.abouttab.hastebin.response");
         }
 
     }
diff --git a/src/main/java/de/griefed/serverpackcreator/gui/BackgroundPanel.java b/src/main/java/de/griefed/serverpackcreator/gui/BackgroundPanel.java
index 93b06ba02..2d49ab424 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/BackgroundPanel.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/BackgroundPanel.java
@@ -51,7 +51,7 @@ import javax.swing.*;
 import java.awt.*;
 
 /**
- * Hey, Griefed here. I tried to add a tiled background image to the frame which holds the JTabbedPane, but after serveral
+ * Hey, Griefed here. I tried to add a tiled background image to the frame which holds the JTabbedPane, but after several
  * failed attempts, I gave up and almost threw the idea out of the window. I wanted to set the background to a tiled image,
  * because simply setting a colour seemed too boring, and I needed <em>something</em> in the background so the banner
  * icon would be more clear to the eye. So, I activated my Google-Fu and encountered this holy grail of tiling images
@@ -159,7 +159,7 @@ public class BackgroundPanel extends JPanel {
      * @param alignmentX Sets the alignment along the x-axis.
      */
     public void setImageAlignmentX(float alignmentX) {
-        this.alignmentX = alignmentX > 1.0f ? 1.0f : alignmentX < 0.0f ? 0.0f : alignmentX;
+        this.alignmentX = alignmentX > 1.0f ? 1.0f : Math.max(alignmentX, 0.0f);
         repaint();
     }
 
@@ -168,7 +168,7 @@ public class BackgroundPanel extends JPanel {
      * @param alignmentY Sets the alignment along the y-axis.
      */
     public void setImageAlignmentY(float alignmentY) {
-        this.alignmentY = alignmentY > 1.0f ? 1.0f : alignmentY < 0.0f ? 0.0f : alignmentY;
+        this.alignmentY = alignmentY > 1.0f ? 1.0f : Math.max(alignmentY, 0.0f);
         repaint();
     }
 
@@ -195,7 +195,7 @@ public class BackgroundPanel extends JPanel {
     /**
      * Override method so we can make the component transparent.
      * @param component JComponent to add to the panel.
-     * @param constraints Contraints wich which the panel should be added.
+     * @param constraints Constraints with which the panel should be added.
      */
     public void add(JComponent component, Object constraints) {
         if (isTransparentAdd)
@@ -260,10 +260,6 @@ public class BackgroundPanel extends JPanel {
         if (image == null ) return;
 
         switch (style) {
-            case SCALED :
-                drawScaled(g);
-                break;
-
             case TILED  :
                 drawTiled(g);
                 break;
diff --git a/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java b/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java
index aa6f037cc..3da169fc4 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/CreateGui.java
@@ -50,25 +50,23 @@ import java.util.Objects;
  * are created in the constructor of this class to make sure they are ready when the GUI is created and shown to the user.
  */
 public class CreateGui extends JPanel {
-    private static final Logger appLogger = LogManager.getLogger(CreateGui.class);
+    private static final Logger LOG = LogManager.getLogger(CreateGui.class);
 
-    private final ImageIcon bannerIcon      = new ImageIcon(Objects.requireNonNull(CreateGui.class.getResource("/de/griefed/resources/gui/banner.png")));
-    private final Image icon                = Toolkit.getDefaultToolkit().getImage(Objects.requireNonNull(CreateGui.class.getResource("/de/griefed/resources/gui/app.png")));
-    private final Dimension windowDimension = new Dimension(800,860);
-    private BufferedImage bufferedImage;
+    private final ImageIcon ICON_SERVERPACKCREATOR_BANNER = new ImageIcon(Objects.requireNonNull(CreateGui.class.getResource("/de/griefed/resources/gui/banner.png")));
+    private final Image ICON_SERVERPACKCREATOR = Toolkit.getDefaultToolkit().getImage(Objects.requireNonNull(CreateGui.class.getResource("/de/griefed/resources/gui/app.png")));
+    private final Dimension DIMENSION_WINDOW = new Dimension(800,860);
 
-    private LocalizationManager localizationManager;
-    private Configuration configuration;
-    private CurseCreateModpack curseCreateModpack;
-    private CreateServerPack createServerPack;
+    private final LocalizationManager LOCALIZATIONMANAGER;
+    private final Configuration CONFIGURATION;
+    private final CurseCreateModpack CURSECREATEMODPACK;
+    private final CreateServerPack CREATESERVERPACK;
 
-    private CreateServerPackTab createServerPackTab;
-    private ServerPackCreatorLogTab serverPackCreatorLogTab;
-    private ModloaderInstallerLogTab modloaderInstallerLogTab;
-    private AboutTab aboutTab;
-    private BackgroundPanel backgroundPanel;
-    private JTabbedPane tabbedPane;
+    private final BackgroundPanel BACKGROUNDPANEL;
+    private final JFrame FRAME_SERVERPACKCREATOR;
 
+    private File secretFile;
+    private Config secret;
+    private BufferedImage bufferedImage;
     /**
      * <strong>Constructor</strong><p>
      * Used for Dependency Injection.<p>
@@ -88,48 +86,48 @@ public class CreateGui extends JPanel {
         super(new GridLayout(1, 1));
 
         if (injectedLocalizationManager == null) {
-            this.localizationManager = new LocalizationManager();
+            this.LOCALIZATIONMANAGER = new LocalizationManager();
         } else {
-            this.localizationManager = injectedLocalizationManager;
+            this.LOCALIZATIONMANAGER = injectedLocalizationManager;
         }
 
         if (injectedConfiguration == null) {
-            this.curseCreateModpack = new CurseCreateModpack(localizationManager);
+            this.CURSECREATEMODPACK = new CurseCreateModpack(LOCALIZATIONMANAGER);
         } else {
-            this.curseCreateModpack = injectedCurseCreateModpack;
+            this.CURSECREATEMODPACK = injectedCurseCreateModpack;
         }
 
         if (injectedConfiguration == null) {
-            this.configuration = new Configuration(localizationManager, curseCreateModpack);
+            this.CONFIGURATION = new Configuration(LOCALIZATIONMANAGER, CURSECREATEMODPACK);
         } else {
-            this.configuration = injectedConfiguration;
+            this.CONFIGURATION = injectedConfiguration;
         }
 
         if (injectedCreateServerPack == null) {
-            this.createServerPack = new CreateServerPack(localizationManager, configuration, curseCreateModpack);
+            this.CREATESERVERPACK = new CreateServerPack(LOCALIZATIONMANAGER, CONFIGURATION, CURSECREATEMODPACK);
         } else {
-            this.createServerPack = injectedCreateServerPack;
+            this.CREATESERVERPACK = injectedCreateServerPack;
         }
 
         try { bufferedImage = ImageIO.read(Objects.requireNonNull(getClass().getResource("/de/griefed/resources/gui/tile.png")));}
-        catch (IOException ex) { appLogger.error(localizationManager.getLocalizedString("createserverpack.gui.createandshowgui.image"), ex); }
+        catch (IOException ex) { LOG.error(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.createandshowgui.image"), ex); }
 
-        createServerPackTab = new CreateServerPackTab(localizationManager, configuration, curseCreateModpack, createServerPack);
-        serverPackCreatorLogTab = new ServerPackCreatorLogTab(localizationManager);
-        modloaderInstallerLogTab = new ModloaderInstallerLogTab(localizationManager);
-        aboutTab = new AboutTab(localizationManager);
+        CreateServerPackTab TAB_CREATESERVERPACK = new CreateServerPackTab(LOCALIZATIONMANAGER, CONFIGURATION, CURSECREATEMODPACK, CREATESERVERPACK);
+        ServerPackCreatorLogTab TAB_LOG_SERVERPACKCREATOR = new ServerPackCreatorLogTab(LOCALIZATIONMANAGER);
+        ModloaderInstallerLogTab TAB_LOG_MODLOADERINSTALLER = new ModloaderInstallerLogTab(LOCALIZATIONMANAGER);
+        AboutTab TAB_ABOUT = new AboutTab(LOCALIZATIONMANAGER);
 
-        serverPackCreatorFrame = new JFrame(localizationManager.getLocalizedString("createserverpack.gui.createandshowgui"));
+        FRAME_SERVERPACKCREATOR = new JFrame(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.createandshowgui"));
 
-        backgroundPanel = new BackgroundPanel(bufferedImage, BackgroundPanel.TILED, 0.0f, 0.0f);
+        BACKGROUNDPANEL = new BackgroundPanel(bufferedImage, BackgroundPanel.TILED, 0.0f, 0.0f);
 
-        tabbedPane = new JTabbedPane(JTabbedPane.TOP);
+        JTabbedPane TABBEDPANE = new JTabbedPane(JTabbedPane.TOP);
 
         /*
          * Remove the border insets so the panes fully fill out the area available to them. Prevents the image
          * painted by BackgroundPanel from being displayed along the border of the pane.
          */
-        tabbedPane.setUI(new BasicTabbedPaneUI() {
+        TABBEDPANE.setUI(new BasicTabbedPaneUI() {
             private final Insets borderInsets = new Insets(0, 0, 0, 0);
 
             @Override
@@ -138,57 +136,52 @@ public class CreateGui extends JPanel {
             }
         });
 
-        tabbedPane.addTab(
-                localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.createserverpack.title"),
+        TABBEDPANE.addTab(
+                LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.tabbedpane.createserverpack.title"),
                 null,
-                createServerPackTab.createServerPackTab(),
-                localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.createserverpack.tip"));
+                TAB_CREATESERVERPACK.createServerPackTab(),
+                LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.tabbedpane.createserverpack.tip"));
 
-        tabbedPane.setMnemonicAt(0, KeyEvent.VK_1);
+        TABBEDPANE.setMnemonicAt(0, KeyEvent.VK_1);
 
-        tabbedPane.addTab(
-                localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.serverpackcreatorlog.title"),
+        TABBEDPANE.addTab(
+                LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.tabbedpane.serverpackcreatorlog.title"),
                 null,
-                serverPackCreatorLogTab.serverPackCreatorLogTab(),
-                localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.serverpackcreatorlog.tip"));
+                TAB_LOG_SERVERPACKCREATOR.serverPackCreatorLogTab(),
+                LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.tabbedpane.serverpackcreatorlog.tip"));
 
-        tabbedPane.setMnemonicAt(1, KeyEvent.VK_2);
+        TABBEDPANE.setMnemonicAt(1, KeyEvent.VK_2);
 
-        tabbedPane.addTab(
-                localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.modloaderinstallerlog.title"),
+        TABBEDPANE.addTab(
+                LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.tabbedpane.modloaderinstallerlog.title"),
                 null,
-                modloaderInstallerLogTab.modloaderInstallerLogTab(),
-                localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.modloaderinstallerlog.tip"));
+                TAB_LOG_MODLOADERINSTALLER.modloaderInstallerLogTab(),
+                LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.tabbedpane.modloaderinstallerlog.tip"));
 
-        tabbedPane.setMnemonicAt(2, KeyEvent.VK_3);
+        TABBEDPANE.setMnemonicAt(2, KeyEvent.VK_3);
 
-        tabbedPane.addTab(
-                localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.about.title"),
+        TABBEDPANE.addTab(
+                LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.tabbedpane.about.title"),
                 null,
-                aboutTab.aboutTab(),
-                localizationManager.getLocalizedString("createserverpack.gui.tabbedpane.about.tip"));
+                TAB_ABOUT.aboutTab(),
+                LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.tabbedpane.about.tip"));
 
-        tabbedPane.setMnemonicAt(3, KeyEvent.VK_4);
+        TABBEDPANE.setMnemonicAt(3, KeyEvent.VK_4);
 
-        tabbedPane.setOpaque(true);
+        TABBEDPANE.setOpaque(true);
 
-        add(tabbedPane);
+        add(TABBEDPANE);
 
         /*
          * We need both in order to have a transparent TabbedPane
          * behind which we can see the image painted by BackgroundPanel
          */
         setOpaque(false);
-        tabbedPane.setOpaque(false);
+        TABBEDPANE.setOpaque(false);
 
-        tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
+        TABBEDPANE.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
     }
 
-    private JFrame serverPackCreatorFrame;
-    private JLabel serverPackCreatorBanner;
-    private File secretFile;
-    private Config secret;
-
     /**
      * Shows the GUI from the EDT by using SwingUtilities and it's invokeLater method by calling {@link #createAndShowGUI()}.
      * Sets the font to bold, which may be overridden by the LookAndFeel which gets automatically determined and depends
@@ -213,10 +206,10 @@ public class CreateGui extends JPanel {
 
                     if (secret.getString("topsicrets") != null && !secret.getString("topsicrets").equals("") && secret.getString("topsicrets").length() > 0) {
 
-                        appLogger.info(localizationManager.getLocalizedString("topsicrets"));
-                        appLogger.info(localizationManager.getLocalizedString("topsicrets.moar"));
+                        LOG.info(LOCALIZATIONMANAGER.getLocalizedString("topsicrets"));
+                        LOG.info(LOCALIZATIONMANAGER.getLocalizedString("topsicrets.moar"));
                         for (UIManager.LookAndFeelInfo look : UIManager.getInstalledLookAndFeels()) {
-                            appLogger.info(look.getClassName());
+                            LOG.info(look.getClassName());
                         }
 
                         UIManager.setLookAndFeel(secret.getString("topsicrets"));
@@ -233,7 +226,7 @@ public class CreateGui extends JPanel {
                 try {
                     UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                 } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
-                    appLogger.error(localizationManager.getLocalizedString("tabbedpane.log.error"), ex);
+                    LOG.error(LOCALIZATIONMANAGER.getLocalizedString("tabbedpane.log.error"), ex);
                 }
             }
 
@@ -246,26 +239,26 @@ public class CreateGui extends JPanel {
      */
     private void createAndShowGUI() {
 
-        serverPackCreatorFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+        FRAME_SERVERPACKCREATOR.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
-        serverPackCreatorFrame.setContentPane(backgroundPanel);
+        FRAME_SERVERPACKCREATOR.setContentPane(BACKGROUNDPANEL);
 
-        serverPackCreatorFrame.setIconImage(icon);
+        FRAME_SERVERPACKCREATOR.setIconImage(ICON_SERVERPACKCREATOR);
 
-        serverPackCreatorBanner = new JLabel(bannerIcon);
+        JLabel serverPackCreatorBanner = new JLabel(ICON_SERVERPACKCREATOR_BANNER);
         serverPackCreatorBanner.setOpaque(false);
 
-        serverPackCreatorFrame.add(serverPackCreatorBanner, BorderLayout.PAGE_START);
+        FRAME_SERVERPACKCREATOR.add(serverPackCreatorBanner, BorderLayout.PAGE_START);
 
-        serverPackCreatorFrame.add(new CreateGui(localizationManager, configuration, curseCreateModpack, createServerPack), BorderLayout.CENTER);
+        FRAME_SERVERPACKCREATOR.add(new CreateGui(LOCALIZATIONMANAGER, CONFIGURATION, CURSECREATEMODPACK, CREATESERVERPACK), BorderLayout.CENTER);
 
-        serverPackCreatorFrame.setSize(windowDimension);
-        serverPackCreatorFrame.setPreferredSize(windowDimension);
-        serverPackCreatorFrame.setMaximumSize(windowDimension);
-        serverPackCreatorFrame.setResizable(true);
+        FRAME_SERVERPACKCREATOR.setSize(DIMENSION_WINDOW);
+        FRAME_SERVERPACKCREATOR.setPreferredSize(DIMENSION_WINDOW);
+        FRAME_SERVERPACKCREATOR.setMaximumSize(DIMENSION_WINDOW);
+        FRAME_SERVERPACKCREATOR.setResizable(true);
 
-        serverPackCreatorFrame.pack();
+        FRAME_SERVERPACKCREATOR.pack();
 
-        serverPackCreatorFrame.setVisible(true);
+        FRAME_SERVERPACKCREATOR.setVisible(true);
     }
 }
\ No newline at end of file
diff --git a/src/main/java/de/griefed/serverpackcreator/gui/CreateServerPackTab.java b/src/main/java/de/griefed/serverpackcreator/gui/CreateServerPackTab.java
index 5b59a87c5..8a202f7bd 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/CreateServerPackTab.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/CreateServerPackTab.java
@@ -33,8 +33,6 @@ import org.apache.logging.log4j.Logger;
 import javax.swing.*;
 import javax.swing.filechooser.FileNameExtensionFilter;
 import java.awt.*;
-import java.awt.event.HierarchyEvent;
-import java.awt.event.HierarchyListener;
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
@@ -57,12 +55,11 @@ import java.util.concurrent.Executors;
  * </p>
  */
 public class CreateServerPackTab extends JComponent {
-    private static final Logger appLogger = LogManager.getLogger(CreateServerPackTab.class);
+    private static final Logger LOG = LogManager.getLogger(CreateServerPackTab.class);
 
-    private Configuration configuration;
-    private LocalizationManager localizationManager;
-    private CurseCreateModpack curseCreateModpack;
-    private CreateServerPack createServerPack;
+    private final Configuration CONFIGURATION;
+    private final LocalizationManager LOCALIZATIONMANAGER;
+    private final CreateServerPack CREATESERVERPACK;
 
     /**
      * <strong>Constructor</strong><p>
@@ -80,28 +77,30 @@ public class CreateServerPackTab extends JComponent {
      * @param injectedCreateServerPack Instance of {@link CreateServerPack} required for the generation of server packs.
      */
     public CreateServerPackTab(LocalizationManager injectedLocalizationManager, Configuration injectedConfiguration, CurseCreateModpack injectedCurseCreateModpack, CreateServerPack injectedCreateServerPack) {
+        CurseCreateModpack curseCreateModpack;
+
         if (injectedLocalizationManager == null) {
-            this.localizationManager = new LocalizationManager();
+            this.LOCALIZATIONMANAGER = new LocalizationManager();
         } else {
-            this.localizationManager = injectedLocalizationManager;
+            this.LOCALIZATIONMANAGER = injectedLocalizationManager;
         }
 
         if (injectedConfiguration == null) {
-            this.curseCreateModpack = new CurseCreateModpack(localizationManager);
+            curseCreateModpack = new CurseCreateModpack(LOCALIZATIONMANAGER);
         } else {
-            this.curseCreateModpack = injectedCurseCreateModpack;
+            curseCreateModpack = injectedCurseCreateModpack;
         }
 
         if (injectedConfiguration == null) {
-            this.configuration = new Configuration(localizationManager, curseCreateModpack);
+            this.CONFIGURATION = new Configuration(LOCALIZATIONMANAGER, curseCreateModpack);
         } else {
-            this.configuration = injectedConfiguration;
+            this.CONFIGURATION = injectedConfiguration;
         }
 
         if (injectedCreateServerPack == null) {
-            this.createServerPack = new CreateServerPack(localizationManager, configuration, curseCreateModpack);
+            this.CREATESERVERPACK = new CreateServerPack(LOCALIZATIONMANAGER, CONFIGURATION, curseCreateModpack);
         } else {
-            this.createServerPack = injectedCreateServerPack;
+            this.CREATESERVERPACK = injectedCreateServerPack;
         }
     }
 
@@ -118,15 +117,6 @@ public class CreateServerPackTab extends JComponent {
 
     private JScrollPane helpScrollPane;
 
-    private GridBagConstraints constraints;
-
-    private JLabel labelModpackDir;
-    private JLabel labelClientMods;
-    private JLabel labelCopyDirs;
-    private JLabel labelJavaPath;
-    private JLabel labelMinecraftVersion;
-    private JLabel labelModloader;
-    private JLabel labelModloaderVersion;
     private JLabel labelGenerateServerPack;
 
     private JTextField textModpackDir;
@@ -166,7 +156,7 @@ public class CreateServerPackTab extends JComponent {
     JComponent createServerPackTab() {
         createServerPackPanel = new JPanel(false);
         createServerPackPanel.setLayout(new GridBagLayout());
-        constraints = new GridBagConstraints();
+        GridBagConstraints constraints = new GridBagConstraints();
 
 // ----------------------------------------------------------------------------------------LABELS AND TEXTFIELDS--------
         constraints.fill = GridBagConstraints.HORIZONTAL;
@@ -174,98 +164,98 @@ public class CreateServerPackTab extends JComponent {
         constraints.weightx = 0.7;
 
         //Label and textfield modpackDir
-        labelModpackDir = new JLabel(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelmodpackdir"));
-        labelModpackDir.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelmodpackdir.tip"));
+        JLabel labelModpackDir = new JLabel(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.createserverpack.labelmodpackdir"));
+        labelModpackDir.setToolTipText(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.createserverpack.labelmodpackdir.tip"));
         constraints.gridx = 0;
         constraints.gridy = 0;
         constraints.insets = new Insets(20,10,0,0);
         createServerPackPanel.add(labelModpackDir, constraints);
         textModpackDir = new JTextField("");
-        textModpackDir.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelmodpackdir.tip"));
+        textModpackDir.setToolTipText(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.createserverpack.labelmodpackdir.tip"));
         constraints.gridx = 0;
         constraints.gridy = 1;
         constraints.insets = new Insets(0,10,0,0);
         createServerPackPanel.add(textModpackDir, constraints);
 
         //Label and textfield clientMods
-        labelClientMods = new JLabel(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelclientmods"));
-        labelClientMods.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelclientmods.tip"));
+        JLabel labelClientMods = new JLabel(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.createserverpack.labelclientmods"));
+        labelClientMods.setToolTipText(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.createserverpack.labelclientmods.tip"));
         constraints.gridx = 0;
         constraints.gridy = 2;
         constraints.insets = new Insets(20,10,0,0);
         createServerPackPanel.add(labelClientMods, constraints);
         textClientMods = new JTextField("");
-        textClientMods.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelclientmods.tip"));
+        textClientMods.setToolTipText(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.createserverpack.labelclientmods.tip"));
         constraints.gridx = 0;
         constraints.gridy = 3;
         constraints.insets = new Insets(0,10,0,0);
         createServerPackPanel.add(textClientMods, constraints);
 
         //Label and textfield copyDirs
-        labelCopyDirs = new JLabel(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelcopydirs"));
-        labelCopyDirs.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelcopydirs.tip"));
+        JLabel labelCopyDirs = new JLabel(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.createserverpack.labelcopydirs"));
+        labelCopyDirs.setToolTipText(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.createserverpack.labelcopydirs.tip"));
         constraints.gridx = 0;
         constraints.gridy = 4;
         constraints.insets = new Insets(20,10,0,0);
         createServerPackPanel.add(labelCopyDirs, constraints);
         textCopyDirs = new JTextField("");
-        textCopyDirs.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelcopydirs.tip"));
+        textCopyDirs.setToolTipText(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.createserverpack.labelcopydirs.tip"));
         constraints.gridx = 0;
         constraints.gridy = 5;
         constraints.insets = new Insets(0,10,0,0);
         createServerPackPanel.add(textCopyDirs, constraints);
 
         //Label and textfield javaPath
-        labelJavaPath = new JLabel(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labeljavapath"));
-        labelJavaPath.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labeljavapath.tip"));
+        JLabel labelJavaPath = new JLabel(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.createserverpack.labeljavapath"));
+        labelJavaPath.setToolTipText(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.createserverpack.labeljavapath.tip"));
         constraints.gridx = 0;
         constraints.gridy = 6;
         constraints.insets = new Insets(20,10,0,0);
         createServerPackPanel.add(labelJavaPath, constraints);
         textJavaPath = new JTextField("");
-        textJavaPath.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labeljavapath.tip"));
+        textJavaPath.setToolTipText(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.createserverpack.labeljavapath.tip"));
         constraints.gridx = 0;
         constraints.gridy = 7;
         constraints.insets = new Insets(0,10,0,0);
         createServerPackPanel.add(textJavaPath, constraints);
 
         //Label and textfield minecraftVersion
-        labelMinecraftVersion = new JLabel(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelminecraft"));
-        labelMinecraftVersion.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelminecraft.tip"));
+        JLabel labelMinecraftVersion = new JLabel(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.createserverpack.labelminecraft"));
+        labelMinecraftVersion.setToolTipText(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.createserverpack.labelminecraft.tip"));
         constraints.gridx = 0;
         constraints.gridy = 8;
         constraints.insets = new Insets(20,10,0,0);
         createServerPackPanel.add(labelMinecraftVersion, constraints);
         textMinecraftVersion = new JTextField("");
-        textMinecraftVersion.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelminecraft.tip"));
+        textMinecraftVersion.setToolTipText(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.createserverpack.labelminecraft.tip"));
         constraints.gridx = 0;
         constraints.gridy = 9;
         constraints.insets = new Insets(0,10,0,0);
         createServerPackPanel.add(textMinecraftVersion, constraints);
 
         //Label and textfield Modloader
-        labelModloader = new JLabel(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelmodloader"));
-        labelModloader.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelmodloader.tip"));
+        JLabel labelModloader = new JLabel(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.createserverpack.labelmodloader"));
+        labelModloader.setToolTipText(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.createserverpack.labelmodloader.tip"));
         constraints.gridx = 0;
         constraints.gridy = 10;
         constraints.insets = new Insets(20,10,0,0);
         createServerPackPanel.add(labelModloader, constraints);
         textModloader = new JTextField("");
-        textModloader.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelmodloader.tip"));
+        textModloader.setToolTipText(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.createserverpack.labelmodloader.tip"));
         constraints.gridx = 0;
         constraints.gridy = 11;
         constraints.insets = new Insets(0,10,0,0);
         createServerPackPanel.add(textModloader, constraints);
 
         //Label and textfield modloaderVersion
-        labelModloaderVersion = new JLabel(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelmodloaderversion"));
-        labelModloaderVersion.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelmodloaderversion.tip"));
+        JLabel labelModloaderVersion = new JLabel(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.createserverpack.labelmodloaderversion"));
+        labelModloaderVersion.setToolTipText(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.createserverpack.labelmodloaderversion.tip"));
         constraints.gridx = 0;
         constraints.gridy = 12;
         constraints.insets = new Insets(20,10,0,0);
         createServerPackPanel.add(labelModloaderVersion, constraints);
         textModloaderVersion = new JTextField("");
-        textModloaderVersion.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.labelmodloaderversion.tip"));
+        textModloaderVersion.setToolTipText(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.createserverpack.labelmodloaderversion.tip"));
         constraints.gridx = 0;
         constraints.gridy = 13;
         constraints.insets = new Insets(0,10,0,0);
@@ -280,36 +270,36 @@ public class CreateServerPackTab extends JComponent {
         constraints.fill = GridBagConstraints.NONE;
 
         //Checkbox installServer
-        checkBoxServer = new JCheckBox(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.checkboxserver"),true);
-        checkBoxServer.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.checkboxserver.tip"));
+        checkBoxServer = new JCheckBox(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.createserverpack.checkboxserver"),true);
+        checkBoxServer.setToolTipText(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.createserverpack.checkboxserver.tip"));
         constraints.gridx = 0;
         constraints.gridy = 14;
         createServerPackPanel.add(checkBoxServer, constraints);
 
         //Checkbox copyIcon
-        checkBoxIcon = new JCheckBox(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.checkboxicon"),true);
-        checkBoxIcon.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.checkboxicon.tip"));
+        checkBoxIcon = new JCheckBox(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.createserverpack.checkboxicon"),true);
+        checkBoxIcon.setToolTipText(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.createserverpack.checkboxicon.tip"));
         constraints.gridx = 1;
         constraints.gridy = 14;
         createServerPackPanel.add(checkBoxIcon, constraints);
 
         //Checkbox copyProperties
-        checkBoxProperties = new JCheckBox(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.checkboxproperties"),true);
-        checkBoxProperties.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.checkboxproperties.tip"));
+        checkBoxProperties = new JCheckBox(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.createserverpack.checkboxproperties"),true);
+        checkBoxProperties.setToolTipText(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.createserverpack.checkboxproperties.tip"));
         constraints.gridx = 0;
         constraints.gridy = 15;
         createServerPackPanel.add(checkBoxProperties, constraints);
 
         //Checkbox copyScripts
-        checkBoxScripts = new JCheckBox(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.checkboxscripts"),true);
-        checkBoxScripts.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.checkboxscripts.tip"));
+        checkBoxScripts = new JCheckBox(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.createserverpack.checkboxscripts"),true);
+        checkBoxScripts.setToolTipText(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.createserverpack.checkboxscripts.tip"));
         constraints.gridx = 1;
         constraints.gridy = 15;
         createServerPackPanel.add(checkBoxScripts, constraints);
 
         //Checkbox createZIP
-        checkBoxZIP = new JCheckBox(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.checkboxzip"),true);
-        checkBoxZIP.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.checkboxzip.tip"));
+        checkBoxZIP = new JCheckBox(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.createserverpack.checkboxzip"),true);
+        checkBoxZIP.setToolTipText(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.createserverpack.checkboxzip.tip"));
         constraints.gridx = 0;
         constraints.gridy = 16;
         createServerPackPanel.add(checkBoxZIP, constraints);
@@ -322,7 +312,7 @@ public class CreateServerPackTab extends JComponent {
 
         //Select modpackDir button
         buttonModpackDir = new JButton();
-        buttonModpackDir.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.buttonmodpackdir"));
+        buttonModpackDir.setToolTipText(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.buttonmodpackdir"));
         buttonModpackDir.setContentAreaFilled(false);
         buttonModpackDir.setIcon(folderIcon);
         buttonModpackDir.setMinimumSize(folderButtonDimension);
@@ -332,7 +322,7 @@ public class CreateServerPackTab extends JComponent {
             modpackDirChooser = new JFileChooser();
 
             modpackDirChooser.setCurrentDirectory(new File("."));
-            modpackDirChooser.setDialogTitle(localizationManager.getLocalizedString("createserverpack.gui.buttonmodpackdir.title"));
+            modpackDirChooser.setDialogTitle(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.buttonmodpackdir.title"));
             modpackDirChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
             modpackDirChooser.setAcceptAllFileFilterUsed(false);
             modpackDirChooser.setMultiSelectionEnabled(false);
@@ -342,12 +332,12 @@ public class CreateServerPackTab extends JComponent {
                 try {
                     textModpackDir.setText(modpackDirChooser.getSelectedFile().getCanonicalPath().replace("\\","/"));
 
-                    appLogger.info(String.format(
-                            localizationManager.getLocalizedString("createserverpack.log.info.buttonmodpack"),
+                    LOG.info(String.format(
+                            LOCALIZATIONMANAGER.getLocalizedString("createserverpack.log.info.buttonmodpack"),
                             modpackDirChooser.getSelectedFile().getCanonicalPath().replace("\\","/")));
 
                 } catch (IOException ex) {
-                    appLogger.error(localizationManager.getLocalizedString("createserverpack.log.error.buttonmodpack"),ex);
+                    LOG.error(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.log.error.buttonmodpack"),ex);
                 }
             }
         });
@@ -366,7 +356,7 @@ public class CreateServerPackTab extends JComponent {
 
         //Select clientside-mods button
         buttonClientMods = new JButton();
-        buttonClientMods.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.buttonclientmods"));
+        buttonClientMods.setToolTipText(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.buttonclientmods"));
         buttonClientMods.setContentAreaFilled(false);
         buttonClientMods.setIcon(folderIcon);
         buttonClientMods.setMinimumSize(folderButtonDimension);
@@ -384,11 +374,11 @@ public class CreateServerPackTab extends JComponent {
                 clientModsChooser.setCurrentDirectory(new File("."));
             }
 
-            clientModsChooser.setDialogTitle(localizationManager.getLocalizedString("createserverpack.gui.buttonclientmods.title"));
+            clientModsChooser.setDialogTitle(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.buttonclientmods.title"));
             clientModsChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
 
             clientModsChooser.setFileFilter(new FileNameExtensionFilter(
-                    localizationManager.getLocalizedString("createserverpack.gui.buttonclientmods.filter"),
+                    LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.buttonclientmods.filter"),
                     "jar"
             ));
 
@@ -400,16 +390,16 @@ public class CreateServerPackTab extends JComponent {
                 File[] clientMods = clientModsChooser.getSelectedFiles();
                 ArrayList<String> clientModsFilenames = new ArrayList<>();
 
-                for (int i = 0; i < clientMods.length; i++) {
-                    clientModsFilenames.add(clientMods[i].getName());
+                for (File mod : clientMods) {
+                    clientModsFilenames.add(mod.getName());
                 }
 
                 textClientMods.setText(
-                        configuration.buildString(
+                        CONFIGURATION.buildString(
                                 Arrays.toString(
                                         clientModsFilenames.toArray(new String[0])))
                 );
-                appLogger.info(String.format(localizationManager.getLocalizedString("createserverpack.log.info.buttonclientmods"), clientModsFilenames));
+                LOG.info(String.format(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.log.info.buttonclientmods"), clientModsFilenames));
             }
         });
         buttonClientMods.addMouseListener(new java.awt.event.MouseAdapter() {
@@ -427,7 +417,7 @@ public class CreateServerPackTab extends JComponent {
 
         //Select directories to copy to server pack button
         buttonCopyDirs = new JButton();
-        buttonCopyDirs.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.buttoncopydirs"));
+        buttonCopyDirs.setToolTipText(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.buttoncopydirs"));
         buttonCopyDirs.setContentAreaFilled(false);
         buttonCopyDirs.setIcon(folderIcon);
         buttonCopyDirs.setMinimumSize(folderButtonDimension);
@@ -444,22 +434,22 @@ public class CreateServerPackTab extends JComponent {
                 copyDirsChooser.setCurrentDirectory(new File("."));
             }
 
-            copyDirsChooser.setDialogTitle(localizationManager.getLocalizedString("createserverpack.gui.buttoncopydirs.title"));
+            copyDirsChooser.setDialogTitle(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.buttoncopydirs.title"));
             copyDirsChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
             copyDirsChooser.setAcceptAllFileFilterUsed(false);
             copyDirsChooser.setMultiSelectionEnabled(true);
             copyDirsChooser.setPreferredSize(chooserDimension);
 
             if (copyDirsChooser.showOpenDialog(copyDirsChooser) == JFileChooser.APPROVE_OPTION) {
-                File[] copyDirs = copyDirsChooser.getSelectedFiles();
+                File[] directoriesToCopy = copyDirsChooser.getSelectedFiles();
                 ArrayList<String> copyDirsNames = new ArrayList<>();
 
-                for (int i = 0; i < copyDirs.length; i++) {
-                    copyDirsNames.add(copyDirs[i].getName());
+                for (File directory : directoriesToCopy) {
+                    copyDirsNames.add(directory.getName());
                 }
 
-                textCopyDirs.setText(configuration.buildString(Arrays.toString(copyDirsNames.toArray(new String[0]))));
-                appLogger.info(String.format(localizationManager.getLocalizedString("createserverpack.log.info.buttoncopydirs"), copyDirsNames));
+                textCopyDirs.setText(CONFIGURATION.buildString(Arrays.toString(copyDirsNames.toArray(new String[0]))));
+                LOG.info(String.format(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.log.info.buttoncopydirs"), copyDirsNames));
             }
         });
         buttonCopyDirs.addMouseListener(new java.awt.event.MouseAdapter() {
@@ -477,7 +467,7 @@ public class CreateServerPackTab extends JComponent {
 
         //Select javaPath button
         buttonJavaPath = new JButton();
-        buttonJavaPath.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.buttonjavapath"));
+        buttonJavaPath.setToolTipText(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.buttonjavapath"));
         buttonJavaPath.setContentAreaFilled(false);
         buttonJavaPath.setIcon(folderIcon);
         buttonJavaPath.setMinimumSize(folderButtonDimension);
@@ -497,7 +487,7 @@ public class CreateServerPackTab extends JComponent {
                 javaChooser.setCurrentDirectory(new File("."));
             }
 
-            javaChooser.setDialogTitle(localizationManager.getLocalizedString("createserverpack.gui.buttonjavapath.tile"));
+            javaChooser.setDialogTitle(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.buttonjavapath.tile"));
             javaChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
             javaChooser.setAcceptAllFileFilterUsed(true);
             javaChooser.setMultiSelectionEnabled(false);
@@ -507,13 +497,13 @@ public class CreateServerPackTab extends JComponent {
                 try {
                     textJavaPath.setText(javaChooser.getSelectedFile().getCanonicalPath().replace("\\","/"));
 
-                    appLogger.info(String.format(
-                            localizationManager.getLocalizedString("createserverpack.log.info.buttonjavapath"),
+                    LOG.info(String.format(
+                            LOCALIZATIONMANAGER.getLocalizedString("createserverpack.log.info.buttonjavapath"),
                             javaChooser.getSelectedFile().getCanonicalPath().replace("\\","/")
                     ));
 
                 } catch (IOException ex) {
-                    appLogger.error(localizationManager.getLocalizedString("createserverpack.log.error.buttonjavapath"),ex);
+                    LOG.error(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.log.error.buttonjavapath"),ex);
                 }
             }
         });
@@ -532,7 +522,7 @@ public class CreateServerPackTab extends JComponent {
 
         //Load config from file
         buttonLoadConfigFromFile = new JButton();
-        buttonLoadConfigFromFile.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.buttonloadconfig"));
+        buttonLoadConfigFromFile.setToolTipText(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.buttonloadconfig"));
         buttonLoadConfigFromFile.setContentAreaFilled(false);
         buttonLoadConfigFromFile.setIcon(loadIcon);
         buttonLoadConfigFromFile.setMinimumSize(miscButtonDimension);
@@ -542,11 +532,11 @@ public class CreateServerPackTab extends JComponent {
             configChooser = new JFileChooser();
 
             configChooser.setCurrentDirectory(new File("."));
-            configChooser.setDialogTitle(localizationManager.getLocalizedString("createserverpack.gui.buttonloadconfig.title"));
+            configChooser.setDialogTitle(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.buttonloadconfig.title"));
             configChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
 
             configChooser.setFileFilter(new FileNameExtensionFilter(
-                    localizationManager.getLocalizedString("createserverpack.gui.buttonloadconfig.filter"),
+                    LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.buttonloadconfig.filter"),
                     "conf"));
 
             configChooser.setAcceptAllFileFilterUsed(false);
@@ -560,22 +550,22 @@ public class CreateServerPackTab extends JComponent {
                 try {
                     newConfigFile = ConfigFactory.parseFile(new File(configChooser.getSelectedFile().getCanonicalPath()));
 
-                    appLogger.info(String.format(
-                            localizationManager.getLocalizedString("createserverpack.log.info.buttonloadconfigfromfile"),
+                    LOG.info(String.format(
+                            LOCALIZATIONMANAGER.getLocalizedString("createserverpack.log.info.buttonloadconfigfromfile"),
                             configChooser.getSelectedFile().getCanonicalPath()
                     ));
 
                 } catch (IOException ex) {
-                    appLogger.error(localizationManager.getLocalizedString("createserverpack.log.error.buttonloadconfigfromfile"),ex);
+                    LOG.error(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.log.error.buttonloadconfigfromfile"),ex);
                 }
 
                 if (newConfigFile != null) {
 
                     textModpackDir.setText(newConfigFile.getString("modpackDir"));
 
-                    textClientMods.setText(configuration.buildString(newConfigFile.getStringList("clientMods").toString()));
+                    textClientMods.setText(CONFIGURATION.buildString(newConfigFile.getStringList("clientMods").toString()));
 
-                    textCopyDirs.setText(configuration.buildString(newConfigFile.getStringList("copyDirs").toString()));
+                    textCopyDirs.setText(CONFIGURATION.buildString(newConfigFile.getStringList("copyDirs").toString()));
 
                     textJavaPath.setText(newConfigFile.getString("javaPath"));
 
@@ -585,17 +575,17 @@ public class CreateServerPackTab extends JComponent {
 
                     textModloaderVersion.setText(newConfigFile.getString("modLoaderVersion"));
 
-                    checkBoxServer.setSelected(configuration.convertToBoolean(newConfigFile.getString("includeServerInstallation")));
+                    checkBoxServer.setSelected(CONFIGURATION.convertToBoolean(newConfigFile.getString("includeServerInstallation")));
 
-                    checkBoxIcon.setSelected(configuration.convertToBoolean(newConfigFile.getString("includeServerIcon")));
+                    checkBoxIcon.setSelected(CONFIGURATION.convertToBoolean(newConfigFile.getString("includeServerIcon")));
 
-                    checkBoxProperties.setSelected(configuration.convertToBoolean(newConfigFile.getString("includeServerProperties")));
+                    checkBoxProperties.setSelected(CONFIGURATION.convertToBoolean(newConfigFile.getString("includeServerProperties")));
 
-                    checkBoxScripts.setSelected(configuration.convertToBoolean(newConfigFile.getString("includeStartScripts")));
+                    checkBoxScripts.setSelected(CONFIGURATION.convertToBoolean(newConfigFile.getString("includeStartScripts")));
 
-                    checkBoxZIP.setSelected(configuration.convertToBoolean(newConfigFile.getString("includeZipCreation")));
+                    checkBoxZIP.setSelected(CONFIGURATION.convertToBoolean(newConfigFile.getString("includeZipCreation")));
 
-                    appLogger.info(localizationManager.getLocalizedString("createserverpack.log.info.buttonloadconfigfromfile.finish"));
+                    LOG.info(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.log.info.buttonloadconfigfromfile.finish"));
                 }
             }
         });
@@ -616,7 +606,7 @@ public class CreateServerPackTab extends JComponent {
 
         //Open window with detailed information about the UI
         buttonInfoWindow = new JButton();
-        buttonInfoWindow.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.button"));
+        buttonInfoWindow.setToolTipText(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.createserverpack.help.button"));
         buttonInfoWindow.setContentAreaFilled(false);
         buttonInfoWindow.setIcon(helpIcon);
         buttonInfoWindow.setMinimumSize(miscButtonDimension);
@@ -626,18 +616,18 @@ public class CreateServerPackTab extends JComponent {
 
             helpTextArea = new JTextArea(String.format(
                     "%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s",
-                    localizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.modpackdir"),
-                    localizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.clientsidemods"),
-                    localizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.directories"),
-                    localizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.pathtojava"),
-                    localizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.minecraftversion"),
-                    localizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.modloader"),
-                    localizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.modloaderversion"),
-                    localizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.installserver"),
-                    localizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.copypropertires"),
-                    localizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.copyscripts"),
-                    localizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.copyicon"),
-                    localizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.createzip")
+                    LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.createserverpack.help.modpackdir"),
+                    LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.createserverpack.help.clientsidemods"),
+                    LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.createserverpack.help.directories"),
+                    LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.createserverpack.help.pathtojava"),
+                    LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.createserverpack.help.minecraftversion"),
+                    LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.createserverpack.help.modloader"),
+                    LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.createserverpack.help.modloaderversion"),
+                    LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.createserverpack.help.installserver"),
+                    LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.createserverpack.help.copypropertires"),
+                    LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.createserverpack.help.copyscripts"),
+                    LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.createserverpack.help.copyicon"),
+                    LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.createserverpack.help.createzip")
             ));
 
             helpTextArea.setEditable(false);
@@ -650,24 +640,20 @@ public class CreateServerPackTab extends JComponent {
             );
             helpScrollPane.setBorder(null);
 
-            helpTextArea.addHierarchyListener(
-                    new HierarchyListener() {
-                        @Override
-                        public void hierarchyChanged(HierarchyEvent e) {
-                            Window window = SwingUtilities.getWindowAncestor(helpTextArea);
-                            if (window instanceof Dialog) {
-                                Dialog dialog = (Dialog) window;
-                                if (!dialog.isResizable()) {
-                                    dialog.setResizable(true);
-                                }
+            helpTextArea.addHierarchyListener(e1 -> {
+                        Window window = SwingUtilities.getWindowAncestor(helpTextArea);
+                        if (window instanceof Dialog) {
+                            Dialog dialog = (Dialog) window;
+                            if (!dialog.isResizable()) {
+                                dialog.setResizable(true);
                             }
                         }
-                    });
+            });
 
             JOptionPane.showMessageDialog(
                     createServerPackPanel,
                     helpScrollPane,
-                    localizationManager.getLocalizedString("createserverpack.gui.createserverpack.help.title"),
+                    LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.createserverpack.help.title"),
                     JOptionPane.INFORMATION_MESSAGE,
                     helpIcon
             );
@@ -692,7 +678,7 @@ public class CreateServerPackTab extends JComponent {
         constraints.fill = GridBagConstraints.NONE;
         constraints.insets = new Insets(5,0,5,0);
 
-        labelGenerateServerPack = new JLabel(localizationManager.getLocalizedString("createserverpack.gui.buttongenerateserverpack.ready"));
+        labelGenerateServerPack = new JLabel(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.buttongenerateserverpack.ready"));
         labelGenerateServerPack.setFont(new Font(labelGenerateServerPack.getFont().getName(), Font.BOLD, labelGenerateServerPack.getFont().getSize()));
         constraints.gridx = 0;
         constraints.gridy = 18;
@@ -704,7 +690,7 @@ public class CreateServerPackTab extends JComponent {
 
         buttonGenerateServerPack = new JButton();
         buttonGenerateServerPack.setContentAreaFilled(false);
-        buttonGenerateServerPack.setToolTipText(localizationManager.getLocalizedString("createserverpack.gui.buttongenerateserverpack.tip"));
+        buttonGenerateServerPack.setToolTipText(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.buttongenerateserverpack.tip"));
         buttonGenerateServerPack.setIcon(startGeneration);
         buttonGenerateServerPack.setMinimumSize(startDimension);
         buttonGenerateServerPack.setPreferredSize(startDimension);
@@ -713,10 +699,10 @@ public class CreateServerPackTab extends JComponent {
 
             buttonGenerateServerPack.setEnabled(false);
 
-            appLogger.info(localizationManager.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.start"));
-            labelGenerateServerPack.setText(localizationManager.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.start"));
+            LOG.info(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.start"));
+            labelGenerateServerPack.setText(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.start"));
 
-            configuration.writeConfigToFile(
+            CONFIGURATION.writeConfigToFile(
                     textModpackDir.getText(),
                     textClientMods.getText(),
                     textCopyDirs.getText(),
@@ -732,24 +718,24 @@ public class CreateServerPackTab extends JComponent {
                     new File("serverpackcreator.tmp"),
                     true
             );
-            if (!configuration.checkConfigFile(new File("serverpackcreator.tmp"), false)) {
-                appLogger.info(localizationManager.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.checked"));
-                labelGenerateServerPack.setText(localizationManager.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.checked"));
+            if (!CONFIGURATION.checkConfigFile(new File("serverpackcreator.tmp"), false)) {
+                LOG.info(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.checked"));
+                labelGenerateServerPack.setText(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.checked"));
 
                 if (new File("serverpackcreator.tmp").exists()) {
                     boolean delTmp = new File("serverpackcreator.tmp").delete();
                     if (delTmp) {
-                        labelGenerateServerPack.setText(localizationManager.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.tempfile"));
-                        appLogger.info(localizationManager.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.tempfile"));
+                        labelGenerateServerPack.setText(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.tempfile"));
+                        LOG.info(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.tempfile"));
                     } else {
-                        labelGenerateServerPack.setText(localizationManager.getLocalizedString("createserverpack.log.error.buttoncreateserverpack.tempfile"));
-                        appLogger.error(localizationManager.getLocalizedString("createserverpack.log.error.buttoncreateserverpack.tempfile"));
+                        labelGenerateServerPack.setText(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.log.error.buttoncreateserverpack.tempfile"));
+                        LOG.error(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.log.error.buttoncreateserverpack.tempfile"));
                     }
                 }
 
-                appLogger.info(localizationManager.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.writing"));
-                labelGenerateServerPack.setText(localizationManager.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.writing"));
-                configuration.writeConfigToFile(
+                LOG.info(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.writing"));
+                labelGenerateServerPack.setText(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.writing"));
+                CONFIGURATION.writeConfigToFile(
                         textModpackDir.getText(),
                         textClientMods.getText(),
                         textCopyDirs.getText(),
@@ -762,12 +748,12 @@ public class CreateServerPackTab extends JComponent {
                         checkBoxProperties.isSelected(),
                         checkBoxScripts.isSelected(),
                         checkBoxZIP.isSelected(),
-                        configuration.getConfigFile(),
+                        CONFIGURATION.getConfigFile(),
                         false
                 );
 
-                appLogger.info(localizationManager.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.generating"));
-                labelGenerateServerPack.setText(localizationManager.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.generating"));
+                LOG.info(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.generating"));
+                labelGenerateServerPack.setText(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.generating"));
 
 
                 Tailer tailer = Tailer.create(new File("./logs/serverpackcreator.log"), new TailerListenerAdapter() {
@@ -780,36 +766,36 @@ public class CreateServerPackTab extends JComponent {
 
                 final ExecutorService executorService = Executors.newSingleThreadExecutor();
                 executorService.execute(() -> {
-                    if (createServerPack.run()) {
+                    if (CREATESERVERPACK.run()) {
                         tailer.stop();
 
                         System.gc();
                         System.runFinalization();
 
                         buttonGenerateServerPack.setEnabled(true);
-                        labelGenerateServerPack.setText(localizationManager.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.ready"));
-                        textModpackDir.setText(configuration.getModpackDir());
-                        textCopyDirs.setText(configuration.getCopyDirs().toString().replace("[","").replace("]",""));
+                        labelGenerateServerPack.setText(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.ready"));
+                        textModpackDir.setText(CONFIGURATION.getModpackDir());
+                        textCopyDirs.setText(CONFIGURATION.getCopyDirs().toString().replace("[","").replace("]",""));
 
                         JTextArea textArea = new JTextArea();
                         textArea.setOpaque(false);
                         textArea.setText(String.format(
                                 "%s\n%s",
-                                localizationManager.getLocalizedString("createserverpack.gui.createserverpack.openfolder.browse"),
-                                String.format("%s/server_pack",configuration.getModpackDir())
+                                LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.createserverpack.openfolder.browse"),
+                                String.format("%s/server_pack", CONFIGURATION.getModpackDir())
                                 )
                         );
 
                         if (JOptionPane.showConfirmDialog(
                                 createServerPackPanel,
                                 textArea,
-                                localizationManager.getLocalizedString("createserverpack.gui.createserverpack.openfolder.title"),
+                                LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.createserverpack.openfolder.title"),
                                 JOptionPane.YES_NO_OPTION,
                                 JOptionPane.INFORMATION_MESSAGE) == 0) {
                             try {
-                                Desktop.getDesktop().open(new File(String.format("%s/server_pack",configuration.getModpackDir())));
+                                Desktop.getDesktop().open(new File(String.format("%s/server_pack", CONFIGURATION.getModpackDir())));
                             } catch (IOException ex) {
-                                appLogger.error(localizationManager.getLocalizedString("createserverpack.log.error.browserserverpack"));
+                                LOG.error(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.log.error.browserserverpack"));
                             }
                         }
                         buttonGenerateServerPack.setEnabled(true);
@@ -825,13 +811,13 @@ public class CreateServerPackTab extends JComponent {
                         System.runFinalization();
 
                         buttonGenerateServerPack.setEnabled(true);
-                        labelGenerateServerPack.setText(localizationManager.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.ready"));
+                        labelGenerateServerPack.setText(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.ready"));
 
                         executorService.shutdown();
                     }
                 });
             } else {
-                labelGenerateServerPack.setText(localizationManager.getLocalizedString("createserverpack.gui.buttongenerateserverpack.fail"));
+                labelGenerateServerPack.setText(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.gui.buttongenerateserverpack.fail"));
                 buttonGenerateServerPack.setEnabled(true);
             }
         });
@@ -862,9 +848,9 @@ public class CreateServerPackTab extends JComponent {
 
                 textModpackDir.setText(config.getString("modpackDir"));
 
-                textClientMods.setText(configuration.buildString(config.getStringList("clientMods").toString()));
+                textClientMods.setText(CONFIGURATION.buildString(config.getStringList("clientMods").toString()));
 
-                textCopyDirs.setText(configuration.buildString(config.getStringList("copyDirs").toString()));
+                textCopyDirs.setText(CONFIGURATION.buildString(config.getStringList("copyDirs").toString()));
 
                 textJavaPath.setText(config.getString("javaPath"));
 
@@ -874,15 +860,15 @@ public class CreateServerPackTab extends JComponent {
 
                 textModloaderVersion.setText(config.getString("modLoaderVersion"));
 
-                checkBoxServer.setSelected(configuration.convertToBoolean(config.getString("includeServerInstallation")));
+                checkBoxServer.setSelected(CONFIGURATION.convertToBoolean(config.getString("includeServerInstallation")));
 
-                checkBoxIcon.setSelected(configuration.convertToBoolean(config.getString("includeServerIcon")));
+                checkBoxIcon.setSelected(CONFIGURATION.convertToBoolean(config.getString("includeServerIcon")));
 
-                checkBoxProperties.setSelected(configuration.convertToBoolean(config.getString("includeServerProperties")));
+                checkBoxProperties.setSelected(CONFIGURATION.convertToBoolean(config.getString("includeServerProperties")));
 
-                checkBoxScripts.setSelected(configuration.convertToBoolean(config.getString("includeStartScripts")));
+                checkBoxScripts.setSelected(CONFIGURATION.convertToBoolean(config.getString("includeStartScripts")));
 
-                checkBoxZIP.setSelected(configuration.convertToBoolean(config.getString("includeZipCreation")));
+                checkBoxZIP.setSelected(CONFIGURATION.convertToBoolean(config.getString("includeZipCreation")));
             }
         } catch (NullPointerException ignored) {}
 
diff --git a/src/main/java/de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.java b/src/main/java/de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.java
index f05543b7c..69bcdf592 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/ModloaderInstallerLogTab.java
@@ -32,7 +32,7 @@ import java.io.File;
  */
 public class ModloaderInstallerLogTab extends JComponent {
 
-    private LocalizationManager localizationManager;
+    private final LocalizationManager LOCALIZATIONMANAGER;
 
     /**
      * <strong>Constructor</strong><p>
@@ -43,17 +43,13 @@ public class ModloaderInstallerLogTab extends JComponent {
      */
     public ModloaderInstallerLogTab(LocalizationManager injectedLocalizationManager) {
         if (injectedLocalizationManager == null) {
-            this.localizationManager = new LocalizationManager();
+            this.LOCALIZATIONMANAGER = new LocalizationManager();
         } else {
-            this.localizationManager = injectedLocalizationManager;
+            this.LOCALIZATIONMANAGER = injectedLocalizationManager;
         }
     }
 
-    private JComponent modloaderInstallerLogPanel;
-    private GridBagConstraints constraints;
     private JTextArea textArea;
-    private JScrollPane scrollPane;
-    private SmartScroller smartScroller;
 
     /**
      * Create the tab for the modloader_installer.log tailer in a JScrollPane with an always available vertical scrollbar
@@ -64,9 +60,9 @@ public class ModloaderInstallerLogTab extends JComponent {
      * modloader_installer.log entries.
      */
     JComponent modloaderInstallerLogTab() {
-        modloaderInstallerLogPanel = new JPanel(false);
+        JComponent modloaderInstallerLogPanel = new JPanel(false);
         modloaderInstallerLogPanel.setLayout(new GridBagLayout());
-        constraints = new GridBagConstraints();
+        GridBagConstraints constraints = new GridBagConstraints();
 
         constraints.anchor = GridBagConstraints.CENTER;
         constraints.fill = GridBagConstraints.BOTH;
@@ -82,8 +78,8 @@ public class ModloaderInstallerLogTab extends JComponent {
         Tailer.create(new File("./logs/modloader_installer.log"), new TailerListenerAdapter() {
             public void handle(String line) {
                 synchronized (this) {
-                    if (line.contains(localizationManager.getLocalizedString("serversetup.log.info.installserver.fabric.enter")) ||
-                            line.contains(localizationManager.getLocalizedString("serversetup.log.info.installserver.forge.enter"))) {
+                    if (line.contains(LOCALIZATIONMANAGER.getLocalizedString("serversetup.log.info.installserver.fabric.enter")) ||
+                            line.contains(LOCALIZATIONMANAGER.getLocalizedString("serversetup.log.info.installserver.forge.enter"))) {
                         textArea.setText("");
                     }
                     textArea.append(line + "\n");
@@ -91,12 +87,12 @@ public class ModloaderInstallerLogTab extends JComponent {
             }
         }, 2000, false);
 
-        scrollPane = new JScrollPane(
+        JScrollPane scrollPane = new JScrollPane(
                 textArea,
                 JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
                 JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
 
-        smartScroller = new SmartScroller(scrollPane);
+        new SmartScroller(scrollPane);
 
         modloaderInstallerLogPanel.add(scrollPane, constraints);
 
diff --git a/src/main/java/de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.java b/src/main/java/de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.java
index 6ad2e2564..bbc68382f 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/ServerPackCreatorLogTab.java
@@ -32,7 +32,7 @@ import java.io.File;
  */
 public class ServerPackCreatorLogTab extends JComponent {
 
-    private LocalizationManager localizationManager;
+    private final LocalizationManager LOCALIZATIONMANAGER;
 
     /**
      * <strong>Constructor</strong><p>
@@ -43,17 +43,13 @@ public class ServerPackCreatorLogTab extends JComponent {
      */
     public ServerPackCreatorLogTab(LocalizationManager injectedLocalizationManager) {
         if (injectedLocalizationManager == null) {
-            this.localizationManager = new LocalizationManager();
+            this.LOCALIZATIONMANAGER = new LocalizationManager();
         } else {
-            this.localizationManager = injectedLocalizationManager;
+            this.LOCALIZATIONMANAGER = injectedLocalizationManager;
         }
     }
 
-    private JComponent serverPackCreatorLogPanel;
-    private GridBagConstraints constraints;
     private JTextArea textArea;
-    private JScrollPane scrollPane;
-    private SmartScroller smartScroller;
 
     /**
      * Create the tab for the serverpackcreator.log tailer in a JScrollPane with an always available vertical scrollbar
@@ -64,9 +60,9 @@ public class ServerPackCreatorLogTab extends JComponent {
      * serverpackcreator.log entries.
      */
     JComponent serverPackCreatorLogTab() {
-        serverPackCreatorLogPanel = new JPanel(false);
+        JComponent serverPackCreatorLogPanel = new JPanel(false);
         serverPackCreatorLogPanel.setLayout(new GridBagLayout());
-        constraints = new GridBagConstraints();
+        GridBagConstraints constraints = new GridBagConstraints();
 
         constraints.anchor = GridBagConstraints.CENTER;
         constraints.fill = GridBagConstraints.BOTH;
@@ -82,7 +78,7 @@ public class ServerPackCreatorLogTab extends JComponent {
         Tailer.create(new File("./logs/serverpackcreator.log"), new TailerListenerAdapter() {
             public void handle(String line) {
                 synchronized (this) {
-                    if (line.contains(localizationManager.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.start"))) {
+                    if (line.contains(LOCALIZATIONMANAGER.getLocalizedString("createserverpack.log.info.buttoncreateserverpack.start"))) {
                         textArea.setText("");
                     }
                     textArea.append(line + "\n");
@@ -90,12 +86,12 @@ public class ServerPackCreatorLogTab extends JComponent {
             }
         }, 2000, false);
 
-        scrollPane = new JScrollPane(
+        JScrollPane scrollPane = new JScrollPane(
                 textArea,
                 JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
                 JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
 
-        smartScroller = new SmartScroller(scrollPane);
+        new SmartScroller(scrollPane);
 
         serverPackCreatorLogPanel.add(scrollPane, constraints);
 
diff --git a/src/main/java/de/griefed/serverpackcreator/gui/SmartScroller.java b/src/main/java/de/griefed/serverpackcreator/gui/SmartScroller.java
index f3f6f1ad8..ca78a636a 100644
--- a/src/main/java/de/griefed/serverpackcreator/gui/SmartScroller.java
+++ b/src/main/java/de/griefed/serverpackcreator/gui/SmartScroller.java
@@ -99,9 +99,9 @@ public class SmartScroller implements AdjustmentListener {
     public final static int START = 0;
     public final static int END = 1;
 
+    @SuppressWarnings("FieldMayBeFinal")
     private int viewportPosition;
 
-    private JScrollBar scrollBar;
     private boolean adjustScrollBar = true;
 
     private int previousValue = -1;
@@ -150,6 +150,7 @@ public class SmartScroller implements AdjustmentListener {
 
         this.viewportPosition = viewportPosition;
 
+        JScrollBar scrollBar;
         if (scrollDirection == HORIZONTAL) {
             scrollBar = scrollPane.getHorizontalScrollBar();
         } else {
diff --git a/src/main/java/de/griefed/serverpackcreator/i18n/LocalizationManager.java b/src/main/java/de/griefed/serverpackcreator/i18n/LocalizationManager.java
index 89a929341..4cdbcf5f8 100644
--- a/src/main/java/de/griefed/serverpackcreator/i18n/LocalizationManager.java
+++ b/src/main/java/de/griefed/serverpackcreator/i18n/LocalizationManager.java
@@ -49,13 +49,13 @@ import java.util.*;
  */
 public class LocalizationManager {
 
-    private static final Logger localeLogger = LogManager.getLogger(LocalizationManager.class);
-    private final File langPropertiesFile = new File("lang.properties");
+    private static final Logger LOG = LogManager.getLogger(LocalizationManager.class);
+    private final File FILE_LANGPROPERTIES = new File("lang.properties");
 
     /**
      * Current language of ServerPackCreator, mapped for easier further reference.
      */
-    private Map<String, String> currentLanguage = new HashMap<>();
+    private final Map<String, String> CURRENT_LANGUAGE = new HashMap<>();
 
     /**
      * Localized strings which ServerPackCreator uses.
@@ -65,8 +65,8 @@ public class LocalizationManager {
     /**
      * Keys that used for current language mapping.
      */
-    private final String LANGUAGE_MAP_PATH = "language";
-    private final String COUNTRY_MAP_PATH = "country";
+    private final String MAP_PATH_LANGUAGE = "language";
+    private final String MAP_PATH_COUNTRY = "country";
 
     /**
      * Languages supported by ServerPackCreator.
@@ -90,7 +90,7 @@ public class LocalizationManager {
      * @return File. Returns the file which will set the locale for ServerPackCreator.
      */
     File getLangPropertiesFile() {
-        return langPropertiesFile;
+        return FILE_LANGPROPERTIES;
     }
 
     /**
@@ -98,7 +98,7 @@ public class LocalizationManager {
      * @return String. Returns a String containing the currently used language.
      */
     public String getLocale() {
-        return String.format("%s_%s", currentLanguage.get(LANGUAGE_MAP_PATH), currentLanguage.get(COUNTRY_MAP_PATH));
+        return String.format("%s_%s", CURRENT_LANGUAGE.get(MAP_PATH_LANGUAGE), CURRENT_LANGUAGE.get(MAP_PATH_COUNTRY));
     }
 
     /**
@@ -118,7 +118,8 @@ public class LocalizationManager {
 
             if (lang.equalsIgnoreCase(locale)) {
 
-                localeLogger.debug("Lang is correct");
+                // Can not yet use localization, as the localization manager is still being initialized.
+                LOG.debug("Lang is correct");
                 doesLanguageExist = true;
 
                 break;
@@ -133,19 +134,20 @@ public class LocalizationManager {
 
             langCode = locale.split("_");
 
-            currentLanguage.put(LANGUAGE_MAP_PATH, langCode[0]);
-            currentLanguage.put(COUNTRY_MAP_PATH, langCode[1]);
+            CURRENT_LANGUAGE.put(MAP_PATH_LANGUAGE, langCode[0]);
+            CURRENT_LANGUAGE.put(MAP_PATH_COUNTRY, langCode[1]);
 
         } else {
             throw new IncorrectLanguageException();
         }
 
         localeResources = ResourceBundle.getBundle(String.format("de/griefed/resources/lang/lang_%s", locale));
-        localeLogger.info(String.format("Using language: %s", getLocalizedString("localeUnlocalizedName")));
 
-        if (!currentLanguage.get(LANGUAGE_MAP_PATH).equalsIgnoreCase("en")) {
+        LOG.info(String.format("Using language: %s", getLocalizedString("localeUnlocalizedName")));
 
-            localeLogger.info(String.format("%s %s", getLocalizedString("cli.usingLanguage"), getLocalizedString("localeName")));
+        if (!CURRENT_LANGUAGE.get(MAP_PATH_LANGUAGE).equalsIgnoreCase("en")) {
+
+            LOG.info(String.format("%s %s", getLocalizedString("cli.usingLanguage"), getLocalizedString("localeName")));
         }
 
         writeLocaleToFile(locale);
@@ -166,14 +168,14 @@ public class LocalizationManager {
             BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(fileInputStream, StandardCharsets.UTF_8));
             langProperties.load(bufferedReader);
 
-            localeLogger.debug(String.format("langProperties = %s", langProperties));
+            LOG.debug(String.format("langProperties = %s", langProperties));
 
         } catch (Exception ex) {
-            localeLogger.error(ex);
+            LOG.error(ex);
         }
 
         String langProp = langProperties.getProperty("lang");
-        localeLogger.debug(langProp);
+        LOG.debug(langProp);
 
         boolean doesLanguageExist = false;
 
@@ -181,7 +183,7 @@ public class LocalizationManager {
 
             if (lang.equalsIgnoreCase(langProp)) {
 
-                localeLogger.debug("Lang is correct");
+                LOG.debug("Lang is correct");
                 doesLanguageExist = true;
 
                 break;
@@ -198,19 +200,19 @@ public class LocalizationManager {
 
             langCode = langProperty.split("_");
 
-            currentLanguage.put(LANGUAGE_MAP_PATH, langCode[0]);
-            currentLanguage.put(COUNTRY_MAP_PATH, langCode[1]);
+            CURRENT_LANGUAGE.put(MAP_PATH_LANGUAGE, langCode[0]);
+            CURRENT_LANGUAGE.put(MAP_PATH_COUNTRY, langCode[1]);
 
         } else {
             throw new IncorrectLanguageException();
         }
 
-        localeResources = ResourceBundle.getBundle(String.format("de/griefed/resources/lang/lang_%s", langProperties.getProperty("lang")), new Locale(currentLanguage.get(LANGUAGE_MAP_PATH), currentLanguage.get(COUNTRY_MAP_PATH)));
-        localeLogger.info(String.format("Using language: %s", getLocalizedString("localeUnlocalizedName")));
+        localeResources = ResourceBundle.getBundle(String.format("de/griefed/resources/lang/lang_%s", langProperties.getProperty("lang")), new Locale(CURRENT_LANGUAGE.get(MAP_PATH_LANGUAGE), CURRENT_LANGUAGE.get(MAP_PATH_COUNTRY)));
+        LOG.info(String.format("Using language: %s", getLocalizedString("localeUnlocalizedName")));
 
-        if (!currentLanguage.get(LANGUAGE_MAP_PATH).equalsIgnoreCase("en")) {
+        if (!CURRENT_LANGUAGE.get(MAP_PATH_LANGUAGE).equalsIgnoreCase("en")) {
 
-            localeLogger.info(String.format("%s %s", getLocalizedString("cli.usingLanguage"), getLocalizedString("localeName")));
+            LOG.info(String.format("%s %s", getLocalizedString("cli.usingLanguage"), getLocalizedString("localeName")));
         }
     }
 
@@ -221,7 +223,7 @@ public class LocalizationManager {
         try {
             init("en_us");
         } catch (IncorrectLanguageException e) {
-            localeLogger.error("Error during default localization initialization.");
+            LOG.error("Error during default localization initialization.");
         }
     }
 
@@ -235,7 +237,7 @@ public class LocalizationManager {
             String value =  localeResources.getString(languageKey);
             return new String(value.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);
         } catch (MissingResourceException ex) {
-            localeLogger.error(String.format("ERROR: Language key %s not found in the language file.", ex.getKey()));
+            LOG.error(String.format("ERROR: Language key %s not found in the language file.", ex.getKey()));
             System.exit(8);
         }
         return null;
@@ -253,15 +255,15 @@ public class LocalizationManager {
                 init(getLangPropertiesFile());
             } catch (IncorrectLanguageException e) {
 
-                localeLogger.error("Incorrect language specified, falling back to English (United States)...");
+                LOG.error("Incorrect language specified, falling back to English (United States)...");
                 try (BufferedWriter writer = new BufferedWriter(new FileWriter(getLangPropertiesFile()))) {
 
                     if (!getLangPropertiesFile().exists()) {
                         boolean langCreated = getLangPropertiesFile().createNewFile();
                         if (langCreated) {
-                            localeLogger.debug("Lang properties file created successfully.");
+                            LOG.debug("Lang properties file created successfully.");
                         } else {
-                            localeLogger.debug("Lang properties file not created.");
+                            LOG.debug("Lang properties file not created.");
                         }
                     }
 
@@ -269,7 +271,7 @@ public class LocalizationManager {
                     writer.write(String.format("lang=en_us%n"));
 
                 } catch (IOException ex) {
-                    localeLogger.error("Error: There was an error writing the localization properties file.", ex);
+                    LOG.error("Error: There was an error writing the localization properties file.", ex);
                 }
                 init();
             }
@@ -279,9 +281,9 @@ public class LocalizationManager {
                 if (!getLangPropertiesFile().exists()) {
                     boolean langCreated = getLangPropertiesFile().createNewFile();
                     if (langCreated) {
-                        localeLogger.debug("Lang properties file created successfully.");
+                        LOG.debug("Lang properties file created successfully.");
                     } else {
-                        localeLogger.debug("Lang properties file not created.");
+                        LOG.debug("Lang properties file not created.");
                     }
                 }
 
@@ -289,7 +291,7 @@ public class LocalizationManager {
                 writer.write(String.format("lang=en_us%n"));
 
             } catch (IOException ex) {
-                localeLogger.error("Error: There was an error writing the localization properties file.", ex);
+                LOG.error("Error: There was an error writing the localization properties file.", ex);
             }
             init();
         }
@@ -308,9 +310,9 @@ public class LocalizationManager {
             if (!getLangPropertiesFile().exists()) {
                 boolean langCreated = getLangPropertiesFile().createNewFile();
                 if (langCreated) {
-                    localeLogger.debug("Lang properties file created successfully.");
+                    LOG.debug("Lang properties file created successfully.");
                 } else {
-                    localeLogger.debug("Lang properties file not created.");
+                    LOG.debug("Lang properties file not created.");
                 }
             }
 
@@ -318,7 +320,7 @@ public class LocalizationManager {
             writer.write(String.format("lang=%s%n", locale));
 
         } catch (IOException ex) {
-            localeLogger.error("Error: There was an error writing the localization properties file.", ex);
+            LOG.error("Error: There was an error writing the localization properties file.", ex);
         }
     }
 }
\ No newline at end of file
diff --git a/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java b/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
index 0ae4705a6..6bebd171f 100644
--- a/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
+++ b/src/test/java/de/griefed/serverpackcreator/CreateServerPackTest.java
@@ -77,7 +77,7 @@ import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
 class CreateServerPackTest {
 
     private CreateServerPack createServerPack;
-    private FilesSetup filesSetup;
+    private DefaultFiles filesSetup;
     private CurseCreateModpack curseCreateModpack;
     private LocalizationManager localizationManager;
     private Configuration configuration;
@@ -87,7 +87,7 @@ class CreateServerPackTest {
         curseCreateModpack = new CurseCreateModpack(localizationManager);
         configuration = new Configuration(localizationManager, curseCreateModpack);
         createServerPack = new CreateServerPack(localizationManager, configuration, curseCreateModpack);
-        filesSetup = new FilesSetup(localizationManager);
+        filesSetup = new DefaultFiles(localizationManager);
     }
 
     @BeforeEach
-- 
GitLab


From c0439219b0bac5d9197f951efe91642fcc572e3d Mon Sep 17 00:00:00 2001
From: Griefed <griefed@griefed.de>
Date: Fri, 7 May 2021 21:57:29 +0200
Subject: [PATCH 91/91] refactor(DI): Refactor to DefaultFiles as it is more
 appropriate for said class

---
 .../{FilesSetup.java => DefaultFiles.java}    | 108 +++++++++---------
 ...esSetupTest.java => DefaultFilesTest.java} | 106 ++++++++---------
 2 files changed, 107 insertions(+), 107 deletions(-)
 rename src/main/java/de/griefed/serverpackcreator/{FilesSetup.java => DefaultFiles.java} (70%)
 rename src/test/java/de/griefed/serverpackcreator/{FilesSetupTest.java => DefaultFilesTest.java} (66%)

diff --git a/src/main/java/de/griefed/serverpackcreator/FilesSetup.java b/src/main/java/de/griefed/serverpackcreator/DefaultFiles.java
similarity index 70%
rename from src/main/java/de/griefed/serverpackcreator/FilesSetup.java
rename to src/main/java/de/griefed/serverpackcreator/DefaultFiles.java
index a615f907d..4ee869963 100644
--- a/src/main/java/de/griefed/serverpackcreator/FilesSetup.java
+++ b/src/main/java/de/griefed/serverpackcreator/DefaultFiles.java
@@ -29,7 +29,7 @@ import java.nio.file.Paths;
 /**
  * <strong>Table of methods</strong>
  * <p>
- * 1. {@link #FilesSetup(LocalizationManager)}<br>
+ * 1. {@link #DefaultFiles(LocalizationManager)}<br>
  * 2. {@link #getConfigFile()}<br>
  * 3. {@link #getOldConfigFile()}<br>
  * 4. {@link #getPropertiesFile()}<br>
@@ -62,11 +62,11 @@ import java.nio.file.Paths;
  * Should an old configuration file, <em>creator.conf</em>, be detected, it is renamed to <em>serverpackcreator.conf</em>
  * to ensure a configuration file is present at all times.
  */
-public class FilesSetup {
+public class DefaultFiles {
 
-    private static final Logger appLogger = LogManager.getLogger(FilesSetup.class);
+    private static final Logger LOG = LogManager.getLogger(DefaultFiles.class);
 
-    private LocalizationManager localizationManager;
+    private final LocalizationManager LOCALIZATIONMANAGER;
 
     /**
      * <strong>Constructor</strong><p>
@@ -74,29 +74,29 @@ public class FilesSetup {
      * one is null. Required for use of localization.
      * @param injectedLocalizationManager Instance of {@link LocalizationManager} required for localized log messages.
      */
-    public FilesSetup(LocalizationManager injectedLocalizationManager) {
+    public DefaultFiles(LocalizationManager injectedLocalizationManager) {
         if (injectedLocalizationManager == null) {
-            this.localizationManager = new LocalizationManager();
+            this.LOCALIZATIONMANAGER = new LocalizationManager();
         } else {
-            this.localizationManager = injectedLocalizationManager;
+            this.LOCALIZATIONMANAGER = injectedLocalizationManager;
         }
     }
 
-    private final File configFile        = new File("serverpackcreator.conf");
-    private final File oldConfigFile     = new File("creator.conf");
-    private final File propertiesFile    = new File("server.properties");
-    private final File iconFile          = new File("server-icon.png");
-    private final File forgeWindowsFile  = new File("start-forge.bat");
-    private final File forgeLinuxFile    = new File("start-forge.sh");
-    private final File fabricWindowsFile = new File("start-fabric.bat");
-    private final File fabricLinuxFile   = new File("start-fabric.sh");
+    private final File FILE_CONFIG = new File("serverpackcreator.conf");
+    private final File FILE_CONFIG_OLD = new File("creator.conf");
+    private final File FILE_PROPERTIES = new File("server.properties");
+    private final File FILE_ICON = new File("server-icon.png");
+    private final File FILE_FORGE_WINDOWS = new File("start-forge.bat");
+    private final File FILE_FORGE_LINUX = new File("start-forge.sh");
+    private final File FILE_FABRIC_WINDOWS = new File("start-fabric.bat");
+    private final File FILE_FABRIC_LINUX = new File("start-fabric.sh");
 
     /**
      * Getter for serverpackcreator.conf.
      * @return Returns the serverpackcreator.conf-file for use in {@link #checkForConfig()}
      */
     public File getConfigFile() {
-        return configFile;
+        return FILE_CONFIG;
     }
 
     /**
@@ -104,7 +104,7 @@ public class FilesSetup {
      * @return Returns the creator.conf-file for use in {@link #checkForConfig()}.
      */
     public File getOldConfigFile() {
-        return oldConfigFile;
+        return FILE_CONFIG_OLD;
     }
 
     /**
@@ -112,7 +112,7 @@ public class FilesSetup {
      * @return Returns the server.properties-file for use in {@link #checkForProperties()}
      */
     public File getPropertiesFile() {
-        return propertiesFile;
+        return FILE_PROPERTIES;
     }
 
     /**
@@ -120,7 +120,7 @@ public class FilesSetup {
      * @return Returns the server-icon.png-file for use in {@link #checkForIcon()}
      */
     public File getIconFile() {
-        return iconFile;
+        return FILE_ICON;
     }
 
     /**
@@ -128,7 +128,7 @@ public class FilesSetup {
      * @return Returns the start-forge.bat-file for use in {@link #checkForForgeWindows()}
      */
     public File getForgeWindowsFile() {
-        return forgeWindowsFile;
+        return FILE_FORGE_WINDOWS;
     }
 
     /**
@@ -136,7 +136,7 @@ public class FilesSetup {
      * @return Returns the start-forge.sh-file for use in {@link #checkForForgeLinux()}
      */
     public File getForgeLinuxFile() {
-        return forgeLinuxFile;
+        return FILE_FORGE_LINUX;
     }
 
     /**
@@ -144,7 +144,7 @@ public class FilesSetup {
      * @return Returns the start-fabric.bat-file for use in {@link #checkForFabricWindows()}
      */
     public File getFabricWindowsFile() {
-        return fabricWindowsFile;
+        return FILE_FABRIC_WINDOWS;
     }
 
     /**
@@ -152,7 +152,7 @@ public class FilesSetup {
      * @return Returns the start-fabric.sh-file for use in {@link #checkForFabricLinux()}
      */
     public File getFabricLinuxFile() {
-        return fabricLinuxFile;
+        return FILE_FABRIC_LINUX;
     }
 
     /** Calls individual methods which check for existence of default files. Only this method should be called to check
@@ -162,10 +162,10 @@ public class FilesSetup {
      * and log.
      */
     void filesSetup() {
-        appLogger.info(localizationManager.getLocalizedString("filessetup.log.info.filessetup.enter"));
+        LOG.info(LOCALIZATIONMANAGER.getLocalizedString("filessetup.log.info.filessetup.enter"));
 
         try { Files.createDirectories(Paths.get("./server_files")); }
-        catch (IOException ex) { appLogger.error(localizationManager.getLocalizedString("filessetup.log.error.filessetup"), ex); }
+        catch (IOException ex) { LOG.error(LOCALIZATIONMANAGER.getLocalizedString("filessetup.log.error.filessetup"), ex); }
 
         boolean doesConfigExist         = checkForConfig();
         boolean doesFabricLinuxExist    = checkForFabricLinux();
@@ -184,14 +184,14 @@ public class FilesSetup {
                 doesPropertiesExist    ||
                 doesIconExist) {
 
-            appLogger.warn(localizationManager.getLocalizedString("filessetup.log.warn.filessetup.warning0"));
-            appLogger.warn(localizationManager.getLocalizedString("filessetup.log.warn.filessetup.warning1"));
-            appLogger.warn(localizationManager.getLocalizedString("filessetup.log.warn.filessetup.warning2"));
-            appLogger.warn(localizationManager.getLocalizedString("filessetup.log.warn.filessetup.warning3"));
-            appLogger.warn(localizationManager.getLocalizedString("filessetup.log.warn.filessetup.warning0"));
+            LOG.warn(LOCALIZATIONMANAGER.getLocalizedString("filessetup.log.warn.filessetup.warning0"));
+            LOG.warn(LOCALIZATIONMANAGER.getLocalizedString("filessetup.log.warn.filessetup.warning1"));
+            LOG.warn(LOCALIZATIONMANAGER.getLocalizedString("filessetup.log.warn.filessetup.warning2"));
+            LOG.warn(LOCALIZATIONMANAGER.getLocalizedString("filessetup.log.warn.filessetup.warning3"));
+            LOG.warn(LOCALIZATIONMANAGER.getLocalizedString("filessetup.log.warn.filessetup.warning0"));
 
         } else {
-            appLogger.info(localizationManager.getLocalizedString("filessetup.log.info.filessetup.finish"));
+            LOG.info(LOCALIZATIONMANAGER.getLocalizedString("filessetup.log.info.filessetup.finish"));
         }
     }
     /** Check for old config file, if found rename to new name. If neither old nor new config file can be found, a new
@@ -207,27 +207,27 @@ public class FilesSetup {
 
                 boolean isOldConfigDeleted = getOldConfigFile().delete();
                 if (isOldConfigDeleted) {
-                    appLogger.info(localizationManager.getLocalizedString("filessetup.log.info.chechforconfig.old"));
+                    LOG.info(LOCALIZATIONMANAGER.getLocalizedString("filessetup.log.info.chechforconfig.old"));
                 }
 
             } catch (IOException ex) {
-                appLogger.error(localizationManager.getLocalizedString("filessetup.log.error.checkforconfig.old"), ex);
+                LOG.error(LOCALIZATIONMANAGER.getLocalizedString("filessetup.log.error.checkforconfig.old"), ex);
             }
         } else if (!getConfigFile().exists()) {
             try {
-                InputStream link = (FilesSetup.class.getResourceAsStream(String.format("/de/griefed/resources/%s", getConfigFile().getName())));
+                InputStream link = (DefaultFiles.class.getResourceAsStream(String.format("/de/griefed/resources/%s", getConfigFile().getName())));
 
                 if (link != null) {
                     Files.copy(link, getConfigFile().getAbsoluteFile().toPath());
                     link.close();
                 }
 
-                appLogger.info(localizationManager.getLocalizedString("filessetup.log.info.checkforconfig.config"));
+                LOG.info(LOCALIZATIONMANAGER.getLocalizedString("filessetup.log.info.checkforconfig.config"));
                 firstRun = true;
 
             } catch (IOException ex) {
                 if (!ex.toString().startsWith("java.nio.file.FileAlreadyExistsException")) {
-                    appLogger.error(localizationManager.getLocalizedString("filessetup.log.error.checkforconfig.config"), ex);
+                    LOG.error(LOCALIZATIONMANAGER.getLocalizedString("filessetup.log.error.checkforconfig.config"), ex);
                     firstRun = true;
                 }
             }
@@ -243,18 +243,18 @@ public class FilesSetup {
         boolean firstRun = false;
         if (!getFabricLinuxFile().exists()) {
             try {
-                InputStream link = (FilesSetup.class.getResourceAsStream(String.format("/de/griefed/resources/server_files/%s", getFabricLinuxFile().getName())));
+                InputStream link = (DefaultFiles.class.getResourceAsStream(String.format("/de/griefed/resources/server_files/%s", getFabricLinuxFile().getName())));
                 if (link != null) {
                     Files.copy(link, Paths.get(String.format("./server_files/%s", getFabricLinuxFile())));
                     link.close();
                 }
 
-                appLogger.info(localizationManager.getLocalizedString("filessetup.log.info.checkforfabriclinux"));
+                LOG.info(LOCALIZATIONMANAGER.getLocalizedString("filessetup.log.info.checkforfabriclinux"));
                 firstRun = true;
 
             } catch (IOException ex) {
                 if (!ex.toString().startsWith("java.nio.file.FileAlreadyExistsException")) {
-                    appLogger.error(localizationManager.getLocalizedString("filessetup.log.error.checkforfabriclinux"), ex);
+                    LOG.error(LOCALIZATIONMANAGER.getLocalizedString("filessetup.log.error.checkforfabriclinux"), ex);
                     firstRun = true;
                 }
             }
@@ -270,18 +270,18 @@ public class FilesSetup {
         boolean firstRun = false;
         if (!getFabricWindowsFile().exists()) {
             try {
-                InputStream link = (FilesSetup.class.getResourceAsStream(String.format("/de/griefed/resources/server_files/%s", getFabricWindowsFile().getName())));
+                InputStream link = (DefaultFiles.class.getResourceAsStream(String.format("/de/griefed/resources/server_files/%s", getFabricWindowsFile().getName())));
                 if (link != null) {
                     Files.copy(link, Paths.get(String.format("./server_files/%s", getFabricWindowsFile())));
                     link.close();
                 }
 
-                appLogger.info(localizationManager.getLocalizedString("filessetup.log.info.checkforfabricwindows"));
+                LOG.info(LOCALIZATIONMANAGER.getLocalizedString("filessetup.log.info.checkforfabricwindows"));
                 firstRun = true;
 
             } catch (IOException ex) {
                 if (!ex.toString().startsWith("java.nio.file.FileAlreadyExistsException")) {
-                    appLogger.error(localizationManager.getLocalizedString("filessetup.log.error.checkforfabricwindows"), ex);
+                    LOG.error(LOCALIZATIONMANAGER.getLocalizedString("filessetup.log.error.checkforfabricwindows"), ex);
                     firstRun = true;
                 }
             }
@@ -297,18 +297,18 @@ public class FilesSetup {
         boolean firstRun = false;
         if (!getForgeLinuxFile().exists()) {
             try {
-                InputStream link = (FilesSetup.class.getResourceAsStream(String.format("/de/griefed/resources/server_files/%s", getForgeLinuxFile().getName())));
+                InputStream link = (DefaultFiles.class.getResourceAsStream(String.format("/de/griefed/resources/server_files/%s", getForgeLinuxFile().getName())));
                 if (link != null) {
                     Files.copy(link, Paths.get(String.format("./server_files/%s", getForgeLinuxFile())));
                     link.close();
                 }
 
-                appLogger.info(localizationManager.getLocalizedString("filessetup.log.info.checkforforgelinux"));
+                LOG.info(LOCALIZATIONMANAGER.getLocalizedString("filessetup.log.info.checkforforgelinux"));
                 firstRun = true;
 
             } catch (IOException ex) {
                 if (!ex.toString().startsWith("java.nio.file.FileAlreadyExistsException")) {
-                    appLogger.error(localizationManager.getLocalizedString("filessetup.log.error.checkforforgelinux"), ex);
+                    LOG.error(LOCALIZATIONMANAGER.getLocalizedString("filessetup.log.error.checkforforgelinux"), ex);
                     firstRun = true;
                 }
             }
@@ -324,18 +324,18 @@ public class FilesSetup {
         boolean firstRun = false;
         if (!getForgeWindowsFile().exists()) {
             try {
-                InputStream link = (FilesSetup.class.getResourceAsStream(String.format("/de/griefed/resources/server_files/%s", getForgeWindowsFile().getName())));
+                InputStream link = (DefaultFiles.class.getResourceAsStream(String.format("/de/griefed/resources/server_files/%s", getForgeWindowsFile().getName())));
                 if (link != null) {
                     Files.copy(link, Paths.get(String.format("./server_files/%s", getForgeWindowsFile())));
                     link.close();
                 }
 
-                appLogger.info(localizationManager.getLocalizedString("filessetup.log.info.checkforforgewindows"));
+                LOG.info(LOCALIZATIONMANAGER.getLocalizedString("filessetup.log.info.checkforforgewindows"));
                 firstRun = true;
 
             } catch (IOException ex) {
                 if (!ex.toString().startsWith("java.nio.file.FileAlreadyExistsException")) {
-                    appLogger.error(localizationManager.getLocalizedString("filessetup.log.error.checkforforgewindows"), ex);
+                    LOG.error(LOCALIZATIONMANAGER.getLocalizedString("filessetup.log.error.checkforforgewindows"), ex);
                     firstRun = true;
                 }
             }
@@ -351,18 +351,18 @@ public class FilesSetup {
         boolean firstRun = false;
         if (!getPropertiesFile().exists()) {
             try {
-                InputStream link = (FilesSetup.class.getResourceAsStream(String.format("/de/griefed/resources/server_files/%s", getPropertiesFile().getName())));
+                InputStream link = (DefaultFiles.class.getResourceAsStream(String.format("/de/griefed/resources/server_files/%s", getPropertiesFile().getName())));
                 if (link != null) {
                     Files.copy(link, Paths.get(String.format("./server_files/%s", getPropertiesFile())));
                     link.close();
                 }
 
-                appLogger.info(localizationManager.getLocalizedString("filessetup.log.info.checkforproperties"));
+                LOG.info(LOCALIZATIONMANAGER.getLocalizedString("filessetup.log.info.checkforproperties"));
                 firstRun = true;
 
             } catch (IOException ex) {
                 if (!ex.toString().startsWith("java.nio.file.FileAlreadyExistsException")) {
-                    appLogger.error(localizationManager.getLocalizedString("filessetup.log.error.checkforproperties"), ex);
+                    LOG.error(LOCALIZATIONMANAGER.getLocalizedString("filessetup.log.error.checkforproperties"), ex);
                     firstRun = true;
                 }
             }
@@ -378,18 +378,18 @@ public class FilesSetup {
         boolean firstRun = false;
         if (!getIconFile().exists()) {
             try {
-                InputStream link = (FilesSetup.class.getResourceAsStream(String.format("/de/griefed/resources/server_files/%s", getIconFile().getName())));
+                InputStream link = (DefaultFiles.class.getResourceAsStream(String.format("/de/griefed/resources/server_files/%s", getIconFile().getName())));
                 if (link != null) {
                     Files.copy(link, Paths.get(String.format("./server_files/%s", getIconFile())));
                     link.close();
                 }
 
-                appLogger.info(localizationManager.getLocalizedString("filessetup.log.info.checkforicon"));
+                LOG.info(LOCALIZATIONMANAGER.getLocalizedString("filessetup.log.info.checkforicon"));
                 firstRun = true;
 
             } catch (IOException ex) {
                 if (!ex.toString().startsWith("java.nio.file.FileAlreadyExistsException")) {
-                    appLogger.error(localizationManager.getLocalizedString("filessetup.log.error.checkforicon"), ex);
+                    LOG.error(LOCALIZATIONMANAGER.getLocalizedString("filessetup.log.error.checkforicon"), ex);
                     firstRun = true;
                 }
             }
diff --git a/src/test/java/de/griefed/serverpackcreator/FilesSetupTest.java b/src/test/java/de/griefed/serverpackcreator/DefaultFilesTest.java
similarity index 66%
rename from src/test/java/de/griefed/serverpackcreator/FilesSetupTest.java
rename to src/test/java/de/griefed/serverpackcreator/DefaultFilesTest.java
index 902049e9f..8f7b5c7f5 100644
--- a/src/test/java/de/griefed/serverpackcreator/FilesSetupTest.java
+++ b/src/test/java/de/griefed/serverpackcreator/DefaultFilesTest.java
@@ -35,40 +35,40 @@ import java.util.Comparator;
 /**
  * <strong>Table of tests</strong>
  * <p>
- * 1. {@link #FilesSetupTest()} tests {@link FilesSetup#FilesSetup(LocalizationManager)}<br>
- * 2. {@link #getConfigFileTest()} tests {@link FilesSetup#getConfigFile()}<br>
- * 3. {@link #getOldConfigFileTest()} tests {@link FilesSetup#getOldConfigFile()}<br>
- * 4. {@link #getPropertiesFileTest()} tests {@link FilesSetup#getPropertiesFile()}<br>
- * 5. {@link #getIconFileTest()} tests {@link FilesSetup#getIconFile()}<br>
- * 6. {@link #getForgeWindowsFileTest()} tests {@link FilesSetup#getForgeWindowsFile()}<br>
- * 7. {@link #getForgeLinuxFileTest()} tests {@link FilesSetup#getForgeLinuxFile()}<br>
- * 8. {@link #getFabricWindowsFileTest()} tests {@link FilesSetup#getFabricWindowsFile()}<br>
- * 9. {@link #getFabricLinuxFileTest()} tests {@link FilesSetup#getFabricLinuxFile()}<br>
- * 10.{@link #checkForConfigTestOld} tests {@link FilesSetup#checkForConfig()}<br>
- * 11.{@link #checkForConfigTest} tests {@link FilesSetup#checkForConfig()}<br>
- * 12.{@link #checkForConfigTestNew} tests {@link FilesSetup#checkForConfig()}<br>
- * 13.{@link #checkForFabricLinuxTest} tests {@link FilesSetup#checkForFabricLinux()}<br>
- * 14.{@link #checkForFabricLinuxTestNew} tests {@link FilesSetup#checkForForgeLinux()}<br>
- * 15.{@link #checkForFabricWindowsTest} tests {@link FilesSetup#checkForFabricWindows()}<br>
- * 16.{@link #checkForFabricWindowsTestNew} tests {@link FilesSetup#checkForFabricWindows()}<br>
- * 17.{@link #checkForForgeLinuxTest} tests {@link FilesSetup#checkForForgeLinux()}<br>
- * 18.{@link #checkForForgeLinuxTestNew} tests {@link FilesSetup#checkForForgeLinux()}<br>
- * 19.{@link #checkForForgeWindowsTest} tests {@link FilesSetup#checkForForgeWindows()}<br>
- * 20.{@link #checkForForgeWindowsTestNew} tests {@link FilesSetup#checkForForgeWindows()}<br>
- * 21.{@link #checkForPropertiesTest} tests {@link FilesSetup#checkForProperties()}<br>
- * 22.{@link #checkForPropertiesTestNew} tests {@link FilesSetup#checkForProperties()}<br>
- * 23.{@link #checkForIconTest} tests {@link FilesSetup#checkForIcon()}<br>
- * 24.{@link #checkForIconTestNew} tests {@link FilesSetup#checkForIcon()}<br>
- * 25.{@link #filesSetupTest} tests {@link FilesSetup#filesSetup()}
+ * 1. {@link #DefaultFilesTest()} tests {@link DefaultFiles#DefaultFiles(LocalizationManager)}<br>
+ * 2. {@link #getConfigFileTest()} tests {@link DefaultFiles#getConfigFile()}<br>
+ * 3. {@link #getOldConfigFileTest()} tests {@link DefaultFiles#getOldConfigFile()}<br>
+ * 4. {@link #getPropertiesFileTest()} tests {@link DefaultFiles#getPropertiesFile()}<br>
+ * 5. {@link #getIconFileTest()} tests {@link DefaultFiles#getIconFile()}<br>
+ * 6. {@link #getForgeWindowsFileTest()} tests {@link DefaultFiles#getForgeWindowsFile()}<br>
+ * 7. {@link #getForgeLinuxFileTest()} tests {@link DefaultFiles#getForgeLinuxFile()}<br>
+ * 8. {@link #getFabricWindowsFileTest()} tests {@link DefaultFiles#getFabricWindowsFile()}<br>
+ * 9. {@link #getFabricLinuxFileTest()} tests {@link DefaultFiles#getFabricLinuxFile()}<br>
+ * 10.{@link #checkForConfigTestOld} tests {@link DefaultFiles#checkForConfig()}<br>
+ * 11.{@link #checkForConfigTest} tests {@link DefaultFiles#checkForConfig()}<br>
+ * 12.{@link #checkForConfigTestNew} tests {@link DefaultFiles#checkForConfig()}<br>
+ * 13.{@link #checkForFabricLinuxTest} tests {@link DefaultFiles#checkForFabricLinux()}<br>
+ * 14.{@link #checkForFabricLinuxTestNew} tests {@link DefaultFiles#checkForForgeLinux()}<br>
+ * 15.{@link #checkForFabricWindowsTest} tests {@link DefaultFiles#checkForFabricWindows()}<br>
+ * 16.{@link #checkForFabricWindowsTestNew} tests {@link DefaultFiles#checkForFabricWindows()}<br>
+ * 17.{@link #checkForForgeLinuxTest} tests {@link DefaultFiles#checkForForgeLinux()}<br>
+ * 18.{@link #checkForForgeLinuxTestNew} tests {@link DefaultFiles#checkForForgeLinux()}<br>
+ * 19.{@link #checkForForgeWindowsTest} tests {@link DefaultFiles#checkForForgeWindows()}<br>
+ * 20.{@link #checkForForgeWindowsTestNew} tests {@link DefaultFiles#checkForForgeWindows()}<br>
+ * 21.{@link #checkForPropertiesTest} tests {@link DefaultFiles#checkForProperties()}<br>
+ * 22.{@link #checkForPropertiesTestNew} tests {@link DefaultFiles#checkForProperties()}<br>
+ * 23.{@link #checkForIconTest} tests {@link DefaultFiles#checkForIcon()}<br>
+ * 24.{@link #checkForIconTestNew} tests {@link DefaultFiles#checkForIcon()}<br>
+ * 25.{@link #filesSetupTest} tests {@link DefaultFiles#filesSetup()}
  */
-class FilesSetupTest {
+class DefaultFilesTest {
 
-    private FilesSetup filesSetup;
+    private DefaultFiles defaultFiles;
     private LocalizationManager localizationManager;
 
-    FilesSetupTest() {
+    DefaultFilesTest() {
         localizationManager = new LocalizationManager();
-        filesSetup = new FilesSetup(localizationManager);
+        defaultFiles = new DefaultFiles(localizationManager);
     }
 
     @BeforeEach
@@ -79,49 +79,49 @@ class FilesSetupTest {
 
     @Test
     void getConfigFileTest() {
-        File file = filesSetup.getConfigFile();
+        File file = defaultFiles.getConfigFile();
         Assertions.assertNotNull(file);
     }
 
     @Test
     void getOldConfigFileTest() {
-        File file = filesSetup.getOldConfigFile();
+        File file = defaultFiles.getOldConfigFile();
         Assertions.assertNotNull(file);
     }
 
     @Test
     void getPropertiesFileTest() {
-        File file = filesSetup.getPropertiesFile();
+        File file = defaultFiles.getPropertiesFile();
         Assertions.assertNotNull(file);
     }
 
     @Test
     void getIconFileTest() {
-        File file = filesSetup.getIconFile();
+        File file = defaultFiles.getIconFile();
         Assertions.assertNotNull(file);
     }
 
     @Test
     void getForgeWindowsFileTest() {
-        File file = filesSetup.getForgeWindowsFile();
+        File file = defaultFiles.getForgeWindowsFile();
         Assertions.assertNotNull(file);
     }
 
     @Test
     void getForgeLinuxFileTest() {
-        File file = filesSetup.getForgeLinuxFile();
+        File file = defaultFiles.getForgeLinuxFile();
         Assertions.assertNotNull(file);
     }
 
     @Test
     void getFabricWindowsFileTest() {
-        File file = filesSetup.getFabricWindowsFile();
+        File file = defaultFiles.getFabricWindowsFile();
         Assertions.assertNotNull(file);
     }
 
     @Test
     void getFabricLinuxFileTest() {
-        File file = filesSetup.getFabricLinuxFile();
+        File file = defaultFiles.getFabricLinuxFile();
         Assertions.assertNotNull(file);
     }
 
@@ -130,7 +130,7 @@ class FilesSetupTest {
     void checkForConfigTestOld() throws IOException {
         File oldConfigFile = new File("creator.conf");
         oldConfigFile.createNewFile();
-        Assertions.assertFalse(filesSetup.checkForConfig());
+        Assertions.assertFalse(defaultFiles.checkForConfig());
         Assertions.assertTrue(new File("serverpackcreator.conf").exists());
         new File("serverpackcreator.conf").delete();
         new File("creator.conf").delete();
@@ -141,7 +141,7 @@ class FilesSetupTest {
     void checkForConfigTest() throws IOException {
         File configFile = new File("serverpackcreator.conf");
         configFile.createNewFile();
-        Assertions.assertFalse(filesSetup.checkForConfig());
+        Assertions.assertFalse(defaultFiles.checkForConfig());
         configFile.delete();
     }
 
@@ -150,7 +150,7 @@ class FilesSetupTest {
     void checkForConfigTestNew() {
         File configFile = new File("./serverpackcreator.conf");
         configFile.delete();
-        Assertions.assertTrue(filesSetup.checkForConfig());
+        Assertions.assertTrue(defaultFiles.checkForConfig());
         configFile.delete();
     }
 
@@ -159,7 +159,7 @@ class FilesSetupTest {
     void checkForFabricLinuxTest() throws IOException {
         File fabricLinux = new File("start-fabric.sh");
         fabricLinux.createNewFile();
-        Assertions.assertFalse(filesSetup.checkForFabricLinux());
+        Assertions.assertFalse(defaultFiles.checkForFabricLinux());
         fabricLinux.delete();
     }
 
@@ -169,7 +169,7 @@ class FilesSetupTest {
         Files.createDirectories(Paths.get("./server_files"));
         File fabricLinux = new File("./server_files/start-fabric.sh");
         fabricLinux.delete();
-        Assertions.assertTrue(filesSetup.checkForFabricLinux());
+        Assertions.assertTrue(defaultFiles.checkForFabricLinux());
         fabricLinux.delete();
     }
 
@@ -178,7 +178,7 @@ class FilesSetupTest {
     void checkForFabricWindowsTest() throws IOException {
         File fabricWindows = new File("start-fabric.bat");
         fabricWindows.createNewFile();
-        Assertions.assertFalse(filesSetup.checkForFabricWindows());
+        Assertions.assertFalse(defaultFiles.checkForFabricWindows());
         fabricWindows.delete();
     }
 
@@ -188,7 +188,7 @@ class FilesSetupTest {
         Files.createDirectories(Paths.get("./server_files"));
         File fabricWindows = new File("./server_files/start-fabric.bat");
         fabricWindows.delete();
-        Assertions.assertTrue(filesSetup.checkForFabricWindows());
+        Assertions.assertTrue(defaultFiles.checkForFabricWindows());
         fabricWindows.delete();
     }
 
@@ -197,7 +197,7 @@ class FilesSetupTest {
     void checkForForgeLinuxTest() throws IOException {
         File forgeLinux = new File("start-forge.sh");
         forgeLinux.createNewFile();
-        Assertions.assertFalse(filesSetup.checkForForgeLinux());
+        Assertions.assertFalse(defaultFiles.checkForForgeLinux());
         forgeLinux.delete();
     }
 
@@ -207,7 +207,7 @@ class FilesSetupTest {
         Files.createDirectories(Paths.get("./server_files"));
         File forgeLinux = new File("./server_files/start-forge.sh");
         forgeLinux.delete();
-        Assertions.assertTrue(filesSetup.checkForForgeLinux());
+        Assertions.assertTrue(defaultFiles.checkForForgeLinux());
         forgeLinux.delete();
     }
 
@@ -216,7 +216,7 @@ class FilesSetupTest {
     void checkForForgeWindowsTest() throws IOException {
         File forgeWindows = new File("start-forge.bat");
         forgeWindows.createNewFile();
-        Assertions.assertFalse(filesSetup.checkForForgeWindows());
+        Assertions.assertFalse(defaultFiles.checkForForgeWindows());
         forgeWindows.delete();
     }
 
@@ -226,7 +226,7 @@ class FilesSetupTest {
         Files.createDirectories(Paths.get("./server_files"));
         File forgeWindows = new File("./server_files/start-forge.bat");
         forgeWindows.delete();
-        Assertions.assertTrue(filesSetup.checkForForgeWindows());
+        Assertions.assertTrue(defaultFiles.checkForForgeWindows());
         forgeWindows.delete();
     }
 
@@ -235,7 +235,7 @@ class FilesSetupTest {
     void checkForPropertiesTest() throws IOException {
         File properties = new File("server.properties");
         properties.createNewFile();
-        Assertions.assertFalse(filesSetup.checkForProperties());
+        Assertions.assertFalse(defaultFiles.checkForProperties());
         properties.delete();
     }
 
@@ -245,7 +245,7 @@ class FilesSetupTest {
         Files.createDirectories(Paths.get("./server_files"));
         File properties = new File("./server_files/server.properties");
         properties.delete();
-        Assertions.assertTrue(filesSetup.checkForProperties());
+        Assertions.assertTrue(defaultFiles.checkForProperties());
         properties.delete();
     }
 
@@ -254,7 +254,7 @@ class FilesSetupTest {
     void checkForIconTest() throws IOException {
         File icon = new File("server-icon.png");
         icon.createNewFile();
-        Assertions.assertFalse(filesSetup.checkForIcon());
+        Assertions.assertFalse(defaultFiles.checkForIcon());
         icon.delete();
     }
 
@@ -264,14 +264,14 @@ class FilesSetupTest {
         Files.createDirectories(Paths.get("./server_files"));
         File icon = new File("./server_files/server-icon.png");
         icon.delete();
-        Assertions.assertTrue(filesSetup.checkForIcon());
+        Assertions.assertTrue(defaultFiles.checkForIcon());
         icon.delete();
     }
 
     @SuppressWarnings("ResultOfMethodCallIgnored")
     @Test
     void filesSetupTest() throws IOException {
-        filesSetup.filesSetup();
+        defaultFiles.filesSetup();
         Assertions.assertTrue(new File("./server_files").isDirectory());
         Assertions.assertTrue(new File("./server_files/server.properties").exists());
         Assertions.assertTrue(new File("./server_files/server-icon.png").exists());
-- 
GitLab