001 package net.minecraft.world.gen.structure;
002
003 import java.util.ArrayList;
004 import java.util.Iterator;
005 import java.util.List;
006 import java.util.Random;
007
008 public 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[] var0 = pieceWeightArray;
023 int var1 = var0.length;
024
025 for (int var2 = 0; var2 < var1; ++var2)
026 {
027 StructureStrongholdPieceWeight var3 = var0[var2];
028 var3.instancesSpawned = 0;
029 structurePieceList.add(var3);
030 }
031
032 strongComponentType = null;
033 }
034
035 private static boolean canAddStructurePieces()
036 {
037 boolean var0 = false;
038 totalWeight = 0;
039 StructureStrongholdPieceWeight var2;
040
041 for (Iterator var1 = structurePieceList.iterator(); var1.hasNext(); totalWeight += var2.pieceWeight)
042 {
043 var2 = (StructureStrongholdPieceWeight)var1.next();
044
045 if (var2.instancesLimit > 0 && var2.instancesSpawned < var2.instancesLimit)
046 {
047 var0 = true;
048 }
049 }
050
051 return var0;
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 var8 = null;
060
061 if (par0Class == ComponentStrongholdStraight.class)
062 {
063 var8 = ComponentStrongholdStraight.findValidPlacement(par1List, par2Random, par3, par4, par5, par6, par7);
064 }
065 else if (par0Class == ComponentStrongholdPrison.class)
066 {
067 var8 = ComponentStrongholdPrison.findValidPlacement(par1List, par2Random, par3, par4, par5, par6, par7);
068 }
069 else if (par0Class == ComponentStrongholdLeftTurn.class)
070 {
071 var8 = ComponentStrongholdLeftTurn.findValidPlacement(par1List, par2Random, par3, par4, par5, par6, par7);
072 }
073 else if (par0Class == ComponentStrongholdRightTurn.class)
074 {
075 var8 = ComponentStrongholdRightTurn.findValidPlacement(par1List, par2Random, par3, par4, par5, par6, par7);
076 }
077 else if (par0Class == ComponentStrongholdRoomCrossing.class)
078 {
079 var8 = ComponentStrongholdRoomCrossing.findValidPlacement(par1List, par2Random, par3, par4, par5, par6, par7);
080 }
081 else if (par0Class == ComponentStrongholdStairsStraight.class)
082 {
083 var8 = ComponentStrongholdStairsStraight.findValidPlacement(par1List, par2Random, par3, par4, par5, par6, par7);
084 }
085 else if (par0Class == ComponentStrongholdStairs.class)
086 {
087 var8 = ComponentStrongholdStairs.getStrongholdStairsComponent(par1List, par2Random, par3, par4, par5, par6, par7);
088 }
089 else if (par0Class == ComponentStrongholdCrossing.class)
090 {
091 var8 = ComponentStrongholdCrossing.findValidPlacement(par1List, par2Random, par3, par4, par5, par6, par7);
092 }
093 else if (par0Class == ComponentStrongholdChestCorridor.class)
094 {
095 var8 = ComponentStrongholdChestCorridor.findValidPlacement(par1List, par2Random, par3, par4, par5, par6, par7);
096 }
097 else if (par0Class == ComponentStrongholdLibrary.class)
098 {
099 var8 = ComponentStrongholdLibrary.findValidPlacement(par1List, par2Random, par3, par4, par5, par6, par7);
100 }
101 else if (par0Class == ComponentStrongholdPortalRoom.class)
102 {
103 var8 = ComponentStrongholdPortalRoom.findValidPlacement(par1List, par2Random, par3, par4, par5, par6, par7);
104 }
105
106 return (ComponentStronghold)var8;
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 var8 = getStrongholdComponentFromWeightedPiece(strongComponentType, par1List, par2Random, par3, par4, par5, par6, par7);
120 strongComponentType = null;
121
122 if (var8 != null)
123 {
124 return var8;
125 }
126 }
127
128 int var13 = 0;
129
130 while (var13 < 5)
131 {
132 ++var13;
133 int var9 = par2Random.nextInt(totalWeight);
134 Iterator var10 = structurePieceList.iterator();
135
136 while (var10.hasNext())
137 {
138 StructureStrongholdPieceWeight var11 = (StructureStrongholdPieceWeight)var10.next();
139 var9 -= var11.pieceWeight;
140
141 if (var9 < 0)
142 {
143 if (!var11.canSpawnMoreStructuresOfType(par7) || var11 == par0ComponentStrongholdStairs2.strongholdPieceWeight)
144 {
145 break;
146 }
147
148 ComponentStronghold var12 = getStrongholdComponentFromWeightedPiece(var11.pieceClass, par1List, par2Random, par3, par4, par5, par6, par7);
149
150 if (var12 != null)
151 {
152 ++var11.instancesSpawned;
153 par0ComponentStrongholdStairs2.strongholdPieceWeight = var11;
154
155 if (!var11.canSpawnMoreStructures())
156 {
157 structurePieceList.remove(var11);
158 }
159
160 return var12;
161 }
162 }
163 }
164 }
165
166 StructureBoundingBox var14 = ComponentStrongholdCorridor.func_74992_a(par1List, par2Random, par3, par4, par5, par6);
167
168 if (var14 != null && var14.minY > 1)
169 {
170 return new ComponentStrongholdCorridor(par7, par2Random, var14, 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 var8 = getNextComponent(par0ComponentStrongholdStairs2, par1List, par2Random, par3, par4, par5, par6, par7 + 1);
188
189 if (var8 != null)
190 {
191 par1List.add(var8);
192 par0ComponentStrongholdStairs2.field_75026_c.add(var8);
193 }
194
195 return var8;
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 }