第一百章 开启NBT时代(来,开杯香槟酒庆祝一下,100章了)
(此章节已于2022年8月4日重写)
首先,在正文开始前,我们先庆祝一下本书写到了100章。
好巧不巧,第一百章正好正式开讲NBT。
但估计NBT也要讲100章了.......
当然,开杯香槟酒庆祝一下那是必须的。
没香槟酒怎么办?拿雪碧也可以。
那么,正文开始!
——————————————
在第五十四章中,我们初步了解了NBT(Named Binary Tag),搞懂了SNBT的格式。在接下来的章节中,我们将会依次了解物品、实体和方块的NBT,并更加深入地研究NBT的数据类型,以及搞懂如何将NBT用于指令的方方面面。
在本卷的前面部分,我们会重点了解物品的NBT。虽然NBT仅仅只能在Java版中使用,但我们也会接触到一些基岩版的类似内容(如物品的JSON组件),所以基岩版玩家也可以来看看。
本卷的后面部分将会开始接触实体的NBT,实体NBT的相关内容起码要到第十七卷才能结束。但其实你并不需要每章都看,因为作者都是根据Minecraft Wiki上列出的那些『通用标签』来选择讲哪些NBT的,对于一些冷门的通用标签你大可不必了解,等到真正需要时再看也不迟。
第十二卷我们会暂时休息一下,然后开始深入学习JSON文本。第十五卷我们还会详细了解F3调试界面(所以这跟指令有何关系)。也就是说,尽管接下来有很多章节,但其实NBT的内容的占比不到一半。
等等,什么是『通用标签』?
在Minecraft中,难免会有一些类似的生物,比如僵尸和尸壳。但它们又是不同的实体。如果它们的NBT标签也不同的话,那么写指令的以及做开发的都很头疼。『通用标签』因此诞生。
『通用标签』,正如其名,是指多个不同种类的东西带有的相同名称和功能的标签。比如『实体通用标签』,就是指几乎每个实体都具有的标签。通用标签可以方便Mojang官方和模组开发者开发新的东西,也可以方便CBer们(CBer,Command Blocker,玩命令方块的玩家,也就是指令玩家)使用NBT。我们会在接下来的章节中,详细了解各种『通用标签』。
虽然通用标签有很多种,但常用的也不过以下几个:
①物品通用标签(最好把这个标签背下来)
②实体通用标签
③方块实体通用标签
④生物通用标签
只要你能搞懂这四个通用标签,那你的NBT基本上就过关了。至于什么『箭通用标签』、『火球通用标签』等等冷门的标签,除非你需要使用到它们,否则一般不需要学习它们的用法。这就是为什么你可以跳着看的原因。
在正式开始NBT的学习过程前,我们得详细了解Minecraft Java的一次重大更新:
JAVA1.13扁平化
我们都知道,Java1.13版本是『水域更新』,加入了珊瑚、溺尸等等新奇的东西。但Java1.13也是一个分水岭,在此次更新中,Miencraft Java的基础源代码被大量重写,导致许多模组被迫停留在1.12.2版本,甚至弃坑。但这次重写也促进了新时代模组的产生,涌现出了基于原版的数据包、Fabric、Rift等新时代的模组,使得Minecraft进入了一个全新的时代。
在指令方面,Java1.13的更新内容也不容忽视。Java1.13扁平化对许多指令以及指令的相关内容作出了很多重大改变,比如先前我们遇到的execute指令,就是一个鲜明的例子。
在扁平化中,首当其冲的就是数据值的消失。由于数据值的消失,很多id都被拆分了。比如『灰色床』,它在1.12.2是被统一到『床』(bed)里,作为数据值为7的床。而在扁平化后,『床』被拆分,『灰色床』就有了自己的id:gray_bed。当然,还有少数id被合并。比如Java1.12.2的『水』(water)和『流动的水』(flowing_water),合并之后(1.13)统一成了:水(water)。
也有些并没有被拆分或者是合并,而是被『重命名』了,比如『甘蔗』在Java1.12.2的id是『reeds』,到了1.13就变成了『sugar_cane』;岩浆块在1.12.2叫做『magma』,扁平化之后就变成了『magma_block』。
不只是这些方块、物品的id被改变,实体的id也被改变了,只不过比较少,可以全列出来:
经验球
1.12.2——xbr /_orb
1.13——exbr /erience_orb
附魔之瓶
1.12.2——xbr /_bottle
1.13——exbr /erience_bottle
末影之眼
1.12.2——eye_of_ender_signal
1.13——eye_of_ender
末影水晶
1.12.2——ender_crystal
1.13——end_crystal
烟花火箭
1.12.2——fireworks_rocket
1.13——firework_rocket
命令方块矿车
1.12.2——commandblock_minecart
1.13——command_block_minecart
雪傀儡
1.12.2——snowman
1.13——snow_golem
铁傀儡
1.12.2——villager_golem
1.13——iron_golem
唤魔者尖牙
1.12.2——evocation_fangs
1.13——evoker_fangs
唤魔者
1.12.2——evocation_illager
1.13——evoker
卫道士
1.12.2——vindication_illager
1.13——vindicator
幻术师
1.12.2——illusion_illager
1.13——illusioner
除了方块、实体、物品的命名空间ID被改变,就连生物群系(这是几乎都被重命名了)、粒子、声音、画、名字(这个并不是指id,而是它们显示出来的名字)很多也被改变,具体情况可以自己上Minecraft Wiki查阅。其中,画、粒子的id也有了命名空间(minecraft:)。而方块状态这个我们还不怎么了解的东西也做了大量的改变。
记分板准则也有了命名空间,比如『击杀生物』这个准则:
1.12——stat.killEntity.<实体ID>
1.13——minecraft.killed:namesbr /ace.<实体ID>
并且在1.13更新后,这个准则和另外一个准则(被实体击杀)所选择的实体其范围也不止能用刷怪蛋生成的实体,而是所有实体都可以用。
NBT也有很大的改变,比如『物品通用标签』中的Damage标签,在1.12.2中的作用是存储物品的数据值,而到了1.13就被调到了tag标签下,成为了『物品的损坏值』(具体见第一百零三章)。
命令的改变,大部分就是类似于/give的改变——数据值、方块状态和NBT与命名空间id参数的合并。受到这种影响的指令有:
/clear
/clone
/fill
/give
/rebr /laceitem
/setblock
还有一些其他的小改变,本书就不列出了,想看的话就到Minecraft Wiki上自己去查『扁平化』。
夕阳的光辉消失在远方的地平线上,银白色的方月自东方缓缓升起。一位钻套玩家疾跑在桦木林中,他手上的火把如同暗淡的星光点亮了前进的道路。朝前望去,在无数灰白方柱的掩映下,一座由橡木制成的房子缓缓出现,房子上的火把似乎有着无穷的魔力,吸引着这名玩家不断靠近。
咔嚓一声,房子的橡木门被打开。房子内也有一位戴着钻套的玩家。听到房门打开的声音,他的目光从工作台上移开,看向了那位从遥远的主城跑过来的玩家——张三。
那位叫做张三的玩家率先发了一条消息:『嘿李四,你知道吗,我搞到了腐竹箱子里的一把2147483647级锋利的下界合金剑!我们要发财了!』
『???』
『你怎么偷的?那里可是有出生点保护的啊!』
『额这个其实并不是我偷的,是一个管理员偷的。告诉你,这把剑可是我花了100多大洋弄到的』
『那还等什么啊?赶紧趁服务器没其他人去刷啊!』
『你确定这把剑附魔的是2147483647级的锋利?』一位叫做王五的玩家插嘴到。
『千真万确』张三把那把剑丢了出来。
『?』
『老子昨天听别人说这附魔等级最高也才32767啊?这腐竹是开挂了吗?!』
『好像腐竹开挂挺正常的啊』李四打趣到。
『等等』张三不知为何突然紧张了起来,捡起了那把剑。
『刚刚腐竹在群里说要上线!赶紧撤!』
→张三退出了游戏
→王五退出了游戏
→李四推出了游戏
......
→[超级管理]一只可爱的猫加入了游戏
→[服主]某某不是女装大佬加入了游戏