--- ../src-base/minecraft/net/minecraft/block/BlockGrass.java +++ ../src-work/minecraft/net/minecraft/block/BlockGrass.java @@ -15,6 +15,12 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +// CraftBukkit start +import org.bukkit.block.BlockState; +import org.bukkit.event.block.BlockSpreadEvent; +import org.bukkit.event.block.BlockFadeEvent; +// CraftBukkit end + public class BlockGrass extends Block implements IGrowable { private static final Logger logger = LogManager.getLogger(); @@ -45,11 +51,25 @@ { if (p_149674_1_.getBlockLightValue(p_149674_2_, p_149674_3_ + 1, p_149674_4_) < 4 && p_149674_1_.getBlockLightOpacity(p_149674_2_, p_149674_3_ + 1, p_149674_4_) > 2) { - p_149674_1_.setBlock(p_149674_2_, p_149674_3_, p_149674_4_, Blocks.dirt); + // CraftBukkit start + org.bukkit.World bworld = p_149674_1_.getWorld(); + BlockState blockState = bworld.getBlockAt(p_149674_2_, p_149674_3_, p_149674_4_).getState(); + blockState.setTypeId(Block.getIdFromBlock(Blocks.dirt)); + BlockFadeEvent event = new BlockFadeEvent(blockState.getBlock(), blockState); + p_149674_1_.getServer().getPluginManager().callEvent(event); + + if (!event.isCancelled()) + { + blockState.update(true); + } + + // CraftBukkit end } else if (p_149674_1_.getBlockLightValue(p_149674_2_, p_149674_3_ + 1, p_149674_4_) >= 9) { - for (int l = 0; l < 4; ++l) + int numGrowth = Math.min(4, Math.max(20, (int)(4 * 100F / p_149674_1_.growthOdds))); // Spigot + + for (int l = 0; l < numGrowth; ++l) // Spigot { int i1 = p_149674_2_ + p_149674_5_.nextInt(3) - 1; int j1 = p_149674_3_ + p_149674_5_.nextInt(5) - 3; @@ -58,7 +78,19 @@ if (p_149674_1_.getBlock(i1, j1, k1) == Blocks.dirt && p_149674_1_.getBlockMetadata(i1, j1, k1) == 0 && p_149674_1_.getBlockLightValue(i1, j1 + 1, k1) >= 4 && p_149674_1_.getBlockLightOpacity(i1, j1 + 1, k1) <= 2) { - p_149674_1_.setBlock(i1, j1, k1, Blocks.grass); + // CraftBukkit start + org.bukkit.World bworld = p_149674_1_.getWorld(); + BlockState blockState = bworld.getBlockAt(i1, j1, k1).getState(); + blockState.setTypeId(Block.getIdFromBlock(Blocks.grass)); + BlockSpreadEvent event = new BlockSpreadEvent(blockState.getBlock(), bworld.getBlockAt(p_149674_2_, p_149674_3_, p_149674_4_), blockState); + p_149674_1_.getServer().getPluginManager().callEvent(event); + + if (!event.isCancelled()) + { + blockState.update(true); + } + + // CraftBukkit end } } }