Vertical Movement Formulas: Difference between revisions

From Minecraft Parkour Wiki
Content added Content deleted
m (removed TOC)
mNo edit summary
Line 2: Line 2:
==Jump Formula==
==Jump Formula==
The player's vertical speed is quite easy to calculate:
The player's vertical speed is quite easy to calculate:



*<math>V\displaystyle _{Y,1} = 0.42</math>
*<math>V\displaystyle _{Y,1} = 0.42</math>
Line 7: Line 8:




:If <math display="inline"> \left | V\displaystyle _{Y,t} \right | < 0.005 </math>, <math display="inline">V\displaystyle _{Y,t}</math> is set to 0 instead (the player's height doesn't change for that tick)
If <math display="inline"> \left | V\displaystyle _{Y,t} \right | < 0.005 </math>, <math display="inline">V\displaystyle _{Y,t}</math> 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.
In 1.9+, it's compared to 0.003 instead.





Revision as of 15:10, 30 August 2020

Jump Formula

The player's vertical speed is quite easy to calculate:



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
  • Jump height is slightly higher in 1.9 due to the momentum threshold being reduced (old=1.249, new=1.252)
  • 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.


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

/* 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);
}