跳至主要內容

Resource Pack Manager 常見問題

若此處未解答你的問題,請先查看側邊欄中其他 ResourcePackManager 頁面。

ResourcePackManager 目前提供哪些指令?​

在後端(Paper / Spigot)上,由程式碼支援的指令介面為:

  • /rspm setup — 開啟一個遊戲內的 GUI 設定選單(外掛更新狀態、推薦外掛、自動更新切換、前往 wiki / Discord / Nightbreak 帳號的連結)
  • /rspm recommendedplugins — 顯示共用的 Nightbreak 推薦外掛選單(在主控台則顯示文字清單)
  • /rspm downloadpluginupdate — 下載可用的 ResourcePackManager 更新,供下次重啟時套用
  • /rspm downloadall — 下載此外掛所公開的所有可用更新(目前即 ResourcePackManager 的更新)
  • /rspm applypluginupdate — 屬於共用 Nightbreak 指令組;RSPM 一律會拒絕執行,因為其更新需要重啟伺服器(其 Geyser 擴充功能只會在 Geyser 啟動時載入)
  • /rspm reload — 重新建置並重新託管合併後的資源包
  • /rspm status — 完整的診斷資訊輸出(資源包狀態、託管模式、網路金鑰指紋、整合)
  • /rspm verbose [on|off] — 開啟或關閉詳細診斷日誌。不帶參數時為切換。結果會寫回 config.yml 中的 verboseLogging,因此重啟後仍有效。也可寫成 /rspm verboselogging。
  • /rspm itemsadder configure — 為 RSPM 託管設定 ItemsAdder
  • /rspm itemsadder dismiss — 為你的玩家 UUID 永久關閉 ItemsAdder 警告
  • /rspm data_compliance_request — 下載此伺服器所有遠端儲存的資料

主指令是 /resourcepackmanager,/rspm 是其別名。上方的更新與推薦外掛指令是由 RSPM 註冊的共用 MagmaCore/Nightbreak 指令。

MagmaCore 也會註冊下列頂層指令,它們不是 /rspm 的子指令:

  • /nightbreaklogin <token> 與 /nightbreaklogout 儲存或清除伺服器共用的 Nightbreak 帳號權杖。兩者都需要 nightbreak.login(預設 op)。請參閱 Nightbreak 帳號連結。
  • /nightbreak plugins 瀏覽 Nightbreak 外掛目錄,需要 nightbreak.plugins(預設 op)。
  • /logify 將目前的伺服器日誌上傳至 mclo.gs,需要 logify.*(預設 op)。
  • /resourcepackmanagerchangelog [dismiss|disable] 向管理員顯示尚未閱讀的 ResourcePackManager 發行說明。請參閱更新日誌通知。

最先載入的 Nightbreak 外掛會為整個伺服器註冊 /nightbreaklogin、/nightbreaklogout、/nightbreak 與 /logify。

後端權限:

  • /rspm setup 與 /rspm recommendedplugins 需要 resourcepackmanager.setup。/rspm setup 僅限玩家使用,因為它會開啟一個物品欄 GUI。
  • /rspm downloadpluginupdate、/rspm downloadall、/rspm applypluginupdate、/rspm reload、/rspm status、/rspm verbose、/rspm itemsadder <configure|dismiss> 與 /rspm data_compliance_request 均需要 resourcepackmanager.*。

在代理外掛(Velocity / BungeeCord)上,僅有診斷指令:

  • /rspm status — 代理端快照:後端清單、各後端的擷取結果、合併後的資源包狀態、Geyser/Floodgate 偵測結果
  • /rspm debug bedrock [on|off] — Velocity 與 BungeeCord 皆可。切換 GeyserBinder 發出的詳盡 [RSPM-BedrockDebug] 日誌行,用於排查「Bedrock 玩家已加入但看不到資源包」的情況。代理重啟時會重置為關閉。不帶參數執行則會印出目前狀態。

在 Velocity 上,代理指令接受 resourcepackmanager.command.status 或 resourcepackmanager.*。BungeeCord 註冊的是確切的 resourcepackmanager.command.status 節點;權限外掛仍可透過萬用字元展開來滿足它。主控台可以執行這些指令。輸出可放心分享——網路金鑰只會以簡短的單向雜湊指紋出現,永遠不會是金鑰本身,且不會印出任何 token——因此可以放寬授權。

目前支援哪些外掛?​

ResourcePackManager 內建支援以下外掛的整合條目:

  • BackpackPlus
  • BetterHUD
  • BetterStructures
  • CannonRTP
  • EliteMobs
  • EternalTD
  • FreeMinecraftModels
  • InfiniteVehicles
  • ItemsAdder
  • MegaBlockSurvivors
  • MMOInventory
  • ModelEngine
  • Nexo
  • Nova
  • Oraxen
  • RealisticSurvival
  • ResurrectionChest
  • ValhallaMMO
  • vane-core

這些整合僅在對應外掛已安裝、且其設定的本機路徑或遠端 URL 可使用時才會生效。

每個整合在 plugins/ResourcePackManager/compatible_plugins/ 下都有自己的 YAML 設定檔。你可以為各外掛自訂 isEnabled、pluginName、localPath、url、zips、cluster、additionalLocalPath 和 reloadCommand。cluster 選項可告訴 ResourcePackManager 將本機路徑視為包含多個資源包子資料夾的目錄,這些子資料夾應全部合併在一起。

我要如何排除某一個自動外掛整合?​

在 plugins/ResourcePackManager/compatible_plugins/ 下該整合的檔案中設定 isEnabled: false,然後執行 /rspm reload(或重啟)。RSPM 會移除它為該整合產生或註冊的資源包輸入,包括它產生的 mixer 副本。把外掛從 priorityOrder 中移除並不會排除它;那只會把該資源包移到最低優先級。若要排除你手動加入的 ZIP,請把該 ZIP 從 mixer 資料夾中刪除或移走。

ResourcePackManager 與 ItemsAdder 相容嗎?​

是的。ResourcePackManager 內建針對 ItemsAdder 的輔助工具與警告流程。

若已安裝 ItemsAdder 但仍需調整以配合 ResourcePackManager 託管,OP 玩家在加入伺服器幾秒後會收到一則可點擊的警告。已永久關閉警告的玩家則不會再看到它。從那裡你可以:

  • 執行 /rspm itemsadder configure,會設定 resource-pack.hosting.no-host.enabled: true、停用三個 protect-file-from-unzip 設定、設定 compress-json-files: false、執行 /iareload 然後 /iazip,並等待 RSPM 合併重新產生的匯出內容(合併成功或失敗時它會回報;它不會重新載入 RSPM)
  • 執行 /rspm itemsadder dismiss,為你的玩家 UUID 永久關閉該警告

若 ItemsAdder 已被設定為透過其某種託管模式託管自己的資源包,輔助指令不會自動覆寫該設定,而是會提示你先自行停用 ItemsAdder 的託管。

我可以將自己的資源包加入合併嗎?​

可以,而且依你手上的內容不同,有兩個地方可以放。

已完成的 .zip 放在:

plugins/ResourcePackManager/mixer

若你想控制檔案衝突時哪個資源包勝出,請將完整檔名(包含 .zip)加入 plugins/ResourcePackManager/config.yml 中的 priorityOrder。

未壓縮的資源包資料夾(一個 assets/ 樹加上 pack.mcmeta)放在:

plugins/ResourcePackManager/resource_pack

RSPM 會自行壓縮該資料夾,並以 priorityOrder 中的 ResourcePackManager 條目納入合併,而該條目位於預設清單的最上方——因此預設情況下,它的檔案在衝突時會勝過每一個外掛資源包。若你希望它讓步,請把 ResourcePackManager 往清單下方移。

相關的 plugins/ResourcePackManager/blueprint 資料夾則存放 RSPM 貢獻給每次合併的 pack.png 與 pack.mcmeta。編輯這兩個檔案即可變更合併後資源包的圖示或其選單內描述;此資料夾會在每次啟動時重新壓縮成 blueprint.zip。

範例:

priorityOrder:
- ResourcePackManager
- EliteMobs
- MyCustomPack.zip

優先順序如何運作?​

priorityOrder 越靠上優先級越高,越靠下優先級越低。

對於不可合併的檔案,較高優先級的資源包會取代較低優先級的檔案。對於可合併的 JSON 檔案,ResourcePackManager 會合併內容,而非直接覆蓋。

程式碼目前將下列檔案視為可合併:

  • sounds.json
  • lang 或 languages 下的語言檔
  • minecraft/models/item 下的原版物品模型 JSON(採用非遞迴合併:只有 overrides 陣列會跨資源包合併,檔案其餘部分則遵循「最高優先級勝出」)
  • atlas 檔
  • font 檔
  • items/ 下的 1.21.4+ 物品模型定義(格式感知合併:保持 predicate tree 完整,不會盲目遞迴進入不同類型的節點)

pack.mcmeta 採用專用合併規則:最高的 pack_format 勝出,已宣告的格式範圍會合併。目錄不同的 overlay 條目會一併保留;目錄相同時,採用優先級較高的條目。每個 overlay 都保留作者指定的 formats、min_format、max_format 及額外中繼資料。唯一的補充:Minecraft 1.21.9+ 會拒絕某個 overlay 涵蓋 pack format 64 或更低、而另一個 overlay 未宣告 formats 的 overlay 清單,因此當合併後的清單包含這類 overlay 時,RSPM 會為每個只宣告 min_format/max_format 的條目補上等效的 formats 範圍。除此之外,RSPM 不會改寫 overlay 範圍。pack、overlays 及頂層物件的額外欄位,只要不與優先級較高的值衝突,也會保留。

在所有資源包合併之後,ResourcePackManager 會將基礎 atlas 來源合併到 overlay atlas 檔中。這可避免 overlay 在 Minecraft 啟用 overlay 時(例如 ItemsAdder 的 ia_overlay_modern_atlas / ia_overlay_legacy_atlas)意外遮蔽基礎 atlas 條目。

其他 JSON 檔案則會被取代而非合併。

未列在 priorityOrder 中的資源包仍會被納入合併,但會獲得最低優先級。

位元組完全相同的完整 ZIP 輸入會在合併前被去重,保留第一份(優先級最高)的副本。合併之後,RSPM 也會修復兩種常見的 Java 模型缺陷:在可行時,從模型的第一個實際材質補上缺少的 particle 材質;並將無效的模型 UV 座標夾限到 Minecraft 的 0..16 範圍內。

ResourcePackManager 會在資源包變更時自動重新建置嗎?​

會。它會監視受支援的資源包來源以偵測變更。

當受監視的資源包停止變更 3 秒後,ResourcePackManager 會將其標記為穩定。一旦所有受監視的資源包都穩定,重新混合就會立即發生。在這段過渡期間,線上的 OP 玩家會收到通知:「All resource packs are stable. Mixing and sending now.」

若某次重新混合的輸入與上一次逐位元組完全相同,就不會重新合併。RSPM 會對排序後的來源資源包清單(名稱、大小、內容雜湊)建立指紋,並存放在輸出旁邊、名為 .rspm_mix_fingerprint 的檔案中;當指紋相符且所有預期的輸出檔案仍然存在時,它會直接重新發佈既有的 zip,而不重新建置。任何有疑慮的情況——輸出檔缺失、指紋無法讀取、合併後 ZIP 的 SHA-1 不再相符——都會落入完整混合。這也是為什麼一次什麼都沒改變的 /rspm reload 幾乎可以瞬間完成,並沿用既有的託管註冊。

當 Java 輸入未變、但 Bedrock 端必須重做時(已啟用 Bedrock 轉換但磁碟上沒有 Bedrock 資源包、bedrockConversionEnabled 或 Bedrock 目標有所變更,或轉換器更新改變了 Bedrock 輸出),RSPM 會保留已驗證的 Java ZIP,只重做 Bedrock 步驟,因此 Java 資源包的位元組與 SHA-1 都維持不變。

啟動時,RSPM 會在受監控的外掛完成初始化之前,檢查已儲存的指紋與合併後 ZIP 的 SHA-1。若兩者相符,Java 託管會立即從已儲存的資源包開始。之後若來源資源包有變更,監控程式仍會重新混合。

監視器會考慮外掛初始化嗎?​

會。監視器了解 Magmacore 的外掛初始化狀態。

  • 它會等到所有受監控的外掛完成 Magmacore 初始化後,才開始進行穩定性檢查。
  • 若外掛在監視器執行期間進入 INITIALIZING 狀態,監視器會暫停並重置穩定性追蹤,直到初始化完成。失敗或未初始化的選用整合不會無限期阻塞整個合併器。
  • 這可避免在正常的外掛啟動或重新載入期間出現錯誤的「不穩定」偵測。

玩家如何收到最終的資源包?​

當啟用 autoHost(預設)時,或當 selfHostForce 明確覆寫它時,RSPM 會選擇一條交付路徑,並將該 URL 推送給每位加入的 Java 玩家。決策樹如下:

  1. 當 selfHostForce: true 時,略過探測並嘗試自我託管,主要用於測試。URL 驗證與監聽器啟動仍須成功。
  2. 否則,當 preferSelfHost: true(預設)且 selfHostEnabled: true 時,檢查主機位址,比較從 localhost 和玩家確切 URL 下載的資源包樣本,並要求經 magmaguy.com 確認外部可達。只有全部通過才選擇自我託管。
  3. 自我託管失敗或停用時,重用或上傳資源包至 magmaguy.com/rsp/ 並公告 URL。遠端失敗可以退回已啟用的自我託管,但必須通過相同檢查。外部探測無法使用時會拒絕自動自我託管;兩條路徑皆失敗時,不公告新的交付 URL。

取得 URL 後,RSPM 會使用多重資源包 API,因此能與其他伺服器發送的資源包共存。目前的 Bukkit 外掛描述檔要求 Minecraft 1.21.4 或更新版本。

加入時的資源包提示會延後約一秒。FAILED_DOWNLOAD 或 DISCARDED 的回應會自動重試,同一玩家工作階段最多三次;被玩家拒絕的資源包、無效 URL 或 FAILED_RELOAD(用戶端本身的資源重新載入失敗;請檢查該用戶端的 latest.log)則不會重試。Floodgate 玩家在此會被略過,因為他們的 Bedrock 資源包是透過 Geyser 交付的。

若 autoHost: false 且 selfHostForce: false,RSPM 不會推送任何 URL——你需自行從 plugins/ResourcePackManager/output/ 取得 zip,並透過自己的管線提供。

完整的交付決策樹請參閱自我託管。

我可以自我託管而不使用內建的自動託管嗎?​

可以——自 RSPM v2 起,內建的 HTTP 伺服器就是建議的自我託管路徑。selfHostEnabled: true 與 preferSelfHost: true 兩者均預設啟用。

若你想透過自己現有的網頁伺服器託管 zip,而非使用任一內建路徑:

  • 設定 autoHost: false。
  • 可選擇將 resourcePackRerouting 設為相對於 plugins 目錄的現有資料夾路徑。
  • 從 plugins/ResourcePackManager/output/ResourcePackManager_RSP.zip 取得合併後的資源包並自行提供。

若有設定 resourcePackRerouting,RSPM 也會將該 zip 的副本寫入該轉送資料夾。該轉送路徑會以 plugins 目錄為基準解析,目標資料夾必須已存在。

有指令可以索取已儲存的託管資料嗎?​

有。使用:

/rspm data_compliance_request

若 magmaguy.com 遠端自動託管有作用中的工作階段,ResourcePackManager 會將回應下載至:

plugins/ResourcePackManager/data_compliance/data.zip

RSPM 也會在同一個 data_compliance 資料夾中寫入 ReadMe.md。

若沒有作用中的遠端工作階段(例如你正在自我託管),該指令會告知你沒有遠端資料可索取。

有哪些設定選項可用?​

plugins/ResourcePackManager/config.yml 中提供下列設定:

一般

  • priorityOrder — 控制檔案衝突時哪個資源包勝出的列表(最高優先級在最前)
  • autoHost — ResourcePackManager 是否自動託管並發送合併後的資源包(布林值,預設 true)
  • forceResourcePack — 是否強制玩家接受資源包(布林值,預設 false)
  • resourcePackPrompt — 提供資源包時顯示的提示訊息(預設 "Use recommended resource pack?")
  • resourcePackRerouting — 可選的資料夾路徑(相對於 plugins),用於額外寫入合併 zip 的副本
  • verboseLogging — 印出資源包準備與託管交握的每一個步驟(布林值,預設 false)。預設關閉,因此主控台只顯示最終結果;診斷合併或託管問題時再開啟。/rspm verbose on|off 會在執行期切換同一個鍵並儲存下來。這與涵蓋 Bedrock 管線的 bedrockConverterDebug 是分開的。
  • nightbreak.autoDownloadPluginUpdates — RSPM 是否在啟動時自動下載自身的外掛更新(布林值,預設 false;下載更新後仍需重啟才能套用)。這是 nightbreak: 區段下的巢狀鍵,並非頂層鍵——在 config.yml 中搜尋裸的 autoDownloadPluginUpdates 行只會在縮排於 nightbreak: 之下找到它。這與 /rspm setup GUI 中所公開的是同一個切換。自動下載外掛需要有效的 Nightbreak 帳號權杖以及有效的支持者 Patreon 會籍。RSPM 不會寫入共用的 nightbreak.applyPluginUpdatesWithoutRestart 鍵,也絕不會在不重啟的情況下套用已下載的更新,因為其 Geyser 擴充功能只會在 Geyser 啟動時載入。

自我託管

  • selfHostEnabled — 是否可使用內建 HTTP 伺服器(布林值,預設 true)
  • selfHostPort — 自我託管 HTTP 連接埠。-1(預設)使用 mcPort + networkHttpOffset-v2 計算。明確連接埠和計算結果都須在 1 至 65535 之間。
  • networkHttpOffset-v2 — 當 selfHostPort = -1 時,加到 Minecraft 伺服器埠的後備偏移量。預設 1(例如 MC 25565 → HTTP 25566)。在網路上你不再需要讓它與代理保持一致:後端會自動向代理通報它實際綁定的確切 HTTP 連接埠,代理只在該通報抵達之前,將自己的 network-http-offset-v2 當作猜測使用。
  • selfHostExternalHost — 用戶端連至自我託管伺服器使用的公開主機名稱或 IP。預設留空,自動偵測主機位址。
  • selfHostExternalUrl — 供反向代理使用的完整公開 HTTP/HTTPS 資源包 URL,包含路徑,預設留空。它覆寫公告的 URL,不改變本機監聽器;含內嵌憑證或片段的 URL 會被拒絕。
  • selfHostForce — 跳過所有健全性檢查及遠端上傳,一律自我託管(布林值,預設 false——用於測試)。
  • preferSelfHost — 先嘗試自我託管並執行健全性檢查,再回退至遠端上傳(布林值,預設 true)。

Bedrock

  • bedrockConversionEnabled — 是否將合併後的 Java 資源包轉換為適用於 GeyserMC 的 Bedrock 資源包(預設 true)
  • bedrockAutoDeployToGeyser — 是否將 Geyser 自訂對應檔複製到偵測到的 Geyser 資料夾(預設 true)
  • bedrockGeyserFolder — 手動指定 Geyser 資料夾路徑;留空則自動偵測
  • bedrockConverterDebug — 來自 Bedrock 管線的逐物品 / 逐 bone 詳盡日誌行(預設 false)
  • geyserExtensionAutoInstall — 是否把通用的 ResourcePackManager.jar 安裝並更新為 Geyser 擴充功能,好讓自訂 Bedrock 實體得以渲染(預設 true)。設為 false 會停止未來的安裝與更新預備;它不會刪除已經存在的擴充功能 jar——請在 Geyser 停止時手動移除。代理外掛有同樣的開關,但名稱不同,為 geyser-extension-auto-install。

較早的版本還有 plugins/ResourcePackManager/bedrock_display_offsets.yml,內含手持物品偏移設定。此檔案已不再被讀取:Bedrock 手持物品姿勢現在來自 Java 模型的 display 變換。請參閱手持物品姿勢。

無論在後端或代理上,都刻意沒有 network-key 設定選項。手動貼上金鑰曾是設定錯誤的最大來源——一個錯字就會悄無聲息地破壞代理↔後端的連結,而且任何地方都不會出現錯誤訊息。

取而代之的是,網路金鑰由代理持有並發放:

  • 代理首先讀取已儲存且有效的 network-key,然後嘗試從 plugins/floodgate/key.pem 衍生金鑰;兩者都無法使用時才產生隨機金鑰。結果會儲存在資料夾中。後續啟動會在金鑰有效期間沿用它;遺失金鑰會重複此流程,可能再次得到相同的 Floodgate 衍生金鑰。請參閱網路金鑰復原。
  • 每個後端會在第一次有玩家連線到它時,透過 rspm:network 外掛頻道收到該金鑰,然後保存在自己的 data.yml 中。已持有金鑰的後端會忽略之後的授予——把後端重新指向另一個網路是操作員的動作,不是一則訊息能做到的事。
  • RSPM 的網路連結不需要 Floodgate。Bedrock 驗證取決於 Geyser 選用的驗證模式,請參閱 Floodgate 與線上驗證。
  • 獨立(未經代理)的伺服器會自行產生並保留自己的金鑰,因為它本身就是一個只有一台伺服器的網路。

在任一端執行 /rspm status 都只會顯示金鑰的簡短單向雜湊指紋,不會顯示金鑰本身。指紋相符表示網路身分相同;仍需另外檢查擷取結果,以驗證連線及資源包交付。

為什麼主控台這麼安靜?它到底有沒有在動?​

這是刻意設計的。準備資源包是一條很長的管線——暫存每個貢獻外掛的資源包、合併叢集、等待它們停止變動、混合、為 Bedrock 轉換、把結果交給託管方。把這一切全部敘述出來,每次啟動大約會產生六十行主控台輸出,並把大家唯一會讀的兩件事埋沒掉:玩家到底會不會拿到資源包,以及如果拿不到該怎麼辦。

所以一次正常的開機只會印出一行:

[ResourcePackManager] Resource pack is live via self-hosting — http://play.example.com:25566/rspm.zip

這一行確認交付 URL 已公告。請使用用戶端加入,並查看已知的自訂內容,以驗證下載和渲染。

RSPM 也刻意不會為它自己就能修好的狀況發出警告。若某次自我託管探測失敗、RSPM 回退到遠端託管,那是成功——主控台回報的是結果,不是繞路的過程。把已經處理好的事情記為警告,讀起來像是故障,只會讓人去追一個不存在的問題。

若要看到完整敘述,請執行 /rspm verbose on(或在 config.yml 中設定 verboseLogging: true),然後執行 /rspm reload。若是針對 Bedrock 轉換器,請改用 bedrockConverterDebug: true。

其他外掛可以透過程式碼註冊它們的資源包嗎?​

可以。ResourcePackManager 公開 Java API 以進行程式化的資源包註冊。詳情請參閱 API 頁面。

Bedrock 轉換是否僅適用於 FreeMinecraftModels?​

不,已不再如此。目前的轉換器可遞迴處理任何在 assets/<namespace>/items/**/*.json 下提供 1.21.4+ 物品定義的外掛資源包。這涵蓋 FreeMinecraftModels 的 bone 模型、EliteMobs 裝備、Oraxen/Nexo 自訂物品、自訂盔甲組,以及你自己以該格式組裝的任何資源包。純 2D 自訂物品會輸出為扁平的 Bedrock 圖示;3D 自訂物品則會輸出 Bedrock 幾何/附掛物及軟體渲染的物品欄圖示。

每次 Bedrock 資源包變更都需要重啟伺服器嗎?​

現有自訂物品的材質與模型調整會對下一位加入的 Bedrock 玩家生效,RSPM 透過 Geyser API 為每個工作階段即時提供資源包。當自訂物品對應改變,或需要註冊新的自訂實體識別碼、屬性類型時,請重啟執行 Geyser 的程序。這些註冊在啟動時完成。重複匯出已註冊的實體識別碼且屬性類型不變,本身不需要再次重啟。

ResourcePackManager 在 BungeeCord / Velocity 上能運作嗎?​

可以。在代理與提供資源包的後端安裝同一個 ResourcePackManager.jar。它包含 Bukkit、Velocity 及 BungeeCord 的進入點。代理後方的後端尚未收到網路金鑰時,會在 plugins/ResourcePackManager/proxy-extension/ResourcePackManager.jar 預備一份副本。其他已註冊伺服器可以不執行 RSPM;後端偵測可避免它們拖延資源包同步。

以代理外掛身份執行時,它會合併每個後端轉換後的 Bedrock 資源包,並透過代理的 Geyser 提供給 Bedrock 用戶端。Java 資源包的交付仍由各後端直接處理——Java 用戶端會看到各後端的資源包。

設定、疑難排解與驗證步驟,請參閱代理網路。