RecipeItemImpl.java

package it.fulminazzo.yagl.items;

import it.fulminazzo.yagl.exceptions.NotImplemented;
import it.fulminazzo.yagl.items.recipes.Recipe;
import org.jetbrains.annotations.NotNull;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.function.Predicate;

/**
 * An implementation of {@link RecipeItem}.
 */
class RecipeItemImpl extends ItemImpl implements RecipeItem {
    protected final List<Recipe> recipes = new ArrayList<>();

    /**
     * Instantiates a new Recipe item.
     */
    public RecipeItemImpl() {
        this(null);
    }

    /**
     * Instantiates a new Recipe item.
     *
     * @param material the material
     */
    public RecipeItemImpl(String material) {
        this(material, 1);
    }

    /**
     * Instantiates a new Recipe item.
     *
     * @param material the material
     * @param amount   the amount
     */
    public RecipeItemImpl(String material, int amount) {
        super(material, amount);
    }

    @Override
    public RecipeItem addRecipes(final Recipe @NotNull ... recipes) {
        Collections.addAll(this.recipes, recipes);
        return this;
    }

    @Override
    public RecipeItem clearRecipes(final Predicate<Recipe> predicate) {
        this.recipes.removeIf(predicate);
        return this;
    }

    @NotNull
    @Override
    public Iterator<Recipe> iterator() {
        return this.recipes.iterator();
    }

    @Override
    public void registerRecipes() {
        throw new NotImplemented();
    }

    @Override
    public void unregisterRecipes() {
        throw new NotImplemented();
    }

    @Override
    public RecipeItem setMaterial(@NotNull String material) {
        return (RecipeItem) super.setMaterial(material);
    }

    @Override
    public RecipeItem setAmount(int amount) {
        return (RecipeItem) super.setAmount(amount);
    }

    @Override
    public RecipeItem setDurability(int durability) {
        return (RecipeItem) super.setDurability(durability);
    }

    @Override
    public RecipeItem setDisplayName(@NotNull String displayName) {
        return (RecipeItem) super.setDisplayName(displayName);
    }

    @Override
    public RecipeItem setUnbreakable(boolean unbreakable) {
        return (RecipeItem) super.setUnbreakable(unbreakable);
    }

    @Override
    public RecipeItem setCustomModelData(int customModelData) {
        return (RecipeItem) super.setCustomModelData(customModelData);
    }
}