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 }