Improved demo commands clarity

This commit is contained in:
themode 2020-11-12 03:09:36 +01:00
parent 60d01fab11
commit 6e77bb8358
5 changed files with 57 additions and 45 deletions

View File

@ -12,11 +12,11 @@ import org.jetbrains.annotations.NotNull;
public interface CommandExecutor {
/**
* Executes the command callback once the syntax has been called (or the default executor)
* Executes the command callback once the syntax has been called (or the default executor).
*
* @param source the sender of the command
* @param sender the sender of the command
* @param args contains all the parsed arguments,
* the id is the one initialized when creating the argument object
*/
void apply(@NotNull CommandSender source, @NotNull Arguments args);
void apply(@NotNull CommandSender sender, @NotNull Arguments args);
}

View File

@ -233,7 +233,7 @@ public class Vector {
}
/**
* Gets a new vector.
* Gets a new vector with the same values.
*
* @return vector
*/
@ -264,4 +264,13 @@ public class Vector {
public void setZ(float z) {
this.z = z;
}
/**
* Gets a new {@link Position} from this vector.
*
* @return this vector as a position
*/
public Position toPosition() {
return new Position(x, y, z);
}
}

View File

@ -3,8 +3,7 @@ package demo;
import demo.blocks.BurningTorchBlock;
import demo.blocks.StoneBlock;
import demo.blocks.UpdatableBlockDemo;
import demo.commands.GamemodeCommand;
import demo.commands.TestCommand;
import demo.commands.*;
import net.minestom.server.MinecraftServer;
import net.minestom.server.command.CommandManager;
import net.minestom.server.instance.block.BlockManager;
@ -30,13 +29,13 @@ public class Main {
CommandManager commandManager = MinecraftServer.getCommandManager();
commandManager.register(new TestCommand());
commandManager.register(new GamemodeCommand());
/*commandManager.register(new EntitySelectorCommand());
commandManager.register(new EntitySelectorCommand());
commandManager.register(new HealthCommand());
commandManager.register(new SimpleCommand());
commandManager.register(new GamemodeCommand());
commandManager.register(new DimensionCommand());
commandManager.register(new ShutdownCommand());
commandManager.register(new TeleportCommand());*/
commandManager.register(new TeleportCommand());
commandManager.setUnknownCommandCallback((sender, command) -> sender.sendMessage("unknown command"));

View File

@ -17,15 +17,15 @@ public class HealthCommand extends Command {
setDefaultExecutor(this::defaultExecutor);
Argument arg0 = ArgumentType.Word("mode").from("set", "add");
Argument modeArg = ArgumentType.Word("mode").from("set", "add");
Argument arg1 = ArgumentType.Integer("value").between(0, 100);
Argument valueArg = ArgumentType.Integer("value").between(0, 100);
setArgumentCallback(this::modeCallback, arg0);
setArgumentCallback(this::valueCallback, arg1);
setArgumentCallback(this::onModeError, modeArg);
setArgumentCallback(this::onValueError, valueArg);
addSyntax(this::execute2, arg0, arg1);
addSyntax(this::execute, arg0);
addSyntax(this::sendSuggestionMessage, modeArg);
addSyntax(this::onHealthCommand, modeArg, valueArg);
}
private boolean condition(CommandSender sender, String commandString) {
@ -40,11 +40,11 @@ public class HealthCommand extends Command {
sender.sendMessage("Correct usage: health [set/add] [number]");
}
private void modeCallback(CommandSender sender, String value, int error) {
private void onModeError(CommandSender sender, String value, int error) {
sender.sendMessage("SYNTAX ERROR: '" + value + "' should be replaced by 'set' or 'add'");
}
private void valueCallback(CommandSender sender, String value, int error) {
private void onValueError(CommandSender sender, String value, int error) {
switch (error) {
case ArgumentNumber.NOT_NUMBER_ERROR:
sender.sendMessage("SYNTAX ERROR: '" + value + "' isn't a number!");
@ -55,14 +55,14 @@ public class HealthCommand extends Command {
}
}
private void execute(CommandSender sender, Arguments args) {
private void sendSuggestionMessage(CommandSender sender, Arguments args) {
sender.sendMessage("/health " + args.getWord("mode") + " [Integer]");
}
private void execute2(CommandSender sender, Arguments args) {
Player player = (Player) sender;
String mode = args.getWord("mode");
int value = args.getInteger("value");
private void onHealthCommand(CommandSender sender, Arguments args) {
final Player player = (Player) sender;
final String mode = args.getWord("mode");
final int value = args.getInteger("value");
switch (mode.toLowerCase()) {
case "set":
@ -72,6 +72,7 @@ public class HealthCommand extends Command {
player.setHealth(player.getHealth() + value);
break;
}
player.sendMessage("You have now " + player.getHealth() + " health");
}

View File

@ -1,42 +1,45 @@
package demo.commands;
import net.minestom.server.MinecraftServer;
import net.minestom.server.command.CommandSender;
import net.minestom.server.command.builder.Arguments;
import net.minestom.server.command.builder.Command;
import net.minestom.server.command.builder.arguments.Argument;
import net.minestom.server.command.builder.arguments.ArgumentType;
import net.minestom.server.entity.Player;
import net.minestom.server.utils.Position;
import net.minestom.server.utils.location.RelativeVec;
public class TeleportCommand extends Command {
public TeleportCommand() {
super("tp");
setDefaultExecutor((source, args) -> source.sendMessage("Usage: /tp x y z"));
Argument x = ArgumentType.Float("x");
Argument y = ArgumentType.Float("y");
Argument z = ArgumentType.Float("z");
Argument playerArg = ArgumentType.Word("pl");
Argument posArg = ArgumentType.RelativeVec3("pos");
Argument playerArg = ArgumentType.Word("player");
setArgumentCallback((source, value, error) -> {
System.out.println("error: " + error);
}, x);
addSyntax((sender, args) -> {
Player pl = MinecraftServer.getConnectionManager().getPlayer(args.getWord("pl"));
if (pl != null && sender.isPlayer()) {
Player player = (Player) sender;
player.teleport(pl.getPosition());
}
}, playerArg);
addSyntax((source, args) -> {
final float posX = args.getFloat("x");
final float posY = args.getFloat("y");
final float posZ = args.getFloat("z");
((Player) source).teleport(new Position(posX, posY, posZ));
source.sendMessage("TELEPORTING");
}, x, y, z);
addSyntax(this::onPlayerTeleport, playerArg);
addSyntax(this::onPositionTeleport, posArg);
}
private void onPlayerTeleport(CommandSender sender, Arguments args) {
Player pl = MinecraftServer.getConnectionManager().getPlayer(args.getWord("player"));
if (pl != null && sender.isPlayer()) {
Player player = (Player) sender;
player.teleport(pl.getPosition());
}
}
private void onPositionTeleport(CommandSender sender, Arguments args) {
final Player player = sender.asPlayer();
final RelativeVec relativeVec = args.getRelativeVector("pos");
final Position position = relativeVec.fromRelativePosition(player).toPosition();
player.teleport(position);
player.sendMessage("You have been teleported to " + position);
}
}