2021-06-11 14:02:28 +02:00
|
|
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
|
|
From: TwoLeggedCat <80929284+TwoLeggedCat@users.noreply.github.com>
|
|
|
|
Date: Sat, 29 May 2021 14:33:25 -0500
|
2021-07-07 21:58:54 +02:00
|
|
|
Subject: [PATCH] Line Of Sight Changes
|
2021-06-11 14:02:28 +02:00
|
|
|
|
|
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
2023-07-04 10:22:56 +02:00
|
|
|
index b9a2da15a49b1ddfd550ea26091990d495664484..80a59b869c898e40083607db5aa92115c7801010 100644
|
2021-06-11 14:02:28 +02:00
|
|
|
--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
|
|
|
+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java
|
2023-07-04 10:22:56 +02:00
|
|
|
@@ -3548,7 +3548,8 @@ public abstract class LivingEntity extends Entity implements Attackable {
|
2021-06-15 06:55:46 +02:00
|
|
|
Vec3 vec3d = new Vec3(this.getX(), this.getEyeY(), this.getZ());
|
|
|
|
Vec3 vec3d1 = new Vec3(entity.getX(), entity.getEyeY(), entity.getZ());
|
2021-06-11 14:02:28 +02:00
|
|
|
|
2023-06-08 04:04:01 +02:00
|
|
|
- return vec3d1.distanceTo(vec3d) > 128.0D ? false : this.level().clip(new ClipContext(vec3d, vec3d1, ClipContext.Block.COLLIDER, ClipContext.Fluid.NONE, this)).getType() == HitResult.Type.MISS;
|
2021-06-15 06:55:46 +02:00
|
|
|
+ // Paper - diff on change - used in CraftLivingEntity#hasLineOfSight(Location) and CraftWorld#lineOfSightExists
|
2023-06-08 04:04:01 +02:00
|
|
|
+ return vec3d1.distanceToSqr(vec3d) > 128D * 128D ? false : this.level().clip(new ClipContext(vec3d, vec3d1, ClipContext.Block.COLLIDER, ClipContext.Fluid.NONE, this)).getType() == HitResult.Type.MISS;
|
2021-06-15 06:55:46 +02:00
|
|
|
}
|
2021-06-11 14:02:28 +02:00
|
|
|
}
|
2021-07-07 21:58:54 +02:00
|
|
|
|
2022-06-05 22:51:44 +02:00
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java b/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java
|
2023-07-04 10:22:56 +02:00
|
|
|
index 5a17e89435a02c9b25e0891b83e82b2ed1ff8ee5..bb383c090ea6948a19cf8609b76ba517689b1562 100644
|
2022-06-05 22:51:44 +02:00
|
|
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java
|
|
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/CraftRegionAccessor.java
|
2023-06-13 01:51:45 +02:00
|
|
|
@@ -992,5 +992,16 @@ public abstract class CraftRegionAccessor implements RegionAccessor {
|
2022-06-05 22:51:44 +02:00
|
|
|
public org.bukkit.NamespacedKey getKey() {
|
|
|
|
return org.bukkit.craftbukkit.util.CraftNamespacedKey.fromMinecraft(this.getHandle().getLevel().dimension().location());
|
2021-06-11 14:02:28 +02:00
|
|
|
}
|
|
|
|
+
|
|
|
|
+ public boolean lineOfSightExists(Location from, Location to) {
|
2022-06-05 22:51:44 +02:00
|
|
|
+ Preconditions.checkArgument(from != null, "from parameter in lineOfSightExists cannot be null");
|
|
|
|
+ Preconditions.checkArgument(to != null, "to parameter in lineOfSightExists cannot be null");
|
2021-06-11 14:02:28 +02:00
|
|
|
+ if (from.getWorld() != to.getWorld()) return false;
|
2022-06-05 22:51:44 +02:00
|
|
|
+ net.minecraft.world.phys.Vec3 vec3d = new net.minecraft.world.phys.Vec3(from.getX(), from.getY(), from.getZ());
|
|
|
|
+ net.minecraft.world.phys.Vec3 vec3d1 = new net.minecraft.world.phys.Vec3(to.getX(), to.getY(), to.getZ());
|
2021-07-07 21:58:54 +02:00
|
|
|
+ if (vec3d1.distanceToSqr(vec3d) > 128D * 128D) return false; //Return early if the distance is greater than 128 blocks
|
2021-06-11 14:02:28 +02:00
|
|
|
+
|
2022-06-05 22:51:44 +02:00
|
|
|
+ return this.getHandle().clip(new net.minecraft.world.level.ClipContext(vec3d, vec3d1, net.minecraft.world.level.ClipContext.Block.COLLIDER, net.minecraft.world.level.ClipContext.Fluid.NONE, null)).getType() == net.minecraft.world.phys.HitResult.Type.MISS;
|
2021-06-11 14:02:28 +02:00
|
|
|
+ }
|
|
|
|
// Paper end
|
2022-06-05 22:51:44 +02:00
|
|
|
}
|
2021-06-11 14:02:28 +02:00
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
|
2023-07-04 10:22:56 +02:00
|
|
|
index af4d84e35c8f28589edbac9824d8a5770c60552b..afcf10fa6a4446698cd00ac94dded0f61297880c 100644
|
2021-06-11 14:02:28 +02:00
|
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
|
|
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
|
2023-07-04 10:22:56 +02:00
|
|
|
@@ -588,6 +588,18 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
|
2021-06-15 06:55:46 +02:00
|
|
|
return this.getHandle().hasLineOfSight(((CraftEntity) other).getHandle());
|
2021-06-11 14:02:28 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
+ // Paper start
|
|
|
|
+ @Override
|
|
|
|
+ public boolean hasLineOfSight(Location loc) {
|
2023-06-08 04:04:01 +02:00
|
|
|
+ if (this.getHandle().level() != ((CraftWorld) loc.getWorld()).getHandle()) return false;
|
2023-06-13 01:51:45 +02:00
|
|
|
+ net.minecraft.world.phys.Vec3 vec3d = new net.minecraft.world.phys.Vec3(this.getHandle().getX(), this.getHandle().getEyeY(), this.getHandle().getZ());
|
|
|
|
+ net.minecraft.world.phys.Vec3 vec3d1 = new net.minecraft.world.phys.Vec3(loc.getX(), loc.getY(), loc.getZ());
|
2021-07-07 21:58:54 +02:00
|
|
|
+ if (vec3d1.distanceToSqr(vec3d) > 128D * 128D) return false; //Return early if the distance is greater than 128 blocks
|
2021-06-11 14:02:28 +02:00
|
|
|
+
|
2023-06-13 01:51:45 +02:00
|
|
|
+ return this.getHandle().level().clip(new net.minecraft.world.level.ClipContext(vec3d, vec3d1, net.minecraft.world.level.ClipContext.Block.COLLIDER, net.minecraft.world.level.ClipContext.Fluid.NONE, this.getHandle())).getType() == net.minecraft.world.phys.HitResult.Type.MISS;
|
2021-06-11 14:02:28 +02:00
|
|
|
+ }
|
|
|
|
+ // Paper end
|
|
|
|
+
|
|
|
|
@Override
|
|
|
|
public boolean getRemoveWhenFarAway() {
|
2021-07-22 20:11:56 +02:00
|
|
|
return this.getHandle() instanceof Mob && !((Mob) this.getHandle()).isPersistenceRequired();
|