@@ -53,9 +53,9 @@ BlockPos blockpos = p_180663_2_.func_177982_a(j1, k1, l1); IBlockState iblockstate = p_180663_1_.func_180495_p(blockpos); - if (iblockstate.func_185904_a() == Material.field_151584_j && !((Boolean)iblockstate.func_177229_b(field_176236_b)).booleanValue()) + if (iblockstate.func_177230_c().isLeaves(iblockstate, p_180663_1_, blockpos)) { - p_180663_1_.func_180501_a(blockpos, iblockstate.func_177226_a(field_176236_b, Boolean.valueOf(true)), 4); + iblockstate.func_177230_c().beginLeavesDecay(iblockstate, p_180663_1_, blockpos); } } } @@ -83,7 +83,8 @@ this.field_150128_a = new int[32768]; } - if (p_180650_1_.func_175707_a(new BlockPos(k - 5, l - 5, i1 - 5), new BlockPos(k + 5, l + 5, i1 + 5))) + if (!p_180650_1_.func_175697_a(p_180650_2_, 1)) return; // Forge: prevent decaying leaves from updating neighbors and loading unloaded chunks + if (p_180650_1_.func_175697_a(p_180650_2_, 6)) // Forge: extend range from 5 to 6 to account for neighbor checks in world.markAndNotifyBlock -> world.updateObservingBlocksAt { BlockPos.MutableBlockPos blockpos$mutableblockpos = new BlockPos.MutableBlockPos(); @@ -96,9 +97,9 @@ IBlockState iblockstate = p_180650_1_.func_180495_p(blockpos$mutableblockpos.func_181079_c(k + i2, l + j2, i1 + k2)); Block block = iblockstate.func_177230_c(); - if (block != Blocks.field_150364_r && block != Blocks.field_150363_s) + if (!block.canSustainLeaves(iblockstate, p_180650_1_, blockpos$mutableblockpos.func_181079_c(k + i2, l + j2, i1 + k2))) { - if (iblockstate.func_185904_a() == Material.field_151584_j) + if (block.isLeaves(iblockstate, p_180650_1_, blockpos$mutableblockpos.func_181079_c(k + i2, l + j2, i1 + k2))) { this.field_150128_a[(i2 + 16) * 1024 + (j2 + 16) * 32 + k2 + 16] = -2; } protected void func_176234_a(World p_176234_1_, BlockPos p_176234_2_, IBlockState p_176234_3_, int p_176234_4_) @@ -274,6 +242,51 @@ public abstract BlockPlanks.EnumType func_176233_b(int p_176233_1_); + @Override public boolean isLeaves(IBlockState state, IBlockAccess world, BlockPos pos){ return true; } + + @Override + public void beginLeavesDecay(IBlockState state, World world, BlockPos pos) + { + if (!(Boolean)state.func_177229_b(field_176236_b)) + { + world.func_180501_a(pos, state.func_177226_a(field_176236_b, true), 4); + } + } +