mirror of
				https://github.com/mcMMO-Dev/mcMMO.git
				synced 2025-11-03 10:33:43 +01:00 
			
		
		
		
	Fixed bug with Smelting not properly tracking furnaces. Fixes #806
This commit is contained in:
		@@ -10,6 +10,7 @@ Key:
 | 
				
			|||||||
Version 1.4.03-dev
 | 
					Version 1.4.03-dev
 | 
				
			||||||
 + Added option to advanced.yml to determine the # of enchant levels used when buffing Super Breaker & Giga Drill Breaker
 | 
					 + Added option to advanced.yml to determine the # of enchant levels used when buffing Super Breaker & Giga Drill Breaker
 | 
				
			||||||
 + Improved stats display for child skills
 | 
					 + Improved stats display for child skills
 | 
				
			||||||
 | 
					 = Fixed bug with Smelting not properly tracking furnaces
 | 
				
			||||||
 = Fixed bug with Blast Mining not dropping blocks correctly
 | 
					 = Fixed bug with Blast Mining not dropping blocks correctly
 | 
				
			||||||
 = Fixed bug with custom blocks not working
 | 
					 = Fixed bug with custom blocks not working
 | 
				
			||||||
 = Fixed bug where Blast Mining was awarding too much XP
 | 
					 = Fixed bug where Blast Mining was awarding too much XP
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,6 @@
 | 
				
			|||||||
package com.gmail.nossr50.listeners;
 | 
					package com.gmail.nossr50.listeners;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.bukkit.block.Block;
 | 
				
			||||||
import org.bukkit.block.BlockState;
 | 
					import org.bukkit.block.BlockState;
 | 
				
			||||||
import org.bukkit.block.Furnace;
 | 
					import org.bukkit.block.Furnace;
 | 
				
			||||||
import org.bukkit.entity.HumanEntity;
 | 
					import org.bukkit.entity.HumanEntity;
 | 
				
			||||||
@@ -16,6 +17,7 @@ import org.bukkit.event.inventory.InventoryOpenEvent;
 | 
				
			|||||||
import org.bukkit.inventory.FurnaceInventory;
 | 
					import org.bukkit.inventory.FurnaceInventory;
 | 
				
			||||||
import org.bukkit.inventory.Inventory;
 | 
					import org.bukkit.inventory.Inventory;
 | 
				
			||||||
import org.bukkit.inventory.ItemStack;
 | 
					import org.bukkit.inventory.ItemStack;
 | 
				
			||||||
 | 
					import org.bukkit.metadata.FixedMetadataValue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import com.gmail.nossr50.mcMMO;
 | 
					import com.gmail.nossr50.mcMMO;
 | 
				
			||||||
import com.gmail.nossr50.datatypes.skills.SkillType;
 | 
					import com.gmail.nossr50.datatypes.skills.SkillType;
 | 
				
			||||||
@@ -49,11 +51,12 @@ public class InventoryListener implements Listener {
 | 
				
			|||||||
            if (furnace == null) {
 | 
					            if (furnace == null) {
 | 
				
			||||||
                return;
 | 
					                return;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					            if (furnace.getBurnTime() == 0) {
 | 
				
			||||||
 | 
					                Block furnaceBlock = furnace.getBlock();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            BlockState furnaceBlock = furnace.getBlock().getState();
 | 
					                if (!furnaceBlock.hasMetadata(mcMMO.furnaceMetadataKey)) {
 | 
				
			||||||
 | 
					                    furnaceBlock.setMetadata(mcMMO.furnaceMetadataKey, new FixedMetadataValue(plugin, player.getName()));
 | 
				
			||||||
            if (furnace.getBurnTime() == 0 && !plugin.furnaceIsTracked(furnaceBlock)) {
 | 
					                }
 | 
				
			||||||
                plugin.addToOpenFurnaceTracker(furnaceBlock, player.getName());
 | 
					 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -75,23 +78,27 @@ public class InventoryListener implements Listener {
 | 
				
			|||||||
                return;
 | 
					                return;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            BlockState furnaceBlock = furnace.getBlock().getState();
 | 
					            if (furnace.getBurnTime() == 0) {
 | 
				
			||||||
 | 
					                Block furnaceBlock = furnace.getBlock();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (furnace.getBurnTime() == 0 && plugin.furnaceIsTracked(furnaceBlock)) {
 | 
					                if (furnaceBlock.hasMetadata(mcMMO.furnaceMetadataKey)) {
 | 
				
			||||||
                plugin.removeFromFurnaceTracker(furnaceBlock);
 | 
					                    furnaceBlock.removeMetadata(mcMMO.furnaceMetadataKey, plugin);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
 | 
					    @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
 | 
				
			||||||
    public void onFurnaceBurnEvent(FurnaceBurnEvent event) {
 | 
					    public void onFurnaceBurnEvent(FurnaceBurnEvent event) {
 | 
				
			||||||
        BlockState furnaceBlock = event.getBlock().getState();
 | 
					        Block furnaceBlock = event.getBlock();
 | 
				
			||||||
 | 
					        BlockState furnaceState = furnaceBlock.getState();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (furnaceBlock instanceof Furnace) {
 | 
					        if (furnaceState instanceof Furnace) {
 | 
				
			||||||
            ItemStack smelting = ((Furnace) furnaceBlock).getInventory().getSmelting();
 | 
					            ItemStack smelting = ((Furnace) furnaceBlock).getInventory().getSmelting();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (plugin.furnaceIsTracked(furnaceBlock) && smelting != null && ItemUtils.isSmeltable(smelting)) {
 | 
					            if (furnaceBlock.hasMetadata(mcMMO.furnaceMetadataKey) && smelting != null && ItemUtils.isSmeltable(smelting)) {
 | 
				
			||||||
                Player player = plugin.getFurnacePlayer(furnaceBlock);
 | 
					                // We can make this assumption because we (should) be the only ones using this exact metadata
 | 
				
			||||||
 | 
					                Player player = plugin.getServer().getPlayer(furnaceBlock.getMetadata(mcMMO.furnaceMetadataKey).get(0).asString());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (Misc.isNPCEntity(player) || !Permissions.fuelEfficiency(player)) {
 | 
					                if (Misc.isNPCEntity(player) || !Permissions.fuelEfficiency(player)) {
 | 
				
			||||||
                    return;
 | 
					                    return;
 | 
				
			||||||
@@ -104,13 +111,15 @@ public class InventoryListener implements Listener {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
 | 
					    @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
 | 
				
			||||||
    public void onFurnaceSmeltEvent(FurnaceSmeltEvent event) {
 | 
					    public void onFurnaceSmeltEvent(FurnaceSmeltEvent event) {
 | 
				
			||||||
        BlockState furnaceBlock = event.getBlock().getState();
 | 
					        Block furnaceBlock = event.getBlock();
 | 
				
			||||||
 | 
					        BlockState furnaceState = furnaceBlock.getState();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (furnaceBlock instanceof Furnace) {
 | 
					        if (furnaceState instanceof Furnace) {
 | 
				
			||||||
            ItemStack smelting = ((Furnace) furnaceBlock).getInventory().getSmelting();
 | 
					            ItemStack smelting = ((Furnace) furnaceBlock).getInventory().getSmelting();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (plugin.furnaceIsTracked(furnaceBlock) && smelting != null && ItemUtils.isSmeltable(smelting)) {
 | 
					            if (furnaceBlock.hasMetadata(mcMMO.furnaceMetadataKey) && smelting != null && ItemUtils.isSmeltable(smelting)) {
 | 
				
			||||||
                Player player = plugin.getFurnacePlayer(furnaceBlock);
 | 
					                // We can make this assumption because we (should) be the only ones using this exact metadata
 | 
				
			||||||
 | 
					                Player player = plugin.getServer().getPlayer(furnaceBlock.getMetadata(mcMMO.furnaceMetadataKey).get(0).asString());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (Misc.isNPCEntity(player) || !Permissions.skillEnabled(player, SkillType.SMELTING)) {
 | 
					                if (Misc.isNPCEntity(player) || !Permissions.skillEnabled(player, SkillType.SMELTING)) {
 | 
				
			||||||
                    return;
 | 
					                    return;
 | 
				
			||||||
@@ -128,8 +137,9 @@ public class InventoryListener implements Listener {
 | 
				
			|||||||
        if (furnaceBlock instanceof Furnace) {
 | 
					        if (furnaceBlock instanceof Furnace) {
 | 
				
			||||||
            ItemStack result = ((Furnace) furnaceBlock).getInventory().getResult();
 | 
					            ItemStack result = ((Furnace) furnaceBlock).getInventory().getResult();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (plugin.furnaceIsTracked(furnaceBlock) && result != null && ItemUtils.isSmelted(result)) {
 | 
					            if (furnaceBlock.hasMetadata(mcMMO.furnaceMetadataKey) && result != null && ItemUtils.isSmelted(result)) {
 | 
				
			||||||
                Player player = event.getPlayer();
 | 
					                // We can make this assumption because we (should) be the only ones using this exact metadata
 | 
				
			||||||
 | 
					                Player player = plugin.getServer().getPlayer(furnaceBlock.getMetadata(mcMMO.furnaceMetadataKey).get(0).asString());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                SmeltingManager smeltingManager = UserManager.getPlayer(player).getSmeltingManager();
 | 
					                SmeltingManager smeltingManager = UserManager.getPlayer(player).getSmeltingManager();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -10,7 +10,6 @@ import net.shatteredlands.shatt.backup.ZipLibrary;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import org.bukkit.Bukkit;
 | 
					import org.bukkit.Bukkit;
 | 
				
			||||||
import org.bukkit.OfflinePlayer;
 | 
					import org.bukkit.OfflinePlayer;
 | 
				
			||||||
import org.bukkit.block.BlockState;
 | 
					 | 
				
			||||||
import org.bukkit.entity.Player;
 | 
					import org.bukkit.entity.Player;
 | 
				
			||||||
import org.bukkit.event.HandlerList;
 | 
					import org.bukkit.event.HandlerList;
 | 
				
			||||||
import org.bukkit.metadata.FixedMetadataValue;
 | 
					import org.bukkit.metadata.FixedMetadataValue;
 | 
				
			||||||
@@ -66,7 +65,6 @@ public class mcMMO extends JavaPlugin {
 | 
				
			|||||||
    private final WorldListener     worldListener     = new WorldListener();
 | 
					    private final WorldListener     worldListener     = new WorldListener();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private HashMap<Integer, String>    tntTracker     = new HashMap<Integer, String>();
 | 
					    private HashMap<Integer, String>    tntTracker     = new HashMap<Integer, String>();
 | 
				
			||||||
    private HashMap<BlockState, String> furnaceTracker = new HashMap<BlockState, String>();
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public static mcMMO p;
 | 
					    public static mcMMO p;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -95,6 +93,7 @@ public class mcMMO extends JavaPlugin {
 | 
				
			|||||||
    public static FixedMetadataValue metadataValue;
 | 
					    public static FixedMetadataValue metadataValue;
 | 
				
			||||||
    public final static String entityMetadataKey = "mcMMO: Spawned Entity";
 | 
					    public final static String entityMetadataKey = "mcMMO: Spawned Entity";
 | 
				
			||||||
    public final static String blockMetadataKey  = "mcMMO: Piston Tracking";
 | 
					    public final static String blockMetadataKey  = "mcMMO: Piston Tracking";
 | 
				
			||||||
 | 
					    public final static String furnaceMetadataKey  = "mcMMO: Tracked Furnace";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Things to be run when the plugin is enabled.
 | 
					     * Things to be run when the plugin is enabled.
 | 
				
			||||||
@@ -273,22 +272,6 @@ public class mcMMO extends JavaPlugin {
 | 
				
			|||||||
        tntTracker.remove(tntID);
 | 
					        tntTracker.remove(tntID);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void addToOpenFurnaceTracker(BlockState furnace, String playerName) {
 | 
					 | 
				
			||||||
        furnaceTracker.put(furnace, playerName);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public boolean furnaceIsTracked(BlockState furnace) {
 | 
					 | 
				
			||||||
        return furnaceTracker.containsKey(furnace);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public void removeFromFurnaceTracker(BlockState furnace) {
 | 
					 | 
				
			||||||
        furnaceTracker.remove(furnace);
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public Player getFurnacePlayer(BlockState furnace) {
 | 
					 | 
				
			||||||
        return getServer().getPlayer(furnaceTracker.get(furnace));
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public static String getMainDirectory() {
 | 
					    public static String getMainDirectory() {
 | 
				
			||||||
        return mainDirectory;
 | 
					        return mainDirectory;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user