diff --git a/sanctuary/build.gradle b/sanctuary/build.gradle index bfe2fe8..845b8af 100644 --- a/sanctuary/build.gradle +++ b/sanctuary/build.gradle @@ -88,6 +88,9 @@ tasks.register("verifyBlackMarket") { || !service.contains("loadedDeliveryBox") || !service.contains("PARCEL_RETENTION_MILLIS") || !policy.contains("DataComponents.CONTAINER") || !policy.contains("DataComponents.BUNDLE_CONTENTS") || !shop.contains("public static final boolean OPEN = true") + || !shop.contains("BlackMarketService.countPlayerItem") + || !shop.contains("BlackMarketService.removePlayerItem") + || shop.contains("getContainerSize()") || !questData.contains('SAVE_KEY = "black_market_quests"') || !quests.contains("ServerLivingEntityEvents.AFTER_DEATH") || !quests.contains("QuestBoardTier.ACTIVATION_COST") diff --git a/sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/shop/ShopService.java b/sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/shop/ShopService.java index 6ec1204..e5bf85d 100644 --- a/sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/shop/ShopService.java +++ b/sanctuary/src/main/java/fr/koka99cab/sanctuary26/sanctuary/shop/ShopService.java @@ -237,24 +237,13 @@ public final class ShopService { } private static Item currency(Identifier id) { return BuiltInRegistries.ITEM.getOptional(id).orElse(null); } private static int countCurrency(ServerPlayer player, Item item) { - if (item == null) return 0; - int total = 0; - for (int slot = 0; slot < player.getInventory().getContainerSize(); slot++) { - ItemStack stack = player.getInventory().getItem(slot); if (stack.is(item)) total += stack.getCount(); - } - return total; + return item == null ? 0 : BlackMarketService.countPlayerItem(player, item); } private static boolean hasCurrency(ServerPlayer player, Item item, int count) { return countCurrency(player, item) >= count; } private static void removeCurrency(ServerPlayer player, Item item, int count) { - int remaining = count; - for (int slot = 0; slot < player.getInventory().getContainerSize() && remaining > 0; slot++) { - ItemStack stack = player.getInventory().getItem(slot); - if (!stack.is(item)) continue; - int removed = Math.min(remaining, stack.getCount()); stack.shrink(removed); remaining -= removed; - } - player.getInventory().setChanged(); + BlackMarketService.removePlayerItem(player, item, count); } private static void celebrate(ServerLevel level, BlockPos pos, java.util.UUID owner, ItemStack parcel) { level.playSound(null, pos, SoundEvents.PLAYER_LEVELUP, SoundSource.BLOCKS, 0.65F, 1.35F); diff --git a/sanctuary/src/test/java/fr/koka99cab/sanctuary26/sanctuary/shop/ShopDeliveryTimingSmoke.java b/sanctuary/src/test/java/fr/koka99cab/sanctuary26/sanctuary/shop/ShopDeliveryTimingSmoke.java index 346a11b..abcf664 100644 --- a/sanctuary/src/test/java/fr/koka99cab/sanctuary26/sanctuary/shop/ShopDeliveryTimingSmoke.java +++ b/sanctuary/src/test/java/fr/koka99cab/sanctuary26/sanctuary/shop/ShopDeliveryTimingSmoke.java @@ -1,5 +1,6 @@ package fr.koka99cab.sanctuary26.sanctuary.shop; +import fr.koka99cab.sanctuary26.sanctuary.gameplay.SanctuaryInventoryCapacity; import net.minecraft.util.RandomSource; public final class ShopDeliveryTimingSmoke { @@ -35,5 +36,9 @@ public final class ShopDeliveryTimingSmoke { || ShopProgression.slotCost(10) != -1) { throw new AssertionError("Shop capacity bounds are invalid"); } + if (SanctuaryInventoryCapacity.VANILLA_ROW_COUNT != 4 + || SanctuaryInventoryCapacity.MAX_ROW_COUNT != 6) { + throw new AssertionError("Shop currency counting must include overflow rows 5-6"); + } } }