Skip to content

Commit 9ed9c84

Browse files
refactor(Command/LocalConfig): paged list (#7368)
1 parent f8781b2 commit 9ed9c84

File tree

2 files changed

+44
-41
lines changed

2 files changed

+44
-41
lines changed

src/main/kotlin/net/ccbluex/liquidbounce/features/command/commands/client/CommandLocalConfig.kt

Lines changed: 37 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,13 @@ import net.ccbluex.liquidbounce.features.command.Command
2727
import net.ccbluex.liquidbounce.features.command.builder.CommandBuilder
2828
import net.ccbluex.liquidbounce.features.command.builder.ParameterBuilder
2929
import net.ccbluex.liquidbounce.features.command.builder.modules
30+
import net.ccbluex.liquidbounce.features.command.preset.pagedQuery
3031
import net.ccbluex.liquidbounce.features.module.ClientModule
32+
import net.ccbluex.liquidbounce.render.engine.type.Color4b
3133
import net.ccbluex.liquidbounce.utils.client.*
3234
import net.minecraft.text.ClickEvent
3335
import net.minecraft.text.HoverEvent
34-
import net.minecraft.text.Text
36+
import net.minecraft.text.Style
3537
import net.minecraft.util.Formatting
3638
import net.minecraft.util.Util
3739
import java.time.Instant
@@ -110,50 +112,44 @@ object CommandLocalConfig : Command.Factory {
110112

111113
private fun listSubcommand() = CommandBuilder
112114
.begin("list")
113-
.parameter(
114-
ParameterBuilder
115-
.begin<String>("online")
116-
.verifiedBy(ParameterBuilder.STRING_VALIDATOR)
117-
.optional()
118-
.build()
119-
)
120-
.handler {
121-
val configFiles = ConfigSystem.userConfigsFolder.listFiles { file, name ->
122-
name.endsWith(".json", ignoreCase = true)
123-
}
124-
125-
if (configFiles.isNullOrEmpty()) {
126-
chat("No local config!".asPlainText(Formatting.RED))
127-
} else {
128-
chat("Settings:".asPlainText(Formatting.AQUA))
129-
for (file in configFiles) {
130-
val fileNameWithoutSuffix = file.name.removeSuffix(".json")
131-
132-
chat(
133-
variable(file.name)
134-
.onClick(
135-
ClickEvent.SuggestCommand(
136-
".localconfig load $fileNameWithoutSuffix"
137-
)
115+
.pagedQuery(
116+
pageSize = 8,
117+
header = {
118+
"Local Configs:".asPlainText(Style.EMPTY + Color4b.LIQUID_BOUNCE + Formatting.BOLD)
119+
},
120+
items = {
121+
ConfigSystem.userConfigsFolder.listFiles { _, name ->
122+
name.endsWith(".json", ignoreCase = true)
123+
}.asList()
124+
},
125+
eachRow = { _, file ->
126+
val fileNameWithoutSuffix = file.name.removeSuffix(".json")
127+
128+
val lastModified = Instant.ofEpochMilli(file.lastModified())
129+
.atZone(ZoneId.systemDefault())
130+
.toLocalDateTime()
131+
.format(AutoSettings.FORMATTER)
132+
133+
textOf(
134+
"\u2B25 ".asPlainText(Formatting.BLUE),
135+
variable(file.name)
136+
.onClick(
137+
ClickEvent.SuggestCommand(
138+
".localconfig load $fileNameWithoutSuffix"
138139
)
139-
.onHover(
140-
HoverEvent.ShowText(
141-
Text.of("§7Click to load ${file.name}")
140+
)
141+
.onHover(
142+
HoverEvent.ShowText(
143+
textOf(
144+
"Click to load ".asPlainText(Formatting.GRAY),
145+
fileNameWithoutSuffix.asPlainText(Formatting.AQUA),
142146
)
143-
),
144-
regular(" ("),
145-
regular(
146-
Instant.ofEpochMilli(file.lastModified())
147-
.atZone(ZoneId.systemDefault())
148-
.toLocalDateTime()
149-
.format(AutoSettings.FORMATTER)
147+
)
150148
),
151-
regular(")"),
152-
)
153-
}
149+
regular(" ($lastModified)"),
150+
)
154151
}
155-
}
156-
.build()
152+
)
157153

158154
private fun loadSubcommand() = CommandBuilder
159155
.begin("load")

src/main/kotlin/net/ccbluex/liquidbounce/utils/client/TextExtensions.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ package net.ccbluex.liquidbounce.utils.client
2323
import com.google.common.base.CaseFormat
2424
import it.unimi.dsi.fastutil.chars.CharOpenHashSet
2525
import net.ccbluex.fastutil.unmodifiable
26+
import net.ccbluex.liquidbounce.render.engine.type.Color4b
2627
import net.ccbluex.liquidbounce.utils.collection.Pools
2728
import net.ccbluex.liquidbounce.utils.kotlin.unmodifiable
2829
import net.minecraft.text.*
@@ -59,6 +60,12 @@ inline fun String.asPlainText(style: Style): Text = PlainText.of(this, style)
5960
*/
6061
inline fun String.asPlainText(formatting: Formatting): Text = PlainText.of(this, formatting)
6162

63+
inline operator fun Style.plus(formatting: Formatting): Style = withFormatting(formatting)
64+
65+
inline operator fun Style.plus(color: TextColor): Style = withColor(color)
66+
67+
inline operator fun Style.plus(color: Color4b): Style = withColor(color.toTextColor())
68+
6269
inline fun List<Text>.asText(): Text = TextList.of(this)
6370

6471
inline fun Array<out Text>.asText(): Text = TextList.of(this.unmodifiable())

0 commit comments

Comments
 (0)