NBT操作基礎 第2部
6.リスト内の値の指定方法①
NBT操作基礎 第1部 4.NBTの値 リスト編 で扱ったNBTをもう一度詳しく見てみましょう。
ゾンビ1体が持つ「Pos」という名前のNBTの内容を確認するコマンドを実行してみます。↓
/data get entity @e[type=zombie,limit=1] Pos
[-26.5d, -13.0d, 156.5d] という結果が表示されました。この結果は、ゾンビが今立っている座標を表しているんでしたね。
これは3つの数値がリストという形として一つの値で表示されています。
ですが、それぞれの値を個別に確認するにはどうすればいいでしょうか?
リスト内の先頭の値を確認するには「 Pos[0] 」のように、「NBTの名前」の直後にスペースを入れずに 角括弧 [ ] とその中に 0 を記述します。
実際にコマンドを実行して確認してみましょう。↓
/data get entity @e[type=zombie,limit=1] Pos[0]
確かに、「Pos」で確認した際の値「 [-26.5d, -13.0d, 156.5d] 」というリストの、先頭の値「-26.5d」が確認できました。
先頭の値を確認する時は 角括弧 [ ] の中に入れる数字は 0 を使用しましたが、これは「リスト内で何番目の値か」を表します。
リスト内の値は先頭から0番目、1番目、2番目…と0から順に番号が付けられています。
したがって、先頭の値を確認するときは0を使用したということです。
確認問題② 複雑なNBTの指定
このNBTの指定は非常に重要となってきますから、問題を交えて理解していきましょう。
- ゾンビ1体が持つ「Pos」という名前のNBTの内容を確認した時、[-26.5d, -13.0d, 156.5d] という結果が表示されました。
直後に、そのゾンビに対して「Pos[2]」という名前のNBTの内容を確認しました。
結果はどのように表示されるでしょうか?
3択問題です。
① -13.0d
② 156.5d
③ [-26.5d, -13.0d, 156.5d]
正解を表示
正解:
② 156.5d
解説:
リスト内の値には先頭から順に0番目、1番目、2番目…と番号が付けられているので、角括弧内に2と指定した場合、先頭から2番目である156.5dが表示されます。
指で数えた時の1番目2番目3番目とは一つずれているため注意が必要です。先頭が0番目です。
なお①の -13.0d は「Pos[1]」という名前のNBTの内容を確認した場合の結果で、③の [-26.5d, -13.0d, 156.5d] は問題文と同じ「Pos」という名前のNBTの内容を確認した場合の結果となります。
7.NBTの変更①
いままで使ってきたコマンドはNBTの値を確認するものでした。
Minecraftのコマンドの大きな魅力は、このNBTの値を直接変更できることにあります。
次のコマンドを使用することでNBTの値を変更することができます。↓
/data modify entity @e[type=zombie,limit=1] Pos[1] set value -10.0d
今までは data get を使っていましたが、getの部分を modify とすることでNBTの値を変更することができます。
getでNBTの値を確認する時と同様に変更したい「NBTの名前」を指定し、その後に「set value 値」と記述するとその値に変更します。
上で使ったコマンドをもう一度よく見てみましょう。↓
/data modify entity @e[type=zombie,limit=1] Pos[1] set value -10.0d
NBTの名前は「 Pos[1] 」となっています。
これはゾンビが立っている座標の先頭から1番目(指で数えて2番目)を表し、Pos は先頭から順にx座標、y座標、z座標を意味しますから、今回はy座標(高さ)を指定していることになります。
続けて「set value -10.0d」とあるので、ゾンビのy座標を -10.0d にしているということになります。
上のGIF画像からも、ゾンビの立っている位置の高さが変更されていることが分かります。
8.NBTの変更②
面白いコマンドを紹介しましょう。
ゾンビを1体用意したら、以下のコマンドを実行してみてください。↓
/data modify entity @e[type=zombie,limit=1] Motion[1] set value 1.0d
どうなりましたか?
おそらく、ゾンビが真上に吹き飛んだと思います。↓
「Motion」という名前のNBTは、エンティティの運動量を表します。
前扱った「Pos」と同様に、x軸成分、y軸成分、z軸成分の3つの値をリストとしてまとめて持っています。
したがって、先ほど実行したコマンド
/data modify entity @e[type=zombie,limit=1] Motion[1] set value 1.0d
では、「 Motion[1] 」の数値を 1.0d にしたため、上方向に運動量が変更されたということになります。
なぜ上方向の成分が変更されたかといえば、 Motion という名前のNBTはリストであり、Motion[1] はリスト内の先頭から1番目(指で数えて2番目)を指定し、それには運動量のy軸成分が対応しているためです。
Motion[1] の部分を Motion[0] にしてみたり、1.0d の値を -0.5d にしてみたりと値を変更してみると、ゾンビが様々な方向へ吹き飛ぶことが分かると思います。
いわゆる飛び跳ねる敵モブや、襲い掛かってくるボスなどは、この「Motion」というNBTを変更することによって表現されているのです。
なお、プレイヤーのNBTは変更できません。
なぜかと聞かれても、そう決まっているからとしか答えられません。
全コマンド使いが通る道です。代わりに謝っておきます。ごめんなさい。
9.データの型
/data get entity @e[type=zombie,limit=1] Motion
で、ゾンビが持つ「Motion」という名前のNBTを確認することができますよね。もう慣れてきたでしょうか。
結果は次のようになります。↓
[0.0d,-0.0784000015258789d,0.0d] と表示されました。
リスト内の先頭から1番目の数値がかなり細かく表示されていますが、これはデータの型によるものです。
確認問題③ データの型
今回の問題はデータの型についてです。
- 「Motion」という名前のNBTを確認したときに表示された [0.0d,-0.0784000015258789d,0.0d] という結果は、リスト内に同一のデータの型を持った値が3つ並んでいました。
では、値の末尾にある d というアルファベットが表すデータの型は次のうちどれでしょう?
4択問題です。
① 文字列
② 浮動小数点数
③ 倍精度浮動小数点数
④ 真偽
正解を表示
正解:
③ 倍精度浮動小数点数
解説:
アルファベット d は、倍精度浮動小数点数を表します。(Double)
他の選択肢については、次の表でまとめておさらいしましょう。
選択肢 | データの型 | 値の書式 |
---|---|---|
① | 文字列 | ” ” ダブルクオーテーション で囲います。例:”Sushi” “Maguro” NBT操作基礎 第1部 5.NBTの値 文字列編 参照 |
② | 浮動小数点数 | 数字の末尾にアルファベット f を追加します。例:15f -23.0f NBT操作基礎 第1部 3.NBTの値 数値編 参照 |
③(正解) | 倍精度浮動小数点数 | 数字の末尾にアルファベット d を追加します。例:-1d 2.0d NBT操作基礎 第1部 4.NBTの値 リスト編 参照 |
④ | 真偽 | 数字の末尾にアルファベット b を追加します。1bは真(true)、0bは偽(false)を表します。 NBT操作基礎 第1部 3.NBTの値 数値編 参照 |
おまけ | リスト | [ ] 角括弧 で囲い、同一のデータの型の値を , カンマ で区切り並べます。例:[1.0f, -2.1f, 45.0f] [“aaa”, “bbb”, “ccc”, “ddd”] NBT操作基礎 第1部 4.NBTの値 リスト編 参照 |
確認問題として出題をしましたが、データの型は覚える必要はありません。
実は data modify コマンドで値を変更する際に、データの型を表すアルファベット(d や f や b など)を付けなくても、Minecraft側が勝手に解釈をして変換してくれます。↓
/data modify entity @e[type=zombie,limit=1] Motion[1] set value 1.0
そのため、ここで重要となってくることはNBTのデータには型があるということです。
data get コマンドによってNBTを確認したときに、そのNBTは整数しか受け付けないのか、最大値や最小値が決まっているのか、あるいは文字列なのかを判別するために型が決まっています。
リストで値を並べるときも、「データの型は同一」というルールがありましたよね。
なのでデータの型は確かに大切ですが、その詳細をすべて正確に覚える必要はなく大雑把に「これは文字列のはずだ」「これは確か小数点を表す」くらいに覚えておいて、もっと楽しい部分に力を注げるようにしておきましょう。
第2部 おわり
NBTの確認だけでなく、data modifyコマンドによってNBTを操作できるようになってきましたね。
第3部では、NBTの階層構造に触れていきます。これさえ乗り越えればすべてのNBTを網羅できます。
次回の更新をお待ちください。