feat: implemented Puppet subcommand for /debug_ai
This commit is contained in:
parent
8125d04013
commit
0f047692b0
@ -22,6 +22,7 @@ public class DebugAICommand extends Command {
|
||||
setDefaultExecutor(this::defaultExecutor);
|
||||
|
||||
addSyntax(this::executeShowPath, ArgumentType.Literal("show_path"), argShowPathValue);
|
||||
addSubcommand(new PuppeteerSubcommand());
|
||||
}
|
||||
|
||||
public static void register() {
|
||||
|
||||
@ -0,0 +1,90 @@
|
||||
package ru.dragonestia.msb3.api.command;
|
||||
|
||||
import net.kyori.adventure.text.Component;
|
||||
import net.kyori.adventure.text.format.NamedTextColor;
|
||||
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.entity.EntityType;
|
||||
import net.minestom.server.entity.Player;
|
||||
import ru.dragonestia.msb3.api.entity.EntityAI;
|
||||
|
||||
public class PuppeteerSubcommand extends Command {
|
||||
|
||||
private EntityAI entity;
|
||||
|
||||
public PuppeteerSubcommand() {
|
||||
super("puppeteer");
|
||||
|
||||
setDefaultExecutor(this::defaultExecutor);
|
||||
addSyntax(this::createEntity, ArgumentType.Literal("create"));
|
||||
addSyntax(this::removeEntity, ArgumentType.Literal("remove"));
|
||||
addSyntax(this::comeHere, ArgumentType.Literal("come_here"));
|
||||
addSyntax(this::teleport, ArgumentType.Literal("teleport"));
|
||||
}
|
||||
|
||||
private void defaultExecutor(CommandSender sender, CommandContext ctx) {
|
||||
var player = (Player) sender;
|
||||
|
||||
player.sendMessage("Puppeteer commands:");
|
||||
}
|
||||
|
||||
private void createEntity(CommandSender sender, CommandContext ctx) {
|
||||
if (entity != null) {
|
||||
sender.sendMessage(Component.text("Entity is already created!", NamedTextColor.RED));
|
||||
return;
|
||||
}
|
||||
|
||||
var player = (Player) sender;
|
||||
|
||||
var e = new EntityAI(EntityType.SKELETON);
|
||||
e.setCustomName(Component.text("Puppet"));
|
||||
e.setInstance(player.getInstance(), player.getPosition());
|
||||
entity = e;
|
||||
|
||||
sender.sendMessage(Component.text("Puppeteer created!", NamedTextColor.YELLOW));
|
||||
}
|
||||
|
||||
private void removeEntity(CommandSender sender, CommandContext ctx) {
|
||||
if (isNotCreated(sender)) return;
|
||||
|
||||
entity.remove();
|
||||
sender.sendMessage(Component.text("Entity removed!"));
|
||||
}
|
||||
|
||||
private void comeHere(CommandSender sender, CommandContext ctx) {
|
||||
if (isNotCreated(sender)) return;
|
||||
|
||||
var player = (Player) sender;
|
||||
|
||||
sender.sendMessage(Component.text("Set entity path target."));
|
||||
entity.getAi().setPathTo(player.getPosition()).thenAccept(result -> {
|
||||
player.sendMessage(Component.text("Entity path target result: " + result, NamedTextColor.YELLOW));
|
||||
});
|
||||
}
|
||||
|
||||
private void teleport(CommandSender sender, CommandContext ctx) {
|
||||
if (isNotCreated(sender)) return;
|
||||
|
||||
var player = (Player) sender;
|
||||
entity.teleport(player.getPosition()).thenRun(() -> {
|
||||
sender.sendMessage(Component.text("Teleported.", NamedTextColor.YELLOW));
|
||||
});
|
||||
}
|
||||
|
||||
private boolean isNotCreated(CommandSender sender) {
|
||||
boolean failed = false;
|
||||
if (entity == null) {
|
||||
failed = true;
|
||||
} else if (entity.isDead() || entity.isRemoved()) {
|
||||
entity.remove();
|
||||
entity = null;
|
||||
}
|
||||
|
||||
if (failed) {
|
||||
sender.sendMessage(Component.text("Entity is not created!", NamedTextColor.RED));
|
||||
}
|
||||
return failed;
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user