Skip to content

Commit d62d138

Browse files
committed
Tab complete arguments \o/
1 parent 0bbd601 commit d62d138

File tree

6 files changed

+53
-17
lines changed

6 files changed

+53
-17
lines changed

core/src/main/kotlin/br/com/devsrsouza/kotlinbukkitapi/dsl/command/CommandDSL.kt

+7
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,13 @@ fun <T : CommandSender> Executor<T>.argumentExecutorBuilder(
6060
whenErrorDefault(emptyArray()) { args.sliceArray(posIndex..args.size) }
6161
)
6262

63+
inline fun TabCompleter.argumentCompleteBuilder(index: Int, block: (String) -> List<String>): List<String> {
64+
if(args.size == index+1) {
65+
return block(args.getOrNull(index) ?: "")
66+
}
67+
return emptyList()
68+
}
69+
6370
inline fun <T> Executor<*>.optional(block: () -> T): T? {
6471
try {
6572
return block()

core/src/main/kotlin/br/com/devsrsouza/kotlinbukkitapi/dsl/command/arguments/Item.kt

+9-4
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
package br.com.devsrsouza.kotlinbukkitapi.dsl.command.arguments
22

3-
import br.com.devsrsouza.kotlinbukkitapi.dsl.command.CommandException
4-
import br.com.devsrsouza.kotlinbukkitapi.dsl.command.Executor
5-
import br.com.devsrsouza.kotlinbukkitapi.dsl.command.argumentExecutorBuilder
6-
import br.com.devsrsouza.kotlinbukkitapi.dsl.command.exception
3+
import br.com.devsrsouza.kotlinbukkitapi.dsl.command.*
74
import br.com.devsrsouza.kotlinbukkitapi.dsl.item.asMaterialData
85
import br.com.devsrsouza.kotlinbukkitapi.extensions.text.color
96
import net.md_5.bungee.api.chat.BaseComponent
@@ -44,6 +41,14 @@ inline fun <T : CommandSender> Executor<T>.argumentMaterial(
4441
argumentExecutorBuilder(index + 1, material.name).block(material)
4542
}
4643

44+
fun TabCompleter.material(
45+
index: Int
46+
): List<String> = argumentCompleteBuilder(index) { arg ->
47+
Material.values().mapNotNull {
48+
if(it.name.startsWith(arg, true)) it.name.toLowerCase() else null
49+
}
50+
}
51+
4752
// MATERIAL DATA
4853

4954
val DATA_FORMAT = "The item data need be in number.".color(ChatColor.RED)

core/src/main/kotlin/br/com/devsrsouza/kotlinbukkitapi/dsl/command/arguments/Player.kt

+18-4
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
package br.com.devsrsouza.kotlinbukkitapi.dsl.command.arguments
22

3-
import br.com.devsrsouza.kotlinbukkitapi.dsl.command.CommandException
4-
import br.com.devsrsouza.kotlinbukkitapi.dsl.command.Executor
5-
import br.com.devsrsouza.kotlinbukkitapi.dsl.command.argumentExecutorBuilder
6-
import br.com.devsrsouza.kotlinbukkitapi.dsl.command.exception
3+
import br.com.devsrsouza.kotlinbukkitapi.dsl.command.*
4+
import br.com.devsrsouza.kotlinbukkitapi.extensions.bukkit.onlinePlayers
75
import br.com.devsrsouza.kotlinbukkitapi.extensions.text.color
86
import br.com.devsrsouza.kotlinbukkitapi.utils.whenErrorNull
97
import net.md_5.bungee.api.chat.BaseComponent
@@ -38,6 +36,14 @@ inline fun <T : CommandSender> Executor<T>.argumentPlayer(
3836
argumentExecutorBuilder(index + 1, player.name).block(player)
3937
}
4038

39+
fun TabCompleter.player(
40+
index: Int
41+
): List<String> = argumentCompleteBuilder(index) { arg ->
42+
onlinePlayers().mapNotNull {
43+
if(it.name.startsWith(arg, true)) it.name else null
44+
}
45+
}
46+
4147
// OFFLINE PLAYER
4248

4349
fun Executor<*>.offlinePlayer(
@@ -82,4 +88,12 @@ inline fun <T : CommandSender> Executor<T>.argumentGameMode(
8288
val gameMode = gameMode(index, argMissing, notFound)
8389

8490
argumentExecutorBuilder(index + 1, gameMode.name).block(gameMode)
91+
}
92+
93+
fun TabCompleter.gameMode(
94+
index: Int
95+
): List<String> = argumentCompleteBuilder(index) { arg ->
96+
GameMode.values().mapNotNull {
97+
if(it.name.startsWith(arg, true)) it.name.toLowerCase() else null
98+
}
8599
}

core/src/main/kotlin/br/com/devsrsouza/kotlinbukkitapi/dsl/command/arguments/Primitives.kt

+9-4
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
package br.com.devsrsouza.kotlinbukkitapi.dsl.command.arguments
22

3-
import br.com.devsrsouza.kotlinbukkitapi.dsl.command.CommandException
4-
import br.com.devsrsouza.kotlinbukkitapi.dsl.command.Executor
5-
import br.com.devsrsouza.kotlinbukkitapi.dsl.command.argumentExecutorBuilder
6-
import br.com.devsrsouza.kotlinbukkitapi.dsl.command.exception
3+
import br.com.devsrsouza.kotlinbukkitapi.dsl.command.*
74
import br.com.devsrsouza.kotlinbukkitapi.extensions.text.color
85
import br.com.devsrsouza.kotlinbukkitapi.utils.FALSE_CASES
96
import br.com.devsrsouza.kotlinbukkitapi.utils.TRUE_CASES
@@ -54,6 +51,14 @@ inline fun <T : CommandSender> Executor<T>.booleanArgument(
5451
argumentExecutorBuilder(index + 1, "$boolean").block(boolean)
5552
}
5653

54+
fun TabCompleter.boolean(
55+
index: Int,
56+
trueCases: Array<String> = TRUE_CASES,
57+
falseCases: Array<String> = FALSE_CASES
58+
): List<String> = argumentCompleteBuilder(index) { arg ->
59+
listOf(*trueCases, *falseCases).filter { it.startsWith(arg, true) }
60+
}
61+
5762
val MISSING_NUMBER_PARAMETER = "Missing a number argument.".color(ChatColor.RED)
5863
val NUMBER_FORMAT = "The parameter needs only numbers.".color(ChatColor.RED)
5964

core/src/main/kotlin/br/com/devsrsouza/kotlinbukkitapi/dsl/command/arguments/World.kt

+9-4
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
package br.com.devsrsouza.kotlinbukkitapi.dsl.command.arguments
22

3-
import br.com.devsrsouza.kotlinbukkitapi.dsl.command.CommandException
4-
import br.com.devsrsouza.kotlinbukkitapi.dsl.command.Executor
5-
import br.com.devsrsouza.kotlinbukkitapi.dsl.command.argumentExecutorBuilder
6-
import br.com.devsrsouza.kotlinbukkitapi.dsl.command.exception
3+
import br.com.devsrsouza.kotlinbukkitapi.dsl.command.*
74
import br.com.devsrsouza.kotlinbukkitapi.extensions.text.color
85
import net.md_5.bungee.api.chat.BaseComponent
96
import org.bukkit.Bukkit
@@ -43,6 +40,14 @@ inline fun <T : CommandSender> Executor<T>.argumentWorld(
4340
).block(world)
4441
}
4542

43+
fun TabCompleter.world(
44+
index: Int
45+
): List<String> = argumentCompleteBuilder(index) { arg ->
46+
Bukkit.getWorlds().mapNotNull {
47+
if(it.name.startsWith(arg, true)) it.name else null
48+
}
49+
}
50+
4651
// COORDINATE
4752

4853
val MISSING_COORDINATE_ARGUMENT = "Missing coordinate argument. Argument format [x] [y] [z]".color(RED)

exposed/src/main/kotlin/br/com/devsrsouza/exposed/Item.kt renamed to exposed/src/main/kotlin/br/com/devsrsouza/kotlinbukkitapi/exposed/Item.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package br.com.devsrsouza.exposed
1+
package br.com.devsrsouza.kotlinbukkitapi.exposed
22

33
import br.com.devsrsouza.kotlinbukkitapi.attributestorage.fromByteArrayItem
44
import br.com.devsrsouza.kotlinbukkitapi.attributestorage.toByteArray

0 commit comments

Comments
 (0)