From 0d4502e739f5159033149eba435eaa44493e0e03 Mon Sep 17 00:00:00 2001 From: StarWishsama Date: Tue, 13 Jul 2021 10:57:39 +0800 Subject: [PATCH 1/5] fix(talisman): add validate for offhand to avoid fix wrong item --- .../slimefun4/implementation/listeners/TalismanListener.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/TalismanListener.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/TalismanListener.java index 5e15eb362..f4e8ab2ec 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/TalismanListener.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/TalismanListener.java @@ -233,6 +233,11 @@ public class TalismanListener implements Listener { break; } } + + // Validate broken item is on offhand. + if (e.getBrokenItem().equals(inv.getItemInOffHand())) { + slot = 41; + } } ItemStack item = e.getBrokenItem().clone(); From a0e6628acc402482a905ccd0ee186d57a8677b0d Mon Sep 17 00:00:00 2001 From: StarWishsama Date: Tue, 13 Jul 2021 11:10:06 +0800 Subject: [PATCH 2/5] fix(talisman): use correct slot number --- .../slimefun4/implementation/listeners/TalismanListener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/TalismanListener.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/TalismanListener.java index f4e8ab2ec..56ffc97a4 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/TalismanListener.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/TalismanListener.java @@ -236,7 +236,7 @@ public class TalismanListener implements Listener { // Validate broken item is on offhand. if (e.getBrokenItem().equals(inv.getItemInOffHand())) { - slot = 41; + slot = 40; } } From 22155edd713c2874a1eab1ea2212ac4f638d4f2f Mon Sep 17 00:00:00 2001 From: StarWishsama Date: Wed, 14 Jul 2021 11:08:59 +0800 Subject: [PATCH 3/5] refactor: optimize check method --- .../listeners/TalismanListener.java | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/TalismanListener.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/TalismanListener.java index 56ffc97a4..bbe41cfeb 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/TalismanListener.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/TalismanListener.java @@ -223,20 +223,20 @@ public class TalismanListener implements Listener { public void onItemBreak(PlayerItemBreakEvent e) { if (Talisman.trigger(e, SlimefunItems.TALISMAN_ANVIL)) { PlayerInventory inv = e.getPlayer().getInventory(); + int slot = inv.getHeldItemSlot(); // Did the tool in our hand break or was it an armor piece? if (!e.getBrokenItem().equals(inv.getItemInMainHand())) { - for (int s : armorSlots) { - if (e.getBrokenItem().equals(inv.getItem(s))) { - slot = s; - break; - } - } - - // Validate broken item is on offhand. if (e.getBrokenItem().equals(inv.getItemInOffHand())) { slot = 40; + } else { + for (int s : armorSlots) { + if (e.getBrokenItem().equals(inv.getItem(s))) { + slot = s; + break; + } + } } } @@ -247,10 +247,10 @@ public class TalismanListener implements Listener { ((Damageable) meta).setDamage(0); } - item.setItemMeta(meta); - int itemSlot = slot; + item.setItemMeta(meta); + // Update the item forcefully SlimefunPlugin.runSync(() -> inv.setItem(itemSlot, item), 1L); } From 17d75211155de04d1c42d99c6b46d56772448dfc Mon Sep 17 00:00:00 2001 From: StarWishsama Date: Wed, 14 Jul 2021 11:10:25 +0800 Subject: [PATCH 4/5] chore: revert order change --- .../slimefun4/implementation/listeners/TalismanListener.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/TalismanListener.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/TalismanListener.java index bbe41cfeb..e66304ae2 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/TalismanListener.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/TalismanListener.java @@ -247,10 +247,10 @@ public class TalismanListener implements Listener { ((Damageable) meta).setDamage(0); } - int itemSlot = slot; - item.setItemMeta(meta); + int itemSlot = slot; + // Update the item forcefully SlimefunPlugin.runSync(() -> inv.setItem(itemSlot, item), 1L); } From 03ab985033c75ffad825db87ef66a1532006562e Mon Sep 17 00:00:00 2001 From: StarWishsama Date: Thu, 15 Jul 2021 16:43:13 +0800 Subject: [PATCH 5/5] refactor: optimize slot check --- .../listeners/TalismanListener.java | 27 ++++++++++++------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/TalismanListener.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/TalismanListener.java index e66304ae2..ebd16f077 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/TalismanListener.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/TalismanListener.java @@ -224,22 +224,29 @@ public class TalismanListener implements Listener { if (Talisman.trigger(e, SlimefunItems.TALISMAN_ANVIL)) { PlayerInventory inv = e.getPlayer().getInventory(); - int slot = inv.getHeldItemSlot(); + ItemStack brokenItem = e.getBrokenItem(); + + int slot = -1; // Did the tool in our hand break or was it an armor piece? - if (!e.getBrokenItem().equals(inv.getItemInMainHand())) { - if (e.getBrokenItem().equals(inv.getItemInOffHand())) { - slot = 40; - } else { - for (int s : armorSlots) { - if (e.getBrokenItem().equals(inv.getItem(s))) { - slot = s; - break; - } + if (brokenItem.equals(inv.getItemInMainHand())) { + slot = inv.getHeldItemSlot(); + } else if (brokenItem.equals(inv.getItemInOffHand())) { + slot = 40; + } else { + for (int s : armorSlots) { + if (e.getBrokenItem().equals(inv.getItem(s))) { + slot = s; + break; } } } + // No item found, just return. + if (slot < 0) { + return; + } + ItemStack item = e.getBrokenItem().clone(); ItemMeta meta = item.getItemMeta();