比较器读取容器的信号强度:公式与堆叠大小陷阱
一个只装了一件物品的箱子输出信号 1,但装了六十三件的箱子也一样。公式解释了原因,也解释了为什么潜影盒和铁桶会打乱你所有的计算,需要凑够整整四组满堆叠的物品,比较器输出的信号才会从 1 提升到 2,这一步很容易被忽略。
用比较器读取容器是大多数物品分类和自动合成红石装置的支柱。公式很短,而所有古怪之处都源于它。
公式
signal = floor(1 + (sum of fullness across slots ÷ number of slots) × 14)
其中每个槽位的填充度为 items in slot ÷ max stack size for that item。
1 + 是关键部分:任何非零内容物至少产生信号 1,而空容器为 0。这就是为什么检测“里面到底有没有东西”轻而易举,而检测“到底有多少”却并非如此。
为什么一件和六十三件都给出 1
一个大箱子有 54 个槽位。一组 64 个圆石正好填满一个槽位:
1 + (1 ÷ 54) × 14 = 1 + 0.259 = 1.259 → floor = 1
你需要四组满堆叠才能让输出达到 2。经典的单物品检测器之所以有效,是因为 1 是任何内容物的下限,而不是因为它测量了一件物品。
堆叠大小改变一切
max stack size 是逐物品计算的,而计算正是在这里崩溃:
| 物品 | 堆叠 | 一件物品给出 |
|---|---|---|
| 圆石 | 64 | 1/64 个槽位 |
| 末影珍珠 | 16 | 1/16 |
| 装满的铁桶、矿车、船 | 1 | 一整个槽位 |
在漏斗的五个槽位中,一件不可堆叠物品——一个水桶、一辆矿车——算作五分之一满:信号 3,而一个圆石只给出 1。四个这样的物品给出 12。这就是为什么不可堆叠物品是让计数器以巨大且可预测的增量步进的标准做法。(空铁桶可堆叠到 16,所以它的表现并不相同。)
潜影盒不是透明的
比较器读取一个装有潜影盒的箱子时,会把盒子看作占据一个槽位的一件物品。它看不到里面。假设并非如此的分类系统会悄无声息地算错。
非容器方块的比较器读取
同一个比较器还能读取:
| 方块 | 信号 |
|---|---|
| 炼药锅 | 0–3,取决于水位 |
| 堆肥桶 | 0–8,取决于填充阶段 |
| 蛋糕 | 每吃掉一片从 14 降到 0 |
| 物品展示框 | 1–8,取决于旋转角度 |
| 唱片机 | 1–15,取决于放入的唱片 |
| 讲台 | 1–15,取决于翻开的书页在书中翻到了多深 |
| 蜂箱 | 0–5,蜂蜜等级 |
| 末地传送门框架 | 有末影之眼为 15,没有为 0 |
物品展示框和讲台对隐藏开关最有用,因为它们能穿墙读取。
减法模式
前端火把点亮表示减法模式:输出为背面信号减去侧面信号,下限为 0。比较模式(火把未点亮)仅在背面信号至少与最强侧面信号一样强时才将其传递出去。
在参考与计算器 — 第 2 组中输入容器的内容物,即可获得精确信号,包括混合堆叠大小的情况。