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; } }