package minefantasy.entity.ai.drake; import java.util.Random; import minefantasy.entity.EntityDrake; import net.minecraft.block.Block; import net.minecraft.entity.EntityCreature; import net.minecraft.entity.ai.EntityAIBase; import net.minecraft.util.MathHelper; import net.minecraft.util.Vec3; import net.minecraft.world.World; public class EntityAIFindCave extends EntityAIBase { private EntityDrake theCreature; private double shelterX; private double shelterY; private double shelterZ; private float movementSpeed; private World theWorld; public EntityAIFindCave(EntityDrake drake, float speed) { this.theCreature = drake; this.movementSpeed = speed; this.theWorld = drake.worldObj; this.setMutexBits(1); } /** * Returns whether the EntityAIBase should begin execution. */ public boolean shouldExecute() { if (theCreature.state != 1) { return false; } else if (!this.theWorld.canBlockSeeTheSky(MathHelper.floor_double(this.theCreature.posX), (int)this.theCreature.boundingBox.minY, MathHelper.floor_double(this.theCreature.posZ))) { return false; } else { Vec3 var1 = this.findPossibleShelter(); if (var1 == null) { return false; } else { this.shelterX = var1.xCoord; this.shelterY = var1.yCoord; this.shelterZ = var1.zCoord; return true; } } } /** * Returns whether an in-progress EntityAIBase should continue executing */ public boolean continueExecuting() { return !this.theCreature.getNavigator().noPath(); } /** * Execute a one shot task or start executing a continuous task */ public void startExecuting() { this.theCreature.getNavigator().tryMoveToXYZ(this.shelterX, this.shelterY, this.shelterZ, this.movementSpeed); } private Vec3 findPossibleShelter() { Random var1 = this.theCreature.getRNG(); for (int var2 = 0; var2 < 10; ++var2) { int var3 = MathHelper.floor_double(this.theCreature.posX + (double)var1.nextInt(20) - 10.0D); int var4 = MathHelper.floor_double(this.theCreature.boundingBox.minY + (double)var1.nextInt(6) - 3.0D); int var5 = MathHelper.floor_double(this.theCreature.posZ + (double)var1.nextInt(20) - 10.0D); if (!this.theWorld.canBlockSeeTheSky(var3, var4, var5) && this.theCreature.getBlockPathWeight(var3, var4, var5) < 0.0F) { return this.theWorld.getWorldVec3Pool().getVecFromPool((double)var3, (double)var4, (double)var5); } } return null; } }