001 package net.minecraft.world.gen.feature;
002
003 import java.util.Random;
004 import net.minecraft.block.Block;
005 import net.minecraft.tileentity.TileEntityChest;
006 import net.minecraft.util.WeightedRandomChestContent;
007 import net.minecraft.world.World;
008
009 public class WorldGeneratorBonusChest extends WorldGenerator
010 {
011 /**
012 * Instance of WeightedRandomChestContent what will randomly generate items into the Bonus Chest.
013 */
014 private final WeightedRandomChestContent[] theBonusChestGenerator;
015
016 /**
017 * Value of this int will determine how much items gonna generate in Bonus Chest.
018 */
019 private final int itemsToGenerateInBonusChest;
020
021 public WorldGeneratorBonusChest(WeightedRandomChestContent[] par1ArrayOfWeightedRandomChestContent, int par2)
022 {
023 this.theBonusChestGenerator = par1ArrayOfWeightedRandomChestContent;
024 this.itemsToGenerateInBonusChest = par2;
025 }
026
027 public boolean generate(World par1World, Random par2Random, int par3, int par4, int par5)
028 {
029 int var12;
030
031 for (boolean var6 = false; ((var12 = par1World.getBlockId(par3, par4, par5)) == 0 || var12 == Block.leaves.blockID) && par4 > 1; --par4)
032 {
033 ;
034 }
035
036 if (par4 < 1)
037 {
038 return false;
039 }
040 else
041 {
042 ++par4;
043
044 for (int var7 = 0; var7 < 4; ++var7)
045 {
046 int var8 = par3 + par2Random.nextInt(4) - par2Random.nextInt(4);
047 int var9 = par4 + par2Random.nextInt(3) - par2Random.nextInt(3);
048 int var10 = par5 + par2Random.nextInt(4) - par2Random.nextInt(4);
049
050 if (par1World.isAirBlock(var8, var9, var10) && par1World.doesBlockHaveSolidTopSurface(var8, var9 - 1, var10))
051 {
052 par1World.setBlockWithNotify(var8, var9, var10, Block.chest.blockID);
053 TileEntityChest var11 = (TileEntityChest)par1World.getBlockTileEntity(var8, var9, var10);
054
055 if (var11 != null && var11 != null)
056 {
057 WeightedRandomChestContent.generateChestContents(par2Random, this.theBonusChestGenerator, var11, this.itemsToGenerateInBonusChest);
058 }
059
060 if (par1World.isAirBlock(var8 - 1, var9, var10) && par1World.doesBlockHaveSolidTopSurface(var8 - 1, var9 - 1, var10))
061 {
062 par1World.setBlockWithNotify(var8 - 1, var9, var10, Block.torchWood.blockID);
063 }
064
065 if (par1World.isAirBlock(var8 + 1, var9, var10) && par1World.doesBlockHaveSolidTopSurface(var8 - 1, var9 - 1, var10))
066 {
067 par1World.setBlockWithNotify(var8 + 1, var9, var10, Block.torchWood.blockID);
068 }
069
070 if (par1World.isAirBlock(var8, var9, var10 - 1) && par1World.doesBlockHaveSolidTopSurface(var8 - 1, var9 - 1, var10))
071 {
072 par1World.setBlockWithNotify(var8, var9, var10 - 1, Block.torchWood.blockID);
073 }
074
075 if (par1World.isAirBlock(var8, var9, var10 + 1) && par1World.doesBlockHaveSolidTopSurface(var8 - 1, var9 - 1, var10))
076 {
077 par1World.setBlockWithNotify(var8, var9, var10 + 1, Block.torchWood.blockID);
078 }
079
080 return true;
081 }
082 }
083
084 return false;
085 }
086 }
087 }