001 package net.minecraft.src;
002
003 import java.util.Iterator;
004 import java.util.List;
005
006 public class EntityAIFollowParent extends EntityAIBase
007 {
008 /** The child that is following its parent. */
009 EntityAnimal childAnimal;
010 EntityAnimal parentAnimal;
011 float field_75347_c;
012 private int field_75345_d;
013
014 public EntityAIFollowParent(EntityAnimal par1EntityAnimal, float par2)
015 {
016 this.childAnimal = par1EntityAnimal;
017 this.field_75347_c = par2;
018 }
019
020 /**
021 * Returns whether the EntityAIBase should begin execution.
022 */
023 public boolean shouldExecute()
024 {
025 if (this.childAnimal.getGrowingAge() >= 0)
026 {
027 return false;
028 }
029 else
030 {
031 List var1 = this.childAnimal.worldObj.getEntitiesWithinAABB(this.childAnimal.getClass(), this.childAnimal.boundingBox.expand(8.0D, 4.0D, 8.0D));
032 EntityAnimal var2 = null;
033 double var3 = Double.MAX_VALUE;
034 Iterator var5 = var1.iterator();
035
036 while (var5.hasNext())
037 {
038 EntityAnimal var6 = (EntityAnimal)var5.next();
039
040 if (var6.getGrowingAge() >= 0)
041 {
042 double var7 = this.childAnimal.getDistanceSqToEntity(var6);
043
044 if (var7 <= var3)
045 {
046 var3 = var7;
047 var2 = var6;
048 }
049 }
050 }
051
052 if (var2 == null)
053 {
054 return false;
055 }
056 else if (var3 < 9.0D)
057 {
058 return false;
059 }
060 else
061 {
062 this.parentAnimal = var2;
063 return true;
064 }
065 }
066 }
067
068 /**
069 * Returns whether an in-progress EntityAIBase should continue executing
070 */
071 public boolean continueExecuting()
072 {
073 if (!this.parentAnimal.isEntityAlive())
074 {
075 return false;
076 }
077 else
078 {
079 double var1 = this.childAnimal.getDistanceSqToEntity(this.parentAnimal);
080 return var1 >= 9.0D && var1 <= 256.0D;
081 }
082 }
083
084 /**
085 * Execute a one shot task or start executing a continuous task
086 */
087 public void startExecuting()
088 {
089 this.field_75345_d = 0;
090 }
091
092 /**
093 * Resets the task
094 */
095 public void resetTask()
096 {
097 this.parentAnimal = null;
098 }
099
100 /**
101 * Updates the task
102 */
103 public void updateTask()
104 {
105 if (--this.field_75345_d <= 0)
106 {
107 this.field_75345_d = 10;
108 this.childAnimal.getNavigator().tryMoveToEntityLiving(this.parentAnimal, this.field_75347_c);
109 }
110 }
111 }