From 8aeb4c9c3f52fae23ebcca07e5d1a934dc774372 Mon Sep 17 00:00:00 2001 From: Andrew Steinborn Date: Tue, 19 Jan 2021 17:51:14 -0500 Subject: [PATCH] Correctly skip pathfinder ticks for inactive entities (#5085) Fixes #5083 --- .../0401-Entity-Activation-Range-2.0.patch | 22 ++++++++----------- ...34-Remove-streams-from-Mob-AI-System.patch | 8 +++---- .../0465-Implement-Mob-Goal-API.patch | 6 ++--- 3 files changed, 16 insertions(+), 20 deletions(-) diff --git a/Spigot-Server-Patches/0401-Entity-Activation-Range-2.0.patch b/Spigot-Server-Patches/0401-Entity-Activation-Range-2.0.patch index fd9d43cae0..e62bfe66bb 100644 --- a/Spigot-Server-Patches/0401-Entity-Activation-Range-2.0.patch +++ b/Spigot-Server-Patches/0401-Entity-Activation-Range-2.0.patch @@ -14,7 +14,7 @@ Adds flying monsters to control ghast and phantoms Adds villagers as separate config diff --git a/src/main/java/net/minecraft/server/Entity.java b/src/main/java/net/minecraft/server/Entity.java -index 53868afe6b8f7161a2fe30c23195e37cf00193a3..2b0b8d975504850894cd25dc907eb522b4e9830f 100644 +index e8e6e3ed5fa5aed6160e667142a244a39078c479..2b06163358827e0773969226d8f77e6e0ba0ca3d 100644 --- a/src/main/java/net/minecraft/server/Entity.java +++ b/src/main/java/net/minecraft/server/Entity.java @@ -163,7 +163,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, Ke @@ -85,7 +85,7 @@ index 68f1a101174f4a2f7ab5556a5b733f75f3a7802f..4757e5a92c9cf04fa52d62bac6dae782 protected EntityCreature(EntityTypes entitytypes, World world) { super(entitytypes, world); diff --git a/src/main/java/net/minecraft/server/EntityInsentient.java b/src/main/java/net/minecraft/server/EntityInsentient.java -index d91503b3e46c6ded3d77da4feeb8350df5bf924c..dcc5b098bfe36ef7ee8536b3da65c4ce1748c9d8 100644 +index 800a8dd2543f0b83eec67e780510427467649d5d..73ceb0f14610fe1d4d55542dad957b1fdf9f8e04 100644 --- a/src/main/java/net/minecraft/server/EntityInsentient.java +++ b/src/main/java/net/minecraft/server/EntityInsentient.java @@ -47,7 +47,7 @@ public abstract class EntityInsentient extends EntityLiving { @@ -118,7 +118,7 @@ index d91503b3e46c6ded3d77da4feeb8350df5bf924c..dcc5b098bfe36ef7ee8536b3da65c4ce if (this.isPassenger() && this.getVehicle() instanceof EntityInsentient) { EntityInsentient entityinsentient = (EntityInsentient) this.getVehicle(); diff --git a/src/main/java/net/minecraft/server/EntityLiving.java b/src/main/java/net/minecraft/server/EntityLiving.java -index 5efb7b990acc92801ee32a0a462f92f7c08ee2b1..3c16a28a8f2113ed6cf54c06421bde7b7dcf50c1 100644 +index eb712c7f4e5ef0c87a85b055a2db3b30fee8604f..0d04144d07bcba2fb4f79fbecfefb27beacba654 100644 --- a/src/main/java/net/minecraft/server/EntityLiving.java +++ b/src/main/java/net/minecraft/server/EntityLiving.java @@ -98,7 +98,7 @@ public abstract class EntityLiving extends Entity { @@ -280,7 +280,7 @@ index 9b0511e996a5e3952c6f975e7c93299c532a8ea1..8bd75b8243590fcddd0e330a7276c03a } } diff --git a/src/main/java/net/minecraft/server/PathfinderGoalSelector.java b/src/main/java/net/minecraft/server/PathfinderGoalSelector.java -index 482ce2cd8123252110508e8e03aa65afdd533e0a..b18e53220d8dbd50723c4201231091cbe4f4119a 100644 +index 482ce2cd8123252110508e8e03aa65afdd533e0a..2926c98d1f94a4879d21ba7b507755b0573fb05a 100644 --- a/src/main/java/net/minecraft/server/PathfinderGoalSelector.java +++ b/src/main/java/net/minecraft/server/PathfinderGoalSelector.java @@ -25,10 +25,11 @@ public class PathfinderGoalSelector { @@ -297,18 +297,14 @@ index 482ce2cd8123252110508e8e03aa65afdd533e0a..b18e53220d8dbd50723c4201231091cb public PathfinderGoalSelector(Supplier supplier) { this.e = supplier; -@@ -38,6 +39,25 @@ public class PathfinderGoalSelector { +@@ -38,6 +39,21 @@ public class PathfinderGoalSelector { this.d.add(new PathfinderGoalWrapped(i, pathfindergoal)); } + // Paper start + public boolean inactiveTick() { -+ if (getCurRate() % getTickRate() != 0) { -+ incRate(); -+ return false; -+ } else { -+ return true; -+ } ++ incRate(); ++ return getCurRate() % getTickRate() == 0; + } + public boolean hasTasks() { + for (PathfinderGoalWrapped task : getTasks()) { @@ -336,7 +332,7 @@ index 182cd7e9110408fff9909ef362d368d055a2b167..f3df10587e652d3a26d15deb09304b97 return this.c; } diff --git a/src/main/java/net/minecraft/server/World.java b/src/main/java/net/minecraft/server/World.java -index 67a38ed5ec173ece6f072540b9fbb47400bb5af0..3b0b86bd33601f741850047e3fe0b6022bc1095b 100644 +index 2fa1cd43a8a7b083cd1522c32716d21dee922c46..6a067e4db344ca5fc446650722db7118fa5127a2 100644 --- a/src/main/java/net/minecraft/server/World.java +++ b/src/main/java/net/minecraft/server/World.java @@ -82,6 +82,12 @@ public abstract class World implements GeneratorAccess, AutoCloseable { @@ -353,7 +349,7 @@ index 67a38ed5ec173ece6f072540b9fbb47400bb5af0..3b0b86bd33601f741850047e3fe0b602 public final org.spigotmc.SpigotWorldConfig spigotConfig; // Spigot diff --git a/src/main/java/net/minecraft/server/WorldServer.java b/src/main/java/net/minecraft/server/WorldServer.java -index a06a9c4a50acdad951da3a95d0c46cf9766164c1..c345729675c76c5cd02a469283ed668a2df52816 100644 +index 15d68e08a51ae83ae4a8031f47d512b7c89deae0..7d17623989cb601a99195d6d1b0c6c2b29fd3c3f 100644 --- a/src/main/java/net/minecraft/server/WorldServer.java +++ b/src/main/java/net/minecraft/server/WorldServer.java @@ -747,17 +747,17 @@ public class WorldServer extends World implements GeneratorAccessSeed { diff --git a/Spigot-Server-Patches/0434-Remove-streams-from-Mob-AI-System.patch b/Spigot-Server-Patches/0434-Remove-streams-from-Mob-AI-System.patch index a2076fc9bf..3df2a800cd 100644 --- a/Spigot-Server-Patches/0434-Remove-streams-from-Mob-AI-System.patch +++ b/Spigot-Server-Patches/0434-Remove-streams-from-Mob-AI-System.patch @@ -53,7 +53,7 @@ index b132cb42da9a733e46fe9059258db7b77f811b3b..42b690b9215d82346990d93a5cead727 public static enum Type { diff --git a/src/main/java/net/minecraft/server/PathfinderGoalSelector.java b/src/main/java/net/minecraft/server/PathfinderGoalSelector.java -index b18e53220d8dbd50723c4201231091cbe4f4119a..22f4fec58fbaab24673dd418700c51671248c510 100644 +index 2926c98d1f94a4879d21ba7b507755b0573fb05a..3343e2df9dd8a66fd7678ce13000177d1f3b564b 100644 --- a/src/main/java/net/minecraft/server/PathfinderGoalSelector.java +++ b/src/main/java/net/minecraft/server/PathfinderGoalSelector.java @@ -1,8 +1,10 @@ @@ -77,7 +77,7 @@ index b18e53220d8dbd50723c4201231091cbe4f4119a..22f4fec58fbaab24673dd418700c5167 private int g = 3;private int getTickRate() { return g; } // Paper - OBFHELPER private int curRate;private int getCurRate() { return curRate; } private void incRate() { this.curRate++; } // Paper TODO -@@ -59,35 +62,38 @@ public class PathfinderGoalSelector { +@@ -55,35 +58,38 @@ public class PathfinderGoalSelector { // Paper end public void a(PathfinderGoal pathfindergoal) { @@ -138,7 +138,7 @@ index b18e53220d8dbd50723c4201231091cbe4f4119a..22f4fec58fbaab24673dd418700c5167 this.c.forEach((pathfindergoal_type, pathfindergoalwrapped) -> { if (!pathfindergoalwrapped.g()) { this.c.remove(pathfindergoal_type); -@@ -96,30 +102,58 @@ public class PathfinderGoalSelector { +@@ -92,30 +98,58 @@ public class PathfinderGoalSelector { }); gameprofilerfiller.exit(); gameprofilerfiller.enter("goalUpdate"); @@ -219,7 +219,7 @@ index b18e53220d8dbd50723c4201231091cbe4f4119a..22f4fec58fbaab24673dd418700c5167 gameprofilerfiller.exit(); } -@@ -128,11 +162,11 @@ public class PathfinderGoalSelector { +@@ -124,11 +158,11 @@ public class PathfinderGoalSelector { } public void a(PathfinderGoal.Type pathfindergoal_type) { diff --git a/Spigot-Server-Patches/0465-Implement-Mob-Goal-API.patch b/Spigot-Server-Patches/0465-Implement-Mob-Goal-API.patch index bc04639c99..38cd9dfa35 100644 --- a/Spigot-Server-Patches/0465-Implement-Mob-Goal-API.patch +++ b/Spigot-Server-Patches/0465-Implement-Mob-Goal-API.patch @@ -819,7 +819,7 @@ index 42b690b9215d82346990d93a5cead727b1fa10ab..f103b6630e3d00a4e1a514495c272411 private Type() {} } diff --git a/src/main/java/net/minecraft/server/PathfinderGoalSelector.java b/src/main/java/net/minecraft/server/PathfinderGoalSelector.java -index 22f4fec58fbaab24673dd418700c51671248c510..d3f0327a2a7cdedf3fe8d10df981a9f1cb378d26 100644 +index 3343e2df9dd8a66fd7678ce13000177d1f3b564b..9cad895c7d008487ce885cbcc2c3966645df4c19 100644 --- a/src/main/java/net/minecraft/server/PathfinderGoalSelector.java +++ b/src/main/java/net/minecraft/server/PathfinderGoalSelector.java @@ -27,7 +27,7 @@ public class PathfinderGoalSelector { @@ -840,7 +840,7 @@ index 22f4fec58fbaab24673dd418700c51671248c510..d3f0327a2a7cdedf3fe8d10df981a9f1 this.d.add(new PathfinderGoalWrapped(i, pathfindergoal)); } -@@ -61,7 +61,7 @@ public class PathfinderGoalSelector { +@@ -57,7 +57,7 @@ public class PathfinderGoalSelector { } // Paper end @@ -849,7 +849,7 @@ index 22f4fec58fbaab24673dd418700c51671248c510..d3f0327a2a7cdedf3fe8d10df981a9f1 // Paper start - remove streams from pathfindergoalselector for (Iterator iterator = this.d.iterator(); iterator.hasNext();) { PathfinderGoalWrapped goalWrapped = iterator.next(); -@@ -157,6 +157,7 @@ public class PathfinderGoalSelector { +@@ -153,6 +153,7 @@ public class PathfinderGoalSelector { gameprofilerfiller.exit(); }