From f1606362b7f8dcc60dc26eae48500230e1b9c68c Mon Sep 17 00:00:00 2001 From: Konstantin Shandurenko Date: Wed, 13 Apr 2022 21:42:09 +0300 Subject: [PATCH] Stacking rule can be changed now (#916) --- .../net/minestom/server/item/ItemStackImpl.java | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/minestom/server/item/ItemStackImpl.java b/src/main/java/net/minestom/server/item/ItemStackImpl.java index cfc779a97..8b9d82430 100644 --- a/src/main/java/net/minestom/server/item/ItemStackImpl.java +++ b/src/main/java/net/minestom/server/item/ItemStackImpl.java @@ -14,7 +14,21 @@ import java.util.function.Consumer; import java.util.function.UnaryOperator; record ItemStackImpl(Material material, int amount, ItemMeta meta) implements ItemStack { - static final @NotNull VanillaStackingRule DEFAULT_STACKING_RULE = new VanillaStackingRule(); + static final @NotNull StackingRule DEFAULT_STACKING_RULE; + + static { + final String stackingRuleProperty = System.getProperty("minestom.stacking-rule"); + if (stackingRuleProperty == null) { + DEFAULT_STACKING_RULE = new VanillaStackingRule(); + } else { + try { + DEFAULT_STACKING_RULE = (StackingRule) ClassLoader.getSystemClassLoader() + .loadClass(stackingRuleProperty).getConstructor().newInstance(); + } catch (Exception e) { + throw new RuntimeException("Could not instantiate default stacking rule", e); + } + } + } static ItemStack create(Material material, int amount, ItemMeta meta) { if (amount <= 0) return AIR;