package net.minecraft.entity;
import net.minecraft.block.Block;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;
public abstract class EntityFlying extends EntityLiving
{
public EntityFlying(World par1World)
{
super(par1World);
}
/**
* Called when the mob is falling. Calculates and applies fall damage.
*/
protected void fall(float par1) {}
/**
* 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 par1, boolean par3) {}
/**
* Moves the entity based on the specified heading. Args: strafe, forward
*/
public void moveEntityWithHeading(float par1, float par2)
{
if (this.isInWater())
{
this.moveFlying(par1, par2, 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(par1, par2, 0.02F);
this.moveEntity(this.motionX, this.motionY, this.motionZ);
this.motionX *= 0.5D;
this.motionY *= 0.5D;
this.motionZ *= 0.5D;
}
else
{
float var3 = 0.91F;
if (this.onGround)
{
var3 = 0.54600006F;
int var4 = this.worldObj.getBlockId(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.boundingBox.minY) - 1, MathHelper.floor_double(this.posZ));
if (var4 > 0)
{
var3 = Block.blocksList[var4].slipperiness * 0.91F;
}
}
float var8 = 0.16277136F / (var3 * var3 * var3);
this.moveFlying(par1, par2, this.onGround ? 0.1F * var8 : 0.02F);
var3 = 0.91F;
if (this.onGround)
{
var3 = 0.54600006F;
int var5 = this.worldObj.getBlockId(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.boundingBox.minY) - 1, MathHelper.floor_double(this.posZ));
if (var5 > 0)
{
var3 = Block.blocksList[var5].slipperiness * 0.91F;
}
}
this.moveEntity(this.motionX, this.motionY, this.motionZ);
this.motionX *= (double)var3;
this.motionY *= (double)var3;
this.motionZ *= (double)var3;
}
this.prevLegYaw = this.legYaw;
double var10 = this.posX - this.prevPosX;
double var9 = this.posZ - this.prevPosZ;
float var7 = MathHelper.sqrt_double(var10 * var10 + var9 * var9) * 4.0F;
if (var7 > 1.0F)
{
var7 = 1.0F;
}
this.legYaw += (var7 - this.legYaw) * 0.4F;
this.legSwing += this.legYaw;
}
/**
* returns true if this entity is by a ladder, false otherwise
*/
public boolean isOnLadder()
{
return false;
}
}