@Override public int fill(FluidStack resource) { FluidTank inputTank = tankAccess.getInputTank(resource); if (inputTank != null) { tankAccess.setTanksDirty(); return inputTank.fill(resource, true); } return 0; }
@Override @Nullable public FluidStack drain(FluidStack resource) { FluidTank[] outputTanks = tankAccess.getOutputTanks(); if (outputTanks.length >= 1 && outputTanks[0] != null) { tankAccess.setTanksDirty(); return outputTanks[0].drain(resource, true); } return null; }
@Override protected void onContentsChanged() { super.onContentsChanged(); if (tile instanceof ITankAccess) { ((ITankAccess) tile).setTanksDirty(); } else if (tile != null) { tile.markDirty(); } }
@Override public int offer(FluidStack resource) { FluidTank inputTank = tankAccess.getInputTank(resource); if (inputTank != null) { return inputTank.fill(resource, false); } return 0; }
@Override public @Nonnull FluidTank[] getOutputTanks() { return owner.getOutputTanks(); }
@Override protected void onContentsChanged() { super.onContentsChanged(); if (tile instanceof ITankAccess) { ((ITankAccess) tile).setTanksDirty(); } else if (tile != null) { tile.markDirty(); } }
public static @Nonnull FluidAndStackResult tryDrainContainer(@Nonnull ItemStack source, @Nonnull ITankAccess tank) { FluidAndStackResult result = new FluidAndStackResult(null, ItemStack.EMPTY, null, source); if (source.isEmpty()) { return result; } IFluidHandlerItem handler = getFluidHandlerCapability(source); if (handler == null) { return result; } FluidStack contentType = getFluidTypeFromItem(source); if (contentType == null) { return result; } FluidTank targetTank = tank.getInputTank(contentType); if (targetTank == null) { return result; } return tryDrainContainer(source, targetTank.getFluid(), targetTank.getCapacity()); }
@Override @Nullable public FluidStack getAvailableFluid() { FluidTank[] outputTanks = tankAccess.getOutputTanks(); if (outputTanks.length >= 1 && outputTanks[0] != null) { return outputTanks[0].getFluid(); } return null; }
@Override public void setTanksDirty() { if (tank != null) { FluidStack stack = tank.getFluid(); if (stack != null && stack.amount > 0) { for (ITankAccess parent : parents) { FluidTank ptank = parent.getInputTank(stack); if (ptank != null) { stack.amount -= ptank.fill(stack, true); parent.setTanksDirty(); if (stack.amount <= 0) { return; } } } } tank.setCapacity(0); parents.clear(); } }
boolean doFill = !(entityPlayer.capabilities.isCreativeMode && heldItem.getItem() == Items.BUCKET); for (FluidTank subTank : tank.getOutputTanks()) { FluidAndStackResult fill = tryFillContainer(entityPlayer.getHeldItem(hand), subTank.getFluid()); if (fill.result.fluidStack != null) { tank.setTanksDirty(); if (doFill) { if (fill.remainder.itemStack.isEmpty()) {
@Override public FluidTank getInputTank(FluidStack forFluidType) { FluidTank ownerTank = owner.getInputTank(forFluidType); if (ownerTank == null) { return null; } parents.clear(); int free = ownerTank.getCapacity() - ownerTank.getFluidAmount(); if (free > 0) { parents.add(owner); } for (NNIterator<EnumFacing> itr = NNList.FACING.fastIterator(); itr.hasNext();) { TileEntity neighbor = world.getTileEntity(pos.offset(itr.next())); if (neighbor instanceof ITankAccess) { FluidTank tank2 = ((ITankAccess) neighbor).getInputTank(forFluidType); if (tank2 != null) { free += tank2.getCapacity() - tank2.getFluidAmount(); parents.add(((ITankAccess) neighbor)); } } } if (allowFluidVoiding && free < Fluid.BUCKET_VOLUME) { free = Fluid.BUCKET_VOLUME; } final FluidStack fluid = ownerTank.getFluid(); return tank = new SmartTank(fluid != null ? fluid.getFluid() : null, free); }
final FluidTank inputTank = tank.getInputTank(fill.result.fluidStack); if (inputTank == null) { return false; tank.setTanksDirty();