예제 #1
0
        /// <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);
        }
예제 #2
0
        /// <summary>
        /// Ищет папку assets Майнкрафта
        /// </summary>
        private void FindMinecraftAssets()
        {
            var dirs = Directory.GetDirectories(_minecraftPath, "assets", SearchOption.AllDirectories);

            _minecraftAssetsPath = PathsHelper.GetTopPath(dirs);

            CheckFolderAndThrow(_minecraftAssetsPath);
        }
예제 #3
0
        /// <summary>
        /// Находит папку нативных библиотек Форджа
        /// </summary>
        private void FindForgeNatives()
        {
            var dirs = Directory.GetDirectories(_minecraftPath, "natives", SearchOption.AllDirectories);

            _forgeNativesPath = PathsHelper.GetTopPath(dirs);

            CheckFolderAndThrow(_forgeNativesPath);
        }
예제 #4
0
        /// <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);
        }
예제 #5
0
        /// <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());
        }