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