diff --git a/src/main/java/lol/hyper/toolstats/events/BlocksMined.java b/src/main/java/lol/hyper/toolstats/events/BlocksMined.java index 2bc1303..350bdf7 100644 --- a/src/main/java/lol/hyper/toolstats/events/BlocksMined.java +++ b/src/main/java/lol/hyper/toolstats/events/BlocksMined.java @@ -28,6 +28,7 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.PlayerInventory; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.persistence.PersistentDataContainer; import org.bukkit.persistence.PersistentDataType; @@ -53,11 +54,8 @@ public class BlocksMined implements Listener { return; } // if the player mines something with their fist - int heldItemSlot = player.getInventory().getHeldItemSlot(); - ItemStack heldItem = player.getInventory().getItem(heldItemSlot); - if (heldItem == null || heldItem.getType() == Material.AIR) { - return; - } + PlayerInventory inventory = player.getInventory(); + ItemStack heldItem = inventory.getItemInMainHand(); // only check certain items if (!ItemChecker.isMineTool(heldItem.getType())) { return; diff --git a/src/main/java/lol/hyper/toolstats/events/SheepShear.java b/src/main/java/lol/hyper/toolstats/events/SheepShear.java index be1f498..ad35a03 100644 --- a/src/main/java/lol/hyper/toolstats/events/SheepShear.java +++ b/src/main/java/lol/hyper/toolstats/events/SheepShear.java @@ -29,6 +29,7 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.PlayerInventory; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.persistence.PersistentDataContainer; import org.bukkit.persistence.PersistentDataType; @@ -57,19 +58,52 @@ public class SheepShear implements Listener { if (!(entity instanceof Sheep)) { return; } - // check if the player is right-clicking with shears only - int heldItemSlot = player.getInventory().getHeldItemSlot(); - ItemStack heldItem = player.getInventory().getItem(heldItemSlot); - if (heldItem == null || heldItem.getType() == Material.AIR || heldItem.getType() != Material.SHEARS) { + + // make sure the player is holding shears + // player can shear with their offhand + PlayerInventory inventory = player.getInventory(); + boolean isMainHand = inventory.getItemInMainHand().getType() == Material.SHEARS; + boolean isOffHand = inventory.getItemInOffHand().getType() == Material.SHEARS; + ItemStack shears = null; + if (isMainHand) { + shears = inventory.getItemInMainHand(); + toolStats.logger.info("main"); + } + if (isOffHand) { + shears = inventory.getItemInOffHand(); + toolStats.logger.info("offhand"); + } + + // if the player is hold fishing rods in both hands + // default to main hand since that takes priority + if (isMainHand && isOffHand) { + shears = inventory.getItemInMainHand(); + toolStats.logger.info("both"); + } + + // player swapped items? + if (shears == null) { return; } Sheep sheep = (Sheep) entity; // make sure the sheep is not sheared - if (!sheep.isSheared()) { - ItemStack newShears = addLore(heldItem); - if (newShears != null) { - Bukkit.getScheduler().runTaskLater(toolStats, () -> player.getInventory().setItem(heldItemSlot, newShears), 1); + if (sheep.isSheared()) { + return; + } + + // update the stats + ItemStack newShears = addLore(shears); + if (newShears != null) { + if (isMainHand && isOffHand) { + Bukkit.getScheduler().runTaskLater(toolStats, () -> inventory.setItemInMainHand(newShears), 1); + return; + } + if (isMainHand) { + Bukkit.getScheduler().runTaskLater(toolStats, () -> inventory.setItemInMainHand(newShears), 1); + } + if (isOffHand) { + Bukkit.getScheduler().runTaskLater(toolStats, () -> inventory.setItemInOffHand(newShears), 1); } } }