aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0285-Prevent-rayTrace-from-loading-chunks.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/server/0285-Prevent-rayTrace-from-loading-chunks.patch')
-rw-r--r--patches/server/0285-Prevent-rayTrace-from-loading-chunks.patch29
1 files changed, 29 insertions, 0 deletions
diff --git a/patches/server/0285-Prevent-rayTrace-from-loading-chunks.patch b/patches/server/0285-Prevent-rayTrace-from-loading-chunks.patch
new file mode 100644
index 0000000000..dd9d69d953
--- /dev/null
+++ b/patches/server/0285-Prevent-rayTrace-from-loading-chunks.patch
@@ -0,0 +1,29 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Aikar <[email protected]>
+Date: Mon, 26 Nov 2018 19:21:58 -0500
+Subject: [PATCH] Prevent rayTrace from loading chunks
+
+ray tracing into an unloaded chunk should be treated as a miss
+this saves a ton of lag for when AI tries to raytrace near unloaded chunks.
+
+diff --git a/src/main/java/net/minecraft/world/level/BlockGetter.java b/src/main/java/net/minecraft/world/level/BlockGetter.java
+index 8a979600b49e8a11982577fb6dd79503e2521a0f..bca0838e40bc91d78e9b93df5318642d1c9f341e 100644
+--- a/src/main/java/net/minecraft/world/level/BlockGetter.java
++++ b/src/main/java/net/minecraft/world/level/BlockGetter.java
+@@ -75,7 +75,15 @@ public interface BlockGetter extends LevelHeightAccessor {
+
+ // CraftBukkit start - moved block handling into separate method for use by Block#rayTrace
+ default BlockHitResult clip(ClipContext raytrace1, BlockPos blockposition) {
+- BlockState iblockdata = this.getBlockState(blockposition);
++ // Paper start - Prevent raytrace from loading chunks
++ BlockState iblockdata = this.getBlockStateIfLoaded(blockposition);
++ if (iblockdata == null) {
++ // copied the last function parameter (listed below)
++ Vec3 vec3d = raytrace1.getFrom().subtract(raytrace1.getTo());
++
++ return BlockHitResult.miss(raytrace1.getTo(), Direction.getNearest(vec3d.x, vec3d.y, vec3d.z), new BlockPos(raytrace1.getTo()));
++ }
++ // Paper end
+ FluidState fluid = this.getFluidState(blockposition);
+ Vec3 vec3d = raytrace1.getFrom();
+ Vec3 vec3d1 = raytrace1.getTo();