From 3c7a843944e4dacaeda0f1dd6122d3ee7abdf6e1 Mon Sep 17 00:00:00 2001 From: Wizjany Date: Fri, 16 Sep 2011 15:45:05 -0400 Subject: [PATCH] Made grass throw a BlockSpread event when growing and a BlockFade event when receding. --- .../java/net/minecraft/server/BlockGrass.java | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 src/main/java/net/minecraft/server/BlockGrass.java diff --git a/src/main/java/net/minecraft/server/BlockGrass.java b/src/main/java/net/minecraft/server/BlockGrass.java new file mode 100644 index 0000000000..5868eadb91 --- /dev/null +++ b/src/main/java/net/minecraft/server/BlockGrass.java @@ -0,0 +1,67 @@ +package net.minecraft.server; + +import java.util.Random; + +// CraftBukkit start +import org.bukkit.event.block.BlockSpreadEvent; +import org.bukkit.event.block.BlockFadeEvent; +//CraftBukkit end + +public class BlockGrass extends Block { + + protected BlockGrass(int i) { + super(i, Material.GRASS); + this.textureId = 3; + this.a(true); + } + + public int a(int i, int j) { + return i == 1 ? 0 : (i == 0 ? 2 : 3); + } + + public void a(World world, int i, int j, int k, Random random) { + if (!world.isStatic) { + if (world.getLightLevel(i, j + 1, k) < 4 && Block.q[world.getTypeId(i, j + 1, k)] > 2) { + if (random.nextInt(4) != 0) { + return; + } + // CraftBukkit start + org.bukkit.World bworld = world.getWorld(); + org.bukkit.block.BlockState blockState = bworld.getBlockAt(i, j, k).getState(); + blockState.setTypeId(Block.DIRT.id); + + BlockFadeEvent event = new BlockFadeEvent(blockState.getBlock(), blockState); + world.getServer().getPluginManager().callEvent(event); + + if (!event.isCancelled()) { + blockState.update(true); + } + // CraftBukkit end + } else if (world.getLightLevel(i, j + 1, k) >= 9) { + int l = i + random.nextInt(3) - 1; + int i1 = j + random.nextInt(5) - 3; + int j1 = k + random.nextInt(3) - 1; + int k1 = world.getTypeId(l, i1 + 1, j1); + + if (world.getTypeId(l, i1, j1) == Block.DIRT.id && world.getLightLevel(l, i1 + 1, j1) >= 4 && Block.q[k1] <= 2) { + // CraftBukkit start + org.bukkit.World bworld = world.getWorld(); + org.bukkit.block.BlockState blockState = bworld.getBlockAt(l, i1, j1).getState(); + blockState.setTypeId(this.id); + + BlockSpreadEvent event = new BlockSpreadEvent(blockState.getBlock(), bworld.getBlockAt(i, j, k), blockState); + world.getServer().getPluginManager().callEvent(event); + + if (!event.isCancelled()) { + blockState.update(true); + } + // CraftBukkit end + } + } + } + } + + public int a(int i, Random random) { + return Block.DIRT.a(0, random); + } +}