Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ allprojects {
maven("https://buf.build/gen/maven")
maven("https://repo.simplecloud.app/snapshots")
maven("https://repo.papermc.io/repository/maven-public/")
maven("https://repo.simplecloud.app/snapshots")
}
}

Expand Down
2 changes: 1 addition & 1 deletion command-shared/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
dependencies {
compileOnly(libs.simplecloud.controller)
api(libs.simplecloud.api)
api(libs.cloud.core)
api(libs.adventure.api)
api(libs.adventure.text.minimessage)
Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package app.simplecloud.plugin.command.shared.commands

import app.simplecloud.api.CloudApi
import app.simplecloud.api.server.ServerQuery
import app.simplecloud.plugin.command.shared.CloudSender
import app.simplecloud.plugin.command.shared.CommandPlugin
import net.kyori.adventure.text.Component
import net.kyori.adventure.text.minimessage.MiniMessage
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder
import org.incendo.cloud.CommandManager
import org.incendo.cloud.context.CommandContext
import org.incendo.cloud.parser.standard.StringParser.stringParser
import org.incendo.cloud.permission.Permission
import org.incendo.cloud.suggestion.Suggestion
import org.incendo.cloud.suggestion.SuggestionProvider

class DeleteGroupCommand<C : CloudSender>(
private val cloudApi: CloudApi,
private val commandPlugin: CommandPlugin
) {

fun register(commandManager: CommandManager<C>) {
commandManager.command(
commandManager.commandBuilder("cloud")
.literal("delete")
.literal("group")
.required("group", stringParser(), SuggestionProvider { _, _ ->
cloudApi.group().allGroups.thenApply { groups ->
groups.map { group -> Suggestion.suggestion(group.name) }
}
})
.handler { context: CommandContext<C> ->
val group = context.get<String>("group")

val message = MiniMessage.miniMessage().deserialize(
commandPlugin.messageConfiguration.groupDeleted,
Placeholder.component("group", Component.text(group))
)

cloudApi.server().getAllServers(ServerQuery.create().filterByServerGroupName(group)).thenAccept { servers ->
servers.forEach { server ->
cloudApi.server().stopServer(server.serverId)
}
}

cloudApi.group().deleteGroup(group)
context.sender().sendMessage(message)
}
.permission(Permission.permission("simplecloud.command.cloud.delete.group"))
.build()
)
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
package app.simplecloud.plugin.command.shared.commands

import app.simplecloud.api.CloudApi
import app.simplecloud.api.server.ServerQuery
import app.simplecloud.plugin.command.shared.CloudSender
import app.simplecloud.plugin.command.shared.CommandPlugin
import net.kyori.adventure.text.Component
import net.kyori.adventure.text.minimessage.MiniMessage
import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder
import org.incendo.cloud.CommandManager
import org.incendo.cloud.context.CommandContext
import org.incendo.cloud.parser.standard.StringParser.stringParser
import org.incendo.cloud.permission.Permission
import org.incendo.cloud.suggestion.Suggestion
import org.incendo.cloud.suggestion.SuggestionProvider

class GroupInfoCommand<C : CloudSender>(
private val cloudApi: CloudApi,
private val commandPlugin: CommandPlugin
) {

fun register(commandManager: CommandManager<C>) {
commandManager.command(
commandManager.commandBuilder("cloud")
.literal("info", "get")
.literal("groups", "group")
.optional("group", stringParser(), SuggestionProvider { _, _ ->
cloudApi.group().allGroups.thenApply { groups ->
groups.map { group -> Suggestion.suggestion(group.name) }
}
})
.handler { context: CommandContext<C> ->
val groupName = context.getOrDefault("group", null as String?)
if (groupName != null) {
cloudApi.group().getGroupByName(groupName).thenAccept { group ->
// TODO: get server by group
cloudApi.server().getAllServers(ServerQuery.create()
.filterByServerGroupName(groupName)).thenAccept { servers ->
context.sender().sendMessage(
MiniMessage.miniMessage().deserialize(
commandPlugin.messageConfiguration.groupInfoTitle,
Placeholder.component("servergroup", Component.text(groupName)),
Placeholder.component("serveramount", Component.text(servers.size))
)
)

context.sender().sendMessage(
MiniMessage.miniMessage().deserialize(
commandPlugin.messageConfiguration.groupInfoType,
Placeholder.component("grouptype", Component.text(group.type.name))
)
)

context.sender().sendMessage(
MiniMessage.miniMessage().deserialize(
commandPlugin.messageConfiguration.groupInfoTemplate,
Placeholder.component(
"grouptemplate",
Component.text(group.properties.get("template-id").toString())
)
)
)

context.sender().sendMessage(
MiniMessage.miniMessage().deserialize(
commandPlugin.messageConfiguration.groupInfoMemory,
Placeholder.component("minmemory", Component.text(group.minMemory)),
Placeholder.component("maxmemory", Component.text(group.maxMemory))
)
)

context.sender().sendMessage(
MiniMessage.miniMessage().deserialize(
commandPlugin.messageConfiguration.groupInfoPlayers,
Placeholder.component("maxplayers", Component.text(group.maxPlayers))
)
)
}
}
} else {
cloudApi.group().allGroups.thenAccept { groups ->
context.sender().sendMessage(
MiniMessage.miniMessage()
.deserialize(commandPlugin.messageConfiguration.groupsListTitle)
)
groups.forEach { group ->
context.sender().sendMessage(
MiniMessage.miniMessage().deserialize(
commandPlugin.messageConfiguration.groupsListEntry,
Placeholder.component("servergroup", Component.text(group.name)),
Placeholder.component(
"onlinecount",
Component.text(
cloudApi.server().getAllServers(ServerQuery.create().filterByServerGroupName(groupName)).get().size.toString()
)
),
Placeholder.component(
"template",
Component.text(group.properties["template-id"].toString())
),
Placeholder.component("type", Component.text(group.type.name)),
Placeholder.component("maxcount", Component.text(group.maxPlayers)),
Placeholder.component("minmemory", Component.text(group.minMemory)),
Placeholder.component("maxmemory", Component.text(group.maxMemory)),
)
)
}
}
}
}
.permission(Permission.permission("simplecloud.command.cloud.get.groups"))
.build()
)
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,164 @@
package app.simplecloud.plugin.command.shared.commands

import app.simplecloud.api.CloudApi
import app.simplecloud.plugin.command.shared.CloudSender
import app.simplecloud.plugin.command.shared.CommandPlugin
import org.incendo.cloud.CommandManager
import org.incendo.cloud.context.CommandContext
import org.incendo.cloud.parser.standard.LongParser.longParser
import org.incendo.cloud.parser.standard.StringParser.stringParser
import org.incendo.cloud.permission.Permission
import org.incendo.cloud.suggestion.Suggestion
import org.incendo.cloud.suggestion.SuggestionProvider
import kotlin.text.get

class ServerInfoCommand<C : CloudSender>(
private val cloudApi: CloudApi,
private val commandPlugin: CommandPlugin
) {

fun register(commandManager: CommandManager<C>) {
commandManager.command(
commandManager.commandBuilder("cloud")
.literal("info", "get")
.literal("servers", "server")
.optional("group", stringParser(), SuggestionProvider { _, _ ->
cloudApi.group().allGroups.thenApply { groups ->
groups.map { group -> Suggestion.suggestion(group.name) }
}
})
.optional("id", longParser(), SuggestionProvider { _, _ ->
cloudApi.server().allServers.thenApply { servers ->
servers.map { server -> Suggestion.suggestion(server.numericalId.toString()) }
}
})
.handler { context: CommandContext<C> ->
val groupName = context.getOrDefault("group", null as String?)
val id = context.getOrDefault("id", null as Long?)

when {
groupName != null && id != null -> {
/* TODO: get server by numerical
controllerApi.getServers().getServerByNumerical(groupName, id).thenAccept { server ->

cloudApi.group().getGroupByName(groupName).thenAccept { group ->
context.sender().sendMessage(
MiniMessage.miniMessage()
.deserialize(
commandPlugin.messageConfiguration.serverInfoTitle,
Placeholder.component("servergroup", Component.text(server.group)),
Placeholder.component(
"serveramount",
Component.text(
controllerApi.getServers().getServersByGroup(groupName)
.get().size.toString()
)
),
)
)
context.sender().sendMessage(
MiniMessage.miniMessage()
.deserialize(
commandPlugin.messageConfiguration.serverInfoType,
Placeholder.component("grouptype", Component.text(server.type.name))
)
)
context.sender().sendMessage(
MiniMessage.miniMessage()
.deserialize(
commandPlugin.messageConfiguration.serverInfoSoftware,
Placeholder.component(
"groupsoftware",
Component.text(group.properties["server-software"].toString())
)
)
)
context.sender().sendMessage(
MiniMessage.miniMessage()
.deserialize(
commandPlugin.messageConfiguration.serverInfoMemory,
Placeholder.component("groupmemory", Component.text(server.maxMemory))
)
)
context.sender().sendMessage(
MiniMessage.miniMessage()
.deserialize(
commandPlugin.messageConfiguration.serverInfoPlayers,
Placeholder.component(
"groupplayers",
Component.text(server.playerCount)
)
)
)
}
}
}

groupName != null -> {
controllerApi.getServers().getServersByGroup(groupName).thenAccept { servers ->
context.sender().sendMessage(
MiniMessage.miniMessage().deserialize(
commandPlugin.messageConfiguration.groupServerListTitle,
Placeholder.component("servergroup", Component.text(groupName))
)
)
servers.forEach { server ->
context.sender().sendMessage(
MiniMessage.miniMessage().deserialize(
commandPlugin.messageConfiguration.groupServerListEntry,
Placeholder.component("servergroup", Component.text(server.group)),
Placeholder.component(
"numericalid",
Component.text(server.numericalId.toString())
),
Placeholder.component(
"onlineplayers",
Component.text(server.playerCount)
),
Placeholder.component("maxplayers", Component.text(server.maxPlayers)),
Placeholder.component("minmemory", Component.text(server.minMemory)),
Placeholder.component("maxmemory", Component.text(server.maxMemory)),
Placeholder.component("state", Component.text(server.state.name)),
)
)
}
}
}

else -> {
controllerApi.getServers().getAllServers().thenAccept { servers ->
context.sender().sendMessage(
MiniMessage.miniMessage().deserialize(
commandPlugin.messageConfiguration.serverListTitle,
)
)
servers.forEach { server ->
context.sender().sendMessage(
MiniMessage.miniMessage().deserialize(
commandPlugin.messageConfiguration.serverListEntry,
Placeholder.component("servergroup", Component.text(server.group)),
Placeholder.component(
"numericalid",
Component.text(server.numericalId.toString())
),
Placeholder.component(
"onlineplayers",
Component.text(server.playerCount)
),
Placeholder.component("maxplayers", Component.text(server.maxPlayers)),
Placeholder.component("minmemory", Component.text(server.minMemory)),
Placeholder.component("maxmemory", Component.text(server.maxMemory)),
Placeholder.component("state", Component.text(server.state.name)),
)
)
}
}
}
} */
}
.permission(Permission.permission("simplecloud.command.cloud.get.servers"))
.build()
)
}
}

Loading