001 package net.minecraft.src;
002
003 import java.util.List;
004 import java.util.Random;
005
006 public class ComponentVillagePathGen extends ComponentVillageRoadPiece
007 {
008 private int averageGroundLevel;
009
010 public ComponentVillagePathGen(ComponentVillageStartPiece par1ComponentVillageStartPiece, int par2, Random par3Random, StructureBoundingBox par4StructureBoundingBox, int par5)
011 {
012 super(par1ComponentVillageStartPiece, par2);
013 this.coordBaseMode = par5;
014 this.boundingBox = par4StructureBoundingBox;
015 this.averageGroundLevel = Math.max(par4StructureBoundingBox.getXSize(), par4StructureBoundingBox.getZSize());
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 boolean var4 = false;
024 int var5;
025 StructureComponent var6;
026
027 for (var5 = par3Random.nextInt(5); var5 < this.averageGroundLevel - 8; var5 += 2 + par3Random.nextInt(5))
028 {
029 var6 = this.getNextComponentNN((ComponentVillageStartPiece)par1StructureComponent, par2List, par3Random, 0, var5);
030
031 if (var6 != null)
032 {
033 var5 += Math.max(var6.boundingBox.getXSize(), var6.boundingBox.getZSize());
034 var4 = true;
035 }
036 }
037
038 for (var5 = par3Random.nextInt(5); var5 < this.averageGroundLevel - 8; var5 += 2 + par3Random.nextInt(5))
039 {
040 var6 = this.getNextComponentPP((ComponentVillageStartPiece)par1StructureComponent, par2List, par3Random, 0, var5);
041
042 if (var6 != null)
043 {
044 var5 += Math.max(var6.boundingBox.getXSize(), var6.boundingBox.getZSize());
045 var4 = true;
046 }
047 }
048
049 if (var4 && par3Random.nextInt(3) > 0)
050 {
051 switch (this.coordBaseMode)
052 {
053 case 0:
054 StructureVillagePieces.getNextStructureComponentVillagePath((ComponentVillageStartPiece)par1StructureComponent, par2List, par3Random, this.boundingBox.minX - 1, this.boundingBox.minY, this.boundingBox.maxZ - 2, 1, this.getComponentType());
055 break;
056 case 1:
057 StructureVillagePieces.getNextStructureComponentVillagePath((ComponentVillageStartPiece)par1StructureComponent, par2List, par3Random, this.boundingBox.minX, this.boundingBox.minY, this.boundingBox.minZ - 1, 2, this.getComponentType());
058 break;
059 case 2:
060 StructureVillagePieces.getNextStructureComponentVillagePath((ComponentVillageStartPiece)par1StructureComponent, par2List, par3Random, this.boundingBox.minX - 1, this.boundingBox.minY, this.boundingBox.minZ, 1, this.getComponentType());
061 break;
062 case 3:
063 StructureVillagePieces.getNextStructureComponentVillagePath((ComponentVillageStartPiece)par1StructureComponent, par2List, par3Random, this.boundingBox.maxX - 2, this.boundingBox.minY, this.boundingBox.minZ - 1, 2, this.getComponentType());
064 }
065 }
066
067 if (var4 && par3Random.nextInt(3) > 0)
068 {
069 switch (this.coordBaseMode)
070 {
071 case 0:
072 StructureVillagePieces.getNextStructureComponentVillagePath((ComponentVillageStartPiece)par1StructureComponent, par2List, par3Random, this.boundingBox.maxX + 1, this.boundingBox.minY, this.boundingBox.maxZ - 2, 3, this.getComponentType());
073 break;
074 case 1:
075 StructureVillagePieces.getNextStructureComponentVillagePath((ComponentVillageStartPiece)par1StructureComponent, par2List, par3Random, this.boundingBox.minX, this.boundingBox.minY, this.boundingBox.maxZ + 1, 0, this.getComponentType());
076 break;
077 case 2:
078 StructureVillagePieces.getNextStructureComponentVillagePath((ComponentVillageStartPiece)par1StructureComponent, par2List, par3Random, this.boundingBox.maxX + 1, this.boundingBox.minY, this.boundingBox.minZ, 3, this.getComponentType());
079 break;
080 case 3:
081 StructureVillagePieces.getNextStructureComponentVillagePath((ComponentVillageStartPiece)par1StructureComponent, par2List, par3Random, this.boundingBox.maxX - 2, this.boundingBox.minY, this.boundingBox.maxZ + 1, 0, this.getComponentType());
082 }
083 }
084 }
085
086 public static StructureBoundingBox func_74933_a(ComponentVillageStartPiece par0ComponentVillageStartPiece, List par1List, Random par2Random, int par3, int par4, int par5, int par6)
087 {
088 for (int var7 = 7 * MathHelper.getRandomIntegerInRange(par2Random, 3, 5); var7 >= 7; var7 -= 7)
089 {
090 StructureBoundingBox var8 = StructureBoundingBox.getComponentToAddBoundingBox(par3, par4, par5, 0, 0, 0, 3, 3, var7, par6);
091
092 if (StructureComponent.findIntersecting(par1List, var8) == null)
093 {
094 return var8;
095 }
096 }
097
098 return null;
099 }
100
101 /**
102 * second Part of Structure generating, this for example places Spiderwebs, Mob Spawners, it closes Mineshafts at
103 * the end, it adds Fences...
104 */
105 public boolean addComponentParts(World par1World, Random par2Random, StructureBoundingBox par3StructureBoundingBox)
106 {
107 int var4 = this.getBiomeSpecificBlock(Block.gravel.blockID, 0);
108
109 for (int var5 = this.boundingBox.minX; var5 <= this.boundingBox.maxX; ++var5)
110 {
111 for (int var6 = this.boundingBox.minZ; var6 <= this.boundingBox.maxZ; ++var6)
112 {
113 if (par3StructureBoundingBox.isVecInside(var5, 64, var6))
114 {
115 int var7 = par1World.getTopSolidOrLiquidBlock(var5, var6) - 1;
116 par1World.setBlock(var5, var7, var6, var4);
117 }
118 }
119 }
120
121 return true;
122 }
123 }