Package com.sk89q.craftbook.mechanics.ic.gates.world.blocks

Source Code of com.sk89q.craftbook.mechanics.ic.gates.world.blocks.SetBlock

package com.sk89q.craftbook.mechanics.ic.gates.world.blocks;

import java.util.Locale;

import org.bukkit.Material;
import org.bukkit.Server;
import org.bukkit.block.Block;
import org.bukkit.block.BlockState;
import org.bukkit.block.Chest;
import org.bukkit.inventory.ItemStack;

import com.sk89q.craftbook.ChangedSign;
import com.sk89q.craftbook.mechanics.ic.AbstractSelfTriggeredIC;
import com.sk89q.craftbook.mechanics.ic.ChipState;
import com.sk89q.craftbook.mechanics.ic.ICFactory;
import com.sk89q.craftbook.util.ItemInfo;

public abstract class SetBlock extends AbstractSelfTriggeredIC {

    public SetBlock(Server server, ChangedSign sign, ICFactory factory) {

        super(server, sign, factory);
    }

    ItemInfo item;
    String force;

    @Override
    public void load() {

        force = getSign().getLine(3).toUpperCase(Locale.ENGLISH).trim();

        item = new ItemInfo(getLine(2));
    }

    public void onTrigger() {

        Block body = getBackBlock();

        doSet(body, item, force.equals("FORCE"));
    }

    @Override
    public void trigger(ChipState chip) {

        chip.setOutput(0, chip.getInput(0));

        onTrigger();
    }

    @Override
    public void think(ChipState chip) {

        onTrigger();
    }

    protected abstract void doSet(Block block, ItemInfo item, boolean force);

    public boolean takeFromChest(Block bl, ItemInfo item) {

        if (bl.getType() != Material.CHEST) {
            return false;
        }
        BlockState state = bl.getState();
        if (!(state instanceof Chest)) {
            return false;
        }
        Chest c = (Chest) state;
        ItemStack[] is = c.getInventory().getContents();
        for (int i = 0; i < is.length; i++) {
            final ItemStack stack = is[i];
            if (stack == null) {
                continue;
            }
            if (stack.getAmount() > 0 && stack.getType() == item.getType()) {
                if (item.getData() != -1 && stack.getData().getData() != item.getData()) {
                    continue;
                }
                if (stack.getAmount() == 1) {
                    is[i] = new ItemStack(Material.AIR, 0);
                } else {
                    stack.setAmount(stack.getAmount() - 1);
                }
                c.getInventory().setContents(is);
                c.update();
                return true;
            }
        }
        return false;
    }
}
TOP

Related Classes of com.sk89q.craftbook.mechanics.ic.gates.world.blocks.SetBlock

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.