diff options
author | Linnea Gräf <nea@nea.moe> | 2025-01-25 01:39:47 +0100 |
---|---|---|
committer | Linnea Gräf <nea@nea.moe> | 2025-01-25 01:39:47 +0100 |
commit | 6a0308b878bf9fbda8bb8b499fa3db82f3b5ffd6 (patch) | |
tree | 55b7b810bc20fa3079bf81035d5712993fa78428 /src | |
parent | 297e15a48821168610ef6cb3432b0530495cf034 (diff) | |
download | ultra-notifier-6a0308b878bf9fbda8bb8b499fa3db82f3b5ffd6.tar.gz ultra-notifier-6a0308b878bf9fbda8bb8b499fa3db82f3b5ffd6.tar.bz2 ultra-notifier-6a0308b878bf9fbda8bb8b499fa3db82f3b5ffd6.zip |
categorize thingies
Diffstat (limited to 'src')
-rw-r--r-- | src/main/java/moe/nea/ultranotifier/mixin/ChatHudCategoryTracker.java | 3 | ||||
-rw-r--r-- | src/main/kotlin/datamodel/ChatType.kt | 8 | ||||
-rw-r--r-- | src/main/kotlin/util/minecrat/TextUtil.kt | 69 |
3 files changed, 77 insertions, 3 deletions
diff --git a/src/main/java/moe/nea/ultranotifier/mixin/ChatHudCategoryTracker.java b/src/main/java/moe/nea/ultranotifier/mixin/ChatHudCategoryTracker.java index 8538720..ac187d9 100644 --- a/src/main/java/moe/nea/ultranotifier/mixin/ChatHudCategoryTracker.java +++ b/src/main/java/moe/nea/ultranotifier/mixin/ChatHudCategoryTracker.java @@ -32,13 +32,14 @@ public class ChatHudCategoryTracker<T> implements HasCategorizedChatLine { //$$int weird, //#else //$$T content, + //$$int weird, //#endif //#if MC>1.20 MessageSignatureData signature, MessageIndicator tag, //#endif CallbackInfo ci ) { - categorizedSelf = ChatCategoryArbiter.INSTANCE.categorize(content); + categorizedSelf = ChatCategoryArbiter.INSTANCE.categorize((Text)content); } @Override diff --git a/src/main/kotlin/datamodel/ChatType.kt b/src/main/kotlin/datamodel/ChatType.kt index 9f20c41..db3311b 100644 --- a/src/main/kotlin/datamodel/ChatType.kt +++ b/src/main/kotlin/datamodel/ChatType.kt @@ -1,5 +1,8 @@ package moe.nea.ultranotifier.datamodel +import moe.nea.ultranotifier.util.minecrat.getDirectlyContainedText +import moe.nea.ultranotifier.util.minecrat.getFormattedTextCompat +import moe.nea.ultranotifier.util.minecrat.removeFormattingCodes import net.minecraft.text.Text import java.util.function.Predicate import java.util.regex.Pattern @@ -95,8 +98,9 @@ object ChatCategoryArbiter { ) ) - fun categorize(content: Any): CategorizedChatLine { - TODO() + fun categorize(content: Text): CategorizedChatLine { + val stringContent = content.getFormattedTextCompat().removeFormattingCodes() + return universe.categorize(stringContent) } } diff --git a/src/main/kotlin/util/minecrat/TextUtil.kt b/src/main/kotlin/util/minecrat/TextUtil.kt index 2a09e13..0640021 100644 --- a/src/main/kotlin/util/minecrat/TextUtil.kt +++ b/src/main/kotlin/util/minecrat/TextUtil.kt @@ -1 +1,70 @@ package moe.nea.ultranotifier.util.minecrat +import net.minecraft.text.Text + +//#if MC > 1.16 +import net.minecraft.text.TextColor +import net.minecraft.util.Formatting +//#endif +//#if MC > 1.20 +import net.minecraft.text.MutableText +import net.minecraft.text.PlainTextContent +//#endif + +fun Text.getDirectlyContainedText() = +//#if MC < 1.16 +//$$ this.unformattedComponentText +//#elseif MC < 1.20 +//$$ this.asString() +//#else + (this.content as? PlainTextContent)?.string().orEmpty() +//#endif + +fun Text?.getFormattedTextCompat(): String = +//#if MC < 1.16 +//$$ this?.formattedText.orEmpty() +//#else +run { + this ?: return@run "" + val sb = StringBuilder() + for (component in iterator()) { + sb.append(component.style.color?.toChatFormatting()?.toString() ?: "§r") + sb.append(component.getDirectlyContainedText()) + 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 +} +//#endif + +//#if MC > 1.20 +fun MutableText.withColor(formatting: Formatting): Text { + return this.styled { it.withColor(formatting) } +} +//#endif + +fun CharSequence.removeFormattingCodes(): String { + var nextParagraph = indexOf('§') + if (nextParagraph < 0) return this.toString() + val stringBuffer = StringBuilder(this.length) + var readIndex = 0 + while (nextParagraph >= 0) { + stringBuffer.append(this, readIndex, nextParagraph) + readIndex = nextParagraph + 2 + nextParagraph = indexOf('§', startIndex = readIndex) + if (readIndex > this.length) + readIndex = this.length + } + stringBuffer.append(this, readIndex, this.length) + return stringBuffer.toString() +} |