Chum
撒き餌や餌のアイテムを作り、使ったときに魚が釣れる確率を変える公式 Addon です。
撒き餌の種類と効果はconfig.ymlで定義するため、コードを書かずに「周囲でレアな魚が釣れやすくなる撒き餌」や「付けたときだけ釣れる魚がいる餌」を用意できます。
この Addon は Core の公開 API(moripafishing-api)だけを利用します。魚を抽選する直前に発火するAnglerFishDrawEventで、抽選の候補(FishDrawPool)の重みを変更しています。
仕組みの詳細は抽選確率の変更を参照してください。
導入
- サーバーの
plugins/にリリースのMoripaFishing-Addon-Chum_<version>.jarを配置します(ファイル名はプラグイン名とバージョンからなります)。mpm を使う場合は/mpm add MoripaFishing-Addon-Chumで導入できます。 - サーバーを起動します。
paper-plugin.ymlでMoripaFishingを必須の依存として宣言しているため、Core より後に読み込まれます。Core が導入されていない場合、この Addon は読み込まれません。 - 初回起動時に、設定例を含む
plugins/MoripaFishing-Addon-Chum/config.ymlが生成されます。魚やレアリティの ID をサーバーに登録しているものに書き換えてから使ってください。
使い方
- 管理者が
/chum give <player> <chum> [amount]で撒き餌アイテムを渡します。 - プレイヤーが撒き餌アイテムをメインハンドに持って右クリックすると、アイテムを 1 個消費して効果が有効になります。空中とブロックのどちらを右クリックしても使えます。
- 効果が有効な間に魚が掛かると、その抽選の確率が変わります。
撒き餌アイテムは、アイテムに保存された撒き餌の ID(PDC)で判別します。表示名や見た目を変えても、同じ ID のアイテムは同じ撒き餌として扱います。 撒き餌アイテムを右クリックしたときは、ブロックの設置や食べるといったバニラの動作は行いません。オフハンドに持った撒き餌アイテムは使えません。 右クリックを押し続けたときに続けて消費しないよう、同じプレイヤーが同じ撒き餌を使った後の 1 秒間は、その撒き餌を使えません。
次の場合はアイテムを消費せず、メッセージで理由を伝えます。
- 範囲(
AREA)やワールド(WORLD)の撒き餌を、釣りワールドの外で使った場合 - 撒き餌の ID が
config.ymlから削除されている場合 - プレイヤーが
moripafishing.addon.chum.useの権限を持っていない場合
config.yml
生成されるconfig.ymlには、レアリティを釣れやすくする撒き餌と、餌限定の魚を釣れるようにする餌の 2 つの例が入っています。
maxMultiplier: 100.0
chums:
# 周囲で rare レアリティが釣れやすくなる撒き餌
rare_chum:
item:
material: PUFFERFISH
name: "<aqua>レアな撒き餌"
lore:
- "<gray>右クリックで撒くと、周囲 16 ブロックで"
- "<gray>5 分間 rare の魚が釣れやすくなります"
scope: AREA
radius: 16.0
durationSeconds: 300
rarityMultipliers:
rare: 2.0
# 使った本人の次の 3 回の釣果まで、餌限定の魚 golden_carp が釣れるようになる餌
golden_bait:
item:
material: GOLDEN_CARROT
name: "<gold>黄金の練り餌"
lore:
- "<gray>右クリックで付けると、次の 3 回の釣果まで"
- "<gray>黄金の鯉が釣れるようになります"
scope: ANGLER
charges: 3
durationSeconds: 600
fishWeights:
golden_carp: 5.0golden_carpのような餌限定の魚は、魚の定義でweightを 0 にしておきます。重み 0 の魚は通常の抽選では釣れませんが、fishWeightsで重みを与えると釣れるようになります。
詳しくは魚の定義と餌限定の魚を参照してください。
トップレベル
| フィールド | 型 | 説明 |
|---|---|---|
maxMultiplier | number | 有効な全ての撒き餌の倍率を掛け合わせた後の、レアリティごと・魚ごとの倍率の上限です。有限かつ 1 以上でなければなりません(デフォルト: 100.0) |
chums | map | 撒き餌の ID と定義の組です。ID には英小文字・数字・_・-だけを使えます(デフォルト: 空) |
撒き餌の定義
| フィールド | 型 | 説明 |
|---|---|---|
item.material | string | アイテムの Material 名(例: PUFFERFISH)。アイテムとして使える Material を指定します |
item.name | string | アイテムの表示名(MiniMessage 形式) |
item.lore | string[] | アイテムの説明文(MiniMessage 形式、1 要素が 1 行)。省略できます |
item.customModelData | number[] | カスタムモデルデータの float 値。省略できます |
scope | string | 効果の範囲。ANGLER・AREA・WORLDのいずれかです(後述) |
durationSeconds | integer | 効果の持続時間(秒)。1 以上を指定します |
charges | integer | scopeがANGLERのときだけ指定できる、効果が続く釣果の回数です。1 以上を指定します。省略すると時間だけで効果が切れます |
radius | number | scopeがAREAのときに必須の、使用した位置からの水平距離(ブロック)です。0 より大きい値を指定します |
rarityMultipliers | map | レアリティ ID と、そのレアリティの重みに掛ける倍率の組です |
fishMultipliers | map | 魚 ID と、その魚が釣れる全体の確率に掛ける倍率の組です |
fishWeights | map | 魚 ID と、その魚に設定する重みの組です。重み 0 の餌限定の魚を釣れるようにするために使います |
倍率と重みは有限かつ 0 以上でなければなりません。倍率に 0 を指定すると、そのレアリティや魚は釣れなくなります。
config.ymlは Addon の有効化時と/chum reloadの実行時に読み込みます。YAML として不正な内容、未知のキー、不正な値がある場合は読み込みに失敗します。
有効化時に失敗した場合は Addon の有効化そのものが失敗し、/chum reloadで失敗した場合は以前の設定のまま動作します。
魚とレアリティの ID が登録済みかどうかは、読み込み時には確かめません。Core の設定の再読み込みで登録が変わるためです。 未登録の ID は、効果を適用するときにサーバーのログへ ID ごとに 1 度だけ警告し、無視します。登録済みでも天候やワールドの条件を満たさずに候補にならない魚は、警告せずに無視します。
効果の範囲
scope | 対象 | 使える場所 |
|---|---|---|
ANGLER | 撒き餌を使ったつりびと本人の釣り。どこで釣っても効果があります | どこでも |
AREA | 使った位置から水平距離radiusブロック以内に釣り針がある釣り。高さは問いません。使った釣りワールドの中だけが対象です | 釣りワールドの中 |
WORLD | 使った釣りワールドでの全てのつりびとの釣り | 釣りワールドの中 |
AREAとWORLDの効果は、撒き餌を使ったつりびと以外にも及びます。
重ね掛けと更新
- 同じ撒き餌を同じ対象にもう一度使うと、効果は重ならず、期限を今から
durationSeconds後に延ばし、chargesを設定値に戻します。 AREAの撒き餌は、同じ撒き餌の有効な範囲の中で使うと、その範囲の効果を更新します。範囲の中心は最初に使った位置のままです。範囲の外で使った場合は新しい範囲になります。- 同じ撒き餌の範囲が重なっている場所でも、同じ撒き餌の効果は 1 回分だけ掛かります。
- 異なる撒き餌の効果は掛け合わせます。たとえば
rareを 2 倍にする撒き餌と 3 倍にする撒き餌が両方有効なら、rareの重みは 6 倍になります。
複数の撒き餌が有効な場合、効果は次の順に適用します。
fishWeights: 魚の重みを設定します。複数の撒き餌が同じ魚に指定している場合は、最も大きい値を使いますrarityMultipliers: レアリティの重みに、全ての撒き餌の倍率の積を掛けますfishMultipliers: 魚が釣れる全体の確率に、全ての撒き餌の倍率の積を掛けます
倍率の積は、レアリティごと・魚ごとにmaxMultiplierで頭打ちになります。
fishMultipliersはFishDrawPool#multiplyFishProbabilityで適用するため、同じレアリティ内の割合ではなく、魚が釣れる全体の確率が倍率どおりに変わります。
ただし、確率が 0 の魚(重み 0 の魚など)には倍率が効きません。餌限定の魚にはfishWeightsで重みを与えてください。fishWeightsを先に適用するため、同じ撒き餌で重みを与えてから倍率を掛けることもできます。
複数の魚にfishMultipliersを指定した場合は、候補の魚の並び順に適用し、それぞれ適用した時点の確率に倍率を掛けます。確率が 1 を超える場合は 1 に丸めます。
確率が 1 に達した魚があると、他の魚の重みはすべて 0 になるため、それより後に適用する魚の倍率は効きません。この場合はサーバーのログに魚ごとに 1 度だけ警告を出します。
魚の条件(天候・ワールド)とenabledは撒き餌より優先されます。撒き餌は候補になった魚の重みを変えるだけで、条件を満たさない魚を釣れるようにはできません。
回数(charges)
chargesを指定したANGLERの撒き餌は、魚を釣り上げるたびに残り回数が 1 減り、0 になると効果が切れます。効果が切れたときは、つりびとにメッセージを送ります。
残り回数は、その抽選に効果が掛かり、釣果が確定した(AnglerFishCaughtResultEventが発火した)ときだけ減ります。釣果が他のプラグインにキャンセルされた場合や、抽選対象が無くバニラのドロップのままだった場合は減りません。
残り回数が残っていても、durationSecondsを過ぎると効果は切れます。
効果の保存
有効な撒き餌の効果はメモリ上にだけ保持します。サーバーを再起動したり、プラグインを再読み込みしたりすると、全ての効果が失われます。 効果の期限は抽選やアイテムの使用のたびに確かめ、期限を過ぎた効果をその時点で取り除きます。
/chum reloadでは有効な効果は失われません。効果は撒き餌の ID だけを覚えているため、再読み込み後は新しい定義の倍率や重みで適用します。
config.ymlから削除した撒き餌の効果は適用されなくなります。
コマンドと権限
| コマンド | 権限 | 既定 | 説明 |
|---|---|---|---|
| (右クリックでの使用) | moripafishing.addon.chum.use | 全員 | 撒き餌アイテムを使います |
/chum give <player> <chum> [amount] | moripafishing.addon.chum.give | OP | 撒き餌アイテムを渡します。amountの既定は 1 です。最大スタック数ごとに分けて渡し、インベントリに入りきらない分は足元に落とします |
/chum odds | moripafishing.addon.chum.odds | OP | 自分の現在の確率を表示します |
/chum odds <player> | moripafishing.addon.chum.odds.others | OP | 指定したプレイヤーの現在の確率を表示します。moripafishing.addon.chum.oddsも必要です |
/chum reload | moripafishing.addon.chum.reload | OP | config.ymlを読み直します |
/chum oddsは、プレイヤーがいる釣りワールドの抽選の候補を作り、そのプレイヤーに掛かる撒き餌の効果を抽選と同じ方法で適用してから、魚ごとの確率(FishDrawPool#getProbability)を確率の高い順に表示します。確率が 0 の候補(餌を使っていないときの餌限定の魚など)も表示します。
釣り針の位置の代わりにプレイヤーの位置でAREAの範囲を判定します。また、有効な撒き餌と残り時間・残り回数も表示します。表示しても残り回数は減りません。
確率は現在の天候で計算するため、天候が変わると変わります。