Search in sources :

Example 1 with ICountWidget

use of me.desht.pneumaticcraft.common.progwidgets.ICountWidget in project pnc-repressurized by TeamPneumatic.

the class DroneEntityAIInventoryExport method export.

private boolean export(BlockPos pos, boolean simulate) {
    TileEntity te = drone.world().getTileEntity(pos);
    if (te != null) {
        for (int i = 0; i < drone.getInv().getSlots(); i++) {
            ItemStack droneStack = drone.getInv().getStackInSlot(i);
            if (!droneStack.isEmpty()) {
                if (widget.isItemValidForFilters(droneStack)) {
                    for (int side = 0; side < 6; side++) {
                        if (((ISidedWidget) widget).getSides()[side]) {
                            droneStack = droneStack.copy();
                            int oldCount = droneStack.getCount();
                            if (((ICountWidget) widget).useCount()) {
                                droneStack.setCount(Math.min(droneStack.getCount(), getRemainingCount()));
                            }
                            ItemStack remainder = IOHelper.insert(te, droneStack.copy(), EnumFacing.getFront(side), simulate);
                            int stackSize = drone.getInv().getStackInSlot(i).getCount() - (remainder.isEmpty() ? droneStack.getCount() : droneStack.getCount() - remainder.getCount());
                            droneStack.setCount(stackSize);
                            int exportedItems = oldCount - stackSize;
                            if (!simulate) {
                                drone.getInv().setStackInSlot(i, stackSize > 0 ? droneStack : ItemStack.EMPTY);
                                decreaseCount(exportedItems);
                            }
                            if (simulate && exportedItems > 0)
                                return true;
                        // if (!(inv instanceof ISidedInventory))
                        // break; //doing it for every side for no side sensitive inventories would be a waste.
                        }
                    }
                    if (droneStack.isEmpty() && !simulate)
                        drone.addAir(null, -PneumaticValues.DRONE_USAGE_INV);
                    else
                        drone.addDebugEntry("gui.progWidget.inventoryExport.debug.filledToMax", pos);
                } else {
                    drone.addDebugEntry("gui.progWidget.inventoryExport.debug.stackdoesntPassFilter", pos);
                }
            }
        }
    } else {
        drone.addDebugEntry("gui.progWidget.inventory.debug.noInventory", pos);
    }
    return false;
}
Also used : TileEntity(net.minecraft.tileentity.TileEntity) ICountWidget(me.desht.pneumaticcraft.common.progwidgets.ICountWidget) ItemStack(net.minecraft.item.ItemStack)

Example 2 with ICountWidget

use of me.desht.pneumaticcraft.common.progwidgets.ICountWidget in project pnc-repressurized by TeamPneumatic.

the class DroneEntityAIInventoryImport method importItems.

private boolean importItems(BlockPos pos, boolean simulate) {
    TileEntity te = drone.world().getTileEntity(pos);
    boolean[] sides = ((ISidedWidget) widget).getSides();
    for (int d = 0; d < sides.length; d++) {
        if (!sides[d]) {
            continue;
        }
        IItemHandler inv = IOHelper.getInventoryForTE(te, EnumFacing.getFront(d));
        if (inv == null) {
            continue;
        }
        for (int i = 0; i < inv.getSlots(); i++) {
            ItemStack stack = inv.getStackInSlot(i);
            if (!stack.isEmpty()) {
                if (widget.isItemValidForFilters(stack)) {
                    ItemStack importedStack = IOHelper.extract(inv, i, true);
                    if (importedStack.isEmpty()) {
                        continue;
                    }
                    if (((ICountWidget) widget).useCount())
                        importedStack.setCount(Math.min(importedStack.getCount(), getRemainingCount()));
                    ItemStack remainder = IOHelper.insert(drone, importedStack.copy(), EnumFacing.UP, simulate);
                    int removedItems = importedStack.getCount() - remainder.getCount();
                    if (!simulate) {
                        inv.extractItem(i, removedItems, false);
                        decreaseCount(removedItems);
                        drone.addAir(null, -PneumaticValues.DRONE_USAGE_INV);
                        if (((ICountWidget) widget).useCount() && getRemainingCount() <= 0) {
                            return false;
                        }
                    } else if (removedItems > 0) {
                        return true;
                    } else {
                        drone.addDebugEntry("gui.progWidget.inventoryImport.debug.filledToMax", pos);
                    }
                } else {
                    drone.addDebugEntry("gui.progWidget.inventoryImport.debug.stackdoesntPassFilter", pos);
                }
            }
        }
    }
    return false;
}
Also used : TileEntity(net.minecraft.tileentity.TileEntity) ISidedWidget(me.desht.pneumaticcraft.common.progwidgets.ISidedWidget) IItemHandler(net.minecraftforge.items.IItemHandler) ICountWidget(me.desht.pneumaticcraft.common.progwidgets.ICountWidget) ItemStack(net.minecraft.item.ItemStack)

Example 3 with ICountWidget

use of me.desht.pneumaticcraft.common.progwidgets.ICountWidget in project pnc-repressurized by TeamPneumatic.

the class DroneAILiquidImport method emptyTank.

private boolean emptyTank(BlockPos pos, boolean simulate) {
    if (drone.getTank().getFluidAmount() == drone.getTank().getCapacity()) {
        drone.addDebugEntry("gui.progWidget.liquidImport.debug.fullDroneTank");
        abort();
        return false;
    } else {
        TileEntity te = drone.world().getTileEntity(pos);
        if (te != null) {
            for (int i = 0; i < 6; i++) {
                if (((ISidedWidget) widget).getSides()[i] && te.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, EnumFacing.getFront(i))) {
                    IFluidHandler handler = te.getCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY, EnumFacing.getFront(i));
                    FluidStack importedFluid = handler.drain(Integer.MAX_VALUE, false);
                    if (importedFluid != null && ((ILiquidFiltered) widget).isFluidValid(importedFluid.getFluid())) {
                        int filledAmount = drone.getTank().fill(importedFluid, false);
                        if (filledAmount > 0) {
                            if (((ICountWidget) widget).useCount())
                                filledAmount = Math.min(filledAmount, getRemainingCount());
                            if (!simulate) {
                                decreaseCount(drone.getTank().fill(handler.drain(filledAmount, true), true));
                            }
                            return true;
                        }
                    }
                }
            }
            drone.addDebugEntry("gui.progWidget.liquidImport.debug.emptiedToMax", pos);
        } else if (!((ICountWidget) widget).useCount() || getRemainingCount() >= 1000) {
            Fluid fluid = FluidRegistry.lookupFluidForBlock(drone.world().getBlockState(pos).getBlock());
            if (fluid != null && ((ILiquidFiltered) widget).isFluidValid(fluid) && drone.getTank().fill(new FluidStack(fluid, 1000), false) == 1000 && FluidUtils.isSourceBlock(drone.world(), pos)) {
                if (!simulate) {
                    decreaseCount(1000);
                    drone.getTank().fill(new FluidStack(fluid, 1000), true);
                    drone.world().setBlockToAir(pos);
                }
                return true;
            }
        }
        return false;
    }
}
Also used : TileEntity(net.minecraft.tileentity.TileEntity) ISidedWidget(me.desht.pneumaticcraft.common.progwidgets.ISidedWidget) ILiquidFiltered(me.desht.pneumaticcraft.common.progwidgets.ILiquidFiltered) FluidStack(net.minecraftforge.fluids.FluidStack) Fluid(net.minecraftforge.fluids.Fluid) ICountWidget(me.desht.pneumaticcraft.common.progwidgets.ICountWidget) IFluidHandler(net.minecraftforge.fluids.capability.IFluidHandler)

Aggregations

ICountWidget (me.desht.pneumaticcraft.common.progwidgets.ICountWidget)3 TileEntity (net.minecraft.tileentity.TileEntity)3 ISidedWidget (me.desht.pneumaticcraft.common.progwidgets.ISidedWidget)2 ItemStack (net.minecraft.item.ItemStack)2 ILiquidFiltered (me.desht.pneumaticcraft.common.progwidgets.ILiquidFiltered)1 Fluid (net.minecraftforge.fluids.Fluid)1 FluidStack (net.minecraftforge.fluids.FluidStack)1 IFluidHandler (net.minecraftforge.fluids.capability.IFluidHandler)1 IItemHandler (net.minecraftforge.items.IItemHandler)1