001    package net.minecraftforge.event.terraingen;
002    
003    import java.util.Random;
004    
005    import net.minecraft.world.World;
006    import net.minecraft.world.gen.feature.WorldGenerator;
007    import net.minecraftforge.event.*;
008    
009    public class OreGenEvent extends Event
010    {
011        public final World world;
012        public final Random rand;
013        public final int worldX;
014        public final int worldZ;
015        
016        public OreGenEvent(World world, Random rand, int worldX, int worldZ)
017        {
018            this.world = world;
019            this.rand = rand;
020            this.worldX = worldX;
021            this.worldZ = worldZ;
022        }
023        
024        public static class Pre extends OreGenEvent
025        {
026            public Pre(World world, Random rand, int worldX, int worldZ)
027            {
028                super(world, rand, worldX, worldZ);
029            }
030        }
031        
032        public static class Post extends OreGenEvent
033        {
034            public Post(World world, Random rand, int worldX, int worldZ)
035            {
036                super(world, rand, worldX, worldZ);
037            }
038        }
039        
040        /**
041         * This event is fired when an ore is generated in a chunk.
042         * 
043         * You can set the result to DENY to prevent the default ore generation.
044         */
045        @HasResult
046        public static class GenerateMinable extends OreGenEvent
047        {
048            public static enum EventType { COAL, DIAMOND, DIRT, GOLD, GRAVEL, IRON, LAPIS, REDSTONE, CUSTOM }
049            
050            public final EventType type;
051            public final WorldGenerator generator;
052            
053            public GenerateMinable(World world, Random rand, WorldGenerator generator, int worldX, int worldZ, EventType type)
054            {
055                super(world, rand, worldX, worldZ);
056                this.generator = generator;
057                this.type = type;
058            }
059        }
060    }