--- ../src-base/minecraft/net/minecraft/block/BlockPistonBase.java
+++ ../src-work/minecraft/net/minecraft/block/BlockPistonBase.java
@@ -200,7 +200,7 @@
                     }
                 }
 
-                if (!flag1 && block.func_149688_o() != Material.field_151579_a && func_180696_a(block, p_180648_1_, blockpos1, enumfacing.func_176734_d(), false) && (block.func_149656_h() == 0 || block == Blocks.field_150331_J || block == Blocks.field_150320_F))
+                if (!flag1 && block.isAir(p_180648_1_, blockpos1) && func_180696_a(block, p_180648_1_, blockpos1, enumfacing.func_176734_d(), false) && (block.func_149656_h() == 0 || block == Blocks.field_150331_J || block == Blocks.field_150320_F))
                 {
                     this.func_176319_a(p_180648_1_, p_180648_2_, enumfacing, false);
                 }
@@ -344,7 +344,7 @@
                     return false;
                 }
 
-                return !(p_180696_0_ instanceof ITileEntityProvider);
+                return !(p_180696_0_.hasTileEntity(p_180696_1_.func_180495_p(p_180696_2_)));
             }
             else
             {
@@ -384,7 +384,9 @@
             {
                 blockpos1 = (BlockPos)list1.get(j);
                 Block block = p_176319_1_.func_180495_p(blockpos1).func_177230_c();
-                block.func_176226_b(p_176319_1_, blockpos1, p_176319_1_.func_180495_p(blockpos1), 0);
+                //With our change to how snowballs are dropped this needs to disallow to mimic vanilla behavior.
+                float chance = block instanceof BlockSnow ? -1.0f : 1.0f;
+                block.func_180653_a(p_176319_1_, blockpos1, p_176319_1_.func_180495_p(blockpos1), chance, 0);
                 p_176319_1_.func_175698_g(blockpos1);
                 --i;
                 ablock[i] = block;
