CannonRTP API
生成済みの Java リファレンスではクラス、メソッド、シグネチャを検索でき、各モジュールのソースバージョンとコミットも確認できます。
CannonRTP は、他のプラグインがフックできる 3 つの Bukkit イベントを公開しています。すべてのイベントは com.magmaguy.cannonrtp.api パッケージにあり、メインサーバースレッドで発火します。
リスナーを登録するには通常の Bukkit @EventHandler を登録します -- 別途の登録手順は不要です。
CannonRTPLaunchEvent
プレイヤーがキャノン発射シーケンスを開始しようとしているまさにその瞬間、ビジュアルやエフェクトが適用される 前 に発火します。キャンセル可能です。
| プロパティ | 型 | 説明 |
|---|---|---|
player | Player | キャノンを起動したプレイヤー |
cannonId | String | キャノンの設定 ID (.yml を除いたファイル名) |
cannonDisplayName | String | キャノンの displayName フィールド |
cannonLocation | Location | 起動された正確な配置位置 |
destination | Location | この発射のために選ばれた、事前検証済みの安全な着地地点 |
イベントをキャンセルする と発射は完全に中止されます: プレイヤーはその場にとどまり、エフェクトは適用されず、組み込みの発射クールダウンも開始されず、目的地はキャノンキューの先頭に戻されます。常にキャンセルされるイベントをプレイヤースキャンのティックごとに発火させ続けないよう、CannonRTP はそのプレイヤーがトリガー内にとどまっている間、再試行の間隔を 1 秒から最大 30 秒まで段階的に延ばします。トリガーから離れるか、受理された発射が完了すると、このバックオフは解除されます。リージョンベースのブラックリスト、クールダウンプラグイン、経済システムによるゲート、PvP リージョンチェックなどに有用です。
@EventHandler
public void onLaunch(CannonRTPLaunchEvent event) {
if (event.getPlayer().getWorld().getName().equals("event_world")) {
event.setCancelled(true);
}
}
CannonRTPLocationValidationEvent
事前読み込み検索中に各着地候補の検証時に発火し、発射を確定する際(エアドロップのテレポート直前)に、キューから取り出した目的地を再検証するときにも 再度 発火します。事前読み込みではワールドボーダー、地表、危険なマテリアル、保護機能のチェックに通過した後に発火します。発射確定時には現在のワールド参照、着地地点の縦方向の空間、保護機能を再検証してから発火しますが、ワールドボーダーのチェックは繰り返しません。
| プロパティ | 型 | 説明 |
|---|---|---|
cannonId | String | 検索を行っているキャノンの設定 ID |
cannonDisplayName | String | キャノンの displayName フィールド |
candidate | Location | 検討中の候補着地地点 |
このイベントは Bukkit の意味でのキャンセル可能ではありません。候補を拒否するには以下を呼び出します:
event.setRejected("inside arena spawn protection");
事前読み込み中であれば、CannonRTP は内部チェックに失敗した場合と同様にその候補を破棄し、検索を続行します。渡した理由は、キューへの地点の追加や検索の枯渇など、後のステータス変化で置き換えられるまで、キャノンの /wc status の詳細に Rejected by another plugin: <reason> として表示されます。コミット時に拒否した場合は、リスナーがもはや受け入れない地点へプレイヤーをテレポートするのではなく、発射をキャンセルしてプレイヤーを復帰させます。リスナーは、組み込みの保護アダプターを超えるカスタムリージョンルールを実装できます。
注: どちらの発火もメインスレッドで行われ、事前読み込みの試行は全体でティックあたり 1 回、アクティブキャノン間でラウンドロビンに実行されます。ハンドラーは高速に保ってください。
CannonRTPLandingEvent
プレイヤーが目的地にテレポートされ、発射シーケンスが完全に完了した後に発火します。この時点で LANDING フェーズが実行され、CannonRTP 自身が付与した低速落下が解除され、衝撃エフェクトが再生されています。以前の効果は残り時間を保って復元される場合があり、別の要因で後から付与された効果は変更しません。キャンセル不可 -- 発射前に拒否するには CannonRTPLaunchEvent を使用してください。
| プロパティ | 型 | 説明 |
|---|---|---|
player | Player | ちょうど着地したプレイヤー |
cannonId | String | プレイヤーを発射したキャノンの設定 ID |
cannonDisplayName | String | キャノンの displayName フィールド |
destination | Location | プレイヤーが送られた目的地のコピー |
初到着時の報酬付与、後続エフェクトのトリガー、リージョン権限の付与、到着の通知、分析などに有用です。
スレッディングとライフサイクル
- 3 つのイベントすべてがメインスレッドで配信されます。
CannonRTPLocationValidationEventはグローバルな事前読み込みティック中に配信されるため(サーバーティックあたり 1 試行、アクティブキャノン間でラウンドロビン)、リスナーで重い処理を行うとキャノンがキューを充電する速度が目に見えて遅くなります。さらに発射ごとに 1 回、コミット時にキューに入っていた目的地が再検証される際にも配信されます。CannonRTPLaunchEventはLaunchSequenceが構築される直前に配信されるため、変更した状態(ポーション効果、インベントリ、ゲームモード)は Searching フェーズの開始前に反映されます。CannonRTPLandingEventは発射ごとに 1 回、衝撃エフェクト後の LANDING フェーズティックで配信されます。
保護チェックヘルパー
メインのプラグインクラスは、/wc probe が使用する保護チェックも公開しています:
boolean allowed = CannonRTP.getInstance().isPotentialLandingLocationAllowed(location);
failOpenOnProtectionErrors に従い、有効なすべての保護連携がその地点を許可した場合に true を返します。地形、エアドロップの縦方向の空間、ワールドボーダー、CannonRTPLocationValidationEvent のリスナーはチェックしません。起動時に CannonRTP がキャノンを読み込むまでは false を返します。CannonRTP は com.magmaguy.cannonrtp.CannonRTP です。
cannonId の扱い
cannonId は、すべての管理者コマンド(/wc place、/wc target など)で使用されるのと同じ ID であり、.yml を除いたキャノン設定のファイル名と一致します。1 つのキャノン設定がワールド内で多数の配置を制御する場合がありますが、それらはすべて同じ cannonId と cannonDisplayName を共有します。正確な配置が必要な場合は、CannonRTPLaunchEvent の cannonLocation を使用してください。