Raw Command

The raw command interface can be used to define commands. The interface can be used as a base for custom command APIs.

It is recommended to use the Bygge en kommando for simple command definitions.

Writing a Command

The first step is to create a class for the command. The class has to implement the interface Command.Raw:

public class MyBroadcastCommand implements Command.Raw {

    private final Component usage = Component.text("<message>");
    private final Component description = Component.text("Display a message to all players");

    @Override
    public CommandResult process(CommandCause cause, ArgumentReader.Mutable arguments) throws CommandException {
        String message = arguments.remaining();
        Sponge.server().broadcastAudience().sendMessage(Component.text(message));
        return CommandResult.success();
    }

    @Override
    public List<CommandCompletion> complete(CommandCause cause, ArgumentReader.Mutable arguments) throws CommandException {
        return Collections.emptyList();
    }

    @Override
    public boolean canExecute(CommandCause cause) {
        return cause.hasPermission("myplugin.broadcast");
    }

    @Override
    public Optional<Component> shortDescription(CommandCause cause) {
        return Optional.of(this.description);
    }

    @Override
    public Optional<Component> extendedDescription(CommandCause cause) {
        return Optional.empty();
    }

    @Override
    public Component usage(CommandCause cause) {
        return this.usage;
    }
}

Tips

See the JavaDoc for Raw for the purposes of each method in the example

Registering the Command

Now we can register the class in the RegisterCommandEvent event. You can register the command using the RegisterCommandEvent#register(PluginContainer, Command, String, String…) passing your plugin’s container, an instance of the raw command and the main command as well as any aliases.

@Inject
PluginContainer container;

@Listener
public void onRegisterRawCommands(final RegisterCommandEvent<Command.Raw> event){
    event.register(this.container, new MyBroadcastCommand(), "broadcast");
}