11package app.simplecloud.plugin.command.shared
22
33import app.simplecloud.controller.api.ControllerApi
4+ import app.simplecloud.controller.shared.group.Group
45import build.buf.gen.simplecloud.controller.v1.ServerStopCause
56import net.kyori.adventure.text.Component
67import net.kyori.adventure.text.minimessage.MiniMessage
@@ -12,7 +13,9 @@ import org.incendo.cloud.parser.standard.StringParser.stringParser
1213import org.incendo.cloud.permission.Permission
1314import org.incendo.cloud.suggestion.Suggestion
1415import org.incendo.cloud.suggestion.SuggestionProvider
16+ import java.util.concurrent.CompletableFuture
1517
18+ // TODO: maybe move this into multiple classes?
1619class 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}
0 commit comments