diff --git a/src/main/java/net/minestom/server/item/ItemStack.java b/src/main/java/net/minestom/server/item/ItemStack.java index fa5711f75..2b950d9c1 100644 --- a/src/main/java/net/minestom/server/item/ItemStack.java +++ b/src/main/java/net/minestom/server/item/ItemStack.java @@ -11,6 +11,7 @@ import org.jetbrains.annotations.Nullable; import org.jglrxavpok.hephaistos.nbt.NBTCompound; import java.util.List; +import java.util.Objects; import java.util.function.Consumer; import java.util.function.IntUnaryOperator; import java.util.function.UnaryOperator; @@ -28,17 +29,20 @@ public final class ItemStack implements HoverEventSource { */ public static final @NotNull ItemStack AIR = ItemStack.of(Material.AIR); - private final StackingRule stackingRule = new VanillaStackingRule(64); + private final StackingRule stackingRule; private final Material material; private final int amount; private final ItemMeta meta; protected ItemStack(@NotNull Material material, int amount, - @NotNull ItemMeta meta) { + @NotNull ItemMeta meta, + @NotNull StackingRule stackingRule) { this.material = material; this.amount = amount; this.meta = meta; + this.stackingRule = Objects.requireNonNullElseGet(stackingRule, + () -> new VanillaStackingRule(64)); } @Contract(value = "_ -> new", pure = true) diff --git a/src/main/java/net/minestom/server/item/ItemStackBuilder.java b/src/main/java/net/minestom/server/item/ItemStackBuilder.java index 5cb6f871b..b6018c932 100644 --- a/src/main/java/net/minestom/server/item/ItemStackBuilder.java +++ b/src/main/java/net/minestom/server/item/ItemStackBuilder.java @@ -20,6 +20,8 @@ public class ItemStackBuilder { private int amount; protected ItemMetaBuilder metaBuilder; + private StackingRule stackingRule; + protected ItemStackBuilder(@NotNull Material material, @NotNull ItemMetaBuilder metaBuilder) { this.material = material; this.amount = 1; @@ -97,12 +99,18 @@ public class ItemStackBuilder { return this; } + @Contract(value = "_ -> this") + public @NotNull ItemStackBuilder stackingRule(@Nullable StackingRule stackingRule) { + this.stackingRule = stackingRule; + return this; + } + @Contract(value = "-> new", pure = true) public @NotNull ItemStack build() { if (amount <= 0) return ItemStack.AIR; - return new ItemStack(material, amount, metaBuilder.build()); + return new ItemStack(material, amount, metaBuilder.build(), stackingRule); } private static final class DefaultMeta extends ItemMetaBuilder {