Lagback/zh

A lagback is an occurrence of the player getting teleported back to a previous position. It can be abused to clip inside walls or jump higher in a similar fashion as Blips, though these practices may be bannable offenses on multiplayer servers. In this article, we focus on singleplayer 1.8, but most of the information is relevant for multiplayer and 1.9+.

Here are the known triggers for lagbacks:
 * Being stuck in a block.
 * Colliding with a boat.
 * Moving inside a cobweb too quickly.
 * Landing while sneaking with an adequate velocity.
 * Moving through a steppable block with an obscene amount of speed (Speed 100, for example).
 * Moving quickly against a wall.

General Explanation
There are two main ways to trigger a lagback: The first method is self-explanatory.
 * Intersecting with a collision box (stuck in a block, or colliding with a boat).
 * Moving "wrongly".

As for the second method, one must first understand how player movement is processed server-side (even in singleplayer, the game runs on an integrated server). Each tick, the client calculates the player's next position, and sends a packet to the server. The server validates the player's movement by recalculating it from their last position, which should theoretically result in the same position. However, the server does not undo the side effects of the player's movement, which may cause a discrepancy between the player's expected and actual positions. The discrepancy is considered significant if the horizontal distance between the two is strictly more than 0.25m, in which case the player is lagged back to their previous position.

Side effects that aren't undone prior to the validation process include:


 * The  flag being set to   when landing (which changes the behaviour of sneaking).
 * The  flag being set to   when colliding with a cobweb.
 * The various  flags being set to   when colliding with a wall or ceiling.

In short, the player's movement is calculated twice each tick, but the side effects of the first calculation may influence the result of the second one. If the player moves fast enough, the server thinks the player moves wrongly, and triggers a lagback.

Intersecting with a collision box
The player is not supposed to move into a collision box. However, the server has a leniency of 0.0625b in each direction, meaning the player's bounding box can intersect with the "exterior shell" of a block and move normally. If the player move further inward, it triggers a lagback.

If the player is already fully inside a collision box, they do not get lagged back when moving.

Colliding with a cobweb
When colliding with a cobweb (detected at the end of the tick, but at the player's previous position), the player's  flag is set to. When the player is moved and and  is , it is immediately set to  , and the cobweb's effect is applied on the player's velocity. This causes a discrepancy between the original calculation and the recalculation, which triggers a lagback if sufficient speed is met.

Landing from a high fall while sneaking
This variant is achieved by landing and sneaking with the following requirements:


 * Moving horizontally at strictly more than 0.25m/t.
 * Being at least one block above ground on the tick before landing (or 0.6b in 1.11+).

The minimum jump height required to achieve at least -1m/t of vertical speed is -7.3125b. An easy setup to try this method is -9.5b. You are not required to time the sneak exactly, but sneaking too early will significantly reduce the player's horizontal speed.

Sneak Glitch
A sneak glitch (or shift glitch) happens when the player sneaks while landing on an edge, which causes them to fall anyway (this was fixed in 1.16.2).

When performing a sneak glitch, the server's expected movement for the player is different from their actual movement. Here's why:


 * During the original calculation, the player is sneaking but not "on ground", hence they move past the edge. However, they still land, which sets.
 * During the recalculation, the player is now considered "on ground" before actually landing, which changes the behaviour of sneaking: they can not "fall off the edge", despite not being at ground level.

With at least 0.25m/t of horizontal speed and appropriate placement, performing a sneak glitch can therefore trigger a lagback. After being teleported back to their previous position, the player is now able to jump. The resulting jump looks similar to a blip-up, in the sense that the player can start jumping mid-air. Here is an example:

https://youtu.be/IOrpHNqn5t0

Some jump heights do not work. This is still being investigated.

Code
In singleplayer, lagbacks are caused by this section of code (heavily simplified, we ignore exceptional cases such as flying, sleeping, teleporting, respawning, mounting an entity...): Note that the handling of fall damage is not processed if the player gets lagbacked. This may cause the player to suffer unexpectedly high fall damage when they eventually land. Since 1.15 (when the boat fall damage bug was fixed), jumping resets the player's fall distance, which can be abused to survive high falls when combined with lagback.