package net.minecraft.util;
import java.util.Collection;
import java.util.Iterator;
import java.util.Random;
public class WeightedRandom
{
private static final String __OBFID = "CL_00001503";
/**
* Returns the total weight of all items in a collection.
*/
public static int getTotalWeight(Collection p_76272_0_)
{
int i = 0;
WeightedRandom.Item item;
for (Iterator iterator = p_76272_0_.iterator(); iterator.hasNext(); i += item.itemWeight)
{
item = (WeightedRandom.Item)iterator.next();
}
return i;
}
/**
* Returns a random choice from the input items, with a total weight value.
*/
public static WeightedRandom.Item getRandomItem(Random p_76273_0_, Collection p_76273_1_, int p_76273_2_)
{
if (p_76273_2_ <= 0)
{
throw new IllegalArgumentException();
}
return getItem(p_76273_1_, p_76273_0_.nextInt(p_76273_2_));
}
//Forge: Added to allow custom random implementations, Modder is responsible for making sure the
//'weight' is under the totalWeight of the items.
public static WeightedRandom.Item getItem(Collection par1Collection, int weight)
{
{
int j = weight;
Iterator iterator = par1Collection.iterator();
WeightedRandom.Item item;
do
{
if (!iterator.hasNext())
{
return null;
}
item = (WeightedRandom.Item)iterator.next();
j -= item.itemWeight;
}
while (j >= 0);
return item;
}
}
/**
* Returns a random choice from the input items.
*/
public static WeightedRandom.Item getRandomItem(Random p_76271_0_, Collection p_76271_1_)
{
/**
* Returns a random choice from the input items, with a total weight value.
*/
return getRandomItem(p_76271_0_, p_76271_1_, getTotalWeight(p_76271_1_));
}
/**
* Returns the total weight of all items in a array.
*/
public static int getTotalWeight(WeightedRandom.Item[] p_76270_0_)
{
int i = 0;
WeightedRandom.Item[] aitem = p_76270_0_;
int j = p_76270_0_.length;
for (int k = 0; k < j; ++k)
{
WeightedRandom.Item item = aitem[k];
i += item.itemWeight;
}
return i;
}
/**
* Returns a random choice from the input array of items, with a total weight value.
*/
public static WeightedRandom.Item getRandomItem(Random p_76269_0_, WeightedRandom.Item[] p_76269_1_, int p_76269_2_)
{
if (p_76269_2_ <= 0)
{
throw new IllegalArgumentException();
}
return getItem(p_76269_1_, p_76269_0_.nextInt(p_76269_2_));
}
//Forge: Added to allow custom random implementations, Modder is responsible for making sure the
//'weight' is under the totalWeight of the items.
public static WeightedRandom.Item getItem(WeightedRandom.Item[] par1ArrayOfWeightedRandomItem, int weight)
{
{
int j = weight;
WeightedRandom.Item[] aitem = par1ArrayOfWeightedRandomItem;
int k = par1ArrayOfWeightedRandomItem.length;
for (int l = 0; l < k; ++l)
{
WeightedRandom.Item item = aitem[l];
j -= item.itemWeight;
if (j < 0)
{
return item;
}
}
return null;
}
}
/**
* Returns a random choice from the input items.
*/
public static WeightedRandom.Item getRandomItem(Random p_76274_0_, WeightedRandom.Item[] p_76274_1_)
{
/**
* Returns a random choice from the input array of items, with a total weight value.
*/
return getRandomItem(p_76274_0_, p_76274_1_, getTotalWeight(p_76274_1_));
}
public static class Item
{
/** The Weight is how often the item is chosen(higher number is higher chance(lower is lower)) */
public int itemWeight;
private static final String __OBFID = "CL_00001504";
public Item(int p_i1556_1_)
{
this.itemWeight = p_i1556_1_;
}
}
}