Added hide fixer

This commit is contained in:
Auxilor 2021-03-03 14:13:25 +00:00
parent b56eea6aaa
commit dbdce95220
5 changed files with 94 additions and 7 deletions

View File

@ -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)
);
}

View File

@ -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};
}
}

View File

@ -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");

View File

@ -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.
* <p>
* 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.
* <p>
* 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);
}
}

View File

@ -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.
# 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.