1+ package cc.modlabs.kpaper.command.arguments
2+
3+ import com.mojang.brigadier.StringReader
4+ import com.mojang.brigadier.arguments.ArgumentType
5+ import com.mojang.brigadier.arguments.StringArgumentType
6+ import com.mojang.brigadier.context.CommandContext
7+ import com.mojang.brigadier.suggestion.Suggestions
8+ import com.mojang.brigadier.suggestion.SuggestionsBuilder
9+ import io.papermc.paper.command.brigadier.argument.CustomArgumentType
10+ import org.bukkit.Bukkit
11+ import org.bukkit.entity.Player
12+ import java.util.concurrent.CompletableFuture
13+
14+ class PlayerArgument : CustomArgumentType <Player , String > {
15+
16+ override fun parse (reader : StringReader ): Player {
17+ val stringNotParsed = reader.readString()
18+ val player = Bukkit .getPlayer(stringNotParsed)
19+ if (player != null ) {
20+ return player
21+ }
22+
23+ throw IllegalArgumentException (" Player $stringNotParsed not found" )
24+ }
25+
26+ override fun getNativeType (): ArgumentType <String > {
27+ return StringArgumentType .word()
28+ }
29+
30+ override fun <S : Any > listSuggestions (
31+ context : CommandContext <S >,
32+ builder : SuggestionsBuilder
33+ ): CompletableFuture <Suggestions > {
34+ val currentArg = context.input.lastOrNull() ? : return builder.buildFuture()
35+
36+ Bukkit .getOnlinePlayers().filter { player -> player.name.startsWith(currentArg) }.forEach {
37+ builder.suggest(it.name)
38+ }
39+
40+ return builder.buildFuture()
41+ }
42+
43+ }
0 commit comments