package net.minecraft.world.gen.feature;
import java.util.Random;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntityChest;
import net.minecraft.tileentity.TileEntityMobSpawner;
import net.minecraft.util.WeightedRandom;
import net.minecraft.util.WeightedRandomChestContent;
import net.minecraft.world.World;
import net.minecraftforge.common.ChestGenHooks;
import net.minecraftforge.common.DungeonHooks;
import net.minecraftforge.common.MinecraftForge;
public class WorldGenDungeons extends WorldGenerator
{
public boolean generate(World par1World, Random par2Random, int par3, int par4, int par5)
{
byte var6 = 3;
int var7 = par2Random.nextInt(2) + 2;
int var8 = par2Random.nextInt(2) + 2;
int var9 = 0;
int var10;
int var11;
int var12;
for (var10 = par3 - var7 - 1; var10 <= par3 + var7 + 1; ++var10)
{
for (var11 = par4 - 1; var11 <= par4 + var6 + 1; ++var11)
{
for (var12 = par5 - var8 - 1; var12 <= par5 + var8 + 1; ++var12)
{
Material var13 = par1World.getBlockMaterial(var10, var11, var12);
if (var11 == par4 - 1 && !var13.isSolid())
{
return false;
}
if (var11 == par4 + var6 + 1 && !var13.isSolid())
{
return false;
}
if ((var10 == par3 - var7 - 1 || var10 == par3 + var7 + 1 || var12 == par5 - var8 - 1 || var12 == par5 + var8 + 1) && var11 == par4 && par1World.isAirBlock(var10, var11, var12) && par1World.isAirBlock(var10, var11 + 1, var12))
{
++var9;
}
}
}
}
if (var9 >= 1 && var9 <= 5)
{
for (var10 = par3 - var7 - 1; var10 <= par3 + var7 + 1; ++var10)
{
for (var11 = par4 + var6; var11 >= par4 - 1; --var11)
{
for (var12 = par5 - var8 - 1; var12 <= par5 + var8 + 1; ++var12)
{
if (var10 != par3 - var7 - 1 && var11 != par4 - 1 && var12 != par5 - var8 - 1 && var10 != par3 + var7 + 1 && var11 != par4 + var6 + 1 && var12 != par5 + var8 + 1)
{
par1World.setBlockWithNotify(var10, var11, var12, 0);
}
else if (var11 >= 0 && !par1World.getBlockMaterial(var10, var11 - 1, var12).isSolid())
{
par1World.setBlockWithNotify(var10, var11, var12, 0);
}
else if (par1World.getBlockMaterial(var10, var11, var12).isSolid())
{
if (var11 == par4 - 1 && par2Random.nextInt(4) != 0)
{
par1World.setBlockWithNotify(var10, var11, var12, Block.cobblestoneMossy.blockID);
}
else
{
par1World.setBlockWithNotify(var10, var11, var12, Block.cobblestone.blockID);
}
}
}
}
}
var10 = 0;
while (var10 < 2)
{
var11 = 0;
while (true)
{
if (var11 < 3)
{
label210:
{
var12 = par3 + par2Random.nextInt(var7 * 2 + 1) - var7;
int var14 = par5 + par2Random.nextInt(var8 * 2 + 1) - var8;
if (par1World.isAirBlock(var12, par4, var14))
{
int var15 = 0;
if (par1World.getBlockMaterial(var12 - 1, par4, var14).isSolid())
{
++var15;
}
if (par1World.getBlockMaterial(var12 + 1, par4, var14).isSolid())
{
++var15;
}
if (par1World.getBlockMaterial(var12, par4, var14 - 1).isSolid())
{
++var15;
}
if (par1World.getBlockMaterial(var12, par4, var14 + 1).isSolid())
{
++var15;
}
if (var15 == 1)
{
par1World.setBlockWithNotify(var12, par4, var14, Block.chest.blockID);
TileEntityChest var16 = (TileEntityChest)par1World.getBlockTileEntity(var12, par4, var14);
if (var16 != null)
{
ChestGenHooks info = ChestGenHooks.getInfo(ChestGenHooks.DUNGEON_CHEST);
WeightedRandomChestContent.generateChestContents(par2Random, info.getItems(par2Random), var16, info.getCount(par2Random));
}
break label210;
}
}
++var11;
continue;
}
}
++var10;
break;
}
}
par1World.setBlockWithNotify(par3, par4, par5, Block.mobSpawner.blockID);
TileEntityMobSpawner var19 = (TileEntityMobSpawner)par1World.getBlockTileEntity(par3, par4, par5);
if (var19 != null)
{
var19.setMobID(this.pickMobSpawner(par2Random));
}
else
{
System.err.println("Failed to fetch mob spawner entity at (" + par3 + ", " + par4 + ", " + par5 + ")");
}
return true;
}
else
{
return false;
}
}
/**
* Picks potentially a random item to add to a dungeon chest.
*/
private ItemStack pickCheckLootItem(Random par1Random)
{
return ChestGenHooks.getOneItem(ChestGenHooks.DUNGEON_CHEST, par1Random);
}
/**
* Randomly decides which spawner to use in a dungeon
*/
private String pickMobSpawner(Random par1Random)
{
return DungeonHooks.getRandomDungeonMob(par1Random);
}
}