package net.glowstone.dispenser; import net.glowstone.block.GlowBlock; import net.glowstone.block.ItemTable; import net.glowstone.block.blocktype.BlockDispenser; import net.glowstone.block.blocktype.BlockTNT; import net.glowstone.block.itemtype.ItemTool; import net.glowstone.block.itemtype.ItemType; import org.bukkit.Effect; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; public class FlintAndSteelDispenseBehavior extends DefaultDispenseBehavior { private boolean successful = true; @Override protected ItemStack dispenseStack(GlowBlock block, ItemStack stack) { GlowBlock target = block.getRelative(BlockDispenser.getFacing(block)); successful = true; if (target.getType() == Material.AIR) { target.setType(Material.FIRE); stack.setDurability((short) (stack.getDurability() + 1)); ItemType type = ItemTable.instance().getItem(stack.getType()); if (!(type instanceof ItemTool)) { return stack; } ItemTool toolType = (ItemTool) type; if (stack.getDurability() > toolType.getMaxDurability()) { stack.setAmount(0); } } else if (target.getType() == Material.TNT) { BlockTNT.igniteBlock(target, false); } else { successful = false; } return stack.getAmount() > 0 ? stack : null; } @Override protected void playDispenseSound(GlowBlock block) { Effect effect = successful ? Effect.CLICK2 : Effect.CLICK1; block.getWorld().playEffect(block.getLocation(), effect, 0); } }