--- a/net/minecraft/world/item/crafting/RecipeItemStack.java +++ b/net/minecraft/world/item/crafting/RecipeItemStack.java @@ -42,6 +42,24 @@ private final HolderSet values; @Nullable private List> items; + // CraftBukkit start + @Nullable + private List itemStacks; + + public boolean isExact() { + return this.itemStacks != null; + } + + public List itemStacks() { + return this.itemStacks; + } + + public static RecipeItemStack ofStacks(List stacks) { + RecipeItemStack recipe = RecipeItemStack.of(stacks.stream().map(ItemStack::getItem)); + recipe.itemStacks = stacks; + return recipe; + } + // CraftBukkit end private RecipeItemStack(HolderSet holderset) { holderset.unwrap().ifRight((list) -> { @@ -72,6 +90,17 @@ } public boolean test(ItemStack itemstack) { + // CraftBukkit start + if (this.isExact()) { + for (ItemStack itemstack1 : this.itemStacks()) { + if (itemstack1.getItem() == itemstack.getItem() && ItemStack.isSameItemSameComponents(itemstack, itemstack1)) { + return true; + } + } + + return false; + } + // CraftBukkit end List> list = this.items(); for (int i = 0; i < list.size(); ++i) { @@ -85,7 +114,7 @@ public boolean equals(Object object) { if (object instanceof RecipeItemStack recipeitemstack) { - return Objects.equals(this.values, recipeitemstack.values); + return Objects.equals(this.values, recipeitemstack.values) && Objects.equals(this.itemStacks, recipeitemstack.itemStacks); // CraftBukkit } else { return false; }