Collisions: Difference between revisions

From Minecraft Parkour Wiki
Content added Content deleted
(completed text, visuals needed)
(added visuals.)
Line 1: Line 1:
Minecraft's collision physics is very simplistic, yet it contains many glitches.
Minecraft's collision physics is very simplistic: instead of ray-tracing the collisions, the game simply moves the player sequentially along each axis.

Instead of ray-tracing the collisions, the game simply moves the player sequentially along each axis.


As a reminder, Minecraft's physics is updated 20 [[ticks]] per second. The player's movement and collisions are updated once per tick.
As a reminder, Minecraft's physics is updated 20 [[ticks]] per second. The player's movement and collisions are updated once per tick.


== Collision Box ==
A '''collision box''' consists of one or multiple bounding boxes, which are simple cuboids define by minimum and maximum X/Y/Z coordinates.


* The player only has one bounding box, of dimensions '''0.6'''×'''1.8'''×'''0.6''' m<sup>3</sup>. Their position (as shown in F3) is located at the bottom center
== Order of collisions ==

* Blocks have more complicated collision boxes (see [[Blocks|this list]]).

Note: a "hitbox" is what the player can click on (e.g. attack an entity, press a button, open a door). It may or may not overlap with the collision box.

[[File:Collision box (player and block).png|frameless|720x720px]]

== Collision Order ==
Every tick, after the player's velocity has been updated, the game does these steps to check collisions:
Every tick, after the player's velocity has been updated, the game does these steps to check collisions:


* Move the player along the Y axis. If a vertical collision is detected when falling, the player is now considered to be on ground.
* Move the player along the Y axis. If a vertical collision is detected while moving downward, the player is now considered to be on ground.
* Move the player along the X axis.
* Move the player along the X axis.
* Move the player along the Z axis.
* Move the player along the Z axis.
* If the player is on ground and collided with a wall, perhaps they could step on top of it (e.g. if the wall is just a slab).
* If the player is on ground and collided with a wall, they are able to step over it if it's less than 0.6m tall.
** See [[Stepping]] for explanations and visuals.
** See [[Stepping]] for explanations and visuals. This article focuses on regular collisions.
** This mechanic is responsible for [[Blip|Blips]] and [[Jump Cancel|Jump-Cancel]], and their glitched variants.
** This mechanic is responsible for [[Blip|Blips]] and [[Jump Cancel|Jump-Cancel]], and their glitched variants.


Line 21: Line 29:
* The player is able to jump one tick after running off a block. In particular, this is why [[Timings|headhitter timing]] works.
* The player is able to jump one tick after running off a block. In particular, this is why [[Timings|headhitter timing]] works.
* To land on a block, the player must be above its surface on the final tick of the jump.
* To land on a block, the player must be above its surface on the final tick of the jump.


[[File:Y Collision.png|frameless|720x720px]]


== X/Z Facing ==
== X/Z Facing ==
Due to the X axis being processed before the Z axis, they are fundamentally asymetric: it's important to distinguish "X-facing" jumps from "Z-facing" ones.
Due to the X axis being processed before the Z axis, corner collisions don't behave the same depending on the direction.

This mechanic is especially noticeable the more speed the player has.

[[File:XZ collision.png|frameless|720x720px]]

It's important to distinguish "X-facing" jumps from "Z-facing" ones:


* '''X-facing''' refers to jumps that point towards East/West.
* '''X-facing''' refers to jumps that point towards East/West.


* '''Z-facing''' refers to jumps that point towards North/South.
* '''Z-facing''' refers to jumps that point towards North/South.

The axis of a jump can be checked with [[Debug Screen|F3]].




Players tend to find Z-facing neos more intuitive, but X-facing neos can actually be a bit easier:
Players tend to find Z-facing neos more intuitive, but X-facing neos can actually be more lenient:


* Z-facing neos are very similar to linear jumps. To convert a neo to its equivalent, simply add 1.2 to its distance and increase its [[Tiers|tier]] by one. For example, a triple neo is equivalent to a "4.2+0.25" (which cannot be built, but this sort of comparison is useful for analysis)
* Z-facing neos are very similar to linear jumps. To convert a neo to its equivalent, simply add 1.2 to its distance and increase its [[Tiers|tier]] by one. For example, a triple neo is equivalent to a "4.2+0.25" (which cannot be built, but this sort of comparison is useful for analysis)
* X-facing neos don't have a linear equivalent. Compared to Z-facing neos, they are "shifted" by 1 tick (wall collision begins and ends 1 tick earlier). This shift reduces the momentum, but makes it more efficient as the player typically has more speed at the end of their jump than at the start.
* X-facing neos don't have a linear equivalent. Compared to Z-facing neos, they are "shifted" by 1 tick (wall collision begins and ends 1 tick earlier). This shift reduces the momentum, but makes it more efficient as the player typically has more speed at the end of a jump than at the start.


Some jumps are only possible when facing one axis or the other.
Some jumps are only possible when facing one axis or the other (for example, a 2bm triple neo is only possible X-facing)

The axis of a jump can be checked with [[Debug Screen|F3]].


== 1.14+ ==
== 1.14+ ==
Line 45: Line 62:
* Otherwise, the collision order is '''Y-Z-X'''.
* Otherwise, the collision order is '''Y-Z-X'''.


In most cases, all collisions now resemble X-facing. Some jumps which involve cutting corners may become very different compared to pre-1.14.
In most cases, all collisions now resemble X-facing. Some jumps which involve cutting corners may be very different compared to pre-1.14.

Revision as of 13:37, 24 May 2021

Minecraft's collision physics is very simplistic: instead of ray-tracing the collisions, the game simply moves the player sequentially along each axis.

As a reminder, Minecraft's physics is updated 20 ticks per second. The player's movement and collisions are updated once per tick.

Collision Box

A collision box consists of one or multiple bounding boxes, which are simple cuboids define by minimum and maximum X/Y/Z coordinates.

  • The player only has one bounding box, of dimensions 0.6×1.8×0.6 m3. Their position (as shown in F3) is located at the bottom center
  • Blocks have more complicated collision boxes (see this list).

Note: a "hitbox" is what the player can click on (e.g. attack an entity, press a button, open a door). It may or may not overlap with the collision box.

Collision Order

Every tick, after the player's velocity has been updated, the game does these steps to check collisions:

  • Move the player along the Y axis. If a vertical collision is detected while moving downward, the player is now considered to be on ground.
  • Move the player along the X axis.
  • Move the player along the Z axis.
  • If the player is on ground and collided with a wall, they are able to step over it if it's less than 0.6m tall.
    • See Stepping for explanations and visuals. This article focuses on regular collisions.
    • This mechanic is responsible for Blips and Jump-Cancel, and their glitched variants.

Vertical Collisions

Vertical movement is processed before horizontal movement. Due to this:

  • The player is able to jump one tick after running off a block. In particular, this is why headhitter timing works.
  • To land on a block, the player must be above its surface on the final tick of the jump.


X/Z Facing

Due to the X axis being processed before the Z axis, corner collisions don't behave the same depending on the direction.

This mechanic is especially noticeable the more speed the player has.

It's important to distinguish "X-facing" jumps from "Z-facing" ones:

  • X-facing refers to jumps that point towards East/West.
  • Z-facing refers to jumps that point towards North/South.

The axis of a jump can be checked with F3.


Players tend to find Z-facing neos more intuitive, but X-facing neos can actually be more lenient:

  • Z-facing neos are very similar to linear jumps. To convert a neo to its equivalent, simply add 1.2 to its distance and increase its tier by one. For example, a triple neo is equivalent to a "4.2+0.25" (which cannot be built, but this sort of comparison is useful for analysis)
  • X-facing neos don't have a linear equivalent. Compared to Z-facing neos, they are "shifted" by 1 tick (wall collision begins and ends 1 tick earlier). This shift reduces the momentum, but makes it more efficient as the player typically has more speed at the end of a jump than at the start.

Some jumps are only possible when facing one axis or the other (for example, a 2bm triple neo is only possible X-facing)

1.14+

In 1.14, the collision physics were updated. The collision order now depends on the player's velocity:

  • If the player has more Z speed than X speed, the collision order is Y-X-Z.
  • Otherwise, the collision order is Y-Z-X.

In most cases, all collisions now resemble X-facing. Some jumps which involve cutting corners may be very different compared to pre-1.14.