Skip to content

Commit e2389d9

Browse files
committed
feat: arguments
1 parent 4565666 commit e2389d9

1 file changed

Lines changed: 43 additions & 0 deletions

File tree

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
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

Comments
 (0)