MiningManager.java 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. package com.gmail.nossr50.skills.mining;
  2. import org.bukkit.Material;
  3. import org.bukkit.block.Block;
  4. import org.bukkit.entity.Player;
  5. import org.bukkit.event.entity.EntityDamageEvent;
  6. import org.bukkit.event.entity.EntityExplodeEvent;
  7. import org.bukkit.event.entity.ExplosionPrimeEvent;
  8. import org.bukkit.event.player.PlayerInteractEvent;
  9. import com.gmail.nossr50.mcMMO;
  10. import com.gmail.nossr50.datatypes.SkillType;
  11. import com.gmail.nossr50.skills.SkillManager;
  12. import com.gmail.nossr50.util.Misc;
  13. import com.gmail.nossr50.util.Permissions;
  14. public class MiningManager extends SkillManager{
  15. public MiningManager (Player player) {
  16. super(player, SkillType.MINING);
  17. }
  18. /**
  19. * Detonate TNT for Blast Mining
  20. *
  21. * @param event The PlayerInteractEvent
  22. * @param player Player detonating the TNT
  23. * @param plugin mcMMO plugin instance
  24. */
  25. public void detonate(PlayerInteractEvent event) {
  26. if (Misc.isNPC(player)) {
  27. return;
  28. }
  29. if (skillLevel < BlastMining.BLAST_MINING_RANK_1) {
  30. return;
  31. }
  32. RemoteDetonationEventHandler eventHandler = new RemoteDetonationEventHandler(this, event);
  33. eventHandler.targetTNT();
  34. if (eventHandler.block.getType() != Material.TNT) {
  35. return;
  36. }
  37. if (!Misc.blockBreakSimulate(eventHandler.block, player, true)) {
  38. return;
  39. }
  40. if (!eventHandler.cooldownOver()) {
  41. return;
  42. }
  43. eventHandler.sendMessages();
  44. eventHandler.handleDetonation();
  45. eventHandler.setProfileData();
  46. }
  47. /**
  48. * Handler for explosion drops and XP gain.
  49. *
  50. * @param event Event whose explosion is being processed
  51. */
  52. public void blastMiningDropProcessing(EntityExplodeEvent event) {
  53. if (Misc.isNPC(player)) {
  54. return;
  55. }
  56. if (skillLevel < BlastMining.BLAST_MINING_RANK_1) {
  57. return;
  58. }
  59. BlastMiningDropEventHandler eventHandler = new BlastMiningDropEventHandler(this, event);
  60. eventHandler.sortExplosionBlocks();
  61. eventHandler.modifyEventYield();
  62. eventHandler.calcuateDropModifiers();
  63. eventHandler.processDroppedBlocks();
  64. eventHandler.processXPGain();
  65. }
  66. /**
  67. * Decreases damage dealt by the explosion from TNT activated by Blast Mining.
  68. *
  69. * @param event Event whose explosion damage is being reduced
  70. */
  71. public void demolitionsExpertise(EntityDamageEvent event) {
  72. if (Misc.isNPC(player)) {
  73. return;
  74. }
  75. DemoltionsExpertiseEventHandler eventHandler = new DemoltionsExpertiseEventHandler(this, event);
  76. eventHandler.calculateDamageModifier();
  77. eventHandler.modifyEventDamage();
  78. }
  79. /**
  80. * Increases the blast radius of the explosion.
  81. *
  82. * @param player Player triggering the explosion
  83. * @param event Event whose explosion radius is being changed
  84. */
  85. public void biggerBombs(ExplosionPrimeEvent event) {
  86. if (Misc.isNPC(player)) {
  87. return;
  88. }
  89. BiggerBombsEventHandler eventHandler = new BiggerBombsEventHandler(this, event);
  90. eventHandler.calculateRadiusIncrease();
  91. eventHandler.modifyBlastRadius();
  92. }
  93. /**
  94. * Process Mining block drops.
  95. *
  96. * @param block The block being broken
  97. */
  98. public void miningBlockCheck(Block block) {
  99. if (mcMMO.placeStore.isTrue(block)) {
  100. return;
  101. }
  102. MiningBlockEventHandler eventHandler = new MiningBlockEventHandler(this, block);
  103. eventHandler.processXPGain();
  104. if (!Permissions.miningDoubleDrops(player)) {
  105. return;
  106. }
  107. int randomChance = 100;
  108. if (Permissions.luckyMining(player)) {
  109. randomChance = 75;
  110. }
  111. float chance = ((float) Mining.DOUBLE_DROPS_MAX_CHANCE / Mining.DOUBLE_DROPS_MAX_BONUS_LEVEL) * eventHandler.skillModifier;
  112. if (chance > Misc.getRandom().nextInt(randomChance)) {
  113. eventHandler.processDrops();
  114. }
  115. }
  116. /**
  117. * Handle the Super Breaker ability.
  118. *
  119. * @param player The player using the ability
  120. * @param block The block being affected
  121. */
  122. public void superBreakerBlockCheck(Block block) {
  123. if (mcMMO.placeStore.isTrue(block) || !Misc.blockBreakSimulate(block, player, true)) {
  124. return;
  125. }
  126. SuperBreakerEventHandler eventHandler = new SuperBreakerEventHandler(this, block);
  127. if (!eventHandler.tierCheck()) {
  128. return;
  129. }
  130. eventHandler.callFakeArmswing();
  131. eventHandler.processDurabilityLoss();
  132. eventHandler.processDropsAndXP();
  133. eventHandler.playSpoutSound();
  134. }
  135. }