public static long gymDefense(final PokemonId pokemonId,final PokemonMove move1,final PokemonMove move2,final int attackIV,final int defenseIV,final int staminaIV){
  final PokemonMeta meta=PokemonMetaRegistry.getMeta(pokemonId);
  final double gymDefense=PokemonCalculationUtils.weaveDps(pokemonId,move1,move2,MOVE_2_ADDITIONAL_DELAY) * (meta.getBaseAttack() + attackIV) * PokemonCalculationUtils.tankiness(pokemonId,defenseIV,staminaIV);
  return Math.round(gymDefense);
}

public static long gymDefense ( final PokemonId pokemonId , final PokemonMove move1 , final PokemonMove move2 , final int attackIV , final int defenseIV , final int staminaIV ) { final PokemonMeta meta = PokemonMetaRegistry . getMeta ( pokemonId ) ; final double gymDefense = PokemonCalculationUtils . weaveDps ( pokemonId , move1 , move2 , MOVE_2_ADDITIONAL_DELAY ) * ( meta . getBaseAttack ( ) + attackIV ) * PokemonCalculationUtils . tankiness ( pokemonId , defenseIV , staminaIV ) ; return Math . round ( gymDefense ) ; }
gym defense takes the calculated gym weave damage over 100s and multiplies by tankiness to arrive at a ranking of how much damage a pokemon will output when defending a gym .
