Program: 81798
Project: 81798
Buggy source:
/** 
 * Returns value between -1 to 1 -1 is full on snow 1 is full on rain 0 is no precipitation also controls the client side raining and thundering values for vanilla
 * @param entP
 * @param forOvercast
 * @return
 */
public static float getRainStrengthAndControlVisuals(EntityPlayer entP,boolean forOvercast){
  Minecraft mc=FMLClientHandler.instance().getClient();
  double maxStormDist=512 / 4 * 3;
  Vec3 plPos=new Vec3(entP.posX,StormObject.static_YPos_layer0,entP.posZ);
  StormObject storm=null;
  ClientTickHandler.checkClientWeather();
  storm=ClientTickHandler.weatherManager.getClosestStorm(plPos,maxStormDist,StormObject.STATE_FORMING,true);
  if (forOvercast) {
  }
 else {
  }
  boolean closeEnough=false;
  double stormDist=9999;
  float tempAdj=1F;
  float sizeToUse=0;
  float overcastModeMinPrecip=0.2F;
  if (storm != null) {
    sizeToUse=storm.size;
    if (forOvercast) {
      sizeToUse*=1F;
    }
    stormDist=storm.pos.distanceTo(plPos);
    if (sizeToUse > stormDist) {
      closeEnough=true;
    }
  }
  if (closeEnough) {
    double stormIntensity=(sizeToUse - stormDist) / sizeToUse;
    tempAdj=storm.levelTemperature > 0 ? 1F : -1F;
    if (storm.levelCurIntensityStage == StormObject.STATE_NORMAL) {
      if (stormIntensity > 0.3)       stormIntensity=0.3;
    }
    if (ConfigStorm.Storm_NoRainVisual) {
      stormIntensity=0;
    }
    mc.world.getWorldInfo().setRaining(true);
    mc.world.getWorldInfo().setThundering(true);
    if (forOvercast) {
      curOvercastStrTarget=(float)stormIntensity;
    }
 else {
      curPrecipStrTarget=(float)stormIntensity;
    }
  }
 else {
    if (!ConfigMisc.overcastMode) {
      mc.world.getWorldInfo().setRaining(false);
      mc.world.getWorldInfo().setThundering(false);
      if (forOvercast) {
        curOvercastStrTarget=0;
      }
 else {
        curPrecipStrTarget=0;
      }
    }
 else {
      if (ClientTickHandler.weatherManager.isVanillaRainActiveOnServer) {
        mc.world.getWorldInfo().setRaining(true);
        mc.world.getWorldInfo().setThundering(true);
        if (forOvercast) {
          curOvercastStrTarget=overcastModeMinPrecip;
        }
 else {
          curPrecipStrTarget=overcastModeMinPrecip;
        }
      }
 else {
        if (forOvercast) {
          curOvercastStrTarget=0;
        }
 else {
          curPrecipStrTarget=0;
        }
      }
    }
  }
  if (forOvercast) {
    if (curOvercastStr > curOvercastStrTarget) {
      curOvercastStr-=0.001F;
    }
 else     if (curOvercastStr < curOvercastStrTarget) {
      curOvercastStr+=0.001F;
    }
    if (curOvercastStr < 0.0001 && curOvercastStr > -0.0001F) {
      curOvercastStr=0;
    }
    return curOvercastStr * tempAdj;
  }
 else {
    if (curPrecipStr > curPrecipStrTarget) {
      curPrecipStr-=0.001F;
    }
 else     if (curPrecipStr < curPrecipStrTarget) {
      curPrecipStr+=0.001F;
    }
    if (curPrecipStr < 0.0001 && curPrecipStr > -0.0001F) {
      curPrecipStr=0;
    }
    return curPrecipStr * tempAdj;
  }
}

Fixed version (ground truth):
/** 
 * Returns value between -1 to 1 -1 is full on snow 1 is full on rain 0 is no precipitation also controls the client side raining and thundering values for vanilla
 * @param entP
 * @param forOvercast
 * @return
 */
public static float getRainStrengthAndControlVisuals(EntityPlayer entP,boolean forOvercast){
  Minecraft mc=FMLClientHandler.instance().getClient();
  double maxStormDist=512 / 4 * 3;
  Vec3 plPos=new Vec3(entP.posX,StormObject.static_YPos_layer0,entP.posZ);
  StormObject storm=null;
  ClientTickHandler.checkClientWeather();
  storm=ClientTickHandler.weatherManager.getClosestStorm(plPos,maxStormDist,StormObject.STATE_FORMING,true);
  if (forOvercast) {
  }
 else {
  }
  boolean closeEnough=false;
  double stormDist=9999;
  float tempAdj=1F;
  float sizeToUse=0;
  float overcastModeMinPrecip=0.23F;
  if (storm != null) {
    sizeToUse=storm.size;
    if (forOvercast) {
      sizeToUse*=1F;
    }
    stormDist=storm.pos.distanceTo(plPos);
    if (sizeToUse > stormDist) {
      closeEnough=true;
    }
  }
  if (closeEnough) {
    double stormIntensity=(sizeToUse - stormDist) / sizeToUse;
    tempAdj=storm.levelTemperature > 0 ? 1F : -1F;
    if (storm.levelCurIntensityStage == StormObject.STATE_NORMAL) {
      if (stormIntensity > 0.3)       stormIntensity=0.3;
    }
    if (ConfigStorm.Storm_NoRainVisual) {
      stormIntensity=0;
    }
    mc.world.getWorldInfo().setRaining(true);
    mc.world.getWorldInfo().setThundering(true);
    if (forOvercast) {
      curOvercastStrTarget=(float)stormIntensity;
    }
 else {
      curPrecipStrTarget=(float)stormIntensity;
    }
  }
 else {
    if (!ClientTickHandler.clientConfigData.overcastMode) {
      mc.world.getWorldInfo().setRaining(false);
      mc.world.getWorldInfo().setThundering(false);
      if (forOvercast) {
        curOvercastStrTarget=0;
      }
 else {
        curPrecipStrTarget=0;
      }
    }
 else {
      if (ClientTickHandler.weatherManager.isVanillaRainActiveOnServer) {
        mc.world.getWorldInfo().setRaining(true);
        mc.world.getWorldInfo().setThundering(true);
        if (forOvercast) {
          curOvercastStrTarget=overcastModeMinPrecip;
        }
 else {
          curPrecipStrTarget=overcastModeMinPrecip;
        }
      }
 else {
        if (forOvercast) {
          curOvercastStrTarget=0;
        }
 else {
          curPrecipStrTarget=0;
        }
      }
    }
  }
  if (forOvercast) {
    if (curOvercastStr > curOvercastStrTarget) {
      curOvercastStr-=0.001F;
    }
 else     if (curOvercastStr < curOvercastStrTarget) {
      curOvercastStr+=0.001F;
    }
    if (curOvercastStr < 0.0001 && curOvercastStr > -0.0001F) {
      curOvercastStr=0;
    }
    return curOvercastStr * tempAdj;
  }
 else {
    if (curPrecipStr > curPrecipStrTarget) {
      curPrecipStr-=0.001F;
    }
 else     if (curPrecipStr < curPrecipStrTarget) {
      curPrecipStr+=0.001F;
    }
    if (curPrecipStr < 0.0001 && curPrecipStr > -0.0001F) {
      curPrecipStr=0;
    }
    return curPrecipStr * tempAdj;
  }
}