为什么我又写了一个 Minecraft 启动器
2026-11-01
市面上的启动器不少,功能也都齐。我还是自己写了一个,原因很土:我想要的东西它不给。
具体就是两件事。一是同一个版本装多个加载器时,不想为了每个整合包再复制一份原版文件,硬盘撑不住;二是下载页里的东西应该让我一眼看出「这是什么分类、有多少人用、支持哪些版本」,而不是丢一堆英文名过来。
于是有了 X Craft Launcher。C# + WPF,跑在 .NET Framework 4.8 上,免安装单文件。
做的事情
- 单版本合并安装:一个实例装多个加载器,共用同一份原版文件
- 多账户:微软正版和离线账户并存,切换不用退出
- 资源下载:依赖解析、sha1 校验、按隔离规则落位
- 整合包:
.mrpack、CurseForge zip、客户端 zip 都能导 - Java 自动下载:按游戏版本匹配,Adoptium 和 Mojang 双源
- 崩溃分析:三十多条特征规则,读日志定位到具体模组
- 多开:内存按实例数分摊,
-Xmx跟着变
一个值得记的坑
有一阵启动必弹「Could not create the Java Virtual Machine」,只在高版本 Java 上出现。
排查了半天,根因是我在 javaMajor >= 17 的分支里加了个 JVM 参数:
-XX:G1NewSizePercent=20
这个参数在 JDK 17 以后算实验性的,不加 -XX:+UnlockExperimentalVMOptions 就会被直接拒绝,JVM 连启动都不启动,弹窗是它自己弹的。删掉参数就好了。
教训是:调 JVM 参数要一个分支一个分支验,别按旧版本的经验往外套。现在启动命令行会落盘到 logs\launch-*.log,以后再遇到这类问题直接看文件。
现在还做不到的
联机。PCL 那套基于 EasyTier 的 P2P 方案我没抄出来,暂时是占位页。
源码在 GitHub 上,欢迎提 issue。