package net.glowstone.inventory; import net.glowstone.GlowServer; import net.glowstone.block.GlowBlock; import net.glowstone.entity.GlowPlayer; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.block.Furnace; import org.bukkit.event.inventory.InventoryType; import org.bukkit.event.inventory.InventoryType.SlotType; import org.bukkit.inventory.FurnaceInventory; import org.bukkit.inventory.InventoryView; import org.bukkit.inventory.ItemStack; public class GlowFurnaceInventory extends GlowInventory implements FurnaceInventory { private static final int INPUT_SLOT = 0; private static final int FUEL_SLOT = 1; private static final int RESULT_SLOT = 2; public GlowFurnaceInventory(Furnace owner) { super(owner, InventoryType.FURNACE); getSlot(INPUT_SLOT).setType(SlotType.CRAFTING); getSlot(FUEL_SLOT).setType(SlotType.FUEL); getSlot(RESULT_SLOT).setType(SlotType.RESULT); } @Override public void setItem(int index, ItemStack item) { super.setItem(index, item); GlowBlock block = (GlowBlock) getHolder().getBlock(); block.getWorld().requestPulse(block); } @Override public ItemStack getResult() { return getItem(RESULT_SLOT); } @Override public void setResult(ItemStack stack) { setItem(RESULT_SLOT, stack); } @Override public ItemStack getFuel() { return getItem(FUEL_SLOT); } @Override public void setFuel(ItemStack stack) { setItem(FUEL_SLOT, stack); } @Override public ItemStack getSmelting() { return getItem(INPUT_SLOT); } @Override public void setSmelting(ItemStack stack) { setItem(INPUT_SLOT, stack); } @Override public Furnace getHolder() { return (Furnace) super.getHolder(); } @Override public void handleShiftClick(GlowPlayer player, InventoryView view, int clickedSlot, ItemStack clickedItem) { if (getSlotType(view.convertSlot(clickedSlot)) == SlotType.RESULT) { // Place the items in the player's inventory (right to left) clickedItem = player.getInventory().tryToFillSlots(clickedItem, 8, -1, 35, 8); } else { // Clicked in the crafting grid, no special handling required (just place them left to right) clickedItem = player.getInventory().tryToFillSlots(clickedItem, 9, 36, 0, 9); } view.setItem(clickedSlot, clickedItem); } @Override public boolean itemPlaceAllowed(int slot, ItemStack stack) { if (slot == FUEL_SLOT) { return ((GlowServer) Bukkit.getServer()).getCraftingManager().isFuel(stack.getType()) || stack.getType().equals(Material.BUCKET); } return super.itemPlaceAllowed(slot, stack); } }