自訂模型
EliteMobs 透過 Model Engine 與 FreeMineCraftModels 支援自訂模型。
前言
從 EliteMobs 的角度來看,自訂模型系統非常簡單,因為管理員唯一要做的就是在 NPC 或自訂 Boss 設定檔中加入一行,告訴它要使用哪個自訂模型。然而,要讓這個系統完全運作,必須在 Model Engine 與 Minecraft 上採取正確的步驟,而這些就沒那麼容易上手了。
本指南會詳細說明與 Model Engine 及 Minecraft 之間的銜接部分。它不會告訴你如何使用 Blockbench 來建立自訂 Boss,也不會詳細說明 Model Engine 如何運作。關於那些,別處已經有大量的指南,如果你想進一步了解那些系統,直接查看它們的文件會更有幫助。
FreeMineCraft Models
如果你想學習如何使用 FMM 來讓你的模型運作,那麼你可以查看這個 Wiki 頁面以了解更多。
目前 FreeMinecraftModels 優先使用作者設定的 tag_ 骨骼,例如 tag_head,沒有錨點時則把名牌放在模型碰撞箱上方。錨點讓作者選擇位置,但不再是顯示名稱的必要條件。FMM 負責整個名牌,包括 EliteMobs NPC 的名稱與角色行。較舊的 FMM 版本可能仍需要錨點。
基岩版(Geyser)支援
基岩版玩家(透過 Geyser/Floodgate 連線)是否能看到自訂模型,完全取決於你的模型外掛(ModelEngine 或 FreeMinecraftModels)與你的資源包設定,而非取決於 EliteMobs。EliteMobs 確實會偵測基岩版用戶端,但它將該資訊用於選單算繪與名牌定位之類的用途 —— 它不會產生或提供另一個基岩版相容的模型。關於基岩版/Geyser 模型支援,請參閱你的模型外掛文件。
LibsDisguises 整合
EliteMobs 也支援 LibsDisguises 作為自訂模型的替代方案。已設定且可用的模型優先於偽裝;沒有選取可用模型時,可以使用設定的偽裝。此整合會同步名稱的可見性。
若要使用 LibsDisguises,請設定 Boss/NPC 的偽裝,不指定 customModel 欄位。
物品模型與魔法武器(FMM)
使用 fmmItemModel 設定 FMM 物品外觀;作者定義的魔法武器另設 weaponType: WANDS 或 weaponType: STAVES。EliteMobs 保留名稱、說明文字、附魔與等級。FMM 提供模型,並為魔法武器提供攻擊定義。
舊的 scriptedItem 橋接仍用於作者定義物品的身分與顯示,但不再執行裝備物品的 Lua 腳本。FMM 會拒絕包含非空 scripts 清單的物品定義。不要將它與作者定義的魔法武器組合使用。
# Example EliteMobs custom item config
material: IRON_SWORD
name: "&cFlame Blade"
enchantments:
- "FIRE_ASPECT,2"
scalability: scalable
fmmItemModel: flame_blade
參照的 FMM 物品或模型必須存在。缺少外觀模型時,可能保留原版材質並輸出警告;若明確設定的 weaponType 與可用的作者定義武器不符,則會拒絕建立物品。請參閱 FMM 魔法武器與自訂物品設定。
最低需求
需要 EliteMobs、相容的 FreeMinecraftModels 版本或 ModelEngine 整合*、Blockbench** 與 Minecraft 資源包。ModelEngine 整合針對 R3 API:只有在 ModelEngine 已啟用且其版本包含 R3 時,EliteMobs 才會選用它。更新的主要版本不代表自動相容。
* 此外掛可能還有其他相依套件。請查看它們那邊的文件。
** 建立與編輯自訂模型時所需。如果你只是想安裝內容而不加以修改,則不需要。
如果同時安裝了 ModelEngine 與 FreeMinecraftModels,EliteMobs 預設會使用 FreeMinecraftModels。同一時間只會有一個自訂模型外掛處於啟用狀態。
手動設定自訂模型
注意:本指南假設你已經有一個有效的自訂模型。這些模型以 Blockbench 檔案格式(.bbmodel)提供。
EliteMobs 能夠為 NPC 與自訂 Boss 使用自訂模型。兩者的操作流程相同,如下所示:
步驟 1. 設定 EliteMobs 設定
前往你想修改的自訂 Boss 或 NPC 的設定檔,並加入以下這一行:
customModel: modelname
將 modelname 替換成你的模型名稱。該名稱是你所使用的自訂模型檔案的名稱。舉例來說,測試 Boss 的自訂模型檔案是 showcase_boss.bbmodel。因此,設定選項應為
customModel: showcase_boss
EliteMobs 的部分就這樣!現在就會變得稍微棘手一點了。
步驟 2. 產生 Model Engine 資料
以下路徑來自已封存的 ModelEngine 匯入指南。請使用適合已安裝 ModelEngine 版本的說明。
- 將你的自訂模型 Blockbench 檔案(
.bbmodel)放入目錄(yourServer)/plugins/ModelEngine/blueprints。 - 執行適合目前 ModelEngine 版本的模型重新載入指令;封存指南使用
/meg reload models。確認模型出現在已載入的登錄表中,並檢查主控台錯誤。
步驟 3. 散布資源包
如果你想讓你的伺服器管理下載,這可能是最棘手的部分。在研究如何自動散布資源包之前,請先檢查當你的用戶端裝有資源包時系統是否能運作!
- 前往目錄
(yourServer)/plugins/ModelEngine/resource pack,使用該資料來建立一個資源包,或將其中的assets資料夾加入到你的資源包的assets中 - 將你的資源包散布給你的玩家。只有裝有資源包的玩家才能看到自訂模型,對其他所有人而言它看起來會非常怪異且破碎。如果你打算大量使用這些模型,你可能會想強制使用資源包。
- (選用)若要讓玩家在登入時下載資源包,你需要將檔案託管在某個網路位置,並更改 server.properties 的
resource-pack=欄位以指向該位址。* - 自動下載時,將最終 ZIP 的 SHA-1 填入
resource-pack-sha1=。可在本機用 PowerShell 的(Get-FileHash -LiteralPath "pack.zip" -Algorithm SHA1).Hash.ToLowerInvariant()或 Linux 的sha1sum pack.zip計算。只複製 40 字元的雜湊值,並在 ZIP 每次變更後更新。 - (選用)若要強制玩家使用資源包,請在 server.properties 中使用
require-resource-pack=true選項。*
- (選用)若要讓玩家在登入時下載資源包,你需要將檔案託管在某個網路位置,並更改 server.properties 的
如果你修改了 server.properties,你需要重新啟動!
* 注意:如果這些說明對你沒有幫助,網路上有許多指南可以協助你讓這部分運作。
合併資源包
可以手動合併資源包,或使用 ResourcePackManager 管理 Nightbreak 資源包流程。merge.elmakers 等外部工具可合併 ZIP,但仍須解決模型 ID 衝突,並在目標用戶端驗證合併後的資源包。
步驟 4. 驗證模型
模型登錄表載入完成、用戶端套用對應資源包後,在實際 Boss 或 NPC 上驗證模型。以下指令要求由玩家執行,並具有對應權限:
- 自訂 Boss:
/em spawn boss filename.yml—elitemobs.place.admin,在視線指向的位置生成。 - NPC:
/em place npc filename.yml—elitemobs.place.npc,在腳下儲存永久放置位置。
/em remove 切換移除模式。攻擊目標將其移除,再次執行指令以退出此模式。如此移除已放置的 NPC 也會刪除儲存的放置紀錄。
為 EliteMobs 建立與調整自訂模型
請使用所選提供者支援且已成功載入的模型。提供者的相容性及支援的模型功能仍有限制。
然而,在動畫方面,需要為動畫使用特定的名稱,以確保 Boss 能夠使用這些動畫。
這些動畫名稱就是在 Blockbench 的動畫分頁中所設定的名稱。你可以隨時重新命名它們,這表示你可以改造任何既有的模型來與 EliteMobs 搭配運作。
動畫
EliteMobs 的自動鉤子使用以下動畫名稱。
idle
idle 是慣用的待機動畫名稱。EliteMobs 將 ModelEngine 模型啟動為其預設待機狀態,後續待機與移動動畫由模型提供者選擇。
walk
walk 是慣用的移動動畫名稱。EliteMobs 不會在附加模型時明確啟動 walk 動畫;移動動畫由 ModelEngine/FMM 選擇。
attack
攻擊動畫有三種類型:
attack
attack 是 Boss 攻擊時所使用的正確通用動畫名稱。
attack_melee
attack_melee 在自訂 Boss 作為 Bukkit 實體傷害事件的直接傷害者時取代 attack。動畫在事件處理期間請求播放,不是會延遲命中的前搖。已取消事件會被忽略,但後續監聽器仍可能取消傷害。請使用較短動畫,不要依賴它排定傷害發生時間。
attack_ranged
attack_ranged 在投射物生成事件將自訂 Boss 識別為生物射手時取代 attack。它回應投射物生成,不會讓發射等到動畫結束。沒有這種射手關聯的投射物不會觸發自動鉤子。
動畫後備系統
EliteMobs 對攻擊動畫使用後備系統:
- 如果未定義
attack_melee,則退回使用attack - 如果未定義
attack_ranged,則退回使用attack - FMM 在播放前檢查
attack是否存在;ModelEngine 配接器將此後備名稱傳給其動畫處理器
這讓你能夠建立單一個適用於所有攻擊類型的攻擊動畫,或為近戰與遠程攻擊建立各別的專屬動畫。
damaged
EliteMobs 沒有註冊自動 damaged 動畫鉤子。提供者的受傷變色或其他命中回饋,與播放這個命名動畫是兩回事。
death
在 EliteMobDeathEvent 中,若自訂 Boss 模型存在 death 動畫,EliteMobs 就會請求播放。移除與階段切換不等於死亡事件。動畫播放與模型清理仍取決於提供者的生命週期。
powers
技能名稱與模型動畫名稱之間沒有自動配對。
雖然沒有自動名稱配對,但兩個腳本系統都能明確按名稱播放動畫:
- **EliteScript:**使用
PLAY_ANIMATION動作,以動畫名稱為值。它將各目標解析為自訂 Boss,並在其模型上播放動畫。 - Lua:
context.boss:play_model_animation("animation_name")。
兩者都會在模型沒有該名稱的動畫,或 Boss 沒有自訂模型時略過,不輸出訊息。
從地城匯入自訂模型
步驟 1. 一般匯入
匯入包含自訂模型的地城打包壓縮資料夾時,自訂模型會被移動到已安裝的模型外掛中:
- 已安裝 FreeMinecraftModels —— 模型會進入
(yourServer)/plugins/FreeMinecraftModels/models(若舊的Models資料夾已存在則進入該處),且.bbmodel檔案會在匯入過程中被轉換為.fmmodel。EliteMobs 接著會觸發一個模型安裝事件,讓 FMM 重建其模型註冊表。 - 僅安裝 ModelEngine —— 模型進入
(yourServer)/plugins/ModelEngine/blueprints。目前共用匯入器不會自動重新載入 ModelEngine;請用適合其版本的指令重建模型與資源包。
匯入啟動 FMM 模型重建後,EliteMobs 會等待 FMM 達到初始化完成狀態,最多 300 秒(五分鐘)。FMM 失敗或遭停用、等待逾時或中斷,都會在載入不完整模型與物品之前停止 EliteMobs 初始化。檢查兩個外掛的主控台錯誤,解決重建問題後再重新啟動;這不是一次只略過部分模型實體的成功啟動。
步驟 2. 資源包
EliteMobs 啟動時將內建包匯出到 (yourServer)/plugins/EliteMobs/resource_pack/em_rsp_defaults,並在父資料夾記錄 .rsp_checksum。內建與已儲存的檢查碼一致且 em_rsp_defaults 存在時,會略過複製。變更外掛版本本身不會強制匯出;檢查碼一致也不會逐一檢查匯出檔案是否被本機修改或刪除。替換使用預先準備的目錄交換;請將自己的資源包改動保存在此產生的資料夾之外。
你需要將這些資源包檔案與任何 Model Engine 資源包檔案合併,並將合併後的資源包散布給你的玩家。只有裝有資源包的玩家才能看到自訂模型。
疑難排解
常見問題:
-
模型不可見:
- 確認所選提供者的登錄表包含模型,使用適合該提供者及版本的重新載入指令
- 檢查資源包已安裝在用戶端上
- 確保
customModel與登錄的模型 ID 相符,通常是不含副檔名的檔名
-
動畫未播放:
- 驗證 Blockbench 中的動畫名稱與文件中記載的名稱完全相符
- 檢查那些應該只播放一次的動畫並未設定為循環
- 使用所選提供者的指令測試個別動畫
-
兩個外掛都已安裝:
- 如果兩者都存在,EliteMobs 會使用 FreeMinecraftModels
- 沒有按模型選擇提供者的設定。若要改用 ModelEngine,請停用 FreeMinecraftModels 並執行 R3 版本的 ModelEngine
-
Boss 或 NPC 沒有顯示名稱(FMM):
- 先檢查
name、Boss 的alwaysShowName與模型載入情況。 - 目前 FMM 在沒有
tag_錨點時將名牌放在碰撞箱頂部上方。位置不對時,檢查碰撞箱高度或加入作者指定的錨點。 - FMM 發出重新載入完成事件時會重新附加 NPC 模型。若重新載入後模型消失,請檢查主控台警告。
- 先檢查