List of usage examples for net.minecraftforge.fluids.capability IFluidHandlerItem getContainer
@Nonnull ItemStack getContainer();
From source file:blusunrize.immersiveengineering.common.crafting.RecipeJerrycan.java
@Nonnull @Override//from w w w. j av a 2s .c o m public ItemStack getCraftingResult(@Nonnull InventoryCrafting inv) { ItemStack jerrycan = ItemStack.EMPTY; ItemStack container = ItemStack.EMPTY; FluidStack fs = null; int[] slots = getRelevantSlots(inv); if (slots[0] >= 0) { jerrycan = inv.getStackInSlot(slots[0]); fs = FluidUtil.getFluidContained(jerrycan); } if (slots[1] >= 0) container = inv.getStackInSlot(slots[1]); if (fs != null && !container.isEmpty()) { ItemStack newContainer = Utils.copyStackWithAmount(container, 1); IFluidHandlerItem handler = FluidUtil.getFluidHandler(newContainer); int accepted = handler.fill(fs, false); if (accepted > 0) { handler.fill(fs, true); newContainer = handler.getContainer();// Because buckets are silly // FluidUtil.getFluidHandler(jerrycan).drain(accepted,true); ItemNBTHelper.setInt(jerrycan, "jerrycanDrain", accepted); } return newContainer; } return ItemStack.EMPTY; }
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 . j a v a 2 s .co m*/ } return remains; }
From source file:buildcraft.lib.fluids.Tank.java
License:Mozilla Public License
public void onGuiClicked(ContainerBC_Neptune container) { EntityPlayer player = container.player; ItemStack held = player.inventory.getItemStack(); if (held.isEmpty()) { return;/*from ww w .j a va 2s .co m*/ } // first try to fill this tank from the item boolean hasFilled = false; ItemStack copy = held.copy(); copy.setCount(1); int space = capacity - getFluidAmount(); boolean isCreative = player.capabilities.isCreativeMode; boolean isSurvival = !isCreative; FluidGetResult result = map(copy, space); if (result != null && result.fluidStack != null && result.fluidStack.amount > 0) { if (isCreative) { held = copy;// so we don't change the stack held by the player. } int potential = held.getCount(); // Insert a single item until a fluid was not accepted. for (int p = 0; p < potential; p++) { int accepted = fill(result.fluidStack, false); if (isCreative ? (accepted > 0) : (accepted == result.fluidStack.amount)) { hasFilled = true; int reallyAccepted = fill(result.fluidStack, true); if (reallyAccepted != accepted) { throw new IllegalStateException("We seem to be buggy! (accepted = " + accepted + ", reallyAccepted = " + reallyAccepted + ")"); } held.shrink(1); if (isSurvival) { if (held.isEmpty()) { held = result.itemStack; break; } else if (!result.itemStack.isEmpty()) { player.inventory.addItemStackToInventory(result.itemStack); player.inventoryContainer.detectAndSendChanges(); } else { continue; } } else if (held.isEmpty()) { break; } } else { break; } } if (isSurvival) { player.inventory.setItemStack(held.isEmpty() ? StackUtil.EMPTY : held); ((EntityPlayerMP) player).updateHeldItem(); } if (hasFilled) { FluidStack fl = getFluid(); if (fl != null) { SoundEvent sound = fl.getFluid().getEmptySound(container.player.world, container.player.getPosition()); container.player.world.playSound(null, player.getPosition(), sound, SoundCategory.BLOCKS, 1, 1); } return; } } // Now try to drain the fluid into the item IFluidHandlerItem fluidHandler = FluidUtil.getFluidHandler(held.copy()); if (fluidHandler == null) return; FluidStack drained = drain(capacity, false); if (drained == null || drained.amount <= 0) return; int filled = fluidHandler.fill(drained, true); if (filled > 0) { FluidStack reallyDrained = drain(filled, true); if ((reallyDrained == null || reallyDrained.amount != filled)) { throw new IllegalStateException("Somehow drained differently than expected! ( drained = "// + drained + ", filled = " + filled + ", reallyDrained = " + reallyDrained + " )"); } if (isSurvival) { ItemStack filledContainer = fluidHandler.getContainer(); player.inventory.setItemStack(filledContainer); ((EntityPlayerMP) player).updateHeldItem(); } SoundEvent sound = reallyDrained.getFluid().getFillSound(container.player.world, container.player.getPosition()); container.player.world.playSound(null, player.getPosition(), sound, SoundCategory.BLOCKS, 1, 1); } }
From source file:buildcraft.lib.fluids.Tank.java
License:Mozilla Public License
/** Maps the given stack to a fluid result. * /* w w w. j a v a 2 s . c o 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.lothrazar.cyclicmagic.util.UtilFluid.java
License:Open Source License
/** * Drains a filled container and places the fluid. * // ww w. j av a 2 s. c om * 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(); }