Skip to Content
MoripaFishing

Weather

MoripaFishing-Integration-Weather

Core (MoripaFishing) に依存する公式 Integration。 Core が決めた 天候とゲームルール ADVANCE_WEATHER を釣りワールドへ適用する。

Core は天候を 決定 するだけで、Bukkit ワールドへは書き込まない。 本 Integration は WorldStateApplier (WeatherApplier) を ServicesManager に登録し、 Core から届く WorldState のうち weather と doWeatherCycle だけを適用する。 時刻・ADVANCE_TIME・スポーン・ボーダーは WorldLifecycle が担う。

仕組みの全体像は Integration とは を参照してほしい。

天候ごとの適用内容

weathersetStormisThunderingバリア天井
THUNDERSTORMtruetrueなし
RAINYtruefalseなし
CLOUDYtruefalseあり
SUNNYfalsefalseなし
FOGGYfalsefalseなし
SNOWYfalsefalseなし

FOGGY と SNOWY は Bukkit の天候で表現できないため、晴れとして適用する。

ADVANCE_WEATHER

WorldState.doWeatherCycle の値を、状態が届くたびにそのまま書き込む。 値は Core が決め、ワールドへ天候を適用させるとき (weather が null でないとき) は false、 それ以外は true になる。どの方針でどちらになるかは 気候の設定 を参照してほしい。

weather が null のとき

天候の方針が vanilla の場合などは、weather が null (天候を変更しない) で届く。 このとき本 Integration は嵐・雷の状態には触れず、バニラや他のプラグインに任せる。 直前まで自分が CLOUDY を駆動していたワールドでは、バリア天井だけを取り消す。

CLOUDY のバリア天井

CLOUDY は嵐 (setStorm(true)) として適用しつつ、各プレイヤーの頭上に Paper の Player.sendMultiBlockChange で 見た目だけのバリア を送る。クライアントは屋根の下にいると判定するため、 空は暗いまま雨粒だけが当たらなくなる。実ブロックもバイオームも変更しないため、草・水・空の色は変化しない。

  • 天井の高さは y=200 を基準とし、ワールドが低い場合は maxHeight - 1 に丸める。
  • プレイヤーを中心とした水平半径 12 ブロックのパッチとして送り、20 tick (1 秒) ごとに送り直す。 パッチから外れたセルには本来のブロックを送り直す。
  • 天井を送るのは CLOUDY を駆動中のワールドにいるプレイヤーだけ。別の天候へ切り替わったり、 プレイヤーが別のワールドへ移動したりした時点で取り消す。退出したプレイヤーのパッチ状態は破棄する。

バリア天井は 見た目のみ で、サーバーのワールドには存在しない。ProtocolLib 等は不要で、Paper 標準 API のみで完結する。

無効化時の後片付け

本 Integration の無効化時 (onDisable) に、天候を駆動していたワールドの嵐と雷を止め、バリア天井を取り消す。 ゲームルールはそのままにする。Core が次の起動時に改めて正しい値を送るためである。 ServicesManager の登録は Bukkit が自動で解除する。

導入

  1. plugins/ に Core とリリースの MoripaFishing-weather-<version>.jar を配置する (プラグイン名は MoripaFishing-Integration-Weather)。

  2. サーバーを起動する。本 Integration は Core に必須依存しているため、Core の後にロードされる。 Core が無いと本 Integration は起動しない。

  3. 起動時に次のログが出る。

    [MoripaFishing-Integration-Weather] MoripaFishing-Integration-Weather enabled.

本 Integration はコマンド・権限ノード・設定ファイルを持たない。

未導入時の Core の振る舞い

天候は Core が決め続けるため、本 Integration が無くても魚の抽選条件には天候が反映され、 FishingWorldWeatherChangeEvent も発火する。ワールドの嵐・雷・ADVANCE_WEATHER は変更されない。

On this page