001package net.minecraft.world.gen.structure; 002 003import java.util.Iterator; 004import java.util.LinkedList; 005import java.util.List; 006import java.util.Random; 007import net.minecraft.block.Block; 008import net.minecraft.world.World; 009 010public 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 i = this.getComponentType(); 027 int j = this.boundingBox.getYSize() - 3 - 1; 028 029 if (j <= 0) 030 { 031 j = 1; 032 } 033 034 int k; 035 StructureComponent structurecomponent1; 036 StructureBoundingBox structureboundingbox; 037 038 for (k = 0; k < this.boundingBox.getXSize(); k += 4) 039 { 040 k += par3Random.nextInt(this.boundingBox.getXSize()); 041 042 if (k + 3 > this.boundingBox.getXSize()) 043 { 044 break; 045 } 046 047 structurecomponent1 = StructureMineshaftPieces.getNextComponent(par1StructureComponent, par2List, par3Random, this.boundingBox.minX + k, this.boundingBox.minY + par3Random.nextInt(j) + 1, this.boundingBox.minZ - 1, 2, i); 048 049 if (structurecomponent1 != null) 050 { 051 structureboundingbox = structurecomponent1.getBoundingBox(); 052 this.roomsLinkedToTheRoom.add(new StructureBoundingBox(structureboundingbox.minX, structureboundingbox.minY, this.boundingBox.minZ, structureboundingbox.maxX, structureboundingbox.maxY, this.boundingBox.minZ + 1)); 053 } 054 } 055 056 for (k = 0; k < this.boundingBox.getXSize(); k += 4) 057 { 058 k += par3Random.nextInt(this.boundingBox.getXSize()); 059 060 if (k + 3 > this.boundingBox.getXSize()) 061 { 062 break; 063 } 064 065 structurecomponent1 = StructureMineshaftPieces.getNextComponent(par1StructureComponent, par2List, par3Random, this.boundingBox.minX + k, this.boundingBox.minY + par3Random.nextInt(j) + 1, this.boundingBox.maxZ + 1, 0, i); 066 067 if (structurecomponent1 != null) 068 { 069 structureboundingbox = structurecomponent1.getBoundingBox(); 070 this.roomsLinkedToTheRoom.add(new StructureBoundingBox(structureboundingbox.minX, structureboundingbox.minY, this.boundingBox.maxZ - 1, structureboundingbox.maxX, structureboundingbox.maxY, this.boundingBox.maxZ)); 071 } 072 } 073 074 for (k = 0; k < this.boundingBox.getZSize(); k += 4) 075 { 076 k += par3Random.nextInt(this.boundingBox.getZSize()); 077 078 if (k + 3 > this.boundingBox.getZSize()) 079 { 080 break; 081 } 082 083 structurecomponent1 = StructureMineshaftPieces.getNextComponent(par1StructureComponent, par2List, par3Random, this.boundingBox.minX - 1, this.boundingBox.minY + par3Random.nextInt(j) + 1, this.boundingBox.minZ + k, 1, i); 084 085 if (structurecomponent1 != null) 086 { 087 structureboundingbox = structurecomponent1.getBoundingBox(); 088 this.roomsLinkedToTheRoom.add(new StructureBoundingBox(this.boundingBox.minX, structureboundingbox.minY, structureboundingbox.minZ, this.boundingBox.minX + 1, structureboundingbox.maxY, structureboundingbox.maxZ)); 089 } 090 } 091 092 for (k = 0; k < this.boundingBox.getZSize(); k += 4) 093 { 094 k += par3Random.nextInt(this.boundingBox.getZSize()); 095 096 if (k + 3 > this.boundingBox.getZSize()) 097 { 098 break; 099 } 100 101 structurecomponent1 = StructureMineshaftPieces.getNextComponent(par1StructureComponent, par2List, par3Random, this.boundingBox.maxX + 1, this.boundingBox.minY + par3Random.nextInt(j) + 1, this.boundingBox.minZ + k, 3, i); 102 103 if (structurecomponent1 != null) 104 { 105 structureboundingbox = structurecomponent1.getBoundingBox(); 106 this.roomsLinkedToTheRoom.add(new StructureBoundingBox(this.boundingBox.maxX - 1, structureboundingbox.minY, structureboundingbox.minZ, this.boundingBox.maxX, structureboundingbox.maxY, structureboundingbox.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 iterator = this.roomsLinkedToTheRoom.iterator(); 126 127 while (iterator.hasNext()) 128 { 129 StructureBoundingBox structureboundingbox1 = (StructureBoundingBox)iterator.next(); 130 this.fillWithBlocks(par1World, par3StructureBoundingBox, structureboundingbox1.minX, structureboundingbox1.maxY - 2, structureboundingbox1.minZ, structureboundingbox1.maxX, structureboundingbox1.maxY, structureboundingbox1.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}