    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    }