From abbb0d9ca0b1164d2fa720ba3e255d8f3ed2d6be Mon Sep 17 00:00:00 2001 From: someaddons <38401808+someaddons@users.noreply.github.com> Date: Sun, 12 Jan 2025 18:09:10 +0100 Subject: [PATCH] Reworked stuck handling, nonsafe destinations are now eligible for partials stuck handling. (#10588) Reworked stuck handling, nonsafe destinations are now eligible for partial stuck handling. Calling .stop on the navigator signals no further entity movement is desired, also reset stuck handling. Fixed a bug causing the stuck handler to not progress further than random moving(outside of global timeout tp) Fixed a bug where citizens started from a wrong position, when they were standing on the edge of a block Citizen info command no longer prints duplicate information, nor sends it to all OP. Now also displays stuck level. Citizen info command now allows teleporting to the displayed coordinates on click --- .../IDynamicHeuristicNavigator.java | 2 +- .../pathfinding/IMinecoloniesNavigator.java | 71 +++++++ .../api/entity/pathfinding/IStuckHandler.java | 15 +- .../citizencommands/CommandCitizenInfo.java | 94 +++++----- .../core/entity/ai/minimal/EntityAISleep.java | 2 +- .../ai/workers/AbstractEntityAIBasic.java | 6 +- .../entity/mobs/aitasks/RaiderWalkAI.java | 2 +- .../entity/pathfinding/PathfindingUtils.java | 31 +++- .../AbstractAdvancedPathNavigate.java | 22 +-- .../MinecoloniesAdvancedPathNavigate.java | 175 ++++++++++-------- .../navigation/PathingStuckHandler.java | 155 +++++++++------- .../pathfinding/pathjobs/AbstractPathJob.java | 2 +- 12 files changed, 355 insertions(+), 222 deletions(-) rename src/main/java/com/minecolonies/{core/entity/pathfinding/navigation => api/entity/pathfinding}/IDynamicHeuristicNavigator.java (78%) create mode 100644 src/main/java/com/minecolonies/api/entity/pathfinding/IMinecoloniesNavigator.java diff --git a/src/main/java/com/minecolonies/core/entity/pathfinding/navigation/IDynamicHeuristicNavigator.java b/src/main/java/com/minecolonies/api/entity/pathfinding/IDynamicHeuristicNavigator.java similarity index 78% rename from src/main/java/com/minecolonies/core/entity/pathfinding/navigation/IDynamicHeuristicNavigator.java rename to src/main/java/com/minecolonies/api/entity/pathfinding/IDynamicHeuristicNavigator.java index 19494a22014..af7960c7de2 100644 --- a/src/main/java/com/minecolonies/core/entity/pathfinding/navigation/IDynamicHeuristicNavigator.java +++ b/src/main/java/com/minecolonies/api/entity/pathfinding/IDynamicHeuristicNavigator.java @@ -1,4 +1,4 @@ -package com.minecolonies.core.entity.pathfinding.navigation; +package com.minecolonies.api.entity.pathfinding; /** * Interface for navigators which keep an internal heuristic mod diff --git a/src/main/java/com/minecolonies/api/entity/pathfinding/IMinecoloniesNavigator.java b/src/main/java/com/minecolonies/api/entity/pathfinding/IMinecoloniesNavigator.java new file mode 100644 index 00000000000..6f6543eb3c8 --- /dev/null +++ b/src/main/java/com/minecolonies/api/entity/pathfinding/IMinecoloniesNavigator.java @@ -0,0 +1,71 @@ +package com.minecolonies.api.entity.pathfinding; + +import com.minecolonies.core.entity.pathfinding.navigation.MinecoloniesAdvancedPathNavigate; +import com.minecolonies.core.entity.pathfinding.pathjobs.AbstractPathJob; +import com.minecolonies.core.entity.pathfinding.pathresults.PathResult; +import net.minecraft.core.BlockPos; +import net.minecraft.world.entity.Mob; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +/** + * Describes the Navigator used by minecolonies entities + */ +public interface IMinecoloniesNavigator +{ + /** + * Sets a new pathjob to execute + * + * @param job to run + * @param dest + * @param speedFactor + * @param safeDestination + * @param + * @return null or new pathresult + */ + @Nullable + PathResult setPathJob( + @NotNull AbstractPathJob job, + BlockPos dest, + double speedFactor, boolean safeDestination); + + /** + * Indirectly triggers a recalulation, by marking the navigator as done + */ + void recalc(); + + /** + * Returns the pathresult holding the current pathing task and result + * + * @return + */ + PathResult getPathResult(); + + /** + * Gets the safe destination the entity wants to travel to + * + * @return + */ + BlockPos getSafeDestination(); + + /** + * Gets the entity of the navigator + * + * @return + */ + Mob getOurEntity(); + + /** + * Pauses the navigator for X ticks from starting any new pathing tasks + * + * @param pauseTicks + */ + void setPauseTicks(int pauseTicks); + + /** + * Returns the stuck handler used by the navigator + * + * @return + */ + IStuckHandler getStuckHandler(); +} diff --git a/src/main/java/com/minecolonies/api/entity/pathfinding/IStuckHandler.java b/src/main/java/com/minecolonies/api/entity/pathfinding/IStuckHandler.java index ff9d5b2b48a..a416778b4d2 100644 --- a/src/main/java/com/minecolonies/api/entity/pathfinding/IStuckHandler.java +++ b/src/main/java/com/minecolonies/api/entity/pathfinding/IStuckHandler.java @@ -1,16 +1,25 @@ package com.minecolonies.api.entity.pathfinding; -import com.minecolonies.core.entity.pathfinding.navigation.AbstractAdvancedPathNavigate; +import net.minecraft.world.entity.ai.navigation.PathNavigation; /** * Stuck handler for pathing, gets called to check/deal with stuck status */ -public interface IStuckHandler +public interface IStuckHandler