Skip to Content
MoripaFishing

FishManager

Dokka APIリファレンス

FishManagerは、魚データの登録・取得を行うマネージャーです。 アドオンからはMoripaFishingAPI#getFishManager()でインスタンスを取得できます。APIの取得方法はAPI利用ガイドを参照してください。

主なメソッド

メソッド戻り値説明
getAll()List<FishData>登録されている全ての魚を取得する
get(id)FishData?IDから魚を取得する。未登録の場合はnull
getByRarity(rarity)List<FishData>レアリティで魚を絞り込む
register(fish)Unit魚を登録する。同じIDの魚は置き換える
unregister(id)Boolean魚の登録を解除する。登録されていなかった場合はfalse

取得・登録で扱う型はFishDataです。抽選済みのサイズや価値を含むFishは別の型なので、混同しないよう注意してください。FishDataのスキーマは魚データの形式を参照してください。

register(fish)は登録前に検証を行い、レアリティが未登録・item.materialがアイテムとして使えない・worthの計算式が不正のいずれかの場合はIllegalArgumentExceptionを投げます。

読み込みのライフサイクル

FishManagerは起動時と/mf reloadのたびに、fish/配下のJSONを読み直します。読み直しでは保持している魚データがファイルの内容で丸ごと置き換わります。

register(fish)はメモリ上に追加するだけで、JSONファイルへは保存されません。 そのため、アドオンからプログラム的に登録した魚は/mf reloadやサーバー再起動で失われます。恒久的に追加したい場合はJSONファイルとして配置するか、MoripaFishingReloadedEventを購読して登録し直してください。

FishDrawer

魚の抽選はFishDrawerが担当します。MoripaFishingAPI#getFishDrawer()で取得でき、アドオンから任意のタイミングで抽選を実行できます。

メソッド戻り値説明
draw(world)Fish?指定した釣りワールドの条件でレアリティ・魚種・サイズ・価値を抽選する。候補が無ければnull
roll(data)Fish魚種を指定してサイズと価値だけを抽選する。レアリティが未登録ならIllegalArgumentException

draw(world)は次の手順で魚を決定します。

  1. 候補の絞り込み — enabledがtrueでweightが0より大きく、conditions.worldとconditions.weatherを満たす魚だけを候補にする
  2. レアリティ抽選 — 候補の魚がいるレアリティだけを対象に、各レアリティのweightに基づいて重み付き抽選する
  3. 魚種抽選 — 選ばれたレアリティの候補からFishData.weightに基づいて重み付き抽選する
  4. サイズと価値の決定 — 平均を(min + max) / 2、標準偏差を(max - min) / 6とする正規分布からサイズを生成してmin〜maxに丸め、価値の計算式で価値を求める

conditions.worldとconditions.weatherはどちらも空であれば「条件なし」として扱われます。天候が分からない釣りワールド(未定義のワールドなど)では、天候条件付きの魚は候補から外れます。

val fish = api.getFishDrawer().draw(FishingWorldId("default")) ?: return
logger.info("${fish.data.id.value}: ${fish.size}cm, ${fish.worth}")

On this page