001package net.minecraft.world.gen.feature; 002 003import java.util.Random; 004import net.minecraft.block.Block; 005import net.minecraft.tileentity.TileEntityChest; 006import net.minecraft.util.WeightedRandomChestContent; 007import net.minecraft.world.World; 008 009public 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 l; 030 031 for (boolean flag = false; ((l = par1World.getBlockId(par3, par4, par5)) == 0 || l == 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 i1 = 0; i1 < 4; ++i1) 045 { 046 int j1 = par3 + par2Random.nextInt(4) - par2Random.nextInt(4); 047 int k1 = par4 + par2Random.nextInt(3) - par2Random.nextInt(3); 048 int l1 = par5 + par2Random.nextInt(4) - par2Random.nextInt(4); 049 050 if (par1World.isAirBlock(j1, k1, l1) && par1World.doesBlockHaveSolidTopSurface(j1, k1 - 1, l1)) 051 { 052 par1World.setBlockAndMetadataWithNotify(j1, k1, l1, Block.chest.blockID, 0, 2); 053 TileEntityChest tileentitychest = (TileEntityChest)par1World.getBlockTileEntity(j1, k1, l1); 054 055 if (tileentitychest != null && tileentitychest != null) 056 { 057 WeightedRandomChestContent.generateChestContents(par2Random, this.theBonusChestGenerator, tileentitychest, this.itemsToGenerateInBonusChest); 058 } 059 060 if (par1World.isAirBlock(j1 - 1, k1, l1) && par1World.doesBlockHaveSolidTopSurface(j1 - 1, k1 - 1, l1)) 061 { 062 par1World.setBlockAndMetadataWithNotify(j1 - 1, k1, l1, Block.torchWood.blockID, 0, 2); 063 } 064 065 if (par1World.isAirBlock(j1 + 1, k1, l1) && par1World.doesBlockHaveSolidTopSurface(j1 - 1, k1 - 1, l1)) 066 { 067 par1World.setBlockAndMetadataWithNotify(j1 + 1, k1, l1, Block.torchWood.blockID, 0, 2); 068 } 069 070 if (par1World.isAirBlock(j1, k1, l1 - 1) && par1World.doesBlockHaveSolidTopSurface(j1 - 1, k1 - 1, l1)) 071 { 072 par1World.setBlockAndMetadataWithNotify(j1, k1, l1 - 1, Block.torchWood.blockID, 0, 2); 073 } 074 075 if (par1World.isAirBlock(j1, k1, l1 + 1) && par1World.doesBlockHaveSolidTopSurface(j1 - 1, k1 - 1, l1)) 076 { 077 par1World.setBlockAndMetadataWithNotify(j1, k1, l1 + 1, Block.torchWood.blockID, 0, 2); 078 } 079 080 return true; 081 } 082 } 083 084 return false; 085 } 086 } 087}