diff --git a/nPaper-Server/src/main/java/net/minecraft/server/EntityLiving.java b/nPaper-Server/src/main/java/net/minecraft/server/EntityLiving.java index f0e077a1..89636a70 100644 --- a/nPaper-Server/src/main/java/net/minecraft/server/EntityLiving.java +++ b/nPaper-Server/src/main/java/net/minecraft/server/EntityLiving.java @@ -1735,7 +1735,8 @@ public void receive(Entity entity, int i) { } public boolean hasLineOfSight(Entity entity) { - return this.world.a(Vec3D.a(this.locX, this.locY + (double) this.getHeadHeight(), this.locZ), Vec3D.a(entity.locX, entity.locY + (double) entity.getHeadHeight(), entity.locZ)) == null; + final Vec3D vec = new Vec3D(this.locX, this.locY + (double) this.getHeadHeight(), this.locZ); + return this.world.rayTrace(vec, new Vec3D(entity.locX, entity.locY + (double) this.getHeadHeight(), entity.locZ)) == null; } public Vec3D ag() { diff --git a/nPaper-Server/src/main/java/net/minecraft/server/EntityPlayer.java b/nPaper-Server/src/main/java/net/minecraft/server/EntityPlayer.java index 29541963..38ac23ea 100644 --- a/nPaper-Server/src/main/java/net/minecraft/server/EntityPlayer.java +++ b/nPaper-Server/src/main/java/net/minecraft/server/EntityPlayer.java @@ -1128,6 +1128,21 @@ public void setPlayerWeather(WeatherType type, boolean plugin) { } } + // Rinny - fix out of sight bug https://user-images.githubusercontent.com/127549897/224417820-bcf20d93-cb31-447e-9c55-5b0e513fb4b8.mp4 + @Override + public boolean hasLineOfSight(Entity entity) { + final Vec3D vec = new Vec3D(this.locX, this.locY + (double) this.getHeadHeight(), this.locZ); + final double entityHeadHeight = entity.getHeadHeight(); + + for (int i = 1; i <= 3; i++) { + double targetY = entity.locY + (entityHeadHeight / 3) * i; + if (this.world.rayTrace(vec, new Vec3D(entity.locX, targetY, entity.locZ)) == null) { + return true; + } + } + return false; + } + public void resetPlayerWeather() { this.weather = null; this.setPlayerWeather(this.world.getWorldData().hasStorm() ? WeatherType.DOWNFALL : WeatherType.CLEAR, false);