Program: 81913
Project: 81913
Buggy source:
public void tick(World parWorld){
  if (!parWorld.isRemote) {
    if (parWorld.getTotalWorldTime() % queueProcessRate == 0) {
      for (      BlockUpdateSnapshot snapshot : listBlockUpdateQueue) {
        World world=DimensionManager.getWorld(snapshot.getDimID());
        if (world != null) {
          world.setBlockState(snapshot.getPos(),snapshot.getState(),3);
        }
      }
      listBlockUpdateQueue.clear();
    }
  }
  if (storm == null)   return;
  boolean seesLight=false;
  tickGrabCount=0;
  removeCount=0;
  tryRipCount=0;
  int tryRipMax=300;
  tornadoBaseSize=getTornadoBaseSize();
  if (storm.stormType == storm.TYPE_WATER) {
    tornadoBaseSize*=3;
  }
  forceRotate(parWorld);
  Random rand=new Random();
  int spawnYOffset=(int)storm.posBaseFormationPos.yCoord;
  if (!parWorld.isRemote && ConfigMisc.Storm_Tornado_grabBlocks) {
    int yStart=00;
    int yEnd=(int)storm.pos.yCoord;
    int yInc=1;
    BiomeGenBase bgb=parWorld.getBiomeGenForCoords(new BlockPos(MathHelper.floor_double(storm.pos.xCoord),0,MathHelper.floor_double(storm.pos.zCoord)));
    if (bgb != null && bgb.minHeight + bgb.maxHeight <= 0.7) {
      for (int i=yStart; i < yEnd; i+=yInc) {
        int YRand=i;
        int ii=YRand / 4;
        if (i > 20 && rand.nextInt(2) != 0) {
          continue;
        }
        if (tryRipCount > tryRipMax) {
          break;
        }
        int extraTry=(int)((storm.levelCurIntensityStage + 1 - storm.levelStormIntensityFormingStartVal) * 5);
        int loopAmount=5 + ii + extraTry;
        if (storm.stormType == StormObject.TYPE_WATER) {
          loopAmount=1 + ii / 2;
        }
        for (int k=0; k < loopAmount; k++) {
          if (tryRipCount > tryRipMax) {
            break;
          }
          int tryY=(int)(spawnYOffset + YRand - 1.5D);
          if (tryY > 255) {
            tryY=255;
          }
          int tryX=(int)storm.pos.xCoord + rand.nextInt(tornadoBaseSize + (ii)) - ((tornadoBaseSize / 2) + (ii / 2));
          int tryZ=(int)storm.pos.zCoord + rand.nextInt(tornadoBaseSize + (ii)) - ((tornadoBaseSize / 2) + (ii / 2));
          double d0=storm.pos.xCoord - tryX;
          double d2=storm.pos.zCoord - tryZ;
          double dist=(double)MathHelper.sqrt_double(d0 * d0 + d2 * d2);
          if (dist < tornadoBaseSize / 2 + ii / 2 && tryRipCount < tryRipMax) {
            Block blockID=parWorld.getBlockState(new BlockPos(tryX,tryY,tryZ)).getBlock();
            boolean performed=false;
            if (!CoroUtilBlock.isAir(blockID) && canGrab(parWorld,blockID)) {
              tryRipCount++;
              seesLight=tryRip(parWorld,tryX,tryY,tryZ);
              performed=seesLight;
            }
            if (!performed && ConfigMisc.Storm_Tornado_RefinedGrabRules) {
              if (blockID == Blocks.grass) {
                listBlockUpdateQueue.add(new BlockUpdateSnapshot(parWorld.provider.getDimensionId(),Blocks.dirt.getDefaultState(),new BlockPos(tryX,tryY,tryZ)));
              }
            }
          }
        }
      }
      for (int k=0; k < 10; k++) {
        int randSize=40;
        int tryX=(int)storm.pos.xCoord + rand.nextInt(randSize) - 20;
        int tryY=(int)spawnYOffset - 2 + rand.nextInt(8);
        int tryZ=(int)storm.pos.zCoord + rand.nextInt(randSize) - 20;
        double d0=storm.pos.xCoord - tryX;
        double d2=storm.pos.zCoord - tryZ;
        double dist=(double)MathHelper.sqrt_double(d0 * d0 + d2 * d2);
        if (dist < tornadoBaseSize / 2 + randSize / 2 && tryRipCount < tryRipMax) {
          Block blockID=parWorld.getBlockState(new BlockPos(tryX,tryY,tryZ)).getBlock();
          if (!CoroUtilBlock.isAir(blockID) && canGrab(parWorld,blockID)) {
            tryRipCount++;
            tryRip(parWorld,tryX,tryY,tryZ);
          }
        }
      }
    }
  }
 else {
    seesLight=true;
  }
  if (Math.abs((spawnYOffset - storm.pos.yCoord)) > 5) {
    seesLight=true;
  }
}

Fixed version (ground truth):
public void tick(World parWorld){
  if (!parWorld.isRemote) {
    if (parWorld.getTotalWorldTime() % queueProcessRate == 0) {
      Iterator<BlockUpdateSnapshot> it=listBlockUpdateQueue.values().iterator();
      while (it.hasNext()) {
        BlockUpdateSnapshot snapshot=it.next();
        World world=DimensionManager.getWorld(snapshot.getDimID());
        if (world != null) {
          world.setBlockState(snapshot.getPos(),snapshot.getState(),3);
          if (snapshot.getState().getBlock() == Blocks.air) {
            EntityMovingBlock mBlock=new EntityMovingBlock(parWorld,snapshot.getPos().getX(),snapshot.getPos().getY(),snapshot.getPos().getZ(),snapshot.statePrev.getBlock(),storm);
            parWorld.spawnEntityInWorld(mBlock);
          }
        }
      }
      listBlockUpdateQueue.clear();
    }
  }
  if (storm == null)   return;
  boolean seesLight=false;
  tickGrabCount=0;
  removeCount=0;
  tryRipCount=0;
  int tryRipMax=300;
  tornadoBaseSize=getTornadoBaseSize();
  if (storm.stormType == storm.TYPE_WATER) {
    tornadoBaseSize*=3;
  }
  forceRotate(parWorld);
  Random rand=new Random();
  int spawnYOffset=(int)storm.posBaseFormationPos.yCoord;
  if (!parWorld.isRemote && ConfigMisc.Storm_Tornado_grabBlocks) {
    int yStart=00;
    int yEnd=(int)storm.pos.yCoord;
    int yInc=1;
    BiomeGenBase bgb=parWorld.getBiomeGenForCoords(new BlockPos(MathHelper.floor_double(storm.pos.xCoord),0,MathHelper.floor_double(storm.pos.zCoord)));
    if (bgb != null && bgb.minHeight + bgb.maxHeight <= 0.7) {
      for (int i=yStart; i < yEnd; i+=yInc) {
        int YRand=i;
        int ii=YRand / 4;
        if (i > 20 && rand.nextInt(2) != 0) {
          continue;
        }
        if (tryRipCount > tryRipMax) {
          break;
        }
        int extraTry=(int)((storm.levelCurIntensityStage + 1 - storm.levelStormIntensityFormingStartVal) * 5);
        int loopAmount=5 + ii + extraTry;
        if (storm.stormType == StormObject.TYPE_WATER) {
          loopAmount=1 + ii / 2;
        }
        for (int k=0; k < loopAmount; k++) {
          if (tryRipCount > tryRipMax) {
            break;
          }
          int tryY=(int)(spawnYOffset + YRand - 1.5D);
          if (tryY > 255) {
            tryY=255;
          }
          int tryX=(int)storm.pos.xCoord + rand.nextInt(tornadoBaseSize + (ii)) - ((tornadoBaseSize / 2) + (ii / 2));
          int tryZ=(int)storm.pos.zCoord + rand.nextInt(tornadoBaseSize + (ii)) - ((tornadoBaseSize / 2) + (ii / 2));
          double d0=storm.pos.xCoord - tryX;
          double d2=storm.pos.zCoord - tryZ;
          double dist=(double)MathHelper.sqrt_double(d0 * d0 + d2 * d2);
          BlockPos pos=new BlockPos(tryX,tryY,tryZ);
          if (dist < tornadoBaseSize / 2 + ii / 2 && tryRipCount < tryRipMax) {
            IBlockState state=parWorld.getBlockState(pos);
            Block blockID=state.getBlock();
            boolean performed=false;
            if (!CoroUtilBlock.isAir(blockID) && canGrab(parWorld,blockID)) {
              tryRipCount++;
              seesLight=tryRip(parWorld,tryX,tryY,tryZ);
              performed=seesLight;
            }
            if (!performed && ConfigMisc.Storm_Tornado_RefinedGrabRules) {
              if (blockID == Blocks.grass) {
                if (!listBlockUpdateQueue.containsKey(pos)) {
                  listBlockUpdateQueue.put(pos,new BlockUpdateSnapshot(parWorld.provider.getDimensionId(),Blocks.dirt.getDefaultState(),state,pos,false));
                }
              }
            }
          }
        }
      }
      for (int k=0; k < 10; k++) {
        int randSize=40;
        int tryX=(int)storm.pos.xCoord + rand.nextInt(randSize) - 20;
        int tryY=(int)spawnYOffset - 2 + rand.nextInt(8);
        int tryZ=(int)storm.pos.zCoord + rand.nextInt(randSize) - 20;
        double d0=storm.pos.xCoord - tryX;
        double d2=storm.pos.zCoord - tryZ;
        double dist=(double)MathHelper.sqrt_double(d0 * d0 + d2 * d2);
        if (dist < tornadoBaseSize / 2 + randSize / 2 && tryRipCount < tryRipMax) {
          Block blockID=parWorld.getBlockState(new BlockPos(tryX,tryY,tryZ)).getBlock();
          if (!CoroUtilBlock.isAir(blockID) && canGrab(parWorld,blockID)) {
            tryRipCount++;
            tryRip(parWorld,tryX,tryY,tryZ);
          }
        }
      }
    }
  }
 else {
    seesLight=true;
  }
  if (Math.abs((spawnYOffset - storm.pos.yCoord)) > 5) {
    seesLight=true;
  }
}