001    package net.minecraftforge.event.terraingen;
002    
003    import java.util.Random;
004    
005    import net.minecraft.world.World;
006    import net.minecraft.world.chunk.IChunkProvider;
007    import net.minecraftforge.event.world.*;
008    
009    public class PopulateChunkEvent extends ChunkProviderEvent
010    {
011        public final World world;
012        public final Random rand;
013        public final int chunkX;
014        public final int chunkZ;
015        public final boolean hasVillageGenerated;
016        
017        public PopulateChunkEvent(IChunkProvider chunkProvider, World world, Random rand, int chunkX, int chunkZ, boolean hasVillageGenerated)
018        {
019            super(chunkProvider);
020            this.world = world;
021            this.rand = rand;
022            this.chunkX = chunkX;
023            this.chunkZ = chunkZ;
024            this.hasVillageGenerated = hasVillageGenerated;
025        }
026        
027        public static class Pre extends PopulateChunkEvent
028        {
029            public Pre(IChunkProvider chunkProvider, World world, Random rand, int chunkX, int chunkZ, boolean hasVillageGenerated)
030            {
031                super(chunkProvider, world, rand, chunkX, chunkZ, hasVillageGenerated);
032            }
033        }
034        
035        public static class Post extends PopulateChunkEvent
036        {
037            public Post(IChunkProvider chunkProvider, World world, Random rand, int chunkX, int chunkZ, boolean hasVillageGenerated)
038            {
039                super(chunkProvider, world, rand, chunkX, chunkZ, hasVillageGenerated);
040            }
041        }
042        
043        /**
044         * This event is fired when a chunk is populated with a terrain feature.
045         * 
046         * You can set the result to DENY to prevent the default generation
047         * of a terrain feature.
048         */
049        @HasResult
050        public static class Populate extends PopulateChunkEvent
051        {
052            /** Use CUSTOM to filter custom event types
053             */
054            public static enum EventType { DUNGEON, FIRE, GLOWSTONE, ICE, LAKE, LAVA, NETHER_LAVA, CUSTOM }
055            
056            public final EventType type;
057    
058            public Populate(IChunkProvider chunkProvider, World world, Random rand, int chunkX, int chunkZ, boolean hasVillageGenerated, EventType type)
059            {
060                super(chunkProvider, world, rand, chunkX, chunkZ, hasVillageGenerated);
061                this.type = type;
062            }
063        }
064    }