Time arguments
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 as2d
(2 in-game days),10s
(10 seconds) and20t
(20 ticks), but does not let you combine them, such as2d10s
.
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(0);
String message = (String) args.get(1);
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[0] as Int
val message = args[1] 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[0] as Int
val message = args[1] 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)
}
}
}