Example usage for net.minecraftforge.fluids.capability IFluidHandlerItem getContainer

List of usage examples for net.minecraftforge.fluids.capability IFluidHandlerItem getContainer

Introduction

In this page you can find the example usage for net.minecraftforge.fluids.capability IFluidHandlerItem getContainer.

Prototype

@Nonnull
ItemStack getContainer();

Source Link

Document

Get the container currently acted on by this fluid handler.

Usage

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();
}