BetterFood 相容性
執行時目標
當前儲存庫目標:
- 外掛程式版本:
1.5.6 - Bukkit
api-version:1.21.4 - Spigot API 建置目標:
26.3-R0.1-SNAPSHOT - Java:
21
指令
外掛程式使用:
/betterfood/bf
面向玩家的子指令專注於切換:
- 自動進食(
toggleEating,或不帶參數直接執行/betterfood) - 動作欄上的進食回饋訊息(
toggleMessage)
管理員子指令(需要 betterfood.admin)會公開共用的 Nightbreak 工具:
setup— 開啟遊戲內設定選單recommendedplugins— 顯示與 BetterFood 搭配良好的外掛程式。BetterFood 目前在共用推薦目錄中沒有任何項目,因此這會開啟一個空選單,並告訴你目前沒有額外推薦(控制台發送者會在聊天中收到同樣的說明)downloadpluginupdate/downloadall— 若有可用更新則下載外掛程式更新applypluginupdate不需重新啟動伺服器即可套用已下載的外掛程式更新(請參閱免重新啟動的外掛程式更新)downloadallcontent— 回報 BetterFood 沒有內容包
Tab 補全依權限和已輸入的內容篩選:toggleEating 和 toggleMessage 只提供給擁有 betterfood.user 的發送者,downloadpluginupdate、applypluginupdate、downloadallcontent、setup 和 recommendedplugins 只提供給擁有 betterfood.admin 的發送者。downloadall 是有效別名,但不會出現在建議中。兩個設定僅限玩家使用:明確指定 toggleEating / toggleMessage 時,非玩家會收到「BetterFood settings can only be changed in-game.」;不帶參數的 /betterfood 則引導控制台使用更新指令。沒有 betterfood.user 的玩家會收到權限不足的提示。未知子指令或超過一個參數會顯示用法。管理員會看到兩個設定以及更新、設定選單和推薦指令;其他人只看到兩個設定。用法未列出 downloadallcontent,但該指令可以執行,也會出現在管理員的 Tab 補全中。
共用的 MagmaCore 指令
隨附的 MagmaCore 工具會在啟動過程中加入以下指令。全域指令在載入時註冊,但前提是名稱尚未被占用;伺服器上有其他 MagmaGuy 外掛程式時,首次註冊會保留對應的名稱。BetterFood 的發行說明指令在外掛程式啟用時初始化:
/nightbreak plugins— 瀏覽外掛程式目錄,在遊戲內以選單呈現,從控制台則以聊天清單呈現(nightbreak.plugins,預設op)。不帶參數的/nightbreak只會印出用法說明行。/nightbreaklogin [token]和/nightbreaklogout— 將伺服器連結到 Nightbreak 帳號,以及解除連結。不帶權杖時,/nightbreaklogin會印出一個用來核准伺服器的 nightbreak.io 連結(nightbreak.login,預設op)/logify— 將當前伺服器日誌上傳至 mclo.gs(logify.*,預設op)/betterfoodchangelog [dismiss|disable]— 顯示未讀的 BetterFood 發行說明。此指令會依外掛程式加上命名空間,因此不會衝突;若/betterfoodchangelog不知何故已被佔用,它會退回使用betterfood:betterfoodchangelog形式的標籤。
更新日誌指令僅限管理員且僅限遊戲內使用:對於沒有管理員權限的發送者(或控制台),它會回覆「This command is only available to plugin administrators in-game.」。玩家若為 op,或擁有 betterfood.admin 或 betterfood.*,即視為管理員。除非管理員執行過 /betterfoodchangelog disable,否則他們在登入後不久也會收到未讀發行說明的提醒。已讀/已略過狀態會逐玩家儲存在 plugins/BetterFood/nightbreak-changelogs.yml 中。
共用流程請參見 Nightbreak 權杖、Nightbreak 設定 和 更新日誌通知。
權限
betterfood.user(預設true)——管控自動進食監聽器與玩家切換選項。betterfood.admin(預設op)——管控外掛程式更新的下載與套用、設定選單與推薦外掛程式指令。它同時也算是更新日誌指令的管理員權限。nightbreak.plugins、nightbreak.login和logify.*(皆預設op)——由隨附的 MagmaCore 工具為上述共用指令註冊,並未宣告在 BetterFood 的plugin.yml中。
其他整合
- 已啟用 bStats 統計資料(外掛程式 ID
4557)——若要選擇不參與,請透過 bStats 設定全域停用。 - BetterFood 現在隨附共用的 MagmaCore 工具。它會產生含有兩個鍵的
config.yml:nightbreak.autoDownloadPluginUpdates切換選項(預設false)與nightbreak.applyPluginUpdatesWithoutRestart(預設never,請參閱免重新啟動的外掛程式更新),並在啟動幾分鐘後向nightbreak.io檢查是否有更新版本(該延遲會逐外掛程式錯開,避免多個 MagmaGuy 外掛程式同時對外請求),之後大約每小時一次。只有在結果有變動時才會記錄,因此主控台不會每小時被洗版。BetterFood 未傳遞任何 SpigotMC 資源 ID,其目錄項目也沒有,因此沒有 SpigotMC 版本後備機制。 - 在有待處理更新期間登入的管理員(op),會在登入後幾秒收到附有下載頁面連結的聊天通知。只要已安裝的版本落後,每次登入都會發送。
- 帳號權杖存放在外掛程式資料夾之外的共用
plugins/MagmaCore/nightbreak.yml中,因此只要連結一次,就能涵蓋伺服器上每個 MagmaGuy 外掛程式。 - 沒有外部外掛程式相依性;食物邏輯僅監聽原版的
FoodLevelChangeEvent。
免重新啟動的外掛程式更新
已下載的外掛程式更新會在伺服器的更新資料夾中等待。/betterfood applypluginupdate 可在不重新啟動伺服器的情況下換上更新:BetterFood 會被停用,其 jar 會被替換,接著載入並啟用新版本。玩家的自動進食與訊息切換設定儲存在玩家身上,因此會保留下來。
在以下情況下,此指令會拒絕執行並顯示訊息:沒有已下載的更新在等待、等待中的更新並未比執行中的版本新或其 jar 無效、有其他作者的外掛程式依賴(depend)或軟依賴(soft-depend)BetterFood,或已有另一個外掛程式替換作業正在執行。若新版本無法啟用,會重新載入先前的 jar,更新則保留在更新資料夾中,待下次重新啟動時套用。
config.yml 中的 nightbreak.applyPluginUpdatesWithoutRestart 決定任何外掛程式更新下載完成後立即發生的行為,無論下載來自 downloadpluginupdate、downloadall、設定選單或自動下載:
| 值 | 行為 |
|---|---|
never | 預設值。更新會等到下次重新啟動。擁有 betterfood.admin 或 betterfood.* 的在線管理員會收到需要重新啟動的通知,並看到 applypluginupdate 指令 |
when-empty | 若沒有玩家在線則立即套用更新,否則每 30 秒檢查一次,並在伺服器無人時套用 |
immediately | 下載完成後立即套用更新 |
其他任何值都視為 never。
從原始碼建置
BetterFood 使用 JDK 21 和內附的 Gradle wrapper 建置。在儲存庫根目錄執行:
./gradlew shadowJar
在 Windows 上請執行 .\gradlew.bat shadowJar。外掛程式 JAR 會輸出到 build/libs/BetterFood.jar。如果設定了 MC_DIST_DIR 環境變數或 mcDistDir Gradle 屬性,建置時也會把 JAR 複製到該資料夾。測試套件在 Java 25 工具鏈上執行,因此 ./gradlew build 也需要 JDK 25。
MagmaCore 會被 shade 進 JAR,並優先從 Maven Local 解析,再使用 MagmaGuy 的 Maven 儲存庫。當原始碼需要比已發布版本更新的 MagmaCore 變更時,請先將 MagmaCore 發布到 Maven Local,做法請見在函式庫變更後建置使用方。
Java 外掛程式 API 頁面說明了 Maven 構件,以及整合可以依賴哪些內容。