aboutsummaryrefslogtreecommitdiffhomepage
path: root/patches/server/0608-Don-t-lookup-fluid-state-when-raytracing-skip-air-bl.patch
diff options
context:
space:
mode:
Diffstat (limited to 'patches/server/0608-Don-t-lookup-fluid-state-when-raytracing-skip-air-bl.patch')
-rw-r--r--patches/server/0608-Don-t-lookup-fluid-state-when-raytracing-skip-air-bl.patch26
1 files changed, 26 insertions, 0 deletions
diff --git a/patches/server/0608-Don-t-lookup-fluid-state-when-raytracing-skip-air-bl.patch b/patches/server/0608-Don-t-lookup-fluid-state-when-raytracing-skip-air-bl.patch
new file mode 100644
index 0000000000..0ab3e48f48
--- /dev/null
+++ b/patches/server/0608-Don-t-lookup-fluid-state-when-raytracing-skip-air-bl.patch
@@ -0,0 +1,26 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Spottedleaf <[email protected]>
+Date: Fri, 28 Aug 2020 12:33:47 -0700
+Subject: [PATCH] Don't lookup fluid state when raytracing, skip air blocks
+
+Just use the iblockdata already retrieved, removes a getType call.
+
+Also save approx. 5% for the raytrace call, as most (expensive)
+raytracing tends to go through air and returning early is an
+easy win. The remaining problems with this function
+are mostly with the block getting itself.
+
+diff --git a/src/main/java/net/minecraft/world/level/BlockGetter.java b/src/main/java/net/minecraft/world/level/BlockGetter.java
+index c3760e0c8ac0b3ea200f4e1c237e250137a78caf..c978f3b2d42f512e982f289e76c2422e41b7eec6 100644
+--- a/src/main/java/net/minecraft/world/level/BlockGetter.java
++++ b/src/main/java/net/minecraft/world/level/BlockGetter.java
+@@ -79,7 +79,8 @@ public interface BlockGetter extends LevelHeightAccessor {
+ return BlockHitResult.miss(raytrace1.getTo(), Direction.getNearest(vec3d.x, vec3d.y, vec3d.z), BlockPos.containing(raytrace1.getTo()));
+ }
+ // Paper end - Prevent raytrace from loading chunks
+- FluidState fluid = this.getFluidState(blockposition);
++ if (iblockdata.isAir()) return null; // Paper - Perf: optimise air cases
++ FluidState fluid = iblockdata.getFluidState(); // Paper - Perf: don't need to go to world state again
+ Vec3 vec3d = raytrace1.getFrom();
+ Vec3 vec3d1 = raytrace1.getTo();
+ VoxelShape voxelshape = raytrace1.getBlockShape(iblockdata, this, blockposition);