package WayofTime.bloodmagic.entity.ai; import java.util.List; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.ai.EntityAIBase; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.world.World; import WayofTime.bloodmagic.entity.mob.EntityAspectedDemonBase; import WayofTime.bloodmagic.entity.mob.EntityCorruptedSheep; public class EntityAIProtectAlly extends EntityAIBase { /** The entity owner of this AITask */ private final EntityCorruptedSheep entity; /** The world the grass eater entity is eating from */ private final World world; /** Number of ticks since the entity started to eat grass */ int castTimer; public EntityAIProtectAlly(EntityCorruptedSheep entity) { this.entity = entity; this.world = entity.getEntityWorld(); this.setMutexBits(7); } public int getCastTimer() { return this.castTimer; } /** * Returns whether the EntityAIBase should begin execution. */ @Override public boolean shouldExecute() { AxisAlignedBB bb = new AxisAlignedBB(entity.posX - 0.5, entity.posY - 0.5, entity.posZ - 0.5, entity.posX + 0.5, entity.posY + 0.5, entity.posZ + 0.5).expandXyz(5); List list = world.getEntitiesWithinAABB(EntityLivingBase.class, bb, new EntityAspectedDemonBase.WillTypePredicate(entity.getType())); for (EntityLivingBase testEntity : list) { if (testEntity != this.entity) { if (this.entity.canProtectAlly(testEntity)) { return true; } } } return false; } /** * Execute a one shot task or start executing a continuous task */ @Override public void startExecuting() { this.castTimer = 100; this.world.setEntityState(this.entity, (byte) 53); this.entity.getNavigator().clearPathEntity(); } /** * Resets the task */ @Override public void resetTask() { this.castTimer = 0; } /** * Returns whether an in-progress EntityAIBase should continue executing */ @Override public boolean continueExecuting() { return castTimer > 0; } /** * Updates the task */ @Override public void updateTask() { this.castTimer = Math.max(0, this.castTimer - 1); if (castTimer == 0) { AxisAlignedBB bb = new AxisAlignedBB(entity.posX - 0.5, entity.posY - 0.5, entity.posZ - 0.5, entity.posX + 0.5, entity.posY + 0.5, entity.posZ + 0.5).expandXyz(5); List list = world.getEntitiesWithinAABB(EntityLivingBase.class, bb, new EntityAspectedDemonBase.WillTypePredicate(entity.getType())); for (EntityLivingBase testEntity : list) { if (testEntity != this.entity) { if (this.entity.applyProtectionToAlly(testEntity)) { return; } } } } } }