Browse Source

We only care about blocks that award XP.

Also, this fixes a possible issue where blocks changed by entities other than falling blocks could have been left as tracked even after they were destroyed.
GJ 11 năm trước cách đây
mục cha
commit
aa59348a94

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

@@ -96,7 +96,7 @@ public class BlockListener implements Listener {
 
         Block movedBlock = event.getRetractLocation().getBlock();
 
-        if (movedBlock.getPistonMoveReaction() != PistonMoveReaction.MOVE || !mcMMO.getPlaceStore().isTrue(movedBlock)) {
+        if (!BlockUtils.shouldBeWatched(movedBlock.getState()) || movedBlock.getPistonMoveReaction() != PistonMoveReaction.MOVE || !mcMMO.getPlaceStore().isTrue(movedBlock)) {
             return;
         }
 

+ 19 - 19
src/main/java/com/gmail/nossr50/listeners/EntityListener.java

@@ -1,19 +1,11 @@
 package com.gmail.nossr50.listeners;
 
 import com.gmail.nossr50.events.fake.FakeEntityTameEvent;
+import com.gmail.nossr50.util.BlockUtils;
 import org.bukkit.OfflinePlayer;
 import org.bukkit.block.Block;
 import org.bukkit.enchantments.Enchantment;
-import org.bukkit.entity.AnimalTamer;
-import org.bukkit.entity.Arrow;
-import org.bukkit.entity.Entity;
-import org.bukkit.entity.FallingBlock;
-import org.bukkit.entity.LivingEntity;
-import org.bukkit.entity.Player;
-import org.bukkit.entity.Projectile;
-import org.bukkit.entity.TNTPrimed;
-import org.bukkit.entity.Tameable;
-import org.bukkit.entity.Wolf;
+import org.bukkit.entity.*;
 import org.bukkit.event.EventHandler;
 import org.bukkit.event.EventPriority;
 import org.bukkit.event.Listener;
@@ -100,21 +92,29 @@ public class EntityListener implements Listener {
      */
     @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
     public void onEntityChangeBlock(EntityChangeBlockEvent event) {
-        Entity entity = event.getEntity();
+        Block block = event.getBlock();
 
-        if (!(entity instanceof FallingBlock)) {
+        if (!BlockUtils.shouldBeWatched(block.getState())) {
             return;
         }
 
-        Block block = event.getBlock();
-        boolean isTracked = entity.hasMetadata(mcMMO.entityMetadataKey);
+        Entity entity = event.getEntity();
+
+        if (entity instanceof FallingBlock || entity instanceof Enderman) {
+            boolean isTracked = entity.hasMetadata(mcMMO.entityMetadataKey);
 
-        if (mcMMO.getPlaceStore().isTrue(block) && !isTracked) {
-            mcMMO.getPlaceStore().setFalse(block);
-            entity.setMetadata(mcMMO.entityMetadataKey, mcMMO.metadataValue);
+            if (mcMMO.getPlaceStore().isTrue(block) && !isTracked) {
+                mcMMO.getPlaceStore().setFalse(block);
+                entity.setMetadata(mcMMO.entityMetadataKey, mcMMO.metadataValue);
+            }
+            else if (isTracked) {
+                mcMMO.getPlaceStore().setTrue(block);
+            }
         }
-        else if (isTracked) {
-            mcMMO.getPlaceStore().setTrue(block);
+        else {
+            if (mcMMO.getPlaceStore().isTrue(block)) {
+                mcMMO.getPlaceStore().setFalse(block);
+            }
         }
     }