メインコンテンツまでスキップ

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)を表示します

発射の流れ

使用前に、対象ワールドの設定済み検索範囲を生成または探索してください。CannonRTPは既存チャンクを読み込み、新しい地形は生成しません。未探索の検索範囲では目的地が得られない場合があります。

発射シーケンスは 5 フェーズの状態マシン(SEARCHING -> FIRING -> TELEPORTING -> DROPPING -> LANDING)で制御されます。プレイヤーが対象キャノンのトリガー半径に入ると:

  1. CannonRTP は cannonrtp.use を確認します。
  2. キャノンの任意の requiredPermission を確認します。
  3. プレイヤーごとの発射クールダウン(runtime.launchCooldownSeconds、デフォルト 30 秒)を確認します。このゲートはすべてのキャノンにまたがって適用され、キューに入った目的地を消費しません。
  4. キャノンが少なくとも 1 つの着地地点を事前読み込み済みでキューに持っていることを検証します。(無効化されたキャノン、アンロードされたワールドにあるキャノン、アンロードされたチャンクにあるキャノンは、そもそもここまで到達しません -- ティックループから完全に除外されているため、まったく起動できません。)
  5. そのキャノンのキューから 1 つの事前読み込み済み安全着地地点を消費します。
  6. CannonRTPLaunchEvent (キャンセル可能) を発火させます。リスナーがキャンセルした場合、目的地はキューに戻され、クールダウンも開始されません。
  7. Searching フェーズ (デフォルト 42 ティック、launchWarmupTicks で設定可能): プレイヤーに浮遊効果が付与され、カスタムモデルが有効な場合はキャノンが fire アニメーションを再生し、ランダム化された座標プレビューがタイトル/サブタイトルに点滅表示されます。モデルが有効な間はアニメーションがきれいに見えるよう、プレイヤーには透明化も付与されます。
  8. Firing フェーズ (デフォルト 45 ティック、verticalBoostTicks で設定): 浮遊効果/透明化が解除され、発射音が再生され、炎+煙+爆発が発生し、毎ティック verticalBoostVelocity が適用されます。本当の目的地座標が公開されます。
  9. Teleporting フェーズ (1 ティック): キューに入っていた目的地が再検証されます(地形の列、保護プラグイン統合、API リスナー)。それでも通過した場合、プレイヤーはその真上ちょうど 50 ブロックの位置にテレポートされ、低速落下が適用されます。このエアドロップ高度がクランプされることはありません -- 着地バリデーターが到着ブロックはワールド最大高度より下にあることをすでに保証しており、再検証に通らなくなった目的地は発射をキャンセルしてプレイヤーを復帰させます。
  10. Dropping フェーズ: プレイヤーは煙のトレイル (LARGE_SMOKE + CAMPFIRE_SIGNAL_SMOKE) を残しながら降下します。
  11. Landing フェーズ: プレイヤーが地面に触れた時点で開始されます。低速落下が解除され、衝撃エフェクト(雲の衝撃波、炎のリング、塵の演出)が再生され、CannonRTPLandingEvent が発火します。逆に降下が最大継続時間(slowFallingSeconds × 20 ティック)を超えた場合は、CannonRTP がプレイヤーを復帰させ、着地イベントは発火しません。

着地の安全ルール

地点が事前読み込みキューに受け入れられる前に、現在のコードは以下を順番にチェックします:

  • ターゲットワールドがロードされている(ロードされていない間、キャノンは事前読み込みを停止し、Target world <name> is not loaded. と報告します)
  • 検索中心が解決できる -- 設定された searchCenter、なければキャノン自身の位置(ターゲットワールド内にある場合)、それもなければターゲットワールドのスポーン地点
  • 候補地点がワールドボーダー内にある
  • 候補のチャンクがロードされている(生成せずにオンデマンドでロード)
  • 候補列に最上位の非空気ブロックが存在する
  • 着地地点の直下の表面ブロックが固体で液体でない
  • その表面ブロックが設定された危険な地面マテリアルリストに含まれず、ネザーの岩盤天井でもない
  • 着地地点がワールド最小高度以上にあり、その 51 ブロック上の到着ブロックがワールド最大高度より下に収まる
  • 52 ブロックのエアドロップ列(着地地点から到着時の頭部ブロックまで)のすべてのブロックが空気または通過可能である
  • その列のいずれのブロックも、設定された危険な身体マテリアルリストに含まれない
  • 有効化されたすべての保護プラグイン統合が地点を許可する
  • いずれの CannonRTPLocationValidationEvent リスナーも候補を拒否しない

ネザーでは、CannonRTP は岩盤天井を拒否し、エアドロップ列全体が安全な、露出した洞窟の床を下方向に探索します。これにより、プレイヤーを天井の上に落としたり固い地形の中を通過させたりすることなく、ネザーをターゲットにできます。

検索試行は全体でティックあたり 1 回(20/秒)にレート制限され、すべてのアクティブキャノン間でラウンドロビン方式で公平に共有されます。各キャノンには独自のタイムアウトカウンタ(searchTimeoutAttempts、デフォルト 100、最小 10)があります。

キャノンの状態

各キャノンには /wc status または /wc list で確認できる内部状態があります:

表示内部状態意味
Disabled--キャノンが設定で明示的に無効化されている
ChargingSEARCHING (キュー空)最初の安全地点バッチを事前読み込み中
MaintainingSEARCHING (キュー非空)いくつかの地点を保持しているが、消費されたスロットを補充中
ReadyREADYプレイヤーを発射するのに十分な事前読み込み地点(chargedLocationsPerCannon 以上)を保有している
ExhaustedEXHAUSTED予備を満たせないまま searchTimeoutAttempts を使い切った

内部の検索状態はちょうど 3 つの値(READYSEARCHINGEXHAUSTED)のいずれかです。Disabled はそれが参照される前に判定され、Charging / MaintainingSEARCHING の 2 通りの表示にすぎません。ReadyExhausted より優先されます -- 直近の検索ウィンドウがタイムアウトしていても、充電済みの予備を保持しているキャノンは Ready と表示されます。

「設定が不正」という独立した状態はありません。キャノンの targetWorld を解決できない場合、キャノンは現在の検索状態のラベルを保ったまま、/wc status$reason 列が Target world <name> is not loaded. になります。(statusLabels.invalid というメッセージキーは messages.yml に存在しますが、現在のビルドでこれをレンダリングするコードはありません。)

キャノンは、キューに少なくとも 1 つの目的地があればプレイヤーを発射します。chargedLocationsPerCannon のしきい値は視覚的な READY ラベルにのみ影響します。

動作要件

  • Minecraft: plugin.ymlapi-version: 1.21.4 を宣言しています。現在のソースツリーは Spigot 26.2-R0.1-SNAPSHOT API に対してビルドされています
  • Java: 21
  • 推奨サーバーソフトウェア: Paper または互換性のある現行フォーク
  • MagmaCore: 2.2.0 以降(共有ライブラリ、プラグインにシェード化されています)
  • 任意の依存関係: FreeMinecraftModels (3D アニメーションキャノンモデル用)

レジリエンス

CannonRTP は、ワールドおよびチャンクのライフサイクルイベントを越えて、ビジュアルとキューを一貫した状態に保ちます:

  • キャノンのチャンクがアンロードされると、ラベルとモデルがデスポーンします。チャンクのリロード時に再スポーンします
  • キャノンのワールドがアンロードされると、キャノンは一時停止します。ワールドが再度ロードされると復帰します
  • セッション中に FreeMinecraftModels が有効化または無効化されると、モデルキャッシュが無効化され、次のティックでビジュアルが更新されます
  • エアドロップのテレポート前に、キューに入っていた目的地が地形、保護プラグイン統合、API リスナーに対して再チェックされます。安全でなくなっていた場合、発射は古い座標に踏み切るのではなくプレイヤーを復帰させます
  • 発射後のクリーンアップでは、CannonRTP が依然として所有している浮遊効果・透明化・低速落下だけを解除し、一時的に置き換えていた古い効果は復元されます。他のプラグインが後から設定した状態を消すことはありません
  • 目的地のワールドがアンロードされて発射を続行できない場合、CannonRTP はプレイヤーをキャノンの座席、または他のロード済みワールドのスポーン地点へ復帰させ、安全な復帰先ワールドがないときは低速落下を維持します

始めに