AdvancedConfig.java 45 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981
  1. package com.gmail.nossr50.config;
  2. import com.gmail.nossr50.datatypes.interactions.NotificationType;
  3. import com.gmail.nossr50.datatypes.skills.SubSkillType;
  4. import com.gmail.nossr50.datatypes.skills.subskills.AbstractSubSkill;
  5. import net.md_5.bungee.api.ChatColor;
  6. import java.util.ArrayList;
  7. import java.util.List;
  8. public class AdvancedConfig extends AutoUpdateConfigLoader {
  9. private static AdvancedConfig instance;
  10. private AdvancedConfig() {
  11. super("advanced.yml");
  12. validate();
  13. }
  14. public static AdvancedConfig getInstance() {
  15. if (instance == null) {
  16. instance = new AdvancedConfig();
  17. }
  18. return instance;
  19. }
  20. @Override
  21. protected boolean validateKeys() {
  22. // Validate all the settings!
  23. List<String> reason = new ArrayList<String>();
  24. /* GENERAL */
  25. if (getAbilityLengthRetro() < 1) {
  26. reason.add("Skills.General.Ability.Length.RetroMode.IncreaseLevel should be at least 1!");
  27. }
  28. if (getAbilityLengthStandard() < 1) {
  29. reason.add("Skills.General.Ability.Length.Standard.IncreaseLevel should be at least 1!");
  30. }
  31. if (getEnchantBuff() < 1) {
  32. reason.add("Skills.General.Ability.EnchantBuff should be at least 1!");
  33. }
  34. /* ACROBATICS */
  35. if (getMaxChance(SubSkillType.ACROBATICS_DODGE) < 1) {
  36. reason.add("Skills.Acrobatics.Dodge.ChanceMax should be at least 1!");
  37. }
  38. if (getMaxBonusLevel(SubSkillType.ACROBATICS_DODGE) < 1) {
  39. reason.add("Skills.Acrobatics.Dodge.MaxBonusLevel should be at least 1!");
  40. }
  41. if (getDodgeDamageModifier() <= 1) {
  42. reason.add("Skills.Acrobatics.Dodge.DamageModifier should be greater than 1!");
  43. }
  44. if (getMaxChance(SubSkillType.ACROBATICS_ROLL) < 1) {
  45. reason.add("Skills.Acrobatics.Roll.ChanceMax should be at least 1!");
  46. }
  47. if (getMaxBonusLevel(SubSkillType.ACROBATICS_ROLL) < 1) {
  48. reason.add("Skills.Acrobatics.Roll.MaxBonusLevel should be at least 1!");
  49. }
  50. if (getRollDamageThreshold() < 0) {
  51. reason.add("Skills.Acrobatics.Roll.DamageThreshold should be at least 0!");
  52. }
  53. if (getGracefulRollDamageThreshold() < 0) {
  54. reason.add("Skills.Acrobatics.GracefulRoll.DamageThreshold should be at least 0!");
  55. }
  56. /* ALCHEMY */
  57. /*if (getCatalysisUnlockLevel() < 0) {
  58. reason.add("Skills.Alchemy.Catalysis.UnlockLevel should be at least 0!");
  59. }
  60. if (getCatalysisMaxBonusLevel() <= getCatalysisUnlockLevel()) {
  61. reason.add("Skills.Alchemy.Catalysis.MaxBonusLevel should be greater than Skills.Alchemy.Catalysis.UnlockLevel!");
  62. }*/
  63. if (getCatalysisMinSpeed() <= 0) {
  64. reason.add("Skills.Alchemy.Catalysis.MinSpeed must be greater than 0!");
  65. }
  66. if (getCatalysisMaxSpeed() < getCatalysisMinSpeed()) {
  67. reason.add("Skills.Alchemy.Catalysis.MaxSpeed should be at least Skills.Alchemy.Catalysis.MinSpeed!");
  68. }
  69. /*List<Alchemy.Tier> alchemyTierList = Arrays.asList(Alchemy.Tier.values());
  70. for (Alchemy.Tier tier : alchemyTierList) {
  71. if (getConcoctionsTierLevel(tier) < 0) {
  72. reason.add("Skills.Alchemy.Rank_Levels.Rank_" + rank + " should be at least 0!");
  73. }
  74. if (tier != Alchemy.Tier.fromNumerical(Alchemy.Tier.values().length)) {
  75. Alchemy.Tier nextTier = alchemyTierList.get(alchemyTierList.indexOf(tier) - 1);
  76. if (getConcoctionsTierLevel(tier) > getConcoctionsTierLevel(nextTier)) {
  77. reason.add("Skills.Alchemy.Rank_Levels.Rank_" + rank + " should be less than or equal to Skills.Alchemy.Rank_Levels.Rank_" + nextrank + "!");
  78. }
  79. }
  80. }*/
  81. /* ARCHERY */
  82. if (getSkillShotRankDamageMultiplier() <= 0) {
  83. reason.add("Skills.Archery.SkillShot.RankDamageMultiplier should be greater than 0!");
  84. }
  85. if (getMaxChance(SubSkillType.ARCHERY_DAZE) < 1) {
  86. reason.add("Skills.Archery.Daze.ChanceMax should be at least 1!");
  87. }
  88. if (getMaxBonusLevel(SubSkillType.ARCHERY_DAZE) < 1) {
  89. reason.add("Skills.Archery.Daze.MaxBonusLevel should be at least 1!");
  90. }
  91. if (getDazeBonusDamage() < 0) {
  92. reason.add("Skills.Archery.Daze.BonusDamage should be at least 0!");
  93. }
  94. if (getMaxChance(SubSkillType.ARCHERY_ARROW_RETRIEVAL) < 1) {
  95. reason.add("Skills.Archery.Retrieve.ChanceMax should be at least 1!");
  96. }
  97. if (getMaxBonusLevel(SubSkillType.ARCHERY_ARROW_RETRIEVAL) < 1) {
  98. reason.add("Skills.Archery.Retrieve.MaxBonusLevel should be at least 1!");
  99. }
  100. if (getForceMultiplier() < 0) {
  101. reason.add("Skills.Archery.ForceMultiplier should be at least 0!");
  102. }
  103. /* AXES */
  104. if(getAxeMasteryRankDamageMultiplier() < 0)
  105. {
  106. reason.add("Skills.Axes.AxeMastery.RankDamageMultiplier should be at least 0!");
  107. }
  108. if (getMaxChance(SubSkillType.AXES_CRITICAL_STRIKES) < 1) {
  109. reason.add("Skills.Axes.CriticalHit.ChanceMax should be at least 1!");
  110. }
  111. if (getMaxBonusLevel(SubSkillType.AXES_CRITICAL_STRIKES) < 1) {
  112. reason.add("Skills.Axes.CriticalHit.MaxBonusLevel should be at least 1!");
  113. }
  114. if (getCriticalStrikesPVPModifier() < 1) {
  115. reason.add("Skills.Axes.CriticalStrikes.PVP_Modifier should be at least 1!");
  116. }
  117. if (getCriticalStrikesPVPModifier() < 1) {
  118. reason.add("Skills.Axes.CriticalStrikes.PVE_Modifier should be at least 1!");
  119. }
  120. if (getGreaterImpactChance() < 1) {
  121. reason.add("Skills.Axes.GreaterImpact.Chance should be at least 1!");
  122. }
  123. if (getGreaterImpactModifier() < 1) {
  124. reason.add("Skills.Axes.GreaterImpact.KnockbackModifier should be at least 1!");
  125. }
  126. if (getGreaterImpactBonusDamage() < 1) {
  127. reason.add("Skills.Axes.GreaterImpact.BonusDamage should be at least 1!");
  128. }
  129. if (getArmorImpactIncreaseLevel() < 1) {
  130. reason.add("Skills.Axes.ArmorImpact.IncreaseLevel should be at least 1!");
  131. }
  132. if (getImpactChance() < 1) {
  133. reason.add("Skills.Axes.ArmorImpact.Chance should be at least 1!");
  134. }
  135. if (getArmorImpactMaxDurabilityDamage() < 1) {
  136. reason.add("Skills.Axes.ArmorImpact.MaxPercentageDurabilityDamage should be at least 1!");
  137. }
  138. if (getSkullSplitterModifier() < 1) {
  139. reason.add("Skills.Axes.SkullSplitter.DamageModifier should be at least 1!");
  140. }
  141. /* FISHING */
  142. /*List<Fishing.Tier> fishingTierList = Arrays.asList(Fishing.Tier.values());
  143. for (int rank : fishingTierList) {
  144. if (getFishingTierLevel(tier) < 0) {
  145. reason.add("Skills.Fishing.Rank_Levels.Rank_" + rank + " should be at least 0!");
  146. }
  147. if (getShakeChance(tier) < 0) {
  148. reason.add("Skills.Fishing.Shake_Chance.Rank_" + rank + " should be at least 0!");
  149. }
  150. if (getFishingVanillaXPModifier(tier) < 0) {
  151. reason.add("Skills.Fishing.VanillaXPMultiplier.Rank_" + rank + " should be at least 0!");
  152. }
  153. if (tier != Fishing.Tier.EIGHT) {
  154. Fishing.Tier nextTier = fishingTierList.get(fishingTierList.indexOf(tier) - 1);
  155. if (getFishingTierLevel(tier) > getFishingTierLevel(nextTier)) {
  156. reason.add("Skills.Fishing.Rank_Levels.Rank_" + rank + " should be less than or equal to Skills.Fishing.Rank_Levels.Rank_" + nextrank + "!");
  157. }
  158. if (getShakeChance(tier) > getShakeChance(nextTier)) {
  159. reason.add("Skills.Fishing.Shake_Chance.Rank_" + rank + " should be less than or equal to Skills.Fishing.Shake_Chance.Rank_" + nextrank + "!");
  160. }
  161. if (getFishingVanillaXPModifier(tier) > getFishingVanillaXPModifier(nextTier)) {
  162. reason.add("Skills.Fishing.VanillaXPMultiplier.Rank_" + rank + " should be less than or equal to Skills.Fishing.VanillaXPMultiplier.Rank_" + nextrank + "!");
  163. }
  164. }
  165. }*/
  166. if (getFishermanDietRankChange() < 1) {
  167. reason.add("Skills.Fishing.FishermansDiet.RankChange should be at least 1!");
  168. }
  169. /*if (getIceFishingUnlockLevel() < 0) {
  170. reason.add("Skills.Fishing.IceFishing.UnlockLevel should be at least 0!");
  171. }
  172. if (getMasterAnglerUnlockLevel() < 0) {
  173. reason.add("Skills.Fishing.MasterAngler.UnlockLevel should be at least 0!");
  174. }*/
  175. if (getMasterAnglerBoatModifier() < 1) {
  176. reason.add("Skills.Fishing.MasterAngler.BoatModifier should be at least 1!");
  177. }
  178. if (getMasterAnglerBiomeModifier() < 1) {
  179. reason.add("Skills.Fishing.MasterAngler.BiomeModifier should be at least 1!");
  180. }
  181. /* HERBALISM */
  182. if (getFarmerDietRankChange() < 1) {
  183. reason.add("Skills.Herbalism.FarmersDiet.RankChange should be at least 1!");
  184. }
  185. if (getGreenThumbStageChange() < 1) {
  186. reason.add("Skills.Herbalism.GreenThumb.StageChange should be at least 1!");
  187. }
  188. if (getMaxChance(SubSkillType.HERBALISM_GREEN_THUMB) < 1) {
  189. reason.add("Skills.Herbalism.GreenThumb.ChanceMax should be at least 1!");
  190. }
  191. if (getMaxBonusLevel(SubSkillType.HERBALISM_GREEN_THUMB) < 1) {
  192. reason.add("Skills.Herbalism.GreenThumb.MaxBonusLevel should be at least 1!");
  193. }
  194. if (getMaxChance(SubSkillType.HERBALISM_DOUBLE_DROPS) < 1) {
  195. reason.add("Skills.Herbalism.DoubleDrops.ChanceMax should be at least 1!");
  196. }
  197. if (getMaxBonusLevel(SubSkillType.HERBALISM_DOUBLE_DROPS) < 1) {
  198. reason.add("Skills.Herbalism.DoubleDrops.MaxBonusLevel should be at least 1!");
  199. }
  200. if (getMaxChance(SubSkillType.HERBALISM_HYLIAN_LUCK) < 1) {
  201. reason.add("Skills.Herbalism.HylianLuck.ChanceMax should be at least 1!");
  202. }
  203. if (getMaxBonusLevel(SubSkillType.HERBALISM_HYLIAN_LUCK) < 1) {
  204. reason.add("Skills.Herbalism.HylianLuck.MaxBonusLevel should be at least 1!");
  205. }
  206. if (getMaxChance(SubSkillType.HERBALISM_SHROOM_THUMB) < 1) {
  207. reason.add("Skills.Herbalism.ShroomThumb.ChanceMax should be at least 1!");
  208. }
  209. if (getMaxBonusLevel(SubSkillType.HERBALISM_SHROOM_THUMB) < 1) {
  210. reason.add("Skills.Herbalism.ShroomThumb.MaxBonusLevel should be at least 1!");
  211. }
  212. /* MINING */
  213. if (getMaxChance(SubSkillType.MINING_DOUBLE_DROPS) < 1) {
  214. reason.add("Skills.Mining.DoubleDrops.ChanceMax should be at least 1!");
  215. }
  216. if (getMaxBonusLevel(SubSkillType.MINING_DOUBLE_DROPS) < 1) {
  217. reason.add("Skills.Mining.DoubleDrops.MaxBonusLevel should be at least 1!");
  218. }
  219. /*List<BlastMining.Tier> blastMiningTierList = Arrays.asList(BlastMining.Tier.values());
  220. for (int rank : blastMiningTierList) {
  221. if (getBlastMiningRankLevel(tier) < 0) {
  222. reason.add("Skills.Mining.BlastMining.Rank_Levels.Rank_" + rank + " should be at least 0!");
  223. }
  224. if (getBlastDamageDecrease(tier) < 0) {
  225. reason.add("Skills.Mining.BlastMining.BlastDamageDecrease.Rank_" + rank + " should be at least 0!");
  226. }
  227. if (getOreBonus(tier) < 0) {
  228. reason.add("Skills.Mining.BlastMining.OreBonus.Rank_" + rank + " should be at least 0!");
  229. }
  230. if (getDebrisReduction(tier) < 0) {
  231. reason.add("Skills.Mining.BlastMining.DebrisReduction.Rank_" + rank + " should be at least 0!");
  232. }
  233. if (getDropMultiplier(tier) < 0) {
  234. reason.add("Skills.Mining.BlastMining.DropMultiplier.Rank_" + rank + " should be at least 0!");
  235. }
  236. if (getBlastRadiusModifier(tier) < 0) {
  237. reason.add("Skills.Mining.BlastMining.BlastRadiusModifier.Rank_" + rank + " should be at least 0!");
  238. }
  239. if (tier != BlastMining.Tier.EIGHT) {
  240. BlastMining.Tier nextTier = blastMiningTierList.get(blastMiningTierList.indexOf(tier) - 1);
  241. if (getBlastMiningRankLevel(tier) > getBlastMiningRankLevel(nextTier)) {
  242. reason.add("Skills.Mining.BlastMining.Rank_Levels.Rank_" + rank + " should be less than or equal to Skills.Mining.BlastMining.Rank_Levels.Rank_" + nextrank + "!");
  243. }
  244. if (getBlastDamageDecrease(tier) > getBlastDamageDecrease(nextTier)) {
  245. reason.add("Skills.Mining.BlastMining.BlastDamageDecrease.Rank_" + rank + " should be less than or equal to Skills.Mining.BlastMining.BlastDamageDecrease.Rank_" + nextrank + "!");
  246. }
  247. if (getOreBonus(tier) > getOreBonus(nextTier)) {
  248. reason.add("Skills.Mining.BlastMining.OreBonus.Rank_" + rank + " should be less than or equal to Skills.Mining.BlastMining.OreBonus.Rank_" + nextrank + "!");
  249. }
  250. if (getDebrisReduction(tier) > getDebrisReduction(nextTier)) {
  251. reason.add("Skills.Mining.BlastMining.DebrisReduction.Rank_" + rank + " should be less than or equal to Skills.Mining.BlastMining.DebrisReduction.Rank_" + nextrank + "!");
  252. }
  253. if (getDropMultiplier(tier) > getDropMultiplier(nextTier)) {
  254. reason.add("Skills.Mining.BlastMining.DropMultiplier.Rank_" + rank + " should be less than or equal to Skills.Mining.BlastMining.DropMultiplier.Rank_" + nextrank + "!");
  255. }
  256. if (getBlastRadiusModifier(tier) > getBlastRadiusModifier(nextTier)) {
  257. reason.add("Skills.Mining.BlastMining.BlastRadiusModifier.Rank_" + rank + " should be less than or equal to Skills.Mining.BlastMining.BlastRadiusModifier.Rank_" + nextrank + "!");
  258. }
  259. }
  260. }*/
  261. /* REPAIR */
  262. if (getRepairMasteryMaxBonus() < 1) {
  263. reason.add("Skills.Repair.RepairMastery.MaxBonusPercentage should be at least 1!");
  264. }
  265. if (getRepairMasteryMaxLevel() < 1) {
  266. reason.add("Skills.Repair.RepairMastery.MaxBonusLevel should be at least 1!");
  267. }
  268. if (getMaxChance(SubSkillType.REPAIR_SUPER_REPAIR) < 1) {
  269. reason.add("Skills.Repair.SuperRepair.ChanceMax should be at least 1!");
  270. }
  271. if (getMaxBonusLevel(SubSkillType.REPAIR_SUPER_REPAIR) < 1) {
  272. reason.add("Skills.Repair.SuperRepair.MaxBonusLevel should be at least 1!");
  273. }
  274. /*List<ArcaneForging.Tier> arcaneForgingTierList = Arrays.asList(ArcaneForging.Tier.values());
  275. for (ArcaneForging.Tier tier : arcaneForgingTierList) {
  276. if (getArcaneForgingRankLevel(tier) < 0) {
  277. reason.add("Skills.Repair.ArcaneForging.Rank_Levels.Rank_" + rank + " should be at least 0!");
  278. }
  279. if (getArcaneForgingDowngradeChance(tier) < 0 || getArcaneForgingDowngradeChance(tier) > 100) {
  280. reason.add("Skills.Repair.ArcaneForging.Downgrades.Chance.Rank_" + rank + " only accepts values from 0 to 100!");
  281. }
  282. if (getArcaneForgingKeepEnchantsChance(tier) < 0 || getArcaneForgingKeepEnchantsChance(tier) > 100) {
  283. reason.add("Skills.Repair.ArcaneForging.Keep_Enchants.Chance.Rank_" + rank + " only accepts values from 0 to 100!");
  284. }
  285. if (tier != ArcaneForging.Tier.EIGHT) {
  286. ArcaneForging.Tier nextTier = arcaneForgingTierList.get(arcaneForgingTierList.indexOf(tier) - 1);
  287. if (getArcaneForgingRankLevel(tier) > getArcaneForgingRankLevel(nextTier)) {
  288. reason.add("Skills.Repair.ArcaneForging.Rank_Levels.Rank_" + rank + " should be less than or equal to Skills.Repair.ArcaneForging.Rank_Levels.Rank_" + nextrank + "!");
  289. }
  290. if (getArcaneForgingDowngradeChance(nextTier) > getArcaneForgingDowngradeChance(tier)) {
  291. reason.add("Skills.Repair.ArcaneForging.Downgrades.Chance.Rank_" + nextrank + " should be less than or equal to Skills.Repair.ArcaneForging.Downgrades.Chance.Rank_" + rank + "!");
  292. }
  293. if (getArcaneForgingKeepEnchantsChance(tier) > getArcaneForgingKeepEnchantsChance(nextTier)) {
  294. reason.add("Skills.Repair.ArcaneForging.Keep_Enchants.Chance.Rank_" + rank + " should be less than or equal to Skills.Repair.ArcaneForging.Keep_Enchants.Chance.Rank_" + nextrank + "!");
  295. }
  296. }
  297. }*/
  298. /* SALVAGE */
  299. if (getSalvageMaxPercentage() < 1) {
  300. reason.add("Skills.Salvage.MaxPercentage should be at least 1!");
  301. }
  302. if (getSalvageMaxPercentageLevel() < 1) {
  303. reason.add("Skills.Salvage.MaxPercentageLevel should be at least 1!");
  304. }
  305. /*if (getAdvancedSalvageUnlockLevel() < 0) {
  306. reason.add("Skills.Salvage.AdvancedSalvage.UnlockLevel should be at least 0!");
  307. }*/
  308. /*List<Salvage.Tier> salvageTierList = Arrays.asList(Salvage.Tier.values());
  309. for (Salvage.Tier tier : salvageTierList) {
  310. if (getArcaneSalvageRankLevel(tier) < 0) {
  311. reason.add("Skills.Salvage.ArcaneSalvage.Rank_Levels.Rank_" + rank + " should be at least 0!");
  312. }
  313. if (getArcaneSalvageExtractFullEnchantsChance(tier) < 0 || getArcaneSalvageExtractFullEnchantsChance(tier) > 100) {
  314. reason.add("Skills.Salvage.ArcaneSalvage.ExtractFullEnchant.Rank_" + rank + " only accepts values from 0 to 100!");
  315. }
  316. if (getArcaneSalvageExtractPartialEnchantsChance(tier) < 0 || getArcaneSalvageExtractPartialEnchantsChance(tier) > 100) {
  317. reason.add("Skills.Salvage.ArcaneSalvage.ExtractPartialEnchant.Rank_" + rank + " only accepts values from 0 to 100!");
  318. }
  319. if (tier != Salvage.Tier.EIGHT) {
  320. Salvage.Tier nextTier = salvageTierList.get(salvageTierList.indexOf(tier) - 1);
  321. if (getArcaneSalvageRankLevel(tier) > getArcaneSalvageRankLevel(nextTier)) {
  322. reason.add("Skills.Salvage.ArcaneSalvage.Rank_Levels.Rank_" + rank + " should be less than or equal to Skills.Salvage.ArcaneSalvage.Rank_Levels.Rank_" + nextrank + "!");
  323. }
  324. if (getArcaneSalvageExtractFullEnchantsChance(tier) > getArcaneSalvageExtractFullEnchantsChance(nextTier)) {
  325. reason.add("Skills.Salvage.ArcaneSalvage.ExtractFullEnchant.Rank_" + rank + " should be less than or equal to Skills.Salvage.ArcaneSalvage.ExtractFullEnchant.Rank_" + nextrank + "!");
  326. }
  327. if (getArcaneSalvageExtractPartialEnchantsChance(tier) > getArcaneSalvageExtractPartialEnchantsChance(nextTier)) {
  328. reason.add("Skills.Salvage.ArcaneSalvage.ExtractPartialEnchant.Rank_" + rank + " should be less than or equal to Skills.Salvage.ArcaneSalvage.ExtractPartialEnchant.Rank_" + nextrank + "!");
  329. }
  330. }
  331. }*/
  332. /* SMELTING */
  333. if (getBurnModifierMaxLevel() < 1) {
  334. reason.add("Skills.Smelting.FuelEfficiency.MaxBonusLevel should be at least 1!");
  335. }
  336. if (getBurnTimeMultiplier() < 1) {
  337. reason.add("Skills.Smelting.FuelEfficiency.Multiplier should be at least 1!");
  338. }
  339. if (getMaxBonusLevel(SubSkillType.SMELTING_SECOND_SMELT) < 1) {
  340. reason.add("Skills.Smelting.SecondSmelt.MaxBonusLevel should be at least 1!");
  341. }
  342. if (getMaxChance(SubSkillType.SMELTING_SECOND_SMELT) < 1) {
  343. reason.add("Skills.Smelting.SecondSmelt.ChanceMax should be at least 1!");
  344. }
  345. /*if (getFluxMiningUnlockLevel() < 0) {
  346. reason.add("Skills.Smelting.FluxMining.UnlockLevel should be at least 0!");
  347. }*/
  348. if (getFluxMiningChance() < 1) {
  349. reason.add("Skills.Smelting.FluxMining.Chance should be at least 1!");
  350. }
  351. /*List<Smelting.Tier> smeltingTierList = Arrays.asList(Smelting.Tier.values());
  352. for (int rank : smeltingTierList) {
  353. if (getSmeltingRankLevel(tier) < 0) {
  354. reason.add("Skills.Smelting.Rank_Levels.Rank_" + rank + " should be at least 0!");
  355. }
  356. if (getSmeltingVanillaXPBoostMultiplier(tier) < 1) {
  357. reason.add("Skills.Smelting.VanillaXPMultiplier.Rank_" + rank + " should be at least 1!");
  358. }
  359. if (tier != Smelting.Tier.EIGHT) {
  360. Smelting.Tier nextTier = smeltingTierList.get(smeltingTierList.indexOf(tier) - 1);
  361. if (getSmeltingRankLevel(tier) > getSmeltingRankLevel(nextTier)) {
  362. reason.add("Skills.Smelting.Rank_Levels.Rank_" + rank + " should be less than or equal to Skills.Smelting.Rank_Levels.Rank_" + nextrank + "!");
  363. }
  364. if (getSmeltingVanillaXPBoostMultiplier(tier) > getSmeltingVanillaXPBoostMultiplier(nextTier)) {
  365. reason.add("Skills.Smelting.VanillaXPMultiplier.Rank_" + rank + " should be less than or equal to Skills.Smelting.VanillaXPMultiplier.Rank_" + nextrank + "!");
  366. }
  367. }
  368. }*/
  369. /* SWORDS */
  370. if (getMaxChance(SubSkillType.SWORDS_BLEED) < 1) {
  371. reason.add("Skills.Swords.Bleed.ChanceMax should be at least 1!");
  372. }
  373. if (getMaxBonusLevel(SubSkillType.SWORDS_BLEED) < 1) {
  374. reason.add("Skills.Swords.Bleed.MaxBonusLevel should be at least 1!");
  375. }
  376. if (getBleedMaxTicks() < 1) {
  377. reason.add("Skills.Swords.Bleed.MaxTicks should be at least 1!");
  378. }
  379. if (getBleedMaxTicks() < getBleedBaseTicks()) {
  380. reason.add("Skills.Swords.Bleed.MaxTicks should be at least Skills.Swords.Bleed.BaseTicks!");
  381. }
  382. if (getBleedBaseTicks() < 1) {
  383. reason.add("Skills.Swords.Bleed.BaseTicks should be at least 1!");
  384. }
  385. if (getMaxChance(SubSkillType.SWORDS_COUNTER_ATTACK) < 1) {
  386. reason.add("Skills.Swords.CounterAttack.ChanceMax should be at least 1!");
  387. }
  388. if (getMaxBonusLevel(SubSkillType.SWORDS_COUNTER_ATTACK) < 1) {
  389. reason.add("Skills.Swords.CounterAttack.MaxBonusLevel should be at least 1!");
  390. }
  391. if (getCounterModifier() < 1) {
  392. reason.add("Skills.Swords.CounterAttack.DamageModifier should be at least 1!");
  393. }
  394. if (getSerratedStrikesModifier() < 1) {
  395. reason.add("Skills.Swords.SerratedStrikes.DamageModifier should be at least 1!");
  396. }
  397. if (getSerratedStrikesTicks() < 1) {
  398. reason.add("Skills.Swords.SerratedStrikes.BleedTicks should be at least 1!");
  399. }
  400. /* TAMING */
  401. if (getMaxChance(SubSkillType.TAMING_GORE) < 1) {
  402. reason.add("Skills.Taming.Gore.ChanceMax should be at least 1!");
  403. }
  404. if (getMaxBonusLevel(SubSkillType.TAMING_GORE) < 1) {
  405. reason.add("Skills.Taming.Gore.MaxBonusLevel should be at least 1!");
  406. }
  407. if (getGoreBleedTicks() < 1) {
  408. reason.add("Skills.Taming.Gore.BleedTicks should be at least 1!");
  409. }
  410. if (getGoreModifier() < 1) {
  411. reason.add("Skills.Taming.Gore.Modifier should be at least 1!");
  412. }
  413. /*if (getFastFoodUnlock() < 0) {
  414. reason.add("Skills.Taming.FastFood.UnlockLevel should be at least 0!");
  415. }*/
  416. if (getFastFoodChance() < 1) {
  417. reason.add("Skills.Taming.FastFood.Chance should be at least 1!");
  418. }
  419. /*if (getEnviromentallyAwareUnlock() < 0) {
  420. reason.add("Skills.Taming.EnvironmentallyAware.UnlockLevel should be at least 0!");
  421. }*/
  422. /*if (getThickFurUnlock() < 0) {
  423. reason.add("Skills.Taming.ThickFur.UnlockLevel should be at least 0!");
  424. }*/
  425. if (getThickFurModifier() < 1) {
  426. reason.add("Skills.Taming.ThickFur.Modifier should be at least 1!");
  427. }
  428. /*if (getHolyHoundUnlock() < 0) {
  429. reason.add("Skills.Taming.HolyHound.UnlockLevel should be at least 0!");
  430. }
  431. if (getShockProofUnlock() < 0) {
  432. reason.add("Skills.Taming.ShockProof.UnlockLevel should be at least 0!");
  433. }*/
  434. if (getShockProofModifier() < 1) {
  435. reason.add("Skills.Taming.ShockProof.Modifier should be at least 1!");
  436. }
  437. /*if (getSharpenedClawsUnlock() < 0) {
  438. reason.add("Skills.Taming.SharpenedClaws.UnlockLevel should be at least 0!");
  439. }*/
  440. if (getSharpenedClawsBonus() < 1) {
  441. reason.add("Skills.Taming.SharpenedClaws.Bonus should be at least 1!");
  442. }
  443. if (getMaxHorseJumpStrength() < 0 || getMaxHorseJumpStrength() > 2) {
  444. reason.add("Skills.Taming.CallOfTheWild.MaxHorseJumpStrength should be between 0 and 2!");
  445. }
  446. /* UNARMED */
  447. if (getMaxChance(SubSkillType.UNARMED_DISARM) < 1) {
  448. reason.add("Skills.Unarmed.Disarm.ChanceMax should be at least 1!");
  449. }
  450. if (getMaxBonusLevel(SubSkillType.UNARMED_DISARM) < 1) {
  451. reason.add("Skills.Unarmed.Disarm.MaxBonusLevel should be at least 1!");
  452. }
  453. if (getMaxChance(SubSkillType.UNARMED_ARROW_DEFLECT) < 1) {
  454. reason.add("Skills.Unarmed.ArrowDeflect.ChanceMax should be at least 1!");
  455. }
  456. if (getMaxBonusLevel(SubSkillType.UNARMED_ARROW_DEFLECT) < 1) {
  457. reason.add("Skills.Unarmed.ArrowDeflect.MaxBonusLevel should be at least 1!");
  458. }
  459. if (getMaxChance(SubSkillType.UNARMED_IRON_GRIP) < 1) {
  460. reason.add("Skills.Unarmed.IronGrip.ChanceMax should be at least 1!");
  461. }
  462. if (getMaxBonusLevel(SubSkillType.UNARMED_IRON_GRIP) < 1) {
  463. reason.add("Skills.Unarmed.IronGrip.MaxBonusLevel should be at least 1!");
  464. }
  465. if (getIronArmMinBonus() < 0) {
  466. reason.add("Skills.Unarmed.IronArmStyle.BonusMin should be at least 0!");
  467. }
  468. if (getIronArmMaxBonus() < 0) {
  469. reason.add("Skills.Unarmed.IronArmStyle.BonusMax should be at least 0!");
  470. }
  471. if (getIronArmMaxBonus() < getIronArmMinBonus()) {
  472. reason.add("Skills.Unarmed.IronArmStyle.BonusMax should be greater than or equal to Skills.Unarmed.IronArm.BonusMin!");
  473. }
  474. if (getIronArmIncreaseLevel() < 1) {
  475. reason.add("Skills.Unarmed.IronArmStyle.IncreaseLevel should be at least 1!");
  476. }
  477. /* WOODCUTTING */
  478. /*if (getLeafBlowUnlockLevel() < 0) {
  479. reason.add("Skills.Woodcutting.LeafBlower.UnlockLevel should be at least 0!");
  480. }*/
  481. if (getMaxChance(SubSkillType.WOODCUTTING_HARVEST_LUMBER) < 1) {
  482. reason.add("Skills.Woodcutting.HarvestLumber.ChanceMax should be at least 1!");
  483. }
  484. if (getMaxBonusLevel(SubSkillType.WOODCUTTING_HARVEST_LUMBER) < 1) {
  485. reason.add("Skills.Woodcutting.HarvestLumber.MaxBonusLevel should be at least 1!");
  486. }
  487. /* KRAKEN */
  488. if (getKrakenTriesBeforeRelease() < 1) {
  489. reason.add("Kraken.Tries_Before_Release should be at least 1!");
  490. }
  491. if (getKrakenHealth() < 1) {
  492. reason.add("Kraken.Health should be at least 1!");
  493. }
  494. if (getKrakenAttackInterval() < 1) {
  495. reason.add("Kraken.Attack_Interval_Seconds should be at least 1!");
  496. }
  497. if (getKrakenAttackDamage() < 1) {
  498. reason.add("Kraken.Attack_Damage should be at least 1!");
  499. }
  500. return noErrorsInConfig(reason);
  501. }
  502. @Override
  503. protected void loadKeys() {}
  504. /* GENERAL */
  505. public int getStartingLevel() { return config.getInt("Skills.General.StartingLevel", 1); }
  506. public int getAbilityLengthCapStandard() { return config.getInt("Skills.General.Ability.Length.Standard.Cap", 50); }
  507. public int getAbilityLengthCapRetro() { return config.getInt("Skills.General.Ability.Length.RetroMode.Cap", 500); }
  508. public int getAbilityLengthStandard() { return config.getInt("Skills.General.Ability.Length.Standard.IncreaseLevel", 5); }
  509. public int getAbilityLengthRetro() { return config.getInt("Skills.General.Ability.Length.RetroMode.IncreaseLevel", 50); }
  510. public int getEnchantBuff() { return config.getInt("Skills.General.Ability.EnchantBuff", 5); }
  511. public int getMaxBonusLevel(SubSkillType subSkillType) { return config.getInt(subSkillType.getAdvConfigAddress() + ".MaxBonusLevel"); }
  512. public double getMaxChance(SubSkillType subSkillType) { return config.getDouble(subSkillType.getAdvConfigAddress() + ".ChanceMax", 100.0D);}
  513. public int getMaxBonusLevel(AbstractSubSkill abstractSubSkill) {
  514. return config.getInt("Skills."+abstractSubSkill.getPrimaryKeyName()+"."+abstractSubSkill.getConfigKeyName()+".MaxBonusLevel");
  515. }
  516. public double getMaxChance(AbstractSubSkill abstractSubSkill)
  517. {
  518. return config.getDouble("Skills."+abstractSubSkill.getPrimaryKeyName()+"."+abstractSubSkill.getConfigKeyName()+".ChanceMax", 100.0D);
  519. }
  520. /* Notification Settings */
  521. public boolean doesNotificationUseActionBar(NotificationType notificationType)
  522. {
  523. return config.getBoolean("Feedback.ActionBarNotifications."+notificationType.toString()+".Enabled", true);
  524. }
  525. public boolean doesNotificationSendCopyToChat(NotificationType notificationType)
  526. {
  527. return config.getBoolean("Feedback.ActionBarNotifications."+notificationType.toString()+".SendCopyOfMessageToChat", false);
  528. }
  529. public boolean useTitlesForXPEvent()
  530. {
  531. return config.getBoolean("Feedback.Events.XP.SendTitles", true);
  532. }
  533. /*
  534. * JSON Style Settings
  535. */
  536. /*public ChatColor getJSONStatHoverElementColor(StatType statType, boolean isPrefix)
  537. {
  538. String keyAddress = isPrefix ? "Prefix" : "Value";
  539. String keyLocation = "Style.JSON.Hover.Details." + StringUtils.getCapitalized(statType.toString()) +"."+keyAddress+".Color";
  540. return getChatColorFromKey(keyLocation);
  541. }*/
  542. /**
  543. * Used to color our details header in our JSON Hover Object tooltips
  544. * @return the ChatColor for this element
  545. */
  546. public ChatColor getJSONStatHoverDetailsColor()
  547. {
  548. String keyLocation = "Style.JSON.Hover.Details.Header.Color";
  549. return getChatColorFromKey(keyLocation);
  550. }
  551. public boolean isJSONDetailsHeaderBold()
  552. {
  553. return config.getBoolean("Style.JSON.Hover.Details.Header.Bold");
  554. }
  555. public boolean isJSONDetailsHeaderItalic()
  556. {
  557. return config.getBoolean("Style.JSON.Hover.Details.Header.Italics");
  558. }
  559. public boolean isJSONDetailsHeaderUnderlined()
  560. {
  561. return config.getBoolean("Style.JSON.Hover.Details.Header.Underlined");
  562. }
  563. public ChatColor getJSONStatHoverDescriptionColor()
  564. {
  565. String keyLocation = "Style.JSON.Hover.Details.Description.Color";
  566. return getChatColorFromKey(keyLocation);
  567. }
  568. public boolean isJSONDetailsDescriptionBold()
  569. {
  570. return config.getBoolean("Style.JSON.Hover.Details.Description.Bold");
  571. }
  572. public boolean isJSONDetailsDescriptionItalic()
  573. {
  574. return config.getBoolean("Style.JSON.Hover.Details.Description.Italics");
  575. }
  576. public boolean isJSONDetailsDescriptionUnderlined()
  577. {
  578. return config.getBoolean("Style.JSON.Hover.Details.Description.Underlined");
  579. }
  580. public ChatColor getJSONActionBarColor(NotificationType notificationType)
  581. {
  582. return getChatColor(config.getString("Style.JSON.Notification."+notificationType.toString()+".Color"));
  583. }
  584. private ChatColor getChatColorFromKey(String keyLocation) {
  585. String colorName = config.getString(keyLocation);
  586. return getChatColor(colorName);
  587. }
  588. private ChatColor getChatColor(String configColor) {
  589. for (ChatColor chatColor : ChatColor.values()) {
  590. if (configColor.equalsIgnoreCase(chatColor.getName()))
  591. return chatColor;
  592. }
  593. //Invalid Color
  594. System.out.println("[mcMMO] " + configColor + " is an invalid color value");
  595. return ChatColor.WHITE;
  596. }
  597. /*public boolean isJSONStatHoverElementBold(StatType statType, boolean isPrefix)
  598. {
  599. String keyAddress = isPrefix ? "Prefix" : "Value";
  600. String keyLocation = "Style.JSON.Hover.Details." + StringUtils.getCapitalized(statType.toString()) +"."+keyAddress+".Bold";
  601. return config.getBoolean(keyLocation);
  602. }
  603. public boolean isJSONStatHoverElementItalic(StatType statType, boolean isPrefix)
  604. {
  605. String keyAddress = isPrefix ? "Prefix" : "Value";
  606. String keyLocation = "Style.JSON.Hover.Details." + StringUtils.getCapitalized(statType.toString()) +"."+keyAddress+".Italics";
  607. return config.getBoolean(keyLocation);
  608. }
  609. public boolean isJSONStatHoverElementUnderlined(StatType statType, boolean isPrefix)
  610. {
  611. String keyAddress = isPrefix ? "Prefix" : "Value";
  612. String keyLocation = "Style.JSON.Hover.Details." + StringUtils.getCapitalized(statType.toString()) +"."+keyAddress+".Underline";
  613. return config.getBoolean(keyLocation);
  614. }*/
  615. /**
  616. * Some SubSkills have the ability to retain classic functionality
  617. * @param subSkillType SubSkillType with classic functionality
  618. * @return true if the subskill is in classic mode
  619. */
  620. public boolean isSubSkillClassic(SubSkillType subSkillType)
  621. {
  622. return config.getBoolean(subSkillType.getAdvConfigAddress()+".Classic");
  623. }
  624. /* ACROBATICS */
  625. public double getDodgeDamageModifier() { return config.getDouble("Skills.Acrobatics.Dodge.DamageModifier", 2.0D); }
  626. public double getRollDamageThreshold() { return config.getDouble("Skills.Acrobatics.Roll.DamageThreshold", 7.0D); }
  627. public double getGracefulRollDamageThreshold() { return config.getDouble("Skills.Acrobatics.GracefulRoll.DamageThreshold", 14.0D); }
  628. /* ALCHEMY */
  629. /*public int getCatalysisUnlockLevel() { return config.getInt("Skills.Alchemy.Catalysis.UnlockLevel", 100); }*/
  630. public int getCatalysisMaxBonusLevel() { return config.getInt("Skills.Alchemy.Catalysis.MaxBonusLevel", 1000); }
  631. public double getCatalysisMinSpeed() { return config.getDouble("Skills.Alchemy.Catalysis.MinSpeed", 1.0D); }
  632. public double getCatalysisMaxSpeed() { return config.getDouble("Skills.Alchemy.Catalysis.MaxSpeed", 4.0D); }
  633. //public int getConcoctionsTierLevel(Alchemy.Tier tier) { return config.getInt("Skills.Alchemy.Rank_Levels.Rank_" + rank); }
  634. /* ARCHERY */
  635. public int getSkillShotIncreaseLevel() { return config.getInt("Skills.Archery.SkillShot.IncreaseLevel", 50); }
  636. public double getSkillShotRankDamageMultiplier() { return config.getDouble("Skills.Archery.SkillShot.RankDamageMultiplier", 10.0D); }
  637. public double getSkillShotDamageMax() { return config.getDouble("Skills.Archery.SkillShot.MaxDamage", 9.0D); }
  638. public double getDazeBonusDamage() { return config.getDouble("Skills.Archery.Daze.BonusDamage", 4.0D); }
  639. public double getForceMultiplier() { return config.getDouble("Skills.Archery.ForceMultiplier", 2.0D); }
  640. /* AXES */
  641. public double getAxeMasteryRankDamageMultiplier() { return config.getDouble("Skills.Axes.AxeMastery.RankDamageMultiplier", 1.0D); }
  642. public double getCriticalStrikesPVPModifier() { return config.getDouble("Skills.Axes.CriticalStrikes.PVP_Modifier", 1.5D); }
  643. public double getCriticalStrikesPVEModifier() { return config.getDouble("Skills.Axes.CriticalStrikes.PVE_Modifier", 2.0D); }
  644. public double getGreaterImpactChance() { return config.getDouble("Skills.Axes.GreaterImpact.Chance", 25.0D); }
  645. public double getGreaterImpactModifier() { return config.getDouble("Skills.Axes.GreaterImpact.KnockbackModifier", 1.5D); }
  646. public double getGreaterImpactBonusDamage() { return config.getDouble("Skills.Axes.GreaterImpact.BonusDamage", 2.0D); }
  647. public int getArmorImpactIncreaseLevel() { return config.getInt("Skills.Axes.ArmorImpact.IncreaseLevel", 50); }
  648. public double getImpactChance() { return config.getDouble("Skills.Axes.ArmorImpact.Chance", 25.0D); }
  649. public double getArmorImpactMaxDurabilityDamage() { return config.getDouble("Skills.Axes.ArmorImpact.MaxPercentageDurabilityDamage", 20.0D); }
  650. public double getSkullSplitterModifier() { return config.getDouble("Skills.Axes.SkullSplitter.DamageModifier", 2.0D); }
  651. /* EXCAVATION */
  652. //Nothing to configure, everything is already configurable in config.yml
  653. /* FISHING */
  654. //public int getFishingTierLevel(int rank) { return config.getInt("Skills.Fishing.Rank_Levels.Rank_" + rank); }
  655. public double getShakeChance(int rank) { return config.getDouble("Skills.Fishing.ShakeChance.Rank_" + rank); }
  656. public int getFishingVanillaXPModifier(int rank) { return config.getInt("Skills.Fishing.VanillaXPMultiplier.Rank_" + rank); }
  657. public int getFishermanDietRankChange() { return config.getInt("Skills.Fishing.FishermansDiet.RankChange", 200); }
  658. /*public int getIceFishingUnlockLevel() { return config.getInt("Skills.Fishing.IceFishing.UnlockLevel", 50); }
  659. public int getMasterAnglerUnlockLevel() {return config.getInt("Skills.Fishing.MasterAngler.UnlockLevel", 125); }*/
  660. public double getMasterAnglerBoatModifier() {return config.getDouble("Skills.Fishing.MasterAngler.BoatModifier", 2.0); }
  661. public double getMasterAnglerBiomeModifier() {return config.getDouble("Skills.Fishing.MasterAngler.BiomeModifier", 2.0); }
  662. /* HERBALISM */
  663. public int getFarmerDietRankChange() { return config.getInt("Skills.Herbalism.FarmersDiet.RankChange", 200); }
  664. public int getGreenThumbStageChange() { return config.getInt("Skills.Herbalism.GreenThumb.StageChange", 200); }
  665. /* MINING */
  666. public int getBlastMiningRankLevel(int rank) { return config.getInt("Skills.Mining.BlastMining.Rank_Levels.Rank_" + rank); }
  667. public double getBlastDamageDecrease(int rank) { return config.getDouble("Skills.Mining.BlastMining.BlastDamageDecrease.Rank_" + rank); }
  668. public double getOreBonus(int rank) { return config.getDouble("Skills.Mining.BlastMining.OreBonus.Rank_" + rank); }
  669. public double getDebrisReduction(int rank) { return config.getDouble("Skills.Mining.BlastMining.DebrisReduction.Rank_" + rank); }
  670. public int getDropMultiplier(int rank) { return config.getInt("Skills.Mining.BlastMining.DropMultiplier.Rank_" + rank); }
  671. public double getBlastRadiusModifier(int rank) { return config.getDouble("Skills.Mining.BlastMining.BlastRadiusModifier.Rank_" + rank); }
  672. /* REPAIR */
  673. public double getRepairMasteryMaxBonus() { return config.getDouble("Skills.Repair.RepairMastery.MaxBonusPercentage", 200.0D); }
  674. public int getRepairMasteryMaxLevel() { return config.getInt("Skills.Repair.RepairMastery.MaxBonusLevel", 1000); }
  675. /* Arcane Forging */
  676. public int getArcaneForgingRankLevel(int rank) { return config.getInt("Skills.Repair.ArcaneForging.Rank_Levels.Rank_" + rank); }
  677. public boolean getArcaneForgingEnchantLossEnabled() { return config.getBoolean("Skills.Repair.ArcaneForging.May_Lose_Enchants", true); }
  678. public double getArcaneForgingKeepEnchantsChance(int rank) { return config.getDouble("Skills.Repair.ArcaneForging.Keep_Enchants_Chance.Rank_" + rank); }
  679. public boolean getArcaneForgingDowngradeEnabled() { return config.getBoolean("Skills.Repair.ArcaneForging.Downgrades_Enabled", true); }
  680. public double getArcaneForgingDowngradeChance(int rank) { return config.getDouble("Skills.Repair.ArcaneForging.Downgrades_Chance.Rank_" + rank); }
  681. /* SALVAGE */
  682. public double getSalvageMaxPercentage() { return config.getDouble("Skills.Salvage.MaxPercentage", 100.0D); }
  683. public int getSalvageMaxPercentageLevel() { return config.getInt("Skills.Salvage.MaxPercentageLevel", 1000); }
  684. /*public int getAdvancedSalvageUnlockLevel() { return config.getInt("Skills.Salvage.AdvancedSalvage.UnlockLevel", 350); }*/
  685. public boolean getArcaneSalvageEnchantDowngradeEnabled() { return config.getBoolean("Skills.Salvage.ArcaneSalvage.EnchantDowngradeEnabled", true); }
  686. public boolean getArcaneSalvageEnchantLossEnabled() { return config.getBoolean("Skills.Salvage.ArcaneSalvage.EnchantLossEnabled", true); }
  687. //public int getArcaneSalvageRankLevel(int rank) { return config.getInt("Skills.Salvage.ArcaneSalvage.Rank_Levels.Rank_" + rank); }
  688. public double getArcaneSalvageExtractFullEnchantsChance(int rank) { return config.getDouble("Skills.Salvage.ArcaneSalvage.ExtractFullEnchant.Rank_" + rank); }
  689. public double getArcaneSalvageExtractPartialEnchantsChance(int rank) { return config.getDouble("Skills.Salvage.ArcaneSalvage.ExtractPartialEnchant.Rank_" + rank); }
  690. /* SMELTING */
  691. public int getBurnModifierMaxLevel() { return config.getInt("Skills.Smelting.FuelEfficiency.MaxBonusLevel", 1000); }
  692. public double getBurnTimeMultiplier() { return config.getDouble("Skills.Smelting.FuelEfficiency.Multiplier", 3.0D); }
  693. /*public int getFluxMiningUnlockLevel() { return config.getInt("Skills.Smelting.FluxMining.UnlockLevel", 250); }*/
  694. public double getFluxMiningChance() { return config.getDouble("Skills.Smelting.FluxMining.Chance", 33.0D); }
  695. public int getSmeltingRankLevel(int rank) { return config.getInt("Skills.Smelting.Rank_Levels.Rank_" + rank); }
  696. public int getSmeltingVanillaXPBoostMultiplier(int rank) { return config.getInt("Skills.Smelting.VanillaXPMultiplier.Rank_" + rank); }
  697. /* SWORDS */
  698. public double getBleedDamagePlayer() { return config.getDouble("Skills.Swords.Bleed.DamagePlayer", 1.0); }
  699. public double getBleedDamageMobs() { return config.getDouble("Skills.Swords.Bleed.DamageMobs", 2.0); }
  700. public int getBleedMaxTicks() { return config.getInt("Skills.Swords.Bleed.MaxTicks", 3); }
  701. public int getBleedBaseTicks() { return config.getInt("Skills.Swords.Bleed.BaseTicks", 2); }
  702. public double getCounterModifier() { return config.getDouble("Skills.Swords.CounterAttack.DamageModifier", 2.0D); }
  703. public double getSerratedStrikesModifier() { return config.getDouble("Skills.Swords.SerratedStrikes.DamageModifier", 4.0D); }
  704. public int getSerratedStrikesTicks() { return config.getInt("Skills.Swords.SerratedStrikes.BleedTicks", 5); }
  705. /* TAMING */
  706. public int getGoreBleedTicks() { return config.getInt("Skills.Taming.Gore.BleedTicks", 2); }
  707. public double getGoreModifier() { return config.getDouble("Skills.Taming.Gore.Modifier", 2.0D); }
  708. /*public int getFastFoodUnlock() { return config.getInt("Skills.Taming.FastFood.UnlockLevel", 50); }*/
  709. public double getFastFoodChance() { return config.getDouble("Skills.Taming.FastFood.Chance", 50.0D); }
  710. public int getEnviromentallyAwareUnlock() { return config.getInt("Skills.Taming.EnvironmentallyAware.UnlockLevel", 100); }
  711. /*public int getThickFurUnlock() { return config.getInt("Skills.Taming.ThickFur.UnlockLevel", 250); }*/
  712. public double getThickFurModifier() { return config.getDouble("Skills.Taming.ThickFur.Modifier", 2.0D); }
  713. /*public int getHolyHoundUnlock() {return config.getInt("Skills.Taming.HolyHound.UnlockLevel", 375); }*/
  714. /*public int getShockProofUnlock() { return config.getInt("Skills.Taming.ShockProof.UnlockLevel", 500); }*/
  715. public double getShockProofModifier() { return config.getDouble("Skills.Taming.ShockProof.Modifier", 6.0D); }
  716. /*public int getSharpenedClawsUnlock() { return config.getInt("Skills.Taming.SharpenedClaws.UnlockLevel", 750); }*/
  717. public double getSharpenedClawsBonus() { return config.getDouble("Skills.Taming.SharpenedClaws.Bonus", 2.0D); }
  718. public double getMinHorseJumpStrength() { return config.getDouble("Skills.Taming.CallOfTheWild.MinHorseJumpStrength", 0.7D); }
  719. public double getMaxHorseJumpStrength() { return config.getDouble("Skills.Taming.CallOfTheWild.MaxHorseJumpStrength", 2.0D); }
  720. /* UNARMED */
  721. public double getIronArmMinBonus() { return config.getDouble("Skills.Unarmed.IronArmStyle.BonusMin", 3.0D); }
  722. public double getIronArmMaxBonus() { return config.getDouble("Skills.Unarmed.IronArmStyle.BonusMax", 8.0D); }
  723. public int getIronArmIncreaseLevel() { return config.getInt("Skills.Unarmed.IronArmStyle.IncreaseLevel", 50); }
  724. public boolean getDisarmProtected() { return config.getBoolean("Skills.Unarmed.Disarm.AntiTheft", false); }
  725. /* WOODCUTTING */
  726. /*public int getLeafBlowUnlockLevel() { return config.getInt("Skills.Woodcutting.LeafBlower.UnlockLevel", 100); }*/
  727. /* KRAKEN STUFF */
  728. public boolean getKrakenEnabled() { return config.getBoolean("Kraken.Enabled", true); }
  729. public int getKrakenTriesBeforeRelease() { return config.getInt("Kraken.Tries_Before_Release", 50); }
  730. public double getKrakenHealth() { return config.getDouble("Kraken.Health", 50.0D); }
  731. public String getKrakenName() { return config.getString("Kraken.Name", "The Kraken"); }
  732. public int getKrakenAttackInterval() { return config.getInt("Kraken.Attack_Interval_Seconds", 1); }
  733. public double getKrakenAttackDamage() { return config.getDouble("Kraken.Attack_Damage", 1.0D); }
  734. public boolean getKrakenGlobalEffectsEnabled() { return config.getBoolean("Kraken.Global_Effects", false); }
  735. public boolean getKrakenEscapeAllowed() { return config.getBoolean("Kraken.Allow_Escaping", false); }
  736. public String getServerUnleashMessage() { return config.getString("Kraken.Unleashed_Message.Server", ""); }
  737. public String getPlayerUnleashMessage() { return config.getString("Kraken.Unleashed_Message.Player", ""); }
  738. public String getPlayerDefeatMessage() { return config.getString("Kraken.Defeated_Message.Killed", ""); }
  739. public String getPlayerEscapeMessage() { return config.getString("Kraken.Defeated_Message.Escape", ""); }
  740. }