001package net.minecraft.world.gen.structure; 002 003import java.util.ArrayList; 004import java.util.Iterator; 005import java.util.List; 006import java.util.Random; 007 008public class StructureStrongholdPieces 009{ 010 private static final StructureStrongholdPieceWeight[] pieceWeightArray = new StructureStrongholdPieceWeight[] {new StructureStrongholdPieceWeight(ComponentStrongholdStraight.class, 40, 0), new StructureStrongholdPieceWeight(ComponentStrongholdPrison.class, 5, 5), new StructureStrongholdPieceWeight(ComponentStrongholdLeftTurn.class, 20, 0), new StructureStrongholdPieceWeight(ComponentStrongholdRightTurn.class, 20, 0), new StructureStrongholdPieceWeight(ComponentStrongholdRoomCrossing.class, 10, 6), new StructureStrongholdPieceWeight(ComponentStrongholdStairsStraight.class, 5, 5), new StructureStrongholdPieceWeight(ComponentStrongholdStairs.class, 5, 5), new StructureStrongholdPieceWeight(ComponentStrongholdCrossing.class, 5, 4), new StructureStrongholdPieceWeight(ComponentStrongholdChestCorridor.class, 5, 4), new StructureStrongholdPieceWeight2(ComponentStrongholdLibrary.class, 10, 2), new StructureStrongholdPieceWeight3(ComponentStrongholdPortalRoom.class, 20, 1)}; 011 private static List structurePieceList; 012 private static Class strongComponentType; 013 static int totalWeight = 0; 014 private static final StructureStrongholdStones strongholdStones = new StructureStrongholdStones((StructureStrongholdPieceWeight2)null); 015 016 /** 017 * sets up Arrays with the Structure pieces and their weights 018 */ 019 public static void prepareStructurePieces() 020 { 021 structurePieceList = new ArrayList(); 022 StructureStrongholdPieceWeight[] astructurestrongholdpieceweight = pieceWeightArray; 023 int i = astructurestrongholdpieceweight.length; 024 025 for (int j = 0; j < i; ++j) 026 { 027 StructureStrongholdPieceWeight structurestrongholdpieceweight = astructurestrongholdpieceweight[j]; 028 structurestrongholdpieceweight.instancesSpawned = 0; 029 structurePieceList.add(structurestrongholdpieceweight); 030 } 031 032 strongComponentType = null; 033 } 034 035 private static boolean canAddStructurePieces() 036 { 037 boolean flag = false; 038 totalWeight = 0; 039 StructureStrongholdPieceWeight structurestrongholdpieceweight; 040 041 for (Iterator iterator = structurePieceList.iterator(); iterator.hasNext(); totalWeight += structurestrongholdpieceweight.pieceWeight) 042 { 043 structurestrongholdpieceweight = (StructureStrongholdPieceWeight)iterator.next(); 044 045 if (structurestrongholdpieceweight.instancesLimit > 0 && structurestrongholdpieceweight.instancesSpawned < structurestrongholdpieceweight.instancesLimit) 046 { 047 flag = true; 048 } 049 } 050 051 return flag; 052 } 053 054 /** 055 * translates the PieceWeight class to the Component class 056 */ 057 private static ComponentStronghold getStrongholdComponentFromWeightedPiece(Class par0Class, List par1List, Random par2Random, int par3, int par4, int par5, int par6, int par7) 058 { 059 Object object = null; 060 061 if (par0Class == ComponentStrongholdStraight.class) 062 { 063 object = ComponentStrongholdStraight.findValidPlacement(par1List, par2Random, par3, par4, par5, par6, par7); 064 } 065 else if (par0Class == ComponentStrongholdPrison.class) 066 { 067 object = ComponentStrongholdPrison.findValidPlacement(par1List, par2Random, par3, par4, par5, par6, par7); 068 } 069 else if (par0Class == ComponentStrongholdLeftTurn.class) 070 { 071 object = ComponentStrongholdLeftTurn.findValidPlacement(par1List, par2Random, par3, par4, par5, par6, par7); 072 } 073 else if (par0Class == ComponentStrongholdRightTurn.class) 074 { 075 object = ComponentStrongholdRightTurn.findValidPlacement(par1List, par2Random, par3, par4, par5, par6, par7); 076 } 077 else if (par0Class == ComponentStrongholdRoomCrossing.class) 078 { 079 object = ComponentStrongholdRoomCrossing.findValidPlacement(par1List, par2Random, par3, par4, par5, par6, par7); 080 } 081 else if (par0Class == ComponentStrongholdStairsStraight.class) 082 { 083 object = ComponentStrongholdStairsStraight.findValidPlacement(par1List, par2Random, par3, par4, par5, par6, par7); 084 } 085 else if (par0Class == ComponentStrongholdStairs.class) 086 { 087 object = ComponentStrongholdStairs.getStrongholdStairsComponent(par1List, par2Random, par3, par4, par5, par6, par7); 088 } 089 else if (par0Class == ComponentStrongholdCrossing.class) 090 { 091 object = ComponentStrongholdCrossing.findValidPlacement(par1List, par2Random, par3, par4, par5, par6, par7); 092 } 093 else if (par0Class == ComponentStrongholdChestCorridor.class) 094 { 095 object = ComponentStrongholdChestCorridor.findValidPlacement(par1List, par2Random, par3, par4, par5, par6, par7); 096 } 097 else if (par0Class == ComponentStrongholdLibrary.class) 098 { 099 object = ComponentStrongholdLibrary.findValidPlacement(par1List, par2Random, par3, par4, par5, par6, par7); 100 } 101 else if (par0Class == ComponentStrongholdPortalRoom.class) 102 { 103 object = ComponentStrongholdPortalRoom.findValidPlacement(par1List, par2Random, par3, par4, par5, par6, par7); 104 } 105 106 return (ComponentStronghold)object; 107 } 108 109 private static ComponentStronghold getNextComponent(ComponentStrongholdStairs2 par0ComponentStrongholdStairs2, List par1List, Random par2Random, int par3, int par4, int par5, int par6, int par7) 110 { 111 if (!canAddStructurePieces()) 112 { 113 return null; 114 } 115 else 116 { 117 if (strongComponentType != null) 118 { 119 ComponentStronghold componentstronghold = getStrongholdComponentFromWeightedPiece(strongComponentType, par1List, par2Random, par3, par4, par5, par6, par7); 120 strongComponentType = null; 121 122 if (componentstronghold != null) 123 { 124 return componentstronghold; 125 } 126 } 127 128 int j1 = 0; 129 130 while (j1 < 5) 131 { 132 ++j1; 133 int k1 = par2Random.nextInt(totalWeight); 134 Iterator iterator = structurePieceList.iterator(); 135 136 while (iterator.hasNext()) 137 { 138 StructureStrongholdPieceWeight structurestrongholdpieceweight = (StructureStrongholdPieceWeight)iterator.next(); 139 k1 -= structurestrongholdpieceweight.pieceWeight; 140 141 if (k1 < 0) 142 { 143 if (!structurestrongholdpieceweight.canSpawnMoreStructuresOfType(par7) || structurestrongholdpieceweight == par0ComponentStrongholdStairs2.strongholdPieceWeight) 144 { 145 break; 146 } 147 148 ComponentStronghold componentstronghold1 = getStrongholdComponentFromWeightedPiece(structurestrongholdpieceweight.pieceClass, par1List, par2Random, par3, par4, par5, par6, par7); 149 150 if (componentstronghold1 != null) 151 { 152 ++structurestrongholdpieceweight.instancesSpawned; 153 par0ComponentStrongholdStairs2.strongholdPieceWeight = structurestrongholdpieceweight; 154 155 if (!structurestrongholdpieceweight.canSpawnMoreStructures()) 156 { 157 structurePieceList.remove(structurestrongholdpieceweight); 158 } 159 160 return componentstronghold1; 161 } 162 } 163 } 164 } 165 166 StructureBoundingBox structureboundingbox = ComponentStrongholdCorridor.func_74992_a(par1List, par2Random, par3, par4, par5, par6); 167 168 if (structureboundingbox != null && structureboundingbox.minY > 1) 169 { 170 return new ComponentStrongholdCorridor(par7, par2Random, structureboundingbox, par6); 171 } 172 else 173 { 174 return null; 175 } 176 } 177 } 178 179 private static StructureComponent getNextValidComponent(ComponentStrongholdStairs2 par0ComponentStrongholdStairs2, List par1List, Random par2Random, int par3, int par4, int par5, int par6, int par7) 180 { 181 if (par7 > 50) 182 { 183 return null; 184 } 185 else if (Math.abs(par3 - par0ComponentStrongholdStairs2.getBoundingBox().minX) <= 112 && Math.abs(par5 - par0ComponentStrongholdStairs2.getBoundingBox().minZ) <= 112) 186 { 187 ComponentStronghold componentstronghold = getNextComponent(par0ComponentStrongholdStairs2, par1List, par2Random, par3, par4, par5, par6, par7 + 1); 188 189 if (componentstronghold != null) 190 { 191 par1List.add(componentstronghold); 192 par0ComponentStrongholdStairs2.field_75026_c.add(componentstronghold); 193 } 194 195 return componentstronghold; 196 } 197 else 198 { 199 return null; 200 } 201 } 202 203 static StructureComponent getNextValidComponentAccess(ComponentStrongholdStairs2 par0ComponentStrongholdStairs2, List par1List, Random par2Random, int par3, int par4, int par5, int par6, int par7) 204 { 205 return getNextValidComponent(par0ComponentStrongholdStairs2, par1List, par2Random, par3, par4, par5, par6, par7); 206 } 207 208 static Class setComponentType(Class par0Class) 209 { 210 strongComponentType = par0Class; 211 return par0Class; 212 } 213 214 static StructureStrongholdStones getStrongholdStones() 215 { 216 return strongholdStones; 217 } 218}