// Path: src/main/java/org/cyclops/integratedtunnels/part/aspect/ITunnelTransfer.java
// public interface ITunnelTransfer {
// }


import org.cyclops.commoncapabilities.api.ingredient.IngredientComponent;
import org.cyclops.integratedtunnels.part.aspect.ITunnelTransfer;
import javax.annotation.Nonnull;
import java.util.Objects;
import java.util.function.Predicate;
    }

    public boolean isEmpty() {
        return empty;
    }

    public int getMaxQuantity() {
        return maxQuantity;
    }

    public boolean isExactQuantity() {
        return exactQuantity;
    }

    @Override
    public boolean equals(Object obj) {
        if (!(obj instanceof IngredientPredicate)) {
            return false;
        }
        IngredientPredicate that = (IngredientPredicate) obj;
        return this.ingredientComponent == that.ingredientComponent
                && this.ingredientComponent.getMatcher().matchesExactly(this.instance, (T) that.instance)
                && Objects.equals(this.matchFlags, that.matchFlags)
                && this.blacklist == that.blacklist
                && this.empty == that.empty
                && this.maxQuantity == that.maxQuantity
                && this.exactQuantity == that.exactQuantity;
    }

    @Override
// Path: src/main/java/org/cyclops/integratedtunnels/part/aspect/ITunnelTransfer.java
// public interface ITunnelTransfer {
// }


// Path: src/main/java/org/cyclops/integratedtunnels/core/predicate/IngredientPredicate.java
import org.cyclops.commoncapabilities.api.ingredient.IngredientComponent;
import org.cyclops.integratedtunnels.part.aspect.ITunnelTransfer;
import javax.annotation.Nonnull;
import java.util.Objects;
import java.util.function.Predicate;

    }

    public boolean isEmpty() {
        return empty;
    }

    public int getMaxQuantity() {
        return maxQuantity;
    }

    public boolean isExactQuantity() {
        return exactQuantity;
    }

    @Override
    public boolean equals(Object obj) {
        if (!(obj instanceof IngredientPredicate)) {
            return false;
        }
        IngredientPredicate that = (IngredientPredicate) obj;
        return this.ingredientComponent == that.ingredientComponent
                && this.ingredientComponent.getMatcher().matchesExactly(this.instance, (T) that.instance)
                && Objects.equals(this.matchFlags, that.matchFlags)
                && this.blacklist == that.blacklist
                && this.empty == that.empty
                && this.maxQuantity == that.maxQuantity
                && this.exactQuantity == that.exactQuantity;
    }

    @Override
    public int hashCode() {