跳至主要內容

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 構件,以及整合可以依賴哪些內容。