private void tryAbility(EntityLivingBase mob, EntityLivingBase target) {
    if (target == null || !mob.canEntityBeSeen(target)) {
      return;
    }

    if (mob.getDistanceToEntity(target) > MIN_DISTANCE) {
      double diffX = target.posX - mob.posX;
      double diffY =
          target.boundingBox.minY
              + (double) (target.height / 2.0F)
              - (mob.posY + (double) (mob.height / 2.0F));
      double diffZ = target.posZ - mob.posZ;
      mob.renderYawOffset =
          mob.rotationYaw = -((float) Math.atan2(diffX, diffZ)) * 180.0F / (float) Math.PI;

      mob.worldObj.playAuxSFXAtEntity(
          (EntityPlayer) null, 1008, (int) mob.posX, (int) mob.posY, (int) mob.posZ, 0);
      EntityLargeFireball entFB = new EntityLargeFireball(mob.worldObj, mob, diffX, diffY, diffZ);
      double spawnOffset = 2.0D;
      Vec3 mobLook = mob.getLook(1.0F);
      entFB.posX = mob.posX + mobLook.xCoord * spawnOffset;
      entFB.posY = mob.posY + (double) (mob.height / 2.0F) + 0.5D;
      entFB.posZ = mob.posZ + mobLook.zCoord * spawnOffset;
      mob.worldObj.spawnEntityInWorld(entFB);
    }
  }