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