From b1c5fafd60e6527381cf501ed17f60253509a915 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Sun, 25 Sep 2022 19:16:55 +0100 Subject: [PATCH 1/5] Fixed java/kotlin conflict --- .../src/main/kotlin/com/willfp/ecoenchants/display/Sorters.kt | 2 +- .../main/kotlin/com/willfp/ecoenchants/enchants/EcoEnchant.kt | 2 +- .../kotlin/com/willfp/ecoenchants/enchants/EcoEnchantLike.kt | 4 ++-- .../kotlin/com/willfp/ecoenchants/enchants/EnchantInfo.kt | 2 +- .../willfp/ecoenchants/mechanics/EnchantingTableSupport.kt | 4 ++-- .../kotlin/com/willfp/ecoenchants/mechanics/LootSupport.kt | 2 +- .../com/willfp/ecoenchants/mechanics/VillagerSupport.kt | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/display/Sorters.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/display/Sorters.kt index c957f48b..abe2e829 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/display/Sorters.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/display/Sorters.kt @@ -100,7 +100,7 @@ object RaritySorter : EnchantmentSorter { for (rarity in rarities) { for (enchantment in children.getSafely(0).sort(enchantments, children.drop(1))) { - if (rarity != enchantment.wrap().rarity) { + if (rarity != enchantment.wrap().enchantmentRarity) { continue } diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/enchants/EcoEnchant.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/enchants/EcoEnchant.kt index 57b2d682..779c34e0 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/enchants/EcoEnchant.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/enchants/EcoEnchant.kt @@ -64,7 +64,7 @@ abstract class EcoEnchant( override val type = EnchantmentTypes.getByID(config.getString("type")) ?: EnchantmentTypes.values().first() - override val rarity = + override val enchantmentRarity = EnchantmentRarities.getByID(config.getString("rarity")) ?: EnchantmentRarities.values().first() private val conflictNames = config.getStrings("conflicts") diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/enchants/EcoEnchantLike.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/enchants/EcoEnchantLike.kt index 0aaeb1b7..f0e4d777 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/enchants/EcoEnchantLike.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/enchants/EcoEnchantLike.kt @@ -27,7 +27,7 @@ interface EcoEnchantLike { val displayName: String val unformattedDisplayName: String val enchant: Enchantment - val rarity: EnchantmentRarity + val enchantmentRarity: EnchantmentRarity // Includes all extra logic not found in vanilla canEnchantItem fun canEnchantItem(item: ItemStack): Boolean @@ -103,7 +103,7 @@ class VanillaEcoEnchantLike( EnchantmentTypes.getByID(plugin.vanillaEnchantsYml.getString("${enchant.key.key}.type")) ?: EnchantmentTypes.values().first() - override val rarity: EnchantmentRarity = + override val enchantmentRarity: EnchantmentRarity = EnchantmentRarities.getByID(plugin.vanillaEnchantsYml.getString("${enchant.key.key}.rarity")) ?: EnchantmentRarities.values().first() diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/enchants/EnchantInfo.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/enchants/EnchantInfo.kt index 88561408..15b40212 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/enchants/EnchantInfo.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/enchants/EnchantInfo.kt @@ -44,7 +44,7 @@ object EnchantInfo { plugin.configYml.getStrings("enchantinfo.item.lore") .map { it.replace("%max_level%", enchant.maxLevel.toString()) - .replace("%rarity%", enchant.rarity.displayName) + .replace("%rarity%", enchant.enchantmentRarity.displayName) .replace( "%targets%", enchant.targets.joinToString(", ") { target -> target.displayName } diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/mechanics/EnchantingTableSupport.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/mechanics/EnchantingTableSupport.kt index d1d8616f..d229ceab 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/mechanics/EnchantingTableSupport.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/mechanics/EnchantingTableSupport.kt @@ -91,11 +91,11 @@ class EnchantingTableSupport( continue } - if (NumberUtils.randFloat(0.0, 1.0) > enchantment.rarity.tableChance * multiplier) { + if (NumberUtils.randFloat(0.0, 1.0) > enchantment.enchantmentRarity.tableChance * multiplier) { continue } - if (enchantment.rarity.minimumLevel > cost) { + if (enchantment.enchantmentRarity.minimumLevel > cost) { continue } diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/mechanics/LootSupport.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/mechanics/LootSupport.kt index 5fb918b8..f0d3ca92 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/mechanics/LootSupport.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/mechanics/LootSupport.kt @@ -53,7 +53,7 @@ class LootSupport( continue } - if (NumberUtils.randFloat(0.0, 1.0) > enchantment.rarity.lootChance * multiplier) { + if (NumberUtils.randFloat(0.0, 1.0) > enchantment.enchantmentRarity.lootChance * multiplier) { continue } diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/mechanics/VillagerSupport.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/mechanics/VillagerSupport.kt index 2dc3d5ce..c238bf94 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/mechanics/VillagerSupport.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/mechanics/VillagerSupport.kt @@ -50,7 +50,7 @@ class VillagerSupport( continue } - if (NumberUtils.randFloat(0.0, 1.0) > enchantment.rarity.villagerChance * multiplier) { + if (NumberUtils.randFloat(0.0, 1.0) > enchantment.enchantmentRarity.villagerChance * multiplier) { continue } From 8efa58e10f2c6a280f098b2465fba2e89a5a5fbc Mon Sep 17 00:00:00 2001 From: Auxilor Date: Sun, 25 Sep 2022 19:17:02 +0100 Subject: [PATCH 2/5] Updated to 9.0.0-b31 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 6d2d2084..fb1d5181 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ #libreforge-updater #Thu Sep 22 17:32:02 BST 2022 -version=9.0.0-b30 +version=9.0.0-b31 plugin-name=EcoEnchants From 39232a54026b5e87f8542b26d464368a769f16fd Mon Sep 17 00:00:00 2001 From: Auxilor Date: Sun, 25 Sep 2022 23:00:21 +0100 Subject: [PATCH 3/5] Display tweaks --- .../willfp/ecoenchants/display/EnchantDisplay.kt | 16 ++++++++++++---- .../ecoenchants/target/EnchantmentTarget.kt | 4 ++-- .../ecoenchants/target/EnchantmentTargets.kt | 14 ++++++++++++-- .../core-plugin/src/main/resources/config.yml | 2 ++ 4 files changed, 28 insertions(+), 8 deletions(-) diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/display/EnchantDisplay.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/display/EnchantDisplay.kt index 9b38297e..51b1a177 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/display/EnchantDisplay.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/display/EnchantDisplay.kt @@ -28,11 +28,15 @@ class EnchantDisplay(private val plugin: EcoEnchantsPlugin) : DisplayModule(plug props: DisplayProperties, vararg args: Any ) { + if (!itemStack.isEnchantable && plugin.configYml.getBool("display.require-enchantable")) { + return + } + val fast = itemStack.fast() val pdc = fast.persistentDataContainer - // Args represent hide enchants - if (args[0] == true) { + // Args represent hide enchants - adding extra check ported from 8.x.x + if (args[0] == true || pdc.has(internalHideEnchants, PersistentDataType.INTEGER)) { fast.addItemFlags(ItemFlag.HIDE_ENCHANTS) if (itemStack.type == Material.ENCHANTED_BOOK) { fast.addItemFlags(ItemFlag.HIDE_POTION_EFFECTS) @@ -99,6 +103,10 @@ class EnchantDisplay(private val plugin: EcoEnchantsPlugin) : DisplayModule(plug } override fun revert(itemStack: ItemStack) { + if (!itemStack.isEnchantable && plugin.configYml.getBool("display.require-enchantable")) { + return + } + val fast = itemStack.fast() val pdc = fast.persistentDataContainer @@ -115,12 +123,12 @@ class EnchantDisplay(private val plugin: EcoEnchantsPlugin) : DisplayModule(plug override fun generateVarArgs(itemStack: ItemStack): Array { val fast = itemStack.fast() - val pdc = fast.persistentDataContainer + // I'm not including the internal hide enchants check here because... I don't know why. + // I'm copying over from 8.x.x because I know it worked then. return arrayOf( fast.hasItemFlag(ItemFlag.HIDE_ENCHANTS) || fast.hasItemFlag(ItemFlag.HIDE_POTION_EFFECTS) - || pdc.has(internalHideEnchants, PersistentDataType.INTEGER) ) } } diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/target/EnchantmentTarget.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/target/EnchantmentTarget.kt index b08454da..15c31818 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/target/EnchantmentTarget.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/target/EnchantmentTarget.kt @@ -7,7 +7,7 @@ import com.willfp.eco.core.recipe.parts.EmptyTestableItem import com.willfp.ecoenchants.EcoEnchantsPlugin import org.bukkit.entity.Player import org.bukkit.inventory.ItemStack -import java.util.* +import java.util.Objects interface EnchantmentTarget { val id: String @@ -26,7 +26,7 @@ interface EnchantmentTarget { } class ConfiguredEnchantmentTarget( - private val config: Config + config: Config ) : EnchantmentTarget { override val id = config.getString("id") override val displayName = config.getFormattedString("display-name") diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/target/EnchantmentTargets.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/target/EnchantmentTargets.kt index ce8abb15..0963c080 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/target/EnchantmentTargets.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/target/EnchantmentTargets.kt @@ -1,9 +1,12 @@ package com.willfp.ecoenchants.target +import com.github.benmanes.caffeine.cache.Caffeine import com.google.common.collect.ImmutableSet +import com.willfp.eco.core.items.HashedItem import com.willfp.ecoenchants.EcoEnchantsPlugin import org.bukkit.Material import org.bukkit.inventory.ItemStack +import java.util.concurrent.TimeUnit object EnchantmentTargets { private val BY_ID = mutableMapOf() @@ -38,7 +41,9 @@ object EnchantmentTargets { } val ItemStack.isEnchantable: Boolean - get() = getForItem(this).isNotEmpty() || this.type == Material.BOOK || this.type == Material.ENCHANTED_BOOK + get() = enchantableCache.get(HashedItem.of(this)) { + getForItem(this).isNotEmpty() || this.type == Material.BOOK || this.type == Material.ENCHANTED_BOOK + } /** * Get all targets. @@ -77,7 +82,8 @@ object EnchantmentTargets { /** * Add new [EnchantmentTarget] to EcoEnchants. * - * Only for internal use, targets are automatically added in the constructor. + * Only for internal use, targets are automatically added in the + * constructor. * * @param target The [EnchantmentTarget] to add. */ @@ -86,3 +92,7 @@ object EnchantmentTargets { BY_ID[target.id] = target } } + +private val enchantableCache = Caffeine.newBuilder() + .expireAfterWrite(5, TimeUnit.SECONDS) + .build() diff --git a/eco-core/core-plugin/src/main/resources/config.yml b/eco-core/core-plugin/src/main/resources/config.yml index 69b7d8e1..8ba17f80 100644 --- a/eco-core/core-plugin/src/main/resources/config.yml +++ b/eco-core/core-plugin/src/main/resources/config.yml @@ -71,6 +71,8 @@ display: word-wrap: 32 # Number of characters to have on each line format: "&8" + require-enchantable: true # If EcoEnchants should not display on non-enchantable items. + # Options for the /enchantinfo GUI enchantinfo: rows: 3 # How many rows for the GUI From fb938cc738540759d9b71c91d6063bfb1438ce71 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Sun, 25 Sep 2022 23:00:32 +0100 Subject: [PATCH 4/5] Updated to 9.0.0-b32 --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index fb1d5181..8b726dc2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ #libreforge-updater #Thu Sep 22 17:32:02 BST 2022 -version=9.0.0-b31 +version=9.0.0-b32 plugin-name=EcoEnchants From 38589b2f9d3da0b638bd7ba4cfb419b1ecebde40 Mon Sep 17 00:00:00 2001 From: Auxilor Date: Sun, 25 Sep 2022 23:50:56 +0100 Subject: [PATCH 5/5] More aeh foasegfiouaes --- .../willfp/ecoenchants/EcoEnchantsPlugin.kt | 4 +- .../ecoenchants/display/EnchantDisplay.kt | 39 +++++++++++++------ gradle.properties | 2 +- 3 files changed, 29 insertions(+), 16 deletions(-) diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/EcoEnchantsPlugin.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/EcoEnchantsPlugin.kt index 9631bd4f..3091574b 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/EcoEnchantsPlugin.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/EcoEnchantsPlugin.kt @@ -95,9 +95,7 @@ class EcoEnchantsPlugin : LibReforgePlugin() { } companion object { - /** - * Instance of EcoEnchants. - */ + /** Instance of EcoEnchants. */ @JvmStatic lateinit var instance: EcoEnchantsPlugin private set diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/display/EnchantDisplay.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/display/EnchantDisplay.kt index 51b1a177..590ee8c5 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/display/EnchantDisplay.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoenchants/display/EnchantDisplay.kt @@ -4,6 +4,7 @@ import com.willfp.eco.core.display.Display import com.willfp.eco.core.display.DisplayModule import com.willfp.eco.core.display.DisplayPriority import com.willfp.eco.core.display.DisplayProperties +import com.willfp.eco.core.fast.FastItemStack import com.willfp.eco.core.fast.fast import com.willfp.ecoenchants.EcoEnchantsPlugin import com.willfp.ecoenchants.commands.CommandToggleDescriptions.Companion.seesEnchantmentDescriptions @@ -15,11 +16,15 @@ import org.bukkit.Material import org.bukkit.entity.Player import org.bukkit.inventory.ItemFlag import org.bukkit.inventory.ItemStack +import org.bukkit.persistence.PersistentDataContainer import org.bukkit.persistence.PersistentDataType +import kotlin.collections.component1 +import kotlin.collections.component2 +import kotlin.collections.set @Suppress("DEPRECATION") class EnchantDisplay(private val plugin: EcoEnchantsPlugin) : DisplayModule(plugin, DisplayPriority.HIGH) { - private val internalHideEnchants = + private val hideStateKey = plugin.namespacedKeyFactory.create("ecoenchantlore-skip") // Same for backwards compatibility override fun display( @@ -35,14 +40,16 @@ class EnchantDisplay(private val plugin: EcoEnchantsPlugin) : DisplayModule(plug val fast = itemStack.fast() val pdc = fast.persistentDataContainer - // Args represent hide enchants - adding extra check ported from 8.x.x - if (args[0] == true || pdc.has(internalHideEnchants, PersistentDataType.INTEGER)) { + // Args represent hide enchants + if (args[0] == true) { fast.addItemFlags(ItemFlag.HIDE_ENCHANTS) if (itemStack.type == Material.ENCHANTED_BOOK) { fast.addItemFlags(ItemFlag.HIDE_POTION_EFFECTS) } - pdc.set(internalHideEnchants, PersistentDataType.INTEGER, 1) + pdc.set(hideStateKey, PersistentDataType.INTEGER, 1) return + } else { + pdc.set(hideStateKey, PersistentDataType.INTEGER, 0) } val lore = fast.lore @@ -110,7 +117,7 @@ class EnchantDisplay(private val plugin: EcoEnchantsPlugin) : DisplayModule(plug val fast = itemStack.fast() val pdc = fast.persistentDataContainer - if (!pdc.has(internalHideEnchants, PersistentDataType.INTEGER)) { + if (pdc.hideState != 1) { fast.removeItemFlags(ItemFlag.HIDE_ENCHANTS) if (itemStack.type == Material.ENCHANTED_BOOK) { @@ -118,17 +125,25 @@ class EnchantDisplay(private val plugin: EcoEnchantsPlugin) : DisplayModule(plug } } - pdc.remove(internalHideEnchants) + pdc.remove(hideStateKey) } override fun generateVarArgs(itemStack: ItemStack): Array { val fast = itemStack.fast() - // I'm not including the internal hide enchants check here because... I don't know why. - // I'm copying over from 8.x.x because I know it worked then. - return arrayOf( - fast.hasItemFlag(ItemFlag.HIDE_ENCHANTS) - || fast.hasItemFlag(ItemFlag.HIDE_POTION_EFFECTS) - ) + return when (fast.hideState) { + 1 -> arrayOf(true) + 0 -> arrayOf(false) + else -> arrayOf( + fast.hasItemFlag(ItemFlag.HIDE_ENCHANTS) + || fast.hasItemFlag(ItemFlag.HIDE_POTION_EFFECTS) + ) + } } + + private val FastItemStack.hideState: Int + get() = this.persistentDataContainer.hideState + + private val PersistentDataContainer.hideState: Int + get() = this.get(hideStateKey, PersistentDataType.INTEGER) ?: -1 } diff --git a/gradle.properties b/gradle.properties index 8b726dc2..0ab23519 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ #libreforge-updater #Thu Sep 22 17:32:02 BST 2022 -version=9.0.0-b32 +version=9.0.0-b33 plugin-name=EcoEnchants