    001package net.minecraft.world.gen.structure;
    002
    003import java.util.List;
    004import java.util.Random;
    005import net.minecraft.block.Block;
    006import net.minecraft.item.Item;
    007import net.minecraft.util.WeightedRandomChestContent;
    008import net.minecraft.world.World;
    009
    010import net.minecraftforge.common.ChestGenHooks;
    011import static net.minecraftforge.common.ChestGenHooks.*;
    012
    013public class ComponentStrongholdChestCorridor extends ComponentStronghold
    014{
    015    /** List of items that Stronghold chests can contain. */
    016    public static final WeightedRandomChestContent[] strongholdChestContents = new WeightedRandomChestContent[] {new WeightedRandomChestContent(Item.enderPearl.itemID, 0, 1, 1, 10), new WeightedRandomChestContent(Item.diamond.itemID, 0, 1, 3, 3), new WeightedRandomChestContent(Item.ingotIron.itemID, 0, 1, 5, 10), new WeightedRandomChestContent(Item.ingotGold.itemID, 0, 1, 3, 5), new WeightedRandomChestContent(Item.redstone.itemID, 0, 4, 9, 5), new WeightedRandomChestContent(Item.bread.itemID, 0, 1, 3, 15), new WeightedRandomChestContent(Item.appleRed.itemID, 0, 1, 3, 15), new WeightedRandomChestContent(Item.pickaxeIron.itemID, 0, 1, 1, 5), new WeightedRandomChestContent(Item.swordIron.itemID, 0, 1, 1, 5), new WeightedRandomChestContent(Item.plateIron.itemID, 0, 1, 1, 5), new WeightedRandomChestContent(Item.helmetIron.itemID, 0, 1, 1, 5), new WeightedRandomChestContent(Item.legsIron.itemID, 0, 1, 1, 5), new WeightedRandomChestContent(Item.bootsIron.itemID, 0, 1, 1, 5), new WeightedRandomChestContent(Item.appleGold.itemID, 0, 1, 1, 1)};
    017    private final EnumDoor doorType;
    018    private boolean hasMadeChest;
    019
    020    public ComponentStrongholdChestCorridor(int par1, Random par2Random, StructureBoundingBox par3StructureBoundingBox, int par4)
    021    {
    022        super(par1);
    023        this.coordBaseMode = par4;
    024        this.doorType = this.getRandomDoor(par2Random);
    025        this.boundingBox = par3StructureBoundingBox;
    026    }
    027
    028    /**
    029     * Initiates construction of the Structure Component picked, at the current Location of StructGen
    030     */
    031    public void buildComponent(StructureComponent par1StructureComponent, List par2List, Random par3Random)
    032    {
    033        this.getNextComponentNormal((ComponentStrongholdStairs2)par1StructureComponent, par2List, par3Random, 1, 1);
    034    }
    035
    036    public static ComponentStrongholdChestCorridor findValidPlacement(List par0List, Random par1Random, int par2, int par3, int par4, int par5, int par6)
    037    {
    038        StructureBoundingBox structureboundingbox = StructureBoundingBox.getComponentToAddBoundingBox(par2, par3, par4, -1, -1, 0, 5, 5, 7, par5);
    039        return canStrongholdGoDeeper(structureboundingbox) && StructureComponent.findIntersecting(par0List, structureboundingbox) == null ? new ComponentStrongholdChestCorridor(par6, par1Random, structureboundingbox, par5) : null;
    040    }
    041
    042    /**
    043     * second Part of Structure generating, this for example places Spiderwebs, Mob Spawners, it closes Mineshafts at
    044     * the end, it adds Fences...
    045     */
    046    public boolean addComponentParts(World par1World, Random par2Random, StructureBoundingBox par3StructureBoundingBox)
    047    {
    048        if (this.isLiquidInStructureBoundingBox(par1World, par3StructureBoundingBox))
    049        {
    050            return false;
    051        }
    052        else
    053        {
    054            this.fillWithRandomizedBlocks(par1World, par3StructureBoundingBox, 0, 0, 0, 4, 4, 6, true, par2Random, StructureStrongholdPieces.getStrongholdStones());
    055            this.placeDoor(par1World, par2Random, par3StructureBoundingBox, this.doorType, 1, 1, 0);
    056            this.placeDoor(par1World, par2Random, par3StructureBoundingBox, EnumDoor.OPENING, 1, 1, 6);
    057            this.fillWithBlocks(par1World, par3StructureBoundingBox, 3, 1, 2, 3, 1, 4, Block.stoneBrick.blockID, Block.stoneBrick.blockID, false);
    058            this.placeBlockAtCurrentPosition(par1World, Block.stoneSingleSlab.blockID, 5, 3, 1, 1, par3StructureBoundingBox);
    059            this.placeBlockAtCurrentPosition(par1World, Block.stoneSingleSlab.blockID, 5, 3, 1, 5, par3StructureBoundingBox);
    060            this.placeBlockAtCurrentPosition(par1World, Block.stoneSingleSlab.blockID, 5, 3, 2, 2, par3StructureBoundingBox);
    061            this.placeBlockAtCurrentPosition(par1World, Block.stoneSingleSlab.blockID, 5, 3, 2, 4, par3StructureBoundingBox);
    062            int i;
    063
    064            for (i = 2; i <= 4; ++i)
    065            {
    066                this.placeBlockAtCurrentPosition(par1World, Block.stoneSingleSlab.blockID, 5, 2, 1, i, par3StructureBoundingBox);
    067            }
    068
    069            if (!this.hasMadeChest)
    070            {
    071                i = this.getYWithOffset(2);
    072                int j = this.getXWithOffset(3, 3);
    073                int k = this.getZWithOffset(3, 3);
    074
    075                if (par3StructureBoundingBox.isVecInside(j, i, k))
    076                {
    077                    this.hasMadeChest = true;
    078                    this.generateStructureChestContents(par1World, par3StructureBoundingBox, par2Random, 3, 2, 3, ChestGenHooks.getItems(STRONGHOLD_CORRIDOR, par2Random), ChestGenHooks.getCount(STRONGHOLD_CORRIDOR, par2Random));
    079                }
    080            }
    081
    082            return true;
    083        }
    084    }
    085}