diff --git a/core/src/main/kotlin/com/mineinabyss/emojy/translator/EmojyArgumentTag.kt b/core/src/main/kotlin/com/mineinabyss/emojy/translator/EmojyArgumentTag.kt index d039cfc..e9aee28 100644 --- a/core/src/main/kotlin/com/mineinabyss/emojy/translator/EmojyArgumentTag.kt +++ b/core/src/main/kotlin/com/mineinabyss/emojy/translator/EmojyArgumentTag.kt @@ -9,25 +9,13 @@ import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver import java.util.* -class EmojyArgumentTag(argumentComponents: List) : TagResolver { - private val argumentComponents: List - - init { - this.argumentComponents = Objects.requireNonNull(argumentComponents, "argumentComponents") - } +class EmojyArgumentTag(private val argumentComponents: List) : TagResolver { @Throws(ParsingException::class) override fun resolve(name: String, arguments: ArgumentQueue, ctx: Context): Tag { - val index = arguments.popOr("No argument number provided").asInt().orElseThrow { - ctx.newException( - "Invalid argument number", - arguments - ) - } - if (index < 0 || index >= argumentComponents.size) { - throw ctx.newException("Invalid argument number", arguments) - } - return Tag.inserting(argumentComponents[index]!!) + val index = arguments.popOr("No argument number provided").asInt().orElse(-1).takeUnless { it < 0 || it >= argumentComponents.size } + ?: throw ctx.newException("Invalid argument number", arguments) + return Tag.inserting(argumentComponents[index]) } override fun has(name: String): Boolean { diff --git a/core/src/main/kotlin/com/mineinabyss/emojy/translator/EmojyTranslator.kt b/core/src/main/kotlin/com/mineinabyss/emojy/translator/EmojyTranslator.kt index 86b8843..303b645 100644 --- a/core/src/main/kotlin/com/mineinabyss/emojy/translator/EmojyTranslator.kt +++ b/core/src/main/kotlin/com/mineinabyss/emojy/translator/EmojyTranslator.kt @@ -19,11 +19,12 @@ class EmojyTranslator : Translator { override fun translate(key: String, locale: Locale) = null override fun translate(component: TranslatableComponent, locale: Locale): Component? { - val mmString = emojy.languages.firstOrNull { it.locale == locale }?.keys?.get(component.key()) ?: return null - val resultingComponent = mmString.miniMsg(EmojyArgumentTag(component.arguments()).takeIf { component.arguments().isNotEmpty() } ?: IdofrontTextComponents.globalResolver) + val lang = emojy.languages.firstOrNull { it.locale == locale } ?: emojy.languages.firstOrNull() ?: return null + val mmString = lang.keys[component.key()] ?: return null + val tagResolver = component.arguments().takeUnless { it.isEmpty() }?.let(::EmojyArgumentTag) ?: IdofrontTextComponents.globalResolver return when { - component.children().isEmpty() -> resultingComponent - else -> resultingComponent.children(component.children()) + component.children().isEmpty() -> mmString.miniMsg(tagResolver) + else -> mmString.miniMsg(tagResolver).children(component.children()) } }