From dbdce952206ef218ef0dbcb113ec7218b4cabed9 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Wed, 3 Mar 2021 14:13:25 +0000 Subject: [PATCH] Added hide fixer --- .../willfp/ecoenchants/EcoEnchantsPlugin.java | 4 +- .../ecoenchants/display/EnchantDisplay.java | 4 ++ .../display/options/DisplayOptions.java | 14 ++++ ...ItemListener.java => ItemConversions.java} | 69 +++++++++++++++++-- .../core-plugin/src/main/resources/config.yml | 10 ++- 5 files changed, 94 insertions(+), 7 deletions(-) rename eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/util/{HoldItemListener.java => ItemConversions.java} (63%) diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/EcoEnchantsPlugin.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/EcoEnchantsPlugin.java index 6a42871e..f0af73e1 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/EcoEnchantsPlugin.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/EcoEnchantsPlugin.java @@ -24,7 +24,7 @@ import com.willfp.ecoenchants.enchantments.support.merging.grindstone.Grindstone import com.willfp.ecoenchants.enchantments.support.obtaining.EnchantingListeners; import com.willfp.ecoenchants.enchantments.support.obtaining.LootPopulator; import com.willfp.ecoenchants.enchantments.support.obtaining.VillagerListeners; -import com.willfp.ecoenchants.enchantments.util.HoldItemListener; +import com.willfp.ecoenchants.enchantments.util.ItemConversions; import com.willfp.ecoenchants.enchantments.util.WatcherTriggers; import com.willfp.ecoenchants.integrations.essentials.EssentialsManager; import com.willfp.ecoenchants.integrations.essentials.plugins.IntegrationEssentials; @@ -191,7 +191,7 @@ public class EcoEnchantsPlugin extends AbstractEcoPlugin { new AnvilListeners(this), new WatcherTriggers(this), new VillagerListeners(this), - new HoldItemListener(this) + new ItemConversions(this) ); } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/display/EnchantDisplay.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/display/EnchantDisplay.java index fdefbca2..d50f45b0 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/display/EnchantDisplay.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/display/EnchantDisplay.java @@ -242,6 +242,10 @@ public class EnchantDisplay extends DisplayModule { hideEnchants = false; } + if (options.isUsingExperimentalHideFixer() && meta.hasItemFlag(ItemFlag.HIDE_ENCHANTS) && meta.hasItemFlag(ItemFlag.HIDE_POTION_EFFECTS)) { + hideEnchants = false; + } + return new Object[]{hideEnchants}; } } diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/display/options/DisplayOptions.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/display/options/DisplayOptions.java index ef4a5d20..6d94af17 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/display/options/DisplayOptions.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/display/options/DisplayOptions.java @@ -61,6 +61,18 @@ public class DisplayOptions extends PluginDependent { @Getter private boolean useLoreGetter = false; + /** + * If the experimental hide fixer is being used. + */ + @Getter + private boolean usingExperimentalHideFixer = false; + + /** + * If the aggressive experimental hide fixer is being used. + */ + @Getter + private boolean usingAggressiveExperimentalHideFixer = false; + /** * Instantiate new display options. * @@ -95,6 +107,8 @@ public class DisplayOptions extends PluginDependent { sortedRarities.addAll(EnchantmentRarity.values().stream().filter(enchantmentRarity -> !sortedRarities.contains(enchantmentRarity)).collect(Collectors.toList())); useLoreGetter = this.getPlugin().getConfigYml().getBool("advanced.lore-getter"); + usingExperimentalHideFixer = this.getPlugin().getConfigYml().getBool("advanced.hide-fixer.enabled"); + usingAggressiveExperimentalHideFixer = this.getPlugin().getConfigYml().getBool("advanced.hide-fixer.aggressive"); boolean byType = this.getPlugin().getConfigYml().getBool("lore.sort-by-type"); boolean byLength = this.getPlugin().getConfigYml().getBool("lore.sort-by-length"); diff --git a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/util/HoldItemListener.java b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/util/ItemConversions.java similarity index 63% rename from eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/util/HoldItemListener.java rename to eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/util/ItemConversions.java index 8380586f..25c3aa79 100644 --- a/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/util/HoldItemListener.java +++ b/eco-core/core-plugin/src/main/java/com/willfp/ecoenchants/enchantments/util/ItemConversions.java @@ -6,15 +6,19 @@ import com.willfp.eco.util.plugin.AbstractEcoPlugin; import com.willfp.ecoenchants.display.EnchantDisplay; import com.willfp.ecoenchants.enchantments.EcoEnchant; import com.willfp.ecoenchants.enchantments.EcoEnchants; +import com.willfp.ecoenchants.enchantments.meta.EnchantmentTarget; import org.bukkit.ChatColor; import org.bukkit.enchantments.Enchantment; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryOpenEvent; import org.bukkit.event.player.PlayerItemHeldEvent; +import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.EnchantmentStorageMeta; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.Arrays; @@ -23,13 +27,13 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; -public class HoldItemListener extends PluginDependent implements Listener { +public class ItemConversions extends PluginDependent implements Listener { /** - * Instantiate HoldItemListener. + * Instantiate item conversions. * * @param plugin Instance of EcoEnchants. */ - public HoldItemListener(@NotNull final AbstractEcoPlugin plugin) { + public ItemConversions(@NotNull final AbstractEcoPlugin plugin) { super(plugin); } @@ -41,7 +45,7 @@ public class HoldItemListener extends PluginDependent implements Listener { * @param event The event to listen for. */ @EventHandler - public void onHoldItem(@NotNull final PlayerItemHeldEvent event) { + public void loreConverter(@NotNull final PlayerItemHeldEvent event) { ItemStack itemStack = event.getPlayer().getInventory().getItem(event.getNewSlot()); if (itemStack == null) { @@ -115,4 +119,61 @@ public class HoldItemListener extends PluginDependent implements Listener { meta.setLore(lore); itemStack.setItemMeta(meta); } + + /** + * On player hold item. + *

+ * Listener for hide fixer. + * + * @param event The event to listen for. + */ + @EventHandler + public void hideFixer(@NotNull final PlayerItemHeldEvent event) { + if (!((EnchantDisplay) this.getPlugin().getDisplayModule()).getOptions().isUsingExperimentalHideFixer()) { + return; + } + + ItemStack itemStack = event.getPlayer().getInventory().getItem(event.getNewSlot()); + + hideFixItem(itemStack); + } + + /** + * On player hold item. + *

+ * Listener for hide fixer. + * + * @param event The event to listen for. + */ + @EventHandler + public void hideFixer(@NotNull final InventoryOpenEvent event) { + if (!((EnchantDisplay) this.getPlugin().getDisplayModule()).getOptions().isUsingAggressiveExperimentalHideFixer()) { + return; + } + + for (ItemStack itemStack : event.getInventory().getContents()) { + hideFixItem(itemStack); + } + } + + private void hideFixItem(@Nullable final ItemStack itemStack) { + if (itemStack == null) { + return; + } + + if (!EnchantmentTarget.ALL.getMaterials().contains(itemStack.getType())) { + return; + } + + ItemMeta meta = itemStack.getItemMeta(); + if (meta == null) { + return; + } + + if (meta.hasItemFlag(ItemFlag.HIDE_ENCHANTS) && meta.hasItemFlag(ItemFlag.HIDE_POTION_EFFECTS)) { + meta.removeItemFlags(ItemFlag.HIDE_ENCHANTS, ItemFlag.HIDE_POTION_EFFECTS); + } + + itemStack.setItemMeta(meta); + } } diff --git a/eco-core/core-plugin/src/main/resources/config.yml b/eco-core/core-plugin/src/main/resources/config.yml index 7e1f8556..96e8a964 100644 --- a/eco-core/core-plugin/src/main/resources/config.yml +++ b/eco-core/core-plugin/src/main/resources/config.yml @@ -115,4 +115,12 @@ advanced: lore-getter: false # This converts enchantments with matching names from other enchantment plugins from lore into real enchantments. # This is experimental not recommended to be used for extended periods of time: enchantments are automatically converted. - # Only use this if absolutely necessary as it may cause some bugs. \ No newline at end of file + # Only use this if absolutely necessary as it may cause some bugs. + hide-fixer: + # Fixes some items obtained in older versions with a bug that caused enchantments to be hidden. + # Works both in packets to display the enchants to the client as well as changing the server-side item too. + # Only use this option if you've encountered this bug as it may strip HideEnchants from items that you might not expect it to. + enabled: false + aggressive: false + # Aggressive mode converts all items in all inventories whenever revealed. + # This may impact performance. \ No newline at end of file