      }
  
      public Block func_150810_a(final int p_150810_1_, final int p_150810_2_, final int p_150810_3_)
-@@ -578,6 +584,8 @@
- 
+@@ -579,6 +585,8 @@
              int l1 = this.field_76635_g * 16 + p_150807_1_;
              int i2 = this.field_76647_h * 16 + p_150807_3_;
-+            
+ 
 +            int k2 = block1.getLightOpacity(this.field_76637_e, l1, p_150807_2_, i2);
- 
++
              if (!this.field_76637_e.field_72995_K)
              {
-@@ -585,14 +593,19 @@
-             }
- 
-             extendedblockstorage.func_150818_a(p_150807_1_, p_150807_2_ & 15, p_150807_3_, p_150807_4_);
-+            extendedblockstorage.func_76654_b(p_150807_1_, p_150807_2_ & 15, p_150807_3_, p_150807_5_); // Move this above to prevent other mods/tile entites from creating invalid ones for the wrong metadata
- 
+                 block1.func_149725_f(this.field_76637_e, l1, p_150807_2_, i2, k1);
+@@ -589,10 +597,16 @@
              if (!this.field_76637_e.field_72995_K)
              {
                  block1.func_149749_a(this.field_76637_e, l1, p_150807_2_, i2, block1, k1);
++                extendedblockstorage.func_76654_b(p_150807_1_, p_150807_2_ & 15, p_150807_3_, p_150807_5_); // This needs to be below block break as it some breaks depend on this ordering {redstone/lava}
              }
 -            else if (block1 instanceof ITileEntityProvider && block1 != p_150807_4_)
 +            else if (block1.hasTileEntity(k1))
              {
 -                this.field_76637_e.func_147475_p(l1, p_150807_2_, i2);
++                extendedblockstorage.func_76654_b(p_150807_1_, p_150807_2_ & 15, p_150807_3_, p_150807_5_); // Move this above to prevent other mods/tile entites from creating invalid ones for the wrong metadata
 +                TileEntity te = this.getTileEntityUnsafe(p_150807_1_ & 0x0F, p_150807_2_, p_150807_3_ & 0x0F);
 +                if (te != null && te.shouldRefresh(block1, p_150807_4_, k1, p_150807_5_, field_76637_e, l1, p_150807_2_, i2))
 +                {

     }
 
     public void func_150813_a(TileEntity p_150813_1_)
@@ -860,7 +855,7 @@
 
         if (this.field_76636_d)
         {

+    /**
+     * Retrieves the tile entity, WITHOUT creating it.
+     * Good for checking if it exists.
+     *
+     * @param x
+     * @param y
+     * @param z
