跳至主要內容

EternalTD 自訂內容打包

EternalTD 從以下資料夾載入自訂內容。ZIP 匯入使用 MagmaCore 的共用匯入器;套件中繼資料控制內容在 /etd setup 中的顯示方式。

匯入根目錄​

手動匯入仍然透過以下路徑進行:

plugins/EternalTD/imports/

手動匯入內容後,執行:

/etd reload

規範內容資料夾​

目前的插件掃描這些小寫資料夾:

plugins/EternalTD/levels/
plugins/EternalTD/waves/
plugins/EternalTD/npcs/
plugins/EternalTD/worlds/

舊版說明:

  • Levels/ 和 NPCs/ 是舊版資料夾名稱。
  • EternalTD 現在在啟動和重新載入期間將它們遷移到 levels/ 和 npcs/。

世界打包規則​

EternalTD 將以下位置的世界:

plugins/EternalTD/worlds/

視為世界範本。

當玩家開始一個關卡時,EternalTD 將匹配的範本世界複製到伺服器世界容器中,並在該複製副本中執行工作階段。

範本根目錄在複製前驗證,內部檔案與目錄在複製時檢查。失敗會復原尚未完成的副本。若符合下列任一情況,便會拒絕複製:

  • 範本根目錄沒有 level.dat
  • 範本資料夾本身是符號連結,或其內部任何位置含有符號連結
  • 範本中含有名為 .eternaltd-instance 的檔案

最後這個名稱是保留的:EternalTD 將其寫入執行時副本作為擁有權標記,並在清理前檢查實例身分和擁有權。不要在打包的範本中附帶該檔案。

實際含義:

  • 將範本世界打包在 plugins/EternalTD/worlds/ 下
  • 不要將執行時複製的世界視為打包內容的真實來源
  • 範本必須是 worlds/ 的直接子資料夾;名稱包含任何 . 都不會被偵測
  • 世界資料夾名稱也不能包含路徑分隔符號、: 或控制字元,並且必須與關卡的 worldName 完全一致

官方大廳世界是一個特殊情況,直接在伺服器世界容器中作為以下內容進行追蹤:

etd_spawn

套件的啟用與停用條件​

/etd setup 中的套件切換僅適用於公開追蹤設定檔的套件。

目前追蹤的資產欄位為:

  • levelFiles
  • waveFiles
  • npcFiles
  • worldFolders
  • worldContainerFolders
  • markerFileName

實際上:

  • 關卡、波次和 NPC 套件可以透過在這些 YAML 檔案中寫入 isEnabled 來啟用或停用
  • 追蹤的檔名會遞迴比對,因此可以使用 levels/、waves/ 和 npcs/ 的子資料夾,只要檔名相符即可
  • 共享世界容器內容和僅標記的資源套件不能以相同方式切換

套件中繼資料欄位​

目前的套件設定欄位模型支援:

  • isEnabled
  • name
  • description
  • downloadLink
  • version
  • nightbreakSlug
  • levelFiles
  • waveFiles
  • npcFiles
  • worldFolders
  • worldContainerFolders
  • markerFileName
  • category
  • toggleable

要在設定介面顯示自訂內容,請將中繼資料 YAML 直接放入 plugins/EternalTD/content_packages/,或將它放在 ZIP 的 content_packages/ 資料夾中一併提供(參閱 ZIP 結構)。填寫實際檔名與世界名稱,並至少追蹤一個資產。空的資產清單永遠不會視為已下載。套件本身的 isEnabled 標記不會單獨停用其關卡:選單開關會將標記寫入每個追蹤的關卡、波次和 NPC 檔案,儲存套件標記,然後重新啟動 EternalTD。

另外還有一個被追蹤的欄位 markerFallbackFolders,它列出 plugins/ 底下的資料夾,只要這些資料夾非空存在也會被視為該套件已安裝。它的存在是為了那些不透過下載流程寫入標記就能抵達伺服器的內容。它只定義於程式碼中 —— 寫進套件 YAML 不會有任何效果。

模型打包說明​

目前的 EternalTD Custom Models 套件使用標記檔案而不是普通的 EternalTD 設定檔進行追蹤。

這意味著:

  • EternalTD 可以追蹤共享模型套件是否已下載
  • 當 FMM 安裝時,實際的模型資產位於 FreeMinecraftModels 側的設定中
  • 清理是手動的,之後需要執行 /etd reload

ZIP 結構​

將支援的資料夾直接放在壓縮檔根目錄,不要再套一層外部資料夾。最小結構範例:

pack.meta
levels/my_level.yml
waves/my_waves.yml
npcs/my_npc.yml
worlds/my_world/level.dat
worlds/my_world/region/...

pack.meta 的純文字內容是 eternaltd。沒有此檔案的 ZIP 使用匯入它的插件平台;已解壓縮的資料夾只有包含 pack.meta 才會處理。將 .zip 檔案放入匯入目錄,然後重新載入。

壓縮檔根目錄項目目標位置
levels, waves, npcs, worldsplugins/EternalTD/ 下的對應資料夾
content_packagesplugins/EternalTD/content_packages/;讓內容包列在 /etd setup 中的套件中繼資料
content_markersplugins/EternalTD/content_markers/;名為 <markerFileName>.marker 的安裝標記
worldcontainer伺服器世界容器,用於 etd_spawn 等共享世界
models, modelengineFMM 啟用時使用其模型資料夾;否則若 ModelEngine 啟用,使用其 blueprints;兩者皆未啟用時,使用 FMM 模型資料夾供日後使用
scriptsplugins/FreeMinecraftModels/scripts/
freeminecraftmodels, elitemobs, betterstructures該插件的資料資料夾(plugins/FreeMinecraftModels/、plugins/EliteMobs/、plugins/BetterStructures/);請依照該資料夾的結構排列內容

FMM 模型目標優先使用已存在的舊版 Models 資料夾,否則使用 models;壓縮檔中的 freeminecraftmodels/models 資料夾會合併到同一個資料夾。FMM 啟用時,任何匯入到 FMM 資料夾的內容都會觸發 FMM 的匯入內容重新載入。放入 BetterStructures 資料夾的內容,會在 BetterStructures 完成啟動後觸發 BetterStructures 內容重新載入。

匯入器會在 EternalTD 載入 content_packages/ 之前執行,因此 ZIP 中附帶的套件 YAML,會在匯入它的那次重新載入之後出現在 /etd setup 中。content_markers/ 中附帶的標記,會被視為該套件的標記資產,因此這項資產會顯示為已存在,而不必經過設定選單的下載流程。套件仍需要其他追蹤的檔案才會被視為已下載。

無法辨識的頂層項目會使整個壓縮檔在安裝前被拒絕。匯入器會保留失敗的 ZIP 供重試,並嘗試還原該壓縮檔修改過的目標位置;重試前請檢查還原錯誤日誌。替換共享世界時會先卸載原世界:其中的玩家會被移到另一個已載入世界的重生點。若有玩家無法移動或世界拒絕卸載,壓縮檔會保留供重試。成功匯入後 ZIP 會被刪除,但這不代表關卡可以正常遊玩。