Implemented new AI behavior patterns #1
@ -22,6 +22,7 @@ public class DebugAICommand extends Command {
|
|||||||
setDefaultExecutor(this::defaultExecutor);
|
setDefaultExecutor(this::defaultExecutor);
|
||||||
|
|
||||||
addSyntax(this::executeShowPath, ArgumentType.Literal("show_path"), argShowPathValue);
|
addSyntax(this::executeShowPath, ArgumentType.Literal("show_path"), argShowPathValue);
|
||||||
|
addSubcommand(new PuppeteerSubcommand());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void register() {
|
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