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