Class ItemStack

java.lang.Object
org.bukkit.inventory.ItemStack
All Implemented Interfaces:
Cloneable, ConfigurationSerializable, Translatable

public class ItemStack extends Object implements Cloneable, ConfigurationSerializable, Translatable
Represents a stack of items.

IMPORTANT: An ItemStack is only designed to contain items. Do not use this class to encapsulate Materials for which Material.isItem() returns false.

  • Constructor Details

    • ItemStack

      protected ItemStack()
    • ItemStack

      public ItemStack(@NotNull Material type)
      Defaults stack size to 1, with no extra data.

      IMPORTANT: An ItemStack is only designed to contain items. Do not use this class to encapsulate Materials for which Material.isItem() returns false.

      Parameters:
      type - item material
    • ItemStack

      public ItemStack(@NotNull Material type, int amount)
      An item stack with no extra data.

      IMPORTANT: An ItemStack is only designed to contain items. Do not use this class to encapsulate Materials for which Material.isItem() returns false.

      Parameters:
      type - item material
      amount - stack size
    • ItemStack

      @Deprecated(since="1.20.5") public ItemStack(@NotNull Material type, int amount, short damage)
      Deprecated.
      An item stack with the specified damage / durability
      Parameters:
      type - item material
      amount - stack size
      damage - durability / damage
    • ItemStack

      @Deprecated(since="1.4.5") public ItemStack(@NotNull Material type, int amount, short damage, @Nullable Byte data)
      Deprecated.
      this method uses an ambiguous data byte object
      Parameters:
      type - the type
      amount - the amount in the stack
      damage - the damage value of the item
      data - the data value or null
    • ItemStack

      public ItemStack(@NotNull ItemStack stack) throws IllegalArgumentException
      Creates a new item stack derived from the specified stack
      Parameters:
      stack - the stack to copy
      Throws:
      IllegalArgumentException - if the specified stack is null or returns an item meta not created by the item factory
  • Method Details

    • getType

      @NotNull public Material getType()
      Gets the type of this item
      Returns:
      Type of the items in this stack
    • setType

      public void setType(@NotNull Material type)
      Sets the type of this item

      Note that in doing so you will reset the MaterialData for this stack.

      IMPORTANT: An ItemStack is only designed to contain items. Do not use this class to encapsulate Materials for which Material.isItem() returns false.

      Parameters:
      type - New type to set the items in this stack to
    • getAmount

      public int getAmount()
      Gets the amount of items in this stack
      Returns:
      Amount of items in this stack
    • setAmount

      public void setAmount(int amount)
      Sets the amount of items in this stack
      Parameters:
      amount - New amount of items in this stack
    • getData

      @Nullable public MaterialData getData()
      Gets the MaterialData for this stack of items
      Returns:
      MaterialData for this item
    • setData

      public void setData(@Nullable MaterialData data)
      Sets the MaterialData for this stack of items
      Parameters:
      data - New MaterialData for this item
    • setDurability

      @Deprecated(since="1.13") public void setDurability(short durability)
      Deprecated.
      durability is now part of ItemMeta. To avoid confusion and misuse, getItemMeta(), setItemMeta(ItemMeta) and Damageable.setDamage(int) should be used instead. This is because any call to this method will be overwritten by subsequent setting of ItemMeta which was created before this call.
      Sets the durability of this item
      Parameters:
      durability - Durability of this item
    • getDurability

      @Deprecated(since="1.13") public short getDurability()
      Deprecated.
      Gets the durability of this item
      Returns:
      Durability of this item
    • getMaxStackSize

      public int getMaxStackSize()
      Get the maximum stack size for this item. If this item has a max stack size component (ItemMeta.hasMaxStackSize()), the value of that component will be returned. Otherwise, this item's Material's default maximum stack size will be returned instead.
      Returns:
      The maximum you can stack this item to.
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • equals

      public boolean equals(Object obj)
      Overrides:
      equals in class Object
    • isSimilar

      public boolean isSimilar(@Nullable ItemStack stack)
      This method is the same as equals, but does not consider stack size (amount).
      Parameters:
      stack - the item stack to compare to
      Returns:
      true if the two stacks are equal, ignoring the amount
    • clone

      @NotNull public ItemStack clone()
      Overrides:
      clone in class Object
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • containsEnchantment

      public boolean containsEnchantment(@NotNull Enchantment ench)
      Checks if this ItemStack contains the given Enchantment
      Parameters:
      ench - Enchantment to test
      Returns:
      True if this has the given enchantment
    • getEnchantmentLevel

      public int getEnchantmentLevel(@NotNull Enchantment ench)
      Gets the level of the specified enchantment on this item stack
      Parameters:
      ench - Enchantment to check
      Returns:
      Level of the enchantment, or 0
    • getEnchantments

      @NotNull public Map<Enchantment,Integer> getEnchantments()
      Gets a map containing all enchantments and their levels on this item.
      Returns:
      Map of enchantments.
    • addEnchantments

      public void addEnchantments(@NotNull Map<Enchantment,Integer> enchantments)
      Adds the specified enchantments to this item stack.

      This method is the same as calling addEnchantment(org.bukkit.enchantments.Enchantment, int) for each element of the map.

      Parameters:
      enchantments - Enchantments to add
      Throws:
      IllegalArgumentException - if the specified enchantments is null
      IllegalArgumentException - if any specific enchantment or level is null. Warning: Some enchantments may be added before this exception is thrown.
    • addEnchantment

      public void addEnchantment(@NotNull Enchantment ench, int level)
      Adds the specified Enchantment to this item stack.

      If this item stack already contained the given enchantment (at any level), it will be replaced.

      Parameters:
      ench - Enchantment to add
      level - Level of the enchantment
      Throws:
      IllegalArgumentException - if enchantment null, or enchantment is not applicable
    • addUnsafeEnchantments

      public void addUnsafeEnchantments(@NotNull Map<Enchantment,Integer> enchantments)
      Adds the specified enchantments to this item stack in an unsafe manner.

      This method is the same as calling addUnsafeEnchantment(org.bukkit.enchantments.Enchantment, int) for each element of the map.

      Parameters:
      enchantments - Enchantments to add
    • addUnsafeEnchantment

      public void addUnsafeEnchantment(@NotNull Enchantment ench, int level)
      Adds the specified Enchantment to this item stack.

      If this item stack already contained the given enchantment (at any level), it will be replaced.

      This method is unsafe and will ignore level restrictions or item type. Use at your own discretion.

      Parameters:
      ench - Enchantment to add
      level - Level of the enchantment
    • removeEnchantment

      public int removeEnchantment(@NotNull Enchantment ench)
      Removes the specified Enchantment if it exists on this ItemStack
      Parameters:
      ench - Enchantment to remove
      Returns:
      Previous level, or 0
    • removeEnchantments

      public void removeEnchantments()
      Removes all enchantments on this ItemStack.
    • serialize

      @NotNull public Map<String,Object> serialize()
      Description copied from interface: ConfigurationSerializable
      Creates a Map representation of this class.

      This class must provide a method to restore this class, as defined in the ConfigurationSerializable interface javadocs.

      Specified by:
      serialize in interface ConfigurationSerializable
      Returns:
      Map containing the current state of this class
    • deserialize

      @NotNull public static ItemStack deserialize(@NotNull Map<String,Object> args)
      Required method for configuration serialization
      Parameters:
      args - map to deserialize
      Returns:
      deserialized item stack
      See Also:
    • getItemMeta

      @Nullable public ItemMeta getItemMeta()
      Get a copy of this ItemStack's ItemMeta.
      Returns:
      a copy of the current ItemStack's ItemData
    • hasItemMeta

      public boolean hasItemMeta()
      Checks to see if any meta data has been defined.
      Returns:
      Returns true if some meta data has been set for this item
    • setItemMeta

      public boolean setItemMeta(@Nullable ItemMeta itemMeta)
      Set the ItemMeta of this ItemStack.
      Parameters:
      itemMeta - new ItemMeta, or null to indicate meta data be cleared.
      Returns:
      True if successfully applied ItemMeta, see ItemFactory.isApplicable(ItemMeta, ItemStack)
      Throws:
      IllegalArgumentException - if the item meta was not created by the ItemFactory
    • getTranslationKey

      @NotNull public String getTranslationKey()
      Description copied from interface: Translatable
      Get the translation key, suitable for use in a translation component.
      Specified by:
      getTranslationKey in interface Translatable
      Returns:
      the translation key