001 package net.minecraft.entity.ai; 002 003 import java.util.Iterator; 004 import java.util.List; 005 import net.minecraft.entity.passive.EntityAnimal; 006 007 public class EntityAIFollowParent extends EntityAIBase 008 { 009 /** The child that is following its parent. */ 010 EntityAnimal childAnimal; 011 EntityAnimal parentAnimal; 012 float field_75347_c; 013 private int field_75345_d; 014 015 public EntityAIFollowParent(EntityAnimal par1EntityAnimal, float par2) 016 { 017 this.childAnimal = par1EntityAnimal; 018 this.field_75347_c = par2; 019 } 020 021 /** 022 * Returns whether the EntityAIBase should begin execution. 023 */ 024 public boolean shouldExecute() 025 { 026 if (this.childAnimal.getGrowingAge() >= 0) 027 { 028 return false; 029 } 030 else 031 { 032 List var1 = this.childAnimal.worldObj.getEntitiesWithinAABB(this.childAnimal.getClass(), this.childAnimal.boundingBox.expand(8.0D, 4.0D, 8.0D)); 033 EntityAnimal var2 = null; 034 double var3 = Double.MAX_VALUE; 035 Iterator var5 = var1.iterator(); 036 037 while (var5.hasNext()) 038 { 039 EntityAnimal var6 = (EntityAnimal)var5.next(); 040 041 if (var6.getGrowingAge() >= 0) 042 { 043 double var7 = this.childAnimal.getDistanceSqToEntity(var6); 044 045 if (var7 <= var3) 046 { 047 var3 = var7; 048 var2 = var6; 049 } 050 } 051 } 052 053 if (var2 == null) 054 { 055 return false; 056 } 057 else if (var3 < 9.0D) 058 { 059 return false; 060 } 061 else 062 { 063 this.parentAnimal = var2; 064 return true; 065 } 066 } 067 } 068 069 /** 070 * Returns whether an in-progress EntityAIBase should continue executing 071 */ 072 public boolean continueExecuting() 073 { 074 if (!this.parentAnimal.isEntityAlive()) 075 { 076 return false; 077 } 078 else 079 { 080 double var1 = this.childAnimal.getDistanceSqToEntity(this.parentAnimal); 081 return var1 >= 9.0D && var1 <= 256.0D; 082 } 083 } 084 085 /** 086 * Execute a one shot task or start executing a continuous task 087 */ 088 public void startExecuting() 089 { 090 this.field_75345_d = 0; 091 } 092 093 /** 094 * Resets the task 095 */ 096 public void resetTask() 097 { 098 this.parentAnimal = null; 099 } 100 101 /** 102 * Updates the task 103 */ 104 public void updateTask() 105 { 106 if (--this.field_75345_d <= 0) 107 { 108 this.field_75345_d = 10; 109 this.childAnimal.getNavigator().tryMoveToEntityLiving(this.parentAnimal, this.field_75347_c); 110 } 111 } 112 }