Pārlūkot izejas kodu

More event work.

GJ 11 gadi atpakaļ
vecāks
revīzija
997685b5ec

+ 12 - 0
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);
+    }
+}

+ 3 - 5
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);
             }
         }

+ 2 - 7
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 */

+ 23 - 29
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);
     }
 

+ 1 - 1
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());

+ 1 - 1
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"));
     }
 

+ 2 - 1
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);

+ 1 - 2
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"));
     }
 

+ 3 - 4
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);