001    package net.minecraft.src;
002    
003    import java.util.Random;
004    
005    public abstract class WorldGenerator
006    {
007        /**
008         * Sets wither or not the generator should notify blocks of blocks it changes. When the world is first generated,
009         * this is false, when saplings grow, this is true.
010         */
011        private final boolean doBlockNotify;
012    
013        public WorldGenerator()
014        {
015            this.doBlockNotify = false;
016        }
017    
018        public WorldGenerator(boolean par1)
019        {
020            this.doBlockNotify = par1;
021        }
022    
023        public abstract boolean generate(World var1, Random var2, int var3, int var4, int var5);
024    
025        /**
026         * Rescales the generator settings, only used in WorldGenBigTree
027         */
028        public void setScale(double par1, double par3, double par5) {}
029    
030        /**
031         * Sets the block without metadata in the world, notifying neighbors if enabled.
032         */
033        protected void setBlock(World par1World, int par2, int par3, int par4, int par5)
034        {
035            this.setBlockAndMetadata(par1World, par2, par3, par4, par5, 0);
036        }
037    
038        /**
039         * Sets the block in the world, notifying neighbors if enabled.
040         */
041        protected void setBlockAndMetadata(World par1World, int par2, int par3, int par4, int par5, int par6)
042        {
043            if (this.doBlockNotify)
044            {
045                par1World.setBlockAndMetadataWithNotify(par2, par3, par4, par5, par6);
046            }
047            else
048            {
049                par1World.setBlockAndMetadata(par2, par3, par4, par5, par6);
050            }
051        }
052    }