みなさん、こんにちは!
赤石大好き!赤石愛です。
前回までの記事作成時点では実装されていなかった2つの機能を紹介します。
キー設定の取得
操作設定で割り当てたキーを取得する機能を紹介します。
keybind1.12+(キーバインド)
操作設定を変えている人も多いですが、keybindを使えば、プレイヤーに合った表示に変えることができます。
/tellraw @p {"translate":"スニークするには%sを押します。","with":[{"keybind":"key.sneak"}]}
スニークの操作設定を変えていない場合は次のように表示されますが、
スニークの操作設定をマウスのサイドボタンに変えている場合は次のような表示になります。
キー設定の一覧を載せておきます。
keybind |
操作名 |
初期設定 |
移動 |
key.jump |
ジャンプ |
スペース |
key.sneak |
スニーク |
左シフト |
key.sprint |
ダッシュ |
スペース |
key.forward |
前進 |
w |
key.right |
右 |
d |
key.left |
左 |
a |
key.back |
後退 |
s |
ゲームプレイ |
key.use |
アイテムの使用/ブロックの設置 |
右ボタン |
key.pickItem |
ブロック選択 |
中央ボタン |
key.attack |
攻撃する/壊す |
左ボタン |
インベントリ |
key.drop |
アイテムを捨てる |
q |
key.inventory |
イベントりの開閉 |
e |
key.hotbar.1-9 |
ホットバースロット 1-9 |
1-9 |
key.swapHands |
持っているアイテムの切り替え |
f |
クリエイティブモード |
key.saveToolbarActivator |
ホットバーの保存 |
c |
key.loadToolbarActivator |
ホットバーの読み込み |
x |
マルチプレイ |
key.command |
コマンドラインを開く |
/ |
key.chat |
チャットを開く |
t |
key.playerlist |
プレイヤーリストの表示 |
タブ |
その他 |
key.smoothCamera |
カメラ動作の切り替え |
|
key.screenshot |
スクリーンショットの撮影 |
F2 |
key.fullscreen |
フルスクリーンの切り替え |
F11 |
key.spectatorOutlines |
プレイヤーの強調表示(スペクテイター) |
|
key.togglePerspective |
視点の切り替え |
F5 |
key.advancements |
進捗 |
l |
NBTの取得
ブロック・エンティティ・ストレージが持つNBTを取得する機能を紹介します。
block1.14+(ブロック)
NBTを取得したいブロックの座標を指定します。後述のnbtと一緒に使います。
絶対座標だけでなく、相対座標やローカル座標も使えます。
座標の解説はここではしません。
"block":"10 20 30" (絶対座標)
"block":"~ ~-1 ~2" (絶対座標)
"block":"10 ~ 10" (絶対座標と相対座標)
"block":"^ ^ ^5" (ローカル座標)
entity1.14+(エンティティ)
NBTを取得したいエンティティをセレクターかUUIDで指定します。後述のnbtと一緒に使います。
"entity":"@s" (
セレクター)
"entity":"0-0-0-0-0" (UUID)
storage1.15+(ストレージ)
NBTを取得したいストレージを指定します。後述のnbtと一緒に使います。
ストレージの解説はここではしません。
"storage":"test:data"
nbt1.14+(エヌビーティー)
取得するNBTのパスを指定します。前述のblock・entity・storageのいずれかと一緒に使います。
どの場合でも使い方は変わらないため、ここではentityで説明します。
次のような、金床で名前を付けたダイヤ剣があるとします。
この剣を手に持った状態で、次のコマンドを実行してみましょう。
/tellraw @s {"entity":"@s","nbt":"SelectedItem"}
実行すると、次のように表示されましたね。
{id:"
minecraft:diamond_sword",Count:1b,tag:{RepairCost:0,Damage:0,display:{Name:'{"text":"
アイスソード"}'}}}
entityで指定した『@s』は『自分自身』、nbtで指定した『SelectedItem』は『利き手に持っているアイテム』なので、手に持っているダイヤ剣のNBTが全て表示されました。
次のコマンドを実行してみましょう。
/tellraw @s {"entity":"@s","nbt":"SelectedItem.Count"}
次のように表示されますね。
1b
nbtの指定が『SelectedItem.Count』になっています。
これは、先ほど表示されたNBTのCountの部分ですね。
nbtに『SelectedItem.Count』を指定すると、『「利き手に持っているアイテム」の「個数」』を取得できました。
このように、NBTの更に詳細な部分を取得するには、「.」で繋げて指定します。
では、金床で付けた名前を取得したい時は、どのようなコマンドになるでしょうか。
/tellraw @s {"entity":"@s","nbt":"SelectedItem.tag.display.Name"}
このようになります。
『「利き手に持っているアイテム(SelectedItem)」の「NBTタグ(tag)」にある「表示用データ(display)」の「名前(Name)」』を取得したいので、『SelectedItem.tag.display.Name』を指定しています。
これを実行すると、次のように表示されますね。
あれ?JSONになっていますね。
アイテム名の「アイスソード」だけを表示することはできないのでしょうか?
そんな時には、次に紹介するものと一緒に使います。
interpret1.14+(インタープリット)
nbtで取得したJSONを更に変換するかどうかを指定します。
次のコマンドを実行してみましょう。
/tellraw @s {"entity":"@s","nbt":"SelectedItem.tag.display.Name","interpret":true}
先ほどのJSONが更に変換されて、
とだけ表示されましたね。
なお、他の装飾と併用できるため、アイテム欄で見た時のように斜体にしたい時は、
/tellraw @s {"entity":"@s","nbt":"SelectedItem.tag.display.Name","interpret":true,"italic":true}
このように一緒に指定するだけです。
NBTパス
nbtの指定に使ったNBTパスをついでに解説します。
次のような変わったアイテムを手に持っているとします。
/tellraw @s {"entity":"@s","nbt":"SelectedItem"}
{id:"
minecraft:diamond_sword",Count:1b,tag:{RepairCost:0,Damage:0,"ねんがんの
アイスソードをてにいれたぞ!":["そう かんけいないね","殺してでも うばいとる","ゆずってくれ たのむ!!"],display:{Name:'{"text":"
アイスソード"}'}}}
基本は「.」で繋ぐだけ
更に中の要素を取得するときは、「.」で繋ぎます。
/tellraw @s {"entity":"@s","nbt":"SelectedItem.tag"}
{RepairCost:0,Damage:0,"ねんがんの
アイスソードをてにいれたぞ!":["そう かんけいないね","殺してでも うばいとる","ゆずってくれ たのむ!!"],display:{Name:'{"text":"
アイスソード"}'}}
エラーになる要素は「"」で囲む
スペースが入っている場合など、そのままではエラーになるものを指定するときは、「"」で囲みます。
もちろん、「"」の中で「"」を使う場合は、エスケープした「\"」に変えます。
/tellraw @s {"entity":"@s","nbt":"SelectedItem.tag.\"ねんがんの
アイスソードをてにいれたぞ!\""}
["そう かんけいないね","殺してでも うばいとる","ゆずってくれ たのむ!!"]
リストの何番目
リストの中の何番目かを取り出す時は、『』を付けて、その中に何番目かを指定します。
ただし、最初は0番目、次が1番目、……と数えます。
/tellraw @s {"entity":"@s","nbt":"SelectedItem.tag.\"ねんがんの アイスソードをてにいれたぞ!\"[1]"}
殺してでも うばいとる
リストの後ろから何番目
後ろから数えて取り出す時は、番号に「-」を付けます。
一番後ろは-1、後ろから2番目は-2、……と指定します。
/tellraw @s {"entity":"@s","nbt":"SelectedItem.tag.\"ねんがんの アイスソードをてにいれたぞ!\"[-1]"}
ゆずってくれ たのむ!!
リストの中の全て
何番目かを指定しない場合、リストの中のものが列挙されます。
/tellraw @s {"entity":"@s","nbt":"SelectedItem.tag.\"ねんがんの アイスソードをてにいれたぞ!\""}
そう かんけいないね, 殺してでも うばいとる, ゆずってくれ たのむ!!
この剣を色んな剣と一緒に適当にシュルカーボックスに入れて、それを利き手に持ったとします。
箱の中のアイテムは、tag.BlockEntityTag.Itemsに入っています。
/tellraw @s {"entity":"@s","nbt":"SelectedItem.tag.BlockEntityTag.Items"}
[{Slot:0b,id:"minecraft:stone_sword",Count:1b,tag:{Damage:0}},{Slot:1b,id:"minecraft:netherite_sword",Count:1b,tag:{Damage:0}},{Slot:2b,id:"minecraft:diamond_sword",Count:1b,tag:{RepairCost:0,Damage:0,"ねんがんの アイスソードをてにいれたぞ!":["そう かんけいないね","殺してでも うばいとる","ゆずってくれ たのむ!!"],display:{Name:'{"text":"アイスソード"}'}}},{Slot:3b,id:"minecraft:golden_sword",Count:1b,tag:{Damage:0}},{Slot:4b,id:"minecraft:diamond_sword",Count:1b,tag:{Damage:0}},{Slot:5b,id:"minecraft:wooden_sword",Count:1b,tag:{Damage:0}},{Slot:6b,id:"minecraft:iron_sword",Count:1b,tag:{Damage:0}},{Slot:7b,id:"minecraft:wooden_sword",Count:1b,tag:{Damage:0}},{Slot:8b,id:"minecraft:netherite_sword",Count:1b,tag:{Damage:0}},{Slot:9b,id:"minecraft:iron_sword",Count:1b,tag:{Damage:0}},{Slot:10b,id:"minecraft:golden_sword",Count:1b,tag:{Damage:0}},{Slot:11b,id:"minecraft:stone_sword",Count:1b,tag:{Damage:0}}]
リストの中の特定のもの
リストの中がタグの場合、その一部を指定すると、一致するタグだけ列挙されます。
アイテムが入っているリストでダイヤ剣だけを指定する場合なら、
[{id:"minecraft:diamond_sword"}]
のように指定します。
/tellraw @s {"entity":"@s","nbt":"SelectedItem.tag.BlockEntityTag.Items[{id:\"minecraft:diamond_sword\"}]"}
{Slot:2b,id:"minecraft:diamond_sword",Count:1b,tag:{RepairCost:0,Damage:0,"ねんがんの アイスソードをてにいれたぞ!":["そう かんけいないね","殺してでも うばいとる","ゆずってくれ たのむ!!"],display:{Name:'{"text":"アイスソード"}'}}}, {Slot:4b,id:"minecraft:diamond_sword",Count:1b,tag:{Damage:0}}
列挙したものの中の要素
列挙する指定に続けて「.」で要素をつなぐと、その要素だけ列挙したものになります。
/tellraw @s {"entity":"@s","nbt":"SelectedItem.tag.BlockEntityTag.Items[{id:\"minecraft:diamond_sword\"}].tag"}
{RepairCost:0,Damage:0,"ねんがんの アイスソードをてにいれたぞ!":["そう かんけいないね","殺してでも うばいとる","ゆずってくれ たのむ!!"],display:{Name:'{"text":"アイスソード"}'}}, {Damage:0}
条件を満たす要素
条件を付けて要素を絞り込むこともできます。
displayタグを持つtagだけに絞り込むなら、
tag{display:{}}
のように指定します。
/tellraw @s {"entity":"@s","nbt":"SelectedItem.tag.BlockEntityTag.Items[{id:\"minecraft:diamond_sword\"}].tag{display:{}}"}
{RepairCost:0,Damage:0,"ねんがんの アイスソードをてにいれたぞ!":["そう かんけいないね","殺してでも うばいとる","ゆずってくれ たのむ!!"],display:{Name:'{"text":"アイスソード"}'}}
列挙したらバラバラ
列挙したものは、もうリストではありません。
箱の中に同じ剣をもう1本入れておきます。
/tellraw @s {"entity":"@s","nbt":"SelectedItem.tag.BlockEntityTag.Items[{id:\"minecraft:diamond_sword\"}].tag{display:{}}"}
{RepairCost:0,Damage:0,"ねんがんの アイスソードをてにいれたぞ!":["そう かんけいないね","殺してでも うばいとる","ゆずってくれ たのむ!!"],display:{Name:'{"text":"アイスソード"}'}}, {RepairCost:0,Damage:0,"ねんがんの アイスソードをてにいれたぞ!":["そう かんけいないね","殺してでも うばいとる","ゆずってくれ たのむ!!"],display:{Name:'{"text":"アイスソード"}'}}
これは2つのアイテムですが、リストではないので、2つ目だけを指定したりはできません。
/tellraw @s {"entity":"@s","nbt":"SelectedItem.tag.BlockEntityTag.Items[{id:\"minecraft:diamond_sword\"}].tag{display:{}}[1]"}
次のコマンドは最後をみると1つだけ選んでいるように見えますが、列挙されたものにバラバラに実行されるため、結果は2つのままです。
/tellraw @s {"entity":"@s","nbt":"SelectedItem.tag.BlockEntityTag.Items[{id:\"minecraft:diamond_sword\"}].tag{display:{}}.\"ねんがんの アイスソードをてにいれたぞ!\"[0]"}
そう かんけいないね, そう かんけいないね
バラバラのバラバラバラはバラバラバラバラバラバラです。
/tellraw @s {"entity":"@s","nbt":"SelectedItem.tag.BlockEntityTag.Items[{id:\"minecraft:diamond_sword\"}].tag{display:{}}.\"ねんがんの アイスソードをてにいれたぞ!\"[]"}
そう かんけいないね, 殺してでも うばいとる, ゆずってくれ たのむ!!, そう かんけいないね, 殺してでも うばいとる, ゆずってくれ たのむ!!
記事の更新がやっとできました。
必要な時にまた見に来てくださいね。