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 }