-
Notifications
You must be signed in to change notification settings - Fork 3
Command API: Class based
Lorenzo Rutayisire edited this page Jun 13, 2020
·
7 revisions
Let's say we want to create the /quake create <arena> command using the class-based command-api approach:
First, we make the class for create <arena>:
public class CreateArenaCommand extends Command {
public CreateArenaCommand() {
super("create");
setDescription("Creates a new arena with the given name."); // Sets the description that will be displayed in the help command.
setSenderType(SenderType.PLAYER); // Sets the senders that can execute this command.
addAliases("c"); // Sets an alias for the command.
}
@Override
public String getUsage(CommandSender sender, boolean colored) {
return "<arena>"; // The parameters required to use this command.
}
@Override
protected boolean onCall(CommandSender sender, Queue<String> args) {
// Here we're already sure the sender is a player.
if (args.isEmpty()) {
sender.sendMessage(RED + "Specify the arena."); // Wrong command usage!
return false;
}
// (...) Does some stuff to actually create the arena...
sender.sendMessage(GREEN + "Arena created successfully.");
return true;
}
}Then, we create the node-command for quake:
public class QuakeCommand extends NodeCommand {
public QuakeCommand() {
super("quake");
setDescription("The main Quake command.");
//setSenderType(SenderType.ALL); This is the default sender-type.
addAliases("q");
append(new CreateArenaCommand()); // Adds "create <arena>" as a sub-command of quake.
}
}Finally, we have to register quake as a root Bukkit's command:
CommandRegistry.register(new QuakeCommand());