From 595c43e34ecf2b16a01231cdbfb6518e6a5ab0e9 Mon Sep 17 00:00:00 2001 From: MrPowerGamerBR Date: Sun, 25 Aug 2024 18:02:37 -0300 Subject: [PATCH] Cache ItemMeta instead of creating a new ItemMeta for each potion check --- .../nossr50/config/skills/alchemy/PotionConfig.java | 4 +++- .../datatypes/skills/alchemy/AlchemyPotion.java | 10 ++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/gmail/nossr50/config/skills/alchemy/PotionConfig.java b/src/main/java/com/gmail/nossr50/config/skills/alchemy/PotionConfig.java index d0cad88b5..8281d6f3c 100644 --- a/src/main/java/com/gmail/nossr50/config/skills/alchemy/PotionConfig.java +++ b/src/main/java/com/gmail/nossr50/config/skills/alchemy/PotionConfig.java @@ -9,6 +9,7 @@ import org.bukkit.Color; import org.bukkit.Material; import org.bukkit.configuration.ConfigurationSection; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.PotionMeta; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; @@ -334,9 +335,10 @@ public class PotionConfig extends LegacyConfigLoader { * @return AlchemyPotion that corresponds to the given ItemStack. */ public AlchemyPotion getPotion(ItemStack item) { + ItemMeta itemMeta = item.getItemMeta(); final List potionList = alchemyPotions.values() .stream() - .filter(potion -> potion.isSimilarPotion(item)) + .filter(potion -> potion.isSimilarPotion(item, itemMeta)) .toList(); if(potionList.size() > 1) { mcMMO.p.getLogger().severe("Multiple potions defined in config have matched this potion, for mcMMO to behave" + diff --git a/src/main/java/com/gmail/nossr50/datatypes/skills/alchemy/AlchemyPotion.java b/src/main/java/com/gmail/nossr50/datatypes/skills/alchemy/AlchemyPotion.java index 0b0654dda..9b01f50cd 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/skills/alchemy/AlchemyPotion.java +++ b/src/main/java/com/gmail/nossr50/datatypes/skills/alchemy/AlchemyPotion.java @@ -4,6 +4,7 @@ import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.util.PotionUtil; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.PotionMeta; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -49,13 +50,18 @@ public class AlchemyPotion { } public boolean isSimilarPotion(@NotNull ItemStack otherPotion) { + return isSimilarPotion(otherPotion, otherPotion.getItemMeta()); + } + + public boolean isSimilarPotion(@NotNull ItemStack otherPotion, @Nullable ItemMeta otherMeta) { requireNonNull(otherPotion, "otherPotion cannot be null"); + if (otherPotion.getType() != potionItemStack.getType()) { return false; } // no potion meta, no match - if (!otherPotion.hasItemMeta()) { + if (otherMeta == null) { return false; } @@ -63,7 +69,7 @@ public class AlchemyPotion { * Compare custom effects on both potions. */ - final PotionMeta otherPotionMeta = (PotionMeta) otherPotion.getItemMeta(); + final PotionMeta otherPotionMeta = (PotionMeta) otherMeta; // compare custom effects on both potions, this has to be done in two traversals // comparing thisPotionMeta -> otherPotionMeta and otherPotionMeta -> thisPotionMeta if (hasDifferingCustomEffects(getAlchemyPotionMeta(), otherPotionMeta)