From 74cf79c2672c62108ca4431d4deb86336d896977 Mon Sep 17 00:00:00 2001 From: Bukkit/Spigot Date: Sun, 28 Apr 2024 09:11:30 +1000 Subject: [PATCH] #1002: Improve documentation and implementation of getMaxStackSize By: 2008Choco --- .../src/main/java/org/bukkit/Material.java | 9 ++++++++- .../java/org/bukkit/inventory/ItemStack.java | 17 ++++++++++------- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/paper-api/src/main/java/org/bukkit/Material.java b/paper-api/src/main/java/org/bukkit/Material.java index fe9c5ccdb..2750e143a 100644 --- a/paper-api/src/main/java/org/bukkit/Material.java +++ b/paper-api/src/main/java/org/bukkit/Material.java @@ -116,6 +116,8 @@ import org.bukkit.block.data.type.WallHangingSign; import org.bukkit.block.data.type.WallSign; import org.bukkit.inventory.CreativeCategory; import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.material.MaterialData; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -4753,7 +4755,12 @@ public enum Material implements Keyed, Translatable { } /** - * Gets the maximum amount of this material that can be held in a stack + * Gets the maximum amount of this material that can be held in a stack. + *

+ * Note that this is the default maximum size for this Material. + * {@link ItemStack ItemStacks} are able to change their maximum stack size per + * stack with {@link ItemMeta#setMaxStackSize(Integer)}. If an ItemStack instance + * is available, {@link ItemStack#getMaxStackSize()} may be preferred. * * @return Maximum stack size for this material */ diff --git a/paper-api/src/main/java/org/bukkit/inventory/ItemStack.java b/paper-api/src/main/java/org/bukkit/inventory/ItemStack.java index cf1733bc7..257b5db1a 100644 --- a/paper-api/src/main/java/org/bukkit/inventory/ItemStack.java +++ b/paper-api/src/main/java/org/bukkit/inventory/ItemStack.java @@ -231,18 +231,21 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, Translat } /** - * Get the maximum stacksize for the material hold in this ItemStack. - * (Returns -1 if it has no idea) + * Get the maximum stack size for this item. If this item has a max stack + * size component ({@link ItemMeta#hasMaxStackSize()}), the value of that + * component will be returned. Otherwise, this item's Material's {@link + * Material#getMaxStackSize() default maximum stack size} will be returned + * instead. * - * @return The maximum you can stack this material to. + * @return The maximum you can stack this item to. */ @Utility public int getMaxStackSize() { - Material material = getType(); - if (material != null) { - return material.getMaxStackSize(); + if (meta != null && meta.hasMaxStackSize()) { + return meta.getMaxStackSize(); } - return -1; + + return getType().getMaxStackSize(); } private void createData(final byte data) {