@EventHandler(ignoreCancelled = true) public void onFurnaceInsert(final InventoryClickEvent event) { if (event.getInventory().getType() != InventoryType.FURNACE) { return; } if (event.getRawSlot() == 0 && event.getCursor().getType() != Material.AIR) { if (!validateSmeltingIngredient(event.getCursor())) { event.setCancelled(true); } } else if (event.getRawSlot() >= event.getView().getTopInventory().getSize()) { if (event.getAction() == InventoryAction.MOVE_TO_OTHER_INVENTORY) { if (!validateSmeltingIngredient(event.getCurrentItem()) && !STBUtil.isFuel(event.getCurrentItem().getType())) { event.setCancelled(true); int newSlot = findNewSlot(event); if (newSlot >= 0) { event.getWhoClicked().getInventory().setItem(newSlot, event.getCurrentItem()); event.setCurrentItem(null); } } } } else if (event.getRawSlot() == 2 && SensibleToolbox.getItemRegistry().isSTBItem(event.getCurrentItem())) { // work around CB bug where shift-clicking custom items out of furnace seems // to cause a de-sync, leaving phantom items in the furnace Bukkit.getScheduler() .runTask( plugin, new Runnable() { @Override public void run() { STBUtil.forceInventoryRefresh(event.getInventory()); } }); } }