ルートテーブル/アイテム修飾子
![]() | この項目はJava Edition限定の要素です。 |
アイテム修飾子(Item modifier)は、ルートテーブルのファンクションを分離し、/itemコマンドで使用できるようにしたものである。ver1.17で追加された。
利用法
以下のファンクションから1つを選んで記述し、JSONファイルとしてデータパックの中に保存する。
ファンクションの一覧
apply_bonus
{
"function":"apply_bonus",
"enchantment":"<エンチャントID>",
"formula":"binominal_with_bonus_count / uniform_bonus_count / ore_drops",
"parameters":[
"extraRounds":<4バイト整数値>,
"probability":<4バイト浮動小数点値>,
"bonusMultiplier":<4バイト浮動小数点値>
]
}
エンチャントレベルを反映してアイテムの生成数を変える。エンチャントIDはこちらを参照。
- binominal_with_bonus_countの場合:
- "enchantment"で指定したエンチャントのレベルをL、"parameters"の"extraRounds"の値をE、"probability"の値をPとして、二項分布(L+E, P)に従う値を返す。
- uniform_bonus_countの場合:
- "enchantment"で指定したエンチャントのレベルをL、"parameters"の"bonusMultiplier"の値をBとして、0とL×Bの間の任意の数を返す。
- ore_dropsの場合:
- "enchantment"で指定したエンチャントのレベルをLとすると、もともとのアイテムの生成数にmax(0,random(0,L+2)-1)+1を掛けた値を返す。
- ただしmax(a,b)はaとbのうち大きい方の値を表し、random(a,b)はaとbの間の任意の数を表す。
copy_name
{
"function":"copy_name",
"source":"block_entity"
}
ブロックのカスタムネームを引き継ぐ。
ブロックを採掘したときに出るアイテムを指定する場合にのみ有効。
copy_nbt
{
"function":"copy_nbt",
"source":"block_entity / this / killer / killer_player / direct_killer",
"ops":[
{
"source":"<データタグのパス>",
"target":"<データタグのパス>",
"op":"replace / append / merge"
}
]
}
データタグ(NBTタグ)の内容をコピーする。sourceで指定したタグからtargetで指定したタグへコピーが行われる。
opでreplaceとすると上書き、appendとするとリストへの追加(コピー先のタグがList型の場合)、mergeとするとタグへの追加(コピー先のタグがcompound型の場合)が行われる。
sourceの値は、ブロックエンティティの場合block_entity、エンティティを倒したエンティティの場合はkiller、エンティティを倒したプレイヤーの場合はkiller_player、エンティティを直接倒したエンティティの場合はdirect_killer、それ以外の場合はthisとする。
killerとdirect_killerの違いであるが、たとえば矢でエンティティを倒した場合、killerは矢を放ったエンティティ、direct_killerは矢自体となる。
- データタグのパスの記法 (NBT path format)
- AでタグAを選択。
- {}でデータタグ全体を選択。
- {A:x}でタグA:xが含まれている場合に限りデータタグ全体を選択。
- A{}でCompound型のタグAを選択。
- A{B:x}でタグB:xを含むCompound型のタグAを選択。
- A[]でList型のタグAのすべての要素を選択。
- A[x]でList型のタグAの(x+1)番目の要素を選択。
- A[{}]でList型のタグAに含まれる{}で区切られた要素をすべて選択。
- A[{B:x}]でList型のタグAに含まれる{}で区切られた要素のうちタグB:xを含むものを選択。
- A.BでCompound型のタグAに含まれるタグBを選択。
これらは入れ子的に使用可能。
例えば{A:{B:{C:[D:135,E:534]}}}というタグ構造に対して、A.B.C[0]のように書くことでタグDを選択できる。
copy_state
{
"function":"copy_state",
"block":"<ブロックID>",
"properties":[
"<ブロックの状態>"
]
}
ブロックの状態をコピーする。ブロックIDはこちらを、状態についてはこちらを参照。
enchant_randomly
{
"function":"enchant_randomly",
"enchantments":[<エンチャントID>]
}
ランダムなエンチャントを付与する。
enchantmentsタグがある場合はそこに書かれたエンチャントのいずれかが付与され、ない場合はそのアイテムに付与できるすべてのエンチャントが対象となる。
エンチャントIDはこちらを参照。
enchant_with_levels
{
"function":"enchant_with_levels",
"treasure":trueまたはfalse,
"levels":<4バイト整数値> / $!数値セレクタ!$
}
アイテムに特定のエンチャントレベルのエンチャントを付与する。
treasureはトレジャーエンチャントを付与するかどうか。
exploration_map
{
"function":"exploration_map",
"destination":"<構造物のID>",
"decoration":"<マップアイコンのID>",
"zoom":<4バイト整数値>,
"search_radius":<4バイト整数値>,
"skip_existing_chunks":true / false
}
白紙の地図を冒険家の地図に置き換える。
- destination
- その地図が示す構造物の種類を指定する。構造物のIDはこちらを参照。
- decoration
- 地図上で構造物を示すアイコンを指定する。アイコンのIDは以下の通り。
ID | 画像 | ID | 画像 | |
---|---|---|---|---|
player | banner_yellow | |||
frame | banner_lime | |||
red_marker | banner_pink | |||
blue_marker | banner_gray | |||
target_x | banner_light_gray | |||
target_point | banner_cyan | |||
player_off_map | banner_purple | |||
player_off_limits | banner_blue | |||
mansion | banner_brown | |||
monument | banner_green | |||
banner_white | banner_red | |||
banner_orange | banner_black | |||
banner_magenta | red_x | |||
banner_light_blue |
- zoom
- 地図の倍率。
- search_radius
- 構造物を探す距離(チャンク単位)
- skip_existing_chunks
- 生成済みのチャンクをスキップするかどうか(オプション)。デフォルトはtrue。
explosion_decay
{
"function":"explosion_decay"
}
爆発があったときに、爆発力の逆数の確率でアイテムを消す。
furnace_smelt
{
"function":"furnace_smelt"
}
アイテムを精錬後のアイテムに置き換える。
fill_player_head
{
"function":"fill_player_head",
"entity":"this / killer / killer_player / direct_killer"
}
プレイヤーの頭を特定のプレイヤーのものに置き換える。
limit_count
{
"function":"limit_count",
"limit":<4バイト整数値> / $!数値セレクタ!$
}
生成されるアイテムのスタック数に上限を設ける。
looting_enchant
{
"function":"looting_enchant",
"count":<4バイト整数値> / $!数値セレクタ!$,
"limit":<4バイト整数値>
}
ドロップ増加のエンチャントに応じてドロップアイテム数を補正する。limitは上限を指定する。
set_attributes
{
"function":"set_attributes",
"modifiers":[
{
"name":"<Modifier名>",
"attribute":"<Attribute名>",
"operation":"addition / multiply_base / multiply_total",
"amount":<4バイト浮動小数点値> / $!数値セレクタ!$,
"id":"<UUID>",
"slot":"mainhand/offhand/feet/legs/chest/head" / ["<以上のいずれか>"]
}
]
}
アイテムのAttributeを変更する。Attributeについてはこちらを参照。
set_contents
{
"function":"set_contents",
"entries":[{<エントリー>}]
}
インベントリのあるブロックのドロップに内容物を追加する。
内容物の指定は、entriesタグ内にルートテーブルのエントリーを並べて行う。
set_count
{
"function":"set_count",
"count":<4バイト整数値> / $!数値セレクタ!$
}
1スタックあたりのアイテムの個数を指定する。
set_damage
{
"function":"set_damage",
"damage":<4バイト浮動小数点値> / $!数値セレクタ!$
}
アイテムの耐久値を設定する。"damage"で指定した数が1.0で耐久最大、0.0で耐久なしとなる。
set_loot_table
{
"function":"set_loot_table",
"name":"<ルートテーブルのパス>",
"seed":<4バイト整数値>
}
アイテムにルートテーブルを付与する。
seedはルートテーブルのシード値。ワールドのシード値とは無関係。
set_lore
{
"function":"set_lore",
"lore":["<説明文の1行目>","<説明文の2行目>",…],
"entity":"this / killer / killer_player / direct_killer",
"replace":true / false
}
アイテムの説明文を書き換える。"entity"はテキスト中の@sを置き換えるのに使用する。
エンティティを倒したエンティティの場合はkiller、エンティティを倒したプレイヤーの場合はkiller_player、エンティティを直接倒したエンティティの場合はdirect_killer、それ以外の場合はthisとする。
killerとdirect_killerの違いであるが、たとえば矢でエンティティを倒した場合、killerは矢を放ったエンティティ、direct_killerは矢自体となる。
replaceは上書きするかどうか。
set_name
{
"function":"set_name",
"name":"<名前>",
"entity":"this / killer / killer_player / direct_killer"
}
アイテムの名前を書き換える。"entity"はテキスト中の@sを置き換えるのに使用する。
エンティティを倒したエンティティの場合はkiller、エンティティを倒したプレイヤーの場合はkiller_player、エンティティを直接倒したエンティティの場合はdirect_killer、それ以外の場合はthisとする。
killerとdirect_killerの違いであるが、たとえば矢でエンティティを倒した場合、killerは矢を放ったエンティティ、direct_killerは矢自体となる。
set_nbt
{
"function":"set_nbt",
"tag":"<NBTタグ>"
}
アイテムにNBTタグを付与する。引用符(")は\でエスケープしなくてはいけない。
set_stew_effect
{
"function":"set_stew_effect",
"effects":[
{
"type":"<エフェクトID>",
"duration":<4バイト整数値>
}
]
}
怪しげなシチューのエフェクトを指定。エフェクトIDはこちらを参照。
durationは継続時間。
数値セレクタ
数値セレクタは以下の3種類である。
{
"type":"constant",
"value":<4バイト整数値> / <4バイト浮動小数点値>
}
valueの値を返す。
{
"type":"uniform",
"min":<4バイト整数値> / <4バイト浮動小数点値> / <数値セレクタ>,
"max":<4バイト整数値> / <4バイト浮動小数点値> / <数値セレクタ>
}
minとmaxの間の任意の数を返す。
{
"type":"binominal",
"n":<4バイト整数値> / <数値セレクタ>,
"p":<4バイト浮動小数点値> / <数値セレクタ>
}
二項分布(n,p)に従う値を返す。