PLUGINv3.0.2-1.20.1-26.2 · updated 2026年9月11日

BileTools - 更快測試插件

暫無評分
CREATED BYVolmitSoftware7 plugins

GITHUB  •  DOCUMENTATION  •  DISCORD

Overview - what BileTools does

BileTools 監控您的插件目錄並驅動運行時生命週期變更,因此重建會落在運行中的伺服器上,而不是重新啟動。

  • 自動熱重載。 重新編譯現有插件 jar,BileTools 自動檢測內容變更。

  • 熱插拔。 將新的 jar 放入插件目錄中,並在不完全重新啟動的情況下排隊進行運行時加載。

  • 自動卸載。 刪除跟蹤的 jar,並卸載其插件。

  • 生命週期命令。 從 /bile 命令樹手動加載、卸載、重新加載、安裝和卸載。

  • 依賴關係感知。 依賴的插件在替換周圍卸載和重新加載,而不是盲目重新加載一個 jar。

  • 本地插件庫。 每個 BileTools 看到的 jar 都按版本存檔,並且相同的文件夾是 /bile install 讀取的。備份和回滾是相同的功能。

  • 遠程部署。 將選定的 jar 更改推送到其他配置的伺服器,通過經過身份驗證、大小限制、SHA-256 驗證的傳輸。

檢測,簡而言之: 大小或時間戳變更僅喚醒監視器。 jar 的 SHA-256 決定是否實際重新加載,因此您觸摸但未更改的 jar 被忽略。

BileTools 是一個開發工具。 它故意在運行時操縱插件生命週期狀態。這正是使開發循環快速的原因,也是為什麼它應該在開發和測試伺服器上。熱重載不是在運行伺服器上進行乾淨重啟的替代品。

相容性 - 運行時和 Java

一個 jar 覆蓋所有六個運行時,Minecraft 1.20.1 到當前的 26.x

  • Paper 通過伺服器的公共 PluginManager 加載

  • Purpur 相同的 Paper 家族加載和卸載路徑

  • Leaf Paper 家族分支,像 Paper 一樣處理

  • Folia 區域化調度,BileTools 宣告支持 folia

  • Canvas Folia 分支,相同的區域化規則

  • Spigot 通過 plugin.yml 加載;僅運送 paper-plugin.yml 的 jar 被拒絕

Java: Java 17 用於 Minecraft 1.20.1+,Java 25 用於 26.x+。匹配您的伺服器已經要求的版本。

Folia 和 Canvas: 在區域化伺服器上進行熱重載本質上更脆弱。未聲明支持 folia 的第三方插件在熱加載時仍可能失敗。

命令和權限

根命令是 /biletools。別名: /bile/bi/b

/bile load <plugin>                    加載插件 jar 從插件目錄
/bile unload <plugin>                  卸載已安裝的插件
/bile reload <plugin>                  重新加載已安裝的插件
/bile uninstall <plugin>               刪除插件 jar 從插件目錄
/bile install <plugin> [version=..]    從 BileTools 庫安裝插件
/bile library [plugin=..]              列出庫插件,或一個插件的版本

一個權限涵蓋整個樹:

bile.use     給予對 BileTools 的訪問     默認: op

手動命令始終繞過監視器過濾器。標籤完成建議已安裝的插件、庫插件和存儲版本。運行 /bile 單獨打開一個分頁式的懸停和點擊幫助菜單。

可選參數必須命名。 位置傳遞會因 "意外參數" 而失敗:

/bile install MyPlugin                   成功  (默認為 version=latest)
/bile install MyPlugin version=1.4.2     成功
/bile install MyPlugin version=latest    成功
/bile install MyPlugin 1.4.2             失敗
/bile library                            成功  (列出所有)
/bile library plugin=MyPlugin            成功
/bile library MyPlugin                   失敗

配置 - 完整的默認 config.yml

remote-deploy:
  slave:
    slave-enabled: false
    slave-port: 9876
    slave-payload: pickapassword
  master:
    master-enabled: false
    master-deploy-to:
    - yourserver.com:9876:password
    master-deploy-signatures:
    - MyPlugin
    - AnotherPlugin
  socket-timeout-ms: 15000
  max-transfer-bytes: 268435456
archive-plugins: true
watcher:
  idle-poll-ticks: 20
  active-poll-ticks: 5
  fingerprint-debounce-ticks: 8
  ignore:
  - LuckPerms
  - Vault
  - ProtocolLib
  - packetevents
  - WorldGuard
  - CoreProtect
  - spark
  only: []
  coalesce-window-ticks: 10
observability:
  log-timings: true
lifecycle:
  health-check: true

每個選項的作用

  • watcher.ignore 自動熱插拔、重載和卸載將跳過的插件名稱。默認值是通常在開發盒上自動重載時危險或無用的東西。

  • watcher.only 當此列表不為空時, 這些插件將自動管理。在繁忙的伺服器上積極開發一個或兩個項目時很有用。

  • watcher.active-poll-ticks / idle-poll-ticks 監視器在變更到達時掃描的頻率,與目錄穩定後的頻率相比。

  • watcher.fingerprint-debounce-ticks jar 的指紋必須保持穩定的時間,才能開始生命週期工作。這可以防止半寫的 jar 被加載。

  • watcher.coalesce-window-ticks 將附近的 jar 寫入批次合併為一個依賴有序的重載刷新,因此多模塊構建不會觸發五次單獨的重載。

  • archive-plugins 在替換之前將每個插件 jar 存檔到庫文件夾中。

  • lifecycle.health-check 在加載或重新加載後,驗證插件實際上已註冊並啟用。失敗的操作將標記插件為髒並暫停自動重載。

  • observability.log-timings 記錄每個操作的每階段時間(卸載、依賴、加載、健康)。

插件庫和回滾

plugins/BileTools/library/<PluginName>/<version>.jar

archive-plugins 開啟時,BileTools 看到的每個插件 jar 都會在被替換之前複製到這裡。這意味著庫同時作為回滾歷史,/bile library 列出您擁有的,/bile install <plugin> version=<version> 將任何內容放回運行中的伺服器。

遠程部署

可選。讓主伺服器將選定的 jar 更改推送到一個或多個從伺服器。

  • 在每個接收伺服器上:設置 remote-deploy.slave.slave-enabled: true,選擇一個端口並設置 slave-payload 為共享密碼。

  • 在發送伺服器上:設置 remote-deploy.master.master-enabled: true,在下面的形式中列出每個目標,並在 master-deploy-to 中列出要轉發的插件 master-deploy-signatures

master-deploy-to:
- host:port:password

傳輸會落在一個臨時的 .part 文件中,只有在密碼、文件名、傳輸大小和 SHA-256 都檢查通過後才會提升。文件名會被清理,任何會逃脫插件文件夾的路徑都會被拒絕。默認值是 256 MB 限制和 15 秒的套接字超時。

語言 - 所有 17 種區域代碼

默認選擇英語。要切換,請設置 localeplugins/BileTools/language.yml

locale: en_US

de_DE    German (Germany)
es_ES    Spanish (Spain)
fi_FI    Finnish (Finland)
fr_FR    French (France)
he_IL    Hebrew (Israel)
it_IT    Italian (Italy)
ja-JP    Japanese (Japan)
ko_KR    Korean (South Korea)
lt_LT    Lithuanian (Lithuania)
nl_NL    Dutch (Netherlands)
pl_PL    Polish (Poland)
pt_PT    Portuguese (Portugal)
ru_RU    Russian (Russia)
tr_TR    Turkish (Turkey)
vi_VI    Vietnamese (Vietnam)
zh_CN    Chinese (Simplified)
zh_TW    Chinese (Traditional)

您也可以在不觸及包的情況下覆蓋單獨的行。您在 language.yml 中的 messages: 部分下添加的任何內容都會生效;您留下的所有內容都會回退到選定的語言,然後回退到英語。該文件在保存時會熱加載。

重載實際運行的方式

每個操作 熱插拔、重載、安裝、卸載、遠程部署:通過一個序列化隊列進行,具有去重鍵,在專用的插件操作線程上。生命週期變更本身始終在全局或主線程上運行。

detect -> stabilize -> fingerprint -> queue -> unload -> load -> dependents -> health check

實現 VolmLib 的 ReloadAware 合約的插件在其任務被取消和監聽器被拆除之前會獲得一個 HOT_RELOAD 或 HOT_UNLOAD 回調,這樣它們可以在調度器仍然存活時排出正在進行的工作。

卸載會將插件從實時命令圖、服務、消息通道和查找表中刪除,然後關閉其類加載器,這就是為什麼命令和標籤完成會正確返回,而不是半連接的原因。

生命週期等待帶有明確的超時。卡住的操作會顯示為失敗,並將插件標記為髒,而不是阻塞隊列。打開 observability.log-timings 以查看每個操作的每階段時間。

熱重載的已知限制

並非每個插件都能夠乾淨地熱重載,BileTools 也不假裝如此。一般來說,無法在類重載中存活的事物:

  • 靜態狀態 跨類重載持有的字段

  • 背景線程 在插件調度器外部啟動的工作

  • 本地資源 任何綁定在 JVM 外部的資源

  • 外部連接 套接字和擁有自己生命週期的池

  • 插件特定內部 其他插件擁有的緩存和註冊表

將關鍵或不常見的插件保留在忽略列表中,開啟計時日誌以便在迭代時使用,當狀態無法安全重建時,重新啟動伺服器。

BileTools - 更快測試插件FREE

準備好創造驚人的作品了嗎?

加入MCModels社群,今天就開始打造您的夢想專案。