13
0
geforkt von Mirrors/Paper

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.
Dieser Commit ist enthalten in:
Spottedleaf 2020-08-28 12:33:47 -07:00
Ursprung 698c758855
Commit 12321d761e

Datei anzeigen

@ -30,13 +30,14 @@
FluidState getFluidState(BlockPos pos);
default int getLightEmission(BlockPos pos) {
@@ -59,9 +69,17 @@
@@ -59,10 +69,19 @@
});
}
- default BlockHitResult clip(ClipContext context) {
- return (BlockHitResult) BlockGetter.traverseBlocks(context.getFrom(), context.getTo(), context, (raytrace1, blockposition) -> {
- BlockState iblockdata = this.getBlockState(blockposition);
- FluidState fluid = this.getFluidState(blockposition);
+ // CraftBukkit start - moved block handling into separate method for use by Block#rayTrace
+ default BlockHitResult clip(ClipContext raytrace1, BlockPos blockposition) {
+ // Paper start - Prevent raytrace from loading chunks
@ -48,10 +49,12 @@
+ return BlockHitResult.miss(raytrace1.getTo(), Direction.getApproximateNearest(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();
@@ -73,6 +91,12 @@
VoxelShape voxelshape = raytrace1.getBlockShape(iblockdata, this, blockposition);
@@ -73,6 +92,12 @@
double d1 = movingobjectpositionblock1 == null ? Double.MAX_VALUE : raytrace1.getFrom().distanceToSqr(movingobjectpositionblock1.getLocation());
return d0 <= d1 ? movingobjectpositionblock : movingobjectpositionblock1;
@ -64,7 +67,7 @@
}, (raytrace1) -> {
Vec3 vec3d = raytrace1.getFrom().subtract(raytrace1.getTo());
@@ -145,7 +169,7 @@
@@ -145,7 +170,7 @@
double d13 = d10 * (i1 > 0 ? 1.0D - Mth.frac(d4) : Mth.frac(d4));
double d14 = d11 * (j1 > 0 ? 1.0D - Mth.frac(d5) : Mth.frac(d5));