Skip to content

Commit 7a4b838

Browse files
authored
Merge pull request #2 from simplecloudapp/feat/edit-command
feat: edit command
2 parents f762209 + 6a39334 commit 7a4b838

File tree

4 files changed

+210
-2
lines changed

4 files changed

+210
-2
lines changed

build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ allprojects {
1818
repositories {
1919
mavenCentral()
2020
maven("https://buf.build/gen/maven")
21+
maven("https://repo.simplecloud.app/snapshots")
2122
maven("https://repo.papermc.io/repository/maven-public/")
2223
}
2324
}

command-shared/src/main/kotlin/app/simplecloud/plugin/command/shared/CloudCommandHandler.kt

Lines changed: 199 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package app.simplecloud.plugin.command.shared
22

33
import app.simplecloud.controller.api.ControllerApi
4+
import app.simplecloud.controller.shared.group.Group
45
import build.buf.gen.simplecloud.controller.v1.ServerStopCause
56
import net.kyori.adventure.text.Component
67
import net.kyori.adventure.text.minimessage.MiniMessage
@@ -12,7 +13,9 @@ import org.incendo.cloud.parser.standard.StringParser.stringParser
1213
import org.incendo.cloud.permission.Permission
1314
import org.incendo.cloud.suggestion.Suggestion
1415
import org.incendo.cloud.suggestion.SuggestionProvider
16+
import java.util.concurrent.CompletableFuture
1517

18+
// TODO: maybe move this into multiple classes?
1619
class CloudCommandHandler<C : CloudSender>(
1720
private val commandManager: CommandManager<C>,
1821
val commandPlugin: CommandPlugin
@@ -40,6 +43,12 @@ class CloudCommandHandler<C : CloudSender>(
4043
context.sender().sendMessage(
4144
MiniMessage.miniMessage().deserialize(commandPlugin.messageConfiguration.cloudGroupInfoCommand)
4245
)
46+
context.sender().sendMessage(
47+
MiniMessage.miniMessage().deserialize(commandPlugin.messageConfiguration.cloudEditGroupCommand)
48+
)
49+
context.sender().sendMessage(
50+
MiniMessage.miniMessage().deserialize(commandPlugin.messageConfiguration.cloudEditServerCommand)
51+
)
4352
context.sender().sendMessage(
4453
MiniMessage.miniMessage()
4554
.deserialize(commandPlugin.messageConfiguration.cloudDeleteGroupCommand)
@@ -54,6 +63,8 @@ class CloudCommandHandler<C : CloudSender>(
5463
registerServerInfoCommand()
5564
registerGroupInfoCommand()
5665
registerDeleteGroupCommand()
66+
registerEditGroupCommand()
67+
registerEditServerCommand()
5768
}
5869

5970
private fun registerStartCommand() {
@@ -408,4 +419,192 @@ class CloudCommandHandler<C : CloudSender>(
408419
.build()
409420
)
410421
}
422+
423+
private fun registerEditGroupCommand() {
424+
commandManager.command(
425+
commandManager.commandBuilder("cloud")
426+
.literal("edit")
427+
.literal("group")
428+
.required("group", stringParser(), SuggestionProvider { _, _ ->
429+
controllerApi.getGroups().getAllGroups().thenApply { groups ->
430+
groups.map { group -> Suggestion.suggestion(group.name) }
431+
}
432+
})
433+
.required("setting", stringParser(), SuggestionProvider { _, _ ->
434+
CompletableFuture.completedFuture(
435+
listOf(
436+
"max-players",
437+
"max-memory",
438+
"max-online-count",
439+
"min-memory",
440+
"min-online-count",
441+
"properties",
442+
"server-url",
443+
"start-port"
444+
).map { Suggestion.suggestion(it) }
445+
)
446+
})
447+
.required("value", stringParser())
448+
.handler { context: CommandContext<C> ->
449+
val groupName = context.get<String>("group")
450+
val setting = context.get<String>("setting")
451+
val value = context.get<String>("value")
452+
453+
controllerApi.getGroups().getGroupByName(groupName).thenAccept { group ->
454+
val updatedGroup = when (setting) {
455+
"max-players" -> group.copy(
456+
maxPlayers = value.toLongOrNull() ?: return@thenAccept context.sender().sendMessage(
457+
MiniMessage.miniMessage().deserialize(
458+
commandPlugin.messageConfiguration.invalidValue,
459+
Placeholder.component("value", Component.text(value)),
460+
Placeholder.component("key", Component.text(setting))
461+
)
462+
)
463+
)
464+
465+
"max-memory" -> group.copy(
466+
maxMemory = value.toLongOrNull() ?: return@thenAccept context.sender().sendMessage(
467+
MiniMessage.miniMessage().deserialize(
468+
commandPlugin.messageConfiguration.invalidValue,
469+
Placeholder.component("value", Component.text(value)),
470+
Placeholder.component("key", Component.text(setting))
471+
)
472+
)
473+
)
474+
475+
"min-memory" -> group.copy(
476+
minMemory = value.toLongOrNull() ?: return@thenAccept context.sender().sendMessage(
477+
MiniMessage.miniMessage().deserialize(
478+
commandPlugin.messageConfiguration.invalidValue,
479+
Placeholder.component("value", Component.text(value)),
480+
Placeholder.component("key", Component.text(setting))
481+
)
482+
)
483+
)
484+
485+
"max-online-count" -> group.copy(
486+
maxOnlineCount = value.toLongOrNull() ?: return@thenAccept context.sender().sendMessage(
487+
MiniMessage.miniMessage().deserialize(
488+
commandPlugin.messageConfiguration.invalidValue,
489+
Placeholder.component("value", Component.text(value)),
490+
Placeholder.component("key", Component.text(setting))
491+
)
492+
)
493+
)
494+
495+
"min-online-count" -> group.copy(
496+
minOnlineCount = value.toLongOrNull() ?: return@thenAccept context.sender().sendMessage(
497+
MiniMessage.miniMessage().deserialize(
498+
commandPlugin.messageConfiguration.invalidValue,
499+
Placeholder.component("value", Component.text(value)),
500+
Placeholder.component("key", Component.text(setting))
501+
)
502+
)
503+
)
504+
505+
"start-port" -> group.copy(
506+
startPort = value.toLongOrNull() ?: return@thenAccept context.sender().sendMessage(
507+
MiniMessage.miniMessage().deserialize(
508+
commandPlugin.messageConfiguration.invalidValue,
509+
Placeholder.component("value", Component.text(value)),
510+
Placeholder.component("key", Component.text(setting))
511+
)
512+
)
513+
)
514+
515+
"server-url" -> group.copy(properties = group.properties + mapOf("server-url" to value))
516+
"properties" -> group.copy(properties = group.properties + mapOf("custom-property" to value))
517+
else -> {
518+
context.sender().sendMessage(
519+
MiniMessage.miniMessage().deserialize(
520+
commandPlugin.messageConfiguration.invalidSetting,
521+
Placeholder.component("key", Component.text(setting))
522+
)
523+
)
524+
return@thenAccept
525+
}
526+
}
527+
528+
controllerApi.getGroups().updateGroup(updatedGroup).thenAccept { group ->
529+
context.sender().sendMessage(
530+
MiniMessage.miniMessage().deserialize(
531+
commandPlugin.messageConfiguration.groupUpdated,
532+
Placeholder.component("group", Component.text(group.name))
533+
)
534+
)
535+
}
536+
}
537+
538+
539+
}
540+
.permission(Permission.permission("simplecloud.command.cloud.edit.group"))
541+
.build()
542+
)
543+
}
544+
545+
private fun registerEditServerCommand() {
546+
commandManager.command(
547+
commandManager.commandBuilder("cloud")
548+
.literal("edit")
549+
.literal("server")
550+
.required("group", stringParser(), SuggestionProvider { _, _ ->
551+
controllerApi.getGroups().getAllGroups().thenApply { groups ->
552+
groups.map { group -> Suggestion.suggestion(group.name) }
553+
}
554+
})
555+
.required("id", longParser(), SuggestionProvider { _, _ ->
556+
controllerApi.getServers().getAllServers().thenApply { servers ->
557+
servers.map { server -> Suggestion.suggestion(server.numericalId.toString()) }
558+
}
559+
})
560+
.required("setting", stringParser(), SuggestionProvider { _, _ ->
561+
CompletableFuture.completedFuture(
562+
listOf("max-players").map { Suggestion.suggestion(it) }
563+
)
564+
})
565+
.required("value", stringParser())
566+
.handler { context: CommandContext<C> ->
567+
val groupName = context.get<String>("group")
568+
val serverId = context.get<Long>("id")
569+
val setting = context.get<String>("setting")
570+
val value = context.get<String>("value")
571+
572+
controllerApi.getServers().getServerByNumerical(groupName, serverId).thenAccept { server ->
573+
val updatedServer = when (setting) {
574+
"max-players" -> server.copy(
575+
maxPlayers = value.toLongOrNull() ?: return@thenAccept context.sender().sendMessage(
576+
MiniMessage.miniMessage().deserialize(
577+
commandPlugin.messageConfiguration.invalidValue,
578+
Placeholder.component("value", Component.text(value)),
579+
Placeholder.component("key", Component.text(setting))
580+
)
581+
)
582+
)
583+
584+
else -> {
585+
context.sender().sendMessage(
586+
MiniMessage.miniMessage().deserialize(
587+
commandPlugin.messageConfiguration.invalidSetting,
588+
Placeholder.component("key", Component.text(setting))
589+
)
590+
)
591+
return@thenAccept
592+
}
593+
}
594+
595+
controllerApi.getServers().updateServer(updatedServer).thenAccept { server ->
596+
context.sender().sendMessage(
597+
MiniMessage.miniMessage().deserialize(
598+
commandPlugin.messageConfiguration.serverUpdated,
599+
Placeholder.component("group", Component.text(server.group)),
600+
Placeholder.component("numericalid", Component.text(server.numericalId.toString()))
601+
)
602+
)
603+
}
604+
}
605+
}
606+
.permission(Permission.permission("simplecloud.command.cloud.edit.server"))
607+
.build()
608+
)
609+
}
411610
}

command-shared/src/main/kotlin/app/simplecloud/plugin/command/shared/config/MessageConfig.kt

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ data class MessageConfig(
1919
val cloudServerInfoCommand: String = " <color:#a3a3a3>/cloud info servers [serverGroup] [Numerical ID]",
2020
val cloudGroupInfoCommand: String = " <color:#a3a3a3>/cloud info groups [groupName] [Numerical ID]",
2121
val cloudDeleteGroupCommand: String = " <color:#a3a3a3>/cloud delete group <serverGroup>",
22+
val cloudEditGroupCommand: String = " <color:#a3a3a3>/cloud edit group <serverGroup> <key> <value>",
23+
val cloudEditServerCommand: String = " <color:#a3a3a3>/cloud edit server <serverGroup> <Numerical ID> <key> <value>",
2224

2325
val serverInfoTitle: String = "<color:#38bdf8><bold>⚡</bold></color> <color:#ffffff>Information of server <servergroup> <color:#a3e635>● <serveramount> Online",
2426
val serverInfoType: String = " <color:#a3a3a3>Type: <color:#38bdf8><grouptype>",
@@ -39,6 +41,12 @@ data class MessageConfig(
3941
val groupServerListEntry: String = " <color:#a3a3a3><servergroup> <numericalid> <color:#737373>(<onlineplayers>/<maxplayers> Players, <minmemory>/<maxmemory>MB, <state>)",
4042

4143
val serverListTitle: String = "<color:#38bdf8><bold>⚡</bold></color> <color:#ffffff>List of every running server",
42-
val serverListEntry: String = " <color:#a3a3a3><servergroup> <numericalid> <color:#737373>(<onlineplayers>/<maxplayers> Players, <minmemory>/<maxmemory>MB, <state>)"
44+
val serverListEntry: String = " <color:#a3a3a3><servergroup> <numericalid> <color:#737373>(<onlineplayers>/<maxplayers> Players, <minmemory>/<maxmemory>MB, <state>)",
4345

46+
val invalidValue: String = "<color:#38bdf8><bold>⚡</bold></color> <color:#dc2626>Invalid value <color:#a3a3a3><value> <color:#dc2626>for <color:#a3a3a3><key>.",
47+
val invalidSetting: String = "<color:#38bdf8><bold>⚡</bold></color> <color:#dc2626>Invalid setting <color:#a3a3a3><key>.",
48+
49+
val groupUpdated: String = "<color:#38bdf8><bold>⚡</bold></color> <color:#ffffff>Group <group> was <color:#dc2626>updated.",
50+
51+
val serverUpdated: String = "<color:#38bdf8><bold>⚡</bold></color> <color:#ffffff>Server <group> <numericalid> was <color:#dc2626>updated."
4452
)

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
kotlin = "2.0.20"
33
shadow = "8.3.3"
44
kapt = "2.0.20"
5-
simplecloud-controller = "0.0.30-EXPERIMENTAL"
5+
simplecloud-controller = "0.0.30-SNAPSHOT.2660ec8"
66
cloud-core = "2.0.0"
77
cloud-velocity = "2.0.0-beta.10"
88
cloud-bungeecord = "2.0.0-beta.10"

0 commit comments

Comments
 (0)