Class ItemStack
- All Implemented Interfaces:
Cloneable
,HoverEventSource<HoverEvent.ShowItem>
,Translatable
,ConfigurationSerializable
IMPORTANT: An ItemStack is only designed to contain items. Do not
use this class to encapsulate Materials for which Material.isItem()
returns false.
-
Constructor Summary
ModifierConstructorDescriptionprotected
Creates a new item stack derived from the specified stackDefaults stack size to 1, with no extra data.An item stack with no extra data.Deprecated.Deprecated.this method uses an ambiguous data byte object -
Method Summary
Modifier and TypeMethodDescriptionadd()
Adds 1 to this itemstack.add
(int qty) Adds quantity to this itemstack.void
addEnchantment
(@NotNull Enchantment ench, int level) Adds the specifiedEnchantment
to this item stack.void
addEnchantments
(@NotNull Map<Enchantment, Integer> enchantments) Adds the specified enchantments to this item stack.void
addItemFlags
(@NotNull ItemFlag... itemFlags) Set itemflags which should be ignored when rendering a ItemStack in the Client.void
addUnsafeEnchantment
(@NotNull Enchantment ench, int level) Adds the specifiedEnchantment
to this item stack.void
addUnsafeEnchantments
(@NotNull Map<Enchantment, Integer> enchantments) Adds the specified enchantments to this item stack in an unsafe manner.Creates a hover event with value derived from this object.asOne()
Clones the itemstack and returns it a single quantity.asQuantity
(int qty) Clones the itemstack and returns it as the specified quantityboolean
Checks if this itemstack can repair another.clone()
boolean
Checks if this ItemStack contains the givenEnchantment
deserialize
(@NotNull Map<String, Object> args) Required method for configuration serializationdeserializeBytes
(@org.jetbrains.annotations.NotNull byte[] bytes) Deserializes this itemstack from raw NBT bytes.Get the formatted display name of theItemStack
.<M extends ItemMeta>
booleanEdits theItemMeta
of this stack if the meta is of the specified type.boolean
Edits theItemMeta
of this stack.enchantWithLevels
(@org.jetbrains.annotations.Range(from=1L, to=30L) int levels, boolean allowTreasure, Random random) Randomly enchants a copy of thisItemStack
using the given experience levels.Minecraft updates are converting simple item stacks into more complex NBT oriented Item Stacks.boolean
int
Gets the amount of items in this stackgetData()
Deprecated.cast toBlockDataMeta
and useBlockDataMeta.getBlockData(Material)
short
Deprecated.int
Gets the level of the specified enchantment on this item stackGets a map containing all enchantments and their levels on this item.Deprecated.ItemStack
implementsTranslatable
; use that andComponent.translatable(net.kyori.adventure.translation.Translatable)
instead.Get current set itemFlags.Get a copy of this ItemStack'sItemMeta
.getLore()
Deprecated.in favor oflore()
int
int
Get the maximum stacksize for the material hold in this ItemStack.Gets the item rarity of the itemstack.Deprecated.usetranslationKey()
getType()
Gets the type of this itemint
hashCode()
boolean
hasItemFlag
(@NotNull ItemFlag flag) Check if the specified flag is present on this item.boolean
Checks to see if any meta data has been defined.boolean
isRepairableBy
(@NotNull ItemStack repairMaterial) Checks if an itemstack can repair this itemstack.boolean
This method is the same as equals, but does not consider stack size (amount).lore()
If the item has lore, returns it, else it will return nullvoid
Sets the lore for this item.int
Removes the specifiedEnchantment
if it exists on this ItemStackvoid
removeItemFlags
(@NotNull ItemFlag... itemFlags) Remove specific set of itemFlags.Creates a Map representation of this class.@org.jetbrains.annotations.NotNull byte[]
Serializes this itemstack to raw bytes in NBT.void
setAmount
(int amount) Sets the amount of items in this stackvoid
setData
(@Nullable MaterialData data) Deprecated.void
setDurability
(short durability) Deprecated.durability is now part of ItemMeta.boolean
setItemMeta
(@Nullable ItemMeta itemMeta) Set the ItemMeta of this ItemStack.void
Deprecated.in favour oflore(List)
void
Sets the type of this itemsubtract()
Subtracts 1 to this itemstack.subtract
(int qty) Subtracts quantity to this itemstack.toString()
Gets the translation key.Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
Methods inherited from interface net.kyori.adventure.text.event.HoverEventSource
asHoverEvent
-
Constructor Details
-
ItemStack
protected ItemStack() -
ItemStack
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
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 materialamount
- stack size
-
ItemStack
Deprecated.An item stack with the specified damage / durability- Parameters:
type
- item materialamount
- stack sizedamage
- durability / damage
-
ItemStack
@Deprecated public ItemStack(@NotNull @NotNull Material type, int amount, short damage, @Nullable @Nullable Byte data) Deprecated.this method uses an ambiguous data byte object- Parameters:
type
- the typeamount
- the amount in the stackdamage
- the damage value of the itemdata
- the data value or null
-
ItemStack
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
Gets the type of this item- Returns:
- Type of the items in this stack
-
setType
Sets the type of this itemNote 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
Deprecated.cast toBlockDataMeta
and useBlockDataMeta.getBlockData(Material)
Gets the MaterialData for this stack of items- Returns:
- MaterialData for this item
-
setData
Deprecated.Sets the MaterialData for this stack of items- Parameters:
data
- New MaterialData for this item
-
setDurability
Deprecated.durability is now part of ItemMeta. To avoid confusion and misuse,getItemMeta()
,setItemMeta(ItemMeta)
andDamageable.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.Gets the durability of this item- Returns:
- Durability of this item
-
getMaxStackSize
public int getMaxStackSize()Get the maximum stacksize for the material hold in this ItemStack. (Returns -1 if it has no idea)- Returns:
- The maximum you can stack this material to.
-
toString
-
equals
-
isSimilar
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
-
hashCode
public int hashCode() -
containsEnchantment
Checks if this ItemStack contains the givenEnchantment
- Parameters:
ench
- Enchantment to test- Returns:
- True if this has the given enchantment
-
getEnchantmentLevel
Gets the level of the specified enchantment on this item stack- Parameters:
ench
- Enchantment to check- Returns:
- Level of the enchantment, or 0
-
getEnchantments
Gets a map containing all enchantments and their levels on this item.- Returns:
- Map of enchantments.
-
addEnchantments
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 nullIllegalArgumentException
- if any specific enchantment or level is null. Warning: Some enchantments may be added before this exception is thrown.
-
addEnchantment
Adds the specifiedEnchantment
to this item stack.If this item stack already contained the given enchantment (at any level), it will be replaced.
- Parameters:
ench
- Enchantment to addlevel
- Level of the enchantment- Throws:
IllegalArgumentException
- if enchantment null, or enchantment is not applicable
-
addUnsafeEnchantments
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
Adds the specifiedEnchantment
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 addlevel
- Level of the enchantment
-
removeEnchantment
Removes the specifiedEnchantment
if it exists on this ItemStack- Parameters:
ench
- Enchantment to remove- Returns:
- Previous level, or 0
-
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 interfaceConfigurationSerializable
- Returns:
- Map containing the current state of this class
-
deserialize
Required method for configuration serialization- Parameters:
args
- map to deserialize- Returns:
- deserialized item stack
- See Also:
-
editMeta
Edits theItemMeta
of this stack.The
Consumer
must only interact with this stack'sItemMeta
through the providedItemMeta
instance. Calling this method or any other meta-related method of theItemStack
class (such asgetItemMeta()
,addItemFlags(ItemFlag...)
,lore()
, etc.) from inside the consumer is disallowed and will produce undefined results or exceptions.- Parameters:
consumer
- the meta consumer- Returns:
true
if the edit was successful,false
otherwise
-
editMeta
public <M extends ItemMeta> boolean editMeta(@NotNull @NotNull Class<M> metaClass, @NotNull Consumer<@NotNull ? super M> consumer) Edits theItemMeta
of this stack if the meta is of the specified type.The
Consumer
must only interact with this stack'sItemMeta
through the providedItemMeta
instance. Calling this method or any other meta-related method of theItemStack
class (such asgetItemMeta()
,addItemFlags(ItemFlag...)
,lore()
, etc.) from inside the consumer is disallowed and will produce undefined results or exceptions.- Type Parameters:
M
- the meta type- Parameters:
metaClass
- the type of meta to editconsumer
- the meta consumer- Returns:
true
if the edit was successful,false
otherwise
-
getItemMeta
Get a copy of this ItemStack'sItemMeta
.- 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
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 theItemFactory
-
enchantWithLevels
@NotNull public @NotNull ItemStack enchantWithLevels(@org.jetbrains.annotations.Range(from=1L, to=30L) int levels, boolean allowTreasure, @NotNull Random random) Randomly enchants a copy of thisItemStack
using the given experience levels.If this ItemStack is already enchanted, the existing enchants will be removed before enchanting.
Levels must be in range
[1, 30]
.- Parameters:
levels
- levels to use for enchantingallowTreasure
- whether to allow enchantments whereEnchantment.isTreasure()
returns truerandom
-Random
instance to use for enchanting- Returns:
- enchanted copy of the provided ItemStack
- Throws:
IllegalArgumentException
- on bad arguments
-
asHoverEvent
@NotNull public HoverEvent<HoverEvent.ShowItem> asHoverEvent(@NotNull UnaryOperator<HoverEvent.ShowItem> op) Description copied from interface:net.kyori.adventure.text.event.HoverEventSource
Creates a hover event with value derived from this object.The event value will be passed through the provided callback to allow transforming the original value of the event.
- Specified by:
asHoverEvent
in interfaceHoverEventSource<HoverEvent.ShowItem>
- Parameters:
op
- transformation on value- Returns:
- a hover event
-
displayName
Get the formatted display name of theItemStack
.- Returns:
- display name of the
ItemStack
-
ensureServerConversions
Minecraft updates are converting simple item stacks into more complex NBT oriented Item Stacks. Use this method to to ensure any desired data conversions are processed. The input itemstack will not be the same as the returned itemstack.- Returns:
- A potentially Data Converted ItemStack
-
deserializeBytes
@NotNull public static @NotNull ItemStack deserializeBytes(@NotNull @org.jetbrains.annotations.NotNull byte[] bytes) Deserializes this itemstack from raw NBT bytes. NBT is safer for data migrations as it will use the built in data converter instead of bukkits dangerous serialization system. This expects that the DataVersion was stored on the root of the Compound, as saved from theserializeAsBytes()
API returned.- Parameters:
bytes
- bytes representing an item in NBT- Returns:
- ItemStack migrated to this version of Minecraft if needed.
-
serializeAsBytes
Serializes this itemstack to raw bytes in NBT. NBT is safer for data migrations as it will use the built in data converter instead of bukkits dangerous serialization system.- Returns:
- bytes representing this item in NBT.
-
getI18NDisplayName
Deprecated.ItemStack
implementsTranslatable
; use that andComponent.translatable(net.kyori.adventure.translation.Translatable)
instead.Gets the Display name as seen in the Client. Currently the server only supports the English language. To override this, You must replace the language file embedded in the server jar.- Returns:
- Display name of Item
-
getMaxItemUseDuration
public int getMaxItemUseDuration() -
asOne
Clones the itemstack and returns it a single quantity.- Returns:
- The new itemstack with 1 quantity
-
asQuantity
Clones the itemstack and returns it as the specified quantity- Parameters:
qty
- The quantity of the cloned item- Returns:
- The new itemstack with specified quantity
-
add
Adds 1 to this itemstack. Will not go over the items max stack size.- Returns:
- The same item (not a clone)
-
add
Adds quantity to this itemstack. Will not go over the items max stack size.- Parameters:
qty
- The amount to add- Returns:
- The same item (not a clone)
-
subtract
Subtracts 1 to this itemstack. Going to 0 or less will invalidate the item.- Returns:
- The same item (not a clone)
-
subtract
Subtracts quantity to this itemstack. Going to 0 or less will invalidate the item.- Parameters:
qty
- The amount to add- Returns:
- The same item (not a clone)
-
getLore
Deprecated.in favor oflore()
If the item has lore, returns it, else it will return null- Returns:
- The lore, or null
-
lore
If the item has lore, returns it, else it will return null- Returns:
- The lore, or null
-
setLore
Deprecated.in favour oflore(List)
Sets the lore for this item. Removes lore when given null.- Parameters:
lore
- the lore that will be set
-
lore
Sets the lore for this item. Removes lore when given null.- Parameters:
lore
- the lore that will be set
-
addItemFlags
Set itemflags which should be ignored when rendering a ItemStack in the Client. This Method does silently ignore double set itemFlags.- Parameters:
itemFlags
- The hideflags which shouldn't be rendered
-
removeItemFlags
Remove specific set of itemFlags. This tells the Client it should render it again. This Method does silently ignore double removed itemFlags.- Parameters:
itemFlags
- Hideflags which should be removed
-
getItemFlags
Get current set itemFlags. The collection returned is unmodifiable.- Returns:
- A set of all itemFlags set
-
hasItemFlag
Check if the specified flag is present on this item.- Parameters:
flag
- the flag to check- Returns:
- if it is present
-
getTranslationKey
Deprecated.usetranslationKey()
Gets the translation key for this itemstack. This is not the same as getting the translation key for the material of this itemstack.- Returns:
- the translation key
-
translationKey
Gets the translation key.This is not the same as getting the translation key for the material of this itemstack.
- Specified by:
translationKey
in interfaceTranslatable
- Returns:
- the translation key
-
getRarity
Gets the item rarity of the itemstack. The rarity can change based on enchantements.- Returns:
- the itemstack rarity
-
isRepairableBy
Checks if an itemstack can repair this itemstack. Returns false ifthis
orrepairMaterial
's type is not an item (Material.isItem()
).- Parameters:
repairMaterial
- the repair material- Returns:
- true if it is repairable by, false if not
-
canRepair
Checks if this itemstack can repair another. Returns false ifthis
ortoBeRepaired
's type is not an item (Material.isItem()
).- Parameters:
toBeRepaired
- the itemstack to be repaired- Returns:
- true if it can repair, false if not
-
setDurability(short)