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