001 package net.minecraft.world.gen.structure; 002 003 import java.util.Iterator; 004 import java.util.LinkedList; 005 import java.util.Random; 006 import net.minecraft.world.World; 007 008 public abstract class StructureStart 009 { 010 /** List of all StructureComponents that are part of this structure */ 011 protected LinkedList components = new LinkedList(); 012 protected StructureBoundingBox boundingBox; 013 014 public StructureBoundingBox getBoundingBox() 015 { 016 return this.boundingBox; 017 } 018 019 public LinkedList getComponents() 020 { 021 return this.components; 022 } 023 024 /** 025 * Keeps iterating Structure Pieces and spawning them until the checks tell it to stop 026 */ 027 public void generateStructure(World par1World, Random par2Random, StructureBoundingBox par3StructureBoundingBox) 028 { 029 Iterator var4 = this.components.iterator(); 030 031 while (var4.hasNext()) 032 { 033 StructureComponent var5 = (StructureComponent)var4.next(); 034 035 if (var5.getBoundingBox().intersectsWith(par3StructureBoundingBox) && !var5.addComponentParts(par1World, par2Random, par3StructureBoundingBox)) 036 { 037 var4.remove(); 038 } 039 } 040 } 041 042 /** 043 * Calculates total bounding box based on components' bounding boxes and saves it to boundingBox 044 */ 045 protected void updateBoundingBox() 046 { 047 this.boundingBox = StructureBoundingBox.getNewBoundingBox(); 048 Iterator var1 = this.components.iterator(); 049 050 while (var1.hasNext()) 051 { 052 StructureComponent var2 = (StructureComponent)var1.next(); 053 this.boundingBox.expandTo(var2.getBoundingBox()); 054 } 055 } 056 057 /** 058 * offsets the structure Bounding Boxes up to a certain height, typically 63 - 10 059 */ 060 protected void markAvailableHeight(World par1World, Random par2Random, int par3) 061 { 062 int var4 = 63 - par3; 063 int var5 = this.boundingBox.getYSize() + 1; 064 065 if (var5 < var4) 066 { 067 var5 += par2Random.nextInt(var4 - var5); 068 } 069 070 int var6 = var5 - this.boundingBox.maxY; 071 this.boundingBox.offset(0, var6, 0); 072 Iterator var7 = this.components.iterator(); 073 074 while (var7.hasNext()) 075 { 076 StructureComponent var8 = (StructureComponent)var7.next(); 077 var8.getBoundingBox().offset(0, var6, 0); 078 } 079 } 080 081 protected void setRandomHeight(World par1World, Random par2Random, int par3, int par4) 082 { 083 int var5 = par4 - par3 + 1 - this.boundingBox.getYSize(); 084 boolean var6 = true; 085 int var10; 086 087 if (var5 > 1) 088 { 089 var10 = par3 + par2Random.nextInt(var5); 090 } 091 else 092 { 093 var10 = par3; 094 } 095 096 int var7 = var10 - this.boundingBox.minY; 097 this.boundingBox.offset(0, var7, 0); 098 Iterator var8 = this.components.iterator(); 099 100 while (var8.hasNext()) 101 { 102 StructureComponent var9 = (StructureComponent)var8.next(); 103 var9.getBoundingBox().offset(0, var7, 0); 104 } 105 } 106 107 /** 108 * currently only defined for Villages, returns true if Village has more than 2 non-road components 109 */ 110 public boolean isSizeableStructure() 111 { 112 return true; 113 } 114 }