/// <summary> /// Заполняет аргументы запуска необходимыми либами /// </summary> private void FillLibrariesPaths() { // нашли папку с либами var dirs = Directory.GetDirectories(_minecraftPath, "libraries", SearchOption.AllDirectories); var dir = PathsHelper.GetTopPath(dirs); // проерили CheckFolderAndThrow(dir); // вытащили все jar var allJars = Directory.GetFiles(dir, "*.jar", SearchOption.AllDirectories).ToList(); var selected = new List <string>(); // ищем те, которые нужны foreach (var libName in LibraryNameRegexes) { var libs = allJars.Where(x => Regex.IsMatch(x, libName)).ToList(); if (libs.IsNullOrEmpty()) { continue; } var shortest = PathsHelper.GetShortestName(libs); selected.Add(shortest); allJars.Remove(shortest); } _libPaths = string.Join(";", selected); }
/// <summary> /// Ищет папку assets Майнкрафта /// </summary> private void FindMinecraftAssets() { var dirs = Directory.GetDirectories(_minecraftPath, "assets", SearchOption.AllDirectories); _minecraftAssetsPath = PathsHelper.GetTopPath(dirs); CheckFolderAndThrow(_minecraftAssetsPath); }
/// <summary> /// Находит папку нативных библиотек Форджа /// </summary> private void FindForgeNatives() { var dirs = Directory.GetDirectories(_minecraftPath, "natives", SearchOption.AllDirectories); _forgeNativesPath = PathsHelper.GetTopPath(dirs); CheckFolderAndThrow(_forgeNativesPath); }
/// <summary> /// Находит главный forge.jar и его версию /// </summary> private void FindForgeVersion() { var forges = Directory.GetFiles(_minecraftPath, "*forge*.jar", SearchOption.AllDirectories) // исключаем папку mods .Where(x => !PathsHelper.PlacedInFolder(x, "mods")) .ToList(); _forgeJarPath = PathsHelper.GetTopPath(forges); CheckPathsAndThrow(_forgeJarPath); _minecraftVersion = ParseJarVersion(_forgeJarPath); }
/// <summary> /// /// </summary> /// <param name="jarFile"></param> private Version ParseJarVersion(string jarFile) { try { // // Смотрю на файл json рядом с jar с таким же имененм // var path = Path.ChangeExtension(jarFile, "json"); return(ParseFromJson(File.ReadAllText(path))); } catch { try { // // Распаковываю jar файл и смотрю там version // var zip = ZipFile.OpenRead(jarFile); var allJsons = zip .Entries.Where(x => x.Name.Contains("json")) .ToList(); var top = PathsHelper.GetTopPath(allJsons.Select(x => x.FullName)); var version = allJsons.FirstOrDefault(x => string.Equals(x.FullName, top)); if (version != null) { using (var stream = version.Open()) { using (var reader = new StreamReader(stream)) { return(ParseFromJson(reader.ReadToEnd())); } } } } catch { // ignored } } return(new Version()); }