04 铜灯
1 方块状态
铜灯有 2 个方块状态:
LIT只会在红石信号从无到有时翻转。POWERED表示当前是否有相邻红石信号输入,与LIT相互独立。- 默认状态为
LIT=false, POWERED=false。
2 状态检查的触发条件
状态检查只在以下两个服务端时机调用 checkAndFlip:
-
放置 / 替换时:
onPlace- 仅当旧方块不是铜灯时执行。
- 因此新放置的铜灯如果周围已有红石信号,会立即检查并可能切换一次亮灭。
-
收到 NC 更新时:
neighborChanged
- 只在
ServerLevel执行。 - 铜灯的状态检查在收到更新时被瞬时调用,不添加任何计划刻事件
3 红石信号检查与翻转逻辑
收到 NC 更新后,铜灯先判断是否在ServerLevel,如果是则直接调用checkAndFlip完成后续的检测与更新
checkAndFlip 方法如下:
解释:
-
获取当前位置的红石输入信号:如果
signal == state.getValue(POWERED),则不需要变化,不做任何处理。 -
如果
signal != state.getValue(POWERED):-
当前不是激活状态:无信号 → 有信号(上升沿)
当前POWERED == false,且signal == true:- 翻转
LIT:
newState = newState.cycle(LIT); - 播放声音:根据变化状态判断应该播放铜灯亮起的声音还是铜灯熄灭的声音
- 设置
POWERED = true更新方块状态并发出方块更新
- 翻转
-
当前是激活状态 有信号 → 无信号(下降沿)
当前POWERED == true,且signal == false:- 不翻转
LIT,不播放声音。 - 设置
POWERED = false更新方块状态并发出方块更新
- 不翻转
-
铜灯只在红石信号出现时切换一次亮灭;信号消失时只清除
POWERED,LIT保持。
4 比较器输出
-
hasAnalogOutputSignal始终返回true,因此铜灯可以被比较器检测。 -
getAnalogOutputSignal输出:LIT == true→ 输出强度15LIT == false→ 输出强度0
-
比较器输出只由
LIT决定,与当前是否收到红石信号(POWERED)无关。
5 铜灯氧化
与其他铜制品的氧化逻辑相同,这里不多赘述

