aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLinnea Gräf <nea@nea.moe>2024-10-24 14:11:25 +0200
committerLinnea Gräf <nea@nea.moe>2024-10-24 15:44:48 +0200
commitc1abe20e27b53834759c98b66cbf1ae17c4da36a (patch)
tree1f1ba22287e563e887015c298b767824b2e767ce /src
parent2e7e0e801551d2a904b4c095a09ee5f349bbd29b (diff)
downloadSkyHanni-c1abe20e27b53834759c98b66cbf1ae17c4da36a.tar.gz
SkyHanni-c1abe20e27b53834759c98b66cbf1ae17c4da36a.tar.bz2
SkyHanni-c1abe20e27b53834759c98b66cbf1ae17c4da36a.zip
Fix getFormattedTextCompat method
This method allows getting 1.8.9 like formattedtext on 1.21
Diffstat (limited to 'src')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/compat/World.kt51
1 files changed, 42 insertions, 9 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/utils/compat/World.kt b/src/main/java/at/hannibal2/skyhanni/utils/compat/World.kt
index 7916eb4e5..827e7d3cf 100644
--- a/src/main/java/at/hannibal2/skyhanni/utils/compat/World.kt
+++ b/src/main/java/at/hannibal2/skyhanni/utils/compat/World.kt
@@ -1,5 +1,13 @@
package at.hannibal2.skyhanni.utils.compat
+//#if MC > 1.16
+//$$import net.minecraft.ChatFormatting
+//$$import net.minecraft.network.chat.TextColor
+//#endif
+//#if MC > 1.20
+//$$import net.minecraft.text.MutableText
+//$$import net.minecraft.text.PlainTextContent
+//#endif
import net.minecraft.client.Minecraft
import net.minecraft.client.multiplayer.WorldClient
import net.minecraft.entity.Entity
@@ -36,19 +44,44 @@ fun Minecraft.isOnMainThread() =
//$$ this.isSameThread
//#endif
+fun IChatComponent.getDirectlyContainedText() =
+//#if MC < 1.16
+ this.unformattedTextForChat
+//#elseif MC < 1.20
+//$$ this.contents
+//#else
+//$$ (this.content as? PlainTextContent)?.string() ?: ""
+//#endif
fun IChatComponent.getFormattedTextCompat() =
//#if MC < 1.16
this.formattedText
//#else
-//$$ run {
-//$$ val sb = StringBuilder()
-//$$ for (component in iterator()) {
-//$$ sb.append(component.style.formattingCode)
-//$$ sb.append(component.unformattedComponentText)
-//$$ sb.append("§r")
-//$$ }
-//$$ sb.toString()
-//$$ }
+//$$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 = ChatFormatting.entries
+//$$ .mapNotNull { formatting -> formatting.color?.let { it to formatting } }
+//$$ .toMap()
+//$$
+//$$fun TextColor.toChatFormatting(): ChatFormatting? {
+//$$ return textColorLUT[this.value]
+//$$}
+//$$
+//$$fun Component.iterator(): Sequence<Component> {
+//$$ 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
object Effects {