上期指路→【教程】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—配方(Ⅰ)