001 package net.minecraft.src;
002
003 import java.util.Iterator;
004 import java.util.List;
005
006 public class EntityAIPlay extends EntityAIBase
007 {
008 private EntityVillager villagerObj;
009 private EntityLiving targetVillager;
010 private float field_75261_c;
011 private int playTime;
012
013 public EntityAIPlay(EntityVillager par1EntityVillager, float par2)
014 {
015 this.villagerObj = par1EntityVillager;
016 this.field_75261_c = par2;
017 this.setMutexBits(1);
018 }
019
020 /**
021 * Returns whether the EntityAIBase should begin execution.
022 */
023 public boolean shouldExecute()
024 {
025 if (this.villagerObj.getGrowingAge() >= 0)
026 {
027 return false;
028 }
029 else if (this.villagerObj.getRNG().nextInt(400) != 0)
030 {
031 return false;
032 }
033 else
034 {
035 List var1 = this.villagerObj.worldObj.getEntitiesWithinAABB(EntityVillager.class, this.villagerObj.boundingBox.expand(6.0D, 3.0D, 6.0D));
036 double var2 = Double.MAX_VALUE;
037 Iterator var4 = var1.iterator();
038
039 while (var4.hasNext())
040 {
041 EntityVillager var5 = (EntityVillager)var4.next();
042
043 if (var5 != this.villagerObj && !var5.isPlaying() && var5.getGrowingAge() < 0)
044 {
045 double var6 = var5.getDistanceSqToEntity(this.villagerObj);
046
047 if (var6 <= var2)
048 {
049 var2 = var6;
050 this.targetVillager = var5;
051 }
052 }
053 }
054
055 if (this.targetVillager == null)
056 {
057 Vec3 var8 = RandomPositionGenerator.findRandomTarget(this.villagerObj, 16, 3);
058
059 if (var8 == null)
060 {
061 return false;
062 }
063 }
064
065 return true;
066 }
067 }
068
069 /**
070 * Returns whether an in-progress EntityAIBase should continue executing
071 */
072 public boolean continueExecuting()
073 {
074 return this.playTime > 0;
075 }
076
077 /**
078 * Execute a one shot task or start executing a continuous task
079 */
080 public void startExecuting()
081 {
082 if (this.targetVillager != null)
083 {
084 this.villagerObj.setPlaying(true);
085 }
086
087 this.playTime = 1000;
088 }
089
090 /**
091 * Resets the task
092 */
093 public void resetTask()
094 {
095 this.villagerObj.setPlaying(false);
096 this.targetVillager = null;
097 }
098
099 /**
100 * Updates the task
101 */
102 public void updateTask()
103 {
104 --this.playTime;
105
106 if (this.targetVillager != null)
107 {
108 if (this.villagerObj.getDistanceSqToEntity(this.targetVillager) > 4.0D)
109 {
110 this.villagerObj.getNavigator().tryMoveToEntityLiving(this.targetVillager, this.field_75261_c);
111 }
112 }
113 else if (this.villagerObj.getNavigator().noPath())
114 {
115 Vec3 var1 = RandomPositionGenerator.findRandomTarget(this.villagerObj, 16, 3);
116
117 if (var1 == null)
118 {
119 return;
120 }
121
122 this.villagerObj.getNavigator().tryMoveToXYZ(var1.xCoord, var1.yCoord, var1.zCoord, this.field_75261_c);
123 }
124 }
125 }