---
title: ms-445c2299-fd29-4873-ba5f-051027ce7c1d
canonical_url: "https://www.modelscope.cn/models/bm2410/ms-445c2299-fd29-4873-ba5f-051027ce7c1d"
md_url: "https://www.modelscope.cn/models/bm2410/ms-445c2299-fd29-4873-ba5f-051027ce7c1d.md"
repository: bm2410/ms-445c2299-fd29-4873-ba5f-051027ce7c1d
last_updated: 2026-10-27
pipeline_tag: text-generation
tasks:
  - text-generation
library_name:
  - pytorch
frameworks:
  - pytorch
downloads: 0
stars: 0
---

# ms-445c2299-fd29-4873-ba5f-051027ce7c1d

> ms-445c2299-fd29-4873-ba5f-051027ce7c1d - bm2410 在 ModelScope 开源的模型。汐语启动器 · TideWhisper Launcher

- **Repository**: bm2410/ms-445c2299-fd29-4873-ba5f-051027ce7c1d
- **Tasks**: text-generation
- **Downloads**: 0
- **Stars**: 0
- **Last updated**: 2026-10-27

Source: https://www.modelscope.cn/models/bm2410/ms-445c2299-fd29-4873-ba5f-051027ce7c1d

---

# 汐语启动器 · TideWhisper Launcher

一个从零实现的 Minecraft 启动器，同时支持 **Java 版与基岩版**，Electron + React + TypeScript。
界面参考 PCL2 的信息架构与视觉风格，核心逻辑完全依据 Mojang 公开规范独立实现。

## 功能

- **版本管理**：全版本支持（1.7.10 ~ 最新正式版），版本隔离，重命名/删除/详情查看
- **下载安装**：原版 + Fabric / Forge / NeoForge / Quilt 加载器一键安装，多镜像自动测速与失败回退
- **Java 管理**：自动扫描系统 Java（含微软/Adoptium/Oracle 各家），按版本要求匹配，缺失时从 Mojang 官方 runtime 自动下载（8 / 17 / 21 / 25，单版本约 400 个文件）
- **账号**：离线登录（UUID 与 Java `OfflinePlayer` 算法一致）、微软正版（Device Code Flow）、外置登录（authlib-injector）
- **资源管理**：模组 / 资源包 / 光影 / 存档，读取 jar 内元数据（fabric.mod.json、mods.toml、mcmod.info）
- **在线市场**：**Modrinth + CurseForge** 双平台搜索与一键安装，自动匹配当前实例的游戏版本与加载器；首页内置 12 个热门模组快捷入口
- **基岩版**：检测本机 UWP 安装并启动、存档与资源包统计、BDS 专用服务端下载与运行
- **运行反馈**：实时日志、崩溃报告捕获、退出码诊断（Java 版本不符 / 内存不足 / 模组冲突等）
- **多镜像**：官方 / BMCLAPI 主域名 / BMCLAPI 备用域名三选一，自动测速 + 逐任务失败回退
- **并发下载**：默认 32 路并行，设置里可调到 128 路

## 关于基岩版的能力边界

这不是免责声明，是技术事实，代码里也按这个边界实现：

| 能做 | 说明 |
|---|---|
| 检测本机安装 | 读 UWP 包清单，识别正式版 / 预览版 / 教育版，取准确版本号 |
| 启动游戏 | UWP 应用不能直接 CreateProcess，走 `explorer.exe shell:appsFolder\<AUMID>` 由系统激活 |
| 存档与包统计 | 定位 `com.mojang`，统计世界 / 资源包 / 行为包数量（同时支持新版统一路径与 UWP 沙盒路径） |
| BDS 服务端 | 官方公开提供，无需授权。下载、解压、启动、控制台命令、优雅停止全流程 |

| 做不到 | 原因 |
|---|---|
| 下载安装客户端本体 | 基岩版是 UWP/MSIX 打包 + 微软商店数字签名与授权校验，官方从未提供独立安装包。第三方「下载基岩版」本质是分发盗版，本启动器只提供商店跳转 |
| 离线登录 | 基岩版强制微软账号 + Xbox Live 授权，不存在离线模式 |

## 镜像与下载加速

### 多源与自动回退

每个下载 URL 都会生成候选链：**国内主域名 → 国内备用域名 → 官方**。
主源连续失败后自动换下一个，不会因为某个镜像抽风就卡住整个安装。

覆盖的映射（全部实测过对应端点存在）：

| 官方域名 | BMCLAPI 路径 | 说明 |
|---|---|---|
| `launchermeta.mojang.com` | 同名路径 | 版本清单 |
| `libraries.minecraft.net` | `/maven/...` | 依赖库 |
| `resources.download.minecraft.net` | `/assets/...` | 游戏资源 |
| `meta.fabricmc.net` | `/fabric-meta/...` | Fabric 加载器 |
| `meta.quiltmc.org` | `/quilt-meta/...` | Quilt 加载器 |
| `maven.minecraftforge.net` | `/maven/...` | Forge maven |
| `maven.neoforged.net/releases/...` | `/maven/...`（剥掉 `/releases`） | NeoForge maven |

### 选源依据：测吞吐，不测延迟

早期版本按「manifest 握手延迟」选源，结果把用户送去了一个握手快、下载慢的源。实测：

| 源 | manifest 延迟 | 300 个资源文件并发（24.6MB） |
|---|---|---|
| 官方 | 420ms | **8.17 秒 / 3089 KB/s** |
| BMCLAPI 主域 | 517ms | 124.89 秒 / 202 KB/s |
| BMCLAPI 备用 | 934ms | — |

延迟看着差不多，实际下载差 **15 倍**。所以现在测速改成：

1. 并发拉取 8 个真实资源对象（约 1MB），测**聚合吞吐**
2. 按吞吐排序选源，延迟只作兜底
3. `auto` 的优先级会传给 `mirrorCandidates`，官方优先时仍把镜像挂在候选链后面兜底

修复后同样场景 **125 秒 → 16.5 秒**。

### 本机实测（2026-10-27，上海移动宽带）

| 资源 | 官方 | BMCLAPI |
|---|---|---|
| Fabric 加载器列表 | 1.40s | **0.18s** |
| Quilt 加载器列表 | 3.85s | **0.21s** |
| NeoForge maven | **15s 超时** | **1.67s** |
| Forge maven | **15s 超时** | 1.65s |
| 版本清单 | 1.31s | 1.82s |

加载器元数据必须走国内镜像，否则国内用户连 NeoForge 都装不上（官方 maven 直接超时）。

### 并发下载

默认 **32 路**并行，设置里可调到 **128 路**。实测（BMCLAPI，300 个小文件 / 24.6MB）：

| 并发 | 耗时 | 平均速度 |
|---|---|---|
| 32 路 | 125 秒 | 202 KB/s |
| 64 路 | 78 秒 | 322 KB/s |
| 128 路 | 68 秒 | 368 KB/s |

64 路以上收益明显递减（128 只比 64 快约 14%）；弱网或镜像限流时，高并发反而互相抢带宽，建议调回 32。

## 模组来源

| 平台 | 接口 | 需要 API key |
|---|---|---|
| Modrinth | `api.modrinth.com/v2` | 不需要 |
| CurseForge | `mod.mcimirror.top/curseforge/v1`（MCIM 国内镜像） | **不需要**（官方接口要，镜像不要） |

CurseForge 官方 API 需要申请 key，因此走 MCIM 镜像；实测文件下载经镜像 CDN 比直连 forgecdn
快约 50%（732 KB/s vs 467 KB/s）。

## 加载器与 Java 运行时

### 加载器

| 加载器 | 实现方式 | 元数据来源 |
|---|---|---|
| Fabric | 官方 profile JSON → 写版本 JSON → 补库 | `meta.fabricmc.net`（镜像 `/fabric-meta`） |
| Quilt | 同上 | `meta.quiltmc.org`（镜像 `/quilt-meta`） |
| Forge | installer jar 解包 + processors 二次处理 | `maven.minecraftforge.net`（镜像 `/maven`） |
| NeoForge | 同 Forge | `maven.neoforged.net`（镜像 `/maven`，剥掉 `/releases`） |

Forge/NeoForge 不能只下一堆 jar 就完事——installer 里带 processors 配置，
要把混淆映射、打补丁、生成 client jar 这几步跑完，否则启动会缺类。这部分是自己实现的一套 launcher 参数解析器。

**实测**（2026-10-27/28）：
- `install:1.20.4:fabric` → 72 个依赖库 + 3788 个资源对象（626MB）→ 启动进主循环
- `check` 三个实例（Fabric 1.20.4 / Forge 1.21.1 / NeoForge 21.1）全部 `ok=true`，缺库 0

### Java 运行时

组件名必须和 Mojang 清单严格对应，写错会「复用」成别的版本（踩过：Java 25 被映射到 `java-runtime-delta`，结果悄悄用了已有的 Java 21）：

| 主版本 | 组件名 | 适用 MC 版本 |
|---|---|---|
| 8 | `jre-legacy` | 1.16 及更早 |
| 17 | `java-runtime-beta` | 1.17 ~ 1.20.4 |
| 21 | `java-runtime-delta` | 1.20.5 ~ 1.21.x |
| 25 | `java-runtime-epsilon` | 26.x 及更新 |

**实测**：`java:25` 下载 411 个文件 → `25.0.1 Microsoft OpenJDK` 就绪。
启动时按版本自动挑：1.20.4/Fabric 用本机 Adoptium 17，1.21.1/Forge/NeoForge 用运行时 21。

## 技术栈

| 层 | 技术 |
|---|---|
| 外壳 | Electron 45 |
| 界面 | React 19 + TypeScript + 原生 CSS |
| 构建 | electron-vite 6 / Vite 8 |
| 打包 | electron-builder 26（免安装 dir 模式） |
| 解压 | adm-zip（natives 与 jar 元数据） |

## 开发

```bash
npm install
npm run dev          # 开发模式（热更新）
npm run typecheck    # 类型检查
npm run build        # 构建到 out/
npm start            # 预览构建产物
npm run dist         # 打包免安装版到 release/
```

> Windows 下若遇到 Electron 报 `Cannot read properties of undefined (reading 'isPackaged')`，
> 说明环境里存在 `ELECTRON_RUN_AS_NODE=1`，清除后再运行。

### 命令行验证

内置 CLI 模式用于无界面验证全链路，走的是与 UI 完全相同的代码路径：

```bash
TIDE_CLI=check:1.21.1           # 解析版本并检查文件完整性
TIDE_CLI=install:1.21.1         # 真实下载安装
TIDE_CLI=launch:1.21.1          # 安装（如需）并实际启动游戏
TIDE_CLI=install:1.21.1:fabric  # 安装带加载器的版本（forge / neoforge / quilt 同理）
TIDE_CLI=search:sodium          # 搜索 Modrinth
TIDE_CLI=mod:<版本ID>:sodium    # 下载模组并装进该实例的 mods
TIDE_CLI=msa                    # 校验微软 client_id 能否申请设备码
TIDE_CLI=msa:login              # 完整微软登录（需在浏览器授权一次）
TIDE_CLI=r2:verify              # Cloudflare R2 凭据自检
```

## 微软正版登录的 client_id

微软登录走 Device Code Flow，需要一个 Azure 应用的 `client_id`。本项目**不硬编码一个"官方"值**，
而是把它做成可配置项：

- 默认填入社区公开值 `c36a9fb6-4f2a-41ff-90bd-ae7cc92031eb`（Prism Launcher 注册的 Azure 应用，已实测可申请设备码）
- 在「设置 → 微软正版登录」里可随时替换成你自己注册的应用
- 早期版本的 `00000000402b5328`（Minecraft 官方启动器）**已被微软下线**，实测返回
  `AADSTS700016`；程序读取到该值会自动迁移为社区公开值

社区公开值不受本项目控制，其所有者可能随时下线它。长期使用建议自己注册：
Azure 门户 → 应用注册 → 账户类型选「个人 Microsoft 账户」→「身份验证」启用「允许公共客户端流」。

注意：更换 `client_id` 后已登录的微软账号需重新登录（refresh token 与该 client_id 绑定）。

## 目录结构

```
src/
├── main/                 主进程
│   ├── core/             配置持久化、日志、路径、工具
│   ├── net/              HTTP、镜像源、并发下载池
│   ├── mc/               版本解析、安装、Java、启动、加载器、模组
│   ├── auth/             离线 / 微软 / 外置登录、账号存储
│   ├── ipc.ts            IPC 路由
│   └── cli.ts            命令行自动化
├── preload/              contextBridge 暴露的受限 API
├── renderer/             界面（React）
└── shared/               主进程与渲染进程共享的类型契约
```

游戏文件默认位于 `%APPDATA%/tide-launcher/minecraft`，启动器数据（配置/日志/账号）位于
`%APPDATA%/tide-launcher/launcher-data`，与官方 `.minecraft` 完全隔离。

## 实现要点

- **版本 JSON 归一化**：老版本的 `minecraftArguments` 字符串统一转成 `arguments.game` 数组，
  新旧两套参数格式共用一套启动逻辑
- **继承链合并**：`inheritsFrom` 递归解析，库按坐标去重、父在前子覆盖，Forge/Fabric 依赖正确叠加
- **规则判断**：严格按 Mojang 语义——无 `rules` 视为允许，有 `rules` 时初始拒绝、顺序匹配覆盖
- **natives 处理**：区分老式 `natives` + `classifiers` 解压，与新版本 natives 作为普通库进 classpath
- **参数占位符**：未定义占位符导致整条参数丢弃，避免游戏收到 `--quickPlaySingleplayer ${...}` 崩溃
- **编码兼容**：中文 Windows 下 Java 输出可能是 GBK，UTF-8 解码失败时自动回退 GBK
- **下载完整性**：所有文件 SHA1 校验，先写 `.part` 再 rename，避免半成品被当作有效文件

## 作者与赞助

作者：**汐语（xiyu）** · GitHub [@YZXBM](https://github.com/YZXBM)

- B 站主页：<https://space.bilibili.com/3546652499512059>
- 项目仓库：<https://github.com/YZXBM>

启动器完全免费、开源（MIT），没有广告、没有付费墙、不锁任何功能。
如果它帮你省了事，欢迎扫码请作者喝瓶水——金额随意，不给也照样用。

<p align="center">
  <img src="docs/sponsor.jpg" alt="微信赞赏码" width="260">
</p>

## 许可

MIT License，见 [LICENSE](LICENSE)。

本项目为独立实现，仅依据 Mojang 公开的版本清单接口与社区公开规范
（Minecraft Wiki、Fabric Meta、authlib-injector）开发，未包含任何第三方启动器的代码或资源。
架构思路上参考了社区开源启动器的公开实践，在此致谢。

Minecraft 是 Mojang Studios 的商标，本项目与其无隶属关系。
