public string DownloadLibraries() { StringBuilder libraries = new StringBuilder(); VersionManifest selectedVersionManifest = VersionManifest.ParseVersion( new DirectoryInfo(_configuration.McVersions + @"\" + (_versionToLaunch ?? (_selectedProfile.SelectedVersion ?? GetLatestVersion(_selectedProfile))))); //MessageBox.Show(_versionToLaunch); SetStatusBarVisibility(true); StatusBarValue = 0; jsinit.InstallBarProgress("Проверка библиотек...", 20); //UpdateStatusBarText(_configuration.Localization.CheckingLibraries); //AppendLog("Preparing required libraries..."); Dictionary <DownloadEntry, bool> libsToDownload = new Dictionary <DownloadEntry, bool>(); foreach (Lib a in selectedVersionManifest.Libs) { if (!a.IsForWindows()) { continue; } if (a.DownloadInfo == null) { libsToDownload.Add(new DownloadEntry { Path = a.GetPath(), Url = a.GetUrl() }, false); continue; } foreach (DownloadEntry entry in a.DownloadInfo?.GetDownloadsEntries(OS.WINDOWS)) { if (entry == null) { continue; } entry.Path = entry.Path ?? a.GetPath(); entry.Url = entry.Url ?? a.Url; libsToDownload.Add(entry, entry.IsNative); } } SetStatusBarMaxValue(libsToDownload.Count + 1); int maxlen = libsToDownload.Keys.Count; //MessageBox.Show(maxlen.ToString()); int step = 0; foreach (DownloadEntry entry in libsToDownload.Keys) { StatusBarValue++; if (!File.Exists(_configuration.McLibs + @"\" + entry.Path) || _restoreVersion) { if (!_configuration.Arguments.OfflineMode) { // UpdateStatusBarAndLog($"Downloading {entry.Path.Replace('/', '\\')}..."); string directory = Path.GetDirectoryName(_configuration.McLibs + @"\" + entry.Path); step++; int stepf = Convert.ToInt32(Math.Truncate(step * (20F / (float)maxlen))); jsinit.InstallBarProgress("Загрузка библиотеки " + entry.Url, 20 + stepf); // AppendDebug("Url: " + (entry.Url ?? @"https://libraries.minecraft.net/" + entry.Path)); // AppendDebug("DownloadDir: " + directory); // AppendDebug("LibPath: " + entry.Path.Replace('/', '\\')); if (!File.Exists(directory)) { Directory.CreateDirectory(directory); } try { new WebClient().DownloadFile(entry.Url ?? @"https://libraries.minecraft.net/" + entry.Path, _configuration.McLibs + @"\" + entry.Path); } catch (WebException ex) { // AppendException("Downloading failed: " + ex.Message); File.Delete(_configuration.McLibs + @"\" + entry.Path); continue; } catch (Exception ex) { // AppendException("Downloading failed: " + ex.Message); continue; } } else { // AppendException($"Unable to download {entry.Path}: offline-mode enabled."); } } if (entry.IsNative) { // UpdateStatusBarAndLog($"Unpacking {entry.Path.Replace('/', '\\')}..."); using (ZipFile zip = ZipFile.Read(_configuration.McLibs + @"\" + entry.Path)) { foreach (ZipEntry zipEntry in zip.Where(zipEntry => zipEntry.FileName.EndsWith(".dll"))) { //AppendDebug($"Unzipping {zipEntry.FileName}"); try { zipEntry.Extract(_configuration.McDirectory + @"\natives\", ExtractExistingFileAction.OverwriteSilently); } catch (Exception ex) { //AppendException(ex.Message); } } } } else { libraries.Append(_configuration.McLibs + @"\" + entry.Path.Replace('/', '\\') + ";"); } //UpdateStatusBarText(_configuration.Localization.CheckingLibraries); } libraries.Append(string.Format(@"{0}\{1}\{1}.jar", _configuration.McVersions, selectedVersionManifest.GetBaseJar())); jsinit.InstallBarProgress("Проверка библиотек завершена", 40); return(libraries.ToString()); }