diff --git a/Changelog.txt b/Changelog.txt index a2b6e2591..195e7498e 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -1,9 +1,11 @@ Version 2.2.018 Fixed a probability bug where certain skills would max out in chance to succeed well before they were supposed to (such as Dodge) + Blast Mining will no longer drop mob spawners (see notes) (Codebase) Added more unit tests for Probability and RNG NOTES: This probability bug was a big oopsie and showed a gap in unit test coverage, I've added that coverage and a bug like this in theory shouldn't happen again. + In a future version I will add configuration for admins to control what blocks are not allowed to be dropped by blast mining. Version 2.2.017 Fixed a bug with default Mace permissions (thanks SrBedrock) diff --git a/src/main/java/com/gmail/nossr50/skills/mining/MiningManager.java b/src/main/java/com/gmail/nossr50/skills/mining/MiningManager.java index 1470988ea..7a576cab6 100644 --- a/src/main/java/com/gmail/nossr50/skills/mining/MiningManager.java +++ b/src/main/java/com/gmail/nossr50/skills/mining/MiningManager.java @@ -37,6 +37,7 @@ import static com.gmail.nossr50.util.ItemUtils.isPickaxe; public class MiningManager extends SkillManager { public static final String BUDDING_AMETHYST = "budding_amethyst"; + public static final Collection BLAST_MINING_BLACKLIST = List.of(Material.SPAWNER); public MiningManager(@NotNull McMMOPlayer mcMMOPlayer) { super(mcMMOPlayer, PrimarySkillType.MINING); @@ -225,13 +226,14 @@ public class MiningManager extends SkillManager { ? blockState.getBlock().getDrops(mmoPlayer.getPlayer().getInventory().getItemInMainHand()) : List.of(new ItemStack(blockState.getType())); ItemUtils.spawnItems(getPlayer(), Misc.getBlockCenter(blockState), - oreDrops, ItemSpawnReason.BLAST_MINING_ORES); + oreDrops, BLAST_MINING_BLACKLIST, ItemSpawnReason.BLAST_MINING_ORES); if (mcMMO.p.getAdvancedConfig().isBlastMiningBonusDropsEnabled()) { for (int i = 1; i < dropMultiplier; i++) { ItemUtils.spawnItems(getPlayer(), Misc.getBlockCenter(blockState), oreDrops, + BLAST_MINING_BLACKLIST, ItemSpawnReason.BLAST_MINING_ORES_BONUS_DROP); } } diff --git a/src/main/java/com/gmail/nossr50/util/ItemUtils.java b/src/main/java/com/gmail/nossr50/util/ItemUtils.java index 60bb75069..6dc9b2785 100644 --- a/src/main/java/com/gmail/nossr50/util/ItemUtils.java +++ b/src/main/java/com/gmail/nossr50/util/ItemUtils.java @@ -696,6 +696,29 @@ public final class ItemUtils { } } + /** + * Drop items at a given location. + * + * @param player player to drop the items for + * @param location The location to drop the items at + * @param itemStacks The items to drop + * @param blackList The items to skip + * @param itemSpawnReason the reason for the item drop + */ + public static void spawnItems(@Nullable Player player, + @NotNull Location location, + @NotNull Collection itemStacks, + @NotNull Collection blackList, + @NotNull ItemSpawnReason itemSpawnReason) { + for (ItemStack is : itemStacks) { + // Skip blacklisted items + if(blackList.contains(is.getType())) { + continue; + } + spawnItem(player, location, is, itemSpawnReason); + } + } + /** * Drop items at a given location. *