    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    }