AxesCommand.java 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. package com.gmail.nossr50.commands.skills;
  2. import java.text.DecimalFormat;
  3. import org.bukkit.ChatColor;
  4. import com.gmail.nossr50.commands.SkillCommand;
  5. import com.gmail.nossr50.config.AdvancedConfig;
  6. import com.gmail.nossr50.datatypes.SkillType;
  7. import com.gmail.nossr50.locale.LocaleLoader;
  8. import com.gmail.nossr50.util.Misc;
  9. import com.gmail.nossr50.util.Permissions;
  10. public class AxesCommand extends SkillCommand {
  11. AdvancedConfig advancedConfig = AdvancedConfig.getInstance();
  12. private String critChance;
  13. private String critChanceLucky;
  14. private String bonusDamage;
  15. private String impactDamage;
  16. private String greaterImpactDamage;
  17. private String skullSplitterLength;
  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. public AxesCommand() {
  32. super(SkillType.AXES);
  33. }
  34. @Override
  35. protected void dataCalculations() {
  36. DecimalFormat df = new DecimalFormat("0.0");
  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. skullSplitterLength = String.valueOf(2 + (int) ((double) skillValue / (double) abilityLengthIncreaseLevel));
  43. //Greater Impact
  44. greaterImpactDamage = String.valueOf(greaterImpactBonusDamage);
  45. //Critical Strikes
  46. if (skillValue >= critMaxBonusLevel) critChanceF = (float) critMaxChance;
  47. else critChanceF = (float) ((critMaxChance / critMaxBonusLevel) * skillCheck);
  48. critChance = df.format(critChanceF);
  49. if (critChanceF + critChanceF * 0.3333D >= 100D) critChanceLucky = df.format(100D);
  50. else critChanceLucky = df.format(critChanceF + critChanceF * 0.3333D);
  51. //Axe Mastery
  52. if (skillValue >= bonusDamageAxesMaxBonusLevel) bonusDamage = String.valueOf(bonusDamageAxesBonusMax);
  53. else bonusDamage = String.valueOf(skillValue / ((double) bonusDamageAxesMaxBonusLevel / (double) bonusDamageAxesBonusMax));
  54. }
  55. @Override
  56. protected void permissionsCheck() {
  57. canSkullSplitter = Permissions.skullSplitter(player);
  58. canCritical = Permissions.criticalHit(player);
  59. canBonusDamage = Permissions.axeBonus(player);
  60. canImpact = Permissions.impact(player);
  61. canGreaterImpact = Permissions.greaterImpact(player);
  62. lucky = Permissions.luckyAxes(player);
  63. }
  64. @Override
  65. protected boolean effectsHeaderPermissions() {
  66. return canSkullSplitter || canCritical || canBonusDamage || canImpact || canGreaterImpact;
  67. }
  68. @Override
  69. protected void effectsDisplay() {
  70. if (lucky) {
  71. String perkPrefix = ChatColor.RED + "[mcMMO Perks] ";
  72. player.sendMessage(perkPrefix + LocaleLoader.getString("Effects.Template", new Object[] { LocaleLoader.getString("Perks.lucky.name"), LocaleLoader.getString("Perks.lucky.desc", new Object[] { "Axes" }) }));
  73. }
  74. if (canSkullSplitter) {
  75. player.sendMessage(LocaleLoader.getString("Effects.Template", new Object[] { LocaleLoader.getString("Axes.Effect.0"), LocaleLoader.getString("Axes.Effect.1") }));
  76. }
  77. if (canCritical) {
  78. player.sendMessage(LocaleLoader.getString("Effects.Template", new Object[] { LocaleLoader.getString("Axes.Effect.2"), LocaleLoader.getString("Axes.Effect.3") }));
  79. }
  80. if (canBonusDamage) {
  81. player.sendMessage(LocaleLoader.getString("Effects.Template", new Object[] { LocaleLoader.getString("Axes.Effect.4"), LocaleLoader.getString("Axes.Effect.5") }));
  82. }
  83. if (canImpact) {
  84. player.sendMessage(LocaleLoader.getString("Effects.Template", new Object[] { LocaleLoader.getString("Axes.Effect.6"), LocaleLoader.getString("Axes.Effect.7") }));
  85. }
  86. if (canGreaterImpact) {
  87. player.sendMessage(LocaleLoader.getString("Effects.Template", new Object[] { LocaleLoader.getString("Axes.Effect.8"), LocaleLoader.getString("Axes.Effect.9") }));
  88. }
  89. }
  90. @Override
  91. protected boolean statsHeaderPermissions() {
  92. return canSkullSplitter || canCritical || canBonusDamage || canImpact || canGreaterImpact;
  93. }
  94. @Override
  95. protected void statsDisplay() {
  96. if (canBonusDamage) {
  97. player.sendMessage(LocaleLoader.getString("Ability.Generic.Template", new Object[] { LocaleLoader.getString("Axes.Ability.Bonus.0"), LocaleLoader.getString("Axes.Ability.Bonus.1", new Object[] {bonusDamage}) }));
  98. }
  99. if (canImpact) {
  100. player.sendMessage(LocaleLoader.getString("Ability.Generic.Template", new Object[] { LocaleLoader.getString("Axes.Ability.Bonus.2"), LocaleLoader.getString("Axes.Ability.Bonus.3", new Object[] {impactDamage}) }));
  101. }
  102. if (canGreaterImpact) {
  103. player.sendMessage(LocaleLoader.getString("Ability.Generic.Template", new Object[] { LocaleLoader.getString("Axes.Ability.Bonus.4"), LocaleLoader.getString("Axes.Ability.Bonus.5", new Object[] {greaterImpactDamage}) }));
  104. }
  105. if (canCritical) {
  106. if (lucky)
  107. player.sendMessage(LocaleLoader.getString("Axes.Combat.CritChance", new Object[] { critChance }) + LocaleLoader.getString("Perks.lucky.bonus", new Object[] { critChanceLucky }));
  108. else
  109. player.sendMessage(LocaleLoader.getString("Axes.Combat.CritChance", new Object[] { critChance }));
  110. }
  111. if (canSkullSplitter) {
  112. player.sendMessage(LocaleLoader.getString("Axes.Combat.SS.Length", new Object[] { skullSplitterLength }));
  113. }
  114. }
  115. }