001    package net.minecraft.src;
002    
003    import java.util.Random;
004    
005    public class WorldGeneratorBonusChest extends WorldGenerator
006    {
007        /**
008         * Instance of WeightedRandomChestContent what will randomly generate items into the Bonus Chest.
009         */
010        private final WeightedRandomChestContent[] theBonusChestGenerator;
011    
012        /**
013         * Value of this int will determine how much items gonna generate in Bonus Chest.
014         */
015        private final int itemsToGenerateInBonusChest;
016    
017        public WorldGeneratorBonusChest(WeightedRandomChestContent[] par1ArrayOfWeightedRandomChestContent, int par2)
018        {
019            this.theBonusChestGenerator = par1ArrayOfWeightedRandomChestContent;
020            this.itemsToGenerateInBonusChest = par2;
021        }
022    
023        public boolean generate(World par1World, Random par2Random, int par3, int par4, int par5)
024        {
025            int var12;
026    
027            for (boolean var6 = false; ((var12 = par1World.getBlockId(par3, par4, par5)) == 0 || var12 == Block.leaves.blockID) && par4 > 1; --par4)
028            {
029                ;
030            }
031    
032            if (par4 < 1)
033            {
034                return false;
035            }
036            else
037            {
038                ++par4;
039    
040                for (int var7 = 0; var7 < 4; ++var7)
041                {
042                    int var8 = par3 + par2Random.nextInt(4) - par2Random.nextInt(4);
043                    int var9 = par4 + par2Random.nextInt(3) - par2Random.nextInt(3);
044                    int var10 = par5 + par2Random.nextInt(4) - par2Random.nextInt(4);
045    
046                    if (par1World.isAirBlock(var8, var9, var10) && par1World.doesBlockHaveSolidTopSurface(var8, var9 - 1, var10))
047                    {
048                        par1World.setBlockWithNotify(var8, var9, var10, Block.chest.blockID);
049                        TileEntityChest var11 = (TileEntityChest)par1World.getBlockTileEntity(var8, var9, var10);
050    
051                        if (var11 != null && var11 != null)
052                        {
053                            WeightedRandomChestContent.generateChestContents(par2Random, this.theBonusChestGenerator, var11, this.itemsToGenerateInBonusChest);
054                        }
055    
056                        if (par1World.isAirBlock(var8 - 1, var9, var10) && par1World.doesBlockHaveSolidTopSurface(var8 - 1, var9 - 1, var10))
057                        {
058                            par1World.setBlockWithNotify(var8 - 1, var9, var10, Block.torchWood.blockID);
059                        }
060    
061                        if (par1World.isAirBlock(var8 + 1, var9, var10) && par1World.doesBlockHaveSolidTopSurface(var8 - 1, var9 - 1, var10))
062                        {
063                            par1World.setBlockWithNotify(var8 + 1, var9, var10, Block.torchWood.blockID);
064                        }
065    
066                        if (par1World.isAirBlock(var8, var9, var10 - 1) && par1World.doesBlockHaveSolidTopSurface(var8 - 1, var9 - 1, var10))
067                        {
068                            par1World.setBlockWithNotify(var8, var9, var10 - 1, Block.torchWood.blockID);
069                        }
070    
071                        if (par1World.isAirBlock(var8, var9, var10 + 1) && par1World.doesBlockHaveSolidTopSurface(var8 - 1, var9 - 1, var10))
072                        {
073                            par1World.setBlockWithNotify(var8, var9, var10 + 1, Block.torchWood.blockID);
074                        }
075    
076                        return true;
077                    }
078                }
079    
080                return false;
081            }
082        }
083    }