08 铜灯
1 方块状态
铜灯有 2 个方块状态:
- 点亮状态
LIT只会在红石信号从无到有时翻转。 - 激活状态
POWERED表示当前是否有相邻红石信号输入,与 点亮状态LIT相互独立
2 状态检查的触发条件
状态检查只在以下两个服务端时机调用:
- 放置/替换时检查状态:
- 仅当旧方块不是铜灯时执行。
- 因此新放置的铜灯如果周围已有红石信号,会立即检查并可能切换一次亮灭。
这与投掷器,音符盒等不同,它们在被放置时都不会检查自身是否收到红石信号
- 收到 NC 更新时检查状态:
- 只在服务端执行。
- 铜灯的状态检查在收到 NC 更新时被瞬时调用,不添加任何计划刻事件
铜灯的状态切换在收到红石信号后的瞬间完成,属于瞬时元件。
据此,甚至可以在一个游戏刻内,多次激活铜灯,做出在一个游戏刻的不同阶段有着不同亮灭状态的铜灯
3 红石信号检查与翻转逻辑
收到 NC 更新后,铜灯先判断是否在服务端,如果是则完成后续的检测与更新
收到更新后,铜灯的检测逻辑:
-
获取当前位置的红石输入信号:如果当前信号和铜灯的被激活
Powered状态相同,则不需要变化,不做任何处理。 -
如果当前信号和铜灯的被激活
Powered状态不同:-
当前不是激活状态:无信号 → 有信号(上升沿)
当前 铜灯未被激活,且 有红石信号:- 翻转 点亮状态
Lit: - 播放声音:根据变化状态判断应该播放铜灯亮起的声音还是铜灯熄灭的声音
- 设置铜灯为激活状态
POWERED = true更新方块状态并发出方块更新
- 翻转 点亮状态
-
当前是激活状态 有信号 → 无信号(下降沿)
当前 铜灯被激活,且 有没有红石信号:- 不翻转 点亮状态
LIT,不播放声音。 - 设置铜灯为非激活状态
POWERED = false更新方块状态并发出方块更新
- 不翻转 点亮状态
-
总结:铜灯只在红石信号出现时(上升沿)切换一次亮灭;信号消失时只清除激活状态
POWERED,点亮状态LIT保持。
4 比较器输出
-
铜灯可以作为提供比较器信号的方块,被比较器检测到。
-
比较器输出:
- 铜灯亮起时→ 为比较器提供强度
15的输入信号 - 铜灯熄灭时 → 为比较器提供强度
0的输入信号
- 铜灯亮起时→ 为比较器提供强度
-
比较器输出只由 点亮状态
LIT决定,与激活状态POWERED)无关
5 比较器更新
- 铜灯在反转点亮状态
LIT时会尝试发出比较器更新
铜灯发出更新的顺序是先 NC 更新,再比较器更新,再 PP 更新
