The issue also persists in the case of a sticky piston retracting(useful for piston doors and instant wires). Demonstration video attached as no_neighbor_updates_on_retraction.mp4 As for the reason the issue still persists - the observer subissue seems to have been fixed by allowing the UPDATE_MOVE_BY_PISTON flag in alternative to UPDATE_NEIGHBORS to also cause calling BlockStateBase#affectNeighborsAfterRemoval but two of the different combinations of flags in PistonBaseBlock#moveBlocks don't contain the UPDATE_MOVE_BY_PISTON flag, thus causing the issue to partly persist. I would encourage fixing this by removing the UPDATE_MOVE_BY_PISTON flag check in LevelChunk#setBlockState and instead adding the UPDATE_NEIGHBORS flag to all the combinations of flags in PistonBaseBlock#moveBlocks and any other place UPDATE_MOVE_BY_PISTON is used.
This issue appears to be caused by the fact that prior to 25w02a, when LevelChunk#setBlockState was called, given the right conditions, it always called BlockStateBase#onRemoved (now called "affectNeighborsAfterRemoval"), but in 25w02a, there is an additional condition, requiring the inclusion of the "UPDATE_NEIGHBORS" flag. In PistonBaseBlock#moveBlocks some update flags passed to Level#setBlock(BlockPos, BlockState, int) were changed but still none of them include the "UPDATE_NEIGHBORS" flag. After mixing into PistonBaseBlock#moveBlocks using the following snippet, the contraptions in this bug report should work as expected:
Please note that this issue is not exclusive to pistons. Because of the aforementioned change, all direct and indirect calls to LevelChunk#setBlockState may need to be revisited in order to evaluate whether or not the "UPDATE_NEIGHBORS" flag should be passed.
Can confirm in 1.21.5 Release Candidate 1.
The issue also persists in the case of a sticky piston retracting(useful for piston doors and instant wires). Demonstration video attached as
[media]no_neighbor_updates_on_retraction.mp4
As for the reason the issue still persists - the observer subissue seems to have been fixed by allowing the
UPDATE_MOVE_BY_PISTON
flag in alternative toUPDATE_NEIGHBORS
to also cause callingBlockStateBase#affectNeighborsAfterRemoval
but two of the different combinations of flags inPistonBaseBlock#moveBlocks
don't contain theUPDATE_MOVE_BY_PISTON
flag, thus causing the issue to partly persist.I would encourage fixing this by removing the
UPDATE_MOVE_BY_PISTON
flag check inLevelChunk#setBlockState
and instead adding theUPDATE_NEIGHBORS
flag to all the combinations of flags inPistonBaseBlock#moveBlocks
and any other placeUPDATE_MOVE_BY_PISTON
is used.This issue appears to be caused by the fact that prior to 25w02a, when LevelChunk#setBlockState was called, given the right conditions, it always called BlockStateBase#onRemoved (now called "affectNeighborsAfterRemoval"), but in 25w02a, there is an additional condition, requiring the inclusion of the "UPDATE_NEIGHBORS" flag.
In PistonBaseBlock#moveBlocks some update flags passed to Level#setBlock(BlockPos, BlockState, int) were changed but still none of them include the "UPDATE_NEIGHBORS" flag.
After mixing into PistonBaseBlock#moveBlocks using the following snippet, the contraptions in this bug report should work as expected:
Please note that this issue is not exclusive to pistons. Because of the aforementioned change, all direct and indirect calls to LevelChunk#setBlockState may need to be revisited in order to evaluate whether or not the "UPDATE_NEIGHBORS" flag should be passed.
Actually here's a screenshot.