Horizon 内容模组 (.hmod)
Horizon 内容模组仅为数据和资源 — 不含代码。.hmod 是一个压缩包,包含 horizon-mod.toml 清单文件,以及可选的 assets/ 和 data/ 目录,在启动时叠加到游戏的基础资源之上。WebAssembly (mod.wasm) 已废弃且会被拒绝。如果用户需要可执行行为,请使用原生模组 — 参见 horizon-native-mod 技能。
工作循环
- 搭建项目文件夹(清单 +
data//assets/),或运行cargo horizon-mod new <path> --name "Name"。如果使用了搭建功能:在添加你自己的内容前,删除其生成的示例内容(包括 blockstates、items、models、block declarations、loot tables 以及data/minecraft/下的所有内容)—— 它演示了references/pitfalls.md中描述的静默失败模式。只保留清单和你自己的文件。 - 添加内容到模组自己的命名空间下:
data/<mod-id>/recipe/...,assets/<mod-id>/lang/...。切勿写入data/minecraft/— 将覆盖内容放在data/<mod-id>/中。 - 构建:
cargo horizon-mod build→ 生成target/horizon-mod/<id>.hmod。 - 检查:
cargo horizon-mod check target/horizon-mod/<id>.hmod。 - 安装:将
.hmod文件复制到游戏的horizon-mods/目录。该目录位于 Horizon 安装文件夹内,与horizon-client.exe和horizon-mods.txt同级(例如...\horizon-windows-x64\horizon-mods\)—— 我们的安装从这里加载。用户数据目录(%APPDATA%\Roaming\horizon)是另一个位置,且没有 mod 文件夹。如果新安装缺少该目录,请自行创建。 - 启用:内容模组仅在启动时加载一次 — 完全退出游戏,重新启动,选项 → 模组 → 启用,再次完全退出,重新启动,加载一个世界。
第 3 步之后,如果工具已安装,可以选择运行 horizon-inspect target/horizon-mod/<id>.hmod --json(退出码为 0 = 有效)以获取安全/清单报告。
从已验证可行的方法开始
使用原版物品 ID 的数据驱动配方是经过验证的基准 — 它们不需要纹理、模型或物品注册即可工作:
{
"type": "minecraft:smelting",
"cookingtime": 200,
"experience": 0.35,
"ingredient": "minecraft:rotten_flesh",
"result": { "id": "minecraft:leather" }
}
(minecraft:blasting 用于高炉;cookingtime 以刻为单位,200 约等于 10 秒。)
一次只添加一种内容,并在每次添加后重新测试。 Horizon 可能会静默拒绝它不理解的内容,因此一次性添加大量内容的模组无法调试。
来之不易的陷阱(已在 Horizon 0.2.97 上验证)
在开始设计超出原版物品配方的任何内容之前,请阅读 references/pitfalls.md — 其中的失败模式都是静默的,且会花费数小时。要点:
- 新的物品/方块声明可能不会在游戏中出现;游戏可能在没有日志错误的情况下拒绝它们。
- 此版本不支持物品
components。 - 清单使用
deny_unknown_fields;模组 ID 只能包含[a-z0-9_]。
参考资料 — 按需阅读
references/manifest-reference.md— 完整的horizon-mod.toml字段参考:API 行、capabilities、side、ID 规则。在编写任何清单之前阅读。references/data-and-assets.md— 已验证的数据格式(配方、语言文件)和资源文件布局。在添加超出单个熔炉配方的内容时阅读。references/pitfalls.md— 静默失败目录和调试策略。在测试前以及每当“模组不显示”时阅读。references/validation-and-publishing.md— 检查器/验证器使用、注册表规则(index.json、revoked.toml、MOD-POLICY)、确定性打包。在发布前阅读。
不可协商的规则
- 内容模组需要声明 capabilities;永远不要请求超出模组实际需要的权限 — 玩家在启用前会看到这些信息。
- Java 模组 .jar 不能在 Horizon 中运行;不要尝试移植
.jar文件,而是移植其数据。 - Horizon 不包含任何 Mojang 资源;切勿将 Minecraft 资源捆绑到模组中。所有内容自行派生,或引用原版 ID。