@Override protected boolean drawEnergy(int recipeEUt) { int resultDraw = (int) Math.floor(recipeEUt / conversionRate); return resultDraw >= 0 && steamFluidTank.getFluidAmount() >= resultDraw && steamFluidTank.drain(resultDraw, true) != null; }
public boolean liquidInTank(final int tankIndex, final int amount) { IFluidTank tank = this.getTank(tankIndex); FluidStack drain = tank.drain(amount, false); return drain != null && drain.amount == amount; }
@Nullable public FluidStack drainTank(final int tank, final int amount) { return this.getTank(tank).drain(amount, true); }
private void tryAcquireNewRecipe() { IMultipleTankHandler fluidTanks = this.fluidTank.get(); for(IFluidTank fluidTank : fluidTanks) { FluidStack tankContents = fluidTank.getFluid(); if(tankContents != null && tankContents.amount > 0) { int fuelAmountUsed = tryAcquireNewRecipe(tankContents); if(fuelAmountUsed > 0) { fluidTank.drain(fuelAmountUsed, true); break; //recipe is found and ready to use } } } }
@Nullable @Override public FluidStack drain(int maxDrain, boolean doDrain) { if (maxDrain == 0) { return null; } FluidStack totalDrained = null; for (IFluidTank handler : fluidTanks) { if (totalDrained == null) { totalDrained = handler.drain(maxDrain, doDrain); if (totalDrained != null) maxDrain -= totalDrained.amount; } else { FluidStack copy = totalDrained.copy(); copy.amount = maxDrain; if (!copy.isFluidEqual(handler.getFluid())) continue; FluidStack drain = handler.drain(copy.amount, doDrain); if (drain != null) { totalDrained.amount += drain.amount; maxDrain -= drain.amount; } } if (maxDrain <= 0) break; } return totalDrained; }
@Override public FluidStack drain(int maxDrain, boolean doDrain) { IFluidTank tank = getTank(); if (tank == null) { return null; } if (!canDrainFluidType(tank.getFluid())) { return null; } return tank.drain(maxDrain, doDrain); }
@Nullable @Override public FluidStack drain(FluidStack resource, boolean doDrain) { if (resource == null || resource.amount <= 0) { return null; } resource = resource.copy(); FluidStack totalDrained = null; for (IFluidTank handler : fluidTanks) { if (!resource.isFluidEqual(handler.getFluid())) { continue; } FluidStack drain = handler.drain(resource.amount, doDrain); if (drain == null) { continue; } if (totalDrained == null) { totalDrained = drain; } else totalDrained.amount += drain.amount; resource.amount -= drain.amount; if (resource.amount == 0) break; } return totalDrained; }
@Override public FluidStack drain(FluidStack resource, boolean doDrain) { IFluidTank tank = getTank(); if (tank == null) { return null; } FluidStack f = tank.getFluid(); if (!canDrainFluidType(f) || resource == null || f == null || !resource.isFluidEqual(f)) { return null; } return tank.drain(resource.amount, doDrain); }
private int setupRecipeAndConsumeInputs() { for(IFluidTank fluidTank : fluidImportInventory.getFluidTanks()) { FluidStack fuelStack = fluidTank.drain(Integer.MAX_VALUE, false); if(fuelStack == null || fuelStack.getFluid() == FluidRegistry.WATER) continue; //ignore empty tanks and water int fuelAmountToConsume = (int) (dieselRecipe.getRecipeFluid().amount * CONSUMPTION_MULTIPLIER * boilerType.fuelConsumptionMultiplier); if(fuelStack.amount >= fuelAmountToConsume) { fluidTank.drain(fuelAmountToConsume, true); long recipeVoltage = FuelRecipeMapWorkableHandler.getTieredVoltage(dieselRecipe.getMinVoltage()); int voltageMultiplier = (int) Math.max(1L, recipeVoltage / GTValues.V[GTValues.LV]); int fuelAmountToConsume = (int) (denseFuelRecipe.getRecipeFluid().amount * CONSUMPTION_MULTIPLIER * boilerType.fuelConsumptionMultiplier); if(fuelStack.amount >= fuelAmountToConsume) { fluidTank.drain(fuelAmountToConsume, true); long recipeVoltage = FuelRecipeMapWorkableHandler.getTieredVoltage(denseFuelRecipe.getMinVoltage()); int voltageMultiplier = (int) Math.max(1L, recipeVoltage / GTValues.V[GTValues.LV]);
public void pushFluidsIntoNearbyHandlers(EnumFacing... allowedFaces) { PooledMutableBlockPos blockPos = PooledMutableBlockPos.retain(); for(EnumFacing nearbyFacing : allowedFaces) { blockPos.setPos(getPos()).move(nearbyFacing); IFluidHandler fluidHandler = FluidUtil.getFluidHandler(getWorld(), blockPos, nearbyFacing.getOpposite()); if(fluidHandler == null) continue; for(int tankIndex = 0; tankIndex < exportFluids.getTanks(); tankIndex++) { IFluidTank tank = exportFluids.getTankAt(tankIndex); FluidStack fluidStack = tank.getFluid(); if(fluidStack != null && fluidHandler.fill(fluidStack, false) != 0) { int filledAmount = fluidHandler.fill(fluidStack, true); tank.drain(filledAmount, true); } } } blockPos.release(); }
FluidStack fillAmount = ((FluidTank) tank).drainInternal(Fluid.BUCKET_VOLUME, true); int filled = fluidHandlerItem.fill(fillAmount, true); tank.drain(filled, true); player.inventory.setItemStack(fluidHandlerItem.getContainer()); player.updateHeldItem();