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); } }