-
Notifications
You must be signed in to change notification settings - Fork 3
Custom Command Arguments
Mazen edited this page May 14, 2023
·
2 revisions
Registering a custom argument is easy, just follow the following steps:
Just make a class to represent the type of that argument
and make it extends AbstractArgument
Here's an example:
public final class ArgumentOfflinePlayer extends AbstractArgument<OfflinePlayer> {
public ArgumentOfflinePlayer(@NotNull String id) {
super(id, OfflinePlayer.class);
}
public ArgumentOfflinePlayer(@NotNull String id,
boolean optional,
boolean useRemainingSpace) {
super(id, OfflinePlayer.class, optional, useRemainingSpace);
}
public ArgumentOfflinePlayer(@NotNull ArgumentData data) {
super(data, OfflinePlayer.class);
}
@Override
public OfflinePlayer parse(@NotNull Command<?> command, @NotNull String input) {
return Bukkit.getOfflinePlayer(input);
}
}
example:
commandManager.typeRegistry().registerArgumentConverter(OfflinePlayer.class, ArgumentOfflinePlayer::new);
var cmd = Command.builder(commandManager, "ban")
.info(new CommandInfo("ban.perm", "Ban cmd"))
.requirement(SpigotCommandRequirement.ONLY_PLAYER_EXECUTABLE)
.cooldown(new CommandCooldown(5, TimeUnit.MINUTES))
.syntax(SpigotCommandSyntaxBuilder.builder(Player.class, "ban")
.flags("silent")
.argument(new ArgumentOfflinePlayer("user"))
.argument(Argument.Array("reason"))
.execute((player, context) -> {
String reason = context.getArgument("reason");
OfflinePlayer offlineUser = context.getArgument("user");
if(offlineUser == null) {
return;
}
System.out.println("Banning " + offlineUser.getName() + ", for " + reason);
//TODO YOUR BAN CODE HERE
})
.build())
.defaultExecutor((s, context) -> s.sendMessage(ChatColor.RED + "/ban <user> <reason...>"))
.build();
@Command(name = "ban")
public class TestAnnotation {
@Syntax(syntax = "<user> <reason>")
public void ban(@NotNull Player executor,
@NotNull @Arg(id = "user")OfflinePlayer user,
@NotNull @Arg(id = "reason") @Greedy String reason) {
System.out.println("Banning " + user.getName() + ", for " + reason);
}
}
I hope this wiki helped you with learning how to fully utilize mCommands