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 }