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.BlockLiquid;
import net.glowstone.block.blocktype.BlockType;
import net.glowstone.block.itemtype.ItemFilledBucket;
import org.bukkit.Material;
import org.bukkit.block.BlockFace;
import org.bukkit.inventory.ItemStack;
public class BucketDispenseBehavior extends DefaultDispenseBehavior {
DefaultDispenseBehavior defaultBehavior = new DefaultDispenseBehavior();
@Override
protected ItemStack dispenseStack(GlowBlock block, ItemStack stack) {
ItemFilledBucket bucket = (ItemFilledBucket) ItemTable.instance().getItem(stack.getType());
BlockLiquid liquid = (BlockLiquid) bucket.getLiquid();
BlockFace facing = BlockDispenser.getFacing(block);
GlowBlock target = block.getRelative(facing);
if (canPlace(target, facing, stack)) {
target.setType(liquid.getMaterial());
stack.setType(Material.BUCKET);
stack.setAmount(1);
return stack;
} else {
return defaultBehavior.dispense(block, stack);
}
}
private boolean canPlace(GlowBlock target, BlockFace facing, ItemStack stack) {
if (!target.isEmpty()) {
BlockType targetType = ItemTable.instance().getBlock(target.getTypeId());
//noinspection ConstantConditions
if (!targetType.canOverride(target, facing.getOppositeFace(), stack)) {
return false;
}
}
return true;
}
}