diff options
author | Linnea Gräf <nea@nea.moe> | 2024-10-24 14:49:21 +0200 |
---|---|---|
committer | Linnea Gräf <nea@nea.moe> | 2024-10-24 14:49:21 +0200 |
commit | 0357245e88be4b8cd3d0681340d9a7065361ea74 (patch) | |
tree | cb52c479bc029295075ceeaa04251fae63ec5e50 /src/main/kotlin/util | |
parent | 6100b8c9a0fe42be52a759b429f532c12cc72a32 (diff) | |
download | Firmament-0357245e88be4b8cd3d0681340d9a7065361ea74.tar.gz Firmament-0357245e88be4b8cd3d0681340d9a7065361ea74.tar.bz2 Firmament-0357245e88be4b8cd3d0681340d9a7065361ea74.zip |
Add getLegacyFormatString method
[no changelog]
Diffstat (limited to 'src/main/kotlin/util')
-rw-r--r-- | src/main/kotlin/util/textutil.kt | 25 |
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) } |