    001    package net.minecraft.src;
    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.field_75027_a)
    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.field_75027_a = 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    }