    001package net.minecraft.util;
    002
    003import java.util.Collection;
    004import java.util.Iterator;
    005import java.util.Random;
    006
    007public 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 i = 0;
    015        WeightedRandomItem weightedrandomitem;
    016
    017        for (Iterator iterator = par0Collection.iterator(); iterator.hasNext(); i += weightedrandomitem.itemWeight)
    018        {
    019            weightedrandomitem = (WeightedRandomItem)iterator.next();
    020        }
    021
    022        return i;
    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 j = par0Random.nextInt(par2);
    037            Iterator iterator = par1Collection.iterator();
    038            WeightedRandomItem weightedrandomitem;
    039
    040            do
    041            {
    042                if (!iterator.hasNext())
    043                {
    044                    return null;
    045                }
    046
    047                weightedrandomitem = (WeightedRandomItem)iterator.next();
    048                j -= weightedrandomitem.itemWeight;
    049            }
    050            while (j >= 0);
    051
    052            return weightedrandomitem;
    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 i = 0;
    070        WeightedRandomItem[] aweightedrandomitem1 = par0ArrayOfWeightedRandomItem;
    071        int j = par0ArrayOfWeightedRandomItem.length;
    072
    073        for (int k = 0; k < j; ++k)
    074        {
    075            WeightedRandomItem weightedrandomitem = aweightedrandomitem1[k];
    076            i += weightedrandomitem.itemWeight;
    077        }
    078
    079        return i;
    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 j = par0Random.nextInt(par2);
    094            WeightedRandomItem[] aweightedrandomitem1 = par1ArrayOfWeightedRandomItem;
    095            int k = par1ArrayOfWeightedRandomItem.length;
    096
    097            for (int l = 0; l < k; ++l)
    098            {
    099                WeightedRandomItem weightedrandomitem = aweightedrandomitem1[l];
    100                j -= weightedrandomitem.itemWeight;
    101
    102                if (j < 0)
    103                {
    104                    return weightedrandomitem;
    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}