From 256ed45fab14ed075b0a4e791ff873299ca7dd72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?N=C3=A9meth=20Noel?= Date: Fri, 26 Mar 2021 21:32:58 +0100 Subject: [PATCH] Added two new commands /summon and /remove entities --- src/test/java/demo/Main.java | 2 ++ .../java/demo/commands/RemoveCommand.java | 34 +++++++++++++++++++ .../java/demo/commands/SummonCommand.java | 33 ++++++++++++++++++ 3 files changed, 69 insertions(+) create mode 100644 src/test/java/demo/commands/RemoveCommand.java create mode 100644 src/test/java/demo/commands/SummonCommand.java diff --git a/src/test/java/demo/Main.java b/src/test/java/demo/Main.java index b584f4667..32a78c1e6 100644 --- a/src/test/java/demo/Main.java +++ b/src/test/java/demo/Main.java @@ -49,6 +49,8 @@ public class Main { commandManager.register(new ShootCommand()); commandManager.register(new HorseCommand()); commandManager.register(new EchoCommand()); + commandManager.register(new SummonCommand()); + commandManager.register(new RemoveCommand()); commandManager.setUnknownCommandCallback((sender, command) -> sender.sendMessage(Component.text("Unknown command", NamedTextColor.RED))); diff --git a/src/test/java/demo/commands/RemoveCommand.java b/src/test/java/demo/commands/RemoveCommand.java new file mode 100644 index 000000000..632579fc3 --- /dev/null +++ b/src/test/java/demo/commands/RemoveCommand.java @@ -0,0 +1,34 @@ +package demo.commands; + +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.minecraft.ArgumentEntity; +import net.minestom.server.command.builder.condition.Conditions; +import net.minestom.server.entity.Entity; +import net.minestom.server.utils.entity.EntityFinder; + +public class RemoveCommand extends Command { + + public RemoveCommand() { + super("remove"); + addSubcommand(new RemoveEntities()); + } + + static class RemoveEntities extends Command { + private final ArgumentEntity entity; + + public RemoveEntities() { + super("entities"); + setCondition(Conditions::playerOnly); + entity = ArgumentType.Entity("entity"); + addSyntax(this::remove, entity); + } + + private void remove(CommandSender commandSender, CommandContext commandContext) { + final EntityFinder entityFinder = commandContext.get(entity); + entityFinder.find(commandSender).forEach(Entity::remove); + } + } +} \ No newline at end of file diff --git a/src/test/java/demo/commands/SummonCommand.java b/src/test/java/demo/commands/SummonCommand.java new file mode 100644 index 000000000..3ee4dd736 --- /dev/null +++ b/src/test/java/demo/commands/SummonCommand.java @@ -0,0 +1,33 @@ +package demo.commands; + +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.minecraft.ArgumentEntity; +import net.minestom.server.command.builder.arguments.minecraft.registry.ArgumentEntityType; +import net.minestom.server.command.builder.arguments.relative.ArgumentRelativeVec3; +import net.minestom.server.command.builder.condition.Conditions; +import net.minestom.server.entity.Entity; +import org.jetbrains.annotations.NotNull; + +public class SummonCommand extends Command { + + private final ArgumentEntityType entity; + private final ArgumentRelativeVec3 pos; + + public SummonCommand() { + super("summon"); + setCondition(Conditions::playerOnly); + + entity = ArgumentType.EntityType("entity type"); + pos = ArgumentType.RelativeVec3("pos"); + addSyntax(this::execute, entity, pos); + } + + private void execute(@NotNull CommandSender commandSender, @NotNull CommandContext commandContext) { + final Entity entity = new Entity(commandContext.get(this.entity)); + //noinspection ConstantConditions - One couldn't possibly execute a command without being in an instance + entity.setInstance(commandSender.asPlayer().getInstance(), commandContext.get(pos).from(commandSender.asPlayer()).toPosition()); + } +}