001package net.minecraft.world.gen.feature;
002
003import java.util.Random;
004import net.minecraft.world.World;
005
006public 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
014    public WorldGenerator()
015    {
016        this.doBlockNotify = false;
017    }
018
019    public WorldGenerator(boolean par1)
020    {
021        this.doBlockNotify = par1;
022    }
023
024    public abstract boolean generate(World world, Random random, int i, int j, int k);
025
026    /**
027     * Rescales the generator settings, only used in WorldGenBigTree
028     */
029    public void setScale(double par1, double par3, double par5) {}
030
031    /**
032     * Sets the block without metadata in the world, notifying neighbors if enabled.
033     */
034    protected void setBlock(World par1World, int par2, int par3, int par4, int par5)
035    {
036        this.setBlockAndMetadata(par1World, par2, par3, par4, par5, 0);
037    }
038
039    /**
040     * Sets the block in the world, notifying neighbors if enabled.
041     */
042    protected void setBlockAndMetadata(World par1World, int par2, int par3, int par4, int par5, int par6)
043    {
044        if (this.doBlockNotify)
045        {
046            par1World.setBlockAndMetadataWithNotify(par2, par3, par4, par5, par6, 3);
047        }
048        else
049        {
050            par1World.setBlockAndMetadataWithNotify(par2, par3, par4, par5, par6, 2);
051        }
052    }
053}