diff --git a/CHANGELOG.md b/CHANGELOG.md index 5e1d6caf1..27a1e0044 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -45,6 +45,9 @@ * Optimized Cargo networks for Paper * Optimized Multiblocks for Paper * Optimized Enhanced Furnaces for Paper +* General performance improvements for Talismans +* General performance improvements for GPS Emergency Transmitters +* General performance improvements for Infused Magnets #### Fixes * Fixed Slimefun Armor sometimes not applying its effects @@ -58,6 +61,10 @@ * Fixed #2143 * Fixed #2145 * Fixed #2151 +* Fixed old Talismans not working +* Fixed Talismans sometimes not getting consumed properly +* Fixed old Infused Magnets not working +* Fixed old GPS Emergency Transmitters not working ## Release Candidate 14 (12 Jul 2020) diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/talismans/Talisman.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/talismans/Talisman.java index e0a58a0da..2b824737c 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/talismans/Talisman.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/items/magical/talismans/Talisman.java @@ -19,10 +19,12 @@ import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.potion.PotionEffect; +import io.github.thebusybiscuit.cscorelib2.inventory.ItemUtils; import io.github.thebusybiscuit.cscorelib2.item.CustomItem; import io.github.thebusybiscuit.slimefun4.core.researching.Research; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunItems; import io.github.thebusybiscuit.slimefun4.implementation.SlimefunPlugin; +import io.github.thebusybiscuit.slimefun4.utils.SlimefunUtils; import me.mrCookieSlime.Slimefun.Lists.RecipeType; import me.mrCookieSlime.Slimefun.Objects.Category; import me.mrCookieSlime.Slimefun.Objects.SlimefunItem.SlimefunItem; @@ -150,9 +152,9 @@ public class Talisman extends SlimefunItem { ItemStack talismanItem = talisman.getItem(); - if (p.getInventory().containsAtLeast(talismanItem, 1)) { - if (Slimefun.hasUnlocked(p, talismanItem, true)) { - activateTalisman(e, p, p.getInventory(), talisman, talismanItem); + if (SlimefunUtils.containsSimilarItem(p.getInventory(), talismanItem, true)) { + if (Slimefun.hasUnlocked(p, talisman, true)) { + activateTalisman(e, p, p.getInventory(), talisman); return true; } else { @@ -162,9 +164,9 @@ public class Talisman extends SlimefunItem { else { ItemStack enderTalisman = talisman.getEnderVariant(); - if (p.getEnderChest().containsAtLeast(enderTalisman, 1)) { - if (Slimefun.hasUnlocked(p, enderTalisman, true)) { - activateTalisman(e, p, p.getEnderChest(), talisman, enderTalisman); + if (SlimefunUtils.containsSimilarItem(p.getEnderChest(), enderTalisman, true)) { + if (Slimefun.hasUnlocked(p, talisman, true)) { + activateTalisman(e, p, p.getEnderChest(), talisman); return true; } else { @@ -177,12 +179,11 @@ public class Talisman extends SlimefunItem { } } - private static void activateTalisman(Event e, Player p, Inventory inv, Talisman talisman, ItemStack talismanItem) { - consumeItem(inv, talisman, talismanItem); + private static void activateTalisman(Event e, Player p, Inventory inv, Talisman talisman) { + consumeItem(inv, talisman); applyTalismanEffects(p, talisman); cancelEvent(e, talisman); sendMessage(p, talisman); - } private static void applyTalismanEffects(Player p, Talisman talisman) { @@ -203,9 +204,17 @@ public class Talisman extends SlimefunItem { } } - private static void consumeItem(Inventory inv, Talisman talisman, ItemStack talismanItem) { + private static void consumeItem(Inventory inv, Talisman talisman) { if (talisman.isConsumable()) { - inv.removeItem(talismanItem); + ItemStack[] contents = inv.getContents(); + for (int i = 0; i < contents.length; i++) { + ItemStack item = contents[i]; + + if (SlimefunUtils.isItemSimilar(item, talisman.getItem(), true, false)) { + ItemUtils.consumeItem(item, false); + return; + } + } } } diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/utils/SlimefunUtils.java b/src/main/java/io/github/thebusybiscuit/slimefun4/utils/SlimefunUtils.java index e73acbb3c..260c6b971 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/utils/SlimefunUtils.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/utils/SlimefunUtils.java @@ -212,14 +212,16 @@ public final class SlimefunUtils { } // Performance optimization - ItemStackWrapper wrapper = new ItemStackWrapper(item); + if (!(item instanceof SlimefunItemStack)) { + item = new ItemStackWrapper(item); + } for (ItemStack stack : inventory.getStorageContents()) { if (stack == null || stack.getType() == Material.AIR) { continue; } - if (isItemSimilar(stack, wrapper, checkLore)) { + if (isItemSimilar(stack, item, checkLore, false)) { return true; } } @@ -241,7 +243,6 @@ public final class SlimefunUtils { return ((SlimefunItemStack) item).getItemId().equals(((SlimefunItemStack) sfitem).getItemId()); } - boolean sfItemHasMeta = sfitem.hasItemMeta(); if (item.hasItemMeta()) { ItemMeta itemMeta = item.getItemMeta(); @@ -255,13 +256,12 @@ public final class SlimefunUtils { ImmutableItemMeta meta = ((SlimefunItemStack) sfitem).getImmutableMeta(); return equalsItemMeta(itemMeta, meta, checkLore); } - - if (sfItemHasMeta) { + else if (sfitem.hasItemMeta()) { return equalsItemMeta(itemMeta, sfitem.getItemMeta(), checkLore); } } else { - return !sfItemHasMeta; + return !sfitem.hasItemMeta(); } return false; @@ -278,11 +278,17 @@ public final class SlimefunUtils { if (itemMeta.hasLore() && itemLore.isPresent()) { return equalsLore(itemMeta.getLore(), itemLore.get()); } - else return !itemMeta.hasLore() && !itemLore.isPresent(); + else { + return !itemMeta.hasLore() && !itemLore.isPresent(); + } + } + else { + return true; } - else return true; } - else return false; + else { + return false; + } } else if (!itemMeta.hasDisplayName() && !displayName.isPresent()) { Optional> itemLore = meta.getLore(); @@ -291,9 +297,13 @@ public final class SlimefunUtils { if (itemMeta.hasLore() && itemLore.isPresent()) { return equalsLore(itemMeta.getLore(), itemLore.get()); } - else return !itemMeta.hasLore() && !itemLore.isPresent(); + else { + return !itemMeta.hasLore() && !itemLore.isPresent(); + } + } + else { + return true; } - else return true; } else return false; } @@ -305,22 +315,34 @@ public final class SlimefunUtils { if (itemMeta.hasLore() && sfitemMeta.hasLore()) { return equalsLore(itemMeta.getLore(), sfitemMeta.getLore()); } - else return !itemMeta.hasLore() && !sfitemMeta.hasLore(); + else { + return !itemMeta.hasLore() && !sfitemMeta.hasLore(); + } + } + else { + return true; } - else return true; } - else return false; + else { + return false; + } } else if (!itemMeta.hasDisplayName() && !sfitemMeta.hasDisplayName()) { if (checkLore) { if (itemMeta.hasLore() && sfitemMeta.hasLore()) { return equalsLore(itemMeta.getLore(), sfitemMeta.getLore()); } - else return !itemMeta.hasLore() && !sfitemMeta.hasLore(); + else { + return !itemMeta.hasLore() && !sfitemMeta.hasLore(); + } + } + else { + return true; } - else return true; } - else return false; + else { + return false; + } } private static boolean equalsLore(List lore, List lore2) {