ItemStack API additions for quantity/flags/lore
This commit is contained in:
parent
f0cb089a24
commit
ff572760c4
|
@ -0,0 +1,166 @@
|
|||
From 79f36b1b98d9b888c633ef39dc73b532c89691b9 Mon Sep 17 00:00:00 2001
|
||||
From: Aikar <aikar@aikar.co>
|
||||
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<String> 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<String> 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<ItemFlag> 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
|
||||
|
Loading…
Reference in New Issue