| 
					
				 | 
			
			
				@@ -157,319 +157,6 @@ public class AdvancedConfig extends ConfigValidated { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public List<String> validateKeys() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // Validate all the settings! 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         List<String> reason = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /* GENERAL */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getAbilityLength() < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + GENERAL + "." + ABILITY + "." + LENGTH + ".<mode>." + INCREASE_LEVEL + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getEnchantBuff() < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + GENERAL + "." + ABILITY + "." + ENCHANT_BUFF + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /* ACROBATICS */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getMaximumProbability(SubSkillType.ACROBATICS_DODGE) < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + ACROBATICS + "." + DODGE + "." + CHANCE_MAX + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getMaxBonusLevel(SubSkillType.ACROBATICS_DODGE) < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + ACROBATICS + "." + DODGE + "." + MAX_BONUS_LEVEL + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getDodgeDamageModifier() <= 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + ACROBATICS + "." + DODGE + "." + DAMAGE_MODIFIER + " should be greater than 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getMaximumProbability(SubSkillType.ACROBATICS_ROLL) < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + ACROBATICS + "." + ROLL + "." + CHANCE_MAX + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getMaxBonusLevel(SubSkillType.ACROBATICS_ROLL) < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + ACROBATICS + "." + ROLL + "." + MAX_BONUS_LEVEL + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getRollDamageThreshold() < 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + ACROBATICS + "." + ROLL + "." + DAMAGE_THRESHOLD + " should be at least 0!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getGracefulRollDamageThreshold() < 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + ACROBATICS + "." + GRACEFUL_ROLL + "." + DAMAGE_THRESHOLD + " should be at least 0!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getCatalysisMinSpeed() <= 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + ALCHEMY + "." + CATALYSIS + "." + MIN_SPEED + " must be greater than 0!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getCatalysisMaxSpeed() < getCatalysisMinSpeed()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + ALCHEMY + "." + CATALYSIS + "." + MAX_SPEED + " should be at least Skills.Alchemy.Catalysis." + MIN_SPEED + "!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /* ARCHERY */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getSkillShotRankDamageMultiplier() <= 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + ARCHERY + "." + SKILL_SHOT + "." + RANK_DAMAGE_MULTIPLIER + " should be greater than 0!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getMaximumProbability(SubSkillType.ARCHERY_DAZE) < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + ARCHERY + "." + DAZE + "." + CHANCE_MAX + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getMaxBonusLevel(SubSkillType.ARCHERY_DAZE) < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + ARCHERY + "." + DAZE + "." + MAX_BONUS_LEVEL + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getDazeBonusDamage() < 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + ARCHERY + "." + DAZE + "." + BONUS_DAMAGE + " should be at least 0!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getMaximumProbability(SubSkillType.ARCHERY_ARROW_RETRIEVAL) < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + ARCHERY + ".Retrieve." + CHANCE_MAX + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getMaxBonusLevel(SubSkillType.ARCHERY_ARROW_RETRIEVAL) < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + ARCHERY + ".Retrieve." + MAX_BONUS_LEVEL + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getForceMultiplier() < 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + ARCHERY + "." + FORCE_MULTIPLIER + " should be at least 0!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /* AXES */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getAxeMasteryRankDamageMultiplier() < 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + AXES + "." + AXE_MASTERY + "." + RANK_DAMAGE_MULTIPLIER + " should be at least 0!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getMaximumProbability(SubSkillType.AXES_CRITICAL_STRIKES) < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + AXES + ".CriticalHit." + CHANCE_MAX + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getMaxBonusLevel(SubSkillType.AXES_CRITICAL_STRIKES) < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + AXES + ".CriticalHit." + MAX_BONUS_LEVEL + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getCriticalStrikesPVPModifier() < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + AXES + "." + CRITICAL_STRIKES + "." + PVP_MODIFIER + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getCriticalStrikesPVPModifier() < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + AXES + "." + CRITICAL_STRIKES + "." + PVE_MODIFIER + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getGreaterImpactChance() < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + AXES + "." + GREATER_IMPACT + "." + CHANCE + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getGreaterImpactModifier() < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + AXES + "." + GREATER_IMPACT + "." + KNOCKBACK_MODIFIER + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getGreaterImpactBonusDamage() < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + AXES + "." + GREATER_IMPACT + "." + BONUS_DAMAGE + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /*if (getFishermanDietRankChange() < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + FISHING + ".FishermansDiet.RankChange should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getMasterAnglerBoatModifier() < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + FISHING + "." + MASTER_ANGLER + "." + BOAT_MODIFIER + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getMasterAnglerBiomeModifier() < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + FISHING + "." + MASTER_ANGLER + "." + BIOME_MODIFIER + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /* HERBALISM */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /*if (getFarmerDietRankChange() < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + ".Herbalism.FarmersDiet.RankChange should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getGreenThumbStageChange() < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + ".Herbalism.GreenThumb.StageChange should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getMaximumProbability(SubSkillType.HERBALISM_GREEN_THUMB) < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + ".Herbalism.GreenThumb." + CHANCE_MAX + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getMaxBonusLevel(SubSkillType.HERBALISM_GREEN_THUMB) < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + ".Herbalism.GreenThumb." + MAX_BONUS_LEVEL + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getMaximumProbability(SubSkillType.HERBALISM_DOUBLE_DROPS) < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + ".Herbalism.DoubleDrops." + CHANCE_MAX + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getMaxBonusLevel(SubSkillType.HERBALISM_DOUBLE_DROPS) < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + ".Herbalism.DoubleDrops." + MAX_BONUS_LEVEL + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getMaximumProbability(SubSkillType.HERBALISM_HYLIAN_LUCK) < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + ".Herbalism.HylianLuck." + CHANCE_MAX + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getMaxBonusLevel(SubSkillType.HERBALISM_HYLIAN_LUCK) < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + ".Herbalism.HylianLuck." + MAX_BONUS_LEVEL + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getMaximumProbability(SubSkillType.HERBALISM_SHROOM_THUMB) < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + ".Herbalism.ShroomThumb." + CHANCE_MAX + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getMaxBonusLevel(SubSkillType.HERBALISM_SHROOM_THUMB) < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + ".Herbalism.ShroomThumb." + MAX_BONUS_LEVEL + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /* MINING */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getMaximumProbability(SubSkillType.MINING_DOUBLE_DROPS) < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + MINING + ".DoubleDrops." + CHANCE_MAX + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getMaxBonusLevel(SubSkillType.MINING_DOUBLE_DROPS) < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + MINING + ".DoubleDrops." + MAX_BONUS_LEVEL + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /* REPAIR */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getRepairMasteryMaxLevel() < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + REPAIR + "." + REPAIR_MASTERY + "." + MAX_BONUS_LEVEL + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getRepairMasteryMaxBonus() < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + REPAIR + "." + REPAIR_MASTERY + "." + MAX_BONUS_PERCENTAGE + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getMaximumProbability(SubSkillType.REPAIR_SUPER_REPAIR) < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + REPAIR + ".SuperRepair." + CHANCE_MAX + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getMaxBonusLevel(SubSkillType.REPAIR_SUPER_REPAIR) < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + REPAIR + ".SuperRepair." + MAX_BONUS_LEVEL + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /* SMELTING */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getMaxBonusLevel(SubSkillType.SMELTING_FUEL_EFFICIENCY) < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + SMELTING + "." + FUEL_EFFICIENCY + "." + MAX_BONUS_LEVEL + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getMaxBonusLevel(SubSkillType.SMELTING_SECOND_SMELT) < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + SMELTING + ".SecondSmelt." + MAX_BONUS_LEVEL + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getMaximumProbability(SubSkillType.SMELTING_SECOND_SMELT) < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + SMELTING + ".SecondSmelt." + CHANCE_MAX + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /* SWORDS */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getMaximumProbability(SubSkillType.SWORDS_RUPTURE) < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + SWORDS + "." + RUPTURE + "." + CHANCE_MAX + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getMaxBonusLevel(SubSkillType.SWORDS_RUPTURE) < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + SWORDS + "." + RUPTURE + "." + MAX_BONUS_LEVEL + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getRuptureMaxTicks() < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + SWORDS + "." + RUPTURE + "." + MAX_TICKS + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getRuptureMaxTicks() < getRuptureBaseTicks()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + SWORDS + "." + RUPTURE + "." + MAX_TICKS + " should be at least Skills.Swords.Rupture." + BASE_TICKS + "!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getRuptureBaseTicks() < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + SWORDS + "." + RUPTURE + "." + BASE_TICKS + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getMaximumProbability(SubSkillType.SWORDS_COUNTER_ATTACK) < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + SWORDS + "." + COUNTER_ATTACK + "." + CHANCE_MAX + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getMaxBonusLevel(SubSkillType.SWORDS_COUNTER_ATTACK) < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + SWORDS + "." + COUNTER_ATTACK + "." + MAX_BONUS_LEVEL + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getCounterAttackModifier() < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + SWORDS + "." + COUNTER_ATTACK + "." + DAMAGE_MODIFIER + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getSerratedStrikesModifier() < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + SWORDS + "." + SERRATED_STRIKES + "." + DAMAGE_MODIFIER + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /* TAMING */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getMaximumProbability(SubSkillType.TAMING_GORE) < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + TAMING + "." + GORE + "." + CHANCE_MAX + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getMaxBonusLevel(SubSkillType.TAMING_GORE) < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + TAMING + "." + GORE + "." + MAX_BONUS_LEVEL + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getGoreModifier() < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + TAMING + "." + GORE + "." + MODIFIER + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getFastFoodChance() < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + TAMING + "." + FAST_FOOD + "." + CHANCE + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getThickFurModifier() < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + TAMING + "." + THICK_FUR + "." + MODIFIER + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getShockProofModifier() < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + TAMING + "." + SHOCK_PROOF + "." + MODIFIER + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getSharpenedClawsBonus() < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + TAMING + "." + SHARPENED_CLAWS + "." + BONUS + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getMaxHorseJumpStrength() < 0 || getMaxHorseJumpStrength() > 2) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + TAMING + "." + CALL_OF_THE_WILD + "." + MAX_HORSE_JUMP_STRENGTH + " should be between 0 and 2!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /* UNARMED */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getMaximumProbability(SubSkillType.UNARMED_DISARM) < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + UNARMED + "." + DISARM + "." + CHANCE_MAX + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getMaxBonusLevel(SubSkillType.UNARMED_DISARM) < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + UNARMED + "." + DISARM + "." + MAX_BONUS_LEVEL + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getMaximumProbability(SubSkillType.UNARMED_ARROW_DEFLECT) < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + UNARMED + "." + ARROW_DEFLECT + "." + CHANCE_MAX + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getMaxBonusLevel(SubSkillType.UNARMED_ARROW_DEFLECT) < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + UNARMED + "." + ARROW_DEFLECT + "." + MAX_BONUS_LEVEL + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getMaximumProbability(SubSkillType.UNARMED_IRON_GRIP) < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + UNARMED + "." + IRON_GRIP + "." + CHANCE_MAX + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getMaxBonusLevel(SubSkillType.UNARMED_IRON_GRIP) < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + UNARMED + "." + IRON_GRIP + "." + MAX_BONUS_LEVEL + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /* WOODCUTTING */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /*if (getLeafBlowUnlockLevel() < 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add("Skills.Woodcutting.LeafBlower.UnlockLevel should be at least 0!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        }*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getMaximumProbability(SubSkillType.WOODCUTTING_HARVEST_LUMBER) < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + WOODCUTTING + "." + HARVEST_LUMBER + "." + CHANCE_MAX + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (getMaxBonusLevel(SubSkillType.WOODCUTTING_HARVEST_LUMBER) < 1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            reason.add(SKILLS + "." + WOODCUTTING + "." + HARVEST_LUMBER + "." + MAX_BONUS_LEVEL + " should be at least 1!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return reason; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -616,40 +303,6 @@ public class AdvancedConfig extends ConfigValidated { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return getDoubleValue(SKILLS, ARCHERY, FORCE_MULTIPLIER); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    /* AXES */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public double getAxeMasteryRankDamageMultiplier() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return getDoubleValue(SKILLS, AXES, AXE_MASTERY, RANK_DAMAGE_MULTIPLIER); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public double getCriticalStrikesPVPModifier() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return getDoubleValue(SKILLS, AXES, CRITICAL_STRIKES, PVP_MODIFIER); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public double getCriticalStrikesPVEModifier() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return getDoubleValue(SKILLS, AXES, CRITICAL_STRIKES, PVE_MODIFIER); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public double getGreaterImpactChance() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return getDoubleValue(SKILLS, AXES, GREATER_IMPACT, CHANCE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public double getGreaterImpactModifier() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return getDoubleValue(SKILLS, AXES, GREATER_IMPACT, KNOCKBACK_MODIFIER); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public double getGreaterImpactBonusDamage() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return getDoubleValue(SKILLS, AXES, GREATER_IMPACT, BONUS_DAMAGE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public double getArmorImpactMaxDurabilityDamage() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return getDoubleValue(SKILLS, AXES, ARMOR_IMPACT, MAX_PERCENTAGE_DURABILITY_DAMAGE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public double getSkullSplitterModifier() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return getDoubleValue(SKILLS, AXES, SKULL_SPLITTER, DAMAGE_MODIFIER); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /* EXCAVATION */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     //Nothing to configure, everything is already configurable in config.yml 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 |