Extractioncraft ルートシステム
Extractioncraftは3つの概念に基づいた階層型ルートシステムを持っています。コンテンツパッケージはルートテーブルを参照し、ルートテーブルはルートプールを参照し、ルートプールはドロップする実際のアイテムを定義します。
概要
Content Package
-> chestLootTables / barrelLootTables (weighted selection)
-> Loot Table
-> lootTable entries (each has a chance to roll)
-> Loot Pool
-> eliteMobsLoot / vanillaLoot (weighted selection of one item)
ルートテーブル
ルートテーブルの設定は loot_tables/ フォルダにあります。各ファイルはルートプールエントリのリストを定義し、各エントリにはアイテムを生成する独立した確率があります。
| キー | 型 | デフォルト | 説明 |
|---|---|---|---|
isEnabled | Boolean | true | ファイルには書き込まれますが、強制されません。この値が true かどうかにかかわらず、ルートテーブルは登録され使用可能です。テーブルの使用を止めるには、コンテンツパッケージの chestLootTables / barrelLootTables から取り除き、その spawnPools を空にしてください。 |
spawnPools | String list | [] | BetterStructuresのスポーンプール名。一致するスポーンプールに関連付けられたEliteMobが倒されると、このルートテーブルがドロップに使用されます。比較は大文字小文字を区別せず、末尾の .yml も無視されるため、kobold_miner_pool と Kobold_Miner_Pool.yml はどちらも一致します。 |
lootTable | List of objects | [] | 各エントリはルートプールのファイル名と chance(0.0〜1.0)を参照 |
ルートテーブルエントリの形式
lootTable:
- filename: my_loot_pool.yml
chance: 0.5
- filename: another_pool.yml
chance: 0.2
各エントリは独立して判定されます。chance が 0.5 の場合、このプールがドロップを生成する確率は50%です。
ルートプール
ルートプールの設定は loot_pools/ フォルダにあります。各プールは取得可能なアイテムのセットを定義します。プールが判定されると、重み確率に基づいて1つのアイテムが選択されます。
| キー | 型 | デフォルト | 説明 |
|---|---|---|---|
isEnabled | Boolean | true | ファイルには書き込まれますが、強制されません。この値が true かどうかにかかわらず、ルートプールは登録され使用可能です。プールの使用を止めるには、それを参照しているルートテーブルからエントリを取り除いてください。 |
eliteMobsLoot | List of objects | [] | ドロップ可能なEliteMobsカスタムアイテム |
vanillaLoot | List of objects | [] | ドロップ可能なバニラMinecraftアイテム |
EliteMobsルートエントリ
eliteMobsLoot:
- filename: my_elite_item.yml
weight: 1.0
- filename: another_item.yml
weight: 0.5
filename はEliteMobsカスタムアイテムの設定を参照します。weight はプール内のすべてのエントリ間でのドロップ確率の相対値を決定します。
バニラルートエントリ
vanillaLoot:
- material: DIAMOND
weight: 1.0
- material: GOLD_INGOT
weight: 2.0
material はBukkitの Material enum名です。weight はエリートルートエントリと同様に機能します。プール内のすべてのエリートおよびバニラエントリは1回の重み付き選択で競合するため、プールは1回の判定につき最大でも1個のアイテムしか生成しません。バニラアイテムは常に1個としてドロップします。認識されない material は起動時に警告とともにスキップされ、EliteMobsカスタムアイテムに一致しない eliteMobsLoot のファイル名はドロップ時に警告を出力して何も生成しません。
weight は小数(0.5)、整数(2)、引用符付き文字列("1.5")のいずれでも記述でき、3つとも解析されます。weight が欠落している場合や数値でない場合は 0 として扱われ、警告が出力されます。
コンテナルート(チェストと樽)
マッチ中、チェストと樽はマッチ開始時にBetterStructuresによって配置されます。プレイヤーがチェストまたは樽を右クリックすると:
- バニラのコンテナは開きません。インタラクションはキャンセルされ、Extractioncraftのルーティング処理に置き換えられます。
- プレイヤーは3秒間、完全に静止していなければなりません。カウントダウンがサブタイトルとして表示されます。
- わずかでも動くとインタラクションはキャンセルされます(「Don't move while opening a container!」)。プレイヤーが同時に開けられるコンテナは1つだけです。
- 成功すると、コンテンツパッケージの
chestLootTablesまたはbarrelLootTablesリストから1つのルートテーブルが選択されます(重み付き選択)。 - 選択されたルートテーブルの各エントリが独立して判定され、結果のアイテムがコンテナの位置に地面へドロップします。
- ルーティング後、コンテナは破壊されます(空気に置換)。そのため、各コンテナは1回しか略奪できません。
マッチ中にアクティブなコンテナは10ティックごとにポータルパーティクルを表示し、プレイヤーが見つけやすくなっています。
コンテナのドロップは、マッチが使用しているコンテンツパッケージにかかわらず、固定のレベル 10 をEliteMobsに渡します。Kobold Minesパッケージが提示するレベル範囲は、チェストや樽のルートではなくマップ内のモブに由来するものです。
モブキルルート
マッチ中にEliteMobが死亡すると、プラグインはそのモブの betterstructures:spawnpool カスタムデータを読み取ります。このデータを持たないモブ(BetterStructuresのモジュールジェネレーターによってスポーンしていないもの)は、Extractioncraftのルートを一切生成しません。
spawnPools リストがそのモブのスポーンプールに一致するすべてのルートテーブルが、死亡地点にドロップを生成します。これは重み付き選択ではないため、同じスポーンプールを3つのルートテーブルに記載すれば、独立した判定が3セット行われます。モブ自身のレベルがEliteMobsに渡され、レベルに応じたアイテム生成が行われます。
モブのレベル自体は、マップ生成時にBetterStructuresが決定します。マップ中心に近いボスはスポーンプールの最大レベル付近で、端に近いボスは最小レベル付近でスポーンします。したがって、中央へ向かって縮小するワールドボーダーは、プレイヤーを段階的により難しく — そしてより実入りの良い — 領域へと押し込んでいきます。
脱出時のアイテムの挙動
- マッチを離れるプレイヤーは、成功・失敗にかかわらず、まずインベントリがソウルバインドされます(EliteMobsのソウルバインドエンチャントを使用)。そのため、持ち出したものはすべてそのプレイヤーに結び付けられます。
- 脱出に成功したプレイヤーはすべてのアイテムを保持します。
- 脱出に失敗したプレイヤーは、
config.ymlでdeleteItemsOnFailToExtractがtrue(デフォルト)の場合、すべてのインベントリアイテムを失います。これは/exc leaveによる退出、切断、致命的なダメージを受けた場合に適用されます。 - マッチが待機中またはカウントダウン中の間は何も消去されません。このルールが適用されるのは、マッチが進行中になってからです。