The Bug
The order in which block updates are sent from the source is directional when rotating around the Y Axis
The current system updates the blocks on the X axis, then the Y and last the Z
-+XYZ, -X +X -Y +Y -Z +Z, West East Down Up North South
This causes problems when rotating around the Y axis, as depending on the rotation, the X axis could update before or after Y
This means you can currently rotate around the Z axis without this problem
But you can't rotate most things around the X axis because repeaters don't go on walls
Changing the non-directional axis from Z to Y makes a lot more sense
Potential Fix
If the update order was changed to -+XZY, -X +X -Z +Z -Y +Y, West East North South Down Up
It would mean that X (and Z) will always update before Y, no matter the Y rotation
Observer notification updates already have this fix
They update -+XZY rather than block update's -+XYZ
Block updates should be changed from -+XYZ to -+XZY to be made consistent with observers
Observers were Y axis directional in 1.12.2, but they are no longer in 1.14+
The change can be done by having .below() and .above() update after .north() and .south(), inside the class level.java (located at minecraft/world/level/), method updateNeighborsAt() and updateNeighborsAtExceptFromFacing()
public void updateNeighborsAt(BlockPos blockPos, Block block) { this.neighborChanged(blockPos.west(), block, blockPos); this.neighborChanged(blockPos.east(), block, blockPos); this.neighborChanged(blockPos.below(), block, blockPos); this.neighborChanged(blockPos.above(), block, blockPos); this.neighborChanged(blockPos.north(), block, blockPos); this.neighborChanged(blockPos.south(), block, blockPos); } public void updateNeighborsAtExceptFromFacing(BlockPos blockPos, Block block, Direction direction) { if (direction != Direction.WEST) { this.neighborChanged(blockPos.west(), block, blockPos); } if (direction != Direction.EAST) { this.neighborChanged(blockPos.east(), block, blockPos); } if (direction != Direction.DOWN) { this.neighborChanged(blockPos.below(), block, blockPos); } if (direction != Direction.UP) { this.neighborChanged(blockPos.above(), block, blockPos); } if (direction != Direction.NORTH) { this.neighborChanged(blockPos.north(), block, blockPos); } if (direction != Direction.SOUTH) { this.neighborChanged(blockPos.south(), block, blockPos); } }
Additional information
With the image of the dispensers:
On the right-hand side: The top dispenser places the water, then the left dispenser picks it up instantly
On the left side: The right dispenser drops an empty bucket, then the top dispenser places the water
Each pair of pictures shows the current directional system and the non-directional fixed version
Panda4994 has a video and mod on this issue
https://www.youtube.com/watch?v=aRr3NpmQiCg
http://www.mediafire.com/download/b9mjwuimu2ei7wg/1.9_UpdateOrder.zip
This bug has nothing to do with MC-108
MC-11193 does not cause this, but the other way round, this bug contributes to MC-11193
Nor is it a piston bug, it's just that its most easily seen with pistons