mojira.dev
MC-249082

"Update suppression" no longer works

As of 22w11a, the update order has been changed from a stack to a queue.
This means update suppression no longer works, removing the ability to obtain many block states and multi-block combinations.

In the video, a stone block with a sand block on top is placed next to an update suppressor line.
When the stone is broken, the update should be suppressed and the sand should not fall. However, the sand falls.

Attachments

Comments 16

Update suppression was never truly a feature to begin with.

Going by what this type of update suppression caused, this seems to be most definitely "Works as intended".

@unknown Imo no dupe of MC-248200, and MC-248200 should/could also be resolved now, if there's no stack overflow anymore.
(Not tested myself ingame, just concluding, maybe ask OP of MC-248200 to test if still present.)

Reversed update order / update suppression no longer working should be two distinct bugposts.

6 more comments

Update suppression is a block physics bug, also used as an exploit to crash servers if you just follow a step by step tutorial, no need to be an expert or to use extra client mods (also, https://xkcd.com/1172/)

Yes, it is most definitely a bug, but its removal was unannounced and not mentioned in the changelogs, not even as a private issue, so it is safe to assume that this was not intentionally fixed.

Hi,

 

It's important to remember how this behaviour (update suppression) works in the current release version of the game (1.18.2). By recursively performing updates, the block physics propagation code is vulnerable to a stack overflow if enough updates are performed. This is what causes the suppression to happen. While most block update code can fail at any point during its execution without corrupting the world, this is not always the case. If a chunk load were to occur, you are in monstrous trouble. I have seen crashes on Paper servers (which do try and catch the StackOverflow to prevent a total crash, but this fix is from Spigot) that have resulted from exactly that. Modded servers typically have plugins that listen and have behaviours on the block physics as well, and it is not unlikely that a stack overflow may corrupt a plugin's state. However, any logic called by the block tick is vulnerable to crash unpredictably and as such this issue has a very wide surface area of attack for a wide variety of purposes - duplication, crashing, etc. To summarize, this behaviour is dangerous and prone to cause all kinds of problems, especially on modded servers - and honestly, this should be a private issue due to that. We shouldn't be inviting this kind of attention to a bug with a scope like this.

 

I am glad to see that this bug is modified so that the recursive updates no longer occur. And yes it is a bug, nobody is insane enough to write recursive code like this with the intention of allowing physics to break.

 

The block update order can be changed with the current code to be DFS (as it is currently in 1.18.2) instead of BFS with the current code as-is (i.e by polling the last added item, rather than the oldest), without requiring recursion to take place. However a BFS update order can be optimised quite well compared to the old. But that is a discussion not meant for this specific issue.

WAI? I understand this decision, but anyways, that's sad 😥

@Spottedleaf
the order is still DFS, the stack is just on the heap, and updates from an update are collected and put on the stack, then executed. this change the order of state updates vs block updates,but not block updates themselves

WyvernElement

(Unassigned)

Community Consensus

(Unassigned)

22w11a

Retrieved