    001    package net.minecraft.entity.ai;
    002
    003    import net.minecraft.entity.monster.EntityIronGolem;
    004    import net.minecraft.entity.passive.EntityVillager;
    005
    006    public class EntityAILookAtVillager extends EntityAIBase
    007    {
    008        private EntityIronGolem theGolem;
    009        private EntityVillager theVillager;
    010        private int lookTime;
    011
    012        public EntityAILookAtVillager(EntityIronGolem par1EntityIronGolem)
    013        {
    014            this.theGolem = par1EntityIronGolem;
    015            this.setMutexBits(3);
    016        }
    017
    018        /**
    019         * Returns whether the EntityAIBase should begin execution.
    020         */
    021        public boolean shouldExecute()
    022        {
    023            if (!this.theGolem.worldObj.isDaytime())
    024            {
    025                return false;
    026            }
    027            else if (this.theGolem.getRNG().nextInt(8000) != 0)
    028            {
    029                return false;
    030            }
    031            else
    032            {
    033                this.theVillager = (EntityVillager)this.theGolem.worldObj.findNearestEntityWithinAABB(EntityVillager.class, this.theGolem.boundingBox.expand(6.0D, 2.0D, 6.0D), this.theGolem);
    034                return this.theVillager != null;
    035            }
    036        }
    037
    038        /**
    039         * Returns whether an in-progress EntityAIBase should continue executing
    040         */
    041        public boolean continueExecuting()
    042        {
    043            return this.lookTime > 0;
    044        }
    045
    046        /**
    047         * Execute a one shot task or start executing a continuous task
    048         */
    049        public void startExecuting()
    050        {
    051            this.lookTime = 400;
    052            this.theGolem.setHoldingRose(true);
    053        }
    054
    055        /**
    056         * Resets the task
    057         */
    058        public void resetTask()
    059        {
    060            this.theGolem.setHoldingRose(false);
    061            this.theVillager = null;
    062        }
    063
    064        /**
    065         * Updates the task
    066         */
    067        public void updateTask()
    068        {
    069            this.theGolem.getLookHelper().setLookPositionWithEntity(this.theVillager, 30.0F, 30.0F);
    070            --this.lookTime;
    071        }
    072    }