Преглед на файлове

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 години
родител
ревизия
aa59348a94
променени са 2 файла, в които са добавени 20 реда и са изтрити 20 реда
  1. 1 1
      src/main/java/com/gmail/nossr50/listeners/BlockListener.java
  2. 19 19
      src/main/java/com/gmail/nossr50/listeners/EntityListener.java

+ 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);
+            }
         }
     }