@Override public int offer(FluidStack resource) { FluidTank inputTank = tankAccess.getInputTank(resource); if (inputTank != null) { return inputTank.fill(resource, false); } return 0; }
@Override public int fill(FluidStack resource) { FluidTank inputTank = tankAccess.getInputTank(resource); if (inputTank != null) { tankAccess.setTanksDirty(); return inputTank.fill(resource, true); } return 0; }
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 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(); } }
final FluidTank inputTank = tank.getInputTank(fill.result.fluidStack); if (inputTank == null) { return false;
@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); }