Weather
MoripaFishing-Integration-Weather
Core (MoripaFishing) に依存する公式 Integration。
Core が決めた 天候とゲームルール ADVANCE_WEATHER を釣りワールドへ適用する。
Core は天候を 決定 するだけで、Bukkit ワールドへは書き込まない。
本 Integration は WorldStateApplier (WeatherApplier) を ServicesManager に登録し、
Core から届く WorldState のうち weather と doWeatherCycle だけを適用する。
時刻・ADVANCE_TIME・スポーン・ボーダーは WorldLifecycle が担う。
仕組みの全体像は Integration とは を参照してほしい。
天候ごとの適用内容
weather | setStorm | isThundering | バリア天井 |
|---|---|---|---|
THUNDERSTORM | true | true | なし |
RAINY | true | false | なし |
CLOUDY | true | false | あり |
SUNNY | false | false | なし |
FOGGY | false | false | なし |
SNOWY | false | false | なし |
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 が自動で解除する。
導入
-
plugins/に Core とリリースのMoripaFishing-weather-<version>.jarを配置する (プラグイン名はMoripaFishing-Integration-Weather)。 -
サーバーを起動する。本 Integration は Core に必須依存しているため、Core の後にロードされる。 Core が無いと本 Integration は起動しない。
-
起動時に次のログが出る。
[MoripaFishing-Integration-Weather] MoripaFishing-Integration-Weather enabled.
本 Integration はコマンド・権限ノード・設定ファイルを持たない。
未導入時の Core の振る舞い
天候は Core が決め続けるため、本 Integration が無くても魚の抽選条件には天候が反映され、
FishingWorldWeatherChangeEvent も発火する。ワールドの嵐・雷・ADVANCE_WEATHER は変更されない。