Skip to content

Commit

Permalink
Add random radius pathfinding command
Browse files Browse the repository at this point in the history
  • Loading branch information
AlexProgrammerDE committed Feb 23, 2024
1 parent 70f068f commit 6725c0c
Showing 1 changed file with 64 additions and 32 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ThreadLocalRandom;
import java.util.function.ToIntFunction;
import javax.annotation.PostConstruct;
import javax.imageio.ImageIO;
Expand Down Expand Up @@ -142,6 +143,35 @@ public void postConstruct() {
// Pathfinding
dispatcher.register(
literal("walk")
.then(
literal("radius")
.then(
argument("size", IntegerArgumentType.integer())
.executes(
help(
"Makes all connected bots walk to a random xz position within the radius",
c -> {
var radius = IntegerArgumentType.getInteger(c, "radius");

return forEveryBot(
c,
bot -> {
var random = ThreadLocalRandom.current();
var pos = bot.sessionDataManager().clientEntity().pos();
var x =
random.nextInt(
pos.getFloorX() - radius,
pos.getFloorX() + radius);
var z =
random.nextInt(
pos.getFloorZ() - radius,
pos.getFloorZ() + radius);

executePathfinding(bot, new XZGoal(x, z));

return Command.SINGLE_SUCCESS;
});
}))))
.then(
argument("y", IntegerArgumentType.integer())
.executes(
Expand Down Expand Up @@ -677,42 +707,44 @@ public int executePathfinding(CommandContext<ConsoleSubject> context, GoalScorer
return forEveryBot(
context,
bot -> {
var logger = bot.logger();
var executorService = bot.executorManager().newExecutorService(bot, "PathfindingManager");
executorService.execute(
() -> {
var sessionDataManager = bot.sessionDataManager();
var clientEntity = sessionDataManager.clientEntity();
var routeFinder =
new RouteFinder(new MinecraftGraph(sessionDataManager.tagsState()), goalScorer);

Boolean2ObjectFunction<List<WorldAction>> findPath =
requiresRepositioning -> {
var start =
BotEntityState.initialState(
clientEntity,
new ProjectedLevelState(
Objects.requireNonNull(
sessionDataManager.getCurrentLevel(), "Level is null!")
.chunks()
.immutableCopy()),
new ProjectedInventory(
sessionDataManager.inventoryManager().playerInventory()));
logger.info("Starting calculations at: {}", start);
var actions = routeFinder.findRoute(start, requiresRepositioning);
logger.info("Calculated path with {} actions: {}", actions.size(), actions);
return actions;
};

var pathExecutor =
new PathExecutor(bot, findPath.get(true), findPath, executorService);
pathExecutor.register();
});

executePathfinding(bot, goalScorer);
return Command.SINGLE_SUCCESS;
});
}

public void executePathfinding(BotConnection bot, GoalScorer goalScorer) {
var logger = bot.logger();
var executorService = bot.executorManager().newExecutorService(bot, "PathfindingManager");
executorService.execute(
() -> {
var sessionDataManager = bot.sessionDataManager();
var clientEntity = sessionDataManager.clientEntity();
var routeFinder =
new RouteFinder(new MinecraftGraph(sessionDataManager.tagsState()), goalScorer);

Boolean2ObjectFunction<List<WorldAction>> findPath =
requiresRepositioning -> {
var start =
BotEntityState.initialState(
clientEntity,
new ProjectedLevelState(
Objects.requireNonNull(
sessionDataManager.getCurrentLevel(), "Level is null!")
.chunks()
.immutableCopy()),
new ProjectedInventory(
sessionDataManager.inventoryManager().playerInventory()));
logger.info("Starting calculations at: {}", start);
var actions = routeFinder.findRoute(start, requiresRepositioning);
logger.info("Calculated path with {} actions: {}", actions.size(), actions);
return actions;
};

var pathExecutor = new PathExecutor(bot, findPath.get(true), findPath, executorService);
pathExecutor.register();
});
}

public List<Map.Entry<Instant, String>> getCommandHistory() {
synchronized (commandHistory) {
return List.copyOf(commandHistory);
Expand Down

0 comments on commit 6725c0c

Please sign in to comment.