Browse Source

Mob Spawners no longer drop from Blast Mining Fixes #5052

nossr50 1 year ago
parent
commit
bda5424a4c

+ 2 - 0
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)

+ 3 - 1
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<Material> 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);
                         }
                     }

+ 23 - 0
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<ItemStack> itemStacks,
+                                  @NotNull Collection<Material> 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.
      *