    001    package net.minecraft.src;
    002
    003    public abstract class EntityFlying extends EntityLiving
    004    {
    005        public EntityFlying(World par1World)
    006        {
    007            super(par1World);
    008        }
    009
    010        /**
    011         * Called when the mob is falling. Calculates and applies fall damage.
    012         */
    013        protected void fall(float par1) {}
    014
    015        /**
    016         * Moves the entity based on the specified heading.  Args: strafe, forward
    017         */
    018        public void moveEntityWithHeading(float par1, float par2)
    019        {
    020            if (this.isInWater())
    021            {
    022                this.moveFlying(par1, par2, 0.02F);
    023                this.moveEntity(this.motionX, this.motionY, this.motionZ);
    024                this.motionX *= 0.800000011920929D;
    025                this.motionY *= 0.800000011920929D;
    026                this.motionZ *= 0.800000011920929D;
    027            }
    028            else if (this.handleLavaMovement())
    029            {
    030                this.moveFlying(par1, par2, 0.02F);
    031                this.moveEntity(this.motionX, this.motionY, this.motionZ);
    032                this.motionX *= 0.5D;
    033                this.motionY *= 0.5D;
    034                this.motionZ *= 0.5D;
    035            }
    036            else
    037            {
    038                float var3 = 0.91F;
    039
    040                if (this.onGround)
    041                {
    042                    var3 = 0.54600006F;
    043                    int var4 = this.worldObj.getBlockId(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.boundingBox.minY) - 1, MathHelper.floor_double(this.posZ));
    044
    045                    if (var4 > 0)
    046                    {
    047                        var3 = Block.blocksList[var4].slipperiness * 0.91F;
    048                    }
    049                }
    050
    051                float var8 = 0.16277136F / (var3 * var3 * var3);
    052                this.moveFlying(par1, par2, this.onGround ? 0.1F * var8 : 0.02F);
    053                var3 = 0.91F;
    054
    055                if (this.onGround)
    056                {
    057                    var3 = 0.54600006F;
    058                    int var5 = this.worldObj.getBlockId(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.boundingBox.minY) - 1, MathHelper.floor_double(this.posZ));
    059
    060                    if (var5 > 0)
    061                    {
    062                        var3 = Block.blocksList[var5].slipperiness * 0.91F;
    063                    }
    064                }
    065
    066                this.moveEntity(this.motionX, this.motionY, this.motionZ);
    067                this.motionX *= (double)var3;
    068                this.motionY *= (double)var3;
    069                this.motionZ *= (double)var3;
    070            }
    071
    072            this.prevLegYaw = this.legYaw;
    073            double var10 = this.posX - this.prevPosX;
    074            double var9 = this.posZ - this.prevPosZ;
    075            float var7 = MathHelper.sqrt_double(var10 * var10 + var9 * var9) * 4.0F;
    076
    077            if (var7 > 1.0F)
    078            {
    079                var7 = 1.0F;
    080            }
    081
    082            this.legYaw += (var7 - this.legYaw) * 0.4F;
    083            this.legSwing += this.legYaw;
    084        }
    085
    086        /**
    087         * returns true if this entity is by a ladder, false otherwise
    088         */
    089        public boolean isOnLadder()
    090        {
    091            return false;
    092        }
    093    }