但需要注意,虽然store子命令只能获取到最后一个条件子命令的数据,但是这不代表其他条件子命令没有作用。如果前面的条件子命令发现条件不符合的话,那么store就会无法获取到任何数据而不更改分数。
我们再来看看第二个例子。假设现在还是有2个掉落物,3头牛,1个玩家,请你猜一猜,运行第二个例子会发生什么?
答案是:item_count、cow_count和player_count的分数均会变为1
当一个带有run子命令的execute指令中含有多个store和条件子命令时,store子命令仅仅只会获取到run子命令运行的数据,并不会获取到其他条件子命令的数据。
你听懂了吗?
在本章的最后,我们来稍微了解一下store的这个storage子命令。
storage子命令(store)和predicate子命令(if|unless)都是在Java1.15版本中被添加的,并不是Java1.13一开始就有的。有趣的是,这两个东西都和数据包有较大关系。谓词我们已经知道了,那这个storage子命令又是什么呢?
正如我对这条子命令的描述一样,这条子命令可以将返回的值存储到硬盘上。更确切地说,是存储到指定的存储容器中(这是Minecraft Wiki的说法)。
硬盘?存储容器?都是什么鬼!
待会你就知道是什么鬼了。让我们先来看看这东西的格式:
... store <返回类型> storage <目标存储容器ID>
举个简单的例子:
/execute store result storage minecraft:distance To_the_nearest_village double 1.0 run locate structure #minecraft:village
这条指令适用于Java1.19及以上版本,效果是:将执行地点与最近村庄的距离以double双精度浮点数类型存储到名为『minecraft:distance』容器内的To_the_nearest_village标签。
如果你的存档是个全新的,那么你在运行上述指令后,首先游戏将会给你创建一个叫做『minecraft:distance』的存储容器,这个存储容器以NBT树状结构存储数据,并放置于你的存档目录下的data文件夹内的mand_storage_minecraft.dat文件中,具体路径如下:
这章没有结束,请点击下一页继续阅读!
存档根目录/data/mand_storage_minecraft.dat.data.contents.distance
其中,前面的『存档根目录/data/mand_storage_minecraft.dat』是文件路径,后面的『data.contents.distance』是NBT路径。
如果你看不懂也没关系,你只需要了解一件事情:计分板数据也是差不多这样子存储的——计分板存储在data文件夹下面的另外一个叫做scoreboard.dat的文件中。
然后,游戏会在这个叫做『minecraft:distance』的存储容器内部,在NBT根目录创建一个To_the_nearest_village标签,并以double的形式写上取得的数据。
这样子,你通过execute指令获得的数据就存储在了硬盘上,而且你可以随时调用。
怎么个调用法?使用/data指令获取:
/data get storage minecraft:distance
如果先前你运行指令时,执行地点与最近村庄的距离世362格,那么这将会返回:
存储minecraft:distance含有以下内容:{To_the_nearest_village:362.0d}
虽然使用起来十分容易,但由于涉及到较多的NBT知识,以及我们尚未讲过的/data指令(这玩意可比execute更加复杂),所以这边就不细讲了。
你只需要知道四点:
①这玩意可方便了
②容器名称只要符合规范,随便写(如hentai:Photos、I_am_a_shuabi:things)
③标签名称只要符合规范,也随便写(如a_photo、what_up)
④数据类型一般用int即可
那么本章就到此结束了。