Objective arguments
In the CommandAPI, objectives are split into two classes:
- The
ObjectiveArgument
class, which represents objectives as a whole - The
ObjectiveCriteriaArgument
class, which represents objective criteria
Objective argument
The objective argument refers to a single scoreboard objective.
Example - Move objective to sidebar
As an example, let's create a command to move an objective to a player's sidebar. To do this, we will use the following command syntax:
/sidebar <objective>
new CommandAPICommand("sidebar")
.withArguments(new ObjectiveArgument("objective"))
.executes((sender, args) -> {
Objective objective = (Objective) args.get(0);
// Set display slot
objective.setDisplaySlot(DisplaySlot.SIDEBAR);
})
.register();
CommandAPICommand("sidebar")
.withArguments(ObjectiveArgument("objective"))
.executes(CommandExecutor { _, args ->
val objective = args[0] as Objective
// Set display slot
objective?.displaySlot = DisplaySlot.SIDEBAR
})
.register()
commandAPICommand("sidebar") {
objectiveArgument("objective")
anyExecutor { _, args ->
val objective = args[0] as Objective
// Set display slot
objective?.displaySlot = DisplaySlot.SIDEBAR
}
}
Objective criteria argument
The ObjectiveCriteriaArgument
is fairly straight forward - it represents the criteria for an objective. Similar to Bukkit, the objective criteria is simply represented as a String
, so it must be casted to a String
when being used.
Example - Unregister all objectives by criteria
Say we wanted to create a command to unregister all objectives based on a given criteria. Let's create a command with the following form:
/unregisterall <objective critera>
To do this, we're going to take advantage of Bukkit's Scoreboard.getObjectivesByCriteria(String)
method
new CommandAPICommand("unregisterall")
.withArguments(new ObjectiveCriteriaArgument("objective criteria"))
.executes((sender, args) -> {
String objectiveCriteria = (String) args.get(0);
Set<Objective> objectives = Bukkit.getScoreboardManager().getMainScoreboard().getObjectivesByCriteria(objectiveCriteria);
// Unregister the objectives
for (Objective objective : objectives) {
objective.unregister();
}
})
.register();
CommandAPICommand("unregisterall")
.withArguments(ObjectiveCriteriaArgument("objective criteria"))
.executes(CommandExecutor { _, args ->
val objectiveCriteria = args[0] as String
val objectives = Bukkit.getScoreboardManager().mainScoreboard.getObjectivesByCriteria(objectiveCriteria)
// Unregister the objectives
for (objective in objectives) {
objective.unregister()
}
})
.register()
commandAPICommand("unregisterall") {
objectiveCriteriaArgument("objective criteria")
anyExecutor { _, args ->
val objectiveCriteria = args[0] as String
val objectives = Bukkit.getScoreboardManager().mainScoreboard.getObjectivesByCriteria(objectiveCriteria)
// Unregister the objectives
for (objective in objectives) {
objective.unregister()
}
}
}