HMCL(Hello Minecraft! Launcher)跨平台开源 Minecraft 启动器:功能架构、平台支持与源码构建全解析
【免费下载链接】HMCLA Minecraft Launcher which is multi-functional, cross-platform and popular项目地址: https://gitcode.com/gh_mirrors/hm/HMCL
HMCL(Hello Minecraft! Launcher)是一款开源、跨平台的 Minecraft 启动器,集模组管理、游戏自动安装、模组包建立与介面客制化于一体。本文以docs/README_zh_Hant.md为骨架,结合仓库源码(HMCLCore 下载模块、平台枚举、Metadata 元数据)与docs/PLATFORM_zh_Hant.md、docs/Contributing_zh_Hant.md两篇关联文档,系统讲解 HMCL 的核心功能、跨平台兼容矩阵、源码构建流程与运行时调试选项,帮助读者既能快速上手使用,也能深入理解其实现原理并参与贡献。
项目简介与核心功能
HMCL 的核心定位是"多功能、跨平台"的 Minecraft 启动器,其功能覆盖了从下载、安装到日常游玩的完整链路:
- 模组管理:对已安装的模组进行启停、版本管理与依赖处理,相关实现集中于
HMCLCore/src/main/java/org/jackhuang/hmcl/addon/mod/与resourcepack/等子模块。 - 游戏客制化:可针对单个游戏版本设置 Java 参数、分配内存、选择渲染器、调整游戏窗口模式等,配置项由
HMCL/src/main/java/org/jackhuang/hmcl/setting/GameSettings.java及 GameSettingsPresets.java 管理。 - 游戏自动安装:HMCL 支持一键安装 Forge、NeoForge、Cleanroom、Fabric、Legacy Fabric、Quilt、LiteLoader 与 OptiFine 等加载器,无需手动放置 JAR 或处理依赖。
- 模组包建立:可将当前游戏版本连同模组、配置打包为模组包,也支持导入 CurseForge、Modrinth、MultiMC、MCBBS 等格式的模组包(见
HMCLCore/src/main/java/org/jackhuang/hmcl/modpack/下的curse/、modrinth/、multimc/、mcbbs/等实现)。 - 介面客制化:支持主题、背景、字体与 UI 缩放的自定义,相关代码位于
HMCL/src/main/java/org/jackhuang/hmcl/theme/与ui/main/PersonalizationPage.java。
从源码结构看,"游戏自动安装"是 HMCL 最具代表性的能力:HMCLCore/src/main/java/org/jackhuang/hmcl/download/目录下为每种加载器都维护了独立的版本列表与安装任务,例如forge/ForgeInstallTask.java、neoforge/NeoForgeInstallTask.java、fabric/FabricInstallTask.java、quilt/QuiltInstallTask.java、liteloader/LiteLoaderInstallTask.java、optifine/OptiFineInstallTask.java、cleanroom/CleanroomInstallTask.java、legacyfabric/LegacyFabricInstallTask.java,它们统一继承自ComponentVersionList/ComponentRemoteVersion抽象体系,保证了各加载器安装流程的一致性与可扩展性。
跨平台支持能力
HMCL 的跨平台能力是其重要卖点。代码层面,平台抽象由HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/OperatingSystem.java中的枚举定义,覆盖WINDOWS、LINUX、MACOS、FREEBSD四种操作系统,并通过Architecture枚举识别 x86-64、x86、ARM64、ARM32、MIPS64el、RISC-V 64、LoongArch64 等 CPU 架构;Metadata.java中还针对不同平台返回推荐的 JDK 下载指引(见 Metadata.java),印证了其平台适配的精细化。
启动器兼容性
docs/PLATFORM_zh_Hant.md给出了官方维护的启动器兼容矩阵,全文如下:
| 架构 | Windows | Linux | macOS | FreeBSD |
|---|---|---|---|---|
| x86-64 | ✅️ 完整支援 (Windows 7 ~ Windows 11);✅️ 完整支援 (Windows Server 2008 R2 ~ 2025);🕰️ HMCL 3.6 (Windows Vista);🕰️ HMCL 3.6 (Windows Server 2003 ~ 2008) | ✅️ 完整支援 | ✅️ 完整支援 | ✅ 完整支援 |
| x86 | 🕰️ 有限支援 (Windows 7 ~ Windows 10);🕰️ HMCL 3.6 (Windows XP/Vista) | 🕰️ 有限支援 | / | / |
| ARM64 | ✅️ 完整支援 | ✅️ 完整支援 | ✅️ 完整支援 | / |
| ARM32 | / | 🕰️ 有限支援 | / | / |
| MIPS64el | / | 🕰️ 有限支援 | / | / |
| RISC-V 64 | / | ✅️ 完整支援 | / | / |
| LoongArch64 | / | ✅️ 完整支援 (新世界);🕰️ 有限支援 (旧世界) | / | / |
图例说明:
- ✅️ 完整支援:受到完整支援的平台,HMCL 会尽可能为此平台提供支援。
- 🕰️ 有限支援:通常是老旧的遗留平台,HMCL 可以运作,但部分功能可能无法使用,且可能为了降低维护成本而放弃部分功能。
- 🕰️ HMCL 3.6(有限支援):HMCL 主分支不再支援该平台,仅通过 HMCL 3.6 LTS 分支继续提供安全修补与错误修复,不再获得功能更新。
- /(不支援):尚未支援的平台,未来可能支援。
游戏兼容性
启动器能运行不代表能顺利启动游戏,游戏兼容矩阵如下:
| 架构 | Windows | Linux | macOS | FreeBSD |
|---|---|---|---|---|
| x86-64 | ✅️ | ✅️ | ✅️ | 👌 (Minecraft 1.13~26.2) |
| x86 | ✅️ (~1.20.4) | ✅️ (~1.20.4) | / | / |
| ARM64 | 👌 (Minecraft 1.8~1.18.2);✅ (Minecraft 1.19+) | 👌 (Minecraft 1.8~26.2) | 👌 (Minecraft 1.6~1.18.2);✅ (Minecraft 1.19+);✅ (使用 Rosetta 2) | ❔ |
| ARM32 | / | 👌 (Minecraft 1.8~1.20.1) | / | / |
| MIPS64el | / | 👌 (Minecraft 1.8~1.20.1) | / | / |
| RISC-V 64 | / | 👌 (Minecraft 1.13~26.2) | / | / |
| LoongArch64 (新世界) | / | 👌 (Minecraft 1.6~26.2) | / | / |
| LoongArch64 (旧世界) | / | 👌 (Minecraft 1.6~1.20.1) | / | / |
| PowerPC-64 (Little-Endian) | / | ❔ | / | / |
| S390x | / | ❔ | / | / |
图例说明:
- ✅:官方支援的平台,受 Mojang 官方支援,游戏内问题应直接向 Mojang 回报。
- 👌:由 HMCL 提供支援、经过测试可正常执行,但可能比全面支援的平台有更多问题;不保证支援 Minecraft 1.6 以下的版本。
- ❔:低级别支援平台,HMCL 可运行并有基本支援,但尚不能正常启动游戏;如需启动游戏,需通过其他方式获得 LWJGL 等本机库,并在(全域)游戏设定中指定本机库路径。
- / 不支援:目前无测试设备,若你能协助测试,可通过 Issue 提出支援请求。
陶瓦联机兼容性
HMCL 内置"陶瓦联机"(Terracotta)功能,其状态机与启动逻辑由HMCL/src/main/java/org/jackhuang/hmcl/terracotta/TerracottaManager.java实现,兼容矩阵如下:
| 架构 | Windows | Linux | macOS | FreeBSD |
|---|---|---|---|---|
| x86-64 | ✅️ (Windows 10 ~ Windows 11);✅️ (Windows Server 2016 ~ 2025) | ✅️ | ✅️ | ✅️ |
| x86 | / | / | / | / |
| ARM64 | ✅️ | ✅️ | ✅️ | / |
| ARM32 | / | / | / | / |
| MIPS64el | / | / | / | / |
| RISC-V 64 | / | ✅️ | / | / |
| LoongArch64 | ✅️ (新世界);❌ (旧世界) | / | / | / |
值得注意的是,陶瓦联机需要较为现代的平台(如 Windows 10+、RISC-V 64 与 LoongArch64 新世界),这与它依赖平台网络能力与进程管理的实现方式相符。
下载与获取方式
HMCL 提供多个下载渠道,可根据网络环境选择:
- HMCL 官方网站:获取正式发布版本与更新信息。
- GitHub Releases:托管各版本发布产物,包含源码包与可执行文件。
- CNB Releases:面向中国大陆用户的镜像发布渠道。
此外,HMCL 内置了更新检查机制,更新来源可通过 JVM 参数-Dhmcl.update_source.override=<url>覆盖(默认指向官方网站更新接口,见 Metadata.java),适合企业内部部署或离线分发场景。
源码结构概览
仓库采用 Gradle 多模块构建,settings.gradle.kts定义了以下模块:
- HMCL:启动器主模块,包含 JavaFX 用户界面(
ui/)、设置管理(setting/)、主题系统(theme/)、陶瓦联机(terracotta/)与启动入口(EntryPoint.java、Launcher.java)。 - HMCLCore:核心业务逻辑,包含下载(
download/)、账号认证(auth/)、游戏版本模型(game/)、模组包(modpack/)、任务框架(task/)等与界面无关的纯 Java 实现。 - HMCLBoot:启动引导模块,负责在运行主程序前完成 JavaFX 依赖补丁与基础环境检查。
- minecraft/libraries:HMCLTransformerDiscoveryService 与 HMCLMultiMCBootstrap,注入到游戏进程中的辅助库。
EntryPoint.java是程序的启动入口,其main方法依次完成:设置系统代理与 HTTP Agent → 创建 HMCL 数据目录 → 启动日志系统 → 检测 Wine 运行环境 → 处理 macOS 特殊适配 → 检查并修补 JavaFX 依赖 → 进入Launcher.main(args)。这一流程解释了为何 HMCL 能在一个不含 JavaFX 的 JRE 上自行下载依赖并运行。
从源码构建 HMCL
环境需求
构建 HMCL 需要JDK 17(或更高版本),并确保JAVA_HOME环境变量指向符合需求的 JDK。各平台查看JAVA_HOME指向 JDK 版本的方式:
- Windows(PowerShell):
PS > & "$env:JAVA_HOME/bin/java.exe" -version - Linux/FreeBSD:
> $JAVA_HOME/bin/java -version - macOS:
> /usr/libexec/java_home --exec java -version
对应地,Metadata.java中声明了运行期对 Java 的最低要求:MINIMUM_REQUIRED_JAVA_VERSION = 17、MINIMUM_SUPPORTED_JAVA_VERSION = 17,推荐版本为 21(见 Metadata.java),构建与运行版本要求保持一致。
获取源码
使用 Git 克隆最新源码:
git clone https://gitcode.com/gh_mirrors/hm/HMCL cd HMCL也可以从发布页手动下载特定版本的源码包。
构建命令
切换到 HMCL 项目根目录后执行:
./gradlew clean makeExecutables构建产物位于根目录下的HMCL/build/libs子目录中。makeExecutables任务负责生成可执行包(含 Windows/Linux 启动脚本等),由buildSrc中的 Gradle 插件(org.jackhuang.hmcl.gradle)提供支持。
运行时调试选项与调优
HMCL 提供了一系列内部调试选项(不保证稳定性,可能随时修改或删除,错误使用可能导致行为异常甚至崩溃),用于控制启动器行为。这些选项可通过环境变量或JVM 参数设置;若两者同时存在,JVM 参数会覆盖环境变量。完整清单如下:
| 环境变量 | JVM 参数 | 功能 | 默认值 | 额外说明 |
|---|---|---|---|---|
HMCL_JAVA_HOME | 设置用于开启 HMCL 的 Java | 仅对 exe/sh 生效 | ||
HMCL_JAVA_OPTS | 设置开启 HMCL 时的默认 JVM 参数 | 仅对 exe/sh 生效 | ||
HMCL_FORCE_GPU | 设置是否强制使用 GPU 加速绘制 | false | ||
HMCL_ANIMATION_FRAME_RATE | 设置 HMCL 的动画帧率 | 60 | ||
HMCL_LANGUAGE | 设置 HMCL 的默认语言 | 使用系统默认语言 | ||
HMCL_NATIVE_DECORATION | -Dhmcl.nativeDecoration=<true/false/auto> | 指定是否使用系统原生窗口装饰 | auto | |
HMCL_UI_SCALE | 设置 HMCL 的 UI 缩放比例 | 遵循系统当前的缩放比例 | 支持倍数 (1.5)、百分比 (150%) 或 DPI (144dpi) | |
-Dhmcl.dir=<path> | 设置 HMCL 的当前数据存放位置 | ./.hmcl | ||
-Dhmcl.home=<path> | 设置 HMCL 的用户数据存放位置 | Windows:%APPDATA%\.hmcl;Linux/BSD:$XDG_DATA_HOME/hmcl;macOS:~/Library/Application Support/hmcl | ||
-Dhmcl.self_integrity_check.disable=true | 检查更新时不检查程序完整性 | |||
-Dhmcl.bmclapi.override=<url> | 设置 BMCLAPI 的 API Root | https://bmclapi2.bangbang93.com | ||
-Dhmcl.discoapi.override=<url> | 设置 foojay Disco API 的 API Root | https://api.foojay.io/disco/v3.0 | ||
HMCL_FONT | -Dhmcl.font.override=<font family> | 设置 HMCL 默认字体 | 使用系统默认字体 | |
-Dhmcl.update_source.override=<url> | 设置 HMCL 更新来源 | https://hmcl.huangyuhui.net/api/update_link | ||
-Dhmcl.authlibinjector.location=<path> | 设置 authlib-injector JAR 档的位置 | 使用 HMCL 内置的 authlib-injector | ||
-Dhmcl.openjfx.repo=<maven repository url> | 添加用于下载 OpenJFX 的自定义 Maven 仓库 | |||
-Dhmcl.native.encoding=<encoding> | 设置原生编码 | 使用系统的本机编码 | ||
-Dhmcl.microsoft.auth.id=<App ID> | 设置 Microsoft OAuth App ID | 使用 HMCL 内置的 Microsoft OAuth App ID | ||
-Dhmcl.curseforge.apikey=<Api Key> | 设置 CurseForge API 密钥 | 使用 HMCL 内置的 CurseForge API 密钥 | ||
-Dhmcl.native.backend=<auto/jna/none> | 设置 HMCL 使用的本机后端 | auto | ||
-Dhmcl.hardware.fastfetch=<true/false> | 设置是否使用 fastfetch 检测硬件信息 | true |
这些选项与源码中的实现一一对应:例如-Dhmcl.dir/-Dhmcl.home在 Metadata.java 中解析,决定启动器的数据与用户目录;-Dhmcl.bmclapi.override在 DownloadProviders.java 中用于构造 BMCLAPI 下载提供者;-Dhmcl.update_source.override则对应Metadata.HMCL_UPDATE_URL。
下载源切换
HMCL 支持在"官方源"与"镜像源(BMCLAPI)"之间切换:DownloadProviders.java中的createDownloadProvider根据DownloadSource(DEFAULT/OFFICIAL/MIRROR)构造候选提供者列表,例如DEFAULT在境内网络环境优先使用 BMCLAPI,境外则优先使用 Mojang 官方源;同时init()会监听下载线程数与下载源设置的变化并即时生效。这一设计兼顾了不同地区用户的下载速度与稳定性。
参与贡献
HMCL 是一个由社群驱动的开源项目,欢迎任何人参与贡献代码或提出建议。参与方式包括:
- 通过建立Issue回报 Bug 或提出功能请求(包含 Bug 报告与功能建议模板)。
- 通过 Fork 仓库并提交Pull Request贡献代码。
在参与贡献前,请阅读 贡献指南,其中包含:
- 如何从源码构建并开启 HMCL
- 通过调试选项调整 HMCL 的行为
自 2015 年以来,HMCL 已有超过 120 位贡献者参与其中。仓库的buildSrc中还集成了检查风格(Checkstyle,见 checkstyle.xml)与许可证头校验(license-header.txt)等自动化质量保障,贡献代码时需遵循相应规范。
开源协议与附加条款
HMCL 在GPLv3开源协议下发布,同时附有以下附加条款(依据 GPLv3 第七条的授权):
- 修改版本须改名:当你分发该程序的修改版本时,必须以合理方式修改程序的名称或版本号,以示其与原始版本不同(依据 GPLv3, 7(c))。程序的名称及版本号可在 Metadata.java(
NAME、FULL_NAME、VERSION常量)处修改。 - 不得移除版权声明:你不得移除该程序所显示的版权声明(依据 GPLv3, 7(b))。
完整的协议文本位于仓库根目录的 LICENSE,其中的附加条款部分(对应 GPLv3 第 7 条第 (b)、(c) 款)是所有分发者都必须遵守的合规要求。
结语
HMCL 作为一个多功能、跨平台的 Minecraft 启动器,其价值不仅体现在开箱即用的体验上,更体现在清晰的多模块架构、完善的平台抽象与可配置的下载/调试体系中。通过阅读 繁体中文 README、平台支援状态 与 贡献指南,再结合本文对源码实现的分析,无论是普通玩家、希望二次开发的贡献者,还是研究启动器实现原理的开发者,都能快速定位到所需的信息与入口。
【免费下载链接】HMCLA Minecraft Launcher which is multi-functional, cross-platform and popular项目地址: https://gitcode.com/gh_mirrors/hm/HMCL
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考