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(); }
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(); }