From 76ca7cc88fb810076ab547f3d6571a85e0fcba7d Mon Sep 17 00:00:00 2001 From: nossr50 Date: Fri, 18 Oct 2019 15:37:36 -0700 Subject: [PATCH] Additional dupe failsafes --- .../nossr50/listeners/BlockListener.java | 51 +++++++++++-------- 1 file changed, 30 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/gmail/nossr50/listeners/BlockListener.java b/src/main/java/com/gmail/nossr50/listeners/BlockListener.java index e3330e875..7374f56bf 100644 --- a/src/main/java/com/gmail/nossr50/listeners/BlockListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/BlockListener.java @@ -58,9 +58,15 @@ public class BlockListener implements Listener { //Track how many "things" are being dropped HashSet uniqueMaterials = new HashSet<>(); boolean dontRewardTE = false; //If we suspect TEs are mixed in with other things don't reward bonus drops for anything that isn't a block + int blockCount = 0; for(Item item : event.getItems()) { + //Track unique materials uniqueMaterials.add(item.getItemStack().getType()); + + //Count blocks as a second failsafe + if(item.getItemStack().getType().isBlock()) + blockCount++; } if(uniqueMaterials.size() > 1) { @@ -69,32 +75,35 @@ public class BlockListener implements Listener { dontRewardTE = true; } - for(Item item : event.getItems()) - { - ItemStack is = new ItemStack(item.getItemStack()); + //If there are more than one block in the item list we can't really trust it and will back out of rewarding bonus drops + if(blockCount <= 1) { + for(Item item : event.getItems()) + { + ItemStack is = new ItemStack(item.getItemStack()); - if(is.getAmount() <= 0) - continue; - - //TODO: Ignore this abomination its rewritten in 2.2 - if(!Config.getInstance().getDoubleDropsEnabled(PrimarySkillType.MINING, is.getType()) - && !Config.getInstance().getDoubleDropsEnabled(PrimarySkillType.HERBALISM, is.getType()) - && !Config.getInstance().getDoubleDropsEnabled(PrimarySkillType.WOODCUTTING, is.getType())) - continue; - - //If we suspect TEs might be duped only reward block - if(dontRewardTE) { - if(!is.getType().isBlock()) { + if(is.getAmount() <= 0) continue; + + //TODO: Ignore this abomination its rewritten in 2.2 + if(!Config.getInstance().getDoubleDropsEnabled(PrimarySkillType.MINING, is.getType()) + && !Config.getInstance().getDoubleDropsEnabled(PrimarySkillType.HERBALISM, is.getType()) + && !Config.getInstance().getDoubleDropsEnabled(PrimarySkillType.WOODCUTTING, is.getType())) + continue; + + //If we suspect TEs might be duped only reward block + if(dontRewardTE) { + if(!is.getType().isBlock()) { + continue; + } } - } - if (event.getBlock().getMetadata(mcMMO.BONUS_DROPS_METAKEY).size() > 0) { - BonusDropMeta bonusDropMeta = (BonusDropMeta) event.getBlock().getMetadata(mcMMO.BONUS_DROPS_METAKEY).get(0); - int bonusCount = bonusDropMeta.asInt(); + if (event.getBlock().getMetadata(mcMMO.BONUS_DROPS_METAKEY).size() > 0) { + BonusDropMeta bonusDropMeta = (BonusDropMeta) event.getBlock().getMetadata(mcMMO.BONUS_DROPS_METAKEY).get(0); + int bonusCount = bonusDropMeta.asInt(); - for (int i = 0; i < bonusCount; i++) { - event.getBlock().getWorld().dropItemNaturally(event.getBlockState().getLocation(), is); + for (int i = 0; i < bonusCount; i++) { + event.getBlock().getWorld().dropItemNaturally(event.getBlockState().getLocation(), is); + } } } }