text: BaseComponent outsource with translation formatting

This commit is contained in:
Bixilon 2023-05-08 14:35:38 +02:00
parent 73d68e89aa
commit 7307a22000
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4

View File

@ -14,6 +14,8 @@
package de.bixilon.minosoft.data.text
import de.bixilon.kutil.cast.CastUtil.nullCast
import de.bixilon.kutil.cast.CastUtil.unsafeCast
import de.bixilon.kutil.json.JsonObject
import de.bixilon.kutil.json.JsonUtil.toJsonList
import de.bixilon.kutil.json.JsonUtil.toJsonObject
import de.bixilon.kutil.primitive.BooleanUtil.toBoolean
@ -90,15 +92,9 @@ class BaseComponent : ChatComponent {
parseExtra()
json["translate"]?.toString()?.let {
val with: MutableList<Any> = mutableListOf()
json["with"].toJsonList()?.let { withArray ->
for (part in withArray) {
if (part == null) continue
with += ChatComponent.of(raw = part, translator, component, restricted = restrictedMode)
}
}
val with: Array<ChatComponent> = json.with(translator, component, restrictedMode) ?: emptyArray()
val fallback = json["fallback"]?.toString()
this += translator?.forceTranslate(it.toResourceLocation(), component, restrictedMode, fallback, *with.toTypedArray()) ?: ChatComponent.of(json["with"], translator, component, restrictedMode)
this += translator?.forceTranslate(it.toResourceLocation(), component, restrictedMode, fallback, data = with.unsafeCast()) ?: ChatComponent.of(json["with"], translator, component, restrictedMode)
}
}
@ -276,4 +272,15 @@ class BaseComponent : ChatComponent {
}
}
}
private fun JsonObject.with(translator: Translator?, parent: TextComponent, restricted: Boolean): Array<ChatComponent>? {
val with = this["with"]?.toJsonList() ?: return null
val parts: MutableList<ChatComponent> = mutableListOf()
for (part in with) {
if (part == null) continue
parts += ChatComponent.of(raw = part, translator, parent, restricted = restricted)
}
return parts.toTypedArray()
}
}