
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がすべての6つのランタイムをカバーし、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 を実行すると、ページネーションされたホバー&クリックヘルプメニューが開きます。
オプションの引数は名前を付ける必要があります。 位置的に渡すと、"unexpected argument"で失敗します:
/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の書き込みを一つの依存関係順のリロードフラッシュにバッチ処理します。これにより、マルチモジュールビルドが5つの別々のリロードをトリガーしません。
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がすべて確認された後にのみ昇格されます。ファイル名はサニタイズされ、プラグインフォルダを脱出するパスは拒否されます。デフォルトは256MBの上限と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の外でバインドされたもの
外部接続 独自のライフタイムを持つソケットやプール
プラグイン固有の内部 他のプラグインが所有するキャッシュやレジストリ
重要または不明瞭なプラグインは無視リストに入れ、イテレーション中にタイミングログをオンにし、状態を安全に再構築できない場合はサーバーを再起動してください。










