Skip to content
This repository was archived by the owner on Apr 12, 2025. It is now read-only.

Custom Command Arguments

Mazen edited this page May 14, 2023 · 2 revisions

Registering a custom argument is easy, just follow the following steps:

Creating Custom Argument Class

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);	} }

Finally, Register the argument type

example:

commandManager.typeRegistry().registerArgumentConverter(OfflinePlayer.class, ArgumentOfflinePlayer::new);

Example Usage

Simple example using Builders

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();

Simple example using Annotations

@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);	} }
Clone this wiki locally