Infinite MC Launcher Core(IMCLC):打破中文开源社区的宁静,跨平台MC启动脚本,为每一个自研启动器打好最坚强的启动模块。
仓库地址:Infinite MCLC
下载前须知
本项目目前为alpha版本,bug很多
本项目大部分由AI生成(本人JavaScript会的很少)但部分功能稳定性已得到测试
已实测功能如下
| 功能 | 测试内容 | 结果 |
|---|---|---|
| 原版启动 | 1.12.2 + Java 11 |
| 原版启动 | 1.21.1 + Java 21 |
| Forge 启动 | 1.21.1 Forge 52.1.8 + 5 Mod |
| 离线登录 | 用户名 + UUID 生成 |
| Java 自动检测 | 找到 6 个 Java,自动切换 |
| 完整性检查 | 检测出缺失文件 |
| 版本列表 | 获取 904 个版本 |
| Forge 合并 | inheritsFrom 父子版本合并 |
| 独立目录模式 | instanceDir 分离 mods/saves |
| Python SDK | 启动 1.12.2 成功 |
| C# 启动器 | 启动 1.12.2 成功 |
| CLI 命令 | java-detect/versions/verify/launch |
| 日志系统 | 分级/事件/文件日志 |
为什么做这个项目?
论坛里有人想做一个多功能启动器 @xiaocaicai 然后 @Colorful_Clay 回复说光是MC启动就很难了,我本来并没有想做这个项目但是我转头一看中文开源社区这块儿好像还是空白,PCL只开源了部分代码,HMCL核心库是Java写的跨语言困难,所以就诞生了本核心库,Infinite Minecraft Launcher Core。
名字的由来
MC的世界,永无止境。
如何开始?
唠了那么多,讲点正事,这次我用.NET如何调用做示例:(AI生成)
.NET 通过子进程调用 `node cli.js`,无需 JNI / COM。`CLI_PATH` = cli.js 完整路径
CLI 一次性:每次执行 `node cli.js <cmd>`,进程退出即结束 单次操作、脚本
stdio 长连接:启动 `node cli.js stdio` 常驻,按行收发 JSON 启动器、需事件回调
方法1:CLI一次性
通过 `Process.Start` 启动 node 进程,加 `--json` 让输出可解析
代码登录后可见
代码登录后可见
代码登录后可见
代码登录后可见
代码登录后可见
代码登录后可见
代码登录后可见
代码登录后可见
代码登录后可见
读到的 JSON 用 `JsonDocument.Parse(output)` 解析,取 `pid` 即可。其他命令(versions/java/check)同理,换第一个参数即可。
方式二:stdio 长连接
启动一个常驻进程,通过 stdin/stdout 按行收发 JSON-RPC
协议:
- 事件:代码登录后可见(另有 `log` / `game_stdout` / `game_stderr`)
关键思路:
- ProcessStartInfo 同时重定向 stdin/stdout/stderr
- 后台Task.Run跑一个循环 ReadLineAsync,按 id 匹配响应、按 event 触发回调
- 用 Dictionary<int, TaskCompletionSource<JsonElement>> 存待响应请求,收到响应时 SetResult
发送请求:
代码登录后可见
代码登录后可见
代码登录后可见
launch 参数: version / username / authType/ accessToken / password / memory / windowWidth/ windowHeight
CLI命令表
启动:代码登录后可见
Forge:版本名记得写上forge版本
独立目录:代码登录后可见 (mods/saves独立,libraries共享)
内存/Java:代码登录后可见 / 代码登录后可见
查版本/Java:代码登录后可见
查完整性:代码登录后可见
使用代码登录后可见输出JSON。更多语言支持和参数见github仓库API.md和README.md
结语
制作不易,花了我老多头啃了。求star,给1个star送5L币(在评论区发送:我已点star,我的github用户名:xxxxx)