Community编程与开发github.com

CGRLabs/horizon-content-mod

构建、验证和安装 Horizon 内容模组(.hmod)—— 为 Horizon 游戏(Minecraft Java Edition 26.3 的 Rust 重写版)创建数据驱动模组。

horizon-content-mod 是什么?

此技能用于创建、调试和安装 Horizon 游戏的数据驱动内容模组(.hmod)。Horizon 内容模组仅包含数据和资源,不包含任何可执行代码,以 .hmod 压缩包形式部署。它支持添加配方、方块、物品、战利品表、标签和语言文件,但必须遵循严格的命名空间规则(将覆盖内容放在模组自己的 data/<mod-id>/ 目录下,而非 data/minecraft/)。技能提供了完整的工作循环:使用 cargo horizon-mod new 搭建项目 → 添加内容 → 使用 cargo horizon-mod build 构建 → 使用 cargo horizon-mod check 验证 → 将 .hmod 复制到游戏安装目录下的 horizon-mods/ 文件夹并启用。该技能还整合了关键技巧和常见陷阱的参考文档(如 references/pitfalls.md),强调不要尝试移植 Java 模组 .jar 文件,而是移植其数据。支持 cargo 命令行工具和标准模组开发流程(CLI)。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/CGRLabs/horizon-ai-skills/tree/HEAD/skills/horizon-content-mod

Installed? Explore more 编程与开发 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

Horizon 内容模组 (.hmod)

Horizon 内容模组仅为数据和资源 — 不含代码。.hmod 是一个压缩包,包含 horizon-mod.toml 清单文件,以及可选的 assets/ 和 data/ 目录,在启动时叠加到游戏的基础资源之上。WebAssembly (mod.wasm) 已废弃且会被拒绝。如果用户需要可执行行为,请使用原生模组 — 参见 horizon-native-mod 技能。

工作循环

  1. 搭建项目文件夹(清单 + data//assets/),或运行 cargo horizon-mod new <path> --name "Name"。如果使用了搭建功能:在添加你自己的内容前,删除其生成的示例内容(包括 blockstates、items、models、block declarations、loot tables 以及 data/minecraft/ 下的所有内容)—— 它演示了 references/pitfalls.md 中描述的静默失败模式。只保留清单和你自己的文件。
  2. 添加内容到模组自己的命名空间下:data/<mod-id>/recipe/...,assets/<mod-id>/lang/...。切勿写入 data/minecraft/ — 将覆盖内容放在 data/<mod-id>/ 中。
  3. 构建:cargo horizon-mod build → 生成 target/horizon-mod/<id>.hmod。
  4. 检查:cargo horizon-mod check target/horizon-mod/<id>.hmod。
  5. 安装:将 .hmod 文件复制到游戏的 horizon-mods/ 目录。该目录位于 Horizon 安装文件夹内,与 horizon-client.exe 和 horizon-mods.txt 同级(例如 ...\horizon-windows-x64\horizon-mods\)—— 我们的安装从这里加载。用户数据目录(%APPDATA%\Roaming\horizon)是另一个位置,且没有 mod 文件夹。如果新安装缺少该目录,请自行创建。
  6. 启用:内容模组仅在启动时加载一次 — 完全退出游戏,重新启动,选项 → 模组 → 启用,再次完全退出,重新启动,加载一个世界。

第 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。

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

相关技能