    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 ComponentStrongholdRoomCrossing extends ComponentStronghold
    014{
    015    /**
    016     * Items that could generate in the chest that is located in Stronghold Room Crossing.
    017     */
    018    public static final WeightedRandomChestContent[] strongholdRoomCrossingChestContents = new WeightedRandomChestContent[] {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.coal.itemID, 0, 3, 8, 10), 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, 1)};
    019    protected final EnumDoor doorType;
    020    protected final int roomType;
    021
    022    public ComponentStrongholdRoomCrossing(int par1, Random par2Random, StructureBoundingBox par3StructureBoundingBox, int par4)
    023    {
    024        super(par1);
    025        this.coordBaseMode = par4;
    026        this.doorType = this.getRandomDoor(par2Random);
    027        this.boundingBox = par3StructureBoundingBox;
    028        this.roomType = par2Random.nextInt(5);
    029    }
    030
    031    /**
    032     * Initiates construction of the Structure Component picked, at the current Location of StructGen
    033     */
    034    public void buildComponent(StructureComponent par1StructureComponent, List par2List, Random par3Random)
    035    {
    036        this.getNextComponentNormal((ComponentStrongholdStairs2)par1StructureComponent, par2List, par3Random, 4, 1);
    037        this.getNextComponentX((ComponentStrongholdStairs2)par1StructureComponent, par2List, par3Random, 1, 4);
    038        this.getNextComponentZ((ComponentStrongholdStairs2)par1StructureComponent, par2List, par3Random, 1, 4);
    039    }
    040
    041    public static ComponentStrongholdRoomCrossing findValidPlacement(List par0List, Random par1Random, int par2, int par3, int par4, int par5, int par6)
    042    {
    043        StructureBoundingBox structureboundingbox = StructureBoundingBox.getComponentToAddBoundingBox(par2, par3, par4, -4, -1, 0, 11, 7, 11, par5);
    044        return canStrongholdGoDeeper(structureboundingbox) && StructureComponent.findIntersecting(par0List, structureboundingbox) == null ? new ComponentStrongholdRoomCrossing(par6, par1Random, structureboundingbox, par5) : null;
    045    }
    046
    047    /**
    048     * second Part of Structure generating, this for example places Spiderwebs, Mob Spawners, it closes Mineshafts at
    049     * the end, it adds Fences...
    050     */
    051    public boolean addComponentParts(World par1World, Random par2Random, StructureBoundingBox par3StructureBoundingBox)
    052    {
    053        if (this.isLiquidInStructureBoundingBox(par1World, par3StructureBoundingBox))
    054        {
    055            return false;
    056        }
    057        else
    058        {
    059            this.fillWithRandomizedBlocks(par1World, par3StructureBoundingBox, 0, 0, 0, 10, 6, 10, true, par2Random, StructureStrongholdPieces.getStrongholdStones());
    060            this.placeDoor(par1World, par2Random, par3StructureBoundingBox, this.doorType, 4, 1, 0);
    061            this.fillWithBlocks(par1World, par3StructureBoundingBox, 4, 1, 10, 6, 3, 10, 0, 0, false);
    062            this.fillWithBlocks(par1World, par3StructureBoundingBox, 0, 1, 4, 0, 3, 6, 0, 0, false);
    063            this.fillWithBlocks(par1World, par3StructureBoundingBox, 10, 1, 4, 10, 3, 6, 0, 0, false);
    064            int i;
    065
    066            switch (this.roomType)
    067            {
    068                case 0:
    069                    this.placeBlockAtCurrentPosition(par1World, Block.stoneBrick.blockID, 0, 5, 1, 5, par3StructureBoundingBox);
    070                    this.placeBlockAtCurrentPosition(par1World, Block.stoneBrick.blockID, 0, 5, 2, 5, par3StructureBoundingBox);
    071                    this.placeBlockAtCurrentPosition(par1World, Block.stoneBrick.blockID, 0, 5, 3, 5, par3StructureBoundingBox);
    072                    this.placeBlockAtCurrentPosition(par1World, Block.torchWood.blockID, 0, 4, 3, 5, par3StructureBoundingBox);
    073                    this.placeBlockAtCurrentPosition(par1World, Block.torchWood.blockID, 0, 6, 3, 5, par3StructureBoundingBox);
    074                    this.placeBlockAtCurrentPosition(par1World, Block.torchWood.blockID, 0, 5, 3, 4, par3StructureBoundingBox);
    075                    this.placeBlockAtCurrentPosition(par1World, Block.torchWood.blockID, 0, 5, 3, 6, par3StructureBoundingBox);
    076                    this.placeBlockAtCurrentPosition(par1World, Block.stoneSingleSlab.blockID, 0, 4, 1, 4, par3StructureBoundingBox);
    077                    this.placeBlockAtCurrentPosition(par1World, Block.stoneSingleSlab.blockID, 0, 4, 1, 5, par3StructureBoundingBox);
    078                    this.placeBlockAtCurrentPosition(par1World, Block.stoneSingleSlab.blockID, 0, 4, 1, 6, par3StructureBoundingBox);
    079                    this.placeBlockAtCurrentPosition(par1World, Block.stoneSingleSlab.blockID, 0, 6, 1, 4, par3StructureBoundingBox);
    080                    this.placeBlockAtCurrentPosition(par1World, Block.stoneSingleSlab.blockID, 0, 6, 1, 5, par3StructureBoundingBox);
    081                    this.placeBlockAtCurrentPosition(par1World, Block.stoneSingleSlab.blockID, 0, 6, 1, 6, par3StructureBoundingBox);
    082                    this.placeBlockAtCurrentPosition(par1World, Block.stoneSingleSlab.blockID, 0, 5, 1, 4, par3StructureBoundingBox);
    083                    this.placeBlockAtCurrentPosition(par1World, Block.stoneSingleSlab.blockID, 0, 5, 1, 6, par3StructureBoundingBox);
    084                    break;
    085                case 1:
    086                    for (i = 0; i < 5; ++i)
    087                    {
    088                        this.placeBlockAtCurrentPosition(par1World, Block.stoneBrick.blockID, 0, 3, 1, 3 + i, par3StructureBoundingBox);
    089                        this.placeBlockAtCurrentPosition(par1World, Block.stoneBrick.blockID, 0, 7, 1, 3 + i, par3StructureBoundingBox);
    090                        this.placeBlockAtCurrentPosition(par1World, Block.stoneBrick.blockID, 0, 3 + i, 1, 3, par3StructureBoundingBox);
    091                        this.placeBlockAtCurrentPosition(par1World, Block.stoneBrick.blockID, 0, 3 + i, 1, 7, par3StructureBoundingBox);
    092                    }
    093
    094                    this.placeBlockAtCurrentPosition(par1World, Block.stoneBrick.blockID, 0, 5, 1, 5, par3StructureBoundingBox);
    095                    this.placeBlockAtCurrentPosition(par1World, Block.stoneBrick.blockID, 0, 5, 2, 5, par3StructureBoundingBox);
    096                    this.placeBlockAtCurrentPosition(par1World, Block.stoneBrick.blockID, 0, 5, 3, 5, par3StructureBoundingBox);
    097                    this.placeBlockAtCurrentPosition(par1World, Block.waterMoving.blockID, 0, 5, 4, 5, par3StructureBoundingBox);
    098                    break;
    099                case 2:
    100                    for (i = 1; i <= 9; ++i)
    101                    {
    102                        this.placeBlockAtCurrentPosition(par1World, Block.cobblestone.blockID, 0, 1, 3, i, par3StructureBoundingBox);
    103                        this.placeBlockAtCurrentPosition(par1World, Block.cobblestone.blockID, 0, 9, 3, i, par3StructureBoundingBox);
    104                    }
    105
    106                    for (i = 1; i <= 9; ++i)
    107                    {
    108                        this.placeBlockAtCurrentPosition(par1World, Block.cobblestone.blockID, 0, i, 3, 1, par3StructureBoundingBox);
    109                        this.placeBlockAtCurrentPosition(par1World, Block.cobblestone.blockID, 0, i, 3, 9, par3StructureBoundingBox);
    110                    }
    111
    112                    this.placeBlockAtCurrentPosition(par1World, Block.cobblestone.blockID, 0, 5, 1, 4, par3StructureBoundingBox);
    113                    this.placeBlockAtCurrentPosition(par1World, Block.cobblestone.blockID, 0, 5, 1, 6, par3StructureBoundingBox);
    114                    this.placeBlockAtCurrentPosition(par1World, Block.cobblestone.blockID, 0, 5, 3, 4, par3StructureBoundingBox);
    115                    this.placeBlockAtCurrentPosition(par1World, Block.cobblestone.blockID, 0, 5, 3, 6, par3StructureBoundingBox);
    116                    this.placeBlockAtCurrentPosition(par1World, Block.cobblestone.blockID, 0, 4, 1, 5, par3StructureBoundingBox);
    117                    this.placeBlockAtCurrentPosition(par1World, Block.cobblestone.blockID, 0, 6, 1, 5, par3StructureBoundingBox);
    118                    this.placeBlockAtCurrentPosition(par1World, Block.cobblestone.blockID, 0, 4, 3, 5, par3StructureBoundingBox);
    119                    this.placeBlockAtCurrentPosition(par1World, Block.cobblestone.blockID, 0, 6, 3, 5, par3StructureBoundingBox);
    120
    121                    for (i = 1; i <= 3; ++i)
    122                    {
    123                        this.placeBlockAtCurrentPosition(par1World, Block.cobblestone.blockID, 0, 4, i, 4, par3StructureBoundingBox);
    124                        this.placeBlockAtCurrentPosition(par1World, Block.cobblestone.blockID, 0, 6, i, 4, par3StructureBoundingBox);
    125                        this.placeBlockAtCurrentPosition(par1World, Block.cobblestone.blockID, 0, 4, i, 6, par3StructureBoundingBox);
    126                        this.placeBlockAtCurrentPosition(par1World, Block.cobblestone.blockID, 0, 6, i, 6, par3StructureBoundingBox);
    127                    }
    128
    129                    this.placeBlockAtCurrentPosition(par1World, Block.torchWood.blockID, 0, 5, 3, 5, par3StructureBoundingBox);
    130
    131                    for (i = 2; i <= 8; ++i)
    132                    {
    133                        this.placeBlockAtCurrentPosition(par1World, Block.planks.blockID, 0, 2, 3, i, par3StructureBoundingBox);
    134                        this.placeBlockAtCurrentPosition(par1World, Block.planks.blockID, 0, 3, 3, i, par3StructureBoundingBox);
    135
    136                        if (i <= 3 || i >= 7)
    137                        {
    138                            this.placeBlockAtCurrentPosition(par1World, Block.planks.blockID, 0, 4, 3, i, par3StructureBoundingBox);
    139                            this.placeBlockAtCurrentPosition(par1World, Block.planks.blockID, 0, 5, 3, i, par3StructureBoundingBox);
    140                            this.placeBlockAtCurrentPosition(par1World, Block.planks.blockID, 0, 6, 3, i, par3StructureBoundingBox);
    141                        }
    142
    143                        this.placeBlockAtCurrentPosition(par1World, Block.planks.blockID, 0, 7, 3, i, par3StructureBoundingBox);
    144                        this.placeBlockAtCurrentPosition(par1World, Block.planks.blockID, 0, 8, 3, i, par3StructureBoundingBox);
    145                    }
    146
    147                    this.placeBlockAtCurrentPosition(par1World, Block.ladder.blockID, this.getMetadataWithOffset(Block.ladder.blockID, 4), 9, 1, 3, par3StructureBoundingBox);
    148                    this.placeBlockAtCurrentPosition(par1World, Block.ladder.blockID, this.getMetadataWithOffset(Block.ladder.blockID, 4), 9, 2, 3, par3StructureBoundingBox);
    149                    this.placeBlockAtCurrentPosition(par1World, Block.ladder.blockID, this.getMetadataWithOffset(Block.ladder.blockID, 4), 9, 3, 3, par3StructureBoundingBox);
    150                    this.generateStructureChestContents(par1World, par3StructureBoundingBox, par2Random, 3, 4, 8, ChestGenHooks.getItems(STRONGHOLD_CROSSING, par2Random), ChestGenHooks.getCount(STRONGHOLD_CROSSING, par2Random));
    151            }
    152
    153            return true;
    154        }
    155    }
    156}