第六十二章 命令方块矿车
Minecraft中的矿车有许许多多的种类。截至目前的1.18.2版本,Minecraft一共有如下几种矿车:
TNT矿车——会爆炸
动力矿车——像火车一样可以消耗燃料前进
普通矿车——可以运输生物和船(?)
运输矿车——放东西
漏斗矿车——传输物品
刷怪笼矿车——生成生物
命令方块矿车——执行指令
每种矿车都有自己的特点以及独特的用法。比如你可以通过在一个狭窄的空间内堆叠超级多的TNT矿车来制作一个可以秒杀几乎任何生物的爆炸装置。
那么对于命令方块矿车来说,有什么奇妙的用法呢?
观前提示:在了解命令方块矿车之前,请先把矿车的英文和我的世界的英文区分开,因为:
矿车————Minecart
我的世界——Minecraft
记住,千万不要把矿车和我的世界混在一起了,矿车的英文比我的世界少了一个字母“F”!(基岩版旧版本的翻译就犯了这个错误,用机翻然后把命令方块矿车翻译成“带有命令块的《我的世界》”)
首先,让我们来了解一下命令方块矿车的基本数据。
命令方块矿车(Minecart with Command Block)的实体和物品ID均为command_block_minecart。它和普通的矿车一样,也是一个实体,唯一的区别就在于命令方块矿车在普通矿车的基础上多了一个迷你的命令方块。
如果命令方块矿车被处于生存模式下的玩家打掉,将会仅仅掉落矿车(不然还会掉落命令方块啊?)。
(注:在Java1.11版本之前,命令方块矿车的ID是MinecartCommandBlock)
看起来命令方块矿车的本质就是一个会移动的命令方块。但实际上,两者在很多方面都有较大的差异。
第一个差异:种类
和普通的命令方块不一样的是,命令方块矿车的种类是固定死的。在Java版中,命令方块矿车的种类被固定成了脉冲型,在基岩版则是循环型。至于为什么要这么搞,待会你就知道了。
(这里其实有个BUG,编号MCPE-42990,就是在基岩版中物品形态的命令方块矿车竟然是脉冲型的,放出来就变循环型了。真离谱。)
第二个差异:激活方式和执行频率
普通的命令方块可以通过红石信号激活,但命令方块矿车作为一个实体该如何感受到红石信号呢?想想TNT矿车是怎么被激活的你就知道了。
命令方块矿车和TNT矿车一样,当它处于激活铁轨上时,就会被激活并执行指令。
你看到这估计没有任何疑问。但别忘了,命令方块矿车虽然不能选择种类,但本质上也是有种类的是不是。既然命令方块在Java版是脉冲型,在基岩版是循环型,那么两者是不是不一样呢?
我们现在不打开Minecraft,就凭脑子猜一猜,然后你大概率会得出如下结论:
在Java版中,命令方块矿车由于是脉冲型,所以当它处于被红石信号激活的激活铁轨上时,只会执行一次。如果需要再次执行,需要先停止激活激活铁轨,然后再次激活激活铁轨才行。
而在基岩版,命令方块矿车是循环型,所以当它处于被红石信号激活的激活铁轨上时,它会一直执行直到没有红石信号。
好,看来你之前学的东西都没有白费,所以让我们打开Minecraft验证一下吧!
我们先打开Minecraft Java(只要有命令方块矿车的版本均可),然后放置一个激活铁轨并在旁边放上拉杆,随后将一个命令方块矿车置于铁轨之上。
为了方便观察,我们这边还需要创建一个计分项,如:
/scoreboard objectives add test dummy
然后在命令方块矿车中输入:
/scoreboard br /layers add test test 1
最后激活铁轨,令人大跌眼镜的一幕发生了,聊天框中开始出现如下的执行信息:
[@:将玩家test的test分数设置为1]
[@:将玩家test的test分数设置为2]
[@:将玩家test的test分数设置为3]
[@:将玩家test的test分数设置为4]
.......
你这不是脉冲型吗,怎么一直在重复执行?
然后我们可以再打开Minecraft基岩版,也按照上面的实验流程进行,你也会发现现象是一致的。
这究竟是怎么一回事?其实命令方块矿车是个很神奇的东西,不管它的外观是脉冲型还是循环型,它在两个Minecraft版本中的特性都是一致的:
当其位于被激活的激活铁轨上方时,命令方块矿车会以4游戏刻为周期循环执行指令,即正常情况下每秒会执行5次。
也就是说,命令方块矿车本质上是循环型,只不过是频率比较慢的循环型而已。
(所以Mojang,你在Java版搞这个外观是干啥呢?误导人是吧。)
这就是命令方块矿车与普通命令方块的第二个差异。
第三个差异:红石比较器
和命令方块一样,命令方块矿车也可以通过红石比较器检测命令的运行情况。但毕竟矿车是个实体,这导致如果要检测命令方块矿车的话,就得用红石比较器检测处于命令方块矿车下面的铁轨才能检测到命令方块矿车。
需要注意,这里的铁轨不是普通的铁轨,也不是激活铁轨,而是探测铁轨,就是中心有一个正方形的那个!
上面这三个差异就是命令方块矿车和命令方块最主要的差异了。那么命令方块矿车有什么用呢?
命令方块矿车和普通的命令方块相比,最重要的一个特点就是可以移动,特别是可以按照预定的线路移动,所以命令方块矿车很适合运用在空间需要不断变化的场景内,比如:
我们需要自动铺路、挖掘机,并对美观没有太大要求,直直的即可
这种情况下命令方块矿车就很有用了。但实际上,命令方块矿车最常见的用处并不是在这里,而是在OOC(Only One Command),即“仅有一条指令”。
啥意思呢?
(考虑到这东西会涉及到下落的方块的使用、实体的骑乘属性还有NBT,所以这里我们就先简单介绍一下,不过多深入。)
想一想,在Minecraft中,你是不是可以骑在马上?
你应该知道在Minecraft中,每个实体都有一个NBT,那么当你骑在马上的时候,你和马是两个独立的个体还是被看作是一个个体呢?
从外观上来看,是两个个体。但如果你此时查看一下马的NBT,你就会发现在NBT层面,你们俩合二为一了!
没错,在NBT层面,你的实体NBT被嵌套进了马的NBT里面!
好,那么我们现在想一想,从理论上来说,你可以骑在羊上吗?或者说甚至是一些其他的实体,如你可以骑在玩家上吗?
我们先不要过早下结论,让我们来看看2022年4月1日Mojang发布了个什么惊人更新:
One Block at a Time Ubr /date(一次只拿一块更新)
在这次更新中,你可以和其他玩家叠高高,也就是骑在玩家身上,而且最高还可以叠5层!
这说明了什么?这就说明了,玩家也是可以骑在玩家身上的。
但为什么玩家在这次更新就可以被骑了呢?是不是Mojang为了实现这个功能把马的骑乘模块移到了玩家身上?
答案并不是这样的,而是玩家本身就有骑乘模块,或者说Minecraft中的所有实体都有骑乘模块,只不过Mojang仅仅让少数实体可以应用这些模块而已。
所以从理论上来说,你是可以骑在羊身上的,甚至你可以说,你可以骑在任何实体身上!
那么这跟指令以及命令方块矿车有什么关系呢?
现在让我们再来看看另一个东西:下落的方块。
下落的方块,名字听起来是个方块,但实际上它是个实体。
你可能认为你从来没有见到过下落的方块,但实际上,你很容易就可以遇见它。
在Minecraft中,如果一个受到重力影响的方块(如沙子)要落下,那么游戏就会将其转换为“下落的方块”这个实体,并将方块的相关数据存储于实体NBT中,等到实体落到地面之后游戏再将其转换回去。
既然下落的方块是个实体,那么我们就可以通过summon指令将其生成。并且,由于方块的相关数据都存储于实体NBT中,所以我们可以通过指令来召唤特定的“下落的方块”。比如,你可以召唤出一个“下落的钻石块”,这个实体版的钻石块照样会在落到地面时变回方块版的钻石块。
好,你现在听懂了吧,但这又跟命令方块矿车有什么关系呢?
想一想,如果我们使用summon命令,召唤一个“下落的红石块”,这个“下落的红石块”上面骑着“下落的激活铁轨”,而这个“下落的激活铁轨”上面又骑着一个命令方块矿车,最后,这个命令方块矿车里写了一串指令:say hello Minecraft。
听着有点晕是吧?正常。简单点说,就是你召唤了一个叠高高,这个叠高高一共有三层,最上面一层是写有“say hello Minecraft”指令的命令方块矿车,中间一层是正处于下落状态的“激活铁轨”,最下面一层是正处于下落状态的“下落的红石块”
能够明白了吧?想一想,当这个“叠高高”到达地面时,会发生什么事情?
红石块会先落到地面并回到方块形态,然后激活铁轨就会因为红石块变回方块而也变回方块形态,随后被红石块激活。命令方块矿车接着会落到激活铁轨上面,并开始重复执行指令。最终你的聊天栏就会不断出现“hello Minecraft”的消息。
是不是很神奇?仅用一条指令,就执行了........say hello Minecraft?这本来就可以一条指令做到啊,搞这么复杂有毛病啊?!
没有毛病。别忘了,既然命令方块矿车可以骑在下落的方块上,那不也能骑在命令方块矿车上吗?而且由于铁轨方块的特性,同一个铁轨上可以有许多个矿车卡在一起。所以从理论上,你可以通过“叠高高”的形式召唤一大堆的命令方块矿车,这些命令方块矿车可以分别执行不同的指令,但你召唤它们仅需要一条十分十分十分长的指令即可。
这就是OOC(Only One Command),即“仅有一条指令”在游戏中真正的表现形式。
(其实还有一种表现形式,就是召唤叠高高的“下落的命令方块”,照样也可以实现类似的功能,就是比较占地)
现在你知道命令方块矿车有何作用了吧?
(你知道吗,在基岩版1.17尚未更新时,命令方块矿车有一个恶性BUG,编号MCPE-93666。
这个BUG的内容很简单:游戏规则commandblocksenabled用于控制命令方块是否启动,但这个规则管不到命令方块矿车,这就导致就算关闭了commandblocksenabled这个规则,命令方块矿车也可以运行命令。
在当时,许多基岩版的服务器就因为这个BUG遭到了破坏,Mojang也是很快地在有人反馈后就在1.17更新中修复了这个bug。现在已经没有这个bug了。)