Browse Source

Split the listener - those events don't need to happen at HIGHEST
priority.

GJ 12 năm trước cách đây
mục cha
commit
3cca6d9ab4
1 tập tin đã thay đổi với 28 bổ sung7 xóa
  1. 28 7
      src/main/java/com/gmail/nossr50/listeners/BlockListener.java

+ 28 - 7
src/main/java/com/gmail/nossr50/listeners/BlockListener.java

@@ -245,12 +245,11 @@ public class BlockListener implements Listener {
     }
 
     /**
-     * Monitor BlockDamage events.
+     * Handle BlockDamage events where the event is modified.
      *
-     * @param event The event to monitor
+     * @param event The event to modify
      */
-    @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
-    public void onBlockDamage(BlockDamageEvent event) {
+    public void onBlockDamageHigher(BlockDamageEvent event) {
         if (event instanceof FakeBlockDamageEvent) {
             return;
         }
@@ -262,9 +261,7 @@ public class BlockListener implements Listener {
             return;
         }
 
-        ItemStack heldItem = player.getItemInHand();
         Block block = event.getBlock();
-        Material material = block.getType();
 
         /*
          * ABILITY PREPARATION CHECKS
@@ -272,6 +269,8 @@ public class BlockListener implements Listener {
          * We check permissions here before processing activation.
          */
         if (BlockChecks.canActivateAbilities(block)) {
+            ItemStack heldItem = player.getItemInHand();
+
             if (profile.getToolPreparationMode(ToolType.HOE) && ItemChecks.isHoe(heldItem) && (BlockChecks.canBeGreenTerra(block) || BlockChecks.canMakeMossy(block)) && Permissions.greenTerra(player)) {
                 Skills.abilityCheck(player, SkillType.HERBALISM);
             }
@@ -284,7 +283,7 @@ public class BlockListener implements Listener {
             else if (profile.getToolPreparationMode(ToolType.SHOVEL) && ItemChecks.isShovel(heldItem) && BlockChecks.canBeGigaDrillBroken(block) && Permissions.gigaDrillBreaker(player)) {
                 Skills.abilityCheck(player, SkillType.EXCAVATION);
             }
-            else if (profile.getToolPreparationMode(ToolType.FISTS) && heldItem.getType() == Material.AIR && (BlockChecks.canBeGigaDrillBroken(block) || material.equals(Material.SNOW)) && Permissions.berserk(player)) {
+            else if (profile.getToolPreparationMode(ToolType.FISTS) && heldItem.getType() == Material.AIR && (BlockChecks.canBeGigaDrillBroken(block) || block.getType().equals(Material.SNOW)) && Permissions.berserk(player)) {
                 Skills.abilityCheck(player, SkillType.UNARMED);
             }
         }
@@ -297,6 +296,28 @@ public class BlockListener implements Listener {
         if (mcMMO.spoutEnabled && profile.getAbilityMode(AbilityType.TREE_FELLER) && BlockChecks.isLog(block)) {
             SpoutSounds.playSoundForPlayer(SoundEffect.FIZZ, player, block.getLocation());
         }
+    }
+
+    /**
+     * Monitor BlockDamage events.
+     *
+     * @param event The event to watch
+     */
+    @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
+    public void onBlockDamage(BlockDamageEvent event) {
+        if (event instanceof FakeBlockDamageEvent) {
+            return;
+        }
+
+        Player player = event.getPlayer();
+        PlayerProfile profile = Users.getProfile(player);
+
+        if (Misc.isNPCPlayer(player, profile)) {
+            return;
+        }
+
+        ItemStack heldItem = player.getItemInHand();
+        Block block = event.getBlock();
 
         /*
          * ABILITY TRIGGER CHECKS