aa0307bb
①像实体/物品/方块,有的时候它们的一个NBT要写在"Tags.xxx"之后或者"Tags:{}"之内,有时又不用,怎么判断(与指令有关吗?比如give/data get……)
诸如此类的还有AttributeModifiers、ActiveEffects
②有时候到底该用小圆点还是方括号还是什么都不用加。比如到底该用xxx.Enchantments[],xxx.Enchantments[{}],还是xxx.Enchantment;想得到Y坐标用Pos[1]是对的,用Pos.Y是错的;
诸如此类的似乎还有Attributes、ActiveEffects、HandItems......


SPGoding
① 我…没看懂
② 小圆点是连接 NBT 路径的不同部分;方括号是在列表、数组中表明某个元素。


我举个例子吧,咱有这么一个 NBT:
{ Enchantments: [ { id: "abc", lvl: 1s }, { id: "def", lvl: 1s } ] }


路径 Enchantments[] 能够获取到:
{ id: "abc", lvl: 1s }
{ id: "def", lvl: 1s }


路径 Enchantments[{}] 能够获取到(其中,{} 的意思是筛选,这里例子中 {} 是空的,所以相当于没有):
{ id: "abc", lvl: 1s }
{ id: "def", lvl: 1s }


路径 Enchantments[{id:"abc"}] 能够获取到(其中,{} 的意思是筛选):
{ id: "abc", lvl: 1s }


路径 Enchantments 能够获取到(没有带方括号,所以获取到的是整个列表):
[ { id: "abc", lvl: 1s }, { id: "def", lvl: 1s } ]




https://github.com/SPGoding/mcbb ... bt-path/markdown.md
这是我以前写的一个有关 NBT 路径的小教程,是半成品,一直没敢往外发,可能错漏不少,还请见谅,仅供参考。

爱心魔王FHC
本帖最后由 FHC红石 于 2019-8-16 18:35 编辑

1、打开wiki区块格式/Player.dat格式鼠标移到NBT前面,TAG_List就是[],TAG_Compound就是{},TAG_Byte就是数字(剩下你根据经验判断就好,还有善用data指令获取实体的NBT看看他们是怎么写的,然后与wiki对照)







2、你可以自己试试可以获取到什么,是不同的
Y坐标的话
是Pos:[x,y,z]
Y是第二个参数
所以要得到他是(0是第一个参数,1是第二个参数,2是第三个参数)
Pos[1]

我觉得wiki例子都写了挺明白的吧XD
https://minecraft-zh.gamepedia.com/%E5%91%BD%E4%BB%A4/data

⊙u⊙
本帖最后由 ⊙u⊙ 于 2019-8-16 01:46 编辑



实体Tags记录的是该实体所拥有的标签,tag @s add的那种
Tags:["foo","bar"]

物品标签一般是tag内有关这个物品的nbt。
Item:{id:"minecraft:iron_axe",Count:1b,tag:{Damage:1,Unbreakable:1b}}
主要出现在当物品以实体的形式出现时


物品与物品掉落物的差别
  1. /give @s iron_axe{Damage:1,Unbreakable:1b}
  2. /summon item ~ ~ ~ {Item:{id:"minecraft:iron_axe",Count:1b,tag:{Unbreakable:1b,Damage:1}}}
复制代码

而生成带有实体标签的物品则为如下
  1. /summon item ~ ~ ~ {Item:{id:"minecraft:iron_axe",Count:1b,tag:{Unbreakable:1b,Damage:1}},Tags:["foo","bar"]}
复制代码



或者那些叫你用这个的...
  1. /give @s iron_axe{Damage:1,Unbreakable:1b,Tags:["foo","bar"]}
复制代码
而当把这个物品丢出去,成为实体的时候,nbt则为如下
与前面summon的对比不难发现,Tags不在同一个水平
{Item:{id:"minecraft:iron_axe",Count:1b,tag:{Unbreakable:1b,Tags:["foo","bar"],Damage:1}}}

所以,除非十足原因,请不要这么用...(在菜鸡群见过几次,不知道谁起的坏头...)



另外...
Tags.xxx指的是nbt路径
Tags:["foo"]指的是标签和值

chyx
SPGoding 发表于 2019-8-16 18:22
① 我…没看懂
② 小圆点是连接 NBT 路径的不同部分;方括号是在列表、数组中表明某个元素。


你这里有一个小错误。
[]可以获取每一项没错,但是你说[{}]和[]没区别就不合适了
[{}]会要求选出来的内容是Compound………
你这样说,对内容是非Compound的List和Int/Byte/LongArray是不公平的

chyx
使用.和[]来取值是不一样的。
方括号能取List和Array这四种tag里的值。
这些类型的tag都是把里面的元素按顺序排列起来。其中每一项都没有名字,靠他们的位置来区分的。
而.是取Compound里的东西的。Compound里每一项都有一个名字。他们的顺序不重要,而是靠名字来辨认是哪一个的。



方括号里面加上编号来按照编号找内容
而.后面加名字来按名字找内容。


爱心魔王FHC
有用请设置最佳,谢谢
引用自wiki
数据标签键值数据类型


然后你在wiki里看NBT的时候对照这个就知道要填{}还是[]了
https://minecraft-zh.gamepedia.c ... 7%E6%A0%BC%E5%BC%8F
https://minecraft-zh.gamepedia.com/Player.dat%E6%A0%BC%E5%BC%8F

小圆点还是方括号还是什么都不用加,这几个获取到的东西的不同的,看你需要获取什么
Y坐标的话
是Pos:[x,y,z]
Y是第二个参数
所以要得到他是(0是第一个参数,1是第二个参数,2是第三个参数)
Pos[1]
我觉得wiki例子都写了挺明白的吧XD
https://minecraft-zh.gamepedia.com/%E5%91%BD%E4%BB%A4/data

还有不懂的可继续询问

爱心魔王FHC
有用请设置最佳,谢谢
引用自wiki
数据标签键值数据类型


然后你在wiki里看NBT的时候对照这个就知道要填{}还是[]了
https://minecraft-zh.gamepedia.c ... 7%E6%A0%BC%E5%BC%8F
https://minecraft-zh.gamepedia.com/Player.dat%E6%A0%BC%E5%BC%8F

小圆点还是方括号还是什么都不用加,这几个获取到的东西的不同的,看你需要获取什么
Y坐标的话
是Pos:[x,y,z]
Y是第二个参数
所以要得到他是(0是第一个参数,1是第二个参数,2是第三个参数)
Pos[1]
我觉得wiki例子都写了挺明白的吧XD
https://minecraft-zh.gamepedia.com/%E5%91%BD%E4%BB%A4/data

还有不懂的可继续询问

第一页 上一页 下一页 最后一页