package net.minecraftforge.event.terraingen;

import java.util.Random;

import net.minecraft.world.World;
import net.minecraft.world.chunk.IChunkProvider;

public class PopulateChunkEvent extends ChunkProviderEvent
{
	public final World world;
	public final Random rand;
	public final int chunkX;
	public final int chunkZ;
	public final boolean hasVillageGenerated;
	
	public PopulateChunkEvent(IChunkProvider chunkProvider, World world, Random rand, int chunkX, int chunkZ, boolean hasVillageGenerated)
	{
		super(chunkProvider);
		this.world = world;
		this.rand = rand;
		this.chunkX = chunkX;
		this.chunkZ = chunkZ;
		this.hasVillageGenerated = hasVillageGenerated;
	}
	
	public static class Pre extends PopulateChunkEvent
	{
		public Pre(IChunkProvider chunkProvider, World world, Random rand, int chunkX, int chunkZ, boolean hasVillageGenerated)
		{
			super(chunkProvider, world, rand, chunkX, chunkZ, hasVillageGenerated);
		}
	}
	
	public static class Post extends PopulateChunkEvent
	{
		public Post(IChunkProvider chunkProvider, World world, Random rand, int chunkX, int chunkZ, boolean hasVillageGenerated)
		{
			super(chunkProvider, world, rand, chunkX, chunkZ, hasVillageGenerated);
		}
	}
	
	/**
	 * This event is fired when a chunk is populated with a terrain feature.
	 * 
	 * You can set the result to DENY to prevent the default generation
	 * of a terrain feature.
	 */
	@HasResult
	public static class Populate extends PopulateChunkEvent
	{
		/** Use CUSTOM to filter custom event types
		 */
		public static enum EventType { DUNGEON, FIRE, GLOWSTONE, ICE, LAKE, LAVA, NETHER_LAVA, ANIMALS, CUSTOM }
		
		public final EventType type;

		public Populate(IChunkProvider chunkProvider, World world, Random rand, int chunkX, int chunkZ, boolean hasVillageGenerated, EventType type)
		{
			super(chunkProvider, world, rand, chunkX, chunkZ, hasVillageGenerated);
			this.type = type;
		}
	}
}
