コード例 #1
0
 public Launcher(IAuthenticator authenticator, MinecraftGame game, MinecraftAssetCollection asset,
                 string assetDir,
                 string libDir, string startupDir, string javaPath)
 {
     Authenticator = authenticator;
     Game          = game;
     Asset         = asset;
     AssetDir      = assetDir;
     LibDir        = libDir;
     StartupDir    = startupDir;
     JavaPath      = javaPath;
     Options       = new();
     ArgBuilder    = new();
 }
コード例 #2
0
        public async ValueTask InstallAsync(string gameVersion, string libDir, string assetDir, string profileDir)
        {
            Directory.CreateDirectory(profileDir);
            Directory.CreateDirectory(Path.Combine(assetDir, "indexes"));
            var meta = await MinecraftVersionMeta.GetMetaAsync();

            var index = meta.Versions.BinarySearch(new() { Id = gameVersion });

            if (index < 0)
            {
                throw new ArgumentException();
            }
            var required           = meta.Versions[index];
            var minecraftJsonValue = await Http.GetStringAsync(required.Url);

            var minecraft = await MinecraftGame.ParseAsync(JObject.Parse(minecraftJsonValue),
                                                           Array.Empty <string>(), profileDir);

            await File.WriteAllTextAsync(Path.Combine(profileDir, $"{gameVersion}.json"), minecraftJsonValue);

            var downloader      = new FileDownloader();
            var libDownloadList = await minecraft.EnsureLibraryAsync(libDir);

            foreach (var lib in libDownloadList)
            {
                downloader.Enqueue(lib.Url, Path.Combine(libDir, lib.Path), lib.Sha);
            }

            var assetJsonString = await Http.GetStringAsync(minecraft.AssetUrl);

            await File.WriteAllTextAsync(Path.Combine(assetDir, "indexes", $"{minecraft.AssetIndex}.json"),
                                         assetJsonString);

            var assetList = JsonConvert.DeserializeObject <MinecraftAssetCollection>(assetJsonString);

            await foreach (var asset in assetList.EnsureAssets(assetDir))
            {
                downloader.Enqueue(asset.DownloadUrl, asset.SaveLocation, asset.Hash);
            }

            await downloader.Execute();
        }