@@ -27,11 +27,13 @@ import net.ccbluex.liquidbounce.features.command.Command
2727import net.ccbluex.liquidbounce.features.command.builder.CommandBuilder
2828import net.ccbluex.liquidbounce.features.command.builder.ParameterBuilder
2929import net.ccbluex.liquidbounce.features.command.builder.modules
30+ import net.ccbluex.liquidbounce.features.command.preset.pagedQuery
3031import net.ccbluex.liquidbounce.features.module.ClientModule
32+ import net.ccbluex.liquidbounce.render.engine.type.Color4b
3133import net.ccbluex.liquidbounce.utils.client.*
3234import net.minecraft.text.ClickEvent
3335import net.minecraft.text.HoverEvent
34- import net.minecraft.text.Text
36+ import net.minecraft.text.Style
3537import net.minecraft.util.Formatting
3638import net.minecraft.util.Util
3739import 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" )
0 commit comments