content: package net.minecraft.entity.ai;
  
  import net.minecraft.entity.EntityCreature;
  import net.minecraft.util.BlockPos;
  import net.minecraft.util.Vec3;
  import net.minecraft.world.World;
  
  import java.util.Random;
  
  public class EntityAIFleeSun extends EntityAIBase {
      private final EntityCreature theCreature;
      private double shelterX;
      private double shelterY;
      private double shelterZ;
      private final double movementSpeed;
      private final World theWorld;
  
      public EntityAIFleeSun(EntityCreature theCreatureIn, double movementSpeedIn) {
          this.theCreature = theCreatureIn;
          this.movementSpeed = movementSpeedIn;
          this.theWorld = theCreatureIn.worldObj;
          this.setMutexBits(1);
      }
  
      public boolean shouldExecute() {
          if (!this.theWorld.isDaytime()) {
              return false;
          } else if (!this.theCreature.isBurning()) {
              return false;
          } else if (!this.theWorld.canSeeSky(new BlockPos(this.theCreature.posX, this.theCreature.getEntityBoundingBox().minY, this.theCreature.posZ))) {
              return false;
          } else {
              Vec3 vec3 = this.findPossibleShelter();
  
              if (vec3 == null) {
                  return false;
              } else {
                  this.shelterX = vec3.xCoord;
                  this.shelterY = vec3.yCoord;
                  this.shelterZ = vec3.zCoord;
                  return true;
              }
          }
      }
  
      public boolean continueExecuting() {
          return !this.theCreature.getNavigator().noPath();
      }
  
      public void startExecuting() {
          this.theCreature.getNavigator().tryMoveToXYZ(this.shelterX, this.shelterY, this.shelterZ, this.movementSpeed);
      }
  
      private Vec3 findPossibleShelter() {
          Random random = this.theCreature.getRNG();
          BlockPos blockpos = new BlockPos(this.theCreature.posX, this.theCreature.getEntityBoundingBox().minY, this.theCreature.posZ);
  
          for (int i = 0; i < 10; ++i) {
              BlockPos blockpos1 = blockpos.add(random.nextInt(20) - 10, random.nextInt(6) - 3, random.nextInt(20) - 10);
  
              if (!this.theWorld.canSeeSky(blockpos1) && this.theCreature.getBlockPathWeight(blockpos1) < 0.0F) {
                  return new Vec3(blockpos1.getX(), blockpos1.getY(), blockpos1.getZ());
              }
          }
  
          return null;
      }
  }
  