From 3a2cd6d870e26ce0f98aa3a6c3b75dea49674864 Mon Sep 17 00:00:00 2001 From: GoodrichDev <147654894+GoodrichDev@users.noreply.github.com> Date: Wed, 25 Feb 2026 10:14:10 -0800 Subject: [PATCH 1/2] Fix hover event crash when shop item amount exceeds Paper limits Paper/Folia throws IllegalArgumentException when building an item hover event with stack amounts outside 1..99. Clamp only the hover-event copy of the ItemStack amount to 1..99 in PaperPlatform.setItemStackHoverEvent, preserving original shop stack amounts and behavior elsewhere. This prevents shop info panel warnings/crashes for large-amount shop items (e.g. 128) --- .../ghostchu/quickshop/platform/paper/PaperPlatform.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/platform/quickshop-platform-paper/src/main/java/com/ghostchu/quickshop/platform/paper/PaperPlatform.java b/platform/quickshop-platform-paper/src/main/java/com/ghostchu/quickshop/platform/paper/PaperPlatform.java index 153dfd76f7..c579ea7ec4 100644 --- a/platform/quickshop-platform-paper/src/main/java/com/ghostchu/quickshop/platform/paper/PaperPlatform.java +++ b/platform/quickshop-platform-paper/src/main/java/com/ghostchu/quickshop/platform/paper/PaperPlatform.java @@ -121,7 +121,13 @@ public void shutdown() { @Override public @NotNull Component setItemStackHoverEvent(@NotNull final Component oldComponent, @NotNull final ItemStack stack) { - return oldComponent.hoverEvent(stack.asHoverEvent()); + final int amount = stack.getAmount(); + if(amount >= 1 && amount <= 99) { + return oldComponent.hoverEvent(stack.asHoverEvent()); + } + final ItemStack hoverStack = stack.clone(); + hoverStack.setAmount(Math.max(1, Math.min(99, amount))); + return oldComponent.hoverEvent(hoverStack.asHoverEvent()); } @Override From ad2c52b379ec26f6154a5309fd45f3283615e4ad Mon Sep 17 00:00:00 2001 From: GoodrichDev <147654894+GoodrichDev@users.noreply.github.com> Date: Wed, 25 Feb 2026 11:02:03 -0800 Subject: [PATCH 2/2] sanitize item stack instead of individual fix reverts previous change --- .../platform/paper/PaperPlatform.java | 8 +------- .../ghostchu/quickshop/shop/ShopLoader.java | 20 +++++++++++++++++-- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/platform/quickshop-platform-paper/src/main/java/com/ghostchu/quickshop/platform/paper/PaperPlatform.java b/platform/quickshop-platform-paper/src/main/java/com/ghostchu/quickshop/platform/paper/PaperPlatform.java index c579ea7ec4..153dfd76f7 100644 --- a/platform/quickshop-platform-paper/src/main/java/com/ghostchu/quickshop/platform/paper/PaperPlatform.java +++ b/platform/quickshop-platform-paper/src/main/java/com/ghostchu/quickshop/platform/paper/PaperPlatform.java @@ -121,13 +121,7 @@ public void shutdown() { @Override public @NotNull Component setItemStackHoverEvent(@NotNull final Component oldComponent, @NotNull final ItemStack stack) { - final int amount = stack.getAmount(); - if(amount >= 1 && amount <= 99) { - return oldComponent.hoverEvent(stack.asHoverEvent()); - } - final ItemStack hoverStack = stack.clone(); - hoverStack.setAmount(Math.max(1, Math.min(99, amount))); - return oldComponent.hoverEvent(hoverStack.asHoverEvent()); + return oldComponent.hoverEvent(stack.asHoverEvent()); } @Override diff --git a/quickshop-bukkit/src/main/java/com/ghostchu/quickshop/shop/ShopLoader.java b/quickshop-bukkit/src/main/java/com/ghostchu/quickshop/shop/ShopLoader.java index 4f702939db..75f712c905 100644 --- a/quickshop-bukkit/src/main/java/com/ghostchu/quickshop/shop/ShopLoader.java +++ b/quickshop-bukkit/src/main/java/com/ghostchu/quickshop/shop/ShopLoader.java @@ -355,7 +355,7 @@ public static class DataRawDatabaseInfo { if(dataRecord.getEncoded() != null && !dataRecord.getEncoded().isEmpty()) { Log.debug("Shop has correct encoded item type, loaded as usual."); - this.item = QuickShop.getInstance().platform().decodeStack(dataRecord.getEncoded()); + this.item = sanitizeLoadedItemStack(QuickShop.getInstance().platform().decodeStack(dataRecord.getEncoded())); this.newItem = item; encodedLoaded = true; @@ -364,7 +364,7 @@ public static class DataRawDatabaseInfo { if(!encodedLoaded || this.item == null) { Log.debug("Attempting to migrate shop to new encoded type...."); - this.item = deserializeItem(dataRecord.getItem()); + this.item = sanitizeLoadedItemStack(deserializeItem(dataRecord.getItem())); this.newItem = item; needUpdate = true; } @@ -383,6 +383,22 @@ public static class DataRawDatabaseInfo { } } + private @Nullable ItemStack sanitizeLoadedItemStack(@Nullable final ItemStack stack) { + + if(stack == null) { + return null; + } + final int amount = stack.getAmount(); + final int normalizedAmount = Math.max(1, Math.min(99, amount)); + if(amount == normalizedAmount) { + return stack; + } + final ItemStack sanitized = stack.clone(); + sanitized.setAmount(normalizedAmount); + needUpdate = true; + return sanitized; + } + private @Nullable YamlConfiguration deserializeExtra(@NotNull final String extraString) { if(CommonUtil.isEmptyString(extraString)) {