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 = "准备下载"; }
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; }
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; }
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; }