Projectile

A projectile is an entity that can be fired, shot, or thrown by mobs, other entities, dispensers, and players. Particles can also be summoned using commands.
List of Projectiles
Inheritance
- Entity
- Projectile
Firework Rocket Entity
Fishing Hook
Llama Spit
Shulker Bullet- Abstract Arrow
- Abstract Hurting Projectile
Dragon Fireball
Wither Skull Entity- Abstract Wind Charge
- Fireball
- Throwable Projectile
- Throwable Item Projectile
- Projectile
Table
Mobs and players equipped with bows and crossbows can use them to shoot arrows. The player can also throw various items as projectiles. Some mobs shoot projectiles directly as an attack.
- ↑ Fireballs rebounded by the player deal 1000HP × 500 damage to a ghast upon direct hit, killing them.
- ↑ Only works with
Dispeners.
- ↑ Average damage when fired from a Bow with no Power enchantments. See Ranged attack § Projectile damage for more info.
- ↑ The thrower takes 5HP damage.
- ↑
Blazes take 3HP damage.
Picking up
An eye of ender has a 80% chance of surviving when thrown. If it survives, it drops as an item where it stopped, which can then by picked up.
A trident thrown by a player can be picked up (in its projectile form), as long as its on the ground, doesn't have Loyalty, and the player didn't throw it while in Creative mode.
All other projectiles are either destroyed, turned into something else, or exist as a projectile which despawns after some time, and cannot be picked up or grabbed in their projectile form.
Initial conditions
Shot from dispenser
All projectiles use the following calculations to get shot by a dispenser:
- To find the position, move out from the center of the block by
DISTANCEand addY OFFSET. - Get the unit vector straight out of the dispenser.
- For each axis, add a random (64-bit) number between
-0.0172275 * UNCERTAINTYand0.0172275 * UNCERTAINTY, using a triangular distribution. - To find the velocity, scale by
POWER.
| Projectile | Distance (double) | Y Offset (double) | Power (float) | Uncertainty (float) |
|---|---|---|---|---|
| Default | 0.7 | 0.1 | 1.1 | 6.0 |
| Potion, Experience bottle | 0.7 | 0.1 | 1.375 | 3 |
| Wind charge, fire charge | 1.0 | 0.0 | 1.0 | 6.6666665 |
| Firework rocket | 0.5000099999997474 | 0.0 | 0.5 | 1.0 |
Throwable projectiles (except eye of ender)
The direction and velocity of throwable projectiles is slightly randomized and affected by the player's movement. More specifically, the game does these calculations in order:
- Get the facing vector of the player, with length 1. For the pitch, this uses the player's pitch plus
PITCH(where positivePITCHmakes the vector point lower). - For each axis, add a random (64 bit) number between -0.0172275 and 0.0172275, using a triangular distribution.
- Scale the velocity by
POWER. - Add the player's velocity. If the player is on the ground, the Y component is unaffected.
The result is a shooting speed of around POWER towards where the player is facing, depending on randomness and the player's velocity.
| Projectile | Power (float) | Pitch (float) |
|---|---|---|
| Snowball, ender pearl, egg | 1.5 | 0 |
| Potions | 0.5 | -20° |
| Experience bottle | 0.7 | -20° |
Motion
| Kind | Ticking order | Gravity[note 1]
(m/tick/tick) |
Drag
(vertical) |
Drag
(horizontal) |
Terminal velocity
(m/tick)[note 2] |
Terminal velocity
(m/s) |
Maximum horizontal travel distance
(m/(m/s))[note 3]
|
|---|---|---|---|---|---|---|---|
| Acceleration, Drag, Position[note 4] | -0.03 (double) | 0.99 (float) | 0.99 (float) | 2.97 | 59.4 | 99 | |
| -0.05 (double)
|
4.95 | 99.0 | |||||
| -0.07 (double)
|
6.93 | 138.6 | |||||
| Acceleration, Drag, Position | 0.10 (double)[note 1] | 0.95 (float) | 1.90 | 38.0 | 19 | ||
| 0.10 (double)[note 1] | 0.73 (float) | 0.2703703 | 5.407407 | 2.703703 | |||
| 0.10 (double)[note 1] | N/A[note 5] | ∞ | ∞ | ∞ | |||
| Position, Drag, Acceleration | -0.06 (double) | 0.99 (float) | 6.00 | 120.0 | 100 | ||
| -0.05 (double) | 0.99 (float) | 5.00 | 100.0 | 100 | |||
- ↑ a b c d Explosive projectiles and wind charges are not affected by gravity but instead get acceleration from getting damaged.
- ↑ Terminal velocity is given by if drag is before acceleration and otherwise.
- ↑ For axes with no acceleration, maximum travel distance is given by if position is before drag and otherwise. Table values are the number that, when multiplied by the initial velocity, gives the maximum travel distance.
- ↑ The order of throwable projectiles was changed in Java Edition 1.21.2, from "Position, Drag, Acceleration" to "Acceleration, Drag, Position".
- ↑ For boats and wind charges, the order between acceleration and drag doesn't matter: Boats have no vertical drag, and wind charges have no drag at all.
- ↑ a b Yaw and pitch follow the Minecraft's convention, thus zero yaw is directed at +Z (south) and looking upwards corresponds to negative values of pitch.
Collision
Projectiles perform a raycast from their current position to their next position and check for blocks and entities that would get hit.
Entity collision
Throwable projectiles
Throwable projectiles (Ender pearl, snowball, egg, potion, experience bottle, eye of ender) treat entities as being 0.6 blocks larger than they actually are in every axis (0.3 in every direction). They collide with all living entities, all minecart types, boats, end crystals, falling blocks, and tnt.
To calculate the collision, the game uses the following process:
- Make a box from the current tick's position to next tick's position
- Inflate it by 1 in every direction
- Get every entity in the box
- For each entity:
- Inflate it by 0.3 in every direction
- Check if it intersects the line connecting the current position and the next position
- Keep the intersection if it's the closest to the projectile so far, otherwise throw it out
Abstract arrows and abstract hurting projectiles
Abstract arrows (Arrow, tipped arrow, spectral arrow, trident) and abstract hurting projectiles (Fireball, dragon fireball, wind charge, wither skull, dangerous wither skull) use a raycast to calculate entity collisions, and don't inflate entities like ThrowableProjectiles.[verify]
Block collisions
All blocks collisions are checked using a raycast from the projectile's current position to its next position, which hits the block's collision box, with a few special cases:
- The top of scaffolding is only hit if the projectile begins its movement below it, because that collision box only exists for entities that are above it.
- Walls, fences, moving pistons, the back of piston arms, and other blocks whose collision box extends beyond a full cube are only seen by the projectile if the raycast intersects the full cube space where the block is actually located.
- End portal blocks and exit portal blocks have no hard hitbox, so projectiles will only enter if they tick inside the portal blocks.
Ender pearl specific block collisions

- If a pearl hits a Nether portal, it is sent to the nether. If the pearl would have hit other blocks after the portal, that collision position is used as the position where the pearl entered the portal. Otherwise, the final position it would've ended at is used. See Nether portal for more details on how entities get placed after going through portals.
- If a pearl hits an End gateway, it teleports the player as if the player had gone into the gateway. The pearl itself is deleted.
Data values
ID
| Entity | Identifier | Translation key |
|---|---|---|
fireball | entity | |
small_fireball | entity | |
dragon_fireball | entity | |
firework_rocket | entity | |
llama_spit | entity | |
arrow | entity | |
spectral_arrow | entity | |
shulker_bullet | entity | |
experience_bottle | entity | |
egg | entity | |
ender_pearl | entity | |
eye_of_ender | entity | |
snowball | entity | |
splash_potion | entity | |
lingering_potion | entity | |
trident | entity | |
wind_charge | entity | |
breeze_wind_charge | entity | |
wither_skull | entity |
| Entity | Identifier | Numeric ID | Translation key |
|---|---|---|---|
ice_bomb | 106 | entity | |
large_fireball | 85 | entity | |
small_fireball | 94 | entity | |
dragon_fireball | 79 | entity | |
fireworks_rocket | 79 | entity | |
llama_spit | 102 | entity | |
arrow | 80 | entity | |
shulker_bullet | 76 | entity | |
xp_bottle | 68 | entity | |
egg | 82 | entity | |
ender_pearl | 87 | entity | |
eye_of_ender_signal | 70 | entity | |
snowball | 81 | entity | |
splash_potion | 86 | entity | |
lingering_potion | 101 | entity | |
thrown_trident | 73 | entity | |
wind_charge_projectile | 143 | entity | |
breeze_wind_charge_projectile | 141 | entity | |
wither_skull | 89 | entity | |
wither_skull_dangerous | 91 | entity |
History
| Java Edition Classic | |||||||
|---|---|---|---|---|---|---|---|
| 0.24_SURVIVAL_TEST | Added arrows. | ||||||
| Java Edition | |||||||
| 1.9 | 15w31a | Projectile motion has now been changed slightly.[1] | |||||
| 15w49a | Projectiles now take the thrower's momentum into account when the player is falling, flying with elytra, or taking knockback; but not when the player is walking, riding an entity, or flying in Creative mode. | ||||||
| 1.21.6 | 25w19a | Projectiles now have a target tolerance margin that changes over time. | |||||
| Pocket Edition Alpha | |||||||
| v0.3.3 | Added arrows. | ||||||
| Bedrock Edition | |||||||
| 1.21.90 | Preview 1.21.90.26 | Projectiles now have a target tolerance margin that changes over time. | |||||
| Legacy Console Edition | |||||||
| Xbox 360 | Xbox One | PS3 | PS4 | PS Vita | Wii U | Switch | |
| TU46 | CU36 | 1.38 | 1.38 | 1.38 | Patch 15 | 1.0.1 | Projectiles now take the thrower's momentum into account. |
Issues
Issues relating to "Projectile" are maintained on the bug tracker. Issues should be reported and viewed there.
See also
- Projectile Protection - an enchantment that reduces damage received from projectiles.