(请填写完整的网址,例如:https://www.example.com)
(贵站展示本站链接的页面地址,一般是友链页面,填写后将自动验证友链关系有效性)
(用于抓取文章)
(用于接收通知)

Infinite MineCraft Launcher Core

Infinite MC Launcher Core(IMCLC):打破中文开源社区的宁静,跨平台MC启动脚本,为每一个自研启动器打好最坚强的启动模块。

仓库地址:Infinite MCLC

下载前须知

本项目目前为beta版本,还有部分bug

本项目由AI辅助生成但部分功能稳定性已得到测试

已实测功能如下

| 功能 | 测试内容 | 结果 |

|---|---|---|

| 原版启动 | 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 |

| 日志系统 | 分级/事件/文件日志 |

为什么做这个项目?

LCS论坛里有人想做一个多功能启动器 @"xiaocaicai"#99 然后 @"Colorful_Clay"#1 回复说光是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 `,进程退出即结束 单次操作、脚本

stdio 长连接:启动 `node cli.js stdio` 常驻,按行收发 JSON 启动器、需事件回调

方法1:CLI一次性

通过 `Process.Start` 启动 node 进程,加 `--json` 让输出可解析

var psi = new ProcessStartInfo("node") {

    RedirectStandardOutput = true, UseShellExecute = false, CreateNoWindow = true };

psi.ArgumentList.Add(cliPath);

psi.ArgumentList.Add("launch"); psi.ArgumentList.Add("--version"); psi.ArgumentList.Add("1.21.1");

psi.ArgumentList.Add("--username"); psi.ArgumentList.Add("Player");

psi.ArgumentList.Add("--auth"); psi.ArgumentList.Add("offline");

psi.ArgumentList.Add("--game-dir"); psi.ArgumentList.Add(gameDir);

psi.ArgumentList.Add("--json");  // 输出 JSON 方便 JsonSerializer 解析

using var p = Process.Start(psi)!;var output = await p.StandardOutput.ReadToEndAsync();  // {"success":true,"pid":12345,...}await p.WaitForExitAsync();

读到的 JSON 用 `JsonDocument.Parse(output)` 解析,取 `pid` 即可。其他命令(versions/java/check)同理,换第一个参数即可。

方式二:stdio 长连接

启动一个常驻进程,通过 stdin/stdout 按行收发 JSON-RPC

协议:

  • 请求:{"id":1,"method":"launch","params":{"version":"1.21.1","username":"Player"}}

  • 响应:{"id":1,"result":{"pid":12345}}

  • 事件:{"event":"game_exit","data":{"code":0}}(另有 `log` / `game_stdout` / `game_stderr`)

  • 错误:{"id":1,"error":{"message":"...","code":"..."}}

  • 支持方法: versions/install/check/detectJava/launch/setGameDirectory

关键思路:

  1. ProcessStartInfo 同时重定向 stdin/stdout/stderr
  2. 后台Task.Run跑一个循环 ReadLineAsync,按 id 匹配响应、按 event 触发回调
  3. 用 Dictionary<int, TaskCompletionSource> 存待响应请求,收到响应时 SetResult

发送请求:

await p.StandardInput.WriteLineAsync(

    JsonSerializer.Serialize(new { id = 1, method = "launch", @params = new { version = "1.21.1", username = "Player" } })

);

launch 参数: version / username / authType/ accessToken / password / memory / windowWidth/ windowHeight

CLI命令表

启动:node cli.js launch --version 1.21.1 --username Player --auth offline --game-dir "…"

Forge:版本名记得写上forge版本

独立目录:--instance-dir "[path]" (mods/saves独立,libraries共享)

内存/Java:--memory 4G / --java-path "C:\...\java.exe"

查版本/Java:node cli.js versions / node cli.js java

查完整性:node cli.js check --version 1.21.1 --game-dir "…"

使用--json输出JSON。更多语言支持和参数见github仓库API.md和README.md

结语

制作不易,花了我老多头啃了。求star,给1个star送5L币(在评论区发送:我已点star,我的github用户名:xxxxx)

重重重重重磅更新!FastFluentFilesFolders「1.0.2」发布! 2026-08-20

评论区

© 2026 馋猫网