Search in sources :

Example 1 with IExtendedStorage

use of com.builtbroken.mc.api.tile.IExtendedStorage in project Engine by VoltzEngine-Project.

the class InternalInventoryHandler method tryPlaceInPosition.

/**
 * Tries to place an itemStack in a specific position if it is an inventory.
 *
 * @return The ItemStack remained after place attempt
 */
public ItemStack tryPlaceInPosition(ItemStack itemStack, Pos position, ForgeDirection dir) {
    TileEntity tileEntity = position.getTileEntity(world);
    ForgeDirection direction = dir.getOpposite();
    if (tileEntity != null && itemStack != null) {
        if (tileEntity instanceof TileEntityChest) {
            TileEntityChest[] chests = { (TileEntityChest) tileEntity, null };
            /**
             * Try to find a double chest.
             */
            for (int i = 2; i < 6; i++) {
                ForgeDirection searchDirection = ForgeDirection.getOrientation(i);
                Pos searchPosition = position.clone();
                searchPosition.add(searchDirection);
                if (searchPosition.getTileEntity(world) != null) {
                    if (searchPosition.getTileEntity(world).getClass() == chests[0].getClass()) {
                        chests[1] = (TileEntityChest) searchPosition.getTileEntity(world);
                        break;
                    }
                }
            }
            for (TileEntityChest chest : chests) {
                if (chest != null) {
                    for (int i = 0; i < chest.getSizeInventory(); i++) {
                        itemStack = this.addStackToInventory(i, chest, itemStack);
                        if (itemStack == null) {
                            return null;
                        }
                    }
                }
            }
        } else if (tileEntity instanceof IExtendedStorage) {
            return ((IExtendedStorage) tileEntity).addStackToStorage(itemStack);
        } else if (tileEntity instanceof ISidedInventory) {
            ISidedInventory inventory = (ISidedInventory) tileEntity;
            int[] slots = inventory.getAccessibleSlotsFromSide(direction.ordinal());
            for (int i = 0; i < slots.length; i++) {
                if (inventory.canInsertItem(slots[i], itemStack, direction.ordinal())) {
                    itemStack = this.addStackToInventory(slots[i], inventory, itemStack);
                }
                if (itemStack == null) {
                    return null;
                }
            }
        } else if (tileEntity instanceof IInventory) {
            IInventory inventory = (IInventory) tileEntity;
            for (int i = 0; i < inventory.getSizeInventory(); i++) {
                itemStack = this.addStackToInventory(i, inventory, itemStack);
                if (itemStack == null) {
                    return null;
                }
            }
        }
    }
    if (itemStack == null || itemStack.stackSize <= 0) {
        return null;
    }
    return itemStack;
}
Also used : TileEntity(net.minecraft.tileentity.TileEntity) ISidedInventory(net.minecraft.inventory.ISidedInventory) IInventory(net.minecraft.inventory.IInventory) TileEntityChest(net.minecraft.tileentity.TileEntityChest) IExtendedStorage(com.builtbroken.mc.api.tile.IExtendedStorage) Pos(com.builtbroken.mc.lib.transform.vector.Pos) ForgeDirection(net.minecraftforge.common.util.ForgeDirection)

Aggregations

IExtendedStorage (com.builtbroken.mc.api.tile.IExtendedStorage)1 Pos (com.builtbroken.mc.lib.transform.vector.Pos)1 IInventory (net.minecraft.inventory.IInventory)1 ISidedInventory (net.minecraft.inventory.ISidedInventory)1 TileEntity (net.minecraft.tileentity.TileEntity)1 TileEntityChest (net.minecraft.tileentity.TileEntityChest)1 ForgeDirection (net.minecraftforge.common.util.ForgeDirection)1