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 }