Yatopia/patches/server/0045-Rewrite-the-PathfinderGoalSelector-class.patch
2020-03-06 21:03:01 +01:00

139 lines
4.4 KiB
Diff

From af216c33212a285dbcb0b6255c568d005d91de43 Mon Sep 17 00:00:00 2001
From: tr7zw <tr7zw@live.de>
Date: Fri, 6 Mar 2020 20:28:47 +0100
Subject: [PATCH] Rewrite the PathfinderGoalSelector class
---
.../server/PathfinderGoalSelector.java | 79 +++++++++++++++++--
1 file changed, 72 insertions(+), 7 deletions(-)
diff --git a/src/main/java/net/minecraft/server/PathfinderGoalSelector.java b/src/main/java/net/minecraft/server/PathfinderGoalSelector.java
index 935136771..8e5b944b2 100644
--- a/src/main/java/net/minecraft/server/PathfinderGoalSelector.java
+++ b/src/main/java/net/minecraft/server/PathfinderGoalSelector.java
@@ -1,9 +1,14 @@
package net.minecraft.server;
import com.google.common.collect.Sets;
+
+import net.minecraft.server.PathfinderGoal.Type;
+
import java.util.EnumMap;
import java.util.EnumSet;
+import java.util.Iterator;
import java.util.Map;
+import java.util.Map.Entry;
import java.util.Set;
import java.util.stream.Stream;
import org.apache.logging.log4j.LogManager;
@@ -58,9 +63,16 @@ public class PathfinderGoalSelector {
// Paper end
public void a(PathfinderGoal pathfindergoal) {
- this.d.stream().filter((pathfindergoalwrapped) -> {
+ // YAPFA start
+ for(PathfinderGoalWrapped goal : this.d) {
+ if(goal.j() == pathfindergoal && goal.g()) {
+ goal.d();
+ }
+ }
+ /*this.d.stream().filter((pathfindergoalwrapped) -> {
return pathfindergoalwrapped.j() == pathfindergoal;
- }).filter(PathfinderGoalWrapped::g).forEach(PathfinderGoalWrapped::d);
+ }).filter(PathfinderGoalWrapped::g).forEach(PathfinderGoalWrapped::d);*/
+ // YAPFA end
this.d.removeIf((pathfindergoalwrapped) -> {
return pathfindergoalwrapped.j() == pathfindergoal;
});
@@ -68,7 +80,24 @@ public class PathfinderGoalSelector {
public void doTick() {
this.e.enter("goalCleanup");
- this.c().filter((pathfindergoalwrapped) -> {
+ // YAPFA start
+ for (PathfinderGoalWrapped goal : this.d) {
+ if (goal.g() && !goal.b()) {
+ boolean flag = true;
+
+ for(Type t : goal.i()) {
+ if(this.f.contains(t)) {
+ flag = false;
+ }
+ }
+
+ if (flag) {
+ goal.d();
+ }
+ }
+ }
+ this.c.entrySet().removeIf(ent -> !ent.getValue().g());
+ /*this.c().filter((pathfindergoalwrapped) -> {
boolean flag;
if (pathfindergoalwrapped.g()) {
@@ -90,10 +119,38 @@ public class PathfinderGoalSelector {
this.c.remove(pathfindergoal_type);
}
- });
+ });*/
+ // YAPFA end
this.e.exit();
this.e.enter("goalUpdate");
- this.d.stream().filter((pathfindergoalwrapped) -> {
+ // YAPFA start
+ for(PathfinderGoalWrapped goal : this.d) {
+ if(!goal.g() && goal.a()) {
+ boolean noneMatch = true;
+ for(Type t : goal.i()) {
+ if(this.f.contains(t)) {
+ noneMatch = false;
+ }
+ }
+ if(noneMatch) {
+ boolean allMatch = true;
+ for(Type t : goal.i()) {
+ if(!this.c.getOrDefault(t, PathfinderGoalSelector.b).a(goal)){
+ allMatch = false;
+ }
+ }
+ if(allMatch) {
+ for(Type t : goal.i()) {
+ PathfinderGoalWrapped pathfindergoalwrapped1 = (PathfinderGoalWrapped) this.c.getOrDefault(t, PathfinderGoalSelector.b);
+ pathfindergoalwrapped1.d();
+ this.c.put(t, goal);
+ }
+ goal.c();
+ }
+ }
+ }
+ }
+ /*this.d.stream().filter((pathfindergoalwrapped) -> {
return !pathfindergoalwrapped.g();
}).filter((pathfindergoalwrapped) -> {
Stream stream = pathfindergoalwrapped.i().stream();
@@ -113,10 +170,18 @@ public class PathfinderGoalSelector {
this.c.put(pathfindergoal_type, pathfindergoalwrapped);
});
pathfindergoalwrapped.c();
- });
+ });*/
+ // YAPFA end
this.e.exit();
this.e.enter("goalTick");
- this.c().forEach(PathfinderGoalWrapped::e);
+ // YAPFA start
+ for(PathfinderGoalWrapped goal : this.d) {
+ if(goal.g()) {
+ goal.e();
+ }
+ }
+ //this.c().forEach(PathfinderGoalWrapped::e);
+ // YAPFA end
this.e.exit();
}
--
2.25.1.windows.1