package net.glowstone.block.blocktype; import net.glowstone.block.GlowBlock; import net.glowstone.entity.GlowPlayer; import net.glowstone.inventory.GlowItemFactory; import net.glowstone.inventory.MaterialMatcher; import net.glowstone.inventory.ToolType; import org.bukkit.GameMode; import org.bukkit.Material; import org.bukkit.block.BlockFace; import org.bukkit.block.banner.Pattern; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.BannerMeta; import org.bukkit.inventory.meta.LeatherArmorMeta; import org.bukkit.util.Vector; import java.util.Arrays; import java.util.Collection; import java.util.List; import java.util.Map; public class BlockCauldron extends BlockNeedsTool { private static final Collection<ItemStack> DROP = Arrays.asList(new ItemStack(Material.CAULDRON_ITEM)); @Override public boolean blockInteract(GlowPlayer player, GlowBlock block, BlockFace face, Vector clickedLoc) { if (player.getItemInHand() == null) { return super.blockInteract(player, block, face, clickedLoc); } switch (player.getItemInHand().getType()) { case WATER_BUCKET: fillCauldron(player, block); return true; case GLASS_BOTTLE: fillBottle(player, block); return true; case LEATHER_BOOTS: case LEATHER_LEGGINGS: case LEATHER_CHESTPLATE: case LEATHER_HELMET: return bleachLeatherArmor(player, block); case BANNER: return bleachBanner(player, block); default: return super.blockInteract(player, block, face, clickedLoc); } } private void fillCauldron(GlowPlayer player, GlowBlock block) { if (block.getData() < 3) { if (player.getGameMode() != GameMode.CREATIVE) { player.getItemInHand().setType(Material.BUCKET); } block.setData((byte) 3); } } private void fillBottle(GlowPlayer player, GlowBlock block) { if (block.getData() > 0) { block.setData((byte) (block.getData() - 1)); if (player.getGameMode() != GameMode.CREATIVE) { Map<Integer, ItemStack> drops = player.getInventory().addItem(new ItemStack(Material.POTION)); if (!drops.isEmpty()) { player.getWorld().dropItemNaturally(player.getLocation(), new ItemStack(Material.POTION)); } player.getItemInHand().setAmount(player.getItemInHand().getAmount() - 1); } } } private boolean bleachBanner(GlowPlayer player, GlowBlock block) { if (player.getGameMode() == GameMode.CREATIVE) return false; if (block.getData() > 0) { ItemStack inHand = player.getItemInHand(); BannerMeta meta = (BannerMeta) inHand.getItemMeta(); List<Pattern> layers = meta.getPatterns(); if (layers == null || layers.isEmpty()) { return false; } meta.setPatterns(layers); inHand.setItemMeta(meta); block.setData((byte) (block.getData() - 1)); return true; } else { return false; } } private boolean bleachLeatherArmor(GlowPlayer player, GlowBlock block) { if (block.getData() > 0) { ItemStack inHand = player.getItemInHand(); LeatherArmorMeta im = (LeatherArmorMeta) inHand.getItemMeta(); im.setColor(GlowItemFactory.instance().getDefaultLeatherColor()); inHand.setItemMeta(im); block.setData((byte) (block.getData() - 1)); return true; } else { return false; } } @Override public Collection<ItemStack> getMinedDrops(GlowBlock block) { return DROP; } @Override protected MaterialMatcher getNeededMiningTool(GlowBlock block) { return ToolType.PICKAXE; } }