From ea014f7a77dbef4a486e13e576c76fae5a3c2b4e Mon Sep 17 00:00:00 2001 From: MC_XiaoHei Date: Sun, 24 Aug 2025 00:39:19 +0800 Subject: [PATCH] feat: add stuckEntityPoiRetryDelay config (#12949) Co-authored-by: Jake Potrebic --- .../minecraft/world/entity/ai/behavior/AcquirePoi.java.patch | 2 +- .../io/papermc/paper/configuration/WorldConfiguration.java | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/paper-server/patches/sources/net/minecraft/world/entity/ai/behavior/AcquirePoi.java.patch b/paper-server/patches/sources/net/minecraft/world/entity/ai/behavior/AcquirePoi.java.patch index 777259cb8..bdad605b3 100644 --- a/paper-server/patches/sources/net/minecraft/world/entity/ai/behavior/AcquirePoi.java.patch +++ b/paper-server/patches/sources/net/minecraft/world/entity/ai/behavior/AcquirePoi.java.patch @@ -4,7 +4,7 @@ return false; } else { mutableLong.setValue(time + 20L + level.getRandom().nextInt(20)); -+ if (mob.getNavigation().isStuck()) mutableLong.add(200); // Paper - Perf: Wait an additional 10s to check again if they're stuck // TODO Modifies Vanilla behavior, add config option ++ if (level.paperConfig().entities.behavior.stuckEntityPoiRetryDelay.enabled() && mob.getNavigation().isStuck()) mutableLong.add(level.paperConfig().entities.behavior.stuckEntityPoiRetryDelay.intValue()); // Paper - Next stuck check delay config PoiManager poiManager = level.getPoiManager(); map.long2ObjectEntrySet().removeIf(entry -> !entry.getValue().isStillValid(time)); Predicate predicate1 = pos -> { diff --git a/paper-server/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java b/paper-server/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java index 4a9740269..bd1f0ba48 100644 --- a/paper-server/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java +++ b/paper-server/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java @@ -31,6 +31,7 @@ import java.util.IdentityHashMap; import java.util.List; import java.util.Map; import java.util.OptionalDouble; +import java.util.OptionalInt; import java.util.function.Function; import java.util.stream.Collectors; import net.minecraft.Util; @@ -331,6 +332,8 @@ public class WorldConfiguration extends ConfigurationPart { @Comment("Adds a cooldown to bees being released after a failed release, which can occur if the hive is blocked or it being night.") public boolean cooldownFailedBeehiveReleases = true; + @Comment("The delay before retrying POI acquisition when entity navigation is stuck. This will reduce pathfinding performance impact. Measured in ticks.") + public IntOr.Disabled stuckEntityPoiRetryDelay = new IntOr.Disabled(OptionalInt.of(200)); } public TrackingRangeY trackingRangeY;