diff --git a/pom.xml b/pom.xml
index f3d5fc0..1ceb02e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -26,7 +26,7 @@
io.papermc.paper
paper-api
- 26.1.2.build.68-stable
+ 26.2-rc-2.build.9-alpha
provided
diff --git a/src/main/java/com/codingguru/inventorystacks/commands/StackCmd.java b/src/main/java/com/codingguru/inventorystacks/commands/StackCmd.java
index bc06fa7..635f4fe 100644
--- a/src/main/java/com/codingguru/inventorystacks/commands/StackCmd.java
+++ b/src/main/java/com/codingguru/inventorystacks/commands/StackCmd.java
@@ -9,10 +9,11 @@
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
-import com.codingguru.inventorystacks.InventoryStacks;
-import com.codingguru.inventorystacks.handlers.ItemHandler;
-import com.codingguru.inventorystacks.util.MessagesUtil;
-import com.codingguru.inventorystacks.util.VersionUtil;
+import com.codingguru.inventorystacks.InventoryStacks;
+import com.codingguru.inventorystacks.handlers.ItemHandler;
+import com.codingguru.inventorystacks.util.ItemStackComparisonUtil;
+import com.codingguru.inventorystacks.util.MessagesUtil;
+import com.codingguru.inventorystacks.util.VersionUtil;
public class StackCmd implements CommandExecutor {
@@ -98,10 +99,11 @@ private void stackHand(Player player) {
if (foundItem == null || foundItem.getType() == Material.AIR || foundItem.getAmount() <= 0)
continue;
- if (foundItem.isSimilar(item) && slot != player.getInventory().getHeldItemSlot()) {
- amount = amount + foundItem.getAmount();
- player.getInventory().clear(slot);
- }
+ if (ItemStackComparisonUtil.isSimilarIgnoringMaxStackSize(foundItem, item)
+ && slot != player.getInventory().getHeldItemSlot()) {
+ amount = amount + foundItem.getAmount();
+ player.getInventory().clear(slot);
+ }
}
if (amount <= maxAmount) {
@@ -150,9 +152,9 @@ private void stackAllItems(Player player) {
if (item2 == null || item2.getAmount() <= 0)
continue;
- if (item2.isSimilar(item)) {
- if (item2.getAmount() > neededUntilMax) {
- item.setAmount(max);
+ if (ItemStackComparisonUtil.isSimilarIgnoringMaxStackSize(item2, item)) {
+ if (item2.getAmount() > neededUntilMax) {
+ item.setAmount(max);
item2.setAmount(item2.getAmount() - neededUntilMax);
break;
} else {
@@ -196,4 +198,4 @@ private static StackType getStackTypeFromName(String name) {
return null;
}
}
-}
\ No newline at end of file
+}
diff --git a/src/main/java/com/codingguru/inventorystacks/handlers/ItemHandler.java b/src/main/java/com/codingguru/inventorystacks/handlers/ItemHandler.java
index 9c85f62..4429732 100644
--- a/src/main/java/com/codingguru/inventorystacks/handlers/ItemHandler.java
+++ b/src/main/java/com/codingguru/inventorystacks/handlers/ItemHandler.java
@@ -103,7 +103,7 @@ private boolean setupServerVersion() {
String majorMinor = parts[0] + "." + parts[1];
if (versionFound.equalsIgnoreCase("craftbukkit")) {
- if (majorMinor.equals("26.1") || majorMinor.equals("1.26")) {
+ if (majorMinor.equals("26.2") || majorMinor.equals("26.1") || majorMinor.equals("1.26")) {
serverVersion = VersionUtil.v1_26;
return true;
}
@@ -464,14 +464,17 @@ private String resolveItemGroupPattern(String key) {
case "BANNERS":
case "BANNER":
return "^.*_BANNER$";
- case "MUSIC_DISCS":
- case "MUSIC_DISC":
- case "DISCS":
- case "DISC":
- return "^MUSIC_DISC_.*$";
- case "SPAWN_EGGS":
- case "SPAWN_EGG":
- return "^.*_SPAWN_EGG$";
+ case "MUSIC_DISCS":
+ case "MUSIC_DISC":
+ case "DISCS":
+ case "DISC":
+ return "^MUSIC_DISC_.*$";
+ case "ENCHANTED_BOOKS":
+ case "ENCHANTED_BOOK":
+ return "^ENCHANTED_BOOK$";
+ case "SPAWN_EGGS":
+ case "SPAWN_EGG":
+ return "^.*_SPAWN_EGG$";
case "ARROWS":
case "ARROW":
return "^(ARROW|SPECTRAL_ARROW|TIPPED_ARROW)$";
@@ -572,4 +575,4 @@ public VersionUtil getServerVersion() {
public ServerTypeUtil getServerType() {
return serverType;
}
-}
\ No newline at end of file
+}
diff --git a/src/main/java/com/codingguru/inventorystacks/listeners/BlockDispense.java b/src/main/java/com/codingguru/inventorystacks/listeners/BlockDispense.java
index a202139..8913903 100644
--- a/src/main/java/com/codingguru/inventorystacks/listeners/BlockDispense.java
+++ b/src/main/java/com/codingguru/inventorystacks/listeners/BlockDispense.java
@@ -1,7 +1,6 @@
package com.codingguru.inventorystacks.listeners;
import java.util.Map;
-import java.util.Objects;
import org.bukkit.Material;
import org.bukkit.block.Block;
@@ -17,6 +16,7 @@
import org.bukkit.inventory.meta.PotionMeta;
import org.bukkit.potion.PotionType;
+import com.codingguru.inventorystacks.util.ItemStackComparisonUtil;
import com.codingguru.inventorystacks.util.VersionUtil;
import com.codingguru.inventorystacks.util.XMaterialUtil;
@@ -111,7 +111,7 @@ private int findMatchingSlot(Inventory inv, ItemStack needle) {
if (s.getType() != needle.getType())
continue;
- if (!Objects.equals(s.getItemMeta(), needle.getItemMeta()))
+ if (!ItemStackComparisonUtil.hasSameMetaIgnoringMaxStackSize(s, needle))
continue;
return i;
@@ -126,4 +126,4 @@ private BlockFace getDispenserFacing(Block block) {
}
return null;
}
-}
\ No newline at end of file
+}
diff --git a/src/main/java/com/codingguru/inventorystacks/listeners/correction/BlockDispense.java b/src/main/java/com/codingguru/inventorystacks/listeners/correction/BlockDispense.java
index 050ca31..cd278a4 100644
--- a/src/main/java/com/codingguru/inventorystacks/listeners/correction/BlockDispense.java
+++ b/src/main/java/com/codingguru/inventorystacks/listeners/correction/BlockDispense.java
@@ -1,9 +1,8 @@
package com.codingguru.inventorystacks.listeners.correction;
-import java.util.Map;
-import java.util.Objects;
-
-import org.bukkit.Material;
+import java.util.Map;
+
+import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.block.Dispenser;
@@ -14,11 +13,12 @@
import org.bukkit.event.block.BlockDispenseEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
-import org.bukkit.inventory.meta.PotionMeta;
-import org.bukkit.potion.PotionType;
-
-import com.codingguru.inventorystacks.util.VersionUtil;
-import com.codingguru.inventorystacks.util.XMaterialUtil;
+import org.bukkit.inventory.meta.PotionMeta;
+import org.bukkit.potion.PotionType;
+
+import com.codingguru.inventorystacks.util.ItemStackComparisonUtil;
+import com.codingguru.inventorystacks.util.VersionUtil;
+import com.codingguru.inventorystacks.util.XMaterialUtil;
public class BlockDispense implements Listener {
@@ -109,8 +109,8 @@ private int findMatchingSlot(Inventory inv, ItemStack needle) {
if (s.getType() != needle.getType())
continue;
- if (!Objects.equals(s.getItemMeta(), needle.getItemMeta()))
- continue;
+ if (!ItemStackComparisonUtil.hasSameMetaIgnoringMaxStackSize(s, needle))
+ continue;
return i;
}
@@ -124,4 +124,4 @@ private BlockFace getDispenserFacing(Block block) {
}
return null;
}
-}
\ No newline at end of file
+}
diff --git a/src/main/java/com/codingguru/inventorystacks/listeners/general/DroppedItemMerge.java b/src/main/java/com/codingguru/inventorystacks/listeners/general/DroppedItemMerge.java
index 8f6b078..f129d31 100644
--- a/src/main/java/com/codingguru/inventorystacks/listeners/general/DroppedItemMerge.java
+++ b/src/main/java/com/codingguru/inventorystacks/listeners/general/DroppedItemMerge.java
@@ -13,16 +13,16 @@
import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityPickupItemEvent;
import org.bukkit.event.entity.ItemMergeEvent;
-import org.bukkit.event.entity.ItemSpawnEvent;
-import org.bukkit.event.inventory.InventoryPickupItemEvent;
-import org.bukkit.inventory.Inventory;
-import org.bukkit.inventory.ItemStack;
-import org.bukkit.inventory.meta.ItemMeta;
-
-import com.codingguru.inventorystacks.InventoryStacks;
-import com.codingguru.inventorystacks.scheduler.Schedule;
-import com.codingguru.inventorystacks.util.ConsoleUtil;
-import com.codingguru.inventorystacks.util.GroundStackUtil;
+import org.bukkit.event.entity.ItemSpawnEvent;
+import org.bukkit.event.inventory.InventoryPickupItemEvent;
+import org.bukkit.inventory.Inventory;
+import org.bukkit.inventory.ItemStack;
+
+import com.codingguru.inventorystacks.InventoryStacks;
+import com.codingguru.inventorystacks.scheduler.Schedule;
+import com.codingguru.inventorystacks.util.ConsoleUtil;
+import com.codingguru.inventorystacks.util.GroundStackUtil;
+import com.codingguru.inventorystacks.util.ItemStackComparisonUtil;
public class DroppedItemMerge implements Listener {
@@ -352,10 +352,8 @@ private boolean isMergeCandidate(ItemStack base, ItemStack other) {
if (other.getType().isAir())
return false;
- ItemStack normalizedBase = normalizeForMerge(base);
- ItemStack normalizedOther = normalizeForMerge(other);
- return normalizedBase.isSimilar(normalizedOther);
- }
+ return ItemStackComparisonUtil.isSimilarIgnoringMaxStackSize(base, other);
+ }
private void debug(String format, Object... args) {
if (!isDebugEnabled())
@@ -377,23 +375,4 @@ private String simpleItem(Item item) {
+ GroundStackUtil.getTotal(item) + ")";
}
- private ItemStack normalizeForMerge(ItemStack original) {
- ItemStack normalized = original.clone();
-
- if (!normalized.hasItemMeta())
- return normalized;
-
- ItemMeta meta = normalized.getItemMeta();
-
- if (meta == null)
- return normalized;
-
- if (!meta.hasMaxStackSize())
- return normalized;
-
- meta.setMaxStackSize(null);
- normalized.setItemMeta(meta);
- return normalized;
- }
-
-}
\ No newline at end of file
+}
diff --git a/src/main/java/com/codingguru/inventorystacks/util/ItemStackComparisonUtil.java b/src/main/java/com/codingguru/inventorystacks/util/ItemStackComparisonUtil.java
new file mode 100644
index 0000000..ffa3337
--- /dev/null
+++ b/src/main/java/com/codingguru/inventorystacks/util/ItemStackComparisonUtil.java
@@ -0,0 +1,50 @@
+package com.codingguru.inventorystacks.util;
+
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.meta.ItemMeta;
+
+import com.codingguru.inventorystacks.handlers.ItemHandler;
+
+public class ItemStackComparisonUtil {
+
+ public static boolean isSimilarIgnoringMaxStackSize(ItemStack first, ItemStack second) {
+ if (first == null || second == null)
+ return false;
+
+ if (!ItemHandler.getInstance().isUsingModernAPI())
+ return first.isSimilar(second);
+
+ return withoutMaxStackSize(first).isSimilar(withoutMaxStackSize(second));
+ }
+
+ public static boolean hasSameMetaIgnoringMaxStackSize(ItemStack first, ItemStack second) {
+ if (first == null || second == null)
+ return false;
+
+ if (!ItemHandler.getInstance().isUsingModernAPI())
+ return equals(first.getItemMeta(), second.getItemMeta());
+
+ return equals(withoutMaxStackSize(first).getItemMeta(), withoutMaxStackSize(second).getItemMeta());
+ }
+
+ private static boolean equals(ItemMeta first, ItemMeta second) {
+ return first == null ? second == null : first.equals(second);
+ }
+
+ private static ItemStack withoutMaxStackSize(ItemStack original) {
+ ItemStack normalized = original.clone();
+
+ if (!normalized.hasItemMeta())
+ return normalized;
+
+ ItemMeta meta = normalized.getItemMeta();
+
+ if (meta == null || !meta.hasMaxStackSize())
+ return normalized;
+
+ meta.setMaxStackSize(null);
+ normalized.setItemMeta(meta);
+ return normalized;
+ }
+
+}
diff --git a/src/main/java/com/codingguru/inventorystacks/util/ItemUtil.java b/src/main/java/com/codingguru/inventorystacks/util/ItemUtil.java
index 28877a7..4a3fba6 100644
--- a/src/main/java/com/codingguru/inventorystacks/util/ItemUtil.java
+++ b/src/main/java/com/codingguru/inventorystacks/util/ItemUtil.java
@@ -1,10 +1,8 @@
package com.codingguru.inventorystacks.util;
-import java.util.Objects;
-
-import org.bukkit.Material;
-import org.bukkit.entity.Player;
-import org.bukkit.inventory.Inventory;
+import org.bukkit.Material;
+import org.bukkit.entity.Player;
+import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
public class ItemUtil {
@@ -38,8 +36,8 @@ public static boolean removeOneMatching(Inventory inv, ItemStack needle) {
if (s.getType() != needle.getType())
continue;
- if (!Objects.equals(s.getItemMeta(), needle.getItemMeta()))
- continue;
+ if (!ItemStackComparisonUtil.hasSameMetaIgnoringMaxStackSize(s, needle))
+ continue;
if (s.getAmount() <= 1) {
inv.setItem(i, null);
@@ -82,4 +80,4 @@ private static void add(Player player, ItemStack item) {
}
}
-}
\ No newline at end of file
+}
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
index c27ab42..8d51098 100644
--- a/src/main/resources/config.yml
+++ b/src/main/resources/config.yml
@@ -102,7 +102,7 @@ max-stack-for-all-items:
# BEDS, POTIONS, STEWS, BUCKETS, BOATS, MINECARTS, TOOLS, WEAPONS,
# ARMOR, HORSE_ARMOR, DYES, SIGNS, DOORS, TRAPDOORS, BUTTONS,
# PRESSURE_PLATES, FENCES, SLABS, STAIRS, WALLS, CARPETS, BANNERS,
-# MUSIC_DISCS, SPAWN_EGGS, ARROWS, FIREWORKS, FOOD
+# MUSIC_DISCS, ENCHANTED_BOOKS, SPAWN_EGGS, ARROWS, FIREWORKS, FOOD
# (This list of items will also work with max-stack-for-all-items if enabled)
items:
@@ -115,9 +115,10 @@ items:
# MINECARTS: 16
# TOOLS: 1
# WEAPONS: 1
- # ARMOR: 1
- # MUSIC_DISCS: 16
- # SPAWN_EGGS: 16
+ # ARMOR: 1
+ # MUSIC_DISCS: 16
+ # ENCHANTED_BOOKS: 16
+ # SPAWN_EGGS: 16
# SPLASH_POTION: 16
############################################################################
@@ -147,4 +148,4 @@ prevent-shift-combining-damageable-items: true
# Make brewing stands not be able to stack potions (not required for 1.20.6+)
# This makes it so brewing stands only allow 1 potion in the potion slot
-one-potion-per-slot: true
\ No newline at end of file
+one-potion-per-slot: true