    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    }