Skip to content

Commit f094479

Browse files
committed
Update command dsl
bump ver
1 parent 4395d54 commit f094479

10 files changed

Lines changed: 89 additions & 67 deletions

File tree

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,24 @@
11
package me.zodd
22

3+
import me.zodd.dsl.command.CommandManager
34
import org.apache.logging.log4j.Logger
45
import org.spongepowered.api.Server
56
import org.spongepowered.api.Sponge
6-
import org.spongepowered.api.command.manager.CommandManager
77
import org.spongepowered.api.event.EventManager
88
import org.spongepowered.api.plugin.PluginManager
99
import org.spongepowered.api.scheduler.Scheduler
1010
import org.spongepowered.api.service.ServiceProvider
1111
import org.spongepowered.plugin.PluginContainer
12+
import org.spongepowered.api.command.manager.CommandManager as SpongeCommandManager
1213

1314
inline val SpongeServer: Server get() = Sponge.server()
1415
inline val SpongePluginManager: PluginManager get() = Sponge.pluginManager()
15-
inline val SpongeCommandManager: CommandManager get() = Sponge.server().commandManager()
16+
inline val SpongeCommandManager: SpongeCommandManager get() = Sponge.server().commandManager()
1617
inline val SpongeEventManager: EventManager get() = Sponge.eventManager()
1718
inline val SpongeServerServiceManager: ServiceProvider.ServerScoped get() = Sponge.server().serviceProvider()
1819
inline val SpongeGameServiceManager: ServiceProvider.GameScoped get() = Sponge.serviceProvider()
1920
inline val Scheduler: Scheduler get() = Sponge.server().scheduler()
2021
inline val SpongeAsyncScheduler: Scheduler get() = Sponge.asyncScheduler()
2122
inline val Container: PluginContainer get() = API.container
2223
inline val Logger: Logger get() = API.logger
23-
inline val ScriptCommandManager: me.zodd.CommandManager get() = CommandManager()
24+
inline val ScriptCommandManager: CommandManager get() = CommandManager

api/src/main/kotlin/me/zodd/RegistrationHelper.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package me.zodd
22

33
import io.leangen.geantyref.TypeToken
4+
import me.zodd.dsl.command.DslCommand
45
import org.spongepowered.api.Sponge
56
import org.spongepowered.api.command.Command
67
import org.spongepowered.api.command.Command.Parameterized
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package me.zodd.dsl.command
2+
3+
interface CommandArgument : CommandParameter, CommandFlag
Lines changed: 5 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,17 @@
1-
package me.zodd
1+
package me.zodd.dsl.command
22

33
import me.zodd.annotations.ScriptDsl
44
import net.kyori.adventure.text.Component
55
import org.spongepowered.api.command.Command
66
import org.spongepowered.api.command.CommandCause
77
import org.spongepowered.api.command.CommandResult
8-
import org.spongepowered.api.command.parameter.CommandContext
98
import org.spongepowered.api.command.parameter.Parameter
109
import org.spongepowered.api.command.parameter.managed.Flag
10+
import org.spongepowered.api.command.parameter.CommandContext as SpongeContext
1111
import java.util.function.Predicate
1212

1313
@ScriptDsl
14-
class CommandManager : DslArgument, DslContext {
15-
16-
operator fun invoke(initializer: CommandManager.() -> Unit): List<DslCommand> {
17-
this.initializer()
18-
RegistrationHelper.registerCommand(CommandBuilder.builtCommands)
19-
return CommandBuilder.builtCommands
20-
}
21-
22-
fun command(name: String, initializer: CommandBuilder.(name: String) -> Unit): DslCommand {
23-
val builder = CommandBuilder()
24-
builder.aliases += name
25-
builder.initializer(name)
26-
return builder.buildCommand()
27-
}
28-
}
29-
30-
@ScriptDsl
31-
class CommandBuilder : DslArgument, DslContext {
14+
class CommandBuilder : CommandArgument, CommandContext {
3215

3316
companion object {
3417
internal val builtCommands = mutableListOf<DslCommand>()
@@ -40,7 +23,7 @@ class CommandBuilder : DslArgument, DslContext {
4023
var terminal: Boolean = false
4124
var executionRequirement: Predicate<CommandCause> = Predicate { true }
4225

43-
private var commandExecutor: CommandContext.() -> CommandResult =
26+
private var commandExecutor: SpongeContext.() -> CommandResult =
4427
{ error(Component.text("Command executor not registered")) }
4528

4629
private var parameters = mutableListOf<Parameter>()
@@ -64,7 +47,7 @@ class CommandBuilder : DslArgument, DslContext {
6447
return command
6548
}
6649

67-
fun executes(exec: CommandContext.() -> CommandResult) {
50+
fun executes(exec: SpongeContext.() -> CommandResult) {
6851
commandExecutor = exec
6952
}
7053

@@ -88,45 +71,4 @@ class CommandBuilder : DslArgument, DslContext {
8871

8972
return command
9073
}
91-
}
92-
93-
94-
sealed interface DslContext {
95-
infix fun <T> CommandContext.requireOne(param: Parameter.Value<T>): T = this.requireOne(param)
96-
97-
fun CommandContext.success(): CommandResult = CommandResult.success()
98-
99-
infix fun CommandContext.error(errorMessage: Component): CommandResult = CommandResult.error(errorMessage)
100-
101-
infix fun CommandContext.hasFlag(flag: Flag) = this.hasFlag(flag)
102-
}
103-
104-
sealed interface DslFlag {
105-
infix fun String.buildFlag(permission: String): Flag {
106-
return asFlag(permission).build()
107-
}
108-
109-
infix fun String.asFlag(permission: String): Flag.Builder {
110-
return Flag.builder().aliases(this.split(",")).setPermission(permission)
111-
}
112-
}
113-
114-
sealed interface DslParameter {
115-
infix fun <T> String.withType(type: Parameter.Value.Builder<T>): Parameter.Value<T> {
116-
return type.key(this).build()
117-
}
118-
119-
infix fun <T> Parameter.Value.Builder<T>.keyedWith(key: String): Parameter.Value<T> {
120-
return this.key(key).build()
121-
}
122-
}
123-
124-
interface DslArgument : DslParameter, DslFlag
125-
126-
data class DslCommand(
127-
val aliases: List<String>,
128-
val command: Command.Parameterized,
129-
) {
130-
val baseAlias = aliases[0]
131-
val remainingAliases = aliases.filterNot { it.contentEquals(baseAlias) }.toTypedArray()
13274
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package me.zodd.dsl.command
2+
3+
import net.kyori.adventure.text.Component
4+
import org.spongepowered.api.command.CommandResult
5+
import org.spongepowered.api.command.parameter.Parameter
6+
import org.spongepowered.api.command.parameter.managed.Flag
7+
import org.spongepowered.api.command.parameter.CommandContext as SpongeContext
8+
9+
sealed interface CommandContext {
10+
infix fun <T> SpongeContext.requireOne(param: Parameter.Value<T>): T = this.requireOne(param)
11+
12+
fun SpongeContext.success(): CommandResult = CommandResult.success()
13+
14+
infix fun SpongeContext.error(errorMessage: Component): CommandResult = CommandResult.error(errorMessage)
15+
16+
infix fun SpongeContext.hasFlag(flag: Flag) = this.hasFlag(flag)
17+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package me.zodd.dsl.command
2+
3+
import org.spongepowered.api.command.parameter.managed.Flag
4+
5+
sealed interface CommandFlag {
6+
infix fun String.buildFlag(permission: String): Flag {
7+
return asFlag(permission).build()
8+
}
9+
10+
infix fun String.asFlag(permission: String): Flag.Builder {
11+
return Flag.builder().aliases(this.split(",")).setPermission(permission)
12+
}
13+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package me.zodd.dsl.command
2+
3+
import me.zodd.RegistrationHelper
4+
import me.zodd.annotations.ScriptDsl
5+
6+
@ScriptDsl
7+
object CommandManager : CommandArgument, CommandContext {
8+
9+
operator fun invoke(initializer: CommandManager.() -> Unit): List<DslCommand> {
10+
this.initializer()
11+
RegistrationHelper.registerCommand(CommandBuilder.builtCommands)
12+
return CommandBuilder.builtCommands
13+
}
14+
15+
fun command(name: String, initializer: CommandBuilder.(name: String) -> Unit): DslCommand {
16+
val builder = CommandBuilder()
17+
builder.aliases += name
18+
builder.initializer(name)
19+
return builder.buildCommand()
20+
}
21+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package me.zodd.dsl.command
2+
3+
import org.spongepowered.api.command.parameter.Parameter
4+
5+
sealed interface CommandParameter {
6+
infix fun <T> String.withType(type: Parameter.Value.Builder<T>): Parameter.Value<T> {
7+
return type.key(this).build()
8+
}
9+
10+
infix fun <T> Parameter.Value.Builder<T>.keyedWith(key: String): Parameter.Value<T> {
11+
return this.key(key).build()
12+
}
13+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package me.zodd.dsl.command
2+
3+
import org.spongepowered.api.command.Command
4+
5+
data class DslCommand(
6+
val aliases: List<String>,
7+
val command: Command.Parameterized,
8+
) {
9+
val baseAlias = aliases[0]
10+
val remainingAliases = aliases.filterNot { it.contentEquals(baseAlias) }.toTypedArray()
11+
}

buildSrc/src/main/kotlin/common.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ plugins {
33
}
44

55
group = "me.zodd"
6-
version = "0.1.0"
6+
version = "0.1.1"
77

88
repositories {
99
mavenCentral()

0 commit comments

Comments
 (0)