From c96dd7d308324dedae17db63a78da657385ad305 Mon Sep 17 00:00:00 2001 From: alexd <42614139+alexcrea@users.noreply.github.com> Date: Mon, 23 Mar 2026 17:57:47 +0100 Subject: [PATCH] simplify and extend enchant limit --- defaultconfigs/1.18/config.yml | 8 +-- defaultconfigs/1.21.11/config.yml | 8 +-- defaultconfigs/1.21.9/config.yml | 8 +-- defaultconfigs/1.21/config.yml | 8 +-- .../alexcrea/cuanvil/api/EnchantmentApi.java | 5 +- .../config/global/EnchantLimitConfigGui.java | 16 +++-- .../gui/config/settings/IntSettingsGui.java | 11 ++- .../cuanvil/update/PluginSetDefault.java | 1 - .../io/delilaheve/util/ConfigOptions.kt | 71 +++++++------------ src/main/resources/config.yml | 8 +-- 10 files changed, 58 insertions(+), 86 deletions(-) diff --git a/defaultconfigs/1.18/config.yml b/defaultconfigs/1.18/config.yml index 47070ba..5a85d1d 100644 --- a/defaultconfigs/1.18/config.yml +++ b/defaultconfigs/1.18/config.yml @@ -87,18 +87,14 @@ permission_needed_for_color: true # Valid values include 0 to 1000. use_of_color_cost: 0 -# Default limit to apply to any enchants missing from enchant_limits -# -# Valid values include 1 to 1000 -default_limit: 5 - # Override limits for specific enchants # # Enchantments not listed here will use the value of default_limit # # Overrides provided default from aqua_affinity to depth_strider won't change effect with extra levels # -# Valid range of 1 - 255 for each enchantment +# Valid range of 0 - 255 for each enchantment +# -1 mean keep default enchant_limits: minecraft:aqua_affinity: 1 minecraft:binding_curse: 1 diff --git a/defaultconfigs/1.21.11/config.yml b/defaultconfigs/1.21.11/config.yml index 0d9e089..267df3d 100644 --- a/defaultconfigs/1.21.11/config.yml +++ b/defaultconfigs/1.21.11/config.yml @@ -89,18 +89,14 @@ permission_needed_for_color: true # Valid values include 0 to 1000. use_of_color_cost: 0 -# Default limit to apply to any enchants missing from enchant_limits -# -# Valid values include 1 to 1000 -default_limit: 5 - # Override limits for specific enchants # # Enchantments not listed here will use the value of default_limit # # Overrides provided default from aqua_affinity to depth_strider won't change effect with extra levels # -# Valid range of 1 - 255 for each enchantment +# Valid range of 0 - 255 for each enchantment +# -1 mean keep default enchant_limits: minecraft:aqua_affinity: 1 minecraft:binding_curse: 1 diff --git a/defaultconfigs/1.21.9/config.yml b/defaultconfigs/1.21.9/config.yml index d3538b2..87d03a9 100644 --- a/defaultconfigs/1.21.9/config.yml +++ b/defaultconfigs/1.21.9/config.yml @@ -87,18 +87,14 @@ permission_needed_for_color: true # Valid values include 0 to 1000. use_of_color_cost: 0 -# Default limit to apply to any enchants missing from enchant_limits -# -# Valid values include 1 to 1000 -default_limit: 5 - # Override limits for specific enchants # # Enchantments not listed here will use the value of default_limit # # Overrides provided default from aqua_affinity to depth_strider won't change effect with extra levels # -# Valid range of 1 - 255 for each enchantment +# Valid range of 0 - 255 for each enchantment +# -1 mean keep default enchant_limits: minecraft:aqua_affinity: 1 minecraft:binding_curse: 1 diff --git a/defaultconfigs/1.21/config.yml b/defaultconfigs/1.21/config.yml index c1677fb..b6b620c 100644 --- a/defaultconfigs/1.21/config.yml +++ b/defaultconfigs/1.21/config.yml @@ -87,18 +87,14 @@ permission_needed_for_color: true # Valid values include 0 to 1000. use_of_color_cost: 0 -# Default limit to apply to any enchants missing from enchant_limits -# -# Valid values include 1 to 1000 -default_limit: 5 - # Override limits for specific enchants # # Enchantments not listed here will use the value of default_limit # # Overrides provided default from aqua_affinity to depth_strider won't change effect with extra levels # -# Valid range of 1 - 255 for each enchantment +# Valid range of 0 - 255 for each enchantment +# -1 mean keep default enchant_limits: minecraft:aqua_affinity: 1 minecraft:binding_curse: 1 diff --git a/src/main/java/xyz/alexcrea/cuanvil/api/EnchantmentApi.java b/src/main/java/xyz/alexcrea/cuanvil/api/EnchantmentApi.java index 76f1ac2..ac98225 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/api/EnchantmentApi.java +++ b/src/main/java/xyz/alexcrea/cuanvil/api/EnchantmentApi.java @@ -1,6 +1,7 @@ package xyz.alexcrea.cuanvil.api; import io.delilaheve.CustomAnvil; +import io.delilaheve.util.ConfigOptions; import org.bukkit.NamespacedKey; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.enchantments.Enchantment; @@ -180,13 +181,13 @@ public class EnchantmentApi { private static boolean tryWriteDefaultConfig(FileConfiguration defaultConfig, CAEnchantment enchantment, boolean override) { boolean hasChange = false; - String levelPath = "enchant_limits." + enchantment.getKey(); + String levelPath = ConfigOptions.ENCHANT_LIMIT_ROOT + "." + enchantment.getKey(); if(override || !defaultConfig.isSet(levelPath)){ defaultConfig.set(levelPath, enchantment.defaultMaxLevel()); hasChange = true; } - String basePath = "enchant_values." + enchantment.getKey(); + String basePath = ConfigOptions.ENCHANT_VALUES_ROOT + "." + enchantment.getKey(); EnchantmentRarity rarity = enchantment.defaultRarity(); String itemPath = basePath + ".item"; diff --git a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/EnchantLimitConfigGui.java b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/EnchantLimitConfigGui.java index d624bff..a95a5bb 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/EnchantLimitConfigGui.java +++ b/src/main/java/xyz/alexcrea/cuanvil/gui/config/global/EnchantLimitConfigGui.java @@ -17,7 +17,7 @@ import java.util.Locale; */ public class EnchantLimitConfigGui extends AbstractEnchantConfigGui { - private static final String SECTION_NAME = "enchant_limits"; + private static final String SECTION_NAME = ConfigOptions.ENCHANT_LIMIT_ROOT; private static EnchantLimitConfigGui INSTANCE = null; @@ -41,18 +41,26 @@ public class EnchantLimitConfigGui extends AbstractEnchantConfigGui §e" + planned + " §r(§c-" + (now - planned) + "§r)"); + meta.setDisplayName("§e" + displayNow + " §f-> §e" + planned + " §r(§c-" + holder.valueDisplayName(now - planned) + "§r)"); meta.setLore(Collections.singletonList(AbstractSettingGui.CLICK_LORE)); item.setItemMeta(meta); @@ -116,7 +117,7 @@ public class IntSettingsGui extends AbstractSettingGui { ItemMeta meta = item.getItemMeta(); assert meta != null; - meta.setDisplayName("§e" + now + " §f-> §e" + planned + " §r(§a+" + (planned - now) + "§r)"); + meta.setDisplayName("§e" + displayNow + " §f-> §e" + planned + " §r(§a+" + holder.valueDisplayName(planned - now) + "§r)"); meta.setLore(Collections.singletonList(AbstractSettingGui.CLICK_LORE)); item.setItemMeta(meta); @@ -131,7 +132,7 @@ public class IntSettingsGui extends AbstractSettingGui { ItemMeta resultMeta = resultPaper.getItemMeta(); assert resultMeta != null; - resultMeta.setDisplayName("§fValue: §e" + now); + resultMeta.setDisplayName("§fValue: §e" + displayNow); resultMeta.setLore(holder.displayLore); resultPaper.setItemMeta(resultMeta); @@ -389,6 +390,10 @@ public class IntSettingsGui extends AbstractSettingGui { return getItem(itemMat, CasedStringUtil.detectToUpperSpacedCase(configPath)); } + public String valueDisplayName(int value) { + return String.valueOf(value); + } + } } diff --git a/src/main/java/xyz/alexcrea/cuanvil/update/PluginSetDefault.java b/src/main/java/xyz/alexcrea/cuanvil/update/PluginSetDefault.java index f41842d..774c5da 100644 --- a/src/main/java/xyz/alexcrea/cuanvil/update/PluginSetDefault.java +++ b/src/main/java/xyz/alexcrea/cuanvil/update/PluginSetDefault.java @@ -30,7 +30,6 @@ public class PluginSetDefault { nbSet += trySetDefault(config, ALLOW_HEXADECIMAL_COLOR, DEFAULT_ALLOW_HEXADECIMAL_COLOR); nbSet += trySetDefault(config, PERMISSION_NEEDED_FOR_COLOR, DEFAULT_PERMISSION_NEEDED_FOR_COLOR); nbSet += trySetDefault(config, USE_OF_COLOR_COST, DEFAULT_USE_OF_COLOR_COST); - nbSet += trySetDefault(config, DEFAULT_LIMIT_PATH, DEFAULT_ENCHANT_LIMIT); // Lore Edit defaults for (@NotNull LoreEditType value : LoreEditType.values()) { diff --git a/src/main/kotlin/io/delilaheve/util/ConfigOptions.kt b/src/main/kotlin/io/delilaheve/util/ConfigOptions.kt index 8bd76d2..c69f2fb 100644 --- a/src/main/kotlin/io/delilaheve/util/ConfigOptions.kt +++ b/src/main/kotlin/io/delilaheve/util/ConfigOptions.kt @@ -57,8 +57,6 @@ object ConfigOptions { const val ENCHANT_COUNT_LIMIT_DEFAULT = "$ENCHANT_COUNT_LIMIT_ROOT.default" const val ENCHANT_COUNT_LIMIT_ITEMS = "$ENCHANT_COUNT_LIMIT_ROOT.items" - const val DEFAULT_LIMIT_PATH = "default_limit" - const val ENCHANT_LIMIT_ROOT = "enchant_limits" const val ENCHANT_VALUES_ROOT = "enchant_values" @@ -102,8 +100,6 @@ object ConfigOptions { const val DEFAULT_PERMISSION_NEEDED_FOR_COLOR = true const val DEFAULT_USE_OF_COLOR_COST = 0 - const val DEFAULT_ENCHANT_LIMIT = 5 - // Debug flag private const val DEFAULT_DEBUG_LOG = false private const val DEFAULT_VERBOSE_DEBUG_LOG = false @@ -133,8 +129,7 @@ object ConfigOptions { val USE_OF_COLOR_COST_RANGE = 0..1000 // Valid range for an enchantment limit - @JvmField - val ENCHANT_LIMIT_RANGE = 1..255 + const val ENCHANT_LIMIT = 255 // Valid range for an enchantment count limit @JvmField @@ -348,16 +343,6 @@ object ConfigOptions { return WorkPenaltyPart(penaltyIncrease, penaltyAdditive, exclusivePenaltyIncrease, exclusivePenaltyAdditive) } - /** - * Default enchantment limit - */ - private val defaultEnchantLimit: Int - get() { - return ConfigHolder.DEFAULT_CONFIG - .config - .getInt(DEFAULT_LIMIT_PATH, DEFAULT_ENCHANT_LIMIT) - } - /** * Get material enchantment count limit * @@ -422,42 +407,37 @@ object ConfigOptions { * Get the given [enchantment]'s limit */ fun enchantLimit(enchantment: CAEnchantment): Int { + val limit = rawEnchantLimit(enchantment) + if(limit >= 0) return limit.coerceAtMost(ENCHANT_LIMIT) + + // get default + return enchantment.defaultMaxLevel() + } + + /** + * Get the given [enchantment]'s limit + */ + fun rawEnchantLimit(enchantment: CAEnchantment): Int { // Test namespace var limit = enchantLimit(enchantment.key.toString()) - if (limit != null) return limit + if (limit >= 0) return limit // Test legacy (name only) limit = enchantLimit(enchantment.enchantmentName) - if (limit != null) return limit + if (limit >= 0) return limit - // get default (and test old legacy if present) - return getDefaultLevel(enchantment.enchantmentName) + // Default to negative + return -1 } /** * Get the given [enchantmentName]'s limit */ - private fun enchantLimit(enchantmentName: String): Int? { + private fun enchantLimit(enchantmentName: String): Int { val path = "${ENCHANT_LIMIT_ROOT}.$enchantmentName" - return CustomAnvil.instance - .config - .getInt(path, ENCHANT_LIMIT_RANGE.first - 1) - .takeIf { it in ENCHANT_LIMIT_RANGE } - } - - /** - * Get default value if enchantment do not exist on config - */ - private fun getDefaultLevel( - enchantmentName: String, // compatibility with 1.20.5. TODO better update system - ): Int { - if (enchantmentName == "sweeping_edge") { - val limit = enchantLimit("sweeping") - if (limit != null) return limit - - } - return defaultEnchantLimit + return CustomAnvil.instance.config + .getInt(path, -1) } /** @@ -529,20 +509,20 @@ object ConfigOptions { fun maxBeforeMergeDisabled(enchantment: CAEnchantment): Int { val key = enchantment.key.toString() var value = maxBeforeMergeDisabled(key) - if (value != null) return value + if (value >= 0) return value // Legacy name val legacy = enchantment.enchantmentName value = maxBeforeMergeDisabled(legacy) - if (value != null) return value + if (value >= 0) return value if (key == "minecraft:sweeping_edge") { value = maxBeforeMergeDisabled("minecraft:sweeping") - if (value != null) return value + if (value >= 0) return value // legacy name of legacy enchantment name value = maxBeforeMergeDisabled("sweeping") - if (value != null) return value + if (value >= 0) return value } return DEFAULT_MAX_BEFORE_MERGE_DISABLED @@ -552,14 +532,13 @@ object ConfigOptions { * Get the given [enchantmentName]'s level before merge is disabled * a negative value would mean never disabled */ - private fun maxBeforeMergeDisabled(enchantmentName: String): Int? { + private fun maxBeforeMergeDisabled(enchantmentName: String): Int { // find if set val path = "${DISABLE_MERGE_OVER_ROOT}.$enchantmentName" return CustomAnvil.instance .config - .getInt(path, ENCHANT_LIMIT_RANGE.min() - 1) - .takeIf { it in ENCHANT_LIMIT_RANGE } + .getInt(path, -1) } fun isImmutable(key: NamespacedKey): Boolean { diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 7cc1768..95729b7 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -89,18 +89,14 @@ permission_needed_for_color: true # Valid values include 0 to 1000. use_of_color_cost: 0 -# Default limit to apply to any enchants missing from enchant_limits -# -# Valid values include 1 to 1000 -default_limit: 5 - # Override limits for specific enchants # # Enchantments not listed here will use the value of default_limit # # Overrides provided default from aqua_affinity to depth_strider won't change effect with extra levels # -# Valid range of 1 - 255 for each enchantment +# Valid range of 0 - 255 for each enchantment +# -1 mean keep default enchant_limits: minecraft:aqua_affinity: 1 minecraft:binding_curse: 1