From 03ff928d82fcdeb3b03c4a37c23da77af8b0112e Mon Sep 17 00:00:00 2001 From: Auxilor Date: Thu, 11 May 2023 19:00:46 +0100 Subject: [PATCH] Fixed descriptions --- .../com/willfp/ecoskills/obj/Levellable.kt | 28 +++++++++++-------- .../com/willfp/ecoskills/skills/Skill.kt | 20 +++++++------ 2 files changed, 28 insertions(+), 20 deletions(-) diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/obj/Levellable.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/obj/Levellable.kt index e9b8b55..9c4c706 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/obj/Levellable.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/obj/Levellable.kt @@ -10,7 +10,9 @@ import com.willfp.eco.core.placeholder.PlayerStaticPlaceholder import com.willfp.eco.core.placeholder.PlayerlessPlaceholder import com.willfp.eco.core.placeholder.context.placeholderContext import com.willfp.eco.core.registry.KRegistrable +import com.willfp.eco.util.NumberUtils import com.willfp.eco.util.formatEco +import com.willfp.eco.util.toNiceString import com.willfp.eco.util.toNumeral import com.willfp.ecoskills.EcoSkillsPlugin import com.willfp.ecoskills.util.DescriptionPlaceholder @@ -45,12 +47,7 @@ abstract class Levellable( }.map { it.uniqueId } } - // Lazy init so config placeholders can inject - private val unformattedDescription by lazy { - loadDescriptionPlaceholders(config).fold(config.getString("description")) { desc, it -> - desc.replace("%${it.id}%", it.expr) - } - } + private val unformattedDescription = config.getString("description") val name = config.getFormattedString("name") @@ -92,11 +89,20 @@ abstract class Levellable( } fun getDescription(player: Player): String { - return unformattedDescription.formatEco( - placeholderContext( - player = player, - injectable = LevelInjectable(getActualLevel(player)) - ) + var desc = unformattedDescription + + val context = placeholderContext( + player = player, + injectable = LevelInjectable(getActualLevel(player)) ) + + for (placeholder in loadDescriptionPlaceholders(config)) { + val id = placeholder.id + val value = NumberUtils.evaluateExpression(placeholder.expr, context) + + desc = desc.replace("%$id%", value.toNiceString()) + } + + return desc.formatEco(context) } } diff --git a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/skills/Skill.kt b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/skills/Skill.kt index 8e671df..ac471e6 100644 --- a/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/skills/Skill.kt +++ b/eco-core/core-plugin/src/main/kotlin/com/willfp/ecoskills/skills/Skill.kt @@ -12,7 +12,6 @@ import com.willfp.eco.util.toNiceString import com.willfp.eco.util.toNumeral import com.willfp.ecoskills.EcoSkillsPlugin import com.willfp.ecoskills.api.getFormattedRequiredXP -import com.willfp.ecoskills.api.getRequiredXP import com.willfp.ecoskills.api.getSkillLevel import com.willfp.ecoskills.api.getSkillProgress import com.willfp.ecoskills.api.getSkillXP @@ -193,17 +192,20 @@ class Skill( .filter { it <= level } // Only consider levels not greater than the provided level .maxOrNull() ?: 1 // Get the maximum level, default to 1 if no suitable level was found - val rawMessages = config.getStrings("reward-messages.$highestConfiguredLevel") + val messages = config.getStrings("reward-messages.$highestConfiguredLevel").toMutableList() - val messages = loadDescriptionPlaceholders(config).fold(rawMessages) { desc, placeholder -> - desc.map { s -> s.replace("%${placeholder.id}%", placeholder.expr) } + val context = placeholderContext( + injectable = LevelInjectable(level) + ) + + for (placeholder in loadDescriptionPlaceholders(config)) { + val id = placeholder.id + val value = NumberUtils.evaluateExpression(placeholder.expr, context) + + messages.replaceAll { s -> s.replace("%$id%", value.toNiceString()) } } - return messages.formatEco( - placeholderContext( - injectable = LevelInjectable(level) - ) - ) + return messages.formatEco(context) } internal fun handleLevelUp(player: OfflinePlayer, level: Int) {