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)) {