CannonRTP (WorldCannon)
CannonRTP は、Minecraft サーバー向けのマルチキャノン式ランダムテレポートプラグインです。「WorldCannon」は古い名称/Wiki のセクション名で、プラグイン自体は Bukkit に CannonRTP として登録され、CannonRTP.jar として配布されます。プレイヤーや管理者に表示されるのもこの名称です。
主な名称情報:
- プラグイン名:
CannonRTP - ルートコマンド:
/cannonrtp - エイリアス:
/crtp,/wc - 権限:
cannonrtp.admin,cannonrtp.use - 設定フォルダ:
plugins/CannonRTP/
機能概要
CannonRTP は単一の固定ランチャーではなく、複数のキャノンによるランダム着地システムです。設定された各キャノンはワールド内の 1 か所または複数の場所に配置でき、各配置はプレイヤーがトリガー半径内に入るのを監視します。
各キャノンが行えること:
/wc createおよび/wc placeで複数回配置可能 -- 1 つのキャノン設定がすべての配置を制御します- キャノンごとのトリガー半径(デフォルト 1.75 ブロック)に入ったプレイヤーを監視します
- 設定されたターゲットワールド内の安全な着地地点をキューに事前読み込みして維持します(ワールドをまたいだターゲット指定もサポート)
- 危険な地形、ブロックされた空間、保護された土地、ワールドボーダー外の地点を拒否します
- キャノンごとに追加の権限を任意で要求できます
- 5 段階の演出シーケンスでプレイヤーを発射します
- FreeMinecraftModels の 3D アニメーションキャノンを表示します(キャノンごとの
customModelまたはグローバル優先順位リスト経由)。FMM が未インストールの場合は色変化する軌道パーティクルにフォールバックします - キャノンの上に、看板状の浮遊ステータスラベル(Ready / Charging / Maintaining / Exhausted / Disabled / Invalid)を表示します
発射の流れ
発射シーケンスは 5 フェーズの状態マシン(SEARCHING -> FIRING -> TELEPORTING -> DROPPING -> LANDING)で制御されます。プレイヤーが対象キャノンのトリガー半径に入ると:
- CannonRTP は
cannonrtp.useを確認します。 - キャノンの任意の
requiredPermissionを確認します。 - キャノンが有効で、有効な設定を持ち、少なくとも 1 つの着地地点が事前読み込みされていることを検証します。
- そのキャノンのキューから 1 つの事前読み込み済み安全着地地点を消費します。
CannonRTPLaunchEvent(キャンセル可能) を発火させます。リスナーがキャンセルした場合、着地地点はキューに戻され、キャノンは通常動作を再開します。- Searching フェーズ (デフォルト 42 ティック、
launchWarmupTicksで設定可能): プレイヤーに浮遊効果が付与され、カスタムモデルが有効な場合はキャノンがfireアニメーションを再生し、ランダム化された座標プレビューがタイトル/サブタイトルに点滅表示されます。モデルが有効な間はアニメーションがきれいに見えるよう、プレイヤーには透明化も付与されます。 - Firing フェーズ (デフォルト 45 ティック、
verticalBoostTicksで設定): 浮遊効果/透明化が解除され、発射音が再生され、炎+煙+爆発が発生し、毎ティックverticalBoostVelocityが適用されます。本当の目的地座標が公開されます。 - Teleporting フェーズ (1 ティック): プレイヤーは目的地の 50 ブロック上空(ワールド最大高度でクランプ)にテレポートされ、低速落下が適用されます。
- Dropping フェーズ: プレイヤーは煙のトレイル (
LARGE_SMOKE+CAMPFIRE_SIGNAL_SMOKE) を残しながら降下します。 - Landing フェーズ: プレイヤーが地面に触れた時点(または最大降下時間が経過した時点)で低速落下が早期に解除され、衝撃エフェクト(雲の衝撃波、炎のリング、塵の演出)が再生されます。
CannonRTPLandingEventが発火します。
着地の安全ルール
地点が事前読み込みキューに受け入れられる前に、現在のコードは以下を順番にチェックします:
- ターゲットワールドがロードされている
- 検索中心が有効である
- 候補地点がワールドボーダー内にある
- 候補のチャンクがロードされている(生成せずにオンデマンドでロード)
- 候補列に最上位の非空気ブロックが存在する
- そのブロックの上の足元と頭部のスペースが通過可能
- 表面ブロックが固体で液体でない
- 表面ブロックが設定された危険な地面マテリアルリストに含まれない
- 足元と頭部のブロックが設定された危険な身体マテリアルリストに含まれない
- 有効化されたすべての保護プラグイン統合が地点を許可する
- いずれの
CannonRTPLocationValidationEventリスナーも候補を拒否しない
検索試行は全体でティックあたり 1 回(20/秒)にレート制限され、すべてのアクティブキャノン間でラウンドロビン方式で公平に共有されます。各キャノンには独自のタイムアウトカウンタ(searchTimeoutAttempts、デフォルト 100、最小 10)があります。
キャノンの状態
各キャノンには /wc status または /wc list で確認できる内部状態があります:
| 表示 | 内部状態 | 意味 |
|---|---|---|
| Disabled | -- | キャノンが設定で明示的に無効化されている |
| Charging | SEARCHING (キュー空) | 最初の安全地点バッチを事前読み込み中 |
| Maintaining | SEARCHING (キュー非空) | いくつかの地点を保持しているが、消費されたスロットを補充中 |
| Ready | READY | プレイヤーを発射するのに十分な事前読み込み地点(chargedLocationsPerCannon 以上)を保有している |
| Exhausted | EXHAUSTED | 予備を満たせないまま searchTimeoutAttempts を使い切った |
| Invalid | INVALID_CONFIGURATION | 設定エラー(例: ターゲットワールドがロードされていない) |
キャノンは、キューに少なくとも 1 つの目的地があればプレイヤーを発射します。chargedLocationsPerCannon のしきい値は視覚的な READY ラベルにのみ影響します。
動作要件
- Minecraft API:
1.21.4(1.21.11までテスト済み) - Java:
21 - 推奨サーバーソフトウェア: Paper または互換性のある現行フォーク
- MagmaCore:
2.2.0以降(共有ライブラリ、プラグインにシェード化されています) - 任意の依存関係: FreeMinecraftModels (3D アニメーションキャノンモデル用)
レジリエンス
CannonRTP は、ワールドおよびチャンクのライフサイクルイベントを越えて、ビジュアルとキューを一貫した状態に保ちます:
- キャノンのチャンクがアンロードされると、ラベルとモデルがデスポーンします。チャンクのリロード時に再スポーンします
- キャノンのワールドがアンロードされると、キャノンは一時停止します。ワールドが再度ロードされると復帰します
- セッション中に FreeMinecraftModels が有効化または無効化されると、モデルキャッシュが無効化され、次のティックでビジュアルが更新されます