MiningCommand.java 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. package com.gmail.nossr50.commands.skills;
  2. import java.text.DecimalFormat;
  3. import org.bukkit.command.Command;
  4. import org.bukkit.command.CommandExecutor;
  5. import org.bukkit.command.CommandSender;
  6. import org.bukkit.entity.Player;
  7. import com.gmail.nossr50.commands.CommandHelper;
  8. import com.gmail.nossr50.config.Config;
  9. import com.gmail.nossr50.datatypes.PlayerProfile;
  10. import com.gmail.nossr50.datatypes.SkillType;
  11. import com.gmail.nossr50.locale.LocaleLoader;
  12. import com.gmail.nossr50.util.Misc;
  13. import com.gmail.nossr50.util.Page;
  14. import com.gmail.nossr50.util.Permissions;
  15. import com.gmail.nossr50.util.Users;
  16. public class MiningCommand implements CommandExecutor {
  17. private float skillValue;
  18. private String doubleDropChance;
  19. private String superBreakerLength;
  20. private String blastMiningRank;
  21. private String blastRadiusIncrease;
  22. private String blastDamageDecrease;
  23. private boolean canSuperBreaker;
  24. private boolean canDoubleDrop;
  25. private boolean canBlast;
  26. private boolean canBiggerBombs;
  27. private boolean canDemoExpert;
  28. private boolean doubleDropsDisabled;
  29. @Override
  30. public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
  31. if (CommandHelper.noConsoleUsage(sender)) {
  32. return true;
  33. }
  34. if (CommandHelper.noCommandPermissions(sender, "mcmmo.skills.mining")) {
  35. return true;
  36. }
  37. Player player = (Player) sender;
  38. PlayerProfile PP = Users.getProfile(player);
  39. skillValue = (float) PP.getSkillLevel(SkillType.MINING);
  40. dataCalculations(skillValue);
  41. permissionsCheck(player);
  42. player.sendMessage(LocaleLoader.getString("Skills.Header", new Object[] { LocaleLoader.getString("Mining.SkillName") }));
  43. player.sendMessage(LocaleLoader.getString("Commands.XPGain", new Object[] { LocaleLoader.getString("Commands.XPGain.Mining") }));
  44. player.sendMessage(LocaleLoader.getString("Effects.Level", new Object[] { PP.getSkillLevel(SkillType.MINING), PP.getSkillXpLevel(SkillType.MINING), PP.getXpToLevel(SkillType.MINING) }));
  45. if (canBiggerBombs || canBlast || canDemoExpert || (canDoubleDrop && !doubleDropsDisabled ) || canSuperBreaker) {
  46. player.sendMessage(LocaleLoader.getString("Skills.Header", new Object[] { LocaleLoader.getString("Effects.Effects") }));
  47. }
  48. if (canSuperBreaker) {
  49. player.sendMessage(LocaleLoader.getString("Effects.Template", new Object[] { LocaleLoader.getString("Mining.Effect.0"), LocaleLoader.getString("Mining.Effect.1") }));
  50. }
  51. if (canDoubleDrop && !doubleDropsDisabled) {
  52. player.sendMessage(LocaleLoader.getString("Effects.Template", new Object[] { LocaleLoader.getString("Mining.Effect.2"), LocaleLoader.getString("Mining.Effect.3") }));
  53. }
  54. if (canBlast) {
  55. player.sendMessage(LocaleLoader.getString("Effects.Template", new Object[] { LocaleLoader.getString("Mining.Effect.4"), LocaleLoader.getString("Mining.Effect.5") }));
  56. }
  57. if (canBiggerBombs) {
  58. player.sendMessage(LocaleLoader.getString("Effects.Template", new Object[] { LocaleLoader.getString("Mining.Effect.6"), LocaleLoader.getString("Mining.Effect.7") }));
  59. }
  60. if (canDemoExpert) {
  61. player.sendMessage(LocaleLoader.getString("Effects.Template", new Object[] { LocaleLoader.getString("Mining.Effect.8"), LocaleLoader.getString("Mining.Effect.9") }));
  62. }
  63. if (canBiggerBombs || canBlast || canDemoExpert || (canDoubleDrop && !doubleDropsDisabled ) || canSuperBreaker) {
  64. player.sendMessage(LocaleLoader.getString("Skills.Header", new Object[] { LocaleLoader.getString("Commands.Stats.Self") }));
  65. }
  66. if (canDoubleDrop && !doubleDropsDisabled) {
  67. player.sendMessage(LocaleLoader.getString("Mining.Effect.DropChance", new Object[] { doubleDropChance }));
  68. }
  69. if (canSuperBreaker) {
  70. player.sendMessage(LocaleLoader.getString("Mining.Ability.Length", new Object[] { superBreakerLength }));
  71. }
  72. if (canBlast) {
  73. if (PP.getSkillLevel(SkillType.MINING) < 125) {
  74. player.sendMessage(LocaleLoader.getString("Ability.Generic.Template.Lock", new Object[] { LocaleLoader.getString("Mining.Ability.Locked.0") }));
  75. }
  76. else {
  77. player.sendMessage(LocaleLoader.getString("Mining.Blast.Rank", new Object[] { blastMiningRank, LocaleLoader.getString("Mining.Blast.Effect." + (Misc.getInt(blastMiningRank) - 1)) }));
  78. }
  79. }
  80. if (canBiggerBombs) {
  81. if (PP.getSkillLevel(SkillType.MINING) < 250) {
  82. player.sendMessage(LocaleLoader.getString("Ability.Generic.Template.Lock", new Object[] { LocaleLoader.getString("Mining.Ability.Locked.1") }));
  83. }
  84. else {
  85. player.sendMessage(LocaleLoader.getString("Mining.Blast.Radius.Increase", new Object[] { blastRadiusIncrease }));
  86. }
  87. }
  88. if (canDemoExpert) {
  89. if (PP.getSkillLevel(SkillType.MINING) < 500) {
  90. player.sendMessage(LocaleLoader.getString("Ability.Generic.Template.Lock", new Object[] { LocaleLoader.getString("Mining.Ability.Locked.2") }));
  91. }
  92. else {
  93. player.sendMessage(LocaleLoader.getString("Mining.Effect.Decrease", new Object[] { blastDamageDecrease }));
  94. }
  95. }
  96. Page.grabGuidePageForSkill(SkillType.MINING, player, args);
  97. return true;
  98. }
  99. private void dataCalculations(float skillValue) {
  100. DecimalFormat percent = new DecimalFormat("##0.00%");
  101. superBreakerLength = String.valueOf(2 + ((int) skillValue / 50));
  102. if (skillValue >= 1000) {
  103. blastMiningRank = "8";
  104. blastDamageDecrease = "100.00%";
  105. blastRadiusIncrease = "4";
  106. doubleDropChance = "100.00%";
  107. }
  108. else if (skillValue >= 875) {
  109. blastMiningRank = "7";
  110. blastDamageDecrease = "50.00%";
  111. blastRadiusIncrease = "3";
  112. doubleDropChance = percent.format(skillValue / 1000);
  113. }
  114. else if (skillValue >= 750) {
  115. blastMiningRank = "6";
  116. blastDamageDecrease = "50.00%";
  117. blastRadiusIncrease = "3";
  118. doubleDropChance = percent.format(skillValue / 1000);
  119. }
  120. else if (skillValue >= 625) {
  121. blastMiningRank = "5";
  122. blastDamageDecrease = "25.00%";
  123. blastRadiusIncrease = "2";
  124. doubleDropChance = percent.format(skillValue / 1000);
  125. }
  126. else if (skillValue >= 500) {
  127. blastMiningRank = "4";
  128. blastDamageDecrease = "25.00%";
  129. blastRadiusIncrease = "2";
  130. doubleDropChance = percent.format(skillValue / 1000);
  131. }
  132. else if (skillValue >= 375) {
  133. blastMiningRank = "3";
  134. blastDamageDecrease = "0.00%";
  135. blastRadiusIncrease = "1";
  136. doubleDropChance = percent.format(skillValue / 1000);
  137. }
  138. else if (skillValue >= 250) {
  139. blastMiningRank = "2";
  140. blastDamageDecrease = "0.00%";
  141. blastRadiusIncrease = "1";
  142. doubleDropChance = percent.format(skillValue / 1000);
  143. }
  144. else if (skillValue >= 125) {
  145. blastMiningRank = "1";
  146. blastDamageDecrease = "0.00%";
  147. blastRadiusIncrease = "0";
  148. doubleDropChance = percent.format(skillValue / 1000);
  149. }
  150. else {
  151. blastMiningRank = "0";
  152. blastDamageDecrease = "0.00%";
  153. blastRadiusIncrease = "0";
  154. doubleDropChance = percent.format(skillValue / 1000);
  155. }
  156. }
  157. private void permissionsCheck(Player player) {
  158. Permissions permInstance = Permissions.getInstance();
  159. Config configInstance = Config.getInstance();
  160. canBiggerBombs = permInstance.biggerBombs(player);
  161. canBlast = permInstance.blastMining(player);
  162. canDemoExpert = permInstance.demolitionsExpertise(player);
  163. canDoubleDrop = permInstance.miningDoubleDrops(player);
  164. canSuperBreaker = permInstance.superBreaker(player);
  165. doubleDropsDisabled = configInstance.miningDoubleDropsDisabled();
  166. }
  167. }