001 package net.minecraft.entity.ai; 002 003 import net.minecraft.entity.EntityCreature; 004 import net.minecraft.util.ChunkCoordinates; 005 import net.minecraft.util.Vec3; 006 007 public class EntityAIMoveTwardsRestriction extends EntityAIBase 008 { 009 private EntityCreature theEntity; 010 private double movePosX; 011 private double movePosY; 012 private double movePosZ; 013 private float movementSpeed; 014 015 public EntityAIMoveTwardsRestriction(EntityCreature par1EntityCreature, float par2) 016 { 017 this.theEntity = par1EntityCreature; 018 this.movementSpeed = par2; 019 this.setMutexBits(1); 020 } 021 022 /** 023 * Returns whether the EntityAIBase should begin execution. 024 */ 025 public boolean shouldExecute() 026 { 027 if (this.theEntity.isWithinHomeDistanceCurrentPosition()) 028 { 029 return false; 030 } 031 else 032 { 033 ChunkCoordinates var1 = this.theEntity.getHomePosition(); 034 Vec3 var2 = RandomPositionGenerator.findRandomTargetBlockTowards(this.theEntity, 16, 7, this.theEntity.worldObj.getWorldVec3Pool().getVecFromPool((double)var1.posX, (double)var1.posY, (double)var1.posZ)); 035 036 if (var2 == null) 037 { 038 return false; 039 } 040 else 041 { 042 this.movePosX = var2.xCoord; 043 this.movePosY = var2.yCoord; 044 this.movePosZ = var2.zCoord; 045 return true; 046 } 047 } 048 } 049 050 /** 051 * Returns whether an in-progress EntityAIBase should continue executing 052 */ 053 public boolean continueExecuting() 054 { 055 return !this.theEntity.getNavigator().noPath(); 056 } 057 058 /** 059 * Execute a one shot task or start executing a continuous task 060 */ 061 public void startExecuting() 062 { 063 this.theEntity.getNavigator().tryMoveToXYZ(this.movePosX, this.movePosY, this.movePosZ, this.movementSpeed); 064 } 065 }