import net.minecraft.util.MathHelper; //导入方法依赖的package包/类
protected void updateAITasks()
{
super.updateAITasks();
BlockPos blockpos = new BlockPos(this);
BlockPos blockpos1 = blockpos.up();
if (this.getIsBatHanging())
{
if (!this.worldObj.getBlockState(blockpos1).getBlock().isNormalCube())
{
this.setIsBatHanging(false);
this.worldObj.playAuxSFXAtEntity((EntityPlayer)null, 1015, blockpos, 0);
}
else
{
if (this.rand.nextInt(200) == 0)
{
this.rotationYawHead = (float)this.rand.nextInt(360);
}
if (this.worldObj.getClosestPlayerToEntity(this, 4.0D) != null)
{
this.setIsBatHanging(false);
this.worldObj.playAuxSFXAtEntity((EntityPlayer)null, 1015, blockpos, 0);
}
}
}
else
{
if (this.spawnPosition != null && (!this.worldObj.isAirBlock(this.spawnPosition) || this.spawnPosition.getY() < 1))
{
this.spawnPosition = null;
}
if (this.spawnPosition == null || this.rand.nextInt(30) == 0 || this.spawnPosition.distanceSq((double)((int)this.posX), (double)((int)this.posY), (double)((int)this.posZ)) < 4.0D)
{
this.spawnPosition = new BlockPos((int)this.posX + this.rand.nextInt(7) - this.rand.nextInt(7), (int)this.posY + this.rand.nextInt(6) - 2, (int)this.posZ + this.rand.nextInt(7) - this.rand.nextInt(7));
}
double d0 = (double)this.spawnPosition.getX() + 0.5D - this.posX;
double d1 = (double)this.spawnPosition.getY() + 0.1D - this.posY;
double d2 = (double)this.spawnPosition.getZ() + 0.5D - this.posZ;
this.motionX += (Math.signum(d0) * 0.5D - this.motionX) * 0.10000000149011612D;
this.motionY += (Math.signum(d1) * 0.699999988079071D - this.motionY) * 0.10000000149011612D;
this.motionZ += (Math.signum(d2) * 0.5D - this.motionZ) * 0.10000000149011612D;
float f = (float)(MathHelper.func_181159_b(this.motionZ, this.motionX) * 180.0D / Math.PI) - 90.0F;
float f1 = MathHelper.wrapAngleTo180_float(f - this.rotationYaw);
this.moveForward = 0.5F;
this.rotationYaw += f1;
if (this.rand.nextInt(100) == 0 && this.worldObj.getBlockState(blockpos1).getBlock().isNormalCube())
{
this.setIsBatHanging(true);
}
}
}