Skip to content

Commit

Permalink
testing
Browse files Browse the repository at this point in the history
  • Loading branch information
Matt-MX committed May 14, 2024
1 parent 011edcd commit 4d4f8b0
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,11 @@ import org.bukkit.command.CommandSender

class ChainCommandBuilder(val name: String) {
val arguments = arrayListOf<Argument<*>>()
val subcommands = arrayListOf<DeclarativeCommandBuilder<*>>()

inline fun <reified T : CommandSender> build() = DeclarativeCommandBuilder(name, T::class.java).apply {
this.expectedArguments += arguments
this.subcommands += this@ChainCommandBuilder.subcommands
}
}

Expand All @@ -18,6 +20,16 @@ operator fun String.div(argument: Argument<*>) = ChainCommandBuilder(this).apply
arguments.add(argument)
}

operator fun String.div(argument: List<Argument<*>>) = ChainCommandBuilder(this).apply {
arguments.addAll(argument)
}

operator fun String.div(subs: List<DeclarativeCommandBuilder<*>>) = ChainCommandBuilder(this).apply {
subcommands.addAll(subs)
}

operator fun DeclarativeCommandBuilder<*>.plus(other: DeclarativeCommandBuilder<*>) = listOf(this, other)

operator fun ChainCommandBuilder.div(argument: Argument<*>) = this.apply {
arguments.add(argument)
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,16 @@ class InvalidArgContext<T : CommandSender>(
val argument: Argument<*>,
val provided: String?
) : StorageCommandContext<T>(sender, alias, rawArgs) {
var invokeCallbackOnlyOnce = true
private var invoked = false

operator fun <V : Any> Argument<V>.invoke(block: Argument<V>.() -> Unit) {
if (invoked) return

if (argument.name() == name()) {
block.invoke(this)
if (invokeCallbackOnlyOnce)
invoked = true
}
}

Expand Down
40 changes: 25 additions & 15 deletions api/src/main/kotlin/com/mattmx/ktgui/commands/declarative/t.kt
Original file line number Diff line number Diff line change
@@ -1,25 +1,19 @@
package com.mattmx.ktgui.commands.declarative

import com.mattmx.ktgui.commands.declarative.invocation.StorageCommandContext
import com.mattmx.ktgui.commands.usage.CommandUsageOptions
import org.bukkit.command.CommandSender

fun main() {
val player by argument<FakePlayer>("fakePlayer")
val msg by argument<String>("string", true)

val msgcmd =
("msg" / player / msg)<CommandSender> {
runs {
println("[${player()?.name}]: ${msg()}")
}
} missing {
println("Missing argument '${argument.name()}'.")
} invalid {
player {
println("The user '$provided' is not online!")
}
val msgcmd = ("msg" / player / msg)<CommandSender> {
runs {
println("[${player().name}]: ${msg()}")
}
} invalid {
println("Invalid argument '${argument.name()}'.")
}

val splitArgs = { s: String -> s.split(" ") }

Expand All @@ -38,7 +32,7 @@ fun main() {
}

// println(msgcmd.getUsage(myCommandUsage))

val someArg by argument<FakePlayer>("fakePlayer")
val foo = command<CommandSender>("foo") {

subcommand<CommandSender>("bar") {
Expand All @@ -47,10 +41,9 @@ fun main() {
}
}

val someArg by argument<FakePlayer>("fakePlayer")
subcommand<CommandSender>("fizz" / someArg) {
runs {
println("fizzzzz ${someArg()?.name}")
println("fizzzzz ${someArg().name}")
}

invalid {
Expand All @@ -65,5 +58,22 @@ fun main() {
}
}

val foo1 = ("foo" /
(
("fizz" / someArg)<CommandSender> {
runs {
println("fizzzzz ${someArg().name}")
}
} + ("bar")<CommandSender> {
runs {
println("bar")
}
})
)<CommandSender> {
runs {
println("foo!")
}
}

println(foo.getUsage(myCommandUsage))
}

0 comments on commit 4d4f8b0

Please sign in to comment.