minecraft arrow speed / initial velocity

TLDR: About 60.5 to 60.8 blocks per second.

I made a command block setup that tracks the current velocity of an arrow by comparing its current Pos NBT tag to the one 1 game tick ago, with a scale factor of 1000000, and save the maximum value over time. Then I used /tp to align myself exactly to one of the six axis directions and shot multiple arrows at full power. The results:

  • positive X: 3024556, meaning 60.49112 blocks/second
  • negative X: -3034233, meaning 60.68466 blocks/second
  • positive Z: 3040980, meaning 60.8196 blocks/second
  • negative Z: -3036883, meaning 60.73766 blocks/second
  • positive Y: 3028972, meaning 60.57944 blocks/second

The exact number probably depends on when exactly in the 0.05 seconds I shot the arrow.

Negative Y is a bit of a different story, because the arrow speeds up while going downwards. I can easily get the terminal velocity of a falling arrow shot down (about 100.2 blocks/second, faster than a sheep), but getting the starting value is difficult. I tried giving the arrow NoGravity:1 as soon as it was shot and setting the maximum upwards velocity scoreboard to -2147000000 and then checking the maximum upwards velocity (which is negative, because downwards) and just relied on the first tick being the slowest. That, after multiple tries, gave me at most a speed of 3025818, meaning 60.51636 blocks/second. But it was probably already affected by gravity, air resistance or whatever, so it's not necessarily absolutely correct.

The maximum of all of these values is 60.8196, the average is 60.63814, 60.662496 without downwards, 60.68326 without upwards and downwards.


Because I already had the decompiled Minecraft source code open:

public class BowItem extends RangedWeaponItem implements Vanishable {
    /* ... */
    @Override
    public void onStoppedUsing(ItemStack stack, World world, LivingEntity user, int remainingUseTicks) {
        /* ... */
        PersistentProjectileEntity projectile = arrowItem.createArrow(world, arrowItemStack, player);   
        projectile.setProperties(player, player.pitch, player.yaw, 0.0f, bowChargePercentage * 3.0f, 1.0f);
        /* ... */
    }
    /* ... */
}

So the maximum horizontal velocity seems to be 3.0 blocks per tick, or exactly 60.0 blocks per second.