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 }