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 }