--- a/net/minecraft/block/StemBlock.java
+++ b/net/minecraft/block/StemBlock.java
@@ -37,22 +37,24 @@
    }
 
    public void func_225542_b_(BlockState p_225542_1_, ServerWorld p_225542_2_, BlockPos p_225542_3_, Random p_225542_4_) {
+      if (!p_225542_2_.isAreaLoaded(p_225542_3_, 1)) return; // Forge: prevent loading unloaded chunks when checking neighbor's light
       if (p_225542_2_.func_226659_b_(p_225542_3_, 0) >= 9) {
          float f = CropsBlock.func_180672_a(this, p_225542_2_, p_225542_3_);
-         if (p_225542_4_.nextInt((int)(25.0F / f) + 1) == 0) {
+         if (net.minecraftforge.common.ForgeHooks.onCropsGrowPre(p_225542_2_, p_225542_3_, p_225542_1_, p_225542_4_.nextInt((int)(25.0F / f) + 1) == 0)) {
             int i = p_225542_1_.func_177229_b(field_176484_a);
             if (i < 7) {
-               p_225542_1_ = p_225542_1_.func_206870_a(field_176484_a, Integer.valueOf(i + 1));
-               p_225542_2_.func_180501_a(p_225542_3_, p_225542_1_, 2);
+               p_225542_2_.func_180501_a(p_225542_3_, p_225542_1_.func_206870_a(field_176484_a, Integer.valueOf(i + 1)), 2);
             } else {
                Direction direction = Direction.Plane.HORIZONTAL.func_179518_a(p_225542_4_);
                BlockPos blockpos = p_225542_3_.func_177972_a(direction);
                BlockState blockstate = p_225542_2_.func_180495_p(blockpos.func_177977_b());
-               if (p_225542_2_.func_180495_p(blockpos).func_196958_f() && (blockstate.func_203425_a(Blocks.field_150458_ak) || blockstate.func_203425_a(Blocks.field_150346_d) || blockstate.func_203425_a(Blocks.field_196660_k) || blockstate.func_203425_a(Blocks.field_196661_l) || blockstate.func_203425_a(Blocks.field_196658_i))) {
+               Block block = blockstate.func_177230_c();
+               if (p_225542_2_.func_175623_d(blockpos) && (blockstate.canSustainPlant(p_225542_2_, blockpos.func_177977_b(), Direction.UP, this) || block == Blocks.field_150458_ak || block == Blocks.field_150346_d || block == Blocks.field_196660_k || block == Blocks.field_196661_l || block == Blocks.field_196658_i)) {
                   p_225542_2_.func_175656_a(blockpos, this.field_149877_a.func_176223_P());
                   p_225542_2_.func_175656_a(p_225542_3_, this.field_149877_a.func_196523_e().func_176223_P().func_206870_a(HorizontalBlock.field_185512_D, direction));
                }
             }
+            net.minecraftforge.common.ForgeHooks.onCropsGrowPost(p_225542_2_, p_225542_3_, p_225542_1_);
          }
 
       }
@@ -97,4 +99,10 @@
    public StemGrownBlock func_208486_d() {
       return this.field_149877_a;
    }
+
+   //FORGE START
+   @Override
+   public net.minecraftforge.common.PlantType getPlantType(IBlockReader world, BlockPos pos) {
+      return net.minecraftforge.common.PlantType.CROP;
+   }
 }
