Program: 117157
Project: 117157
Buggy source:
/** 
 * Call this once the explosion calculation has completed to manually detonate.
 * @return false if calculation is not yet complete or detonation has already occurred.
 */
public boolean detonate(){
  if (!isCalculationComplete() || detonated) {
    return false;
  }
  LogHelper.dev("String_Node_Str");
  LogHelper.startTimer("String_Node_Str");
  ExplosionHelper removalHelper=new ExplosionHelper(world);
  int i=0;
  for (  Collection<BlockPos> list : destroyedBlocks) {
    removalHelper.addBlocksForRemoval(list);
    i+=list.size();
  }
  for (  BlockPos pos : lavaPositions) {
    world.setBlockState(pos,lavaState);
  }
  removalHelper.addBlocksForUpdate(blocksToUpdate);
  removalHelper.finish();
  LogHelper.dev("String_Node_Str" + i);
  LogHelper.stopTimer();
  isDead=true;
  detonated=true;
  final BlockPos pos=origin.getPos();
  PacketExplosionFX packet=new PacketExplosionFX(pos,radius);
  DraconicEvolution.network.sendToAllAround(packet,new NetworkRegistry.TargetPoint(world.provider.getDimension(),pos.getX(),pos.getY(),pos.getZ(),radius * 4));
  new DelayedExecutor(60){
    @Override public void execute(    Object[] args){
      List<Entity> list=world.getEntitiesWithinAABB(Entity.class,new AxisAlignedBB(pos,pos.add(1,1,1)).expand(radius * 2.5,radius * 2.5,radius * 2.5));
      for (      Entity e : list) {
        double dist=e.getDistance(pos.getX() + 0.5,pos.getY() + 0.5,pos.getZ() + 0.5);
        float dmg=10000F * (1F - (float)(dist / (radius * 1.2D)));
        e.attackEntityFrom(fusionExplosion,dmg);
      }
    }
  }
.run();
  return true;
}

Fixed version (ground truth):
/** 
 * Call this once the explosion calculation has completed to manually detonate.
 * @return false if calculation is not yet complete or detonation has already occurred.
 */
public boolean detonate(){
  if (!isCalculationComplete() || detonated) {
    return false;
  }
  long l=System.currentTimeMillis();
  LogHelper.dev("String_Node_Str");
  LogHelper.startTimer("String_Node_Str");
  ExplosionHelper removalHelper=new ExplosionHelper(world);
  int i=0;
  for (  Collection<BlockPos> list : destroyedBlocks) {
    removalHelper.addBlocksForRemoval(list);
    i+=list.size();
  }
  removalHelper.finish();
  LogHelper.stopTimer();
  LogHelper.startTimer("String_Node_Str");
  for (  BlockPos pos : lavaPositions) {
    world.setBlockState(pos,lavaState);
  }
  LogHelper.stopTimer();
  LogHelper.startTimer("String_Node_Str");
  removalHelper.addBlocksForUpdate(blocksToUpdate);
  LogHelper.dev("String_Node_Str" + i);
  LogHelper.stopTimer();
  isDead=true;
  detonated=true;
  final BlockPos pos=origin.getPos();
  PacketExplosionFX packet=new PacketExplosionFX(pos,radius);
  DraconicEvolution.network.sendToAllAround(packet,new NetworkRegistry.TargetPoint(world.provider.getDimension(),pos.getX(),pos.getY(),pos.getZ(),radius * 4));
  new DelayedExecutor(60){
    @Override public void execute(    Object[] args){
      List<Entity> list=world.getEntitiesWithinAABB(Entity.class,new AxisAlignedBB(pos,pos.add(1,1,1)).expand(radius * 2.5,radius * 2.5,radius * 2.5));
      for (      Entity e : list) {
        double dist=e.getDistance(pos.getX() + 0.5,pos.getY() + 0.5,pos.getZ() + 0.5);
        float dmg=10000F * (1F - (float)(dist / (radius * 1.2D)));
        e.attackEntityFrom(fusionExplosion,dmg);
      }
    }
  }
.run();
  LogHelper.dev("String_Node_Str" + (System.currentTimeMillis() - l) / 1000D + "String_Node_Str");
  return true;
}