BukkitRecipeItemImpl.java
package it.fulminazzo.yagl.items;
import it.fulminazzo.yagl.ItemAdapter;
import it.fulminazzo.yagl.items.recipes.Recipe;
import it.fulminazzo.yagl.utils.EnumUtils;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.function.Predicate;
/**
* An implementation of {@link RecipeItemImpl} that actually implements {@link #registerRecipes()} and {@link #unregisterRecipes()}.
*/
class BukkitRecipeItemImpl extends RecipeItemImpl implements BukkitRecipeItem {
private final List<org.bukkit.inventory.Recipe> recipeCache = new ArrayList<>();
/**
* Instantiates a new Bukkit recipe item.
*/
public BukkitRecipeItemImpl() {
super();
}
@Override
public void registerRecipes() {
for (Recipe recipe : this.recipes) {
org.bukkit.inventory.Recipe realRecipe = ItemAdapter.recipeToMinecraft(recipe.setOutput(this));
this.recipeCache.add(realRecipe);
Bukkit.addRecipe(realRecipe);
}
}
@Override
public void unregisterRecipes() {
Iterator<org.bukkit.inventory.Recipe> recipes = Bukkit.recipeIterator();
while (recipes.hasNext()) {
org.bukkit.inventory.Recipe r = recipes.next();
if (this.recipeCache.contains(r)) recipes.remove();
}
this.recipeCache.clear();
}
@Override
public BukkitRecipeItem setMaterial(@NotNull String material) {
EnumUtils.valueOf(Material.class, material);
return (BukkitRecipeItem) super.setMaterial(material);
}
@Override
public BukkitRecipeItem setAmount(final int amount) {
return (BukkitRecipeItem) super.setAmount(amount);
}
@Override
public BukkitRecipeItem setDurability(final int durability) {
return (BukkitRecipeItem) super.setDurability(durability);
}
@Override
public BukkitRecipeItem setDisplayName(final @NotNull String displayName) {
return (BukkitRecipeItem) super.setDisplayName(displayName);
}
@Override
public BukkitRecipeItem setUnbreakable(final boolean unbreakable) {
return (BukkitRecipeItem) super.setUnbreakable(unbreakable);
}
@Override
public BukkitRecipeItem setCustomModelData(int customModelData) {
return (BukkitRecipeItem) super.setCustomModelData(customModelData);
}
@Override
public BukkitRecipeItem addRecipes(Recipe @NotNull ... recipes) {
return (BukkitRecipeItem) super.addRecipes(recipes);
}
@Override
public BukkitRecipeItem clearRecipes(Predicate<Recipe> predicate) {
return (BukkitRecipeItem) super.clearRecipes(predicate);
}
}