Fixed triple drop awarding experience twice in mining

The previous commit also fixed this for Herbalism
This commit is contained in:
bm01 2013-03-08 10:31:32 +01:00
parent cddcf36016
commit 57e33bbf39
4 changed files with 22 additions and 24 deletions

View File

@ -9,6 +9,7 @@ Key:
Version 1.4.03-dev Version 1.4.03-dev
+ Added option to advanced.yml to determine the # of enchant levels used when buffing Super Breaker & Giga Drill Breaker + 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 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 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 = Fixed bug where experience would be awarded in Herbalism for some player-placed blocks

View File

@ -137,7 +137,6 @@ public class BlockListener implements Listener {
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player); McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
BlockState blockState = event.getBlock().getState(); BlockState blockState = event.getBlock().getState();
ItemStack heldItem = player.getItemInHand(); ItemStack heldItem = player.getItemInHand();
/* HERBALISM */ /* 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)) { else if (BlockUtils.affectedBySuperBreaker(blockState) && ItemUtils.isPickaxe(heldItem) && Permissions.skillEnabled(player, SkillType.MINING) && !mcMMO.placeStore.isTrue(blockState)) {
MiningManager miningManager = mcMMOPlayer.getMiningManager(); MiningManager miningManager = mcMMOPlayer.getMiningManager();
miningManager.miningBlockCheck(blockState); miningManager.miningBlockCheck(blockState);
if (mcMMOPlayer.getAbilityMode(AbilityType.SUPER_BREAKER)) {
miningManager.miningBlockCheck(blockState);
}
} }
/* WOOD CUTTING */ /* WOOD CUTTING */

View File

@ -43,10 +43,6 @@ public class Mining {
protected static void handleSilkTouchDrops(BlockState blockState) { protected static void handleSilkTouchDrops(BlockState blockState) {
Material blockType = blockState.getType(); Material blockType = blockState.getType();
if (blockType != Material.GLOWING_REDSTONE_ORE && !Config.getInstance().getDoubleDropsEnabled(SkillType.MINING, blockType)) {
return;
}
switch (blockType) { switch (blockType) {
case ENDER_STONE: case ENDER_STONE:
case GOLD_ORE: case GOLD_ORE:
@ -89,13 +85,7 @@ public class Mining {
*/ */
protected static void handleMiningDrops(BlockState blockState) { protected static void handleMiningDrops(BlockState blockState) {
Material blockType = blockState.getType(); Material blockType = blockState.getType();
if (blockType != Material.GLOWING_REDSTONE_ORE && !Config.getInstance().getDoubleDropsEnabled(SkillType.MINING, blockType)) {
return;
}
Location location = blockState.getLocation(); Location location = blockState.getLocation();
ItemStack dropItem;
switch (blockType) { switch (blockType) {
case COAL_ORE: case COAL_ORE:
@ -130,7 +120,7 @@ public class Mining {
int minimumDropAmount = customBlock.getMinimumDropAmount(); int minimumDropAmount = customBlock.getMinimumDropAmount();
int maximumDropAmount = customBlock.getMaximumDropAmount(); int maximumDropAmount = customBlock.getMaximumDropAmount();
dropItem = customBlock.getItemDrop(); ItemStack dropItem = customBlock.getItemDrop();
if (minimumDropAmount != maximumDropAmount) { if (minimumDropAmount != maximumDropAmount) {
Misc.dropItems(location, dropItem, minimumDropAmount); Misc.dropItems(location, dropItem, minimumDropAmount);

View File

@ -12,6 +12,7 @@ import org.bukkit.entity.Player;
import org.bukkit.entity.TNTPrimed; import org.bukkit.entity.TNTPrimed;
import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.config.Config;
import com.gmail.nossr50.datatypes.player.McMMOPlayer; import com.gmail.nossr50.datatypes.player.McMMOPlayer;
import com.gmail.nossr50.datatypes.player.PlayerProfile; import com.gmail.nossr50.datatypes.player.PlayerProfile;
import com.gmail.nossr50.datatypes.skills.AbilityType; import com.gmail.nossr50.datatypes.skills.AbilityType;
@ -54,18 +55,29 @@ public class MiningManager extends SkillManager{
*/ */
public void miningBlockCheck(BlockState blockState) { public void miningBlockCheck(BlockState blockState) {
Player player = getPlayer(); Player player = getPlayer();
int xp = Mining.getBlockXp(blockState);
if (Permissions.doubleDrops(player, skill) && SkillUtils.activationSuccessful(getSkillLevel(), getActivationChance(), Mining.doubleDropsMaxChance, Mining.doubleDropsMaxLevel)) { if (!Permissions.doubleDrops(player, skill)) {
if (player.getItemInHand().containsEnchantment(Enchantment.SILK_TOUCH)) { return;
Mining.handleSilkTouchDrops(blockState); }
}
else { Material material = blockState.getType();
Mining.handleMiningDrops(blockState);
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));
} }
/** /**