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