プレディケート
プレディケート(英:Predicate)はワールドの情報を参照して条件を判定し「成功」「失敗」を示す論理値を返す、コマンドやデータパックのさまざまな場面で使用可能な機構である。
ルートプレディケート(英:Predicate)、ルート条件(英:Loot Condition)などとも呼称される。
プレディケートはレジストリpredicateに属しており、データパックのdata/<名前空間>/predicates下にJSONファイルとして定義できる(構造は#フォーマットを参照)。使用時にはこのファイルをIDで参照することも、使用箇所に直接インラインで構造を記述することもできる。
プレディケートは条件判定の上で必要な情報の一部を文脈パラメータに依存している。呼び出し元が使用するルート文脈がそのパラメータを提供可能なものでない場合はデータパックの解析時に警告が表示され、また実際に提供されなかった場合は無条件での失敗など特殊な動作になる場合がある(詳細は#種類の各項目を参照)が、ルート文脈を使用する他の要素同様、データパックの読込や動作自体を停止・阻害することはない。
アイテム修飾子が呼び出される場面は以下の通りである。
- コマンド
- ターゲットセレクターの引数
predicate=:コマンドの対象となるエンティティを、プレディケートの条件を満たすものに絞り込むことができる。ルート文脈はselector。 /execute (if|unless) predicate:プレディケートの成否に応じて、分岐した実行文脈の一部を打ち切ることができる。コマンドの末尾に使用した場合は、プレディケートの成否に応じた戻り値を返す。ルート文脈はcommand。
- ターゲットセレクターの引数
- ルートテーブル:項目・プールの使用可否を判定する。ルート文脈は自身の呼び出し元を継承。
- アイテム修飾子:自身の作用の可否を判定する。ルート文脈は自身の呼び出し元を継承。
- ナンバープロバイダー:一部の種類が、方式の切り替えに使用する。ルート文脈は自身の呼び出し元を継承。
- 取引項目:自身の項目としての使用可否を判定する。ルート文脈は
villager_trade。 - 進捗:ルート文脈は種類に依存。
プレディケートの記述形式には、定義ファイルへの名前空間IDによる指定と、以下2種類のインラインの記法がある。各記法の使用可否は呼び出し元に依存するが、特記のない限り多くの場面でいずれの記法も通常通り使用できる。
- オブジェクト形式
プレディケートの基本形式である。以下の構造で指定する。
- 最上位のタグ
- *type: プレディケートの種類。
- 以下、種類に応じた追加タグを持つ。
プレディケートの種類とその振る舞い・追加タグ・使用する文脈パラメータについては次節を参照のこと。
以下は有効なプレディケートの種類の一覧である。なお、種類IDの名前空間minecraft:は省略した。
すべての子プレディケートが通過した場合に通過となる。
使用する文脈パラメータはなく、任意の状況で同様に動作する。
- プレディケート
- *type:
all_of - *terms: 子プレディケートのリスト。単一のID、単一のインライン表記、
#を接頭したタグ、インライン表記(ID・インライン表記混合可)のリストのいずれかで指定する。- 各プレディケート(リスト表記の場合)。IDかインライン表記で指定する。
- *type:
いずれかの子プレディケートが通過した場合に通過となる。
使用する文脈パラメータはなく、任意の状況で同様に動作する。
- プレディケート
- *type:
any_of - *terms: 子プレディケートのリスト。単一のID、単一のインライン表記、
#を接頭したタグ、インライン表記(ID・インライン表記混合可)のリストのいずれかで指定する。- 各プレディケート(リスト表記の場合)。IDかインライン表記で指定する。
- *type:
ダメージ源に関する確認を行う。
ダメージ源とは、特定のダメージに関する以下の情報を含むデータである。
使用する文脈パラメータはorigin、damage_soruceで、両方が提供されていなければ無条件で失敗する。
- プレディケート
- *type:
damage_source_properties - predicate: ダメージ源に対して科す条件。省略時は、
origin、damage_sourceが提供されていれば常に通過。- ダメージ源プレディケート
- *type:
エンチャントの有効状態を確認する。
使用する文脈パラメータはenchantment_active[注釈 1]で、提供されていない場合は無条件で失敗する。
- プレディケート
- *type:
enchantment_active_check - *active: 条件が求める有効状態。
trueなら有効時、falseなら無効時に条件が通過する。
- *type:
エンティティに関する確認を行う。
使用する文脈パラメータはentityの指定に対応するものとoriginである。前者のパラメータが提供されていない場合、predicateが省略されていない限り失敗する。後者の欠落は、predicateの一部の条件にのみ影響する。
- プレディケート
- *type:
entity_properties - *entity: 確認対象のエンティティ。エンティティ用の文脈パラメータターゲットIDで指定する。
- predicate: エンティティに対して科す条件。省略時は常に通過。
- エンティティプレディケート
- *type:
エンティティが持つスコアボード上のスコアを確認する。
使用する文脈パラメータはentityの指定に対応するもので、提供されていない場合は無条件で失敗する。
- プレディケート
- *type:
entity_scores - *entity: 確認対象のエンティティ。エンティティ用の文脈パラメータターゲットIDで指定する。
- *scores: 各オブジェクト上のスコアに対する条件。すべてのオブジェクトが条件を満たす必要がある。存在しないオブジェクトや、entityがスコアを持たないオブジェクトが含まれている場合は無条件で失敗する。
- <オブジェクトID>: キーで指定したオブジェクト上のスコアが満たすべき条件。
- int範囲プレディケート
- <オブジェクトID>: キーで指定したオブジェクト上のスコアが満たすべき条件。
- *type:
環境属性の値を確認する。
文脈パラメータは、attributeが位置依存性を持つ場合のみoriginを使用する。無提供の場合は環境属性のデフォルト値を確認対象とする。
- プレディケート
- *type:
environment_attribute_check - *attribute: 参照したい環境属性のID。
- *value: その環境属性が完全一致すべき値。値の型はattributeに依存する。
- *type:
floatナンバープロバイダーを計算し、その出力値を確認する。
使用する文脈パラメータはなく、任意の状況で同様に動作する。
- プレディケート
- *type:
float_value_check - *value: 確認を受ける値を出力するfloatナンバープロバイダー。IDまたはインライン表記で指定する。
- *test: valueの出力値が満たすべき条件。
- float範囲プレディケート
- *type:
intナンバープロバイダーを計算し、その出力値を確認する。
使用する文脈パラメータはなく、任意の状況で同様に動作する。
- プレディケート
- *type:
int_value_check - *value: 確認を受ける値を出力するintナンバープロバイダー。IDまたはインライン表記で指定する。
- *test: valueの出力値が満たすべき条件。
- int範囲プレディケート
- *type:
別のプレディケートの成否を逆転して返す。
使用する文脈パラメータはなく、任意の状況で同様に動作する。
- プレディケート
- *type:
inverted - *term: 反転前のプレディケート。IDかインライン表記で指定する。
- *type:
文脈パラメータlast_damage_playerが提供されているどうか[注釈 2]。
これ以外の文脈パラメータは使用しない。
- プレディケート
- *type:
killed_by_player - 追加タグは無い。
- *type:
位置に関する確認を行う。
使用する文脈パラメータはoriginで、提供されていない場合は無条件で失敗する。
- プレディケート
- *type:
location_check - offsetX:
originから確認位置までの変位のX成分。省略時は0。 - offsetY:
originから確認位置までの変位のY成分。省略時は0。 - offsetZ:
originから確認位置までの変位のZ成分。省略時は0。 - predicate: 位置に科する条件。省略時は、
originが提供されていれば無条件で通過。- 位置プレディケート
- *type:
ブロックに関する確認を行う。
使用する文脈パラメータはblock_state、block_entity。block_stateが提供されていない場合は無条件に失敗する。ブロックエンティティのデータに関する条件を指定した場合は、block_entityについても同様である。
- プレディケート
- *type:
match_block - ブロックプレディケート
- *type:
パラメータtoolとして提供されたアイテムに関する確認を行う。
使用する文脈パラメータはtoolで、提供されていない場合は無条件に失敗する。
- プレディケート
- *type:
match_tool - predicate:
toolに科す条件。省略した場合、toolが提供されていれば無条件に通過。
- *type:
ランダムな確率で成功する。
使用する文脈パラメータはなく、任意の状況で同様に動作する。
- プレディケート
- *type:
random_chance - *chance: 成功確率を与えるfloatナンバープロバイダー。0–1の範囲外の出力は、それぞれ0、1と等価である。IDかインライン表記で指定する。
- *type:
指定のエンチャントのレベルに依存した確率で成功する。enchanted_chanceに渡るレベルは、パラメータattacking_entityとして提供されたエンティティが適切なスロットに装備しているアイテムのうち、指定のエンチャントのレベルが最大であるものの値である。
使用する文脈パラメータはattacking_entityで、提供されていない場合はunenchanted_chanceが使用される。
- プレディケート
- *type:
random_chance_with_enchanted_bonus - *unenchanted_chance: enchantmentが掛かったアイテムを装備していないか、
attacking_entityが無効な際の成功確率。0以上1以下で指定する。 - *enchanted_chance: エンチャントが存在する場合の成功確率を与えるレベル依存値。
- レベル依存値
- *enchantment: 確認するエンチャントの名前空間ID。
- *type:
受けた爆発の半径を として、 の確率で通過する。爆発の半径が1ブロック未満の場合は、常に通過する。
使用する文脈パラメータはexplosion_radiusで、提供されていない場合は常に通過する。
- プレディケート
- *type:
survives_explosion - 追加タグは無い。
- *type:
toolとして提供されたアイテム上の指定のエンチャントのレベルを参照し、chancesに指定されたレベル別の確率を用いる。
使用する文脈パラメータはtoolで、提供されていない場合はレベル0(指定のエンチャントが付与されていない)として振る舞う。
- プレディケート
- *type:
table_bonus - *enchantment: 参照するエンチャントの名前空間ID。
- *chances: レベル別の成功確率。空は不可。リストの先頭はレベル0(指定のエンチャントが付与されていない)の場合、 番目の要素は指定のエンチャントのレベルが の場合に対応する。リストの長さ - 1 よりレベルが高い場合、末尾の確率が使用される。
- 各レベルに対応する成功確率。
- *type:
特定の世界時計の現在値を確認する。
使用する文脈パラメータはなく、任意の状況で同様に動作する。
- プレディケート
- *type:
time_check - *clock: 参照する世界時計の名前空間ID。
- period: 指定した場合、clockの実値の代わりにperiodでの剰余を確認する。
- *value: 値が満たすべき条件。
- int範囲プレディケート
- *type:
現在の天候を確認する。天候が存在しないディメンション(ディメンションタイプを参照)では常に晴れ扱い。
使用する文脈パラメータはなく、任意の状況で同様に動作する。
| Java Edition | |||||||
|---|---|---|---|---|---|---|---|
| 1.15 | 19w38a | データパックにプレディケートが追加された。 | |||||
| 1.16 | 20w12a | エンティティサブプレディケートにfishing_hookが追加された。 | |||||
| 1.19.3 | 23w06a | ダメージ源プレディケートからis_projectile・is_explosion・bypasses_armor・bypasses_invulnerability・bypasses_magic・is_fire・is_magic・is_lightningが削除された。 | |||||
| 代わってダメージの種類タグに基づいてダメージの性質を判定するtagsが追加された。 | |||||||
| 1.20 | 23w18a | 条件のタイプalternativeがany_ofに改名された。
| |||||
条件のタイプall_ofが追加された。 | |||||||
| 1.20.5 | 24w09a | アイテムプレディケートの形式が変更された。
| |||||
ブロックプレディケートのフォーマットが変更された。
| |||||||
液体の条件のフォーマットが変更された。
| |||||||
エンティティの種類の条件のフォーマットが変更された。
| |||||||
位置プレディケートのフォーマットが変更された。
| |||||||
| 24w10a | エンティティプレディケートにslotsが追加され、単一または複数のスロットを確認できるようになった。 | ||||||
| 24w11a | エンティティサブプレディケートのtypeからanyが削除された。
| ||||||
| アイテムプレディケートにコンポーネントプレディケートを用いるpredicatesが追加された。 | |||||||
以下のタグはpredicatesに代替され削除された。
| |||||||
| 代替に伴い、minecraft:damageで耐久値残量・減耗量のどちらでも確認できるようになった。 | |||||||
| 24w12a | エンティティサブプレディケートのcat、frog、paintingで、variantにタグやリストを指定できるようになった。
| ||||||
エンティティサブプレディケートにwolfが追加され、同様のvariantが使用可能になった。 | |||||||
| 24w13a | エンティティプレディケートにraiderが追加された。 | ||||||
| Pre-Release 1 | エンティティプレディケートのequipmentに、スロットarmor.bodyを確認するためのbodyが追加された。 | ||||||
| 1.21 | 24w18a | enchantment_active_checkが追加された。
| |||||
random_chanceのchanceがナンバープロバイダーになった。
| |||||||
random_chance_with_lootingがrandom_chance_with_enchanted_bonusになりあらゆるエンチャントに対して動作するようになった。
| |||||||
| エンティティに関する条件にプレディケートにis_on_ground、in_on_flying、movement、periodic_ticksが追加された。 | |||||||
| 位置プレディケートにcan_see_skyとweatherが追加された。 | |||||||
| 24w19a | ダメージ源プレディケートにis_directが追加された。 | ||||||
| 24w20a | エンティティプレディケートにmovement_affected_byが追加された。 | ||||||
| 24w21a | ディレクトリ名がpredicatesからpredicateに変更された。
| ||||||
エンティティサブプレディケートのplayerで、gamemodeにゲームモードのリストが使用できるようになった。 | |||||||
| Pre-Release 1 | random_chance_with_enchanted_bonusのchanceが削除され、enchanted_chanceとunenchanted_chanceが追加された。 | ||||||
| 1.21.2 | 24w35a | エンティティサブプレディケートに、shearedとcolorを確認できるsheepが追加された。 | |||||
| 24w36a | エンティティサブプレディケートのplayerで、inputが追加された。 | ||||||
| 24w37a | エンティティサブプレディケートに、variantを確認できるsalmonが追加された。 | ||||||
| 24w39a | ボートのエンティティID分離に伴い、エンティティサブプレディケートからboatが削除された。
| ||||||
以前はvariantにoak spruce birch jungle acacia dark_oak mangrove cherry bambooを指定することで種類を限定できた。 | |||||||
| 1.21.5 | 25w03a | エンティティプレディケートにcomponentsが追加された。 | |||||
componentsに代替され、エンティティサブプレディケートから以下の種類・タグが削除された。
| |||||||
| 25w07a | エンティティプレディケートのstepping_onが、地面に足がついている場合のみ通過するようになった。 | ||||||
| 25w10a | エンティティプレディケートにpredicatesが追加された。 | ||||||
| ブロックプレディケートにpredecatesとcomponentsが追加された。 | |||||||
| 1.21.11 | 25w41a | エンティティプレディケートのflagにis_in_waterとis_fall_flyingが追加された。 | |||||
| 26.1 | snapshot-1 | playerのエンティティサブプレディケートに、foodが追加された。 | |||||
| snapshot-3 | time_checkがDayTimeではなく世界時計に対して動作するようになり、clockが追加された。 | ||||||
| pre-1 | environment_attribute_checkが追加された。 | ||||||
| 26.2 | snapshot-3 | エンティティプレディケートのすべてのトップレベルのキーが名前空間IDになった。 | |||||
| エンティティプレディケートのtypeがentity_typeに改名された。 | |||||||
| エンティティプレディケートのtype_specificのtypeの各値が、type_specific/<type>というオブジェクトとしてトップレベルに移動した。 | |||||||
| またtype_specific/slimeがマグマキューブ・サルファーキューブにも機能するようになった。 | |||||||
| エンティティプレディケートにentity_tagsが追加された。 | |||||||
| snapshot-4 | エンティティプレディケートtype_specific/slimeがtype_spefific/cube_mobに改名された[1]。 | ||||||
| 26.3 | snapshot-4 | タイプを指定タグがconditionからtypeに改名された。 | |||||
リスト形式が廃止された。従来はプレディケートをオブジェクト形式の子プレディケートのリストとして記述することができ、all_ofの略記として使用できた。
例外
リスト形式は、以下の箇所では使用できなかった。
| |||||||
all_of、any_ofのtermsがインライン表記のリストだけでなく、単一のID、単一のインライン表記、#を接頭したタグ、IDのリストでも指定できるようになった。
| |||||||
| 以下のタグが、インライン表記の代わりに名前空間IDでも指定できるようになった。
一覧
| |||||||
プレディケートを参照する随所のタグが直接名前空間IDで指定できるようになったため、referenceが削除された。
| |||||||
match_blockが追加された。
| |||||||
match_blockに代替され、block_state_propertyが削除された。
| |||||||
ダメージ源プレディケートのtagsのidが、単一のIDだけでなく#を接頭したタグ、IDのリストでも指定できるようになった。
| |||||||
| snapshot-5 | all_of、any_ofのtermsにおいて、リスト形式時にID・インライン表記の混合も許容されるようになった。 | ||||||
| pre-1 | int_value_check、float_value_checkが追加され、value_checkが削除された。
| ||||||
entity_scoresのscoresの子要素およびtime_checkのvalueについて、特定値への一致を求める場合でナンバープロバイダーが使用できるようになった(従来は定数のみ)。
| |||||||
| ナンバープロバイダーの分割に伴い、関連タグの型が元々の要求計算モードに応じてint/floatナンバープロバイダーに変更された。
一覧
| |||||||
| pre-2 | environment_attribute_checkにおいて、対象が位置依存性であるのにoriginが与えられていない場合にその環境属性のデフォルト値を確認対象とするようになった[2]。 | ||||||
以下は削除されたプレディケートの種類と、削除時点における仕様である。
特定のプレディケートファイルをIDで参照し、その結果をそのまま返す。プレディケートを用いる場所でそのままID指定が可能になったため、26.3-snapshot-4で削除された。
使用する文脈パラメータはなく、任意の状況で同様に動作する。
- プレディケート
- *condition:
reference - *name: 参照するプレディケートファイルの名前空間ID。
- *condition:
ブロック状態に関する確認を行う。26.3-snapshot-4でmatch_blockに代替された。
使用する文脈パラメータはblock_stateで、提供されていない場合は無条件で失敗する。
- プレディケート
- *condition:
block_state_property - *block: 当該ブロックのIDに関する条件。IDがこれに一致しない場合は無条件に失敗する。
- properties: 当該ブロックの各プロパティに関する条件。省略時は、
block_stateが存在しIDがblockに一致するなら無条件に通過。- <プロパティ名>: キーで指定したプロパティの値が一致すべき条件。キーはblockに存在するプロパティでなければならない。値は常に文字列で指定するが、キーで指定したプロパティの型に応じた形式[注釈 3]を満たさねばらなない。
- <プロパティ名>: 値を完全一致でなく範囲(閉区間)に入るかで確認する代替記法。要素の大小は、プロパティの型が数値ならそのまま、論理値なら
false<true、enumならその宣言順による。- min: 範囲の下限値。プロパティの型を満たした文字列で指定する。
- max: 範囲の上限値。プロパティの型を満たした文字列で指定する。
- *condition:
ナンバープロバイダーの出力値が所定の範囲内なら通過する。26.3-pre-1でint_value_check、float_value_checkに分割。
使用する文脈パラメータはなく、任意の状況で同様に動作する。
- プレディケート
- *type:
value_check - *value: 確認を受ける値を出力するナンバープロバイダー。IDまたはインライン表記で指定する。
- *range: valueの出力が満たすべき条件。一定値の場合は整数で、範囲の場合は次の構造のオブジェクトで指定する。
- min: 下限値を与えるナンバープロバイダー。IDまたはインライン表記で指定する。省略時は下限を設けない。
- max: 上限値を与えるナンバープロバイダー。IDまたはインライン表記で指定する。省略時は上限を設けない。
- *type: