aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/util/textutil.kt
diff options
context:
space:
mode:
authorLinnea Gräf <nea@nea.moe>2024-10-24 14:49:21 +0200
committerLinnea Gräf <nea@nea.moe>2024-10-24 14:49:21 +0200
commit0357245e88be4b8cd3d0681340d9a7065361ea74 (patch)
treecb52c479bc029295075ceeaa04251fae63ec5e50 /src/main/kotlin/util/textutil.kt
parent6100b8c9a0fe42be52a759b429f532c12cc72a32 (diff)
downloadfirmament-0357245e88be4b8cd3d0681340d9a7065361ea74.tar.gz
firmament-0357245e88be4b8cd3d0681340d9a7065361ea74.tar.bz2
firmament-0357245e88be4b8cd3d0681340d9a7065361ea74.zip
Add getLegacyFormatString method
[no changelog]
Diffstat (limited to 'src/main/kotlin/util/textutil.kt')
-rw-r--r--src/main/kotlin/util/textutil.kt25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/main/kotlin/util/textutil.kt b/src/main/kotlin/util/textutil.kt
index 1cef5d4..252f708 100644
--- a/src/main/kotlin/util/textutil.kt
+++ b/src/main/kotlin/util/textutil.kt
@@ -3,6 +3,7 @@ package moe.nea.firmament.util
import net.minecraft.text.MutableText
import net.minecraft.text.PlainTextContent
import net.minecraft.text.Text
+import net.minecraft.text.TextColor
import net.minecraft.text.TranslatableTextContent
import net.minecraft.util.Formatting
import moe.nea.firmament.Firmament
@@ -92,6 +93,30 @@ val Text.unformattedString: String
val Text.directLiteralStringContent: String? get() = (this.content as? PlainTextContent)?.string()
+fun Text.getLegacyFormatString() =
+ run {
+ val sb = StringBuilder()
+ for (component in iterator()) {
+ sb.append(component.style.color?.toChatFormatting()?.toString() ?: "§r")
+ sb.append(component.directLiteralStringContent)
+ sb.append("§r")
+ }
+ sb.toString()
+ }
+
+private val textColorLUT = Formatting.entries
+ .mapNotNull { formatting -> formatting.colorValue?.let { it to formatting } }
+ .toMap()
+
+fun TextColor.toChatFormatting(): Formatting? {
+ return textColorLUT[this.rgb]
+}
+
+fun Text.iterator(): Sequence<Text> {
+ return sequenceOf(this) + siblings.asSequence()
+ .flatMap { it.iterator() } // TODO: in theory we want to properly inherit styles here
+}
+
fun Text.allSiblings(): List<Text> = listOf(this) + siblings.flatMap { it.allSiblings() }
fun MutableText.withColor(formatting: Formatting) = this.styled { it.withColor(formatting).withItalic(false) }