BMCLAPI 启动器下载接口文档(整理版)
> 整理时间:2026-10-20(UTC+8)
> 根地址:`https://bmclapi2.bangbang93.com`(官方文档中个别示例也写作 `https://bmclapi.bangbang93.com`)
>
> 来源说明
> - 【官方文档】= https://bmclapidoc.bangbang93.com/ (apidoc 生成的页面,内容取自其 `assets/main.bundle.js`,生成时间 2026-05-14)
> - 【HMCL 源码】= https://github.com/HMCL-dev/HMCL/blob/main/HMCL/src/main/java/org/jackhuang/hmcl/download/HMCLDownloadProvider.java
> - 【实测】= 2026-10-20 16:15(UTC+8)用 curl 实测的结果(只取小文件 / 前 200 字节 / 看重定向)
>
> 官方文档没写到的内容,标为“未找到”。
---
0. 使用规范(【官方文档】“协议”一节)
- BMCLAPI 下的所有文件,除 BMCLAPI 本身的源码之外,归源站点所有。
- BMCLAPI 会尽量保证文件的完整性、有效性和实时性;使用 BMCLAPI 带来的一切纠纷与 BMCLAPI 无关。
- BMCLAPI 不开源(和 BMCL 不同)。
- 所有使用 BMCLAPI 的程序,必须在下载界面或其他可见位置标明来源。
- 禁止在 BMCLAPI 上二次封装其他协议。
- 意见反馈:https://www.bangbang93.com/category/6/bmclapi ;开发者通知 TG 频道:https://t.me/bmclapi
- 文档给的参考实现:BMCL 的 Mirror 实现 https://github.com/bangbang93/BMCL/tree/master/BMCLV2/Mirrors
限速 / User-Agent 要求:官方文档中未找到。
【实测】`/java/list` 用默认 curl UA 和浏览器 UA 访问都返回 `403 Forbidden`(`server: WAFPRO`),原因不明。其他接口用 curl 默认 UA 都能正常访问。
【实测】大文件(manifest、libraries、assets、java-runtime 等)会先 302 到 OpenBMCLAPI 节点(如 `https://xxx.sakura.sld.tw/download/<hash>?name=..&s=..&e=..`)或 `mirrors.cernet.edu.cn/bmclapi/...`,所以客户端必须跟随重定向。
---
1. 官方域名 → BMCLAPI 替换对照表
来源:【官方文档】“使用”一节(目标是 100% 兼容官方目录结构,只是根路径不同);另列【HMCL 源码】里的规则作交叉验证。
| 用途 | 官方地址 | BMCLAPI 地址(官方文档) | HMCL 源码中的规则 |
|---|---|---|---|
| 版本列表 | `http://launchermeta.mojang.com/mc/game/version_manifest.json` | `https://bmclapi2.bangbang93.com/mc/game/version_manifest.json` | 同(`bmclRoot + /mc/game/version_manifest.json`) |
| 版本列表 v2 | `http://launchermeta.mojang.com/mc/game/version_manifest_v2.json` | `https://bmclapi2.bangbang93.com/mc/game/version_manifest_v2.json` | — |
| 版本 JSON、AssetsIndex、jar | `https://launchermeta.mojang.com/`、`https://launcher.mojang.com/` | 替换为 `https://bmclapi2.bangbang93.com`(只换域名,路径不变) | 同 |
| 新域名 piston-meta | `https://piston-meta.mojang.com` | 官方文档未列出 | → `bmclRoot`(路径不变)【实测可用】 |
| 新域名 piston-data | `https://piston-data.mojang.com` | 官方文档未列出 | → `bmclRoot`(路径不变)【实测可用】 |
| Assets 对象 | `http://resources.download.minecraft.net` | `https://bmclapi2.bangbang93.com/assets` | 同(`bmclRoot + /assets/`) |
| Libraries | `https://libraries.minecraft.net/` | `https://bmclapi2.bangbang93.com/maven` | → `bmclRoot + /libraries`(两个前缀【实测】都可用) |
| Mojang Java 运行时清单 | `https://launchermeta.mojang.com/v1/products/java-runtime/2ec0cc96c44e5a76b9c8b7c39df7210883d12871/all.json` | `https://bmclapi2.bangbang93.com/v1/products/java-runtime/2ec0cc96c44e5a76b9c8b7c39df7210883d12871/all.json` | — |
| Forge | `https://files.minecraftforge.net/maven` | `https://bmclapi2.bangbang93.com/maven` | 另有 `http://files.minecraftforge.net/maven`、`https://maven.minecraftforge.net` → `bmclRoot/maven` |
| LiteLoader | `http://dl.liteloader.com/versions/versions.json` | `https://bmclapi.bangbang93.com/maven/com/mumfrey/liteloader/versions.json` | `http(s)://dl.liteloader.com/versions` → `bmclRoot/maven` |
| OptiFine | 无官方结构 | “请遵照 API” | — |
| authlib-injector | `https://authlib-injector.yushi.moe` | `https://bmclapi2.bangbang93.com/mirrors/authlib-injector` | 同 |
| Fabric meta | `https://meta.fabricmc.net` | `https://bmclapi2.bangbang93.com/fabric-meta` | 同 |
| Fabric maven | `https://maven.fabricmc.net` | `https://bmclapi2.bangbang93.com/maven` | 同 |
| NeoForge(旧 forge 坐标) | `https://maven.neoforged.net/releases/net/neoforged/forge` | `https://bmclapi2.bangbang93.com/maven/net/neoforged/forge` | HMCL:`https://maven.neoforged.net/releases/` → `bmclRoot/maven/` |
| NeoForge | `https://maven.neoforged.net/releases/net/neoforged/neoforge` | `https://bmclapi2.bangbang93.com/maven/net/neoforged/neoforge` | 同上 |
| Quilt maven | `https://maven.quiltmc.org/repository/release` | `https://bmclapi2.bangbang93.com/maven`(文档注明:上游 API 有 bug,暂时不可用) | — |
| Quilt meta | `https://meta.quiltmc.org` | `https://bmclapi2.bangbang93.com/quilt-meta`(同上,暂不可用) | — |
---
2. 下载一个原版版本的完整流程
2.1 版本列表
- `GET /mc/game/version_manifest.json`- `GET /mc/game/version_manifest_v2.json`
- 示例:https://bmclapi2.bangbang93.com/mc/game/version_manifest_v2.json
- 来源:【官方文档】替换表。【实测】302 到 OpenBMCLAPI 节点,可用。
2.2 版本 JSON
方式一(推荐,官方结构):把 manifest 里 `versions[].url` 的域名换成 BMCLAPI。方式二(BMCLAPI 专用接口):
`GET /version/:version/:category` —— 【官方文档】“下载mc本体文件”(Version 组)
| 参数 | 说明 |
|---|---|
| `version` | MC 版本号,如 `1.7.10` |
| `category` | `client` / `server` / `json` |
- 示例:
- https://bmclapi2.bangbang93.com/version/1.20.1/json → 【实测】302 到 `/v1/packages/a5cf661d.../1.20.1.json`
- https://bmclapi2.bangbang93.com/version/1.20.1/client → 【实测】302 到 `/v1/objects/0c3ec587.../client.jar`
- https://bmclapi2.bangbang93.com/version/1.20.1/server → 【实测】302 到 `/v1/objects/84194a2f.../server.jar`
2.3 client / server jar
- 版本 JSON 里 `downloads.client.url` / `downloads.server.url`,把 `https://piston-data.mojang.com`(或旧的 `https://launcher.mojang.com`)换成 `https://bmclapi2.bangbang93.com`。- 示例:`https://bmclapi2.bangbang93.com/v1/objects/0c3ec587af28e5a785c0b4a7b8a30f9a8f78f838/client.jar`
- 或直接用 2.2 的 `/version/:version/client|server`。
2.4 Libraries
- 版本 JSON 里 `libraries[].downloads.artifact.url` / `classifiers`,把 `https://libraries.minecraft.net/` 换成 `https://bmclapi2.bangbang93.com/maven/`(官方文档)或 `.../libraries/`(HMCL 用法)。- 示例:`https://bmclapi2.bangbang93.com/maven/com/mojang/brigadier/1.1.8/brigadier-1.1.8.pom` 【实测】302 可用;`/libraries/...` 同样可用。
2.5 Assets 索引
- 版本 JSON 的 `assetIndex.url`,域名换成 BMCLAPI。- 示例(1.20.1):`https://bmclapi2.bangbang93.com/v1/packages/50ce48459eb9e29836662862273d7b15d41c2c33/5.json` 【实测】可用。
2.6 Assets 对象
- `GET /assets/<hash前2位>/<hash>`(对应 `https://resources.download.minecraft.net/<hash前2位>/<hash>`)- 来源:【官方文档】替换表;【HMCL 源码】`bmclRoot + "/assets/" + assetObject.getLocation()`。
- 【实测】从 1.20.1 索引里取一个真实 hash 测试,HEAD 返回 200。
2.7 Java 运行时
1. Mojang Java 运行时清单(【官方文档】替换表):`https://bmclapi2.bangbang93.com/v1/products/java-runtime/2ec0cc96c44e5a76b9c8b7c39df7210883d12871/all.json` 【实测】302 可用。
清单里各文件的 URL 怎么替换(`piston-data` 等),官方文档没写,按 piston-data → 根地址的通用规则推断,未实测。
2. `GET /java/list` —— 【官方文档】“获取java列表”(Java 组,v2.3.0)
- 描述:可视作 https://java.com/zh_CN/download/manual.jsp 的序列化结果,缓存 Windows / macOS / Linux 的 JRE 安装包(不缓存 Solaris);只保留最新 JRE,同步最长延迟 24 小时;返回的文件名可直接下载,例如 `https://bmclapi.bangbang93.com/java/jre_x64.exe`。
- 返回:数组,元素字段 `title`(名称)、`file`(文件名)。
- 【实测】当前返回 403 Forbidden(WAF),可能已停用或被拦截。
---
3. Forge(【官方文档】Forge 组,源 `forge/forge.controller.ts`)
| 方法 | 路径 | 说明 / 参数 |
|---|---|---|
| GET | `/forge/minecraft` | Forge 支持的 MC 版本列表(字符串数组,可能含 `null`) |
| GET | `/forge/minecraft/:id` | 某 MC 版本的 Forge build 列表;`id` = MC 版本 |
| GET | `/forge/list/:offset/:limit` | 分页列出 build;`offset` 可选,跳过多少个;`limit` 必填,≤500 |
| GET | `/forge/last` | 最新 Forge(文档描述里写作 `/forge/latest`,实际可用的是 `/forge/last`) |
| GET | `/forge/promos` | 被标记的版本(如 `1.5.2-latest`、`recommended`) |
| GET | `/forge/download` | Query:`mcversion`、`version`、`branch`(可选)、`category`、`format`;302 到真实地址 |
| GET | `/forge/download/:build` | 按 build 号下载,302 |
下载地址拼接规则(文档原文):
PLAINTEXT
'/maven/net/minecraftforge/forge/' + mcversion + '-' + version + (branch ? `-${branch}` : '')
+ '/forge-' + mcversion + '-' + version + (branch ? `-${branch}` : '') + '-' + category + '.' + format示例:
- https://bmclapi2.bangbang93.com/forge/minecraft/1.20.1 【实测 200】
- https://bmclapi2.bangbang93.com/forge/download?mcversion=1.20.1&version=47.3.0&category=installer&format=jar 【实测】302 → `/maven/net/minecraftforge/forge/1.20.1-47.3.0/forge-1.20.1-47.3.0-installer.jar`
- https://bmclapi2.bangbang93.com/forge/download/1847 【实测】302 → `.../1.8.9-11.15.1.1847/forge-1.8.9-11.15.1.1847-installer.jar`(未指定 category 时默认给 installer,这是实测现象,文档没写)
---
4. NeoForge(【官方文档】Neoforge 组)
| 方法 | 路径 | 说明 | |||||
|---|---|---|---|---|---|---|---|
| GET | `/neoforge/list/:mcversion` | 按 MC 版本列 NeoForge;元素 `{rawVersion, version, mcversion}` | |||||
| GET | `/neoforge/version/:version` | 某 NeoForge 版本的信息 | |||||
| GET | `/neoforge/version/:version/download/:file` | 302 下载;`file` ∈ `install` \ | `installer.jar` \ | `universal` \ | `universal.jar` \ | `mdk.zip` \ | `userdev.jar` |
| GET | `/neoforge/meta/` | 镜像 `https://maven.neoforged.net/api/maven/details/releases/net/neoforged/{neoforge,forge}`,`` = `api/maven/details/releases/net/neoforged/{neoforge,forge}` |
示例:
- https://bmclapi2.bangbang93.com/neoforge/list/1.21.1 【实测 200】
- https://bmclapi2.bangbang93.com/neoforge/version/21.1.200/download/installer.jar 【实测】302 → `/maven/net/neoforged/neoforge/21.1.200/neoforge-21.1.200-installer.jar`
- https://bmclapi2.bangbang93.com/neoforge/meta/api/maven/details/releases/net/neoforged/neoforge 【实测 200】
---
5. Fabric
官方文档没有专门接口,只给了替换规则:`meta.fabricmc.net` → `/fabric-meta`,`maven.fabricmc.net` → `/maven`。路径沿用 Fabric 官方 meta API。
- `GET /fabric-meta/v2/versions/loader` 【实测 200】(HMCL 源码也用这个)
- `GET /fabric-meta/v2/versions/game` 【实测 200】(HMCL 源码也用这个)
- 其他 Fabric meta 路径(如 `/v2/versions/loader/:game/:loader/profile/json`):按替换规则应可用,未在文档中列出,未实测。
6. Quilt
官方文档:`meta.quiltmc.org` → `/quilt-meta`,`maven.quiltmc.org/repository/release` → `/maven`,并注明“由于上游 API 存在 bug,暂时不可用”。
【实测】`https://bmclapi2.bangbang93.com/quilt-meta/v3/versions/loader` 当前返回 200,但文档仍标为不可用,生产使用请谨慎。HMCL 源码里没有 Quilt 的 BMCLAPI 规则。
7. LiteLoader(【官方文档】Liteloader 组)
| 方法 | 路径 | 参数 |
|---|---|---|
| GET | `/liteloader/list` | Query `mcversion`(可选,不传返回全部) |
| GET | `/liteloader/download` | Query `version`(必填,对应列表里的 `version` 字段);302 |
| GET | `/maven/com/mumfrey/liteloader/versions.json` | 原 `versions.json` 镜像 |
示例:https://bmclapi2.bangbang93.com/liteloader/download?version=1.12.2-SNAPSHOT 【实测】302 → `/maven/com/mumfrey/liteloader/1.12.2-SNAPSHOT/liteloader-1.12.2-SNAPSHOT.jar`
8. OptiFine(【官方文档】Optifine 组)
| 方法 | 路径 | 说明 |
|---|---|---|
| GET | `/optifine/versionList` | 全部 OptiFine,元素 `{mcversion, type, patch}` |
| GET | `/optifine/:mcversion` | 某 MC 版本的 OptiFine 列表 |
| GET | `/optifine/:mcversion/:type/:patch` | 302 下载;`type` 基本固定为 `HD_U`;`patch` 如 `G5`、`C1`;不存在时返回 `{"msg":"no such optifine"}` |
示例:https://bmclapi2.bangbang93.com/optifine/1.12.2/HD_U/G5 【实测】302 → `/maven/com/optifine/1.12.2/OptiFine_1.12.2_HD_U_G5.jar`
9. 其他
- `GET /mirrors/authlib-injector` —— 同步自 https://github.com/yushijinhun/authlib-injector.yushi.moe ,路径与原站一致(如 `/mirrors/authlib-injector/artifacts.json`,【实测】可用)。
- `GET /openbmclapi/sponsor` —— 随机返回一个赞助商 `{_id, link, name}`,可以用来在启动器里展示来源 / 赞助。【实测 200】
10. 未找到的内容
- 限速策略、并发限制、User-Agent 要求:官方文档里都没有。
- Java 运行时清单中各文件的替换规则:官方文档没写。
- Fabric / Quilt 的完整接口列表:官方只给了域名替换规则。
- Cleanroom、Modrinth、CurseForge:不属于 BMCLAPI(HMCL 用的是其他镜像,如 `mod.mcimirror.top`)。