content: package net.minecraft.entity;
  
  import net.minecraft.block.Block;
  import net.minecraft.util.BlockPos;
  import net.minecraft.util.MathHelper;
  import net.minecraft.world.World;
  
  public abstract class EntityFlying extends EntityLiving {
      public EntityFlying(World worldIn) {
          super(worldIn);
      }
  
      public void fall(float distance, float damageMultiplier) {
      }
  
      protected void updateFallState(double y, boolean onGroundIn, Block blockIn, BlockPos pos) {
      }
  
      public void moveEntityWithHeading(float strafe, float forward) {
          if (this.isInWater()) {
              this.moveFlying(strafe, forward, 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.isInLava()) {
              this.moveFlying(strafe, forward, 0.02F);
              this.moveEntity(this.motionX, this.motionY, this.motionZ);
              this.motionX *= 0.5D;
              this.motionY *= 0.5D;
              this.motionZ *= 0.5D;
          } else {
              float f = 0.91F;
  
              if (this.onGround) {
                  f = this.worldObj.getBlockState(new BlockPos(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.getEntityBoundingBox().minY) - 1, MathHelper.floor_double(this.posZ))).getBlock().slipperiness * 0.91F;
              }
  
              float f1 = 0.16277136F / (f * f * f);
              this.moveFlying(strafe, forward, this.onGround ? 0.1F * f1 : 0.02F);
              f = 0.91F;
  
              if (this.onGround) {
                  f = this.worldObj.getBlockState(new BlockPos(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.getEntityBoundingBox().minY) - 1, MathHelper.floor_double(this.posZ))).getBlock().slipperiness * 0.91F;
              }
  
              this.moveEntity(this.motionX, this.motionY, this.motionZ);
              this.motionX *= f;
              this.motionY *= f;
              this.motionZ *= f;
          }
  
          this.prevLimbSwingAmount = this.limbSwingAmount;
          double d1 = this.posX - this.prevPosX;
          double d0 = this.posZ - this.prevPosZ;
          float f2 = MathHelper.sqrt_double(d1 * d1 + d0 * d0) * 4.0F;
  
          if (f2 > 1.0F) {
              f2 = 1.0F;
          }
  
          this.limbSwingAmount += (f2 - this.limbSwingAmount) * 0.4F;
          this.limbSwing += this.limbSwingAmount;
      }
  
      public boolean isOnLadder() {
          return false;
      }
  }
  