001    package net.minecraft.src;
002    
003    public class EntityAIPanic extends EntityAIBase
004    {
005        private EntityCreature theEntityCreature;
006        private float speed;
007        private double randPosX;
008        private double randPosY;
009        private double randPosZ;
010    
011        public EntityAIPanic(EntityCreature par1EntityCreature, float par2)
012        {
013            this.theEntityCreature = par1EntityCreature;
014            this.speed = par2;
015            this.setMutexBits(1);
016        }
017    
018        /**
019         * Returns whether the EntityAIBase should begin execution.
020         */
021        public boolean shouldExecute()
022        {
023            if (this.theEntityCreature.getAITarget() == null)
024            {
025                return false;
026            }
027            else
028            {
029                Vec3 var1 = RandomPositionGenerator.findRandomTarget(this.theEntityCreature, 5, 4);
030    
031                if (var1 == null)
032                {
033                    return false;
034                }
035                else
036                {
037                    this.randPosX = var1.xCoord;
038                    this.randPosY = var1.yCoord;
039                    this.randPosZ = var1.zCoord;
040                    return true;
041                }
042            }
043        }
044    
045        /**
046         * Execute a one shot task or start executing a continuous task
047         */
048        public void startExecuting()
049        {
050            this.theEntityCreature.getNavigator().tryMoveToXYZ(this.randPosX, this.randPosY, this.randPosZ, this.speed);
051        }
052    
053        /**
054         * Returns whether an in-progress EntityAIBase should continue executing
055         */
056        public boolean continueExecuting()
057        {
058            return !this.theEntityCreature.getNavigator().noPath();
059        }
060    }