--- ../src-base/minecraft/net/minecraft/block/BlockSapling.java +++ ../src-work/minecraft/net/minecraft/block/BlockSapling.java @@ -22,10 +22,18 @@ import net.minecraft.world.gen.feature.WorldGenTrees; import net.minecraft.world.gen.feature.WorldGenerator; +// CraftBukkit start +import org.bukkit.Location; +import org.bukkit.TreeType; +import org.bukkit.block.BlockState; +import org.bukkit.event.world.StructureGrowEvent; +// CraftBukkit end + public class BlockSapling extends BlockBush implements IGrowable { public static final String[] field_149882_a = new String[] {"oak", "spruce", "birch", "jungle", "acacia", "roofed_oak"}; private static final IIcon[] field_149881_b = new IIcon[field_149882_a.length]; + public static TreeType treeType; // CraftBukkit private static final String __OBFID = "CL_00000305"; protected BlockSapling() @@ -41,9 +49,39 @@ { super.updateTick(p_149674_1_, p_149674_2_, p_149674_3_, p_149674_4_, p_149674_5_); - if (p_149674_1_.getBlockLightValue(p_149674_2_, p_149674_3_ + 1, p_149674_4_) >= 9 && p_149674_5_.nextInt(7) == 0) + if (p_149674_1_.getBlockLightValue(p_149674_2_, p_149674_3_ + 1, p_149674_4_) >= 9 && (p_149674_5_.nextInt(Math.max(2, (int)((p_149674_1_.growthOdds / p_149674_1_.getSpigotConfig().saplingModifier * 7) + 0.5F))) == 0)) // Spigot // Cauldron { + // Cauldron start + p_149674_1_.captureTreeGeneration = true; this.func_149879_c(p_149674_1_, p_149674_2_, p_149674_3_, p_149674_4_, p_149674_5_); + p_149674_1_.captureTreeGeneration = false; + if (p_149674_1_.capturedBlockSnapshots.size() > 0) + { + TreeType treeType = BlockSapling.treeType; + BlockSapling.treeType = null; + Location location = new Location(p_149674_1_.getWorld(), p_149674_2_, p_149674_3_, p_149674_4_); + List blocks = (List) p_149674_1_.capturedBlockSnapshots.clone(); + List blockstates = new java.util.ArrayList(); + for (net.minecraftforge.common.util.BlockSnapshot snapshot : blocks) + { + blockstates.add(new org.bukkit.craftbukkit.block.CraftBlockState(snapshot)); + } + p_149674_1_.capturedBlockSnapshots.clear(); + StructureGrowEvent event = null; + if (treeType != null) + { + event = new StructureGrowEvent(location, treeType, false, null, blockstates); + org.bukkit.Bukkit.getPluginManager().callEvent(event); + } + if (event == null || !event.isCancelled()) + { + for (BlockState blockstate : blockstates) + { + blockstate.update(true); + } + } + } + // Cauldron end } } } @@ -73,7 +111,20 @@ { if (!net.minecraftforge.event.terraingen.TerrainGen.saplingGrowTree(p_149878_1_, p_149878_5_, p_149878_2_, p_149878_3_, p_149878_4_)) return; int l = p_149878_1_.getBlockMetadata(p_149878_2_, p_149878_3_, p_149878_4_) & 7; - Object object = p_149878_5_.nextInt(10) == 0 ? new WorldGenBigTree(true) : new WorldGenTrees(true); + // CraftBukkit start + Object object = null; + if (p_149878_5_.nextInt(10) == 0) + { + treeType = TreeType.BIG_TREE; // CraftBukkit + object = new WorldGenBigTree(true); + } + else + { + treeType = TreeType.TREE; // CraftBukkit + object = new WorldGenTrees(true); + } + // CraftBukkit end + int i1 = 0; int j1 = 0; boolean flag = false; @@ -84,6 +135,7 @@ default: break; case 1: + treeType = TreeType.REDWOOD; // CraftBukkit label78: for (i1 = 0; i1 >= -1; --i1) @@ -108,6 +160,7 @@ break; case 2: + treeType = TreeType.BIRCH; // CraftBukkit object = new WorldGenForest(true, false); break; case 3: @@ -119,6 +172,7 @@ { if (this.func_149880_a(p_149878_1_, p_149878_2_ + i1, p_149878_3_, p_149878_4_ + j1, 3) && this.func_149880_a(p_149878_1_, p_149878_2_ + i1 + 1, p_149878_3_, p_149878_4_ + j1, 3) && this.func_149880_a(p_149878_1_, p_149878_2_ + i1, p_149878_3_, p_149878_4_ + j1 + 1, 3) && this.func_149880_a(p_149878_1_, p_149878_2_ + i1 + 1, p_149878_3_, p_149878_4_ + j1 + 1, 3)) { + treeType = TreeType.JUNGLE; // CraftBukkit object = new WorldGenMegaJungle(true, 10, 20, 3, 3); flag = true; break label93; @@ -130,11 +184,13 @@ { j1 = 0; i1 = 0; + treeType = TreeType.SMALL_JUNGLE; // CraftBukkit object = new WorldGenTrees(true, 4 + p_149878_5_.nextInt(7), 3, 3, false); } break; case 4: + treeType = TreeType.ACACIA; // CraftBukkit object = new WorldGenSavannaTree(true); break; case 5: @@ -147,6 +203,7 @@ if (this.func_149880_a(p_149878_1_, p_149878_2_ + i1, p_149878_3_, p_149878_4_ + j1, 5) && this.func_149880_a(p_149878_1_, p_149878_2_ + i1 + 1, p_149878_3_, p_149878_4_ + j1, 5) && this.func_149880_a(p_149878_1_, p_149878_2_ + i1, p_149878_3_, p_149878_4_ + j1 + 1, 5) && this.func_149880_a(p_149878_1_, p_149878_2_ + i1 + 1, p_149878_3_, p_149878_4_ + j1 + 1, 5)) { object = new WorldGenCanopyTree(true); + treeType = TreeType.DARK_OAK; // CraftBukkit flag = true; break label108; }