Mob Spawners no longer drop from Blast Mining Fixes #5052

This commit is contained in:
nossr50 2024-07-27 15:07:47 -07:00
parent e886a16388
commit bda5424a4c
3 changed files with 28 additions and 1 deletions

View File

@ -1,9 +1,11 @@
Version 2.2.018 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) 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 (Codebase) Added more unit tests for Probability and RNG
NOTES: 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. 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 Version 2.2.017
Fixed a bug with default Mace permissions (thanks SrBedrock) Fixed a bug with default Mace permissions (thanks SrBedrock)

View File

@ -37,6 +37,7 @@ import static com.gmail.nossr50.util.ItemUtils.isPickaxe;
public class MiningManager extends SkillManager { public class MiningManager extends SkillManager {
public static final String BUDDING_AMETHYST = "budding_amethyst"; 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) { public MiningManager(@NotNull McMMOPlayer mcMMOPlayer) {
super(mcMMOPlayer, PrimarySkillType.MINING); super(mcMMOPlayer, PrimarySkillType.MINING);
@ -225,13 +226,14 @@ public class MiningManager extends SkillManager {
? blockState.getBlock().getDrops(mmoPlayer.getPlayer().getInventory().getItemInMainHand()) ? blockState.getBlock().getDrops(mmoPlayer.getPlayer().getInventory().getItemInMainHand())
: List.of(new ItemStack(blockState.getType())); : List.of(new ItemStack(blockState.getType()));
ItemUtils.spawnItems(getPlayer(), Misc.getBlockCenter(blockState), ItemUtils.spawnItems(getPlayer(), Misc.getBlockCenter(blockState),
oreDrops, ItemSpawnReason.BLAST_MINING_ORES); oreDrops, BLAST_MINING_BLACKLIST, ItemSpawnReason.BLAST_MINING_ORES);
if (mcMMO.p.getAdvancedConfig().isBlastMiningBonusDropsEnabled()) { if (mcMMO.p.getAdvancedConfig().isBlastMiningBonusDropsEnabled()) {
for (int i = 1; i < dropMultiplier; i++) { for (int i = 1; i < dropMultiplier; i++) {
ItemUtils.spawnItems(getPlayer(), ItemUtils.spawnItems(getPlayer(),
Misc.getBlockCenter(blockState), Misc.getBlockCenter(blockState),
oreDrops, oreDrops,
BLAST_MINING_BLACKLIST,
ItemSpawnReason.BLAST_MINING_ORES_BONUS_DROP); ItemSpawnReason.BLAST_MINING_ORES_BONUS_DROP);
} }
} }

View File

@ -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. * Drop items at a given location.
* *