Vertical Movement Formulas
Jump Formula
- If , is set to 0 instead (the player's height doesn't change for that tick)
- In 1.9+, it's compared to 0.003 instead.
Notes
- isn't assigned a value because it has no importance. By convention, the 0th tick corresponds to the player's initial velocity before jumping.
- corresponds to the initial jump motion. It is increased by 0.1 per level of Jump Boost
- Terminal velocity is -3.92 m/t
- When the player collides vertically with a block, vertical momentum is cancelled and only the acceleration is left.
Vertical Position
- To get the position on a given tick, you simply need to sum
Jump duration
- The duration of a jump is the number of ticks between jumping and landing.
- It also corresponds to the period of that jump's cycle when performed repeatedly.
- This notion is linked to the notion of Tiers.
Description Duration Flat Jump 12 t 3bc Jump 11 t +0.5 Jump 10 t +1 Jump 9 t 2.5bc Jump 6 t 2bc Jump 3 t 1.8125bc Jump 2 t
Source code
from EntityLivingBase
- <syntaxhighlight lang="java">
/* Code unrelated to vertical movement is cut out */
protected float getJumpUpwardsMotion(){
return 0.42F;
}
protected void jump()
{
this.motionY = this.getJumpUpwardsMotion(); if (this.isPotionActive(Potion.jump)) { this.motionY += (this.getActivePotionEffect(Potion.jump).getAmplifier() + 1) * 0.1F; } this.isAirBorne = true;
}
public void moveEntityWithHeading(float strafe, float forward)
{
... /* also moves the player horizontally */
this.motionY -= 0.08; this.motionY *= 0.98;
}
public void onLivingUpdate()
{
if (this.jumpTicks > 0) --this.jumpTicks;
if (Math.abs(this.motionY) < 0.005D) this.motionY = 0.0D;
if (this.isJumping) { ... /* different if in water or lava */
if (this.onGround && this.jumpTicks == 0) { this.jump(); this.jumpTicks = 10; //activate autojump cooldown (0.5s) } } else { this.jumpTicks = 0; //reset autojump cooldown }
... this.moveEntityWithHeading(this.moveStrafing, this.moveForward);
}