Skip to content

Commit 98a5f20

Browse files
committed
better offhand/main hand detection
1 parent dd8a0db commit 98a5f20

File tree

2 files changed

+45
-13
lines changed

2 files changed

+45
-13
lines changed

src/main/java/lol/hyper/toolstats/events/BlocksMined.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import org.bukkit.event.Listener;
2929
import org.bukkit.event.block.BlockBreakEvent;
3030
import org.bukkit.inventory.ItemStack;
31+
import org.bukkit.inventory.PlayerInventory;
3132
import org.bukkit.inventory.meta.ItemMeta;
3233
import org.bukkit.persistence.PersistentDataContainer;
3334
import org.bukkit.persistence.PersistentDataType;
@@ -53,11 +54,8 @@ public void onBreak(BlockBreakEvent event) {
5354
return;
5455
}
5556
// if the player mines something with their fist
56-
int heldItemSlot = player.getInventory().getHeldItemSlot();
57-
ItemStack heldItem = player.getInventory().getItem(heldItemSlot);
58-
if (heldItem == null || heldItem.getType() == Material.AIR) {
59-
return;
60-
}
57+
PlayerInventory inventory = player.getInventory();
58+
ItemStack heldItem = inventory.getItemInMainHand();
6159
// only check certain items
6260
if (!ItemChecker.isMineTool(heldItem.getType())) {
6361
return;

src/main/java/lol/hyper/toolstats/events/SheepShear.java

Lines changed: 42 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.bukkit.event.Listener;
3030
import org.bukkit.event.player.PlayerInteractEntityEvent;
3131
import org.bukkit.inventory.ItemStack;
32+
import org.bukkit.inventory.PlayerInventory;
3233
import org.bukkit.inventory.meta.ItemMeta;
3334
import org.bukkit.persistence.PersistentDataContainer;
3435
import org.bukkit.persistence.PersistentDataType;
@@ -57,19 +58,52 @@ public void onShear(PlayerInteractEntityEvent event) {
5758
if (!(entity instanceof Sheep)) {
5859
return;
5960
}
60-
// check if the player is right-clicking with shears only
61-
int heldItemSlot = player.getInventory().getHeldItemSlot();
62-
ItemStack heldItem = player.getInventory().getItem(heldItemSlot);
63-
if (heldItem == null || heldItem.getType() == Material.AIR || heldItem.getType() != Material.SHEARS) {
61+
62+
// make sure the player is holding shears
63+
// player can shear with their offhand
64+
PlayerInventory inventory = player.getInventory();
65+
boolean isMainHand = inventory.getItemInMainHand().getType() == Material.SHEARS;
66+
boolean isOffHand = inventory.getItemInOffHand().getType() == Material.SHEARS;
67+
ItemStack shears = null;
68+
if (isMainHand) {
69+
shears = inventory.getItemInMainHand();
70+
toolStats.logger.info("main");
71+
}
72+
if (isOffHand) {
73+
shears = inventory.getItemInOffHand();
74+
toolStats.logger.info("offhand");
75+
}
76+
77+
// if the player is hold fishing rods in both hands
78+
// default to main hand since that takes priority
79+
if (isMainHand && isOffHand) {
80+
shears = inventory.getItemInMainHand();
81+
toolStats.logger.info("both");
82+
}
83+
84+
// player swapped items?
85+
if (shears == null) {
6486
return;
6587
}
6688

6789
Sheep sheep = (Sheep) entity;
6890
// make sure the sheep is not sheared
69-
if (!sheep.isSheared()) {
70-
ItemStack newShears = addLore(heldItem);
71-
if (newShears != null) {
72-
Bukkit.getScheduler().runTaskLater(toolStats, () -> player.getInventory().setItem(heldItemSlot, newShears), 1);
91+
if (sheep.isSheared()) {
92+
return;
93+
}
94+
95+
// update the stats
96+
ItemStack newShears = addLore(shears);
97+
if (newShears != null) {
98+
if (isMainHand && isOffHand) {
99+
Bukkit.getScheduler().runTaskLater(toolStats, () -> inventory.setItemInMainHand(newShears), 1);
100+
return;
101+
}
102+
if (isMainHand) {
103+
Bukkit.getScheduler().runTaskLater(toolStats, () -> inventory.setItemInMainHand(newShears), 1);
104+
}
105+
if (isOffHand) {
106+
Bukkit.getScheduler().runTaskLater(toolStats, () -> inventory.setItemInOffHand(newShears), 1);
73107
}
74108
}
75109
}

0 commit comments

Comments
 (0)