--- a/net/minecraft/block/VineBlock.java
+++ b/net/minecraft/block/VineBlock.java
@@ -19,7 +19,7 @@
 import net.minecraft.world.IWorldReader;
 import net.minecraft.world.server.ServerWorld;
 
-public class VineBlock extends Block {
+public class VineBlock extends Block implements net.minecraftforge.common.IForgeShearable {
    public static final BooleanProperty field_176277_a = SixWayBlock.field_196496_z;
    public static final BooleanProperty field_176273_b = SixWayBlock.field_196488_a;
    public static final BooleanProperty field_176278_M = SixWayBlock.field_196490_b;
@@ -143,14 +143,14 @@
    }
 
    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_.field_73012_v.nextInt(4) == 0) {
+      if (p_225542_2_.field_73012_v.nextInt(4) == 0 && p_225542_2_.isAreaLoaded(p_225542_3_, 4)) { // Forge: check area to prevent loading unloaded chunks
          Direction direction = Direction.func_239631_a_(p_225542_4_);
          BlockPos blockpos = p_225542_3_.func_177984_a();
          if (direction.func_176740_k().func_176722_c() && !p_225542_1_.func_177229_b(func_176267_a(direction))) {
             if (this.func_196539_a(p_225542_2_, p_225542_3_)) {
                BlockPos blockpos4 = p_225542_3_.func_177972_a(direction);
                BlockState blockstate4 = p_225542_2_.func_180495_p(blockpos4);
-               if (blockstate4.func_196958_f()) {
+               if (blockstate4.isAir(p_225542_2_, blockpos4)) {
                   Direction direction3 = direction.func_176746_e();
                   Direction direction4 = direction.func_176735_f();
                   boolean flag = p_225542_1_.func_177229_b(func_176267_a(direction3));
@@ -207,7 +207,7 @@
             if (p_225542_3_.func_177956_o() > 0) {
                BlockPos blockpos1 = p_225542_3_.func_177977_b();
                BlockState blockstate = p_225542_2_.func_180495_p(blockpos1);
-               if (blockstate.func_196958_f() || blockstate.func_203425_a(this)) {
+               if (blockstate.isAir(p_225542_2_, blockpos) || blockstate.func_203425_a(this)) {
                   BlockState blockstate1 = blockstate.func_196958_f() ? this.func_176223_P() : blockstate;
                   BlockState blockstate2 = this.func_196544_a(p_225542_1_, blockstate1, p_225542_4_);
                   if (blockstate1 != blockstate2 && this.func_196540_x(blockstate2)) {
@@ -313,4 +313,7 @@
    public static BooleanProperty func_176267_a(Direction p_176267_0_) {
       return field_196546_A.get(p_176267_0_);
    }
+
+   @Override
+   public boolean isLadder(BlockState state, IWorldReader world, BlockPos pos, net.minecraft.entity.LivingEntity entity) { return true; }
 }
