aboutsummaryrefslogtreecommitdiffhomepage
path: root/Spigot-Server-Patches/0467-Optimize-Pathfinding.patch
diff options
context:
space:
mode:
Diffstat (limited to 'Spigot-Server-Patches/0467-Optimize-Pathfinding.patch')
-rw-r--r--Spigot-Server-Patches/0467-Optimize-Pathfinding.patch53
1 files changed, 53 insertions, 0 deletions
diff --git a/Spigot-Server-Patches/0467-Optimize-Pathfinding.patch b/Spigot-Server-Patches/0467-Optimize-Pathfinding.patch
new file mode 100644
index 0000000000..b06ced5912
--- /dev/null
+++ b/Spigot-Server-Patches/0467-Optimize-Pathfinding.patch
@@ -0,0 +1,53 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Aikar <[email protected]>
+Date: Thu, 3 Mar 2016 02:02:07 -0600
+Subject: [PATCH] Optimize Pathfinding
+
+Prevents pathfinding from spamming failures for things such as
+arrow attacks.
+
+diff --git a/src/main/java/net/minecraft/server/NavigationAbstract.java b/src/main/java/net/minecraft/server/NavigationAbstract.java
+index f06764973feaa29ccbb4731b65372c544dcf3032..dc32107ec320fa54487f24c9d68ff8e5a6dea1bb 100644
+--- a/src/main/java/net/minecraft/server/NavigationAbstract.java
++++ b/src/main/java/net/minecraft/server/NavigationAbstract.java
+@@ -11,7 +11,7 @@ public abstract class NavigationAbstract {
+ protected final EntityInsentient a; public Entity getEntity() { return a; } // Paper - OBFHELPER
+ protected final World b;
+ @Nullable
+- protected PathEntity c;
++ protected PathEntity c; protected final PathEntity getCurrentPath() { return this.c; } // Paper - OBFHELPER
+ protected double d;
+ private final AttributeInstance p;
+ protected int e;
+@@ -158,10 +158,30 @@ public abstract class NavigationAbstract {
+ return this.a(this.a(d0, d1, d2, 1), d3);
+ }
+
++ // Paper start - optimise pathfinding
++ private int lastFailure = 0;
++ private int pathfindFailures = 0;
++ // Paper end
++
+ public boolean a(Entity entity, double d0) {
++ // Paper start - Pathfinding optimizations
++ if (this.pathfindFailures > 10 && this.getCurrentPath() == null && MinecraftServer.currentTick < this.lastFailure + 40) {
++ return false;
++ }
++ // Paper end
+ PathEntity pathentity = this.a(entity, 1);
+
+- return pathentity != null && this.a(pathentity, d0);
++ // Paper start - Pathfinding optimizations
++ if (pathentity != null && this.a(pathentity, d0)) {
++ this.lastFailure = 0;
++ this.pathfindFailures = 0;
++ return true;
++ } else {
++ this.pathfindFailures++;
++ this.lastFailure = MinecraftServer.currentTick;
++ return false;
++ }
++ // Paper end
+ }
+
+ public boolean setDestination(@Nullable PathEntity pathentity, double speed) { return a(pathentity, speed); } // Paper - OBFHELPER