--- ../src-base/minecraft/net/minecraft/block/BlockFarmland.java
+++ ../src-work/minecraft/net/minecraft/block/BlockFarmland.java
@@ -15,6 +15,11 @@
 import net.minecraftforge.common.IPlantable;
 import net.minecraftforge.common.util.ForgeDirection;
 
+// CraftBukkit start
+import org.bukkit.event.entity.EntityInteractEvent;
+import org.bukkit.craftbukkit.event.CraftEventFactory;
+// CraftBukkit end
+
 public class BlockFarmland extends Block
 {
     @SideOnly(Side.CLIENT)
@@ -64,6 +69,15 @@
             }
             else if (!this.func_149822_e(p_149674_1_, p_149674_2_, p_149674_3_, p_149674_4_))
             {
+                // CraftBukkit start
+                org.bukkit.block.Block block = p_149674_1_.getWorld().getBlockAt(p_149674_2_, p_149674_3_, p_149674_4_);
+
+                if (CraftEventFactory.callBlockFadeEvent(block, Blocks.dirt).isCancelled())
+                {
+                    return;
+                }
+
+                // CraftBukkit end
                 p_149674_1_.setBlock(p_149674_2_, p_149674_3_, p_149674_4_, Blocks.dirt);
             }
         }
@@ -82,6 +96,26 @@
                 return;
             }
 
+            // CraftBukkit start - Interact soil
+            // Cauldron start - validate data before sending event
+            org.bukkit.event.Cancellable cancellable = null;
+
+            if (p_149746_5_ instanceof EntityPlayer)
+            {
+                cancellable = CraftEventFactory.callPlayerInteractEvent((EntityPlayer) p_149746_5_, org.bukkit.event.block.Action.PHYSICAL, p_149746_2_, p_149746_3_, p_149746_4_, -1, null);
+            }
+            else if (p_149746_1_.getWorld() != null && p_149746_5_ != null)
+            {
+                cancellable = new EntityInteractEvent(p_149746_5_.getBukkitEntity(), p_149746_1_.getWorld().getBlockAt(p_149746_2_, p_149746_3_, p_149746_4_));
+                p_149746_1_.getServer().getPluginManager().callEvent((EntityInteractEvent) cancellable);
+            }
+
+            if (cancellable != null && cancellable.isCancelled())
+            {
+                return;
+            }
+            // Cauldron end
+            // CraftBukkit end
             p_149746_1_.setBlock(p_149746_2_, p_149746_3_, p_149746_4_, Blocks.dirt);
         }
     }
