Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
<dependency>
<groupId>io.papermc.paper</groupId>
<artifactId>paper-api</artifactId>
<version>26.1.2.build.68-stable</version>
<version>26.2-rc-2.build.9-alpha</version>
<scope>provided</scope>
</dependency>
<dependency>
Expand Down
26 changes: 14 additions & 12 deletions src/main/java/com/codingguru/inventorystacks/commands/StackCmd.java
Original file line number Diff line number Diff line change
Expand Up @@ -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 {

Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -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 {
Expand Down Expand Up @@ -196,4 +198,4 @@ private static StackType getStackTypeFromName(String name) {
return null;
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down Expand Up @@ -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)$";
Expand Down Expand Up @@ -572,4 +575,4 @@ public VersionUtil getServerVersion() {
public ServerTypeUtil getServerType() {
return serverType;
}
}
}
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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;

Expand Down Expand Up @@ -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;
Expand All @@ -126,4 +126,4 @@ private BlockFace getDispenserFacing(Block block) {
}
return null;
}
}
}
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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 {

Expand Down Expand Up @@ -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;
}
Expand All @@ -124,4 +124,4 @@ private BlockFace getDispenserFacing(Block block) {
}
return null;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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 {

Expand Down Expand Up @@ -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())
Expand All @@ -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;
}

}
}
Original file line number Diff line number Diff line change
@@ -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;
}

}
14 changes: 6 additions & 8 deletions src/main/java/com/codingguru/inventorystacks/util/ItemUtil.java
Original file line number Diff line number Diff line change
@@ -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 {
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -82,4 +80,4 @@ private static void add(Player player, ItemStack item) {
}
}

}
}
11 changes: 6 additions & 5 deletions src/main/resources/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand All @@ -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

############################################################################
Expand Down Expand Up @@ -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
one-potion-per-slot: true