Horizon 內容模組 (.hmod)
Horizon 內容模組是僅包含資料與資產——不含程式碼。.hmod 是一個包含 horizon-mod.toml manifest 以及可選的 assets/ 和 data/ 目錄的 ZIP 壓縮檔,在啟動時會疊加在遊戲的基礎資源之上。WebAssembly (mod.wasm) 已廢棄且會被拒絕。如果使用者需要可執行的行為,那是原生模組——請改用 horizon-native-mod 技能。
工作循環
- 腳手架搭建 專案資料夾(manifest +
data//assets/),或執行cargo horizon-mod new <path> --name "名稱"。如果使用了腳手架:刪除其產生的範例內容(方塊狀態、物品、模型、方塊宣告、戰利品表和data/minecraft/下的任何內容)後再加入你的內容——這些範例展示了references/pitfalls.md中所描述的會靜默失敗的模式。只保留 manifest 和你自己的檔案。 - 新增內容 放在模組自己的命名空間下:
data/<模組ID>/recipe/...、assets/<模組ID>/lang/...。切勿寫入data/minecraft/——請將覆蓋內容放在data/<模組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)是不同位置,且沒有 mods 資料夾。如果全新安裝缺少該資料夾,請自行建立。 - 啟用:內容模組僅在啟動時載入一次——完全退出遊戲、重新啟動、選項 → 模組 → 啟用、再次完全退出、重新啟動、載入世界。
執行步驟 3 後,若已安裝該工具,可選用 horizon-inspect target/horizon-mod/<ID>.hmod --json(exit 0 = 有效)取得安全性/manifest 報告。
從已驗證可行的部分開始
使用原版物品 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。 - Manifest 使用
deny_unknown_fields;模組 ID 只能使用[a-z0-9_]。
參考文件——按需閱讀
references/manifest-reference.md——完整的horizon-mod.toml欄位參考:API 行數、能力清單、side、ID 規則。在撰寫任何 manifest 前閱讀。references/data-and-assets.md——已驗證的資料格式(配方、語言)和資產佈局。在新增超過一個熔煉配方以外的內容時閱讀。references/pitfalls.md——靜默失敗目錄與除錯策略。在測試前以及「模組不出現」時閱讀。references/validation-and-publishing.md——檢查器/驗證器用法、註冊規則(index.json、revoked.toml、MOD-POLICY)、確定性打包。在發布前閱讀。
不可協商的規則
- 內容模組需宣告能力清單;不要要求超過模組所需的能力——玩家在啟用前會看到這些資訊。
- Java 模組的 jar 檔無法在 Horizon 中執行;不要嘗試移植
.jar檔案,而是要移植其資料。 - Horizon 不包含 Mojang 資產;切勿將 Minecraft 資產捆綁到模組中。全部自行衍生或引用原版 ID。