package net.minecraft.world.gen.structure; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Random; public class StructureStrongholdPieces { 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)}; private static List structurePieceList; private static Class strongComponentType; static int totalWeight = 0; private static final StructureStrongholdStones strongholdStones = new StructureStrongholdStones((StructureStrongholdPieceWeight2)null); /** * sets up Arrays with the Structure pieces and their weights */ public static void prepareStructurePieces() { structurePieceList = new ArrayList(); StructureStrongholdPieceWeight[] astructurestrongholdpieceweight = pieceWeightArray; int i = astructurestrongholdpieceweight.length; for (int j = 0; j < i; ++j) { StructureStrongholdPieceWeight structurestrongholdpieceweight = astructurestrongholdpieceweight[j]; structurestrongholdpieceweight.instancesSpawned = 0; structurePieceList.add(structurestrongholdpieceweight); } strongComponentType = null; } private static boolean canAddStructurePieces() { boolean flag = false; totalWeight = 0; StructureStrongholdPieceWeight structurestrongholdpieceweight; for (Iterator iterator = structurePieceList.iterator(); iterator.hasNext(); totalWeight += structurestrongholdpieceweight.pieceWeight) { structurestrongholdpieceweight = (StructureStrongholdPieceWeight)iterator.next(); if (structurestrongholdpieceweight.instancesLimit > 0 && structurestrongholdpieceweight.instancesSpawned < structurestrongholdpieceweight.instancesLimit) { flag = true; } } return flag; } /** * translates the PieceWeight class to the Component class */ private static ComponentStronghold getStrongholdComponentFromWeightedPiece(Class par0Class, List par1List, Random par2Random, int par3, int par4, int par5, int par6, int par7) { Object object = null; if (par0Class == ComponentStrongholdStraight.class) { object = ComponentStrongholdStraight.findValidPlacement(par1List, par2Random, par3, par4, par5, par6, par7); } else if (par0Class == ComponentStrongholdPrison.class) { object = ComponentStrongholdPrison.findValidPlacement(par1List, par2Random, par3, par4, par5, par6, par7); } else if (par0Class == ComponentStrongholdLeftTurn.class) { object = ComponentStrongholdLeftTurn.findValidPlacement(par1List, par2Random, par3, par4, par5, par6, par7); } else if (par0Class == ComponentStrongholdRightTurn.class) { object = ComponentStrongholdRightTurn.findValidPlacement(par1List, par2Random, par3, par4, par5, par6, par7); } else if (par0Class == ComponentStrongholdRoomCrossing.class) { object = ComponentStrongholdRoomCrossing.findValidPlacement(par1List, par2Random, par3, par4, par5, par6, par7); } else if (par0Class == ComponentStrongholdStairsStraight.class) { object = ComponentStrongholdStairsStraight.findValidPlacement(par1List, par2Random, par3, par4, par5, par6, par7); } else if (par0Class == ComponentStrongholdStairs.class) { object = ComponentStrongholdStairs.getStrongholdStairsComponent(par1List, par2Random, par3, par4, par5, par6, par7); } else if (par0Class == ComponentStrongholdCrossing.class) { object = ComponentStrongholdCrossing.findValidPlacement(par1List, par2Random, par3, par4, par5, par6, par7); } else if (par0Class == ComponentStrongholdChestCorridor.class) { object = ComponentStrongholdChestCorridor.findValidPlacement(par1List, par2Random, par3, par4, par5, par6, par7); } else if (par0Class == ComponentStrongholdLibrary.class) { object = ComponentStrongholdLibrary.findValidPlacement(par1List, par2Random, par3, par4, par5, par6, par7); } else if (par0Class == ComponentStrongholdPortalRoom.class) { object = ComponentStrongholdPortalRoom.findValidPlacement(par1List, par2Random, par3, par4, par5, par6, par7); } return (ComponentStronghold)object; } private static ComponentStronghold getNextComponent(ComponentStrongholdStairs2 par0ComponentStrongholdStairs2, List par1List, Random par2Random, int par3, int par4, int par5, int par6, int par7) { if (!canAddStructurePieces()) { return null; } else { if (strongComponentType != null) { ComponentStronghold componentstronghold = getStrongholdComponentFromWeightedPiece(strongComponentType, par1List, par2Random, par3, par4, par5, par6, par7); strongComponentType = null; if (componentstronghold != null) { return componentstronghold; } } int j1 = 0; while (j1 < 5) { ++j1; int k1 = par2Random.nextInt(totalWeight); Iterator iterator = structurePieceList.iterator(); while (iterator.hasNext()) { StructureStrongholdPieceWeight structurestrongholdpieceweight = (StructureStrongholdPieceWeight)iterator.next(); k1 -= structurestrongholdpieceweight.pieceWeight; if (k1 < 0) { if (!structurestrongholdpieceweight.canSpawnMoreStructuresOfType(par7) || structurestrongholdpieceweight == par0ComponentStrongholdStairs2.strongholdPieceWeight) { break; } ComponentStronghold componentstronghold1 = getStrongholdComponentFromWeightedPiece(structurestrongholdpieceweight.pieceClass, par1List, par2Random, par3, par4, par5, par6, par7); if (componentstronghold1 != null) { ++structurestrongholdpieceweight.instancesSpawned; par0ComponentStrongholdStairs2.strongholdPieceWeight = structurestrongholdpieceweight; if (!structurestrongholdpieceweight.canSpawnMoreStructures()) { structurePieceList.remove(structurestrongholdpieceweight); } return componentstronghold1; } } } } StructureBoundingBox structureboundingbox = ComponentStrongholdCorridor.func_74992_a(par1List, par2Random, par3, par4, par5, par6); if (structureboundingbox != null && structureboundingbox.minY > 1) { return new ComponentStrongholdCorridor(par7, par2Random, structureboundingbox, par6); } else { return null; } } } private static StructureComponent getNextValidComponent(ComponentStrongholdStairs2 par0ComponentStrongholdStairs2, List par1List, Random par2Random, int par3, int par4, int par5, int par6, int par7) { if (par7 > 50) { return null; } else if (Math.abs(par3 - par0ComponentStrongholdStairs2.getBoundingBox().minX) <= 112 && Math.abs(par5 - par0ComponentStrongholdStairs2.getBoundingBox().minZ) <= 112) { ComponentStronghold componentstronghold = getNextComponent(par0ComponentStrongholdStairs2, par1List, par2Random, par3, par4, par5, par6, par7 + 1); if (componentstronghold != null) { par1List.add(componentstronghold); par0ComponentStrongholdStairs2.field_75026_c.add(componentstronghold); } return componentstronghold; } else { return null; } } static StructureComponent getNextValidComponentAccess(ComponentStrongholdStairs2 par0ComponentStrongholdStairs2, List par1List, Random par2Random, int par3, int par4, int par5, int par6, int par7) { return getNextValidComponent(par0ComponentStrongholdStairs2, par1List, par2Random, par3, par4, par5, par6, par7); } static Class setComponentType(Class par0Class) { strongComponentType = par0Class; return par0Class; } static StructureStrongholdStones getStrongholdStones() { return strongholdStones; } }