Multipart Lights don't determine lighting state correctly
jpfx1342 opened this issue ยท 2 comments
The problem is simple. Multipart lights determine their power level only on a per block basis, instead of using the proper FMP method to determine "face redstone part" power. This causes some incorrect behavior regarding when lights should be lit, as well as making it impossible to change lights in the same block individually.
(In the following images, all lights are Inverted to correspond with the torches: they darken when they receive a signal.)
This image shows the core of the problem.
- The redstone torch on the left not extinguished, because it is receiving no signal.
- The redstone torch on the right is extinguished, because it is receiving a signal.
- Essentially, the torches extract the signal from the block behind them.
- The first set of fixtures are both extinguished, apparently because the block containing them is powered.
- The second fixture on the left is extinguished as well, even though the power doesn't seem to have any way to reach it.
- The third fixture on the left is not extinguished, because it is receiving no signal.
- The fixtures seem to draw their power from their own block, instead of the block behind them.
This image shows another interesting side effect of this:
- The redstone torch is not extinguished, because the signal from the lever cannot reach it.
- The fixture is extinguished, even though it shouldn't be.
Looking at the code, the crucial difference seems to be this:
- illumination/lightpart.scala uses "world.isBlockIndirectlyGettingPowered(x, y, z)" to determine power state.
- RedstoneTorchPart.java uses "RedstoneInteractions.getPowerTo(this, side) > 0" to determine power state.
Fixed via 8bcc5dc