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