List of usage examples for net.minecraftforge.fluids IFluidTank drain
@Nonnull FluidStack drain(FluidStack resource, FluidAction action);
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(); } } }