|
30 | 30 | import org.bukkit.event.Listener; |
31 | 31 | import org.bukkit.event.player.PlayerFishEvent; |
32 | 32 | import org.bukkit.inventory.ItemStack; |
| 33 | +import org.bukkit.inventory.PlayerInventory; |
33 | 34 | import org.bukkit.inventory.meta.ItemMeta; |
34 | 35 | import org.bukkit.persistence.PersistentDataContainer; |
35 | 36 | import org.bukkit.persistence.PersistentDataType; |
@@ -61,13 +62,32 @@ public void onFish(PlayerFishEvent event) { |
61 | 62 | return; |
62 | 63 | } |
63 | 64 | // make sure the player is holding a fishing rod |
64 | | - ItemStack heldItem = player.getInventory().getItem(player.getInventory().getHeldItemSlot()); |
65 | | - if (heldItem == null || heldItem.getType() == Material.AIR || heldItem.getType() != Material.FISHING_ROD) { |
| 65 | + // player can fish with their offhand |
| 66 | + PlayerInventory inventory = player.getInventory(); |
| 67 | + boolean isMainHand = inventory.getItemInMainHand().getType() == Material.FISHING_ROD; |
| 68 | + boolean isOffHand = inventory.getItemInOffHand().getType() == Material.FISHING_ROD; |
| 69 | + ItemStack fishingRod = null; |
| 70 | + if (isMainHand) { |
| 71 | + fishingRod = inventory.getItemInMainHand(); |
| 72 | + } |
| 73 | + if (isOffHand) { |
| 74 | + fishingRod = inventory.getItemInOffHand(); |
| 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 | + fishingRod = inventory.getItemInMainHand(); |
| 81 | + } |
| 82 | + |
| 83 | + // player swapped items? |
| 84 | + if (fishingRod == null) { |
66 | 85 | return; |
67 | 86 | } |
68 | 87 |
|
69 | | - // fix compatability issues by running 1 tick later |
70 | | - Bukkit.getScheduler().runTaskLater(toolStats, () -> updateFishCount(heldItem), 1); |
| 88 | + // update the fishing rod! |
| 89 | + ItemStack finalFishingRod = fishingRod; |
| 90 | + Bukkit.getScheduler().runTaskLater(toolStats, () -> updateFishCount(finalFishingRod), 1); |
71 | 91 |
|
72 | 92 | // check if the player caught an item |
73 | 93 | if (event.getCaught() == null) { |
|
0 commit comments