This repository was archived by the owner on Apr 12, 2025. It is now read-only.
- 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