Program: 134176
Project: 134176
Buggy source:
private void progress(){
  if (player.isDead() || !player.isOnline()) {
    removeWithTasks();
    return;
  }
 else   if (Methods.getBoundAbility(player) == null || !Methods.getBoundAbility(player).equalsIgnoreCase("String_Node_Str")) {
    remove();
    return;
  }
  if (state == State.START) {
    if (bplayer.isOnCooldown("String_Node_Str")) {
      remove();
      return;
    }
    if (System.currentTimeMillis() - time > chargeTime)     charged=true;
    if (charged) {
      if (player.isSneaking()) {
        Location loc=player.getEyeLocation().add(player.getEyeLocation().getDirection().normalize().multiply(1.2));
        loc.add(0,0.3,0);
        ParticleEffect.MAGIC_CRIT.display(loc,0.3F,0.1F,0.3F,0,4);
      }
 else {
        state=State.MAINBOLT;
        bplayer.addCooldown("String_Node_Str",(long)cooldown);
        Entity target=Methods.getTargetedEntity(player,range,new ArrayList<Entity>());
        origin=player.getEyeLocation();
        if (target != null)         destination=target.getLocation();
 else         destination=player.getEyeLocation().add(player.getEyeLocation().getDirection().normalize().multiply(range));
      }
    }
 else     if (!player.isSneaking()) {
      remove();
      return;
    }
  }
 else   if (state == State.MAINBOLT) {
    Arc mainArc=new Arc(origin,destination);
    mainArc.generatePoints(POINT_GENERATION);
    arcs.add(mainArc);
    ArrayList<Arc> subArcs=mainArc.generateArcs(subArcChance,range / 2.0);
    arcs.addAll(subArcs);
    state=State.STRIKE;
  }
 else   if (state == State.STRIKE) {
    Arc mainArc=null;
    if (arcs.size() > 0)     mainArc=arcs.get(0);
    for (int i=0; i < arcs.size(); i++) {
      Arc arc=arcs.get(i);
      for (int j=0; j < arc.getAnimLocs().size() - 1; j++) {
        final Location iterLoc=arc.getAnimLocs().get(j).getLoc().clone();
        final Location dest=arc.getAnimLocs().get(j + 1).getLoc().clone();
        if (!isTransparent(player,iterLoc.getBlock())) {
          if (SELF_HIT_CLOSE && player.getLocation().distance(iterLoc) < 3) {
            if (!affectedEntities.contains(player)) {
              affectedEntities.add(player);
              electrocute(player);
            }
          }
          if (arcs.get(i) == mainArc) {
            remove();
            return;
          }
          break;
        }
        while (iterLoc.distance(dest) > 0.15) {
          BukkitRunnable task=new LightningParticle(arc,iterLoc.clone());
          double timer=arc.getAnimLocs().get(j).getAnimCounter() / 2;
          task.runTaskTimer(ProjectKorra.plugin,(long)timer,1);
          tasks.add(task);
          iterLoc.add(Methods.getDirection(iterLoc,dest).normalize().multiply(0.15));
        }
      }
      arcs.remove(i);
      i--;
    }
    if (tasks.size() == 0) {
      remove();
      return;
    }
  }
}

Fixed version (ground truth):
private void progress(){
  if (player.isDead() || !player.isOnline()) {
    removeWithTasks();
    return;
  }
 else   if (Methods.getBoundAbility(player) == null || !Methods.getBoundAbility(player).equalsIgnoreCase("String_Node_Str")) {
    remove();
    return;
  }
  if (state == State.START) {
    if (bplayer.isOnCooldown("String_Node_Str")) {
      remove();
      return;
    }
    if (System.currentTimeMillis() - time > chargeTime)     charged=true;
    if (charged) {
      if (player.isSneaking()) {
        Location loc=player.getEyeLocation().add(player.getEyeLocation().getDirection().normalize().multiply(1.2));
        loc.add(0,0.3,0);
        ParticleEffect.MAGIC_CRIT.display(loc,0.3F,0.1F,0.3F,0,4);
      }
 else {
        state=State.MAINBOLT;
        bplayer.addCooldown("String_Node_Str",(long)cooldown);
        Entity target=Methods.getTargetedEntity(player,range,new ArrayList<Entity>());
        origin=player.getEyeLocation();
        if (target != null)         destination=target.getLocation();
 else         destination=player.getEyeLocation().add(player.getEyeLocation().getDirection().normalize().multiply(range));
      }
    }
 else     if (!player.isSneaking()) {
      remove();
      return;
    }
  }
 else   if (state == State.MAINBOLT) {
    Arc mainArc=new Arc(origin,destination);
    mainArc.generatePoints(POINT_GENERATION);
    arcs.add(mainArc);
    ArrayList<Arc> subArcs=mainArc.generateArcs(subArcChance,range / 2.0);
    arcs.addAll(subArcs);
    state=State.STRIKE;
  }
 else   if (state == State.STRIKE) {
    for (int i=0; i < arcs.size(); i++) {
      Arc arc=arcs.get(i);
      for (int j=0; j < arc.getAnimLocs().size() - 1; j++) {
        final Location iterLoc=arc.getAnimLocs().get(j).getLoc().clone();
        final Location dest=arc.getAnimLocs().get(j + 1).getLoc().clone();
        if (!isTransparent(player,iterLoc.getBlock())) {
          if (SELF_HIT_CLOSE && player.getLocation().distance(iterLoc) < 3) {
            if (!affectedEntities.contains(player)) {
              affectedEntities.add(player);
              electrocute(player);
            }
          }
          break;
        }
        while (iterLoc.distance(dest) > 0.15) {
          BukkitRunnable task=new LightningParticle(arc,iterLoc.clone());
          double timer=arc.getAnimLocs().get(j).getAnimCounter() / 2;
          task.runTaskTimer(ProjectKorra.plugin,(long)timer,1);
          tasks.add(task);
          iterLoc.add(Methods.getDirection(iterLoc,dest).normalize().multiply(0.15));
        }
      }
      arcs.remove(i);
      i--;
    }
    if (tasks.size() == 0) {
      remove();
      return;
    }
  }
}