From 997685b5ec6ed3b80fa8d0766c7b1eca2f11c93e Mon Sep 17 00:00:00 2001 From: GJ Date: Fri, 25 Oct 2013 11:47:13 -0400 Subject: [PATCH] More event work. --- .../herbalism/McMMOPlayerHerbalismEvent.java | 12 +++++ .../nossr50/listeners/BlockListener.java | 8 ++- .../nossr50/listeners/PlayerListener.java | 9 +--- .../skills/herbalism/HerbalismManager.java | 52 ++++++++----------- .../nossr50/skills/repair/RepairManager.java | 2 +- .../nossr50/skills/taming/TamingManager.java | 2 +- .../gmail/nossr50/skills/unarmed/Unarmed.java | 3 +- .../skills/unarmed/UnarmedManager.java | 3 +- .../com/gmail/nossr50/util/ChimaeraWing.java | 7 ++- 9 files changed, 48 insertions(+), 50 deletions(-) create mode 100644 src/main/java/com/gmail/nossr50/events/skills/herbalism/McMMOPlayerHerbalismEvent.java diff --git a/src/main/java/com/gmail/nossr50/events/skills/herbalism/McMMOPlayerHerbalismEvent.java b/src/main/java/com/gmail/nossr50/events/skills/herbalism/McMMOPlayerHerbalismEvent.java new file mode 100644 index 000000000..fe6c5a7e7 --- /dev/null +++ b/src/main/java/com/gmail/nossr50/events/skills/herbalism/McMMOPlayerHerbalismEvent.java @@ -0,0 +1,12 @@ +package com.gmail.nossr50.events.skills.herbalism; + +import org.bukkit.entity.Player; + +import com.gmail.nossr50.datatypes.skills.SkillType; +import com.gmail.nossr50.events.skills.McMMOPlayerSkillEvent; + +public abstract class McMMOPlayerHerbalismEvent extends McMMOPlayerSkillEvent { + public McMMOPlayerHerbalismEvent(Player player) { + super(player, SkillType.HERBALISM); + } +} diff --git a/src/main/java/com/gmail/nossr50/listeners/BlockListener.java b/src/main/java/com/gmail/nossr50/listeners/BlockListener.java index cf455e97f..eb871c587 100644 --- a/src/main/java/com/gmail/nossr50/listeners/BlockListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/BlockListener.java @@ -143,7 +143,7 @@ public class BlockListener implements Listener { ItemStack heldItem = player.getItemInHand(); /* HERBALISM */ - if (BlockUtils.affectedByGreenTerra(blockState)) { + if (BlockUtils.affectedByGreenTerra(blockState) && Permissions.skillEnabled(player, SkillType.HERBALISM)) { HerbalismManager herbalismManager = mcMMOPlayer.getHerbalismManager(); /* Green Terra */ @@ -153,9 +153,7 @@ public class BlockListener implements Listener { * We don't check the block store here because herbalism has too many unusual edge cases. * Instead, we check it inside the drops handler. */ - if (SkillType.HERBALISM.getPermissions(player)) { - herbalismManager.herbalismBlockCheck(blockState); - } + herbalismManager.blockBreak(blockState); } /* MINING */ @@ -331,7 +329,7 @@ public class BlockListener implements Listener { * We don't need to check permissions here because they've already been checked for the ability to even activate. */ if (mcMMOPlayer.getAbilityMode(AbilityType.GREEN_TERRA) && BlockUtils.canMakeMossy(blockState)) { - if (mcMMOPlayer.getHerbalismManager().processGreenTerra(blockState)) { + if (mcMMOPlayer.getHerbalismManager().greenTerra(blockState)) { blockState.update(true); } } diff --git a/src/main/java/com/gmail/nossr50/listeners/PlayerListener.java b/src/main/java/com/gmail/nossr50/listeners/PlayerListener.java index 3399de7b2..9938e8ea7 100644 --- a/src/main/java/com/gmail/nossr50/listeners/PlayerListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/PlayerListener.java @@ -425,7 +425,6 @@ public class PlayerListener implements Listener { // Make sure the player knows what he's doing when trying to salvage an enchanted item if (!(heldItem.getEnchantments().size() > 0) || repairManager.checkConfirmation(type, true)) { repairManager.handleSalvage(block.getLocation(), heldItem); - player.updateInventory(); } } } @@ -516,12 +515,8 @@ public class PlayerListener implements Listener { /* GREEN THUMB CHECK */ HerbalismManager herbalismManager = mcMMOPlayer.getHerbalismManager(); - if (herbalismManager.canGreenThumbBlock(blockState)) { - player.setItemInHand(new ItemStack(Material.SEEDS, heldItem.getAmount() - 1)); - - if (herbalismManager.processGreenThumbBlocks(blockState) && EventUtils.simulateBlockBreak(block, player, false)) { - blockState.update(true); - } + if (herbalismManager.greenThumbBlocks(blockState) && EventUtils.simulateBlockBreak(block, player, false)) { + blockState.update(true); } /* SHROOM THUMB CHECK */ diff --git a/src/main/java/com/gmail/nossr50/skills/herbalism/HerbalismManager.java b/src/main/java/com/gmail/nossr50/skills/herbalism/HerbalismManager.java index 1a31ed117..856b6b732 100644 --- a/src/main/java/com/gmail/nossr50/skills/herbalism/HerbalismManager.java +++ b/src/main/java/com/gmail/nossr50/skills/herbalism/HerbalismManager.java @@ -92,7 +92,7 @@ public class HerbalismManager extends SkillManager { * @param blockState The {@link BlockState} to check ability activation for * @return true if the ability was successful, false otherwise */ - public boolean processGreenTerra(BlockState blockState) { + public boolean greenTerra(BlockState blockState) { Player player = getPlayer(); if (!Permissions.greenThumbBlock(player, blockState.getType())) { @@ -100,34 +100,29 @@ public class HerbalismManager extends SkillManager { } PlayerInventory playerInventory = player.getInventory(); - ItemStack seed = new ItemStack(Material.SEEDS); - if (!playerInventory.containsAtLeast(seed, 1)) { + if (!playerInventory.contains(Material.SEEDS)) { player.sendMessage(LocaleLoader.getString("Herbalism.Ability.GTe.NeedMore")); return false; } - playerInventory.removeItem(seed); - player.updateInventory(); // Needed until replacement available + playerInventory.removeItem(new ItemStack(Material.SEEDS)); + player.updateInventory(); return Herbalism.convertGreenTerraBlocks(blockState); } /** - * + * Process double drops & XP gain for Herbalism. * * @param blockState The {@link BlockState} to check ability activation for */ - public void herbalismBlockCheck(BlockState blockState) { + public void blockBreak(BlockState blockState) { Player player = getPlayer(); Material material = blockState.getType(); boolean oneBlockPlant = !(material == Material.CACTUS || material == Material.SUGAR_CANE_BLOCK); - if (oneBlockPlant && mcMMO.getPlaceStore().isTrue(blockState)) { - return; - } - - if (!canBlockCheck()) { + if (!canBlockCheck() || (oneBlockPlant && mcMMO.getPlaceStore().isTrue(blockState))) { return; } @@ -182,7 +177,14 @@ public class HerbalismManager extends SkillManager { * @param blockState The {@link BlockState} to check ability activation for * @return true if the ability was successful, false otherwise */ - public boolean processGreenThumbBlocks(BlockState blockState) { + public boolean greenThumbBlocks(BlockState blockState) { + if (!canGreenThumbBlock(blockState)) { + return false; + } + + ItemStack heldItem = getPlayer().getItemInHand(); + heldItem.setAmount(heldItem.getAmount() - 1); + if (!SkillUtils.activationSuccessful(getSkillLevel(), getActivationChance(), Herbalism.greenThumbMaxChance, Herbalism.greenThumbMaxLevel)) { getPlayer().sendMessage(LocaleLoader.getString("Herbalism.Ability.GTh.Fail")); return false; @@ -283,43 +285,35 @@ public class HerbalismManager extends SkillManager { private void processGreenThumbPlants(BlockState blockState, boolean greenTerra) { Player player = getPlayer(); PlayerInventory playerInventory = player.getInventory(); - ItemStack seed = null; + Material seed = null; switch (blockState.getType()) { case CARROT: - seed = new ItemStack(Material.CARROT_ITEM); + seed = Material.CARROT_ITEM; break; case CROPS: - seed = new ItemStack(Material.SEEDS); + seed = Material.SEEDS; break; case NETHER_WARTS: - seed = new ItemStack(Material.NETHER_STALK); + seed = Material.NETHER_STALK; break; case POTATO: - seed = new ItemStack(Material.POTATO_ITEM); + seed = Material.POTATO_ITEM; break; default: break; } - if (!playerInventory.containsAtLeast(seed, 1)) { + if (!playerInventory.contains(seed) || (!greenTerra && !SkillUtils.activationSuccessful(getSkillLevel(), getActivationChance(), Herbalism.greenThumbMaxChance, Herbalism.greenThumbMaxLevel)) || !handleBlockState(blockState, greenTerra)) { return; } - if (!greenTerra && !SkillUtils.activationSuccessful(getSkillLevel(), getActivationChance(), Herbalism.greenThumbMaxChance, Herbalism.greenThumbMaxLevel)) { - return; - } - - if (!handleBlockState(blockState, greenTerra)) { - return; - } - - playerInventory.removeItem(seed); - player.updateInventory(); // Needed until replacement available + playerInventory.removeItem(new ItemStack(seed)); + player.updateInventory(); new HerbalismBlockUpdaterTask(blockState).runTaskLater(mcMMO.p, 0); } diff --git a/src/main/java/com/gmail/nossr50/skills/repair/RepairManager.java b/src/main/java/com/gmail/nossr50/skills/repair/RepairManager.java index 41516565a..6412a5c2e 100644 --- a/src/main/java/com/gmail/nossr50/skills/repair/RepairManager.java +++ b/src/main/java/com/gmail/nossr50/skills/repair/RepairManager.java @@ -167,7 +167,7 @@ public class RepairManager extends SkillManager { } if (item.getDurability() == 0) { - player.setItemInHand(new ItemStack(Material.AIR)); + player.setItemInHand(null); location.setY(location.getY() + 1); Misc.dropItems(location, new ItemStack(Repair.getRepairAndSalvageItem(item)), Repair.getRepairAndSalvageQuantities(item) * item.getAmount()); diff --git a/src/main/java/com/gmail/nossr50/skills/taming/TamingManager.java b/src/main/java/com/gmail/nossr50/skills/taming/TamingManager.java index e2466bf5c..f9987ea06 100644 --- a/src/main/java/com/gmail/nossr50/skills/taming/TamingManager.java +++ b/src/main/java/com/gmail/nossr50/skills/taming/TamingManager.java @@ -255,7 +255,7 @@ public class TamingManager extends SkillManager { } } - player.setItemInHand(new ItemStack(heldItem.getType(), heldItemAmount - summonAmount)); + heldItem.setAmount(heldItemAmount - summonAmount); player.sendMessage(LocaleLoader.getString("Taming.Summon.Complete")); } diff --git a/src/main/java/com/gmail/nossr50/skills/unarmed/Unarmed.java b/src/main/java/com/gmail/nossr50/skills/unarmed/Unarmed.java index 34b10a07a..7cb127406 100644 --- a/src/main/java/com/gmail/nossr50/skills/unarmed/Unarmed.java +++ b/src/main/java/com/gmail/nossr50/skills/unarmed/Unarmed.java @@ -80,7 +80,8 @@ public class Unarmed { nextSlot++; } - } else if (firstEmpty != -1) { + } + else if (firstEmpty != -1) { drop.remove(); dropStack.setAmount(dropAmount); inventory.setItem(firstEmpty, dropStack); diff --git a/src/main/java/com/gmail/nossr50/skills/unarmed/UnarmedManager.java b/src/main/java/com/gmail/nossr50/skills/unarmed/UnarmedManager.java index 43791d333..f56cd21c2 100644 --- a/src/main/java/com/gmail/nossr50/skills/unarmed/UnarmedManager.java +++ b/src/main/java/com/gmail/nossr50/skills/unarmed/UnarmedManager.java @@ -4,7 +4,6 @@ import org.bukkit.Material; import org.bukkit.block.BlockState; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; -import org.bukkit.inventory.ItemStack; import org.bukkit.material.MaterialData; import org.bukkit.material.SmoothBrick; @@ -104,7 +103,7 @@ public class UnarmedManager extends SkillManager { Misc.dropItem(defender.getLocation(), event.getDroppedItem()); - defender.setItemInHand(new ItemStack(Material.AIR)); + defender.setItemInHand(null); defender.sendMessage(LocaleLoader.getString("Skills.Disarmed")); } diff --git a/src/main/java/com/gmail/nossr50/util/ChimaeraWing.java b/src/main/java/com/gmail/nossr50/util/ChimaeraWing.java index 96f89f044..ffee24f29 100644 --- a/src/main/java/com/gmail/nossr50/util/ChimaeraWing.java +++ b/src/main/java/com/gmail/nossr50/util/ChimaeraWing.java @@ -91,9 +91,8 @@ public final class ChimaeraWing { if (Config.getInstance().getChimaeraPreventUseUnderground()) { if (location.getY() < player.getWorld().getHighestBlockYAt(location)) { - player.setItemInHand(new ItemStack(getChimaeraWing(amount - Config.getInstance().getChimaeraUseCost()))); + inHand.setAmount(amount - Config.getInstance().getChimaeraUseCost()); player.sendMessage(LocaleLoader.getString("Item.ChimaeraWing.Fail")); - player.updateInventory(); player.setVelocity(new Vector(0, 0.5D, 0)); CombatUtils.dealDamage(player, Misc.getRandom().nextInt((int) (player.getHealth() - 10))); mcMMOPlayer.actualizeChimeraWingLastUse(); @@ -130,8 +129,8 @@ public final class ChimaeraWing { } } - player.setItemInHand(new ItemStack(getChimaeraWing(player.getItemInHand().getAmount() - Config.getInstance().getChimaeraUseCost()))); - player.updateInventory(); + ItemStack inHand = player.getItemInHand(); + inHand.setAmount(inHand.getAmount() - Config.getInstance().getChimaeraUseCost()); mcMMOPlayer.actualizeChimeraWingLastUse(); mcMMOPlayer.setTeleportCommenceLocation(null);