Package mods.railcraft.common.blocks.detector.types

Source Code of mods.railcraft.common.blocks.detector.types.DetectorItem

/*
* Copyright (c) CovertJaguar, 2014 http://railcraft.info
*
* This code is the property of CovertJaguar
* and may only be used with explicit written
* permission unless otherwise specified on the
* license page at http://railcraft.info/wiki/info:license.
*/
package mods.railcraft.common.blocks.detector.types;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.List;
import java.util.Locale;
import mods.railcraft.common.blocks.detector.DetectorFilter;
import mods.railcraft.common.blocks.detector.EnumDetector;
import mods.railcraft.common.gui.EnumGui;
import mods.railcraft.common.gui.slots.ISlotController;
import mods.railcraft.common.plugins.forge.LocalizationPlugin;
import mods.railcraft.common.util.inventory.InvTools;

import static mods.railcraft.common.plugins.forge.PowerPlugin.*;

import net.minecraft.entity.item.EntityMinecart;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;

import net.minecraft.nbt.NBTTagCompound;

/**
*
* @author CovertJaguar <http://www.railcraft.info/>
*/
public class DetectorItem extends DetectorFilter {

    public enum PrimaryMode {

        EMPTY, FULL, ANYTHING, FILTERED, NOT_EMPTY, ANALOG;

        @Override
        public String toString() {
            return LocalizationPlugin.translate("railcraft.gui.detector.item." + name().toLowerCase(Locale.ENGLISH));
        }

    };

    public enum FilterMode {

        AT_LEAST, AT_MOST, EXACTLY;

        @Override
        public String toString() {
            return LocalizationPlugin.translate("railcraft.gui.detector.item." + name().toLowerCase(Locale.ENGLISH));
        }

    };
    private PrimaryMode primaryMode = PrimaryMode.ANYTHING;
    private FilterMode filterMode = FilterMode.AT_LEAST;

    public DetectorItem() {
        super(9);
    }

    @Override
    public int testCarts(List<EntityMinecart> carts) {
        for (EntityMinecart cart : carts) {
            IInventory cartInv = null;
            if (cart instanceof IInventory) {
                cartInv = (IInventory) cart;
            }
            if (cartInv != null && cartInv.getSizeInventory() > 0) {
                switch (primaryMode) {
                    case ANYTHING:
                        return FULL_POWER;
                    case EMPTY:
                        if (InvTools.isInventoryEmpty(cartInv)) {
                            return FULL_POWER;
                        }
                        continue;
                    case FULL:
                        if (InvTools.isInventoryFull(cartInv)) {
                            return FULL_POWER;
                        }
                        continue;
                    case FILTERED:
                        if (matchesFilter(cartInv)) {
                            return FULL_POWER;
                        }
                        continue;
                    case NOT_EMPTY:
                        if (!InvTools.isInventoryEmpty(cartInv)) {
                            return FULL_POWER;
                        }
                        continue;
                    case ANALOG:
                        return Container.calcRedstoneFromInventory(cartInv);
                }
            }
        }
        return NO_POWER;
    }

    private boolean matchesFilter(IInventory cartInv) {
        for (int i = 0; i < getFilters().getSizeInventory(); i++) {
            ItemStack filter = getFilters().getStackInSlot(i);
            if (filter == null) {
                continue;
            }
            int amountFilter = InvTools.countItems(getFilters(), filter);
            int amountCart = InvTools.countItems(cartInv, filter);

            switch (filterMode) {
                case EXACTLY:
                    if (amountCart != amountFilter) {
                        return false;
                    }
                    break;
                case AT_LEAST:
                    if (amountCart < amountFilter) {
                        return false;
                    }
                    break;
                case AT_MOST:
                    if (amountCart > amountFilter) {
                        return false;
                    }
                    break;
            }
        }
        return true;
    }

    @Override
    public void writeToNBT(NBTTagCompound data) {
        super.writeToNBT(data);

        data.setByte("primaryMode", (byte) primaryMode.ordinal());
        data.setByte("filterMode", (byte) filterMode.ordinal());
    }

    @Override
    public void readFromNBT(NBTTagCompound data) {
        super.readFromNBT(data);

        primaryMode = PrimaryMode.values()[data.getByte("primaryMode")];
        filterMode = FilterMode.values()[data.getByte("filterMode")];
    }

    @Override
    public void writePacketData(DataOutputStream data) throws IOException {
        super.writePacketData(data);

        data.writeByte((byte) primaryMode.ordinal());
        data.writeByte((byte) filterMode.ordinal());
    }

    @Override
    public void readPacketData(DataInputStream data) throws IOException {
        super.readPacketData(data);

        primaryMode = PrimaryMode.values()[data.readByte()];
        filterMode = FilterMode.values()[data.readByte()];
    }

    @Override
    public void writeGuiData(DataOutputStream data) throws IOException {
        data.writeByte((byte) primaryMode.ordinal());
        data.writeByte((byte) filterMode.ordinal());
    }

    @Override
    public void readGuiData(DataInputStream data, EntityPlayer sender) throws IOException {
        primaryMode = PrimaryMode.values()[data.readByte()];
        filterMode = FilterMode.values()[data.readByte()];
    }

    @Override
    public boolean blockActivated(EntityPlayer player) {
        openGui(EnumGui.DETECTOR_ITEM, player);
        return true;
    }

    public PrimaryMode getPrimaryMode() {
        return primaryMode;
    }

    public FilterMode getFilterMode() {
        return filterMode;
    }

    public void setPrimaryMode(PrimaryMode primaryMode) {
        this.primaryMode = primaryMode;
    }

    public void setFilterMode(FilterMode filterMode) {
        this.filterMode = filterMode;
    }

    public ISlotController getSlotController() {
        return new ISlotController() {
            @Override
            public boolean isSlotEnabled() {
                return getPrimaryMode() == PrimaryMode.FILTERED;
            }

        };
    }

    @Override
    public EnumDetector getType() {
        return EnumDetector.ITEM;
    }

}
TOP

Related Classes of mods.railcraft.common.blocks.detector.types.DetectorItem

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.