public GameVersion MergeArguments(GameVersion MCMojang)
 {
     if (post_1_13 == true)
     {
         ForgeVersion MCForge = ForgeVersion.FromJson(File.ReadAllText(LibraryDir + _sForgeTree.Replace('/', '\\') + sForgeVersion + @"\version.json").Trim());
         // replace vanilla values
         MCMojang.MainClass = MCForge.MainClass;
         // append forge arguments
         List <GameElement> itemList  = MCMojang.Arguments.Game.ToList();
         List <GameElement> moreItems = MCForge.Arguments.Game.ToList();
         itemList.AddRange(moreItems);
         MCMojang.Arguments.Game = itemList.ToArray();
     }
     else
     {
         ForgeInstaller MCForge = ForgeInstaller.FromJson(File.ReadAllText(LibraryDir + _sForgeTree.Replace('/', '\\') + sForgeVersion + @"\install_profile.json").Trim());
         // replace vanilla settings
         MCMojang.MainClass          = MCForge.VersionInfo.MainClass;
         MCMojang.MinecraftArguments = MCForge.VersionInfo.MinecraftArguments;
     }
     return(MCMojang);
 }
        public Dictionary <string, string> InstallForge(string sForgeVersion)
        {
            this.sForgeVersion = sForgeVersion;

            Dictionary <string, string> ClassPath = new Dictionary <string, string>(); // Library list for startup

            sForgeVersionDir    = LibraryDir + _sForgeTree.Replace('/', '\\') + sForgeVersion;
            sForgeInstallerFile = sForgeVersionDir + @"\forge-" + sForgeVersion + "-installer.jar";
            string remoteFile = _sForgeMaven + _sForgeTree + sForgeVersion + "/forge-" + sForgeVersion + "-installer.jar";

            //check if file exists
            if (!File.Exists(sForgeInstallerFile))
            {
                dhelper.DownloadFileTo(remoteFile, sForgeInstallerFile, true, null);
            }

            // always extract files
            List <string> extractList = new List <string>
            {
                "install_profile.json",
                "version.json"
            };

            dhelper.ExtractZipFiles(sForgeInstallerFile, sForgeVersionDir, extractList);

            if (File.Exists(LibraryDir + _sForgeTree.Replace('/', '\\') + sForgeVersion + @"\version.json"))
            {
                post_1_13 = true;
            }

            // post 1.13 files
            if (post_1_13 == true)
            {
                post_1_13 = true;
                ForgeVersion MCForge = ForgeVersion.FromJson(File.ReadAllText(LibraryDir + _sForgeTree.Replace('/', '\\') + sForgeVersion + @"\version.json").Trim());
                // download Forge libraries
                ClassPath = DownloadForgeLibraries(MCForge);

                // extract Forge Jar
                extractList = new List <string>
                {
                    "maven/net/minecraftforge/forge/" + sForgeVersion + "/forge-" + sForgeVersion + ".jar"
                };
                dhelper.ExtractZipFiles(sForgeInstallerFile, sForgeVersionDir, extractList, false);


                // build client.jar
                BuildForgeClientJar();

                // append Forge to classpath
                ClassPath.Add("net.minecraftforge:forge", sForgeVersionDir + @"\forge-" + sForgeVersion + ".jar");
            }

            // pre 1.13 files
            else if (post_1_13 == false)
            {
                post_1_13 = false;
                ForgeInstaller MCForge = ForgeInstaller.FromJson(File.ReadAllText(LibraryDir + _sForgeTree.Replace('/', '\\') + sForgeVersion + @"\install_profile.json").Trim());
                // download Forge libraries
                ClassPath = DownloadForgeLibraries(MCForge);

                // Extract Universal Jar
                extractList = new List <string>
                {
                    "forge-" + sForgeVersion + "-universal.jar"
                };
                dhelper.ExtractZipFiles(sForgeInstallerFile, sForgeVersionDir, extractList);

                // append Forge to classpath
                ClassPath.Add("net.minecraftforge:forge", sForgeVersionDir + @"\forge-" + sForgeVersion + "-universal.jar");
            }

            return(ClassPath);
        }