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
Linked issues
is duplicated by 1
relates to 2
Attachments
Comments 4
Observers notifications already have the order -+ xzy
Tho block updates are still stuck on -+ xyz
This should be changed to make it more consistent with observers
Still present in 21w19a
No idea why you classified this as Low priority. It takes 2min for you to change...
the X->Y->Z negative->positive behavior of tile tick (scheduled) updates should definitely be changed to X->Z->Y. Not only is it consistent with existing observer and rail (shape update) behavior, it is a mostly unobtrusive and very simple change that remove a major source of directionality in redstone.
This will affect existing redstone contraptions in the following way:
builds that are not currently directional will be unaffected
builds that rely on horizontal updates being scheduled before vertical ones will work in any orientation
builds that rely on vertical updates being scheduled before horizontal ones will be broken in every orientation
I don’t foresee anyone complaining about a change like this. It will certainly be far less controversial than what’s currently in Redstone Experiments
affects 1.15-pre4
relates to:
MC-159164
MC-147057
MC-129275
MC-24009
MC-15583
MC-12518
MC-11613
MC-11193
MC-11165