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

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

Introduction

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

Prototype

@Nonnull
FluidStack drain(FluidStack resource, FluidAction action);

Source Link

Document

Drains fluid out of internal tanks, distribution is left entirely to the IFluidHandler.

Usage

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