コード例 #1
0
        private async void DownloadVersionAsync(object sender, RoutedEventArgs e)
        {
            if (_downloadVersionList.SelectedIndex == -1)
            {
                MessageBox.Show("未选取任何版本!", "(。•ˇ‸ˇ•。)", MessageBoxButton.OK, MessageBoxImage.Information);
                return;
            }

            _downloadButton.IsEnabled = false;

            var core       = YingApp.YCore;
            var versionID  = _availableVersions[_downloadVersionList.SelectedIndex].ID;
            var jsonUrl    = _availableVersions[_downloadVersionList.SelectedIndex].JsonUrl;
            var versionDir = $"{core.GameRootPath}\\versions\\{versionID}";

            if (!Directory.Exists(versionDir))
            {
                Directory.CreateDirectory(versionDir);
            }

            var jsonPath = $"{versionDir}\\{versionID}.json";

            if (File.Exists(jsonPath) && File.Exists(jsonPath.Replace("json", "jar")))
            {
                MessageBox.Show("所选版本已经躺在你的硬盘里了", "(。•ˇ‸ˇ•。)", MessageBoxButton.OK, MessageBoxImage.Information);
                _downloadButton.IsEnabled = true;
                return;
            }

            _statusBox.Text = $"正在请求{versionID}版本json文件";
            try
            {
                File.WriteAllText(jsonPath, await client.GetStringAsync(jsonUrl));
            }
            catch
            {
                _statusBox.Text = $"获取{versionID}版本json文件失败";
                Directory.Delete(versionDir, true);
                _downloadButton.IsEnabled = true;
                return;
            }

            var version = core.GetVersion(versionID);

            YingConfig.YArgs.Versions.Add(version);
            YingConfig.YArgs.VersionIndex = YingConfig.YArgs.Versions.IndexOf(version);

            var filesToDownload = DownloadHelper.GetLostEssentials(version);

            var downloadPage = new Pages.DownloadPage();

            (Application.Current.MainWindow as YingWindow).YFrame.Navigate(downloadPage);
            bool hasDownloadSucceeded = await downloadPage.StartDownloadAsync(filesToDownload, "下载新的Minecraft版本");

            if (hasDownloadSucceeded)
            {
                MessageBox.Show($"{versionID}版本下载成功");
            }
            else
            {
                MessageBox.Show($"{versionID}版本下载失败");
                Directory.Delete(versionDir, true);
                YingConfig.YArgs.Versions.Remove(version);
                YingConfig.YArgs.VersionIndex = 0;
            }

            _downloadButton.IsEnabled = true;
            _statusBox.Text           = "准备下载";
        }
コード例 #2
0
ファイル: ForgeInstall.xaml.cs プロジェクト: outtimes/GBCLV2
        private async void InstallForgeAsync(object sender, RoutedEventArgs e)
        {
            if (ForgeList.SelectedIndex == -1)
            {
                MessageBox.Show("请选择要安装的Forge版本!", "(。•ˇ‸ˇ•。)", MessageBoxButton.OK, MessageBoxImage.Information);
                return;
            }
            download_btn.IsEnabled = false;
            var core = App.Core;

            var forge     = VersionForges[ForgeList.SelectedIndex];
            var forgeName = $"{mcVersion}-{forge.Version}" + (forge.Branch == null ? null : $"-{forge.Branch}");

            var forgeJarPath = $"{core.GameRootPath}\\libraries\\net\\minecraftforge\\forge\\{forgeName}\\forge-{forgeName}.jar";

            var forgeDownload = new List <DownloadInfo>()
            {
                new DownloadInfo
                {
                    Path = forgeJarPath,
                    Url  = $"{DownloadHelper.BaseUrl.ForgeBaseUrl}{forgeName}/forge-{forgeName}-universal.jar"
                }
            };

            var downloadPage = new Pages.DownloadPage(forgeDownload, "下载Forge");

            (Application.Current.MainWindow.FindName("frame") as Frame).Navigate(downloadPage);
            await Task.Run(() => downloadPage.DownloadComplete.WaitOne());

            if (!downloadPage.Succeeded)
            {
                MessageBox.Show($"下载 {mcVersion} 版本Forge失败");
                download_btn.IsEnabled = true;
                return;
            }

            var newVersionID   = $"{mcVersion}-forge{forgeName}";
            var newVersionPath = $"{core.GameRootPath}\\versions\\{newVersionID}";

            try
            {
                if (!Directory.Exists(newVersionPath))
                {
                    Directory.CreateDirectory(newVersionPath);
                }

                using (var archive = ZipFile.OpenRead(forgeJarPath))
                {
                    archive.GetEntry("version.json").ExtractToFile($"{newVersionPath}\\{newVersionID}.json");
                }
            }
            catch
            {
                MessageBox.Show($"安装 {mcVersion} 版本Forge失败");
                download_btn.IsEnabled = true;
                return;
            }

            var newVersion = core.GetVersion(newVersionID);

            App.Versions.Add(newVersion);
            App.Config.VersionIndex = App.Versions.IndexOf(newVersion);

            MessageBox.Show($"安装{mcVersion}版本Forge成功");
            download_btn.IsEnabled = true;
        }
コード例 #3
0
ファイル: GameDownload.xaml.cs プロジェクト: outtimes/GBCLV2
        private async void DownloadVersionAsync(object sender, RoutedEventArgs e)
        {
            if (VersionList.SelectedIndex == -1)
            {
                MessageBox.Show("未选取任何版本!", "(。•ˇ‸ˇ•。)", MessageBoxButton.OK, MessageBoxImage.Information);
                return;
            }

            download_btn.IsEnabled = false;

            var core       = App.Core;
            var versionID  = AllVersions[VersionList.SelectedIndex].ID;
            var jsonUrl    = AllVersions[VersionList.SelectedIndex].JsonUrl;
            var versionDir = $"{core.GameRootPath}\\versions\\{versionID}";

            if (!Directory.Exists(versionDir))
            {
                Directory.CreateDirectory(versionDir);
            }

            var jsonPath = $"{versionDir}\\{versionID}.json";

            if (File.Exists(jsonPath) && File.Exists(jsonPath.Replace("json", "jar")))
            {
                MessageBox.Show("所选版本已经躺在你的硬盘里了", "(。•ˇ‸ˇ•。)", MessageBoxButton.OK, MessageBoxImage.Information);
                download_btn.IsEnabled = true;
                return;
            }

            statusBox.Text = $"正在请求{versionID}版本json文件";
            try
            {
                File.WriteAllText(jsonPath, await client.GetStringAsync(jsonUrl));
            }
            catch
            {
                statusBox.Text = $"获取{versionID}版本json文件失败";
                Directory.Delete(versionDir, true);
                download_btn.IsEnabled = true;
                return;
            }

            var version = core.GetVersion(versionID);

            App.Versions.Add(version);
            App.Config.VersionIndex = App.Versions.IndexOf(version);

            var FilesToDownload = DownloadHelper.GetLostEssentials(core, version);

            var downloadPage = new Pages.DownloadPage(FilesToDownload, "下载新Minecraft版本");

            (Application.Current.MainWindow.FindName("frame") as Frame).Navigate(downloadPage);
            await Task.Run(() => downloadPage.DownloadComplete.WaitOne());

            if (downloadPage.Succeeded)
            {
                MessageBox.Show($"{versionID}版本下载成功");
            }
            else
            {
                MessageBox.Show($"{versionID}版本下载失败");
                Directory.Delete(versionDir, true);
                App.Versions.Remove(version);
                App.Config.VersionIndex = 0;
            }

            download_btn.IsEnabled = true;
        }
コード例 #4
0
        private async void InstallForgeAsync(object sender, RoutedEventArgs e)
        {
            if (_forgeList.SelectedIndex == -1)
            {
                MessageBox.Show("请选择要安装的Forge版本!", "(。•ˇ‸ˇ•。)", MessageBoxButton.OK, MessageBoxImage.Information);
                return;
            }
            _downloadButton.IsEnabled = false;
            var core = YingApp.YCore;

            var forge        = VersionForges[_forgeList.SelectedIndex];
            var forgeName    = $"{_mcVersion}-{forge.Version}";
            var newVersionID = $"{_mcVersion}-forge{forgeName}";

            foreach (var version in YingConfig.YArgs.Versions)
            {
                if (version.Id == newVersionID)
                {
                    MessageBox.Show($"{forgeName} 版本的forge已经安装!", "┑( ̄Д  ̄)┍");
                    return;
                }
            }

            var newVersionPath = $"{core.GameRootPath}\\versions\\{newVersionID}";
            var forgeJarPath   = $"{core.GameRootPath}\\libraries\\net\\minecraftforge\\forge\\{forgeName}\\forge-{forgeName}.jar";

            var downloadName  = forgeName + ((forge.Branch == null) ? null : $"-{forge.Branch}");
            var forgeDownload = new List <DownloadInfo>()
            {
                new DownloadInfo
                {
                    Path = forgeJarPath,
                    Url  = $"{DownloadHelper.BaseUrl.ForgeBaseUrl}{downloadName}/forge-{downloadName}-universal.jar",
                }
            };

            var downloadPage = new Pages.DownloadPage();

            (Application.Current.MainWindow as YingWindow).YFrame.Navigate(downloadPage);
            bool hasDownloadSucceeded = await downloadPage.StartDownloadAsync(forgeDownload, "下载Forge");

            if (!hasDownloadSucceeded)
            {
                MessageBox.Show($"下载 {_mcVersion} 版本Forge失败");
                _downloadButton.IsEnabled = true;
                return;
            }

            try
            {
                if (!Directory.Exists(newVersionPath))
                {
                    Directory.CreateDirectory(newVersionPath);
                }

                JsonData jsonData;
                string   jsonText;

                using (var archive = ZipFile.OpenRead(forgeJarPath))
                {
                    var entry = archive.GetEntry("version.json");
                    using (var sr = new StreamReader(entry.Open(), System.Text.Encoding.UTF8))
                    {
                        jsonData = JsonMapper.ToObject(sr.ReadToEnd());
                    }
                }

                jsonData["id"] = newVersionID;
                jsonText       = jsonData.ToJson();

                if (!jsonData.Keys.Contains("inheritsFrom"))
                {
                    jsonText = jsonText.Substring(0, jsonText.Length - 1) + $",\"inheritsFrom\": \"{_mcVersion}\"}}";
                }

                File.WriteAllText($"{newVersionPath}\\{newVersionID}.json", jsonText, System.Text.Encoding.UTF8);
            }
            catch (Exception ex)
            {
                MessageBox.Show($"安装 {_mcVersion} 版本Forge失败\n{ex.Message}");
                _downloadButton.IsEnabled = true;
                return;
            }

            var newVersion = core.GetVersion(newVersionID);

            YingConfig.YArgs.Versions.Add(newVersion);
            YingConfig.YArgs.VersionIndex = YingConfig.YArgs.Versions.IndexOf(newVersion);

            MessageBox.Show($"安装{_mcVersion}版本Forge成功");
            _downloadButton.IsEnabled = true;
        }