Skip to content

Commit 51882e9

Browse files
committed
Config command and keybind fix
1 parent b673c29 commit 51882e9

File tree

10 files changed

+127
-24
lines changed

10 files changed

+127
-24
lines changed

common/src/main/kotlin/com/lambda/brigadier/ArgumentConstructor.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -195,8 +195,6 @@ fun <S, AT, A : ArgumentType<AT>> argument(
195195
* within an [execute] block to obtain an [ArgumentReader] for this argument.
196196
*
197197
* @see CommandArgument.Required
198-
*
199-
* @author Cypher121
200198
*/
201199
@BrigadierDsl
202200
inline fun <S, B : ArgumentBuilder<S, *>, D : ArgumentDescriptor<*>> ArgumentBuilder<S, *>.required(

common/src/main/kotlin/com/lambda/brigadier/CommandExecution.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package com.lambda.brigadier
1818

19+
import com.lambda.util.Communication
1920
import com.mojang.brigadier.Command
2021
import com.mojang.brigadier.builder.ArgumentBuilder
2122
import com.mojang.brigadier.context.CommandContext
@@ -50,6 +51,10 @@ sealed class CommandResult {
5051
return Success(result)
5152
}
5253

54+
fun failure(message: String): Failure {
55+
return Failure(Communication.LogLevel.ERROR.text(message))
56+
}
57+
5358
/**
5459
* Creates a [CommandResult.Failure] with the given error [message].
5560
*/

common/src/main/kotlin/com/lambda/brigadier/argument/StringArguments.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ package com.lambda.brigadier.argument
2525
import com.lambda.brigadier.BrigadierDsl
2626
import com.lambda.brigadier.DefaultArgumentConstructor
2727
import com.lambda.brigadier.DefaultArgumentReader
28+
import com.lambda.brigadier.argument
2829
import com.mojang.brigadier.arguments.StringArgumentType
2930

3031
/**
@@ -46,7 +47,7 @@ fun DefaultArgumentReader<StringArgumentType>.value(): String {
4647
fun <S> string(
4748
name: String,
4849
): DefaultArgumentConstructor<S, StringArgumentType> {
49-
return com.lambda.brigadier.argument(name, StringArgumentType.string())
50+
return argument(name, StringArgumentType.string())
5051
}
5152

5253
/**
@@ -60,7 +61,7 @@ fun <S> string(
6061
fun <S> greedyString(
6162
name: String,
6263
): DefaultArgumentConstructor<S, StringArgumentType> {
63-
return com.lambda.brigadier.argument(name, StringArgumentType.greedyString())
64+
return argument(name, StringArgumentType.greedyString())
6465
}
6566

6667
/**
@@ -70,5 +71,5 @@ fun <S> greedyString(
7071
fun <S> word(
7172
name: String,
7273
): DefaultArgumentConstructor<S, StringArgumentType> {
73-
return com.lambda.brigadier.argument(name, StringArgumentType.word())
74+
return argument(name, StringArgumentType.word())
7475
}

common/src/main/kotlin/com/lambda/command/CommandManager.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.lambda.command
22

3-
import com.lambda.LambdaConfig
3+
import com.lambda.config.configurations.LambdaConfig
44
import com.lambda.Loadable
55
import com.lambda.brigadier.CommandException
66
import com.lambda.brigadier.register
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package com.lambda.command.commands
2+
3+
import com.lambda.brigadier.CommandResult
4+
import com.lambda.brigadier.CommandResult.Companion.failure
5+
import com.lambda.brigadier.CommandResult.Companion.success
6+
import com.lambda.brigadier.argument.string
7+
import com.lambda.brigadier.argument.value
8+
import com.lambda.brigadier.argument.word
9+
import com.lambda.brigadier.executeWithResult
10+
import com.lambda.brigadier.optional
11+
import com.lambda.brigadier.required
12+
import com.lambda.command.CommandManager.register
13+
import com.lambda.command.LambdaCommand
14+
import com.lambda.config.Configuration
15+
16+
object ConfigCommand : LambdaCommand() {
17+
override val name = "config"
18+
19+
init {
20+
register(name) {
21+
required(word("action")) { action ->
22+
val actions = listOf("save", "load")
23+
24+
suggests { _, builder ->
25+
actions.forEach {
26+
builder.suggest(it)
27+
}
28+
builder.buildFuture()
29+
}
30+
31+
optional(string("config name")) { configName ->
32+
suggests { _, builder ->
33+
Configuration.configurations.map {
34+
it.configName
35+
}.forEach {
36+
builder.suggest(it)
37+
}
38+
builder.buildFuture()
39+
}
40+
41+
executeWithResult {
42+
val action = action().value()
43+
if (action !in actions) {
44+
return@executeWithResult failure("Invalid action $action. Did you mean ${actions.joinToString()}?")
45+
}
46+
47+
if (configName == null) {
48+
Configuration.configurations.forEach {
49+
when (action) {
50+
"save" -> it.trySave()
51+
else -> it.tryLoad()
52+
}
53+
}
54+
} else {
55+
val specificConfig = configName().value()
56+
57+
Configuration.configurations.find {
58+
it.configName == specificConfig
59+
}?.let {
60+
when (action) {
61+
"save" -> it.trySave()
62+
else -> it.tryLoad()
63+
}
64+
} ?: return@executeWithResult failure("No configuration found with name $specificConfig")
65+
}
66+
67+
success()
68+
}
69+
}
70+
}
71+
}
72+
}
73+
}

common/src/main/kotlin/com/lambda/command/commands/ModuleCommand.kt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ import com.lambda.command.CommandManager.register
1414
import com.lambda.command.LambdaCommand
1515
import com.lambda.module.ModuleRegistry
1616
import com.lambda.threading.runSafe
17-
import com.lambda.util.Communication
1817
import com.lambda.util.Communication.info
1918
import com.lambda.util.Communication.warn
2019
import com.lambda.util.StringUtils
@@ -98,9 +97,7 @@ object ModuleCommand : LambdaCommand() {
9897
}
9998
})
10099
success()
101-
} ?: failure(Communication.LogLevel.ERROR.text(
102-
"Failed to ${if (module.isEnabled) "enable" else "disable"} module $name")
103-
)
100+
} ?: failure("Failed to ${if (module.isEnabled) "enable" else "disable"} module $name")
104101
}
105102
}
106103
}

common/src/main/kotlin/com/lambda/config/Configuration.kt

Lines changed: 37 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ import com.lambda.Lambda.gson
88
import com.lambda.event.EventFlow.lambdaScope
99
import com.lambda.event.events.ClientEvent
1010
import com.lambda.event.listener.UnsafeListener.Companion.unsafeListener
11-
import com.lambda.module.ModuleConfig
11+
import com.lambda.util.Communication.info
12+
import com.lambda.util.Communication.logError
1213
import com.lambda.util.StringUtils.capitalize
1314
import kotlinx.coroutines.Dispatchers
1415
import kotlinx.coroutines.launch
@@ -41,6 +42,8 @@ abstract class Configuration : Jsonable {
4142
unsafeListener<ClientEvent.Startup> { tryLoad() }
4243

4344
unsafeListener<ClientEvent.Shutdown> { trySave() }
45+
46+
configurations.add(this)
4447
}
4548

4649
override fun toJson() =
@@ -77,25 +80,50 @@ abstract class Configuration : Jsonable {
7780
loadFromJson(JsonParser.parseReader(file.reader()).asJsonObject)
7881
}
7982

80-
private fun tryLoad() {
83+
fun tryLoad() {
8184
lambdaScope.launch(Dispatchers.IO) {
8285
runCatching { load(primary) }
83-
.onSuccess { LOG.info("[IO] Config Manager: ${configName.capitalize()} config loaded.") }
86+
.onSuccess {
87+
val message = "${configName.capitalize()} config loaded."
88+
LOG.info(message)
89+
this@Configuration.info(message)
90+
}
8491
.onFailure {
85-
LOG.error("Failed to load ${configName.capitalize()} config, loading backup")
92+
val message = "Failed to load ${configName.capitalize()} config, loading backup"
93+
LOG.error(message)
94+
this@Configuration.logError(message)
8695
runCatching { load(backup) }
87-
.onSuccess { LOG.info("${configName.capitalize()} config loaded from backup") }
88-
.onFailure { LOG.error("Failed to load ${configName.capitalize()} config from backup, unrecoverable error", it) }
96+
.onSuccess {
97+
val message = "${configName.capitalize()} config loaded from backup"
98+
LOG.info(message)
99+
this@Configuration.info(message)
100+
}
101+
.onFailure {
102+
val message = "Failed to load ${configName.capitalize()} config from backup, unrecoverable error"
103+
LOG.error(message, it)
104+
this@Configuration.logError(message)
105+
}
89106
}
90107
}
91108
}
92109

93-
private fun trySave() {
110+
fun trySave() {
94111
lambdaScope.launch(Dispatchers.IO) {
95112
runCatching { save() }
96-
.onSuccess { LOG.info("[IO] ${configName.capitalize()} config saved") }
97-
.onFailure { LOG.error("Failed to save ${configName.capitalize()} config", it) }
113+
.onSuccess {
114+
val message = "Saved ${configName.capitalize()} config."
115+
LOG.info(message)
116+
this@Configuration.info(message)
117+
}
118+
.onFailure {
119+
val message = "Failed to save ${configName.capitalize()} config"
120+
LOG.error(message, it)
121+
this@Configuration.logError(message)
122+
}
98123
}
99124
}
100125

126+
companion object {
127+
val configurations = mutableSetOf<Configuration>()
128+
}
101129
}

common/src/main/kotlin/com/lambda/LambdaConfig.kt renamed to common/src/main/kotlin/com/lambda/config/configurations/LambdaConfig.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.lambda
1+
package com.lambda.config.configurations
22

33
import com.lambda.config.Configuration
44
import com.lambda.util.FolderRegister

common/src/main/kotlin/com/lambda/module/ModuleConfig.kt renamed to common/src/main/kotlin/com/lambda/config/configurations/ModuleConfig.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
package com.lambda.module
1+
package com.lambda.config.configurations
22

33
import com.lambda.config.Configuration
4-
import com.lambda.module.ModuleConfig.configName
5-
import com.lambda.module.ModuleConfig.primary
4+
import com.lambda.config.configurations.ModuleConfig.configName
5+
import com.lambda.config.configurations.ModuleConfig.primary
66
import com.lambda.util.FolderRegister
77
import java.io.File
88

common/src/main/kotlin/com/lambda/module/Module.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.lambda.module
33
import com.lambda.config.AbstractSetting
44
import com.lambda.config.Configurable
55
import com.lambda.config.Configuration
6+
import com.lambda.config.configurations.ModuleConfig
67
import com.lambda.config.settings.comparable.BooleanSetting
78
import com.lambda.config.settings.numeric.DoubleSetting
89
import com.lambda.event.Muteable
@@ -104,7 +105,7 @@ abstract class Module(
104105

105106
init {
106107
listener<KeyPressEvent>(alwaysListen = true) { event ->
107-
if (event.key == keybind.key) {
108+
if (event.key == keybind.key && mc.currentScreen == null) {
108109
toggle()
109110
}
110111
}

0 commit comments

Comments
 (0)