    001    package net.minecraft.world.gen.structure;
    002
    003    import java.util.List;
    004    import java.util.Random;
    005    import net.minecraft.world.World;
    006
    007    public class ComponentMineshaftStairs extends StructureComponent
    008    {
    009        public ComponentMineshaftStairs(int par1, Random par2Random, StructureBoundingBox par3StructureBoundingBox, int par4)
    010        {
    011            super(par1);
    012            this.coordBaseMode = par4;
    013            this.boundingBox = par3StructureBoundingBox;
    014        }
    015
    016        /**
    017         * Trys to find a valid place to put this component.
    018         */
    019        public static StructureBoundingBox findValidPlacement(List par0List, Random par1Random, int par2, int par3, int par4, int par5)
    020        {
    021            StructureBoundingBox var6 = new StructureBoundingBox(par2, par3 - 5, par4, par2, par3 + 2, par4);
    022
    023            switch (par5)
    024            {
    025                case 0:
    026                    var6.maxX = par2 + 2;
    027                    var6.maxZ = par4 + 8;
    028                    break;
    029                case 1:
    030                    var6.minX = par2 - 8;
    031                    var6.maxZ = par4 + 2;
    032                    break;
    033                case 2:
    034                    var6.maxX = par2 + 2;
    035                    var6.minZ = par4 - 8;
    036                    break;
    037                case 3:
    038                    var6.maxX = par2 + 8;
    039                    var6.maxZ = par4 + 2;
    040            }
    041
    042            return StructureComponent.findIntersecting(par0List, var6) != null ? null : var6;
    043        }
    044
    045        /**
    046         * Initiates construction of the Structure Component picked, at the current Location of StructGen
    047         */
    048        public void buildComponent(StructureComponent par1StructureComponent, List par2List, Random par3Random)
    049        {
    050            int var4 = this.getComponentType();
    051
    052            switch (this.coordBaseMode)
    053            {
    054                case 0:
    055                    StructureMineshaftPieces.getNextComponent(par1StructureComponent, par2List, par3Random, this.boundingBox.minX, this.boundingBox.minY, this.boundingBox.maxZ + 1, 0, var4);
    056                    break;
    057                case 1:
    058                    StructureMineshaftPieces.getNextComponent(par1StructureComponent, par2List, par3Random, this.boundingBox.minX - 1, this.boundingBox.minY, this.boundingBox.minZ, 1, var4);
    059                    break;
    060                case 2:
    061                    StructureMineshaftPieces.getNextComponent(par1StructureComponent, par2List, par3Random, this.boundingBox.minX, this.boundingBox.minY, this.boundingBox.minZ - 1, 2, var4);
    062                    break;
    063                case 3:
    064                    StructureMineshaftPieces.getNextComponent(par1StructureComponent, par2List, par3Random, this.boundingBox.maxX + 1, this.boundingBox.minY, this.boundingBox.minZ, 3, var4);
    065            }
    066        }
    067
    068        /**
    069         * second Part of Structure generating, this for example places Spiderwebs, Mob Spawners, it closes Mineshafts at
    070         * the end, it adds Fences...
    071         */
    072        public boolean addComponentParts(World par1World, Random par2Random, StructureBoundingBox par3StructureBoundingBox)
    073        {
    074            if (this.isLiquidInStructureBoundingBox(par1World, par3StructureBoundingBox))
    075            {
    076                return false;
    077            }
    078            else
    079            {
    080                this.fillWithBlocks(par1World, par3StructureBoundingBox, 0, 5, 0, 2, 7, 1, 0, 0, false);
    081                this.fillWithBlocks(par1World, par3StructureBoundingBox, 0, 0, 7, 2, 2, 8, 0, 0, false);
    082
    083                for (int var4 = 0; var4 < 5; ++var4)
    084                {
    085                    this.fillWithBlocks(par1World, par3StructureBoundingBox, 0, 5 - var4 - (var4 < 4 ? 1 : 0), 2 + var4, 2, 7 - var4, 2 + var4, 0, 0, false);
    086                }
    087
    088                return true;
    089            }
    090        }
    091    }