Skip to content

Command arguments

Berke Akçen edited this page Jan 3, 2025 · 12 revisions

Table of contents

Command Argument Basics

CommandArguments is a utility class that includes the basic parameters related Bukkit commands and bunch of useful methods to improve your code.

Basic Methods

    // We have created a basic command named "example"
    @Command(
        name = "example"
    )
    public void exampleCommandMethod(CommandArguments arguments) {
        // To get command sender use CommandArguments#getSender method
        CommandSender sender = arguments.getSender();

        // To check who is the sender
        if (arguments.isSenderPlayer()) {
            // now sender is player
        } else {
            // and now sender is console
        }

        // To get as Bukkit's command use CommandArguments#getCommand method
        // After that you can be able to get command's name, description, permission, etc.
        org.bukkit.command.Command bukkitCommand = arguments.getBukkitCommand();

        // To get Command object associated with these arguments.
        me.despical.commandframework.annotations.Command command = arguments.getCommand();

        // To get label of command use CommandArguments#getLabel method
        String label = arguments.getLabel();

        // To get arguments of command use CommandArguments#getArguments() method
        // and don't forget these arguments is not all the parts of default arguments
        // because they'll be splitted after sub-command parts
        String[] args = arguments.getArguments();

        // To get specific argument without receiving argument array
        // There is no exception during this operation but also don't forget
        // that method can be null if index is out of bounds.
        String firstArgument = arguments.getArgument(0);

        // To get arguments array is empty or not without receiving array.
        boolean isArgsEmpty = arguments.isArgumentsEmpty();

        // To send message to command sender without receivingits object
        arguments.sendMessage("Hey there!");

        // To check if command sender has permission without receiving sender object
        if (arguments.hasPermission("command.framework")) {
            // sender has the given permission
        } else {
            // sender has not the given permission
        }

        // To get arguments length without receiving string array
        int argumentsLength = arguments.getLength();

        // Gets the first argument, can be null.
        String nullableArgument = arguments.getArgument(0);

        // Gets the first argument, returns the default value in case index is out of bounds
        String notNullArgument = arguments.getArgument(0, "default value");
    }

Useful Methods

    // We have created a basic command named "example"
    @Command(
        name = "example"
    )
    public void exampleCommandMethod(CommandArguments arguments) {
        // Gets player from the given name, in Optional type
        Optional<Player> playerFromName = arguments.getPlayer("Despical");
        playerFromName.ifPresent(player -> player.sendMessage("Hello World!"));

        // Gets player from the given argument index, in this case first argument
        Optional<Player> playerFromArgs = arguments.getPlayer(0);
        playerFromArgs.ifPresent(player -> player.sendMessage("Hello World!"));

        // Assume that our arguments array is = ["example", "array", "with", "multiple", "arguments"]

        String concatenatedArgs = arguments.concatArguments();
        // concatenatedArgs will be equals to = "example array with multiple arguments"

        // from index is inclusive, to index is exclusive
        String concatRangeOf = arguments.concatRangeOf(1, 4);
        // concatenatedArgs will be equals to = "array with multiple arguments"

        // Checks if the first argument is numeric or not.
        // Does not check for bounds so should be careful about the overflowing.
        // This method will return false for non-positive or floating decimals.
        boolean isNumeric = arguments.isNumeric(0); // Method takes string values as well other than argument indexes.

        // This method checks if the first argument is an integer or not,
        // Does not check for bounds, so it can throw an exception if the integer limit is exceed in both positive or negative ways.
        // And will return false if the given argument is a floating point.
        boolean isInteger = arguments.isInteger(0); // Method takes string values as well other than argument indexes.

        // This method checks if the first argument is a floating decimal or not,
        // Does not check for bounds, so it can throw exception if the double limit is exceeded in both positive or negative ways.
        // And will return true if the given argument is an integer.
        boolean isFloatingDecimal = arguments.isFloatingDecimal(0); // Method takes string values as well other than argument indexes.

        // To check if the command sender has cooldown for this command.
        boolean hasCooldown = arguments.checkCooldown();

        // To send pre-defined error messages in Message enum.
        // Use Message#setMessage method to change these error messages.
        boolean success = arguments.sendMessage(Message.SHORT_ARG_SIZE);
    }