EternalTD 指令
EternalTD 註冊根指令:
/eternaltd
/etd
設定期間使用的 Nightbreak 帳號指令則是由 MagmaCore 註冊的獨立頂層指令:
/nightbreaklogin [token]
/nightbreaklogout
兩者都受 nightbreak.login(default: op)控管。不帶權杖的 /nightbreaklogin 會顯示一個 nightbreak.io 連結;你在那裡核准後,伺服器即完成連結。/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 插件更新。更新會在下次重啟後使用,除非 nightbreak.applyPluginUpdatesWithoutRestart 更早套用它 |
/etd applypluginupdate | 任何人 | 不重啟即套用已下載的 EternalTD 插件更新。EternalTD 會停用,再以新的 jar 重新啟用,因此進行中的關卡會結束。沒有較新的更新在等待、已有其他插件替換作業正在執行,或有其他作者的插件依賴 EternalTD 時會拒絕執行;若新的 jar 無法啟用,會重新載入先前的 jar |
/etd downloadall | 任何人 | 下載 EternalTD 插件更新以及所有可用內容 |
/etd downloadallcontent | 任何人 | 下載所有可用的 EternalTD 內容(不含插件更新) |
/etd updatecontent | 任何人 | 下載過時的 EternalTD 內容的更新 |
/etd updateallcontent | 任何人 | /etd updatecontent 的別名 |
/etd forcereinstallcontent <package|all> | 任何人 | 即使已安裝的版本已經是最新的,仍透過正常的已驗證匯入/重新載入流程重新下載內容。all 涵蓋所有被偵測為已下載的套件;指定 Nightbreak slug(可用 Tab 補完)則只針對單一套件,即使該套件的檔案完全遺失也能運作。用它來修復檔案被刪除或損毀的套件。 |
/etd install | 任何人 | 若 ResourcePackManager 可用,會向其註冊官方資源包並要求重新載入。否則會下載資源包、計算雜湊並更新 server.properties,此方式需要重新啟動伺服器。註冊失敗時也會改用 server.properties。 |
/etd reload | 任何人 | 就地重啟 EternalTD(完整的停用、載入、啟用循環) |
管理員注意事項:
- EternalTD 的
plugin.yml宣告兩個權限節點,皆為default: op。eternaltd.*授予管理、設定與除錯指令的存取權。eternaltd.match.bypass讓玩家可以傳送進其他玩家進行中的關卡世界而不會被送出去(見對局規則)。 - 所有面向管理員的指令都歸結到
eternaltd.*:setup、recommendedplugins、downloadall、downloadallcontent、downloadpluginupdate、applypluginupdate、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> | 玩家 | 根據已載入的關卡檔案要求建立工作階段。世界範本會在主執行緒之外複製。請等到收到「Created your world! We're ready to go.」後再開始;較早出現的「Joined level!」不代表成功,準備出錯後也可能出現。準備期間的第二次要求會被拒絕,已在對局中的玩家(包括其他 Nightbreak 插件的對局)也會被拒絕。斷線,或 10 分鐘內世界仍未準備好,都會取消準備。 |
/etd start | 玩家 | 開始活躍工作階段的第一波 |
/etd go | 玩家 | /etd start 的別名 |
/etd quit | 玩家 | 結束你目前的關卡工作階段 |
/etd stop | 玩家 | /etd quit 的別名 |
/etd hub | 玩家 | 返回已設定的 EternalTD 大廳重生點。若有進行中的工作階段,會先結束、還原玩家狀態、移除防禦塔並要求清理實例。若尚未設定大廳,指令會停止,不會結束工作階段。傳送被拒絕時會回報失敗。 |
/etd lobby | 玩家 | /etd hub 的別名 |
除錯和管理員遊戲指令
| 指令 | 發送者 | 目前用途 |
|---|---|---|
/etd cheat | 玩家 | 切換作弊模式。每次執行都會將貨幣設為10,000,000、生命設為1,000,000,關閉模式時也一樣。本局會被永久標記為作弊,不再列入最高分。 |
/etd setwave <wave> | 玩家 | 設定儲存的波次計數器,並將本局標記為作弊。不會替換目前的敵人或立即開始指定波次;下一次正常切換會使用計數器加一的波次。 |
這些是工作階段除錯工具。作弊模式啟用時,建造和升級不會扣除貨幣,但仍會檢查餘額是否足夠。關閉作弊模式不會恢復最高分記錄資格。setwave 接受整數,不會驗證對應波次是否存在。
地圖創作指令
這些指令仍然存在於目前的程式碼庫中,用於地板選擇和關卡註冊工作。
| 指令 | 發送者 | 目前用途 |
|---|---|---|
/etd selectfloor | 玩家 | 切換地板選取模式。左鍵點擊方塊設定角點1,右鍵設定角點2,與指令的介紹訊息一致。關閉選取模式會捨棄選取範圍。 |
/etd selectfloorcoordinates <x1> <y1> <z1> <x2> <y2> <z2> | 玩家 | 在目前世界以整數座標設定角點,每個輸入的Y值都會減1,以選取下方地板。兩個角點的Y必須相同,包含兩端的X/Z長度必須是3的倍數。 |
/etd showselection <level> | 玩家 | 檢查並保留目前的地板選取範圍。在選取範圍會註冊的每個地板格上方顯示一個只有你看得到的 END_ROD 粒子。不會儲存任何內容。 |
/etd register <level> | 玩家 | 為目前選取範圍中的每個地板格,在關卡檔案中寫入一筆 levelLocations 項目,取代原有清單,然後清除選取。無效的選取範圍,或不含任何地板格的選取範圍,不會寫入任何內容,並保留選取。 |
/etd register <level> start | 玩家 | 將玩家目前的整數方塊座標加入 startLocation 並儲存。需要已有啟用中的選取項目;不會將Y減1。 |
/etd register <level> end | 玩家 | 將玩家目前的整數方塊座標加入 endLocation 並儲存。需要已有啟用中的選取項目;不會將Y減1。 |
版本更新日誌
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.*和eternaltd.match.bypass權限。子指令在執行時透過指令管理器註冊。 /etd reload透過停用、載入和啟用流程重新啟動 EternalTD。資料夾遷移、匯入、內容套件、波次、關卡、世界範本、NPC 和資源包設定都會重新執行。FreeMinecraftModels 並非每次都會重新載入:若匯入器在 FMM 已啟用時將模型或其他檔案安裝到 FMM 的資料夾中,共用的模型安裝事件會呼叫 FMM 的內容重新載入。join、showselection和register指令的關卡名稱補完會讀取目前已載入的登錄表,因此新載入的關卡不必重建指令管理器即可出現。執行指令時也會檢查指定關卡是否存在。