--- a/net/minecraft/server/IBlockAccess.java
+++ b/net/minecraft/server/IBlockAccess.java
@@ -25,8 +25,8 @@
         return 256;
     }
 
-    default MovingObjectPositionBlock rayTrace(RayTrace raytrace) {
-        return (MovingObjectPositionBlock) a(raytrace, (raytrace1, blockposition) -> {
+    // CraftBukkit start - moved block handling into separate method for use by Block#rayTrace
+    default MovingObjectPositionBlock rayTraceBlock(RayTrace raytrace1, BlockPosition blockposition) {
             IBlockData iblockdata = this.getType(blockposition);
             Fluid fluid = this.getFluid(blockposition);
             Vec3D vec3d = raytrace1.b();
@@ -39,6 +39,12 @@
             double d1 = movingobjectpositionblock1 == null ? Double.MAX_VALUE : raytrace1.b().distanceSquared(movingobjectpositionblock1.getPos());
 
             return d0 <= d1 ? movingobjectpositionblock : movingobjectpositionblock1;
+    }
+    // CraftBukkit end
+
+    default MovingObjectPositionBlock rayTrace(RayTrace raytrace) {
+        return (MovingObjectPositionBlock) a(raytrace, (raytrace1, blockposition) -> {
+            return this.rayTraceBlock(raytrace1, blockposition); // CraftBukkit - moved into separate method
         }, (raytrace1) -> {
             Vec3D vec3d = raytrace1.b().d(raytrace1.a());
 
@@ -96,7 +102,7 @@
                 double d13 = d10 * (i1 > 0 ? 1.0D - MathHelper.h(d4) : MathHelper.h(d4));
                 double d14 = d11 * (j1 > 0 ? 1.0D - MathHelper.h(d5) : MathHelper.h(d5));
 
-                Object object;
+                T object; // CraftBukkit - decompile error
 
                 do {
                     if (d12 > 1.0D && d13 > 1.0D && d14 > 1.0D) {
