上期指路→【教程】Minecraft数据包初步#1—函数
消歧义:标签在mc中的不同意义
在mc中,标签可以指:
1.数据包中的一部分,允许玩家使用JSON文件将物品、方块和函数组合在一起。
2.命令/tag,取代1.13之前的/scoreboard players tag,用于控制计分板标签(计分板标签指路→ko↑ko↓)
3.一种NBT格式。(NBT格式指路→ko↑ko↓)
本节主要介绍的数据包“标签(Tags)”均指第一种“标签”。
标签的用法与文件结构
为了使用方块、物品、流体、实体类型或函数标签,标签JSON文件必须分别放置于数据包的data/(命名空间)/tags/blocks、data/(命名空间)/tags/items、data/(命名空间)/tags/fluids、data/(命名空间)/tags/entity_types或data/(命名空间)/tags/functions目录下。
游戏本身也使用了这些标签。原版方块标签被用于各种方块属性。原版物品标签被用于各种物品属性、原版进度文件与原版配方文件。原版实体类型标签被用于各种生物的属性。
在数据包中:标签的文件格式如下(引用自:Minecraftwiki):

其中,blocks下的标签文件对应方块标签;entity_types下的标签文件对应实体类型方块标签;fluids下的标签文件对应流体类型方块标签;functions对应函数标签;items对应物品标签。
方块标签可以在用命令测试方块时以#(命名空间ID)的形式调用。只要方块满足了该标签中定义的任何一个方块,命令就会测试通过。
实体类型标签可以在type实体选择器参数以及战利品表条件中以#(命名空间ID)的形式使用。只要实体满足了该标签中定义的任何一个实体类型,测试就会通过。
运用实例:定义命名空间lmao中的标签lol下包括实体minecraft:chicken(鸡)、minecraft:turtle(王八乌龟)、minecraft:bat(蝙蝠)。那么#lmao:lol可以作为目标选择器中type参数使用。如:执行指令
/kill @e[type=#lmao:lol]
则地图中所有的鸡、乌龟和蝙蝠会被杀死。
物品标签可以在用命令测试物品时以#(命名空间ID)的形式调用。也可以在配方或进度中用"tag": "(命名空间ID)"的格式使用。只要物品满足了该标签中定义的任何一个物品,测试就会通过。也可以在创造模式物品栏内搜索标签,即搜索#(命名空间ID)。
函数标签可以在/function命令中以#(命名空间ID)的形式调用。所有在该标签中指定的函数都会按照它们第一次出现的顺序执行。就算一个函数在标签以及子标签中被多次引用,它也只会被执行一次。
mc原版使用的标签,用于定义游戏内方块、物品、流体类型、实体类型的属性。(完整的mc标签列表指路→ko↑ko↓)
标签的JSON格式
(还不知道什么是JSON格式的同志请先学习这里的内容)
引用自:Minecraftwiki

对其中部分标签的解释:
布尔值replace可以理解为该标签内的内容是否可以被补充。
例如:两个数据包example1和example2中都有方块标签#deep:dark\fantastic,其中example1包括minecraft:smooth_stone(平滑石)、example2包括minecraft:cobblestone(圆石),且example1的优先级高于example2,那么:
对于example1中的标签#deep:dark\fantastic,若设定布尔值replace为true,那么example2中的标签#deep:dark\fantastic会被覆盖。即:在游戏中使用标签#deep:dark\fantastic,会被选中的对象只有minecraft:smooth_stone(平滑石);若设定布尔值replace为false,则反之。即:在游戏中使用标签#deep:dark\fantastic,会被选中的对象有minecraft:smooth_stone(平滑石)和minecraft:cobblestone(圆石)。因此,为了避免安装不同数据包时相同命名空间的相同标签冲突,写数据包时应尽量将布尔值replace设定为false。
布尔值required对于原版数据包来说不常用,设置为true或者false都没有太大的影响。(前提是数据包内语法正确)
标签JSON格式的一个参考

使用软件:Visual Studio Code,今后所有格式参考例图,都将使用该软件作为示范。(官网链接→ko↑ko↓)
此外,我本人还使用VSCode数据包函数编辑插件大憨批(Data-pack Help Plus),该插件可以帮助写入数据包文件时进行语法修正。(MCBBS链接→ko↑ko↓)
特殊标签:函数
函数标签内有两个较为特殊的标签类型,它们是tick和load,命名空间ID为tick的函数标签内的所有函数会在每一刻都执行一次,命名空间ID为load的函数标签内的所有函数会在数据包加载或者重新加载(加入/重新加入游戏或使用/reload)时执行一次。
-··本篇完··-
下期指路→【教程】Minecraft数据包初步#3—配方(Ⅰ)