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