better offhand/main hand detection

This commit is contained in:
hyperdefined
2022-11-30 14:41:34 -05:00
parent dd8a0db3b6
commit 98a5f20a86
2 changed files with 45 additions and 13 deletions

View File

@@ -28,6 +28,7 @@ import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory;
import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.persistence.PersistentDataContainer; import org.bukkit.persistence.PersistentDataContainer;
import org.bukkit.persistence.PersistentDataType; import org.bukkit.persistence.PersistentDataType;
@@ -53,11 +54,8 @@ public class BlocksMined implements Listener {
return; return;
} }
// if the player mines something with their fist // if the player mines something with their fist
int heldItemSlot = player.getInventory().getHeldItemSlot(); PlayerInventory inventory = player.getInventory();
ItemStack heldItem = player.getInventory().getItem(heldItemSlot); ItemStack heldItem = inventory.getItemInMainHand();
if (heldItem == null || heldItem.getType() == Material.AIR) {
return;
}
// only check certain items // only check certain items
if (!ItemChecker.isMineTool(heldItem.getType())) { if (!ItemChecker.isMineTool(heldItem.getType())) {
return; return;

View File

@@ -29,6 +29,7 @@ import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.event.player.PlayerInteractEntityEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory;
import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.persistence.PersistentDataContainer; import org.bukkit.persistence.PersistentDataContainer;
import org.bukkit.persistence.PersistentDataType; import org.bukkit.persistence.PersistentDataType;
@@ -57,19 +58,52 @@ public class SheepShear implements Listener {
if (!(entity instanceof Sheep)) { if (!(entity instanceof Sheep)) {
return; return;
} }
// check if the player is right-clicking with shears only
int heldItemSlot = player.getInventory().getHeldItemSlot(); // make sure the player is holding shears
ItemStack heldItem = player.getInventory().getItem(heldItemSlot); // player can shear with their offhand
if (heldItem == null || heldItem.getType() == Material.AIR || heldItem.getType() != Material.SHEARS) { 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; return;
} }
Sheep sheep = (Sheep) entity; Sheep sheep = (Sheep) entity;
// make sure the sheep is not sheared // make sure the sheep is not sheared
if (!sheep.isSheared()) { if (sheep.isSheared()) {
ItemStack newShears = addLore(heldItem); return;
if (newShears != null) { }
Bukkit.getScheduler().runTaskLater(toolStats, () -> player.getInventory().setItem(heldItemSlot, newShears), 1);
// 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);
} }
} }
} }