// Simple command with one syntax
public class SimpleCommand extends Command {
public SimpleCommand() {
super("hello");
// Single string argument
var nameArg = ArgumentType.String("name");
// Syntax: /hello <name>
addSyntax((sender, context) -> {
String name = context.get(nameArg);
sender.sendMessage("Hello, " + name + "!");
}, nameArg);
}
}
// Command with multiple syntaxes
public class MultiSyntaxCommand extends Command {
public MultiSyntaxCommand() {
super("teleport");
var xArg = ArgumentType.Double("x");
var yArg = ArgumentType.Double("y");
var zArg = ArgumentType.Double("z");
var playerArg = ArgumentType.Player("target");
// Syntax 1: /teleport <x> <y> <z>
addSyntax((sender, context) -> {
if (sender instanceof Player player) {
double x = context.get(xArg);
double y = context.get(yArg);
double z = context.get(zArg);
player.teleport(new Pos(x, y, z));
}
}, xArg, yArg, zArg);
// Syntax 2: /teleport <target>
addSyntax((sender, context) -> {
if (sender instanceof Player player) {
Player target = context.get(playerArg);
player.teleport(target.getPosition());
}
}, playerArg);
}
}
// Command with conditions
public class PlayerOnlyCommand extends Command {
public PlayerOnlyCommand() {
super("fly");
// Only allow players to use this command
setCondition((sender, commandString) -> {
if (!(sender instanceof Player)) {
sender.sendMessage("This command can only be used by players!");
return false;
}
return true;
});
addSyntax((sender, context) -> {
// Command logic for players only
});
}
}