Update pathfinder

This commit is contained in:
fullwall 2020-08-13 12:54:45 +08:00
parent 9f3da308e3
commit 0656f9d6ad
3 changed files with 61 additions and 93 deletions

View File

@ -236,7 +236,7 @@ public class PlayerNavigation extends NavigationAbstract {
this.f = this.e;
this.g = var0;
}
if (this.c != null && !this.c.b()) {
if (this.c != null && !this.c.c()) {
BaseBlockPosition var1 = this.c.g();
if (var1.equals(this.h)) {
this.i += SystemUtils.getMonotonicMillis() - this.j;
@ -354,12 +354,12 @@ public class PlayerNavigation extends NavigationAbstract {
return;
if (a()) {
l();
} else if (this.c != null && this.c.f() < this.c.e()) {
} else if (this.c != null && !this.c.c()) {
Vec3D vec3D1 = b();
Vec3D vec3D2 = this.c.a(this.a, this.c.f());
Vec3D vec3D2 = this.c.a(this.a);
if (vec3D1.y > vec3D2.y && !this.a.isOnGround() && MathHelper.floor(vec3D1.x) == MathHelper.floor(vec3D2.x)
&& MathHelper.floor(vec3D1.z) == MathHelper.floor(vec3D2.z))
this.c.c(this.c.f() + 1);
this.c.a();
}
if (m())
return;
@ -503,7 +503,7 @@ public class PlayerNavigation extends NavigationAbstract {
if (var3.a(Blocks.CAULDRON)) {
this.c.a(var0, var1.a(var1.a, var1.b + 1, var1.c));
if (var2 != null && var1.b >= var2.b)
this.c.a(var0 + 1, var2.a(var2.a, var1.b + 1, var2.c));
this.c.a(var0 + 1, var1.a(var2.a, var1.b + 1, var2.c));
}
}
}

View File

@ -1,7 +1,6 @@
package net.citizensnpcs.nms.v1_16_R2.util;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Optional;
@ -65,64 +64,50 @@ public class PlayerPathfinder extends Pathfinder {
}
private PathEntity a(PathPoint var0, BlockPosition var1, boolean var2) {
List var3 = Lists.newArrayList();
List<PathPoint> var3 = Lists.newArrayList();
PathPoint var4 = var0;
var3.add(0, var0);
var3.add(0, var4);
while (var4.h != null) {
var4 = var4.h;
var3.add(0, var4);
}
return new PathEntity(var3, var1, var2);
}
private PathEntity a(PathPoint var0, Map var1, float var2, int var3, float var4) {
Set var5 = var1.keySet();
Set<PathDestination> var5 = var1.keySet();
var0.e = 0.0F;
var0.f = this.a(var0, var5);
var0.f = a(var0, var5);
var0.g = var0.f;
this.d.a();
this.d.a(var0);
Set var6 = ImmutableSet.of();
ImmutableSet immutableSet = ImmutableSet.of();
int var7 = 0;
Set<PathDestination> var8 = Sets.newHashSetWithExpectedSize(var5.size());
int var9 = (int) (this.b * var4);
while (!this.d.e()) {
++var7;
if (var7 >= var9) {
while (!this.d.e() && ++var7 < var9) {
PathPoint pathPoint = this.d.c();
pathPoint.i = true;
for (PathDestination pathDestination : var5) {
if (pathPoint.c(pathDestination) <= var3) {
pathDestination.e();
var8.add(pathDestination);
}
}
if (!var8.isEmpty())
break;
}
PathPoint var10 = this.d.c();
var10.i = true;
Iterator var12 = var5.iterator();
while (var12.hasNext()) {
PathDestination var122 = (PathDestination) var12.next();
if (var10.c(var122) <= var3) {
var122.e();
var8.add(var122);
}
}
if (!var8.isEmpty()) {
break;
}
if (var10.a(var0) < var2) {
int var11 = this.c.a(this.a, var10);
for (int var12i = 0; var12i < var11; ++var12i) {
PathPoint var13 = this.a[var12i];
float var14 = var10.a(var13);
var13.j = var10.j + var14;
float var15 = var10.e + var14 + var13.k;
if (pathPoint.a(var0) >= var2)
continue;
int i = this.c.a(this.a, pathPoint);
for (int var12 = 0; var12 < i; var12++) {
PathPoint var13 = this.a[var12];
float var14 = pathPoint.a(var13);
pathPoint.j += var14;
float var15 = pathPoint.e + var14 + var13.k;
if (var13.j < var2 && (!var13.c() || var15 < var13.e)) {
var13.h = var10;
var13.h = pathPoint;
var13.e = var15;
var13.f = this.a(var13, var5) * 1.5F;
var13.f = a(var13, var5) * 1.5F;
if (var13.c()) {
this.d.a(var13, var13.e + var13.f);
} else {
@ -132,7 +117,6 @@ public class PlayerPathfinder extends Pathfinder {
}
}
}
}
Optional var10 = !var8.isEmpty() ? var8.stream().map((var1x) -> {
return this.a(var1x.d(), (BlockPosition) var1.get(var1x), true);
}).min(Comparator.comparingInt(PathEntity::e)) : getFallbackDestinations(var1, var5).findFirst();
@ -144,16 +128,13 @@ public class PlayerPathfinder extends Pathfinder {
}
}
private float a(PathPoint var0, Set var1) {
private float a(PathPoint var0, Set<PathDestination> var1) {
float var2 = Float.MAX_VALUE;
float var5;
for (Iterator var4 = var1.iterator(); var4.hasNext(); var2 = Math.min(var5, var2)) {
PathDestination var44 = (PathDestination) var4.next();
var5 = var0.a(var44);
var44.a(var5, var0);
for (PathDestination var4 : var1) {
float var5 = var0.a(var4);
var4.a(var5, var0);
var2 = Math.min(var5, var2);
}
return var2;
}

View File

@ -115,7 +115,7 @@ public class PlayerPathfinderNormal extends PlayerPathfinderAbstract {
if (var4.a(var15) >= var4.a(var13))
var13 = var15;
}
if (var11 == PathType.OPEN && var4.a(var13) == 0.0F)
if (var11 == PathType.OPEN && var4.a(var13) == 0.0F && var5 <= 1)
return PathType.OPEN;
return var13;
}
@ -209,47 +209,35 @@ public class PlayerPathfinderNormal extends PlayerPathfinderAbstract {
}
}
if (var12 == PathType.OPEN) {
AxisAlignedBB var16 = new AxisAlignedBB(var0 - var14 + 0.5D, var1 + 0.001D, var2 - var14 + 0.5D,
var0 + var14 + 0.5D, (var1 + this.b.getHeight()), var2 + var14 + 0.5D);
if (a(var16))
return null;
if (this.b.getWidth() >= 1.0F) {
PathType pathType = a(this.b, var0, var1 - 1, var2);
if (pathType == PathType.BLOCKED) {
var8 = a(var0, var1, var2);
var8.l = PathType.WALKABLE;
var8.k = Math.max(var8.k, var13);
return var8;
}
}
int var17 = 0;
int var18 = var1;
int var16 = 0;
int var17 = var1;
while (var12 == PathType.OPEN) {
var1--;
if (var1 < 0) {
PathPoint pathPoint = a(var0, var18, var2);
pathPoint.l = PathType.BLOCKED;
pathPoint.k = -1.0F;
return pathPoint;
PathPoint var18 = a(var0, var17, var2);
var18.l = PathType.BLOCKED;
var18.k = -1.0F;
return var18;
}
PathPoint var19 = a(var0, var1, var2);
if (var17++ >= this.b.bO()) {
var19.l = PathType.BLOCKED;
var19.k = -1.0F;
return var19;
if (var16++ >= this.b.bO()) {
PathPoint var18 = a(var0, var1, var2);
var18.l = PathType.BLOCKED;
var18.k = -1.0F;
return var18;
}
var12 = a(this.b, var0, var1, var2);
var13 = this.b.a(var12);
if (var12 != PathType.OPEN && var13 >= 0.0F) {
var8 = var19;
var8 = a(var0, var1, var2);
var8.l = var12;
var8.k = Math.max(var8.k, var13);
break;
}
if (var13 < 0.0F) {
var19.l = PathType.BLOCKED;
var19.k = -1.0F;
return var19;
PathPoint var18 = a(var0, var1, var2);
var18.l = PathType.BLOCKED;
var18.k = -1.0F;
return var18;
}
}
}
@ -286,6 +274,8 @@ public class PlayerPathfinderNormal extends PlayerPathfinderAbstract {
return false;
if (var2.b > var0.b || var1.b > var0.b)
return false;
if (var1.l == PathType.WALKABLE_DOOR || var2.l == PathType.WALKABLE_DOOR || var3.l == PathType.WALKABLE_DOOR)
return false;
boolean var4 = (var2.l == PathType.FENCE && var1.l == PathType.FENCE && this.b.getWidth() < 0.5D);
return (var3.k >= 0.0F && (var2.b < var0.b || var2.k >= 0.0F || var4)
&& (var1.b < var0.b || var1.k >= 0.0F || var4));
@ -418,11 +408,8 @@ public class PlayerPathfinderNormal extends PlayerPathfinderAbstract {
return PathType.DANGER_OTHER;
if (a(var9))
return PathType.DANGER_FIRE;
Fluid var10 = var0.getFluid(var1);
if (var10.a(TagsFluid.WATER))
if (var0.getFluid(var1).a(TagsFluid.WATER))
return PathType.WATER_BORDER;
if (var10.a(TagsFluid.LAVA))
return PathType.LAVA;
}
}
}
@ -431,7 +418,7 @@ public class PlayerPathfinderNormal extends PlayerPathfinderAbstract {
}
private static boolean a(IBlockData var0) {
return (var0.a(TagsBlock.FIRE) || var0.a(Blocks.MAGMA_BLOCK) || BlockCampfire.g(var0));
return (var0.a(TagsBlock.FIRE) || var0.a(Blocks.LAVA) || var0.a(Blocks.MAGMA_BLOCK) || BlockCampfire.g(var0));
}
public static double aa(IBlockAccess var0, BlockPosition var1) {