001    package net.minecraft.util;
002    
003    import java.util.Collection;
004    import java.util.Iterator;
005    import java.util.Random;
006    
007    public class WeightedRandom
008    {
009        /**
010         * Returns the total weight of all items in a collection.
011         */
012        public static int getTotalWeight(Collection par0Collection)
013        {
014            int var1 = 0;
015            WeightedRandomItem var3;
016    
017            for (Iterator var2 = par0Collection.iterator(); var2.hasNext(); var1 += var3.itemWeight)
018            {
019                var3 = (WeightedRandomItem)var2.next();
020            }
021    
022            return var1;
023        }
024    
025        /**
026         * Returns a random choice from the input items, with a total weight value.
027         */
028        public static WeightedRandomItem getRandomItem(Random par0Random, Collection par1Collection, int par2)
029        {
030            if (par2 <= 0)
031            {
032                throw new IllegalArgumentException();
033            }
034            else
035            {
036                int var3 = par0Random.nextInt(par2);
037                Iterator var4 = par1Collection.iterator();
038                WeightedRandomItem var5;
039    
040                do
041                {
042                    if (!var4.hasNext())
043                    {
044                        return null;
045                    }
046    
047                    var5 = (WeightedRandomItem)var4.next();
048                    var3 -= var5.itemWeight;
049                }
050                while (var3 >= 0);
051    
052                return var5;
053            }
054        }
055    
056        /**
057         * Returns a random choice from the input items.
058         */
059        public static WeightedRandomItem getRandomItem(Random par0Random, Collection par1Collection)
060        {
061            return getRandomItem(par0Random, par1Collection, getTotalWeight(par1Collection));
062        }
063    
064        /**
065         * Returns the total weight of all items in a array.
066         */
067        public static int getTotalWeight(WeightedRandomItem[] par0ArrayOfWeightedRandomItem)
068        {
069            int var1 = 0;
070            WeightedRandomItem[] var2 = par0ArrayOfWeightedRandomItem;
071            int var3 = par0ArrayOfWeightedRandomItem.length;
072    
073            for (int var4 = 0; var4 < var3; ++var4)
074            {
075                WeightedRandomItem var5 = var2[var4];
076                var1 += var5.itemWeight;
077            }
078    
079            return var1;
080        }
081    
082        /**
083         * Returns a random choice from the input array of items, with a total weight value.
084         */
085        public static WeightedRandomItem getRandomItem(Random par0Random, WeightedRandomItem[] par1ArrayOfWeightedRandomItem, int par2)
086        {
087            if (par2 <= 0)
088            {
089                throw new IllegalArgumentException();
090            }
091            else
092            {
093                int var3 = par0Random.nextInt(par2);
094                WeightedRandomItem[] var4 = par1ArrayOfWeightedRandomItem;
095                int var5 = par1ArrayOfWeightedRandomItem.length;
096    
097                for (int var6 = 0; var6 < var5; ++var6)
098                {
099                    WeightedRandomItem var7 = var4[var6];
100                    var3 -= var7.itemWeight;
101    
102                    if (var3 < 0)
103                    {
104                        return var7;
105                    }
106                }
107    
108                return null;
109            }
110        }
111    
112        /**
113         * Returns a random choice from the input items.
114         */
115        public static WeightedRandomItem getRandomItem(Random par0Random, WeightedRandomItem[] par1ArrayOfWeightedRandomItem)
116        {
117            return getRandomItem(par0Random, par1ArrayOfWeightedRandomItem, getTotalWeight(par1ArrayOfWeightedRandomItem));
118        }
119    }