第九十一章 红石比较器
(此章节原为『循环装置-牛顿的棺材板快要按不住了啊!!!』,于2022年7月26日改为『红石比较器』)
(此章节有用到本章说来插入图片,因此最好在起点中文网上阅读本章)
现在我们已经了解了很多指令,但是仅仅知道各种指令如何使用,最多也就称得上是一个『会用指令的玩家』而已。那该怎么办呢?我们现在要做的是,将各个指令和游戏特性互相联系起来,这也就是这一卷的主要内容。
红石比较器(Redstone Combr /arator),你应该知道这是个什么东西吧?作为红石电路的重要组成部分之一,它有许许多多的的用途。
作者的红石并不怎么好,所以这边并不会讲什么特别高深的红石相关内容(我也不会讲)。但基础的一些特性我们还是要了解了解。
让我们拿出一个红石比较器,放在地上,你应该注意到了这东西上面插着三个看起来像是红石火把的东西(其实就是红石火把),并组成了一个三角形(△)。这个三角形的一边平行于红石比较器的一侧,另一头指向另一侧(见插图91-1)。
这个三角形意味着什么呢?让我们换一个方式来看待红石比较器:
┏━┓北
┃△┃↑(插图:91-2)
┗━┛
(长方形的红石比较器?)
(额,就这样子将就看吧,能够看配图的话那更好)
这是一个朝向正北(Z-)的红石比较器,这个红石比较器有三个输入口和一个输出口:
┏O┓
B△C(插图:91-3)
┗A┛
A······后侧输入口
B······左侧输入口
C······右侧输入口
O······输出口
其中,A后侧输入口是很重要的一个输入口,你可以向这个输入口输入红石信号。当然,单纯的输入红石信号并不会发生什么事情,因为我们没有在O输出口放置一些能够接收红石信号的东西。让我们在A侧放置一个红石块,O侧放置一个红石粉看看:
亮起来的红石粉
┏O┓
B△C(插图:91-4)
┗A┛
红石块
你会发现O侧的红石粉亮起来了。这是为什么?
因为红石比较器在A侧收到了红石块产生的红石信号,于是就从O侧输出来了。那么问题来了:我们都知道红石信号有强度等级之分,在普通的红石线中传递的红石信号每过一格就会衰减一级,直到完全没有信号。那么红石信号在穿过红石比较器的过程中会发生衰减吗?
由于红石块能够产生出15级的红石信号,因此我们只需要测试O侧输出的红石信号是否为15级即可。我们当然可以通过延长O侧的红石线路,观察红石信号是否传递了15格。但别忘了本书是一个指令教程,因此我们干脆直接用指令对O侧的红石粉进行方块状态测试:
/execute if block ~~~ minecraft:redstone_wire[br /ower=15]——Java1.13及之后版本
/testforblock ~~~ minecraft:redstone_wire [br /ower=15]——Java1.12.2-1.11
/testforblock ~~~ minecraft:redstone_wire [“redstone_signal“:15]——基岩版
虽然方块状态我们并没有了解过,但也快了,这边先预习一下也无妨。上面的指令的作用是:探测指令执行地点(也就是你的位置)的方块是否是红石线,且br /ower(redstone_signal)方块状态的值为15。其中,br /ower(redstone_signal)方块状态的作用就是储存该红石粉的红石信号强度等级。
站在O侧的红石粉上,根据你的版本选择性运行上面的指令。如果指令运行成功,那么就代表着这个红石粉具有15级的红石信号,也就验证了我们上述的猜想。那么实际情况怎么样呢?
指令确实运行成功了。
这意味着什么呢?这意味着,红石比较器不会导致红石信号的衰减。但随之而来就有另一个问题——红石比较器会像红石中继器一样增强信号吗?
让我们再测试一下,将上面的结构改成下面这样:
┊——究竟是14级还是15级?
┏O┓
B△C(插图:91-5)
┗A┛
┊——14级红石信号
┊——15级红石信号
▦
图例
┊······红石线
▦······红石块
然后还是老样子,对O侧的红石线进行方块状态测试,只需要把『15』改成『14』就行。那么结果如何呢?
指令也是成功运行!
如果你不放心,你还可以重新测试一下『15』的值,然后你就会发现指令执行失败。
所以说,总结下来,红石比较器并不会导致红石信号衰减,也不会增强红石信号。借此原理,红石比较器的第一个重要用途就出来了:
保持信号强度(插图:91-6)
我们上面的讨论都仅仅基于A后侧输入口和O输出口,但红石比较器还有两个输入口:B左侧输入口和C右侧输入口。这两个输入口有什么用呢?
说到这两个输入口,就不得不提——红石比较器的模式。
红石比较器具有两种模式,可以通过观察靠近O输出口的那个红石火把的开关状态来判断此时比较器处于哪种模式:
比较模式——O输出口的红石火把关闭
作差模式——O输出口的红石火把开启
先来讲讲比较模式。当红石比较器处于比较模式时,B或C输入口输入的红石信号强度会和A输入口的红石信号强度作比较,如果B或C>A则O不输出,B或C≤A则O输出,也就是像下面这样子:
┊——0级
┏O┓(插图:91-7)
B△C▦
┗A┛
┊——14级
┊——15级
▦
∵C=15,A=14
∴C>A
∴O=0(不输出)
——————————
┊——14级
┏O┓(插图:91-8)
B△C┈┈┈▦(这里有3格的红石线)
┗A┛
┊——14级
┊——15级
▦
∵C=13,A=14
∴C<A
∴O=14(输出)
懂了吧?需要注意的是,如果B和C都有输入,那么游戏会先比较B和C,拿强度最大的和A比较:
空空┊——15级
空空┏O┓(插图:91-9)
▦┈┈B△C┈┈┈▦
空空┗A┛
空空┊——15级
空空▦
∵B=14,C=13
∴B>C
∵A=15
∴B<A
∴O=15(输出)
红石比较器的这个比较模式就是这样,同时这可以引出比较器第二个重要用途:
比较信号强度
当红石比较器靠近O输出口的红石火把开启时,红石比较器就进入了『作差模式』。作差模式的红石比较器会将A输入口的红石信号强度和B或C的红石信号强度相减,并将相减后的红石信号强度从O侧输出:
空空┊——1级
空空┏O┓(插图:91-10)
▦┈┈B△C┈┈┈▦
空空┗A┛
空空┊——15级
空空▦
∵B=14,C=13
∴B>C
∵A=15
∴O=A-B=15-14=1(输出)
不难发现,不管是在哪个模式,红石比较器都会先比较B和C输入口的信号强度,将最大的信号强度抽出来之后再操作A输入口的信号强度。
这个『作差模式』也就是这样,同时这也引出比较器第三个重要用途:
信号强度作差
那么比较器就这么讲完了吗?
No,因为红石比较器还有第四个重要用途:
检测方块状态、方块实体和物品展示框
我们知道,红石比较器可以检测命令方块上一次的执行成功次数,然后将次数转化为红石信号强度进行输出。还可以检测许多容器,以及各种东西,然后输出特定的红石信号。对于隔壁红石来说,红石比较器常常用来检测容器内物品数量,甚至是通过不可堆叠和可堆叠的物品不断在漏斗内运动,然后使用红石比较器检测,来达到『随机数运算』的目的。只不过我们这边不需要用到这么复杂的东西(其实那也没多复杂),我们只需要能够用红石比较器检测命令方块的成功次数就行了:
┊——13级
┏O┓(插图:91-11)
B△C
┗A┛
▤
图例
▤······命令方块,上次成功运行次数为13次
上面是一个简易的例子——一个上次运行指令成功次数为13次的命令方块,通过比较器成功将成功次数转化为信号强度。
所以这就是本章的全部内容了。
附录:红石比较器历史
Java
1.5——加入了红石比较器
1.6——能检测末地传送门框架和炼药锅了
1.8——能检测物品展示框和蛋糕了
1.9——比较器现在能够输入红石块的红石信号
1.14——能检测讲台和堆肥桶
1.15——能检测蜂巢和蜂箱
1.16——能检测重生锚
1.17——能检测幽匿感测体
携带/基岩版
Albr /ha0.14.0——加入了红石比较器
1.0.0——可检测末地传送门框架
1.0.5——可检测命令方块
1.1.0——可检测潜影贝
1.2.0——可检测唱片机
1.11.0——可检测烟熏炉、高炉、讲台和堆肥桶
......
......
......
......
我们知道,红石信号等级上限为15,所以当命令方块的执行成功次数等于甚至大于15时,红石比较器就没作用了。
真的吗?
让我们来看一个例子:
┊——6级
┏O┓(插图:91-12)
B△C▦
┗A┛
▤
图例
▤······命令方块,上次执行成功次数为21次
▦······红石块
这是一个处于『作差模式』的红石比较器,不难发现它的O=6,C=15。所以它的A为多少呢?
A=O+C=21,也就是命令方块执行成功的次数
等等,不是说好红石信号等级上限为15的吗?怎么跑21去了?
严格来说,并不是说红石信号等级上限为15,而是『红石线的承载能力最大为15级』。所以如果我们不使用红石线,也就不会把命令方块的输出压到15级。
但是不使用红石线我们该怎样传导大于15级的红石信号呢?
用红石比较器。
由于篇幅限制,我们这边就不详细展开,接下来就请你自行研究去吧!