Browse Source

Remove more code duplication.

GJ 12 years ago
parent
commit
db637f0bc9

+ 3 - 27
src/main/java/com/gmail/nossr50/listeners/InventoryListener.java

@@ -1,7 +1,5 @@
 package com.gmail.nossr50.listeners;
 
-import java.util.List;
-
 import org.bukkit.block.Block;
 import org.bukkit.block.BlockState;
 import org.bukkit.block.Furnace;
@@ -19,7 +17,6 @@ import org.bukkit.event.inventory.InventoryCloseEvent;
 import org.bukkit.event.inventory.InventoryOpenEvent;
 import org.bukkit.inventory.ItemStack;
 import org.bukkit.metadata.FixedMetadataValue;
-import org.bukkit.metadata.MetadataValue;
 
 import com.gmail.nossr50.mcMMO;
 import com.gmail.nossr50.datatypes.skills.SkillType;
@@ -77,20 +74,13 @@ public class InventoryListener implements Listener {
             return;
         }
 
-        List<MetadataValue> metadata = furnaceBlock.getMetadata(mcMMO.furnaceMetadataKey);
-
-        if (metadata.isEmpty()) {
-            return;
-        }
-
         ItemStack smelting = ((Furnace) furnaceState).getInventory().getSmelting();
 
         if (smelting == null || !ItemUtils.isSmeltable(smelting)) {
             return;
         }
 
-        // We can make this assumption because we (should) be the only ones using this exact metadata
-        Player player = plugin.getServer().getPlayer(metadata.get(0).asString());
+        Player player = Misc.getPlayerFromFurnace(furnaceBlock);
 
         if (Misc.isNPCEntity(player) || !Permissions.fuelEfficiency(player)) {
             return;
@@ -108,20 +98,13 @@ public class InventoryListener implements Listener {
             return;
         }
 
-        List<MetadataValue> metadata = furnaceBlock.getMetadata(mcMMO.furnaceMetadataKey);
-
-        if (metadata.isEmpty()) {
-            return;
-        }
-
         ItemStack smelting = ((Furnace) furnaceState).getInventory().getSmelting();
 
         if (smelting == null || !ItemUtils.isSmeltable(smelting)) {
             return;
         }
 
-        // We can make this assumption because we (should) be the only ones using this exact metadata
-        Player player = plugin.getServer().getPlayer(metadata.get(0).asString());
+        Player player = Misc.getPlayerFromFurnace(furnaceBlock);
 
         if (Misc.isNPCEntity(player) || !Permissions.skillEnabled(player, SkillType.SMELTING)) {
             return;
@@ -139,20 +122,13 @@ public class InventoryListener implements Listener {
             return;
         }
 
-        List<MetadataValue> metadata = furnaceBlock.getMetadata(mcMMO.furnaceMetadataKey);
-
-        if (metadata.isEmpty()) {
-            return;
-        }
-
         ItemStack result = ((Furnace) furnaceState).getInventory().getResult();
 
         if (result == null || !ItemUtils.isSmelted(result)) {
             return;
         }
 
-        // We can make this assumption because we (should) be the only ones using this exact metadata
-        Player player = plugin.getServer().getPlayer(metadata.get(0).asString());
+        Player player = Misc.getPlayerFromFurnace(furnaceBlock);
 
         if (Misc.isNPCEntity(player)) {
             return;

+ 8 - 0
src/main/java/com/gmail/nossr50/util/Misc.java

@@ -1,6 +1,7 @@
 package com.gmail.nossr50.util;
 
 import java.util.Collection;
+import java.util.List;
 import java.util.Random;
 
 import org.bukkit.Chunk;
@@ -15,6 +16,7 @@ import org.bukkit.event.inventory.InventoryEvent;
 import org.bukkit.inventory.FurnaceInventory;
 import org.bukkit.inventory.Inventory;
 import org.bukkit.inventory.ItemStack;
+import org.bukkit.metadata.MetadataValue;
 
 import com.gmail.nossr50.mcMMO;
 import com.gmail.nossr50.datatypes.player.McMMOPlayer;
@@ -225,6 +227,12 @@ public final class Misc {
         return furnace.getBlock();
     }
 
+    public static Player getPlayerFromFurnace(Block furnaceBlock) {
+        List<MetadataValue> metadata = furnaceBlock.getMetadata(mcMMO.furnaceMetadataKey);
+
+        return metadata.isEmpty() ? null : mcMMO.p.getServer().getPlayerExact(metadata.get(0).asString());
+    }
+
     public static Random getRandom() {
         return random;
     }