Minestom/demo/src/main/java/net/minestom/demo/commands/HealthCommand.java

76 lines
2.9 KiB
Java
Raw Normal View History

2022-01-01 18:27:52 +01:00
package net.minestom.demo.commands;
2020-04-05 10:15:21 +02:00
2021-03-04 14:41:41 +01:00
import net.kyori.adventure.text.Component;
2020-06-21 14:01:03 +02:00
import net.minestom.server.command.CommandSender;
import net.minestom.server.command.builder.Command;
import net.minestom.server.command.builder.CommandContext;
import net.minestom.server.command.builder.arguments.ArgumentType;
import net.minestom.server.command.builder.arguments.number.ArgumentNumber;
import net.minestom.server.command.builder.condition.Conditions;
import net.minestom.server.command.builder.exception.ArgumentSyntaxException;
2020-04-24 03:25:58 +02:00
import net.minestom.server.entity.Player;
2020-04-05 10:15:21 +02:00
public class HealthCommand extends Command {
2020-04-05 10:15:21 +02:00
public HealthCommand() {
2021-02-12 04:34:37 +01:00
super("health");
2020-04-05 10:15:21 +02:00
setCondition(Conditions::playerOnly);
2020-04-05 10:15:21 +02:00
setDefaultExecutor(this::defaultExecutor);
2021-02-12 04:34:37 +01:00
var modeArg = ArgumentType.Word("mode").from("set", "add");
2020-04-05 10:15:21 +02:00
2021-02-12 04:34:37 +01:00
var valueArg = ArgumentType.Integer("value").between(0, 100);
2020-04-05 10:15:21 +02:00
2020-11-12 03:09:36 +01:00
setArgumentCallback(this::onModeError, modeArg);
setArgumentCallback(this::onValueError, valueArg);
2020-04-05 10:15:21 +02:00
2020-11-12 03:09:36 +01:00
addSyntax(this::sendSuggestionMessage, modeArg);
addSyntax(this::onHealthCommand, modeArg, valueArg);
2020-04-05 10:15:21 +02:00
}
private void defaultExecutor(CommandSender sender, CommandContext context) {
sender.sendMessage(Component.text("Correct usage: health set|add <number>"));
2020-04-05 10:15:21 +02:00
}
private void onModeError(CommandSender sender, ArgumentSyntaxException exception) {
2021-03-04 14:41:41 +01:00
sender.sendMessage(Component.text("SYNTAX ERROR: '" + exception.getInput() + "' should be replaced by 'set' or 'add'"));
2020-04-05 10:15:21 +02:00
}
private void onValueError(CommandSender sender, ArgumentSyntaxException exception) {
final int error = exception.getErrorCode();
final String input = exception.getInput();
2020-04-05 10:15:21 +02:00
switch (error) {
case ArgumentNumber.NOT_NUMBER_ERROR:
2021-03-04 14:41:41 +01:00
sender.sendMessage(Component.text("SYNTAX ERROR: '" + input + "' isn't a number!"));
2020-04-05 10:15:21 +02:00
break;
2021-08-22 06:14:03 +02:00
case ArgumentNumber.TOO_LOW_ERROR:
case ArgumentNumber.TOO_HIGH_ERROR:
2021-03-04 14:41:41 +01:00
sender.sendMessage(Component.text("SYNTAX ERROR: " + input + " is not between 0 and 100"));
2020-04-05 10:15:21 +02:00
break;
}
}
private void sendSuggestionMessage(CommandSender sender, CommandContext context) {
sender.sendMessage(Component.text("/health " + context.get("mode") + " [Integer]"));
2020-04-05 10:15:21 +02:00
}
private void onHealthCommand(CommandSender sender, CommandContext context) {
2020-11-12 03:09:36 +01:00
final Player player = (Player) sender;
final String mode = context.get("mode");
final int value = context.get("value");
2020-04-05 10:15:21 +02:00
switch (mode.toLowerCase()) {
case "set":
player.setHealth(value);
break;
case "add":
player.setHealth(player.getHealth() + value);
break;
}
2020-11-12 03:09:36 +01:00
2021-03-04 14:41:41 +01:00
player.sendMessage(Component.text("You have now " + player.getHealth() + " health"));
2020-04-05 10:15:21 +02:00
}
}