Example usage for net.minecraftforge.fluids IFluidTank drain

List of usage examples for net.minecraftforge.fluids IFluidTank drain

Introduction

In this page you can find the example usage for net.minecraftforge.fluids IFluidTank drain.

Prototype

@Nonnull
FluidStack drain(FluidStack resource, FluidAction action);

Source Link

Usage

From source file:buildcraft.core.fluids.FluidUtils.java

License:Minecraft Mod Public

public static void pushFluidToConsumers(IFluidTank tank, int flowCap, TileBuffer[] tileBuffer) {
    int amountToPush = flowCap;
    for (ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) {
        FluidStack fluidStack = tank.drain(amountToPush, false);
        if (fluidStack != null && fluidStack.amount > 0) {
            TileEntity tile = tileBuffer[side.ordinal()].getTile();
            if (tile instanceof IFluidHandler) {
                int used = ((IFluidHandler) tile).fill(side.getOpposite(), fluidStack, true);
                if (used > 0) {
                    amountToPush -= used;
                    tank.drain(used, true);
                    if (amountToPush <= 0) {
                        return;
                    }//  w ww .j ava  2s  . c om
                }
            }
        }
    }
}

From source file:com.builtbroken.atomic.content.machines.processing.TileEntityProcessingMachine.java

/**
 * Outputs fluids to container in slot/*from  w ww  . j  a va 2  s  .  c o  m*/
 *
 * @param slot       - slot with container
 * @param outputTank - tank to drain
 */
protected void outputFluids(final int slot, final IFluidTank outputTank) {
    final ItemStack itemStack = getStackInSlot(slot);
    if (itemStack != null && outputTank.getFluid() != null) {
        if (itemStack.getItem() instanceof IFluidContainerItem) {
            //Copy stack (fix for containers that can stack when empty)
            final ItemStack fluidContainer = itemStack.copy();
            fluidContainer.stackSize = 1;

            IFluidContainerItem fluidContainerItem = (IFluidContainerItem) fluidContainer.getItem();
            FluidStack fluidStack = fluidContainerItem.getFluid(fluidContainer);
            if (fluidStack == null || fluidStack.getFluid() == outputTank.getFluid().getFluid()) {
                int filled = fluidContainerItem.fill(fluidContainer, outputTank.getFluid(), true);
                outputTank.drain(filled, true);

                if (itemStack.stackSize == 1) {
                    setInventorySlotContents(slot, fluidContainer);
                } else {
                    decrStackSize(slot, 1);

                    //TODO add fluid container output slot
                    EntityItem item = new EntityItem(worldObj);
                    item.setPosition(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5);
                    item.setEntityItemStack(fluidContainer);
                    worldObj.spawnEntityInWorld(item);
                }
            }
        } else if (FluidContainerRegistry.isEmptyContainer(itemStack)) {
            ItemStack filledContainer = FluidContainerRegistry.fillFluidContainer(outputTank.getFluid(),
                    itemStack);
            if (filledContainer != null) {
                FluidStack fluidStack = FluidContainerRegistry.getFluidForFilledItem(filledContainer);
                if (fluidStack.getFluid() == outputTank.getFluid().getFluid()
                        && fluidStack.amount <= outputTank.getFluidAmount()) {
                    outputTank.drain(fluidStack.amount, true);
                    decrStackSize(slot, 1);

                    if (getStackInSlot(slot) == null) {
                        setInventorySlotContents(slot, filledContainer);
                    } else {
                        //TODO add fluid container output slot
                        EntityItem item = new EntityItem(worldObj);
                        item.setPosition(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5);
                        item.setEntityItemStack(filledContainer);
                        worldObj.spawnEntityInWorld(item);
                    }
                }
            }
        }
    }
}

From source file:com.builtbroken.atomic.content.machines.processing.TileEntityProcessingMachine.java

/**
 * Outputs fluids to connected tiles//from  w  w  w  . j  av a  2 s  .c  o m
 *
 * @param outputTank - tank to drain
 */
protected void outputFluidToTiles(IFluidTank outputTank, Function<ForgeDirection, Boolean> canUseSideFunction) {
    if (outputTank.getFluid() != null) {
        for (ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS) {
            if (canUseSideFunction == null || canUseSideFunction.apply(direction)) {
                int x = xCoord + direction.offsetX;
                int y = yCoord + direction.offsetY;
                int z = zCoord + direction.offsetZ;

                if (worldObj.blockExists(x, y, z)) {
                    TileEntity tile = worldObj.getTileEntity(x, y, z);
                    if (tile instanceof IFluidHandler && outputTank.getFluid() != null && ((IFluidHandler) tile)
                            .canFill(direction.getOpposite(), outputTank.getFluid().getFluid())) {
                        int fill = ((IFluidHandler) tile).fill(direction.getOpposite(), outputTank.getFluid(),
                                true);
                        outputTank.drain(fill, true);
                    }
                }
            }
        }
    }
}

From source file:com.buuz135.industrial.proxy.block.upgrade.ConveyorInsertionUpgrade.java

License:Open Source License

@Override
public void update() {
    if (getWorld().isRemote)
        return;/*w  w  w .  jav  a2s  . co  m*/
    if (getWorld().getTotalWorldTime() % 2 == 0 && getContainer() instanceof TileEntityConveyor) {
        IFluidTank tank = ((TileEntityConveyor) getContainer()).getTank();
        IFluidHandler fluidHandler = getHandlerCapability(CapabilityFluidHandler.FLUID_HANDLER_CAPABILITY);
        if (fluidHandler != null && tank.drain(50, false) != null
                && fluidHandler.fill(tank.drain(50, false), false) > 0
                && whitelist == filter.matches(tank.drain(50, false))) {
            FluidStack drain = tank.drain(fluidHandler.fill(tank.drain(50, false), true), true);
            if (drain != null && drain.amount > 0)
                getContainer().requestFluidSync();
        }
    }
}