
BileTools - 更快測試插件
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 種區域代碼
默認選擇英語。要切換,請設置 locale 在 plugins/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 外部的資源
外部連接 套接字和擁有自己生命週期的池
插件特定內部 其他插件擁有的緩存和註冊表
將關鍵或不常見的插件保留在忽略列表中,開啟計時日誌以便在迭代時使用,當狀態無法安全重建時,重新啟動伺服器。










