Time arguments

A time argument with Minecraft suggestions 'd', 's' and 't'

The TimeArgument class represents in-game time, in the number of in-game ticks. This allows command senders to specify a certain number of ticks in a simpler way, by including the characters d to specify the numbers of days, s to specify the number of seconds or t to specify a number of ticks.

The CommandAPI converts the inputs provided by the command sender into a number of ticks as an integer.

Developer's Note:

The TimeArgument provides inputs such as 2d (2 in-game days), 10s (10 seconds) and 20t (20 ticks), but does not let you combine them, such as 2d10s.

Example - Displaying a server-wide announcement

Say we have a command bigmsg that displays a title message to all players for a certain duration:

/bigmsg <duration> <message>
new CommandAPICommand("bigmsg")
    .withArguments(new TimeArgument("duration"))
    .withArguments(new GreedyStringArgument("message"))
    .executes((sender, args) -> {
        // Duration in ticks
        int duration = (int) args.get("duration");
        String message = (String) args.get("message");

        for (Player player : Bukkit.getOnlinePlayers()) {
            // Display the message to all players, with the default fade in/out times (10 and 20).
            player.sendTitle(message, "", 10, duration, 20);
        }
    })
    .register();
CommandAPICommand("bigmsg")
    .withArguments(TimeArgument("duration"))
    .withArguments(GreedyStringArgument("message"))
    .executes(CommandExecutor { _, args ->
        // Duration in ticks
        val duration = args["duration"] as Int
        val message = args["message"] as String

        for (player in Bukkit.getOnlinePlayers()) {
            // Display the message to all players, with the default fade in/out times (10 and 20).
            player.sendTitle(message, "", 10, duration, 20)
        }
    })
    .register()
commandAPICommand("bigmsg") {
    timeArgument("duration")
    greedyStringArgument("message")
    anyExecutor { _, args ->
        // Duration in ticks
        val duration = args["duration"] as Int
        val message = args["message"] as String

        for (player in Bukkit.getOnlinePlayers()) {
            // Display the message to all players, with the default fade in/out times (10 and 20).
            player.sendTitle(message, "", 10, duration, 20)
        }
    }
}