List of usage examples for net.minecraftforge.fluids.capability IFluidHandlerItem drain
@Nonnull FluidStack drain(FluidStack resource, FluidAction action);
From source file:blusunrize.immersiveengineering.common.crafting.RecipeShapedIngredient.java
@Override public NonNullList<ItemStack> getRemainingItems(InventoryCrafting inv) //getRecipeLeftovers { NonNullList<ItemStack> remains = NonNullList.withSize(inv.getSizeInventory(), ItemStack.EMPTY); for (int yy = 0; yy < this.height; yy++) for (int xx = 0; xx < this.width; xx++) { int i = this.width * yy + xx; int transposedI = inv.getWidth() * (yy + lastStartY) + (xx + lastStartX); ItemStack s = inv.getStackInSlot(transposedI); NonNullList<Ingredient> matchedIngr = lastMatch == 1 ? ingredientsQuarterTurn : lastMatch == 2 ? ingredientsEighthTurn : this.input; if (matchedIngr.get(i) instanceof IngredientFluidStack) { IFluidHandlerItem handler = FluidUtil .getFluidHandler(s.getCount() > 1 ? Utils.copyStackWithAmount(s, 1) : s); if (handler != null) { FluidStack fluid = ((IngredientFluidStack) matchedIngr.get(i)).getFluid(); handler.drain(fluid.amount, true); remains.set(transposedI, handler.getContainer().copy()); } else remains.set(transposedI, ForgeHooks.getContainerItem(s)); }// w w w.ja va 2 s .c o m } return remains; }
From source file:buildcraft.lib.fluids.Tank.java
License:Mozilla Public License
/** Maps the given stack to a fluid result. * // w w w. ja v a 2s . co m * @param stack The stack to map. This will ALWAYS have an {@link ItemStack#getCount()} of 1. * @param space The maximum amount of fluid that can be accepted by this tank. */ protected FluidGetResult map(ItemStack stack, int space) { IFluidHandlerItem fluidHandler = FluidUtil.getFluidHandler(stack.copy()); if (fluidHandler == null) return null; FluidStack drained = fluidHandler.drain(space, true); if (drained == null || drained.amount <= 0) return null; ItemStack leftOverStack = fluidHandler.getContainer(); if (leftOverStack.isEmpty()) leftOverStack = StackUtil.EMPTY; return new FluidGetResult(leftOverStack, drained); }
From source file:com.buuz135.industrial.proxy.event.MeatFeederTickHandler.java
License:Open Source License
public static boolean meatTick(ItemStack feeder, EntityPlayer player) { int filledAmount = ((MeatFeederItem) feeder.getItem()).getFilledAmount(feeder); if (filledAmount >= 400 && (player.getFoodStats().getSaturationLevel() < 20 || player.getFoodStats().getFoodLevel() < 20)) { ((MeatFeederItem) feeder.getItem()).drain(feeder, 400); player.getFoodStats().addStats(1, 1); return true; }//from w w w. j av a 2 s .c o m for (ItemStack stack : player.inventory.mainInventory) { if (stack.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null)) { IFluidHandlerItem itemCap = stack .getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null); if (!feeder.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null)) continue; FluidStack amount = feeder.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null) .drain(128000, false); FluidStack fluidStack = itemCap.drain( new FluidStack(FluidsRegistry.MEAT, amount == null ? 128000 : 128000 - amount.amount), false); if (fluidStack != null) { int filled = feeder.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null) .fill(fluidStack, true); if (filled > 0) { itemCap.drain(filled, true); break; } } } } return false; }
From source file:com.buuz135.industrial.tile.agriculture.AnimalResourceHarvesterTile.java
License:Open Source License
@Override public float work() { if (WorkUtils.isDisabled(this.getBlockType())) return 0; List<EntityAnimal> animals = this.world.getEntitiesWithinAABB(EntityAnimal.class, getWorkingArea()); boolean hasWorked = false; int fortune = getFortuneLevel(); for (EntityAnimal living : animals) { if (!ItemStackUtils.isInventoryFull(outItems) && living instanceof IShearable && ((IShearable) living) .isShearable(new ItemStack(Items.SHEARS), this.world, living.getPosition())) { List<ItemStack> stacks = ((IShearable) living).onSheared(new ItemStack(Items.SHEARS), this.world, null, fortune);/*from w w w . j a va2s. co m*/ for (ItemStack stack : stacks) { ItemHandlerHelper.insertItem(outItems, stack, false); } hasWorked = true; } //Check if the animal is a Fluid Cow from moofluids. If the cow has a different //fluid than what is in the tank, skip it if (tank.getFluidAmount() <= 7000 && !(Loader.isModLoaded("moofluids") && tank.getFluidAmount() > 0 && living instanceof EntityFluidCow && ((EntityFluidCow) living).getEntityFluid() != tank.getFluid().getFluid())) { FakePlayer player = IndustrialForegoing.getFakePlayer(this.world); player.setPosition(living.posX, living.posY, living.posZ); player.setHeldItem(EnumHand.MAIN_HAND, new ItemStack(Items.BUCKET)); if (living.processInteract(player, EnumHand.MAIN_HAND)) { ItemStack stack = player.getHeldItem(EnumHand.MAIN_HAND); if (stack.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null)) { IFluidHandlerItem fluidHandlerItem = stack .getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null); tank.fill(fluidHandlerItem.drain(Integer.MAX_VALUE, true), true); hasWorked = true; } } } } for (EntitySquid animal : this.world.getEntitiesWithinAABB(EntitySquid.class, getWorkingArea())) { if (!ItemStackUtils.isInventoryFull(outItems) && world.rand.nextBoolean() && world.rand.nextBoolean() && world.rand.nextBoolean() && world.rand.nextBoolean()) { ItemHandlerHelper.insertItem(outItems, new ItemStack(Items.DYE), false); hasWorked = true; } } return hasWorked ? 1 : 0; }
From source file:com.buuz135.industrial.tile.misc.FluidCrafterTile.java
License:Open Source License
public Fluid getRecipeFluid() { if (tank.getFluid() != null) { return tank.getFluid().getFluid(); }//from www .j a va2 s . c o m for (ItemStack stack : crafting.getFilter()) { if (stack.isEmpty()) continue; if (stack.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null)) { IFluidHandlerItem fluidHandlerItem = stack .getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null); if (fluidHandlerItem != null && fluidHandlerItem.drain(Integer.MAX_VALUE, false) != null) return fluidHandlerItem.drain(Integer.MAX_VALUE, false).getFluid(); } } return null; }
From source file:com.buuz135.industrial.tile.misc.FluidCrafterTile.java
License:Open Source License
private boolean isStackCurrentFluid(Fluid fluid, ItemStack stack) { if (!stack.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null)) return false; IFluidHandlerItem fluidHandlerItem = stack .getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null); return fluidHandlerItem != null && fluidHandlerItem.drain(Integer.MAX_VALUE, false) != null && fluidHandlerItem.drain(Integer.MAX_VALUE, false).getFluid().equals(fluid); }
From source file:com.buuz135.industrial.tile.misc.FluidCrafterTile.java
License:Open Source License
public boolean hasOnlyOneFluid() { Fluid tankFluid = tank.getFluid() != null ? tank.getFluid().getFluid() : null; List<Fluid> fluids = new ArrayList<>(); for (ItemStack stack : crafting.getFilter()) { if (stack.isEmpty()) continue; if (stack.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null)) { IFluidHandlerItem fluidHandlerItem = stack .getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null); FluidStack fluid = fluidHandlerItem.drain(Integer.MAX_VALUE, false); if (fluid != null && !fluids.contains(fluid.getFluid())) fluids.add(fluid.getFluid()); }//from ww w .j av a 2s.c o m } if (tankFluid != null) fluids.remove(tankFluid); return fluids.size() <= 1; }
From source file:com.buuz135.industrial.utils.ItemStackUtils.java
License:Open Source License
public static void fillTankFromItem(ItemStackHandler fluidItems, IFluidTank tank) { ItemStack stack = fluidItems.getStackInSlot(0).copy(); if (!stack.isEmpty()) { if (stack.hasCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null)) { IFluidHandlerItem cap = stack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY, null);// w w w .java 2 s . c o m FluidStack fluidStack = cap.drain(1000, false); if (fluidStack != null && tank.fill(fluidStack, false) == 0) return; FluidActionResult result = FluidUtil.tryEmptyContainer(stack, (IFluidHandler) tank, 1000, null, false); if (result.isSuccess() && (fluidItems.getStackInSlot(1).isEmpty() || (ItemHandlerHelper.canItemStacksStack(result.getResult(), fluidItems.getStackInSlot(1)) && result.getResult().getCount() + fluidItems.getStackInSlot(1).getCount() <= result .getResult().getMaxStackSize()))) { result = FluidUtil.tryEmptyContainer(stack, (IFluidHandler) tank, tank.getCapacity(), null, true); if (fluidItems.getStackInSlot(1).isEmpty()) { fluidItems.setStackInSlot(1, result.getResult()); } else { fluidItems.getStackInSlot(1).grow(1); } fluidItems.getStackInSlot(0).shrink(1); } } } }
From source file:com.lothrazar.cyclicmagic.util.UtilFluid.java
License:Open Source License
/** * Drains a filled container and places the fluid. * /*w w w. jav a2 s .com*/ * RETURN new item stack that has been drained after placing in world if it works null otherwise */ public static ItemStack dumpContainer(World world, BlockPos pos, ItemStack stackIn) { ItemStack dispensedStack = stackIn.copy(); IFluidHandlerItem fluidHandler = FluidUtil.getFluidHandler(dispensedStack); if (fluidHandler == null) { return ItemStack.EMPTY; } FluidStack fluidStack = fluidHandler.drain(Fluid.BUCKET_VOLUME, false); if (fluidStack != null && fluidStack.amount >= Fluid.BUCKET_VOLUME) { // FluidActionResult placeResult = FluidUtil.tryPlaceFluid(null, world, pos, dispensedStack, fluidStack); if (FluidUtil.tryPlaceFluid(null, world, pos, dispensedStack, fluidStack).isSuccess()) { //http://www.minecraftforge.net/forum/topic/56265-1112-fluidhandler-capability-on-buckets/ fluidHandler.drain(Fluid.BUCKET_VOLUME, true); ItemStack returnMe = fluidHandler.getContainer(); // stackIn.deserializeNBT(returnMe.serializeNBT()); return returnMe; } } return fluidHandler.getContainer(); }
From source file:com.lothrazar.cyclicmagic.util.UtilFluid.java
License:Open Source License
public static ItemStack drainOneBucket(ItemStack d) { IFluidHandlerItem fluidHandler = FluidUtil.getFluidHandler(d); if (fluidHandler == null) { return d; } //its empty, ok no problem fluidHandler.drain(Fluid.BUCKET_VOLUME, true); return fluidHandler.getContainer(); }