summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLinnea Gräf <nea@nea.moe>2025-01-25 01:39:47 +0100
committerLinnea Gräf <nea@nea.moe>2025-01-25 01:39:47 +0100
commit6a0308b878bf9fbda8bb8b499fa3db82f3b5ffd6 (patch)
tree55b7b810bc20fa3079bf81035d5712993fa78428 /src
parent297e15a48821168610ef6cb3432b0530495cf034 (diff)
downloadultra-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.java3
-rw-r--r--src/main/kotlin/datamodel/ChatType.kt8
-rw-r--r--src/main/kotlin/util/minecrat/TextUtil.kt69
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()
+}