2
0

AxesCommand.java 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. package com.gmail.nossr50.commands.skills;
  2. import org.bukkit.ChatColor;
  3. import com.gmail.nossr50.commands.SkillCommand;
  4. import com.gmail.nossr50.config.AdvancedConfig;
  5. import com.gmail.nossr50.datatypes.SkillType;
  6. import com.gmail.nossr50.locale.LocaleLoader;
  7. import com.gmail.nossr50.util.Misc;
  8. import com.gmail.nossr50.util.Permissions;
  9. public class AxesCommand extends SkillCommand {
  10. AdvancedConfig advancedConfig = AdvancedConfig.getInstance();
  11. private String critChance;
  12. private String critChanceLucky;
  13. private String bonusDamage;
  14. private String impactDamage;
  15. private String greaterImpactDamage;
  16. private String skullSplitterLength;
  17. private String skullSplitterLengthEndurance;
  18. private int bonusDamageAxesBonusMax = advancedConfig.getBonusDamageAxesBonusMax();
  19. private int bonusDamageAxesMaxBonusLevel = advancedConfig.getBonusDamageAxesMaxBonusLevel();
  20. private double critMaxChance = advancedConfig.getAxesCriticalChance();
  21. private int critMaxBonusLevel = advancedConfig.getAxesCriticalMaxBonusLevel();
  22. private int greaterImpactIncreaseLevel = advancedConfig.getArmorImpactIncreaseLevel();
  23. private double greaterImpactBonusDamage = advancedConfig.getGreaterImpactBonusDamage();
  24. private int abilityLengthIncreaseLevel = advancedConfig.getAbilityLength();
  25. private boolean canSkullSplitter;
  26. private boolean canCritical;
  27. private boolean canBonusDamage;
  28. private boolean canImpact;
  29. private boolean canGreaterImpact;
  30. private boolean lucky;
  31. private boolean endurance;
  32. public AxesCommand() {
  33. super(SkillType.AXES);
  34. }
  35. @Override
  36. protected void dataCalculations() {
  37. float critChanceF;
  38. int skillCheck = Misc.skillCheck((int)skillValue, critMaxBonusLevel);
  39. //Armor Impact
  40. impactDamage = String.valueOf(1 + ((double) skillValue / (double) greaterImpactIncreaseLevel));
  41. //Skull Splitter
  42. int length = 2 + (int) ((double) skillValue / (double) abilityLengthIncreaseLevel);
  43. skullSplitterLength = String.valueOf(length);
  44. if (Permissions.activationTwelve(player)) {
  45. length = length + 12;
  46. }
  47. else if (Permissions.activationEight(player)) {
  48. length = length + 8;
  49. }
  50. else if (Permissions.activationFour(player)) {
  51. length = length + 4;
  52. }
  53. int maxLength = SkillType.AXES.getAbility().getMaxTicks();
  54. if (maxLength != 0 && length > maxLength) {
  55. length = maxLength;
  56. }
  57. skullSplitterLengthEndurance = String.valueOf(length);
  58. //Greater Impact
  59. greaterImpactDamage = String.valueOf(greaterImpactBonusDamage);
  60. //Critical Strikes
  61. if (skillValue >= critMaxBonusLevel) critChanceF = (float) critMaxChance;
  62. else critChanceF = (float) ((critMaxChance / critMaxBonusLevel) * skillCheck);
  63. critChance = percent.format(critChanceF / 100D);
  64. if (critChanceF * 1.3333D >= 100D) critChanceLucky = percent.format(1D);
  65. else critChanceLucky = percent.format(critChanceF * 1.3333D / 100D);
  66. //Axe Mastery
  67. if (skillValue >= bonusDamageAxesMaxBonusLevel) bonusDamage = String.valueOf(bonusDamageAxesBonusMax);
  68. else bonusDamage = String.valueOf(skillValue / ((double) bonusDamageAxesMaxBonusLevel / (double) bonusDamageAxesBonusMax));
  69. }
  70. @Override
  71. protected void permissionsCheck() {
  72. canSkullSplitter = Permissions.skullSplitter(player);
  73. canCritical = Permissions.criticalHit(player);
  74. canBonusDamage = Permissions.axeBonus(player);
  75. canImpact = Permissions.impact(player);
  76. canGreaterImpact = Permissions.greaterImpact(player);
  77. lucky = Permissions.luckyAxes(player);
  78. endurance = Permissions.activationTwelve(player) || Permissions.activationEight(player) || Permissions.activationFour(player);
  79. }
  80. @Override
  81. protected boolean effectsHeaderPermissions() {
  82. return canSkullSplitter || canCritical || canBonusDamage || canImpact || canGreaterImpact;
  83. }
  84. @Override
  85. protected void effectsDisplay() {
  86. if (lucky) {
  87. String perkPrefix = ChatColor.RED + "[mcMMO Perks] ";
  88. player.sendMessage(perkPrefix + LocaleLoader.getString("Effects.Template", new Object[] { LocaleLoader.getString("Perks.lucky.name"), LocaleLoader.getString("Perks.lucky.desc", new Object[] { "Axes" }) }));
  89. }
  90. if (canSkullSplitter) {
  91. player.sendMessage(LocaleLoader.getString("Effects.Template", new Object[] { LocaleLoader.getString("Axes.Effect.0"), LocaleLoader.getString("Axes.Effect.1") }));
  92. }
  93. if (canCritical) {
  94. player.sendMessage(LocaleLoader.getString("Effects.Template", new Object[] { LocaleLoader.getString("Axes.Effect.2"), LocaleLoader.getString("Axes.Effect.3") }));
  95. }
  96. if (canBonusDamage) {
  97. player.sendMessage(LocaleLoader.getString("Effects.Template", new Object[] { LocaleLoader.getString("Axes.Effect.4"), LocaleLoader.getString("Axes.Effect.5") }));
  98. }
  99. if (canImpact) {
  100. player.sendMessage(LocaleLoader.getString("Effects.Template", new Object[] { LocaleLoader.getString("Axes.Effect.6"), LocaleLoader.getString("Axes.Effect.7") }));
  101. }
  102. if (canGreaterImpact) {
  103. player.sendMessage(LocaleLoader.getString("Effects.Template", new Object[] { LocaleLoader.getString("Axes.Effect.8"), LocaleLoader.getString("Axes.Effect.9") }));
  104. }
  105. }
  106. @Override
  107. protected boolean statsHeaderPermissions() {
  108. return canSkullSplitter || canCritical || canBonusDamage || canImpact || canGreaterImpact;
  109. }
  110. @Override
  111. protected void statsDisplay() {
  112. if (canBonusDamage) {
  113. player.sendMessage(LocaleLoader.getString("Ability.Generic.Template", new Object[] { LocaleLoader.getString("Axes.Ability.Bonus.0"), LocaleLoader.getString("Axes.Ability.Bonus.1", new Object[] {bonusDamage}) }));
  114. }
  115. if (canImpact) {
  116. player.sendMessage(LocaleLoader.getString("Ability.Generic.Template", new Object[] { LocaleLoader.getString("Axes.Ability.Bonus.2"), LocaleLoader.getString("Axes.Ability.Bonus.3", new Object[] {impactDamage}) }));
  117. }
  118. if (canGreaterImpact) {
  119. player.sendMessage(LocaleLoader.getString("Ability.Generic.Template", new Object[] { LocaleLoader.getString("Axes.Ability.Bonus.4"), LocaleLoader.getString("Axes.Ability.Bonus.5", new Object[] {greaterImpactDamage}) }));
  120. }
  121. if (canCritical) {
  122. if (lucky)
  123. player.sendMessage(LocaleLoader.getString("Axes.Combat.CritChance", new Object[] { critChance }) + LocaleLoader.getString("Perks.lucky.bonus", new Object[] { critChanceLucky }));
  124. else
  125. player.sendMessage(LocaleLoader.getString("Axes.Combat.CritChance", new Object[] { critChance }));
  126. }
  127. if (canSkullSplitter) {
  128. if (endurance)
  129. player.sendMessage(LocaleLoader.getString("Axes.Combat.SS.Length", new Object[] { skullSplitterLength }) + LocaleLoader.getString("Perks.activationtime.bonus", new Object[] { skullSplitterLengthEndurance }));
  130. else
  131. player.sendMessage(LocaleLoader.getString("Axes.Combat.SS.Length", new Object[] { skullSplitterLength }));
  132. }
  133. }
  134. }