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