From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Aikar Date: Thu, 13 Sep 2018 21:39:26 -0400 Subject: [PATCH] Add ItemStackRecipeChoice Draft API This is based on Spigots Draft API. This is subject to change Allows creating recipes that must match isSimilar to full item stack. diff --git a/src/main/java/com/destroystokyo/paper/inventory/ItemStackRecipeChoice.java b/src/main/java/com/destroystokyo/paper/inventory/ItemStackRecipeChoice.java new file mode 100644 index 0000000000000000000000000000000000000000..18c96aeef00dc11e5083001adfba4204f0de4e2b --- /dev/null +++ b/src/main/java/com/destroystokyo/paper/inventory/ItemStackRecipeChoice.java @@ -0,0 +1,52 @@ +package com.destroystokyo.paper.inventory; + +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.RecipeChoice; + +import java.util.ArrayList; +import java.util.List; +import org.jetbrains.annotations.ApiStatus; + +/** + * Allows crafting Items that require full matching itemstacks to complete the recipe for custom items + * @deprecated Draft API + */ +@Deprecated(forRemoval = true) @ApiStatus.ScheduledForRemoval(inVersion = "1.21") +public class ItemStackRecipeChoice implements RecipeChoice { + + protected final List choices = new ArrayList<>(); + + public ItemStackRecipeChoice(ItemStack choices) { + this.choices.add(choices); + } + + public ItemStackRecipeChoice(List choices) { + this.choices.addAll(choices); + } + + @Override + public ItemStack getItemStack() { + return choices.isEmpty() ? null : choices.get(0); + } + + @Override + public RecipeChoice clone() { + try { + ItemStackRecipeChoice clone = (ItemStackRecipeChoice) super.clone(); + clone.choices.addAll(this.choices); + return clone; + } catch (CloneNotSupportedException ex) { + throw new AssertionError(ex); + } + } + + @Override + public boolean test(ItemStack itemStack) { + for (ItemStack stack : choices) { + if (stack.isSimilar(itemStack)) { + return true; + } + } + return false; + } +}