001 package net.minecraft.src;
002
003 public class EntityAIOcelotAttack extends EntityAIBase
004 {
005 World theWorld;
006 EntityLiving theEntity;
007 EntityLiving theVictim;
008 int attackCountdown = 0;
009
010 public EntityAIOcelotAttack(EntityLiving par1EntityLiving)
011 {
012 this.theEntity = par1EntityLiving;
013 this.theWorld = par1EntityLiving.worldObj;
014 this.setMutexBits(3);
015 }
016
017 /**
018 * Returns whether the EntityAIBase should begin execution.
019 */
020 public boolean shouldExecute()
021 {
022 EntityLiving var1 = this.theEntity.getAttackTarget();
023
024 if (var1 == null)
025 {
026 return false;
027 }
028 else
029 {
030 this.theVictim = var1;
031 return true;
032 }
033 }
034
035 /**
036 * Returns whether an in-progress EntityAIBase should continue executing
037 */
038 public boolean continueExecuting()
039 {
040 return !this.theVictim.isEntityAlive() ? false : (this.theEntity.getDistanceSqToEntity(this.theVictim) > 225.0D ? false : !this.theEntity.getNavigator().noPath() || this.shouldExecute());
041 }
042
043 /**
044 * Resets the task
045 */
046 public void resetTask()
047 {
048 this.theVictim = null;
049 this.theEntity.getNavigator().clearPathEntity();
050 }
051
052 /**
053 * Updates the task
054 */
055 public void updateTask()
056 {
057 this.theEntity.getLookHelper().setLookPositionWithEntity(this.theVictim, 30.0F, 30.0F);
058 double var1 = (double)(this.theEntity.width * 2.0F * this.theEntity.width * 2.0F);
059 double var3 = this.theEntity.getDistanceSq(this.theVictim.posX, this.theVictim.boundingBox.minY, this.theVictim.posZ);
060 float var5 = 0.23F;
061
062 if (var3 > var1 && var3 < 16.0D)
063 {
064 var5 = 0.4F;
065 }
066 else if (var3 < 225.0D)
067 {
068 var5 = 0.18F;
069 }
070
071 this.theEntity.getNavigator().tryMoveToEntityLiving(this.theVictim, var5);
072 this.attackCountdown = Math.max(this.attackCountdown - 1, 0);
073
074 if (var3 <= var1)
075 {
076 if (this.attackCountdown <= 0)
077 {
078 this.attackCountdown = 20;
079 this.theEntity.attackEntityAsMob(this.theVictim);
080 }
081 }
082 }
083 }