Please enable JavaScript for things to display properly!

Update Suppression

Update Suppression is a method of stopping the execution of certain code by intentionally causing an exception while the game is running, usually a Stack Overflow. An exception will normally cause the game to stop all processing and crash. However, if the initial action that led to the exception (including the case where an update from said action was propagated through a chain of “instant updaters” like rails, redstone dust, signs that are resting on eachother, etc.) was caused by a player input, then the exception will get caught by a try-catch statement. This means that the the updates that would have been caused otherwise do get cancelled, but the game keeps running regardless.

Updates that are not directly caused by player updates, such as the ones scheduled by redstone components with delay, from pistons moving, from mobs, randomticks, the weather, or the environment otherwise will cause a crash. These things might still have valid use-cases and applications, but are less repeatable at larger scales.

Update suppression prior to 1.19

The most common form of update suppression before the 1.19 update was to cause a Stack Overflow by overloading what’s known as the hardware function call stack. You can imagine a Russian Nesting Doll-type of situation where one block update being processed calls the block update method of the next block, which in turn calls another, which calls another, which recursively does the same until Java’s call stack no longer has space keep track of all the nested updates and throws a Stack Overflow Exception. The way this is usually done in practice is using many lines of activator rails or powered rails that are “bud-powered”, meaning that they believe they are powered when in reality they shouldn’t be, as these update (depower) in a very predictable manner. Something like redstone dust in comparison is very erratic in that it updates other blocks up to two blocks away in a mostly random order that depends on where in the world you build it (often called locationality).

Update suppression after the 1.19 block update system rewrite

In a 1.19 snapshot the update system was rewritten to not rely on nested update calls, but rather to keep a list in the code of blockupdates yet to be processed, which is then iterated through until the list is exhausted. The iteration happens from most-to-least recently scheduled update, meaning that it still employs a depth-first-search. This list has a max length of 1000000 updates, which is necessary to prevent the game from stalling for too long in the case of an extremely large chain of updates (though this can be changed in server.properties under “max chained neighbor updates”). The consequence of this rewrite is that Stack Overflow-based update suppression is no longer possible as the update system does not rely on a hardware stack, but a similar mechanic called Update Skipping is now possible as a consequence of reaching the limit. This is less useful than suppression, but still makes it possible to create certain illegal blockstates like floating blocks that normally need support, floating gravity blocks, or sliced nether portals (meaning that parts of the portal or its frame are missing). The difference between suppression and skipping in terms of creating illegal blockstates is the fact that all the blocks scheduled to send updates do still send their updates once the list reaches the cap, meaning that all the blocks affected (including the one where the interaction first happened) will send out the rest of their block updates, but that these will not propagate updates any further since they are processed after the cap was first reached. This effectively means you need a one block “margin” for where an update will inevitably happen, which limits some applications.

Side-effects/Uses:

Portal Slicing

Using the update order of blocks you are able to do something called portal slicing, which is a technique to quickly make large update suppressed portals.
Showcase video: https://www.youtube.com/watch?v=VSpqrWRefA4
Discovered by: _Kayleigh

Soulbound chests

Using an update suppressor you are able to suppress the chest exiting packet, allowing you to bind your player to a chest, this results in many interesting side effects. Post on soulbound chests coming soon.
Showcase video: https://www.youtube.com/watch?v=RchVIanvMVg
Discovered by: PR0CESS: https://www.youtube.com/watch?v=VSpqrWRefA4

Item shadowing (1.17-)

Cause two item to reference the same stack, resulting in a linked status where both keep the same amount of item regardless of the distance.
Showcase video: https://www.youtube.com/watch?v=mTeYwq7HaEA
Discovered by: PR0CESS and FallenBreath