猫史档案馆


【C#】【BMCLAPI】BMCLAPI的调用-补全Assets与Libraries

用户:宇轩yu_xuan宇轩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实现就到这里,感谢大家来看


回复

上一页1 页 / 共 1下一页
SYS传闻中的四月SYS传闻中的四月

沙发

点赞0


评论


宇轩yu_xuan宇轩yu_xuan

大家直接点击链接是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


评论


宇轩yu_xuan宇轩yu_xuan

类型不要错了!

是Get!Get!Get!

这是多线程下载!部分电脑可能会卡!

点赞0


评论


宇轩yu_xuan宇轩yu_xuan

下次发获取游戏.jar核心与json

点赞0


评论


宇轩yu_xuan宇轩yu_xuan

喵d

点赞0


评论


YLS月狼菌YLS月狼菌

爷关更

点赞0


评论


我不是饼干控我不是饼干控

算了叭,BMCLAPI和MCBBS的服务器最近都被网易服小鬼攻击了,现在这俩国内主要下载源统统关停不能下载包体

点赞1


评论


宇轩yu_xuan宇轩yu_xuan

马上发KMCCC动态链接库的调用与启动

 

点赞0


评论


宇轩yu_xuan宇轩yu_xuan

占楼,待更新

点赞0


评论


ゥゥゥゥ

得很有道理,可是我一点都听不懂。

点赞0


评论


宇轩yu_xuan宇轩yu_xuan

声明:本教程所有代码均为WPF代码,与Winform有所不同!

点赞0


评论


宇轩yu_xuan宇轩yu_xuan

占楼,待更新

点赞0


评论


YDSmnxYDSmnx

帮顶

点赞0


评论