You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
3.0 KiB
Java
92 lines
3.0 KiB
Java
package net.minecraft.entity;
|
|
|
|
import net.minecraft.util.MathHelper;
|
|
import net.minecraft.world.World;
|
|
|
|
public abstract class EntityFlying extends EntityLiving
|
|
{
|
|
private static final String __OBFID = "CL_00001545";
|
|
|
|
public EntityFlying(World p_i1587_1_)
|
|
{
|
|
super(p_i1587_1_);
|
|
}
|
|
|
|
/**
|
|
* Called when the mob is falling. Calculates and applies fall damage.
|
|
*/
|
|
protected void fall(float distance) {}
|
|
|
|
/**
|
|
* Takes in the distance the entity has fallen this tick and whether its on the ground to update the fall distance
|
|
* and deal fall damage if landing on the ground. Args: distanceFallenThisTick, onGround
|
|
*/
|
|
protected void updateFallState(double distanceFallenThisTick, boolean isOnGround) {}
|
|
|
|
/**
|
|
* Moves the entity based on the specified heading. Args: strafe, forward
|
|
*/
|
|
public void moveEntityWithHeading(float p_70612_1_, float p_70612_2_)
|
|
{
|
|
if (this.isInWater())
|
|
{
|
|
this.moveFlying(p_70612_1_, p_70612_2_, 0.02F);
|
|
this.moveEntity(this.motionX, this.motionY, this.motionZ);
|
|
this.motionX *= 0.800000011920929D;
|
|
this.motionY *= 0.800000011920929D;
|
|
this.motionZ *= 0.800000011920929D;
|
|
}
|
|
else if (this.handleLavaMovement())
|
|
{
|
|
this.moveFlying(p_70612_1_, p_70612_2_, 0.02F);
|
|
this.moveEntity(this.motionX, this.motionY, this.motionZ);
|
|
this.motionX *= 0.5D;
|
|
this.motionY *= 0.5D;
|
|
this.motionZ *= 0.5D;
|
|
}
|
|
else
|
|
{
|
|
float f2 = 0.91F;
|
|
|
|
if (this.onGround)
|
|
{
|
|
f2 = this.worldObj.getBlock(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.boundingBox.minY) - 1, MathHelper.floor_double(this.posZ)).slipperiness * 0.91F;
|
|
}
|
|
|
|
float f3 = 0.16277136F / (f2 * f2 * f2);
|
|
this.moveFlying(p_70612_1_, p_70612_2_, this.onGround ? 0.1F * f3 : 0.02F);
|
|
f2 = 0.91F;
|
|
|
|
if (this.onGround)
|
|
{
|
|
f2 = this.worldObj.getBlock(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.boundingBox.minY) - 1, MathHelper.floor_double(this.posZ)).slipperiness * 0.91F;
|
|
}
|
|
|
|
this.moveEntity(this.motionX, this.motionY, this.motionZ);
|
|
this.motionX *= (double)f2;
|
|
this.motionY *= (double)f2;
|
|
this.motionZ *= (double)f2;
|
|
}
|
|
|
|
this.prevLimbSwingAmount = this.limbSwingAmount;
|
|
double d1 = this.posX - this.prevPosX;
|
|
double d0 = this.posZ - this.prevPosZ;
|
|
float f4 = MathHelper.sqrt_double(d1 * d1 + d0 * d0) * 4.0F;
|
|
|
|
if (f4 > 1.0F)
|
|
{
|
|
f4 = 1.0F;
|
|
}
|
|
|
|
this.limbSwingAmount += (f4 - this.limbSwingAmount) * 0.4F;
|
|
this.limbSwing += this.limbSwingAmount;
|
|
}
|
|
|
|
/**
|
|
* returns true if this entity is by a ladder, false otherwise
|
|
*/
|
|
public boolean isOnLadder()
|
|
{
|
|
return false;
|
|
}
|
|
} |