Example usage for net.minecraftforge.fluids FluidStack isFluidEqual

List of usage examples for net.minecraftforge.fluids FluidStack isFluidEqual

Introduction

In this page you can find the example usage for net.minecraftforge.fluids FluidStack isFluidEqual.

Prototype

public boolean isFluidEqual(@Nonnull ItemStack other) 

Source Link

Document

Determines if the FluidIDs and NBT Tags are equal compared to a registered container ItemStack.

Usage

From source file:blusunrize.immersiveengineering.api.crafting.RefineryRecipe.java

public static List<RefineryRecipe> findIncompleteRefineryRecipe(FluidStack input0, FluidStack input1) {
    if (input0 == null && input1 == null)
        return null;
    List<RefineryRecipe> list = Lists.newArrayList();
    for (RefineryRecipe recipe : recipeList) {
        if (input0 != null && input1 == null) {
            if (input0.isFluidEqual(recipe.input0) || input0.isFluidEqual(recipe.input1)) {
                list.add(recipe);/*from  w  w w . j av a  2s .  c o m*/
                break;
            }
        } else if (input0 == null && input1 != null) {
            if (input1.isFluidEqual(recipe.input0) || input1.isFluidEqual(recipe.input1)) {
                list.add(recipe);
                break;
            }
        } else if ((input0.isFluidEqual(recipe.input0) && input1.isFluidEqual(recipe.input1))
                || (input0.isFluidEqual(recipe.input1) && input1.isFluidEqual(recipe.input0))) {
            list.add(recipe);
            break;
        }
    }
    return list;
}

From source file:blusunrize.immersiveengineering.common.crafting.RecipeJerrycan.java

@Override
public boolean matches(@Nonnull InventoryCrafting inv, World world) {

    ItemStack jerrycan = ItemStack.EMPTY;
    ItemStack container = ItemStack.EMPTY;
    int[] slots = getRelevantSlots(inv);
    if (slots[0] >= 0)
        jerrycan = inv.getStackInSlot(slots[0]);
    if (slots[1] >= 0)
        container = inv.getStackInSlot(slots[1]);
    if (!jerrycan.isEmpty() && !container.isEmpty()) {
        IFluidHandler handler = FluidUtil.getFluidHandler(container);
        FluidStack fs = handler.drain(Integer.MAX_VALUE, false);
        return fs == null || (fs.amount < handler.getTankProperties()[0].getCapacity()
                && fs.isFluidEqual(FluidUtil.getFluidContained(jerrycan)));
    }//from   w  w  w  .  jav a  2s .c  o  m
    return false;
}

From source file:blusunrize.immersiveengineering.common.gui.ContainerRefinery.java

public ContainerRefinery(InventoryPlayer inventoryPlayer, TileEntityRefinery tile) {
    super(inventoryPlayer, tile);

    final TileEntityRefinery tileF = tile;
    this.addSlotToContainer(new IESlot.FluidContainer(this, this.inv, 0, 37, 15, 2) {
        @Override// w  w w  .  j av a2  s  .c  o  m
        public boolean isItemValid(ItemStack itemStack) {
            IFluidHandler h = itemStack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY,
                    null);
            if (h == null || h.getTankProperties().length == 0)
                return false;
            FluidStack fs = h.getTankProperties()[0].getContents();
            if (fs == null)
                return false;
            if (RefineryRecipe.findIncompleteRefineryRecipe(fs, null) == null)
                return false;
            if (tileF.tanks[0].getFluidAmount() > 0 && !fs.isFluidEqual(tileF.tanks[0].getFluid()))
                return false;
            if (tileF.tanks[1].getFluidAmount() <= 0)
                return true;
            List<RefineryRecipe> incomplete = RefineryRecipe.findIncompleteRefineryRecipe(fs,
                    tileF.tanks[1].getFluid());
            return incomplete != null && !incomplete.isEmpty();
        }
    });
    this.addSlotToContainer(new IESlot.Output(this, this.inv, 1, 37, 54));

    this.addSlotToContainer(new IESlot.FluidContainer(this, this.inv, 2, 85, 15, 2) {
        @Override
        public boolean isItemValid(ItemStack itemStack) {
            IFluidHandler h = itemStack.getCapability(CapabilityFluidHandler.FLUID_HANDLER_ITEM_CAPABILITY,
                    null);
            if (h == null || h.getTankProperties().length == 0)
                return false;
            FluidStack fs = h.getTankProperties()[0].getContents();
            if (fs == null)
                return false;
            if (RefineryRecipe.findIncompleteRefineryRecipe(fs, null) == null)
                return false;
            if (tileF.tanks[1].getFluidAmount() > 0 && !fs.isFluidEqual(tileF.tanks[1].getFluid()))
                return false;
            if (tileF.tanks[0].getFluidAmount() <= 0)
                return true;
            List<RefineryRecipe> incomplete = RefineryRecipe.findIncompleteRefineryRecipe(fs,
                    tileF.tanks[0].getFluid());
            return incomplete != null && !incomplete.isEmpty();
        }
    });
    this.addSlotToContainer(new IESlot.Output(this, this.inv, 3, 85, 54));

    this.addSlotToContainer(new IESlot.FluidContainer(this, this.inv, 4, 133, 15, 0));
    this.addSlotToContainer(new IESlot.Output(this, this.inv, 5, 133, 54));
    slotCount = 6;

    for (int i = 0; i < 3; i++)
        for (int j = 0; j < 9; j++)
            addSlotToContainer(new Slot(inventoryPlayer, j + i * 9 + 9, 8 + j * 18, 85 + i * 18));
    for (int i = 0; i < 9; i++)
        addSlotToContainer(new Slot(inventoryPlayer, i, 8 + i * 18, 143));
}

From source file:blusunrize.immersiveengineering.common.util.IEItemFluidHandler.java

@Override
public int fill(FluidStack resource, boolean doFill) {
    if (container.getCount() != 1 || resource == null || resource.amount <= 0 || !canFillFluidType(resource))
        return 0;

    FluidStack contained = getFluid();
    if (contained == null) {
        int fillAmount = Math.min(getCapacity(), resource.amount);
        if (doFill) {
            FluidStack filled = resource.copy();
            filled.amount = fillAmount;/*from  w  w  w .  j  ava  2s  .  c  om*/
            setFluid(filled);
        }
        return fillAmount;
    } else {
        if (contained.isFluidEqual(resource)) {
            int fillAmount = Math.min(getCapacity() - contained.amount, resource.amount);
            if (doFill && fillAmount > 0) {
                contained.amount += fillAmount;
                setFluid(contained);
            }
            return fillAmount;
        }
        return 0;
    }
}

From source file:blusunrize.immersiveengineering.common.util.inventory.MultiFluidTank.java

@Override
public int fill(FluidStack resource, boolean doFill) {
    int space = this.capacity - getFluidAmount();
    int toFill = Math.min(resource.amount, space);
    if (!doFill)/*w  ww.ja v a 2 s  .  c  o m*/
        return toFill;
    for (FluidStack fs : this.fluids)
        if (fs.isFluidEqual(resource)) {
            fs.amount += toFill;
            return toFill;
        }
    this.fluids.add(Utils.copyFluidStackWithAmount(resource, toFill, true));
    return toFill;

}

From source file:blusunrize.immersiveengineering.common.util.inventory.MultiFluidTank.java

@Nullable
@Override/*from  w ww .  j av  a  2 s . c  o m*/
public FluidStack drain(FluidStack resource, boolean doDrain) {
    if (this.fluids.isEmpty())
        return null;
    Iterator<FluidStack> it = this.fluids.iterator();
    while (it.hasNext()) {
        FluidStack fs = it.next();
        if (fs.isFluidEqual(resource)) {
            int amount = Math.min(resource.amount, fs.amount);
            if (doDrain) {
                fs.amount -= amount;
                if (fs.amount <= 0)
                    it.remove();
            }
            return Utils.copyFluidStackWithAmount(resource, amount, true);
        }
    }
    return null;
}

From source file:buildcraft.core.fluids.TankManager.java

License:Minecraft Mod Public

@Override
public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain) {
    if (resource == null) {
        return null;
    }/*  w ww  .ja v a2 s .  c o  m*/
    for (Tank tank : tanks) {
        if (!resource.isFluidEqual(tank.getFluid())) {
            continue;
        }
        FluidStack drained = tank.drain(resource.amount, doDrain);
        if (drained != null && drained.amount > 0) {
            return drained;
        }
    }
    return null;
}

From source file:buildcraft.core.recipes.FlexibleRecipe.java

License:Minecraft Mod Public

@Override
public CraftingResult<T> craft(IFlexibleCrafter baseCrafter, boolean preview) {
    if (output == null) {
        return null;
    }/*w  w w  .  ja v a2  s.c o  m*/

    IFlexibleCrafter crafter = baseCrafter;
    if (preview) {
        crafter = new FakeFlexibleCrafter(baseCrafter);
    }

    CraftingResult<T> result = new CraftingResult<T>();

    result.recipe = this;
    result.energyCost = energyCost;
    result.craftingTime = craftingTime;

    for (ItemStack requirement : inputItems) {
        IStackFilter filter = new ArrayStackFilter(requirement);
        int amount = requirement.stackSize;

        if (consumeItems(crafter, result, filter, amount) != 0) {
            return null;
        }
    }

    // Item stacks with alternatives consumption

    for (List<ItemStack> requirements : inputItemsWithAlternatives) {
        IStackFilter filter = new ArrayStackFilter(requirements.toArray(new ItemStack[requirements.size()]));
        int amount = requirements.get(0).stackSize;

        if (consumeItems(crafter, result, filter, amount) != 0) {
            return null;
        }
    }

    // Fluid stacks consumption

    for (FluidStack requirement : inputFluids) {
        int amount = requirement.amount;

        for (int tankid = 0; tankid < crafter.getCraftingFluidStackSize(); tankid++) {
            FluidStack fluid = crafter.getCraftingFluidStack(tankid);

            if (fluid != null && fluid.isFluidEqual(requirement)) {
                int amountUsed;

                if (fluid.amount > amount) {
                    amountUsed = amount;

                    if (!preview) {
                        crafter.decrCraftingFluidStack(tankid, amount);
                    }

                    amount = 0;
                } else {
                    amountUsed = fluid.amount;

                    if (!preview) {
                        crafter.decrCraftingFluidStack(tankid, fluid.amount);
                    }

                    amount -= fluid.amount;
                }

                result.usedFluids.add(new FluidStack(requirement.getFluid(), amountUsed));
            }

            if (amount == 0) {
                break;
            }
        }

        if (amount != 0) {
            return null;
        }
    }

    // Output generation

    result.crafted = output;

    return result;
}

From source file:buildcraft.core.statements.TriggerFluidContainer.java

License:Minecraft Mod Public

@Override
public boolean isTriggerActive(TileEntity tile, ForgeDirection side, IStatementContainer statementContainer,
        IStatementParameter[] parameters) {
    if (tile instanceof IFluidHandler) {
        IFluidHandler container = (IFluidHandler) tile;

        FluidStack searchedFluid = null;

        if (parameters != null && parameters.length >= 1 && parameters[0] != null
                && parameters[0].getItemStack() != null) {
            searchedFluid = FluidContainerRegistry.getFluidForFilledItem(parameters[0].getItemStack());
        }//from   w  w  w  .j  av  a2s.  c o m

        if (searchedFluid != null) {
            searchedFluid.amount = 1;
        }

        FluidTankInfo[] liquids = container.getTankInfo(side);
        if (liquids == null || liquids.length == 0) {
            return false;
        }

        switch (state) {
        case Empty:
            for (FluidTankInfo c : liquids) {
                if (c != null && c.fluid != null && c.fluid.amount > 0
                        && (searchedFluid == null || searchedFluid.isFluidEqual(c.fluid))) {
                    return false;
                }
            }
            return true;
        case Contains:
            for (FluidTankInfo c : liquids) {
                if (c != null && c.fluid != null && c.fluid.amount > 0
                        && (searchedFluid == null || searchedFluid.isFluidEqual(c.fluid))) {
                    return true;
                }
            }
            return false;
        case Space:
            if (searchedFluid == null) {
                for (FluidTankInfo c : liquids) {
                    if (c != null && (c.fluid == null || c.fluid.amount < c.capacity)) {
                        return true;
                    }
                }
                return false;
            }
            return container.fill(side, searchedFluid, false) > 0;
        case Full:
            if (searchedFluid == null) {
                for (FluidTankInfo c : liquids) {
                    if (c != null && (c.fluid == null || c.fluid.amount < c.capacity)) {
                        return false;
                    }
                }
                return true;
            }
            return container.fill(side, searchedFluid, false) <= 0;
        }
    }

    return false;
}

From source file:buildcraft.core.statements.TriggerFluidContainerLevel.java

License:Minecraft Mod Public

@Override
public boolean isTriggerActive(TileEntity tile, ForgeDirection side, IStatementContainer statementContainer,
        IStatementParameter[] parameters) {
    if (tile instanceof IFluidHandler) {
        IFluidHandler container = (IFluidHandler) tile;

        FluidStack searchedFluid = null;

        if (parameters != null && parameters.length >= 1 && parameters[0] != null
                && parameters[0].getItemStack() != null) {
            searchedFluid = FluidContainerRegistry.getFluidForFilledItem(parameters[0].getItemStack());
        }//w w w  .jav a 2 s  . c  o m

        if (searchedFluid != null) {
            searchedFluid.amount = 1;
        }

        FluidTankInfo[] liquids = container.getTankInfo(side);
        if (liquids == null || liquids.length == 0) {
            return false;
        }

        for (FluidTankInfo c : liquids) {
            if (c == null) {
                continue;
            }
            if (c.fluid == null) {
                if (searchedFluid == null) {
                    return true;
                }
                return container.fill(side, searchedFluid, false) > 0;
            }

            if (searchedFluid == null || searchedFluid.isFluidEqual(c.fluid)) {
                float percentage = (float) c.fluid.amount / (float) c.capacity;
                return percentage < type.level;
            }
        }
    }

    return false;
}