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