Add getLegacyFormatString method
[no changelog]
This commit is contained in:
@@ -30,6 +30,8 @@ import moe.nea.firmament.util.SkyblockId
|
||||
import moe.nea.firmament.util.accessors.messages
|
||||
import moe.nea.firmament.util.collections.InstanceList
|
||||
import moe.nea.firmament.util.collections.WeakCache
|
||||
import moe.nea.firmament.util.mc.SNbtFormatter
|
||||
import moe.nea.firmament.util.unformattedString
|
||||
|
||||
|
||||
fun firmamentCommand() = literal("firmament") {
|
||||
@@ -44,7 +46,8 @@ fun firmamentCommand() = literal("firmament") {
|
||||
}
|
||||
thenArgument("property", string()) { property ->
|
||||
suggestsList {
|
||||
(ManagedConfig.allManagedConfigs.getAll().find { it.name == this[config] } ?: return@suggestsList listOf())
|
||||
(ManagedConfig.allManagedConfigs.getAll().find { it.name == this[config] }
|
||||
?: return@suggestsList listOf())
|
||||
.allOptions.entries.asSequence().filter { it.value.handler is BooleanHandler }
|
||||
.map { it.key }
|
||||
.asIterable()
|
||||
@@ -216,6 +219,16 @@ fun firmamentCommand() = literal("firmament") {
|
||||
println(nbt)
|
||||
}
|
||||
}
|
||||
thenArgument("search", string()) { search ->
|
||||
thenExecute {
|
||||
MC.inGameHud.chatHud.messages
|
||||
.filter { this[search] in it.content.unformattedString }
|
||||
.forEach {
|
||||
val nbt = TextCodecs.CODEC.encodeStart(NbtOps.INSTANCE, it.content).orThrow
|
||||
println(SNbtFormatter.prettify(nbt))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
thenLiteral("sbdata") {
|
||||
thenExecute {
|
||||
|
||||
@@ -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) }
|
||||
|
||||
Reference in New Issue
Block a user