001    package net.minecraft.src;
002    
003    import java.util.Iterator;
004    import java.util.LinkedList;
005    import java.util.List;
006    import java.util.Random;
007    
008    public class ComponentMineshaftRoom extends StructureComponent
009    {
010        private List field_74949_a = new LinkedList();
011    
012        public ComponentMineshaftRoom(int par1, Random par2Random, int par3, int par4)
013        {
014            super(par1);
015            this.boundingBox = new StructureBoundingBox(par3, 50, par4, par3 + 7 + par2Random.nextInt(6), 54 + par2Random.nextInt(6), par4 + 7 + par2Random.nextInt(6));
016        }
017    
018        /**
019         * Initiates construction of the Structure Component picked, at the current Location of StructGen
020         */
021        public void buildComponent(StructureComponent par1StructureComponent, List par2List, Random par3Random)
022        {
023            int var4 = this.getComponentType();
024            int var6 = this.boundingBox.getYSize() - 3 - 1;
025    
026            if (var6 <= 0)
027            {
028                var6 = 1;
029            }
030    
031            int var5;
032            StructureComponent var7;
033            StructureBoundingBox var8;
034    
035            for (var5 = 0; var5 < this.boundingBox.getXSize(); var5 += 4)
036            {
037                var5 += par3Random.nextInt(this.boundingBox.getXSize());
038    
039                if (var5 + 3 > this.boundingBox.getXSize())
040                {
041                    break;
042                }
043    
044                var7 = StructureMineshaftPieces.getNextComponent(par1StructureComponent, par2List, par3Random, this.boundingBox.minX + var5, this.boundingBox.minY + par3Random.nextInt(var6) + 1, this.boundingBox.minZ - 1, 2, var4);
045    
046                if (var7 != null)
047                {
048                    var8 = var7.getBoundingBox();
049                    this.field_74949_a.add(new StructureBoundingBox(var8.minX, var8.minY, this.boundingBox.minZ, var8.maxX, var8.maxY, this.boundingBox.minZ + 1));
050                }
051            }
052    
053            for (var5 = 0; var5 < this.boundingBox.getXSize(); var5 += 4)
054            {
055                var5 += par3Random.nextInt(this.boundingBox.getXSize());
056    
057                if (var5 + 3 > this.boundingBox.getXSize())
058                {
059                    break;
060                }
061    
062                var7 = StructureMineshaftPieces.getNextComponent(par1StructureComponent, par2List, par3Random, this.boundingBox.minX + var5, this.boundingBox.minY + par3Random.nextInt(var6) + 1, this.boundingBox.maxZ + 1, 0, var4);
063    
064                if (var7 != null)
065                {
066                    var8 = var7.getBoundingBox();
067                    this.field_74949_a.add(new StructureBoundingBox(var8.minX, var8.minY, this.boundingBox.maxZ - 1, var8.maxX, var8.maxY, this.boundingBox.maxZ));
068                }
069            }
070    
071            for (var5 = 0; var5 < this.boundingBox.getZSize(); var5 += 4)
072            {
073                var5 += par3Random.nextInt(this.boundingBox.getZSize());
074    
075                if (var5 + 3 > this.boundingBox.getZSize())
076                {
077                    break;
078                }
079    
080                var7 = StructureMineshaftPieces.getNextComponent(par1StructureComponent, par2List, par3Random, this.boundingBox.minX - 1, this.boundingBox.minY + par3Random.nextInt(var6) + 1, this.boundingBox.minZ + var5, 1, var4);
081    
082                if (var7 != null)
083                {
084                    var8 = var7.getBoundingBox();
085                    this.field_74949_a.add(new StructureBoundingBox(this.boundingBox.minX, var8.minY, var8.minZ, this.boundingBox.minX + 1, var8.maxY, var8.maxZ));
086                }
087            }
088    
089            for (var5 = 0; var5 < this.boundingBox.getZSize(); var5 += 4)
090            {
091                var5 += par3Random.nextInt(this.boundingBox.getZSize());
092    
093                if (var5 + 3 > this.boundingBox.getZSize())
094                {
095                    break;
096                }
097    
098                var7 = StructureMineshaftPieces.getNextComponent(par1StructureComponent, par2List, par3Random, this.boundingBox.maxX + 1, this.boundingBox.minY + par3Random.nextInt(var6) + 1, this.boundingBox.minZ + var5, 3, var4);
099    
100                if (var7 != null)
101                {
102                    var8 = var7.getBoundingBox();
103                    this.field_74949_a.add(new StructureBoundingBox(this.boundingBox.maxX - 1, var8.minY, var8.minZ, this.boundingBox.maxX, var8.maxY, var8.maxZ));
104                }
105            }
106        }
107    
108        /**
109         * second Part of Structure generating, this for example places Spiderwebs, Mob Spawners, it closes Mineshafts at
110         * the end, it adds Fences...
111         */
112        public boolean addComponentParts(World par1World, Random par2Random, StructureBoundingBox par3StructureBoundingBox)
113        {
114            if (this.isLiquidInStructureBoundingBox(par1World, par3StructureBoundingBox))
115            {
116                return false;
117            }
118            else
119            {
120                this.fillWithBlocks(par1World, par3StructureBoundingBox, this.boundingBox.minX, this.boundingBox.minY, this.boundingBox.minZ, this.boundingBox.maxX, this.boundingBox.minY, this.boundingBox.maxZ, Block.dirt.blockID, 0, true);
121                this.fillWithBlocks(par1World, par3StructureBoundingBox, this.boundingBox.minX, this.boundingBox.minY + 1, this.boundingBox.minZ, this.boundingBox.maxX, Math.min(this.boundingBox.minY + 3, this.boundingBox.maxY), this.boundingBox.maxZ, 0, 0, false);
122                Iterator var4 = this.field_74949_a.iterator();
123    
124                while (var4.hasNext())
125                {
126                    StructureBoundingBox var5 = (StructureBoundingBox)var4.next();
127                    this.fillWithBlocks(par1World, par3StructureBoundingBox, var5.minX, var5.maxY - 2, var5.minZ, var5.maxX, var5.maxY, var5.maxZ, 0, 0, false);
128                }
129    
130                this.randomlyRareFillWithBlocks(par1World, par3StructureBoundingBox, this.boundingBox.minX, this.boundingBox.minY + 4, this.boundingBox.minZ, this.boundingBox.maxX, this.boundingBox.maxY, this.boundingBox.maxZ, 0, false);
131                return true;
132            }
133        }
134    }