From 57e33bbf392df0c3ec5830734136251293c5c778 Mon Sep 17 00:00:00 2001 From: bm01 Date: Fri, 8 Mar 2013 10:31:32 +0100 Subject: [PATCH] Fixed triple drop awarding experience twice in mining The previous commit also fixed this for Herbalism --- Changelog.txt | 1 + .../nossr50/listeners/BlockListener.java | 5 ---- .../gmail/nossr50/skills/mining/Mining.java | 12 +------- .../nossr50/skills/mining/MiningManager.java | 28 +++++++++++++------ 4 files changed, 22 insertions(+), 24 deletions(-) diff --git a/Changelog.txt b/Changelog.txt index 00f8dd1d6..29fd7c229 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -9,6 +9,7 @@ Key: Version 1.4.03-dev + Added option to advanced.yml to determine the # of enchant levels used when buffing Super Breaker & Giga Drill Breaker + = Fixed bug where triple drops would award twice the amount of experience in Herbalism and Mining = Fixed bug where Green Thumb would consume wheat instead of seeds = Fixed bug where Green Terra would consume twice the amount of seed when used on crops = Fixed bug where experience would be awarded in Herbalism for some player-placed blocks diff --git a/src/main/java/com/gmail/nossr50/listeners/BlockListener.java b/src/main/java/com/gmail/nossr50/listeners/BlockListener.java index 2e43af207..1aacc2dfb 100644 --- a/src/main/java/com/gmail/nossr50/listeners/BlockListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/BlockListener.java @@ -137,7 +137,6 @@ public class BlockListener implements Listener { McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player); BlockState blockState = event.getBlock().getState(); - ItemStack heldItem = player.getItemInHand(); /* HERBALISM */ @@ -162,10 +161,6 @@ public class BlockListener implements Listener { else if (BlockUtils.affectedBySuperBreaker(blockState) && ItemUtils.isPickaxe(heldItem) && Permissions.skillEnabled(player, SkillType.MINING) && !mcMMO.placeStore.isTrue(blockState)) { MiningManager miningManager = mcMMOPlayer.getMiningManager(); miningManager.miningBlockCheck(blockState); - - if (mcMMOPlayer.getAbilityMode(AbilityType.SUPER_BREAKER)) { - miningManager.miningBlockCheck(blockState); - } } /* WOOD CUTTING */ diff --git a/src/main/java/com/gmail/nossr50/skills/mining/Mining.java b/src/main/java/com/gmail/nossr50/skills/mining/Mining.java index ddf9e80f6..30d806869 100644 --- a/src/main/java/com/gmail/nossr50/skills/mining/Mining.java +++ b/src/main/java/com/gmail/nossr50/skills/mining/Mining.java @@ -43,10 +43,6 @@ public class Mining { protected static void handleSilkTouchDrops(BlockState blockState) { Material blockType = blockState.getType(); - if (blockType != Material.GLOWING_REDSTONE_ORE && !Config.getInstance().getDoubleDropsEnabled(SkillType.MINING, blockType)) { - return; - } - switch (blockType) { case ENDER_STONE: case GOLD_ORE: @@ -89,13 +85,7 @@ public class Mining { */ protected static void handleMiningDrops(BlockState blockState) { Material blockType = blockState.getType(); - - if (blockType != Material.GLOWING_REDSTONE_ORE && !Config.getInstance().getDoubleDropsEnabled(SkillType.MINING, blockType)) { - return; - } - Location location = blockState.getLocation(); - ItemStack dropItem; switch (blockType) { case COAL_ORE: @@ -130,7 +120,7 @@ public class Mining { int minimumDropAmount = customBlock.getMinimumDropAmount(); int maximumDropAmount = customBlock.getMaximumDropAmount(); - dropItem = customBlock.getItemDrop(); + ItemStack dropItem = customBlock.getItemDrop(); if (minimumDropAmount != maximumDropAmount) { Misc.dropItems(location, dropItem, minimumDropAmount); 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 c76b4a2d8..862b37b95 100644 --- a/src/main/java/com/gmail/nossr50/skills/mining/MiningManager.java +++ b/src/main/java/com/gmail/nossr50/skills/mining/MiningManager.java @@ -12,6 +12,7 @@ import org.bukkit.entity.Player; import org.bukkit.entity.TNTPrimed; import com.gmail.nossr50.mcMMO; +import com.gmail.nossr50.config.Config; import com.gmail.nossr50.datatypes.player.McMMOPlayer; import com.gmail.nossr50.datatypes.player.PlayerProfile; import com.gmail.nossr50.datatypes.skills.AbilityType; @@ -54,18 +55,29 @@ public class MiningManager extends SkillManager{ */ public void miningBlockCheck(BlockState blockState) { Player player = getPlayer(); - int xp = Mining.getBlockXp(blockState); - if (Permissions.doubleDrops(player, skill) && SkillUtils.activationSuccessful(getSkillLevel(), getActivationChance(), Mining.doubleDropsMaxChance, Mining.doubleDropsMaxLevel)) { - if (player.getItemInHand().containsEnchantment(Enchantment.SILK_TOUCH)) { - Mining.handleSilkTouchDrops(blockState); - } - else { - Mining.handleMiningDrops(blockState); + if (!Permissions.doubleDrops(player, skill)) { + return; + } + + Material material = blockState.getType(); + + if (material != Material.GLOWING_REDSTONE_ORE && !Config.getInstance().getDoubleDropsEnabled(skill, material)) { + return; + } + + for (int i = mcMMOPlayer.getAbilityMode(skill.getAbility()) ? 2 : 1; i != 0; i--) { + if (SkillUtils.activationSuccessful(getSkillLevel(), getActivationChance(), Mining.doubleDropsMaxChance, Mining.doubleDropsMaxLevel)) { + if (player.getItemInHand().containsEnchantment(Enchantment.SILK_TOUCH)) { + Mining.handleSilkTouchDrops(blockState); + } + else { + Mining.handleMiningDrops(blockState); + } } } - applyXpGain(xp); + applyXpGain(Mining.getBlockXp(blockState)); } /**