From 659e982c478cd1287d9f31445d6eb4036e84d1a5 Mon Sep 17 00:00:00 2001 From: GJ Date: Tue, 29 Jan 2013 08:08:40 -0500 Subject: [PATCH] Check if the furnace is actually a furnace - fixes ClassCastExceptions caused by "virtual furnace" plugins. --- .../nossr50/listeners/InventoryListener.java | 55 ++++++++++++------- 1 file changed, 34 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/gmail/nossr50/listeners/InventoryListener.java b/src/main/java/com/gmail/nossr50/listeners/InventoryListener.java index 779552c0e..74120f2e3 100644 --- a/src/main/java/com/gmail/nossr50/listeners/InventoryListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/InventoryListener.java @@ -1,6 +1,7 @@ package com.gmail.nossr50.listeners; import org.bukkit.block.Block; +import org.bukkit.block.BlockState; import org.bukkit.block.Furnace; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -69,15 +70,19 @@ public class InventoryListener implements Listener{ @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onFurnaceBurnEvent(FurnaceBurnEvent event) { Block furnaceBlock = event.getBlock(); - FurnaceInventory inventory = ((Furnace)furnaceBlock.getState()).getInventory(); - ItemStack smelting = inventory.getSmelting(); + BlockState blockState = furnaceBlock.getState(); - if (plugin.furnaceIsTracked(furnaceBlock) && smelting != null && ItemChecks.isSmeltable(smelting)) { - Player player = plugin.getFurnacePlayer(furnaceBlock); - - if (player != null) { - SmeltingManager smeltingManager = new SmeltingManager(player); - smeltingManager.fuelEfficiency(event); + if (blockState instanceof Furnace) { + FurnaceInventory inventory = ((Furnace) blockState).getInventory(); + ItemStack smelting = inventory.getSmelting(); + + if (plugin.furnaceIsTracked(furnaceBlock) && smelting != null && ItemChecks.isSmeltable(smelting)) { + Player player = plugin.getFurnacePlayer(furnaceBlock); + + if (player != null) { + SmeltingManager smeltingManager = new SmeltingManager(player); + smeltingManager.fuelEfficiency(event); + } } } } @@ -85,15 +90,19 @@ public class InventoryListener implements Listener{ @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onFurnaceSmeltEvent(FurnaceSmeltEvent event) { Block furnaceBlock = event.getBlock(); - FurnaceInventory inventory = ((Furnace)furnaceBlock.getState()).getInventory(); - ItemStack smelting = inventory.getSmelting(); + BlockState blockState = furnaceBlock.getState(); - if (plugin.furnaceIsTracked(furnaceBlock) && smelting != null && ItemChecks.isSmeltable(smelting)) { - Player player = plugin.getFurnacePlayer(furnaceBlock); - - if (player != null) { - SmeltingManager smeltingManager = new SmeltingManager(player); - smeltingManager.smeltProcessing(event); + if (blockState instanceof Furnace) { + FurnaceInventory inventory = ((Furnace) blockState).getInventory(); + ItemStack smelting = inventory.getSmelting(); + + if (plugin.furnaceIsTracked(furnaceBlock) && smelting != null && ItemChecks.isSmeltable(smelting)) { + Player player = plugin.getFurnacePlayer(furnaceBlock); + + if (player != null) { + SmeltingManager smeltingManager = new SmeltingManager(player); + smeltingManager.smeltProcessing(event); + } } } } @@ -101,12 +110,16 @@ public class InventoryListener implements Listener{ @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onFurnaceExtractEvent(FurnaceExtractEvent event) { Block furnaceBlock = event.getBlock(); - FurnaceInventory inventory = ((Furnace)furnaceBlock.getState()).getInventory(); - ItemStack result = inventory.getResult(); + BlockState blockState = furnaceBlock.getState(); - if (plugin.furnaceIsTracked(furnaceBlock) && result != null && ItemChecks.isSmelted(result)) { - SmeltingManager smeltingManager = new SmeltingManager(plugin.getFurnacePlayer(furnaceBlock)); - smeltingManager.vanillaXPBoost(event); + if (blockState instanceof Furnace) { + FurnaceInventory inventory = ((Furnace) blockState).getInventory(); + ItemStack result = inventory.getResult(); + + if (plugin.furnaceIsTracked(furnaceBlock) && result != null && ItemChecks.isSmelted(result)) { + SmeltingManager smeltingManager = new SmeltingManager(plugin.getFurnacePlayer(furnaceBlock)); + smeltingManager.vanillaXPBoost(event); + } } } }