      }
  
      public Random func_72843_D(int p_72843_1_, int p_72843_2_, int p_72843_3_)
-@@ -3429,7 +3622,7 @@
+@@ -3429,7 +3623,7 @@
      @SideOnly(Side.CLIENT)
      public double func_72919_O()
      {

+        directions.remove(p_175695_3_);
+        if(net.minecraftforge.event.ForgeEventFactory.onNeighborNotify(this, p_175695_1_, this.func_180495_p(p_175695_1_), directions).isCanceled())
+            return;
+        
         if (p_175695_3_ != EnumFacing.WEST)
         {
             this.func_180496_d(p_175695_1_.func_177976_e(), p_175695_2_);

         int i;
         EntityPlayer entityplayer;
         int j;
@@ -2444,8 +2616,9 @@
             Block block = p_147467_3_.func_177428_a(blockpos);
             l += p_147467_1_;
             i1 += p_147467_2_;
+            BlockPos worldpos = blockpos.func_177982_a(p_147467_1_, 0, p_147467_2_);
 
-            if (block.func_149688_o() == Material.field_151579_a && this.func_175699_k(blockpos) <= this.field_73012_v.nextInt(8) && this.func_175642_b(EnumSkyBlock.SKY, blockpos) <= 0)
+            if (block.isAir(this, worldpos) && this.func_175699_k(worldpos) <= this.field_73012_v.nextInt(8) && this.func_175642_b(EnumSkyBlock.SKY, worldpos) <= 0) //Forge: isAir, and fix arguments to world positions instead of chunk position
             {
                 EntityPlayer entityplayer = this.func_72977_a((double)l + 0.5D, (double)j1 + 0.5D, (double)i1 + 0.5D, 8.0D);
 
@@ -2485,6 +2658,11 @@
 
     public boolean func_175670_e(BlockPos p_175670_1_, boolean p_175670_2_)
     {
