Program: 81908
Project: 81908
Buggy source:
/** 
 * - size of storm determined by how long it was in desert - front of storm dies down once it exits desert - stops moving once fully dies down - storm continues for minutes even after front has exited desert
 */
public void tickProgressionAndMovement(){
  World world=manager.getWorld();
  WindManager windMan=manager.getWindManager();
  float angle=windMan.getWindAngleForClouds();
  float speedWind=windMan.getWindSpeedForClouds();
  if (!world.isRemote) {
    age++;
    BlockPos posBlock=pos.toBlockPos();
    if (isFrontGrowing && world.isBlockLoaded(posBlock)) {
      Biome biomeIn=world.getBiomeForCoordsBody(posBlock);
      if (isDesert(biomeIn)) {
        isFrontGrowing=true;
      }
 else {
        System.out.println("String_Node_Str");
        isFrontGrowing=false;
      }
    }
 else {
      isFrontGrowing=false;
    }
    int sizeAdjRate=10;
    if (isFrontGrowing) {
      if (world.getTotalWorldTime() % sizeAdjRate == 0) {
        if (size < maxSize) {
          size++;
        }
      }
    }
 else {
      if (world.getTotalWorldTime() % sizeAdjRate == 0) {
        if (size > 0) {
          size--;
        }
      }
      if (ageFadeout < ageFadeoutMax) {
        ageFadeout++;
      }
 else {
        System.out.println("String_Node_Str");
        this.setDead();
      }
    }
    if (size > sizePeak) {
      sizePeak=size;
    }
    if (!windMan.isHighWindEventActive()) {
      windMan.highWindTimer=100;
    }
  }
  double vecX=-Math.sin(Math.toRadians(angle));
  double vecZ=Math.cos(Math.toRadians(angle));
  double speed=speedWind * 0.3D;
  if (size > 0) {
    this.pos.xCoord+=vecX * speed;
    this.pos.zCoord+=vecZ * speed;
  }
  int yy=world.getHeight(new BlockPos(pos.xCoord,0,pos.zCoord)).getY();
  this.pos.yCoord=yy + 1;
}

Fixed version (ground truth):
/** 
 * - size of storm determined by how long it was in desert - front of storm dies down once it exits desert - stops moving once fully dies down - storm continues for minutes even after front has exited desert
 */
public void tickProgressionAndMovement(){
  World world=manager.getWorld();
  WindManager windMan=manager.getWindManager();
  float angle=windMan.getWindAngleForClouds();
  float speedWind=windMan.getWindSpeedForClouds();
  if (!world.isRemote) {
    age++;
    BlockPos posBlock=pos.toBlockPos();
    if (isFrontGrowing && world.isBlockLoaded(posBlock)) {
      Biome biomeIn=world.getBiomeForCoordsBody(posBlock);
      if (isDesert(biomeIn)) {
        isFrontGrowing=true;
      }
 else {
        System.out.println("String_Node_Str");
        isFrontGrowing=false;
      }
    }
 else {
      isFrontGrowing=false;
    }
    int sizeAdjRate=10;
    if (isFrontGrowing) {
      if (world.getTotalWorldTime() % sizeAdjRate == 0) {
        if (size < maxSize) {
          size++;
        }
      }
    }
 else {
      if (world.getTotalWorldTime() % sizeAdjRate == 0) {
        if (size > 0) {
          size--;
        }
      }
      if (ageFadeout < ageFadeoutMax) {
        ageFadeout++;
      }
 else {
        System.out.println("String_Node_Str");
        this.setDead();
      }
    }
    if (size > sizePeak) {
      sizePeak=size;
    }
    if (windMan.highWindTimer < 100) {
      windMan.highWindTimer=100;
    }
  }
  double vecX=-Math.sin(Math.toRadians(angle));
  double vecZ=Math.cos(Math.toRadians(angle));
  double speed=speedWind * 0.3D;
  if (size > 0) {
    this.pos.xCoord+=vecX * speed;
    this.pos.zCoord+=vecZ * speed;
  }
  int yy=world.getHeight(new BlockPos(pos.xCoord,0,pos.zCoord)).getY();
  this.pos.yCoord=yy + 1;
}