EternalTD 指令
EternalTD 註冊根指令:
/eternaltd
/etd
設定期間使用的 Nightbreak 帳號指令則是由 MagmaCore 註冊的獨立頂層指令:
/nightbreaklogin <token>
/nightbreaklogout
兩者都受 nightbreak.login(default: op)控管。/nightbreaklogout 會清除伺服器上儲存的 Nightbreak 帳號權杖。
MagmaCore 也會為每個插件註冊一個更新日誌指令 /etdchangelog,同樣是獨立的頂層指令(見版本更新日誌)。
設定和內容管理
以下大部分子指令是由 MagmaCore 透過 NightbreakPluginBootstrap.registerStandardCommands 註冊的。它們在所有 Nightbreak 插件之間共享,並因 MagmaCore 被遮蔽(shaded)進插件中而隨 EternalTD 一起提供。
| 指令 | 發送者 | 目前用途 |
|---|---|---|
/etd | 任何人 | 輸出目前設定/內容快速入門說明。現在確實需要 eternaltd.* — 沒有該權限的發送者會收到「You do not have permission to run this command!」。 |
/etd initialize | 玩家 | 開啟首次設定選單。所需權限: eternaltd.*. |
/etd setup | 玩家 | 開啟 EternalTD 設定選單(套件瀏覽器,加上共享的插件更新、推薦插件和自動更新控制項) |
/etd recommendedplugins | 任何人 | 開啟(玩家)或輸出(主控台)EternalTD 的推薦搭配插件 |
/etd downloadpluginupdate | 任何人 | 在有可用更新時下載 EternalTD 插件更新(於下次重啟後使用) |
/etd downloadall | 任何人 | 下載 EternalTD 插件更新以及所有可用內容 |
/etd downloadallcontent | 任何人 | 下載所有可用的 EternalTD 內容(不含插件更新) |
/etd updatecontent | 任何人 | 下載過時的 EternalTD 內容的更新 |
/etd updateallcontent | 任何人 | /etd updatecontent 的別名 |
/etd forcereinstallcontent <package|all> | 任何人 | 即使已安裝的版本已經是最新的,仍透過正常的已驗證匯入/重新載入流程重新下載內容。all 涵蓋所有被偵測為已下載的套件;指定 Nightbreak slug(可用 Tab 補完)則只針對單一套件,即使該套件的檔案完全遺失也能運作。用它來修復檔案被刪除或損毀的套件。 |
/etd install | 任何人 | 套用官方 EternalTD 資源包設定 |
/etd reload | 任何人 | 就地重啟 EternalTD(完整的停用、載入、啟用循環) |
管理員注意事項:
- EternalTD 的
plugin.yml只宣告單一權限節點eternaltd.*(default: op),其說明為授予管理、設定與除錯指令的存取權。 - 所有面向管理員的功能都歸結到這一個節點:
setup、recommendedplugins、downloadall、downloadallcontent、downloadpluginupdate、updatecontent/updateallcontent、forcereinstallcontent、install、reload、cheat、setwave、selectfloor、selectfloorcoordinates、showselection、register、register start、register end,以及不帶參數的/etd。(共享的 MagmaCore 指令將其拆分為「admin」、「setup」和「initialize」三種權限,但 EternalTD 三者都傳入eternaltd.*,因此實際要求完全相同。) - 兩個 Nightbreak 帳號指令使用自己的節點
nightbreak.login(default: op),由 MagmaCore 在執行時註冊,而非透過 EternalTD 的plugin.yml。 initialize由共用引導程式註冊,同樣需要eternaltd.*;預設模式不會決定是否註冊此指令。- 只有面向玩家的指令不受限制:
hub/lobby、join、start/go和quit/stop。 - 第一個參數的 Tab 補完同樣會依權限過濾,因此沒有
eternaltd.*的玩家只會看到面向玩家的子指令。
遊戲指令
| 指令 | 發送者 | 目前用途 |
|---|---|---|
/etd join <level> | 玩家 | 從已載入的關卡檔案開始新的關卡工作階段。範本世界會在主執行緒之外複製,因此指令會先回覆「Preparing world - hang tight!」,等實例上線後再回覆「Created your world! We're ready to go.」。在複製進行中再次執行會以「Your level is already being prepared. Please wait!」被拒絕。 |
/etd start | 玩家 | 開始活躍工作階段的第一波 |
/etd go | 玩家 | /etd start 的別名 |
/etd quit | 玩家 | 結束你目前的關卡工作階段 |
/etd stop | 玩家 | /etd quit 的別名 |
/etd hub | 玩家 | 將你傳送回 EternalTD 大廳重生點。如果在遊戲進行中執行,會先乾淨地結束活躍工作階段(還原物品欄、移除塔、刪除實例世界)。需要在 config.yml 中設定大廳重生點;如果伺服器拒絕該次傳送,指令會回報失敗而不會謊稱成功。 |
/etd lobby | 玩家 | /etd hub 的別名 |
除錯和管理員遊戲指令
| 指令 | 發送者 | 目前用途 |
|---|---|---|
/etd cheat | 玩家 | 切換活躍工作階段的作弊模式 |
/etd setwave <wave> | 玩家 | 將活躍工作階段跳轉到特定波次 |
這些不是普通的玩家設定指令。它們是工作階段/除錯工具。
地圖創作指令
這些指令仍然存在於目前的程式碼庫中,用於地板選擇和關卡註冊工作。
| 指令 | 發送者 | 目前用途 |
|---|---|---|
/etd selectfloor | 玩家 | 透過點擊開始或停止地板角落選擇 |
/etd selectfloorcoordinates <x1> <y1> <z1> <x2> <y2> <z2> | 玩家 | 直接從座標設定選擇區域 |
/etd showselection <level> | 玩家 | 檢查並保留目前的地板選取範圍。目前實作已停用粒子預覽。 |
/etd register <level> | 玩家 | 檢查範圍後清除選取。不會顯示粒子,也不會儲存levelLocations;請手動將地板範圍寫入關卡YAML。 |
/etd register <level> start | 玩家 | 將玩家目前站立的方塊新增到關卡的 startLocation 列表 |
/etd register <level> end | 玩家 | 將玩家目前站立的方塊新增到關卡的 endLocation 列表 |
版本更新日誌
MagmaCore 會為每個 Nightbreak 插件註冊一個額外的頂層指令,名稱為根指令加上 changelog:
/etdchangelog
/etdchangelog dismiss
/etdchangelog disable
| 形式 | 效果 |
|---|---|
/etdchangelog | 開啟你尚未閱讀的 EternalTD 版本(以及受追蹤的內容套件)的版本說明 |
/etdchangelog dismiss | 將目前顯示的版本標記為已讀,並跳到下一批未讀內容(如果有的話) |
/etdchangelog disable | 為該玩家永久停止更新日誌通知 |
值得知道的行為:
- 此指令僅限玩家且僅限管理員。這裡的「管理員」是指 op、
eternaltd.*,或規格中任何一項 admin/setup/initialize 權限 — 而 EternalTD 將這三項全都設為eternaltd.*。 - 管理員加入伺服器後約 2 秒會收到帶有可點擊 view 按鈕的聊天通知,但僅限於有未讀內容且他們未執行過
disable時。 - 已讀/已略過狀態、追蹤起始的版本,以及快取的版本說明文字都存放在
plugins/EternalTD/nightbreak-changelogs.yml。 - 如果另一個插件已佔用
etdchangelog這個標籤,MagmaCore 會改為註冊帶命名空間的備用指令(eternaltd:etdchangelog)。
注意事項
- EternalTD 的
plugin.yml只宣告根指令和eternaltd.*權限。子指令在執行時透過指令管理器註冊。 /etd reload是真正的插件重啟:它會呼叫插件的停用、載入和啟用路徑,而不是輕量的內容重新匯入。啟動時執行的所有動作(資料夾遷移、匯入器、內容套件、波次、關卡、世界範本、NPC、資源包輔助程式)都會再跑一次。它不會呼叫 FreeMinecraftModels 的重新載入路徑 — 該方法存在於原始碼中,但沒有任何地方呼叫它。join、showselection和register指令的關卡名稱參數是在你按 Tab 補完時解析的,而不是在插件啟動時,因此透過下載或重新載入新增的關卡不需重啟即可出現。