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 }