diff --git a/Spigot-API-Patches/0118-ItemStack-API-additions-for-quantity-flags-lore.patch b/Spigot-API-Patches/0118-ItemStack-API-additions-for-quantity-flags-lore.patch new file mode 100644 index 0000000000..16a753dc5e --- /dev/null +++ b/Spigot-API-Patches/0118-ItemStack-API-additions-for-quantity-flags-lore.patch @@ -0,0 +1,166 @@ +From 79f36b1b98d9b888c633ef39dc73b532c89691b9 Mon Sep 17 00:00:00 2001 +From: Aikar +Date: Fri, 22 Jun 2018 22:59:18 -0400 +Subject: [PATCH] ItemStack API additions for quantity/flags/lore + + +diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java +index 82240129..bfd6307f 100644 +--- a/src/main/java/org/bukkit/inventory/ItemStack.java ++++ b/src/main/java/org/bukkit/inventory/ItemStack.java +@@ -2,7 +2,9 @@ package org.bukkit.inventory; + + import com.google.common.collect.ImmutableMap; + import java.util.LinkedHashMap; ++import java.util.List; + import java.util.Map; ++import java.util.Set; + + import org.apache.commons.lang.Validate; + import org.bukkit.Bukkit; +@@ -13,6 +15,8 @@ import org.bukkit.enchantments.Enchantment; + import org.bukkit.inventory.meta.ItemMeta; + import org.bukkit.material.MaterialData; + ++import javax.annotation.Nullable; ++ + /** + * Represents a stack of items + */ +@@ -641,5 +645,133 @@ public class ItemStack implements Cloneable, ConfigurationSerializable { + // Requires access to NMS + return ensureServerConversions().getMaxItemUseDuration(); + } ++ ++ /** ++ * Clones the itemstack and returns it a single quantity. ++ * @return The new itemstack with 1 quantity ++ */ ++ public ItemStack asOne() { ++ return asQuantity(1); ++ } ++ ++ /** ++ * Clones the itemstack and returns it as the specified quantity ++ * @param qty The quantity of the cloned item ++ * @return The new itemstack with specified quantity ++ */ ++ public ItemStack asQuantity(int qty) { ++ ItemStack clone = clone(); ++ clone.setAmount(qty); ++ return clone; ++ } ++ ++ /** ++ * Adds 1 to this itemstack. Will not go over the items max stack size. ++ * @return The same item (not a clone) ++ */ ++ public ItemStack add() { ++ return add(1); ++ } ++ ++ /** ++ * Adds quantity to this itemstack. Will not go over the items max stack size. ++ * ++ * @param qty The amount to add ++ * @return The same item (not a clone) ++ */ ++ public ItemStack add(int qty) { ++ setAmount(Math.min(getMaxStackSize(), getAmount() + qty)); ++ return this; ++ } ++ ++ /** ++ * Subtracts 1 to this itemstack. Going to 0 or less will invalidate the item. ++ * @return The same item (not a clone) ++ */ ++ public ItemStack subtract() { ++ return subtract(1); ++ } ++ ++ /** ++ * Subtracts quantity to this itemstack. Going to 0 or less will invalidate the item. ++ * ++ * @param qty The amount to add ++ * @return The same item (not a clone) ++ */ ++ public ItemStack subtract(int qty) { ++ setAmount(Math.max(0, getAmount() + qty)); ++ return this; ++ } ++ ++ /** ++ * If the item has lore, returns it, else it will return null ++ * @return The lore, or null ++ */ ++ @Nullable ++ public List getLore() { ++ if (!hasItemMeta()) { ++ return null; ++ } ++ ItemMeta itemMeta = getItemMeta(); ++ if (!itemMeta.hasLore()) { ++ return null; ++ } ++ return itemMeta.getLore(); ++ } ++ ++ /** ++ * Sets the lore for this item. ++ * Removes lore when given null. ++ * ++ * @param lore the lore that will be set ++ */ ++ public void setLore(List lore) { ++ ItemMeta itemMeta = getItemMeta(); ++ itemMeta.setLore(lore); ++ setItemMeta(itemMeta); ++ } ++ ++ /** ++ * Set itemflags which should be ignored when rendering a ItemStack in the Client. This Method does silently ignore double set itemFlags. ++ * ++ * @param itemFlags The hideflags which shouldn't be rendered ++ */ ++ public void addItemFlags(ItemFlag... itemFlags) { ++ ItemMeta itemMeta = getItemMeta(); ++ itemMeta.addItemFlags(itemFlags); ++ setItemMeta(itemMeta); ++ } ++ ++ /** ++ * Remove specific set of itemFlags. This tells the Client it should render it again. This Method does silently ignore double removed itemFlags. ++ * ++ * @param itemFlags Hideflags which should be removed ++ */ ++ public void removeItemFlags(ItemFlag... itemFlags) { ++ ItemMeta itemMeta = getItemMeta(); ++ itemMeta.removeItemFlags(itemFlags); ++ setItemMeta(itemMeta); ++ } ++ ++ /** ++ * Get current set itemFlags. The collection returned is unmodifiable. ++ * ++ * @return A set of all itemFlags set ++ */ ++ public Set getItemFlags() { ++ ItemMeta itemMeta = getItemMeta(); ++ return itemMeta.getItemFlags(); ++ } ++ ++ /** ++ * Check if the specified flag is present on this item. ++ * ++ * @param flag the flag to check ++ * @return if it is present ++ */ ++ public boolean hasItemFlag(ItemFlag flag) { ++ ItemMeta itemMeta = getItemMeta(); ++ return itemMeta.hasItemFlag(flag); ++ } + // Paper end + } +-- +2.17.1 +