--- a/net/minecraft/item/BoneMealItem.java
+++ b/net/minecraft/item/BoneMealItem.java
@@ -30,7 +30,7 @@
       World world = p_195939_1_.func_195991_k();
       BlockPos blockpos = p_195939_1_.func_195995_a();
       BlockPos blockpos1 = blockpos.func_177972_a(p_195939_1_.func_196000_l());
-      if (func_195966_a(p_195939_1_.func_195996_i(), world, blockpos)) {
+      if (applyBonemeal(p_195939_1_.func_195996_i(), world, blockpos, p_195939_1_.func_195999_j())) {
          if (!world.field_72995_K) {
             world.func_217379_c(2005, blockpos, 0);
          }
@@ -51,8 +51,17 @@
       }
    }
 
+   @Deprecated //Forge: Use Player/Hand version
    public static boolean func_195966_a(ItemStack p_195966_0_, World p_195966_1_, BlockPos p_195966_2_) {
+      if (p_195966_1_ instanceof net.minecraft.world.server.ServerWorld)
+         return applyBonemeal(p_195966_0_, p_195966_1_, p_195966_2_, net.minecraftforge.common.util.FakePlayerFactory.getMinecraft((net.minecraft.world.server.ServerWorld)p_195966_1_));
+      return false;
+   }
+
+   public static boolean applyBonemeal(ItemStack p_195966_0_, World p_195966_1_, BlockPos p_195966_2_, net.minecraft.entity.player.PlayerEntity player) {
       BlockState blockstate = p_195966_1_.func_180495_p(p_195966_2_);
+      int hook = net.minecraftforge.event.ForgeEventFactory.onApplyBonemeal(player, p_195966_1_, p_195966_2_, blockstate, p_195966_0_);
+      if (hook != 0) return hook > 0;
       if (blockstate.func_177230_c() instanceof IGrowable) {
          IGrowable igrowable = (IGrowable)blockstate.func_177230_c();
          if (igrowable.func_176473_a(p_195966_1_, p_195966_2_, blockstate, p_195966_1_.field_72995_K)) {
@@ -128,7 +137,7 @@
       }
 
       BlockState blockstate = p_195965_0_.func_180495_p(p_195965_1_);
-      if (!blockstate.func_196958_f()) {
+      if (!blockstate.isAir(p_195965_0_, p_195965_1_)) {
          double d0 = 0.5D;
          double d1;
          if (blockstate.func_203425_a(Blocks.field_150355_j)) {
