/**
  * updates the water abilities based on a players bending effect attributes
  *
  * @param player the player that has the effects
  * @param ability an instance of a water ability
  * @param attribs the map of the players effects
  * @return if the ability was updated correctly
  */
 public static boolean updateAbility(
     Player player, Object ability, ConcurrentHashMap<String, Double> attribs) {
   if (ability instanceof IceBlast) {
     IceBlast abil = (IceBlast) ability;
     if (attribs.containsKey("IceBlastRange")) {
       abil.setRange(abil.getRange() + abil.getRange() * attribs.get("IceBlastRange") / 100.0);
     }
     if (attribs.containsKey("IceBlastDamage")) {
       abil.setDefaultdamage(
           abil.getDefaultdamage()
               + abil.getDefaultdamage() * attribs.get("IceBlastDamage") / 100.0);
     }
     return true;
   } else if (ability instanceof IceSpike) {
     IceSpike abil = (IceSpike) ability;
     if (attribs.containsKey("IceSpikeDamage")) {
       abil.setDamage(abil.getDamage() + abil.getDamage() * attribs.get("IceSpikeDamage") / 100.0);
     }
     if (attribs.containsKey("IceSpikeRange")) {
       abil.setRange(abil.getRange() + abil.getRange() * attribs.get("IceSpikeRange") / 100.0);
     }
     return true;
   } else if (ability instanceof IceSpike2) {
     IceSpike2 abil = (IceSpike2) ability;
     if (attribs.containsKey("IceSpikePillarDamage")) {
       abil.setDefaultdamage(
           abil.getDefaultdamage()
               + abil.getDefaultdamage() * attribs.get("IceSpikePillarDamage") / 100.0);
     }
     if (attribs.containsKey("IceSpikePillarRange")) {
       abil.setDefaultrange(
           abil.getDefaultrange()
               + abil.getDefaultrange() * attribs.get("IceSpikePillarRange") / 100.0);
     }
     return true;
   } else if (ability instanceof OctopusForm) {
     OctopusForm abil = (OctopusForm) ability;
     if (attribs.containsKey("OctopusFormRange")) {
       abil.setRange(
           (int) (abil.getRange() + abil.getRange() * attribs.get("OctopusFormRange") / 100.0));
     }
     if (attribs.containsKey("OctopusFormDamage")) {
       abil.setDamage(
           (int) (abil.getDamage() + abil.getDamage() * attribs.get("OctopusFormDamage") / 100.0));
     }
     if (attribs.containsKey("OctopusFormInterval")) {
       abil.setInterval(
           (long)
               (abil.getInterval()
                   + abil.getInterval() * attribs.get("OctopusFormInterval") / 100.0));
     }
     if (attribs.containsKey("OctopusFormKnockback")) {
       abil.setKnockback(
           abil.getKnockback()
               + abil.getKnockback() * attribs.get("OctopusFormKnockback") / 100.0);
     }
     if (attribs.containsKey("OctopusFormRadius")) {
       abil.setRadius(
           abil.getRadius() + abil.getRadius() * attribs.get("OctopusFormRadius") / 100.0);
     }
     return true;
   } else if (ability instanceof Torrent) {
     Torrent abil = (Torrent) ability;
     if (attribs.containsKey("TorrentDamage")) {
       abil.setDamage(
           (int) (abil.getDamage() + abil.getDamage() * attribs.get("TorrentDamage") / 100.0));
     }
     if (attribs.containsKey("TorrentRange")) {
       abil.setRange(abil.getRange() + abil.getRange() * attribs.get("TorrentRange") / 100.0);
     }
     if (attribs.containsKey("TorrentStreamingDamage")) {
       abil.setDeflectdamage(
           (int)
               (abil.getDeflectdamage()
                   + abil.getDeflectdamage() * attribs.get("TorrentStreamingDamage") / 100.0));
     }
     return true;
   } else if (ability instanceof TorrentBurst) {
     TorrentBurst abil = (TorrentBurst) ability;
     if (attribs.containsKey("TorrentWaveRadius")) {
       abil.setMaxradius(
           abil.getMaxradius() + abil.getMaxradius() * attribs.get("TorrentWaveRadius") / 100.0);
     }
     if (attribs.containsKey("TorrentWaveForce")) {
       abil.setFactor(
           abil.getFactor() + abil.getFactor() * attribs.get("TorrentWaveForce") / 100.0);
     }
     if (attribs.containsKey("TorrentWaveHeight")) {
       abil.setMaxheight(
           abil.getMaxheight() + abil.getMaxheight() * attribs.get("TorrentWaveHeight") / 100.0);
     }
     return true;
   } else if (ability instanceof WaterManipulation) {
     WaterManipulation abil = (WaterManipulation) ability;
     if (attribs.containsKey("WaterManipulationRange")) {
       abil.setRange(
           abil.getRange() + abil.getRange() * attribs.get("WaterManipulationRange") / 100.0);
     }
     if (attribs.containsKey("WaterManipulationForce")) {
       abil.setPushfactor(
           abil.getPushfactor()
               + abil.getPushfactor() * attribs.get("WaterManipulationForce") / 100.0);
     }
     if (attribs.containsKey("WaterManipulationDamage")) {
       abil.setDamage(
           abil.getDamage() + abil.getDamage() * attribs.get("WaterManipulationDamage") / 100.0);
     }
     if (attribs.containsKey("WaterManipulationCooldown")) {
       abil.setCooldown(
           (long)
               (abil.getCooldown()
                   + abil.getCooldown() * attribs.get("WaterManipulationCooldown") / 100.0));
     }
     return true;
   } else if (ability instanceof WaterSpout) {
     WaterSpout abil = (WaterSpout) ability;
     if (attribs.containsKey("WaterSpoutHeight")) {
       abil.setDefaultheight(
           (int)
               (abil.getDefaultheight()
                   + abil.getDefaultheight() * attribs.get("WaterSpoutHeight") / 100.0));
     }
     return true;
   } else if (ability instanceof WaterWave) {
     WaterWave abil = (WaterWave) ability;
     if (attribs.containsKey("WaterSpoutWaveRadius")) {
       abil.setWaveRadius(
           abil.getWaveRadius()
               + abil.getWaveRadius() * attribs.get("WaterSpoutWaveRadius") / 100.0);
     }
     if (attribs.containsKey("WaterSpoutWaveRange")) {
       abil.setRange(
           abil.getRange() + abil.getRange() * attribs.get("WaterSpoutWaveRange") / 100.0);
     }
     if (attribs.containsKey("WaterSpoutWaveSpeed")) {
       abil.setSpeed(
           abil.getSpeed() + abil.getSpeed() * attribs.get("WaterSpoutWaveSpeed") / 100.0);
     }
     if (attribs.containsKey("WaterSpoutWaveChargeTime")) {
       abil.setChargeTime(
           abil.getChargeTime()
               + abil.getChargeTime() * attribs.get("WaterSpoutWaveChargeTime") / 100.0);
     }
     if (attribs.containsKey("WaterSpoutWaveFlightTime")) {
       abil.setFlightTime(
           abil.getFlightTime()
               + abil.getFlightTime() * attribs.get("WaterSpoutWaveFlightTime") / 100.0);
     }
     if (attribs.containsKey("IceWaveDamage")) {
       abil.setDamage(abil.getDamage() + abil.getDamage() * attribs.get("IceWaveDamage") / 100.0);
     }
     return true;
   } else if (ability instanceof WaterWall) {
     WaterWall abil = (WaterWall) ability;
     if (attribs.containsKey("SurgeWallRadius")) {
       abil.setRadius(
           abil.getRadius() + abil.getRadius() * attribs.get("SurgeWallRadius") / 100.0);
     }
     if (attribs.containsKey("SurgeWallRange")) {
       abil.setRange(abil.getRange() + abil.getRange() * attribs.get("SurgeWallRange") / 100.0);
     }
     return true;
   } else if (ability instanceof Wave) {
     Wave abil = (Wave) ability;
     if (attribs.containsKey("SurgeWaveRadius")) {
       abil.setMaxradius(
           abil.getMaxradius() + abil.getMaxradius() * attribs.get("SurgeWaveRadius") / 100.0);
     }
     if (attribs.containsKey("SurgeWaveKnockback")) {
       abil.setFactor(
           abil.getFactor() + abil.getFactor() * attribs.get("SurgeWaveKnockback") / 100.0);
     }
     if (attribs.containsKey("SurgeWaveKnockup")) {
       abil.setUpfactor(
           abil.getUpfactor() + abil.getUpfactor() * attribs.get("SurgeWaveKnockup") / 100.0);
     }
     if (attribs.containsKey("SurgeWaveFreezeSize")) {
       abil.setMaxfreezeradius(
           abil.getMaxfreezeradius()
               + abil.getMaxfreezeradius() * attribs.get("SurgeWaveFreezeSize") / 100.0);
     }
     return true;
   }
   return false;
 }