From 016fd4fece28953dc508a82a85dc1deddf740201 Mon Sep 17 00:00:00 2001 From: typlosion14 Date: Mon, 12 Oct 2026 19:07:58 +0200 Subject: [PATCH] Stop booster packs from dropping when chest blocks are broken isChestLootTable() matched any loot table whose path contained "chest", including block drop tables such as blocks/chest, blocks/trapped_chest, blocks/ender_chest and modded chest blocks. Those are rolled on every break, so placing and breaking a chest (even a freshly crafted one) gave a boosterChestSpawnChance% chance of a free booster, which players could farm and reported as a dupe. Only structure chest tables (chests/... and .../chests/...) now get the booster pool, and blocks/... tables are rejected explicitly. --- .../howlite/cobblemoncards/fabric/FabricCobblemonCards.java | 5 ++++- .../cobblemoncards/neoforge/NeoForgeCobblemonCards.java | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/fabric/src/main/java/com/howlite/cobblemoncards/fabric/FabricCobblemonCards.java b/fabric/src/main/java/com/howlite/cobblemoncards/fabric/FabricCobblemonCards.java index e126537..2f4ff07 100644 --- a/fabric/src/main/java/com/howlite/cobblemoncards/fabric/FabricCobblemonCards.java +++ b/fabric/src/main/java/com/howlite/cobblemoncards/fabric/FabricCobblemonCards.java @@ -340,6 +340,9 @@ public MerchantOffer getOffer(Entity entity, RandomSource random) { private static boolean isChestLootTable(net.minecraft.resources.ResourceLocation location) { if (location == null) return false; String path = location.getPath().toLowerCase(java.util.Locale.ROOT); - return path.startsWith("chests/") || path.contains("/chests/") || path.endsWith("_chest") || path.contains("chest"); + // Block drop tables (blocks/chest, blocks/trapped_chest, ...) must never match + if (path.startsWith("blocks/")) return false; + // But accept chest loot tables (chests/simple_dungeon, chests/village/village_weaponsmith, mymod:structures/chests/ruins, ...) + return path.startsWith("chests/") || path.contains("/chests/"); } } diff --git a/neoforge/src/main/java/com/howlite/cobblemoncards/neoforge/NeoForgeCobblemonCards.java b/neoforge/src/main/java/com/howlite/cobblemoncards/neoforge/NeoForgeCobblemonCards.java index 3432536..2f4c6a7 100644 --- a/neoforge/src/main/java/com/howlite/cobblemoncards/neoforge/NeoForgeCobblemonCards.java +++ b/neoforge/src/main/java/com/howlite/cobblemoncards/neoforge/NeoForgeCobblemonCards.java @@ -392,6 +392,9 @@ public void onAddReloadListeners(AddReloadListenerEvent event) { private static boolean isChestLootTable(ResourceLocation location) { if (location == null) return false; String path = location.getPath().toLowerCase(java.util.Locale.ROOT); - return path.startsWith("chests/") || path.contains("/chests/") || path.endsWith("_chest") || path.contains("chest"); + // Block drop tables (blocks/chest, blocks/trapped_chest, ...) must never match + if (path.startsWith("blocks/")) return false; + // But accept chest loot tables (chests/simple_dungeon, chests/village/village_weaponsmith, mymod:structures/chests/ruins, ...) + return path.startsWith("chests/") || path.contains("/chests/"); } }