    001    package net.minecraft.entity.ai;
    002
    003    import java.util.Iterator;
    004    import java.util.List;
    005    import net.minecraft.entity.monster.EntityIronGolem;
    006    import net.minecraft.entity.passive.EntityVillager;
    007
    008    public class EntityAIFollowGolem extends EntityAIBase
    009    {
    010        private EntityVillager theVillager;
    011        private EntityIronGolem theGolem;
    012        private int takeGolemRoseTick;
    013        private boolean tookGolemRose = false;
    014
    015        public EntityAIFollowGolem(EntityVillager par1EntityVillager)
    016        {
    017            this.theVillager = par1EntityVillager;
    018            this.setMutexBits(3);
    019        }
    020
    021        /**
    022         * Returns whether the EntityAIBase should begin execution.
    023         */
    024        public boolean shouldExecute()
    025        {
    026            if (this.theVillager.getGrowingAge() >= 0)
    027            {
    028                return false;
    029            }
    030            else if (!this.theVillager.worldObj.isDaytime())
    031            {
    032                return false;
    033            }
    034            else
    035            {
    036                List var1 = this.theVillager.worldObj.getEntitiesWithinAABB(EntityIronGolem.class, this.theVillager.boundingBox.expand(6.0D, 2.0D, 6.0D));
    037
    038                if (var1.isEmpty())
    039                {
    040                    return false;
    041                }
    042                else
    043                {
    044                    Iterator var2 = var1.iterator();
    045
    046                    while (var2.hasNext())
    047                    {
    048                        EntityIronGolem var3 = (EntityIronGolem)var2.next();
    049
    050                        if (var3.getHoldRoseTick() > 0)
    051                        {
    052                            this.theGolem = var3;
    053                            break;
    054                        }
    055                    }
    056
    057                    return this.theGolem != null;
    058                }
    059            }
    060        }
    061
    062        /**
    063         * Returns whether an in-progress EntityAIBase should continue executing
    064         */
    065        public boolean continueExecuting()
    066        {
    067            return this.theGolem.getHoldRoseTick() > 0;
    068        }
    069
    070        /**
    071         * Execute a one shot task or start executing a continuous task
    072         */
    073        public void startExecuting()
    074        {
    075            this.takeGolemRoseTick = this.theVillager.getRNG().nextInt(320);
    076            this.tookGolemRose = false;
    077            this.theGolem.getNavigator().clearPathEntity();
    078        }
    079
    080        /**
    081         * Resets the task
    082         */
    083        public void resetTask()
    084        {
    085            this.theGolem = null;
    086            this.theVillager.getNavigator().clearPathEntity();
    087        }
    088
    089        /**
    090         * Updates the task
    091         */
    092        public void updateTask()
    093        {
    094            this.theVillager.getLookHelper().setLookPositionWithEntity(this.theGolem, 30.0F, 30.0F);
    095
    096            if (this.theGolem.getHoldRoseTick() == this.takeGolemRoseTick)
    097            {
    098                this.theVillager.getNavigator().tryMoveToEntityLiving(this.theGolem, 0.15F);
    099                this.tookGolemRose = true;
    100            }
    101
    102            if (this.tookGolemRose && this.theVillager.getDistanceSqToEntity(this.theGolem) < 4.0D)
    103            {
    104                this.theGolem.setHoldingRose(false);
    105                this.theVillager.getNavigator().clearPathEntity();
    106            }
    107        }
    108    }