用户:宇轩yu_xuan查看:3 回复:13 评论:3 创建时间:2020-08-10T14:11:20
Minecraft的运行需要Assets与Libraries
这两个分别是资源文件与运行库文件
一个程序想要下载这两个文件只需要调用Bangbang93开发的BMCLAPI
教程开始
BMCLAPI为Get形式,需要Get定义
首先要获取游戏的版本类型,https://bmclapi2.bangbang93.com/mc/game/version_manifest.json 需要获取后解析Json
BMCLAPI Mirrors实现
public override string Name { get; } = "BMCLAPI";
private const string Server = "https://bmclapi2.bangbang93.com/";
private readonly string[] _originServers = new []{"https://launchermeta.mojang.com/", "https://launcher.mojang.com/" };
随后URL定喵析URL
public Version()
{
Url = "https://bmclapi2.bangbang93.com/mc/game/version_manifest.json";
}
下载Json,并解析。注意,需要using System.Threading.Tasks And using System.web定义类型
public override async Task<string> DownloadJson(string url)
{
url = _originServers.Aggregate(url, (current, originServer) => current.Replace(originServer, Server));
return await Downloader.DownloadStringTaskAsync(url);
}
public override async Task DownloadJar(string url, string savePath)
{
url = _originServers.Aggregate(url, (current, originServer) => current.Replace(originServer, Server));
await Downloader.DownloadFileTaskAsync(url, savePath);
}
}
}
注意,Assets也是Get类型!
解析完URL之后定义类型,合变量
最好控件反馈,如果是Combobox控件需要定义类型Ver
开始获取Assets,https格式
需要Using的有
using System.Collections.Generic;
using System.IO;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Web.Script.Serialization;
获取Assets,定义类型Get,URL解析完成,获取地址,https进度下载
注意:Assets的Json不能通过反序列化得到
public class Asset : Interface.Asset
{
private const string Server = "https://bmclapi2.bangbang93.com/";
private readonly Regex _originServer = new Regex(@"https://launchermeta\.mojang\.com/");
public override async Task<AssetsIndex> GetAssetsIndex(VersionInfo versionInfo, string savePath)
{
string assetIndexString;
var assetIndex = versionInfo.AssetIndex;
if (assetIndex == null)
assetIndexString = await Downloader.DownloadStringTaskAsync($"{Server}indexes/{versionInfo.Assets}.json");
else
assetIndexString = await Downloader.DownloadStringTaskAsync(_originServer.Replace(versionInfo.AssetIndex.Url, Server));
savePath = Path.Combine(savePath, $"{assetIndex?.Id ?? versionInfo.Assets}.json");
FileHelper.WriteFile(savePath, assetIndexString);
// 不能直接通过反序列化得到
var jsSerializer = new JavaScriptSerializer();
var assetsObject = jsSerializer.Deserialize<Dictionary<string, Dictionary<string, AssetsIndex.Assets>>>(assetIndexString);
return new AssetsIndex
{
Objects = assetsObject["objects"]
};
}
取本地路径,下载,https进度
<main id="js-repo-pjax-container" data-pjax-container=""> public override async Task GetAssetsObject(AssetsIndex. Assets assets, string savePath) { var uri = $"{Server}objects/{assets.Path}". Replace( '\\', '/'); savePath = Path. Combine( savePath, assets. Path); FileHelper. CreateDirectoryForFile( savePath); await Downloader. DownloadFileTaskAsync( uri, savePath); } } } <summary role="button" data-hotkey="l" aria-label="Jump to line"></summary> </main> library可以直接解析Json获得下载地址,下载与Assets Https进度下载类似public class Library : Interface.Library
{
private const string Server = "https://bmcla喵maven/";
private readonly Regex _vanillaServer = new Regex(@"http[s]*://libraries\.minecraft\.net/");
private readonly Regex _forgeServeRegex = new Regex(@"http[s]*://files\.minecraftforge\.net/maven/");
public override async Task DownloadLibrary(LibraryInfo library, string savePath)
{
if (library.HasLibrary())
{
var url = library.GetLibrary()?.Url;
if (string.IsNullOrEmpty(url)) url = $"{Server}{library.GetLibraryPath().Replace('\\', '/')}";
url = _vanillaServer.Replace(url, Server);
url = _forgeServeRegex.Replace(url, Server);
Logger.Info(url);
await Downloader.DownloadFileTaskAsync(url, savePath);
}
if (library.IsNative)
{
var url = library.GetNative().Url;
if (string.IsNullOrEmpty(url)) url = $"{Server}{library.GetNativePath().Replace('\\', '/')}";
url = _vanillaServer.Replace(url, Server);
url = _forgeServeRegex.Replace(url, Server);
await Downloader.DownloadFileTaskAsync(url, savePath);
}
}
}
Mirrors为多线程下载,注意线程数量过高不会重试
Mirrors实现就到这里,感谢大家来看
大家直接点击链接是Json代码,要使用get定义来解析!!!
自己进去观察定义类型
{"latest": {"release": "1.16.1", "snapshot": "1.16.2-rc1"}, "versions": [{"id": "1.16.2-rc1", "type": "snapshot", "url": "https://launchermeta.mojang.com/v1/packages/b24f0066bdcadf5ef5f49386a56d628af3c31046/1.16.2-rc1.json", "time": "2020-08-07T14:38:51+00:00", "releaseTime": "2020-08-07T14:35:39+00:00"}, {"id": "1.16.2-pre3", "type": "snapshot", "url": "https://launchermeta.mojang.com/v1/packages/9354357608d1983e91390d8d3077bbf9ae18f15a/1.16.2-pre3.json", "time": "2020-08-07T13:06:13+00:00", "releaseTime": "2020-08-06T16:44:52+00:00"}, {"id": "1.16.2-pre2", "type": "snapshot", "url": "https://launchermeta.mojang.com/v1/packages/07ff87196b5a94e58beac6039cfaa7ea611喵e70/1.16.2-pre2.json", "time": "2020-08-07T13:06:13+00:00", "releaseTime": "2020-08-05T15:30:50+00:00"}, {"id": "1.16.2-pre1", "type": "snapshot", "url": "https://launchermeta.mojang.com/v1/packages/e70e1d9c000721ffe4dadf90a2129edb6e6aada1/1.16.2-pre1.json", "time": "2020-08-07T13:06:13+00:00", "releaseTime": "2020-07-29T13:19:05+00:00"}, {"id": "20w30a", "type": "snapshot", "url": "https://launchermeta.mojang.com/v1/packages/0abbcefdc31d喵807e8d24773f0795270c6976a8/20w30a.json", "time": "2020-08-07T13:06:13+00:00", "releaseTime": "2020-07-22T15:05:15+00:00"}, {"id": "20w29a", "type": "snapshot", "url": "https://launchermeta.mojang.com/v1/packages/37a0a887e099d57fb506a54a8455628喵df9bd09/20w29a.json", "time": "2020-08-07T13:06:13+00:00", "releaseTime": "2020-07-15T14:13:47+00:00"}, {"id": "20w28a", "type": "snapshot", "url": "https://launchermeta.mojang.com/v1/packages/c67e1b393cea81ce2fa38cc6d14b339ffac4b950/20w28a.json", "time": "2020-08-07T13:06:13+00:00", "releaseTime": "2020-07-08T15:10:40+00:00"}, {"id": "20w27a", "type": "snapshot", "url": "https://launchermeta.mojang.com/v1/packages/361fdf33a03b00634a49bfc24d947c8291baf817/20w27a.json", "time": "2020-08-07T13:06:13+00:00", "releaseTime": "2020-07-01T15:07:35+00:00"}, {"id": "1.16.1", "type": "release", "url": "https://launchermeta.mojang.com/v1/packages/732ac849db380dcbf4aa6d喵bb4b4c96d3ea6616/1.16.1.json", "time": "2020-08-07T13:06:13+00:00", "releaseTime": "2020-06-24T10:31:40+00:00"}, {"id": "1.16", "type": "release", "url": "https://launchermeta.mojang.com/v1/packages/9f471a15faed75f809411aba9e91cf9224e4131f/1.16.json", "time": "2020-08-07T13:06:13+00:00", "releaseTime": "2020-06-23T16:20:52+00:00"}, {"id": "1.16-rc1", "type": "snapshot", "url": "https://launchermeta.mojang.com/v1/packages/21669d19d57ef8aaa835a31b758da9494e05c6d9/1.16-rc1.json", "time": "2020-08-07T13:06:13+00:00", "releaseTime": "2020-06-18T12:49:28+00:00"}, {"id": "1.16-pre8", "type": "snapshot", "url": "https://launchermeta.mojang.com/v1/packages/9a3e93916f0e42230b56591bfcf19845c28866ed/1.16-pre8.json", "time": "2020-08-07T13:06:13+00:00", "releaseTime": "2020-06-17T14:45:23+00:00"}, {"id": "1.16-pre7", "type": "snapshot", "url": "https://launchermeta.mojang.com/v1/packages/de5aa38696a24bb979457c2f0427ad766e1901de/1.16-pre7.json", "time": "2020-08-07T13:06:13+00:00", "releaseTime": "2020-06-16T15:31:35+00:00"}, {"id": "1.16-pre6", "type": "snapshot", "url": "https://launchermeta.mojang.com/v1/packages/5c605b48523f9a41b6fe23c89cb7c2a9e03bb741/1.16-pre6.json", "time": "2020-08-07T13:06:13+00:00", "releaseTime": "2020-06-15T16:57:57+00:00"}, {"id": "1.16-pre5", "type": "snapshot", "url": "https://launchermeta.mojang.com/v1/packages/d7b69f39033acae2925ec4cdca710bfd142c8ef8/1.16-pre5.json", "time": "2020-08-07T13:06:13+00:00", "releaseTime": "2020-06-12T14:33:59+00:00"}, {"id": "1.16-pre4", "type": "snapshot", "url": "https://launchermeta.mojang.com/v1/packages/4c03687a24c9a49cfcac934dbeea51a5c98add51/1.16-pre4.json", "time": "2020-08-07T13:06:13+00:00", "releaseTime": "2020-06-11T15:45:55+00:00"}, {"id": "1.16-pre3", "type": "snapshot", "url": "https://launchermeta.mojang.com/v1/packages/0f420f459347e2c43e6565186e5d063b3feed380/1.16-pre3.json", "time": "2020-08-07T13:06:13+00:00", "releaseTime": "2020-06-10T14:57:43+00:00"}, {"id": "1.16-pre2", "type": "snapshot", "url": "https://launchermeta.mojang.com/v1/packages/f62e93f3ffba515f401e82809喵63a2c70280083/1.16-pre2.json", "time": "2020-08-07T13:06:13+00:00", "releaseTime": "2020-06-05T10:47:59+00:00"}, {"id": "1.16-pre1", "type": "snapshot", "url": "https://launchermeta.mojang.com/v1/packages/bc00704cb039b36a98b2085e7ab23411168e9c78/1.16-pre1.json", 点赞1
评论