package net.minecraft.block.properties;
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import com.google.common.collect.Collections2;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import java.util.Collection;
import java.util.Iterator;
import java.util.Map;
import net.minecraft.util.IStringSerializable;
public class PropertyEnum extends PropertyHelper
{
private final ImmutableSet allowedValues;
/** Map of names to Enum values */
private final Map nameToValue = Maps.newHashMap();
private static final String __OBFID = "CL_00002015";
protected PropertyEnum(String name, Class valueClass, Collection allowedValues)
{
super(name, valueClass);
this.allowedValues = ImmutableSet.copyOf(allowedValues);
Iterator var4 = allowedValues.iterator();
while (var4.hasNext())
{
Enum var5 = (Enum)var4.next();
String var6 = ((IStringSerializable)var5).getName();
if (this.nameToValue.containsKey(var6))
{
throw new IllegalArgumentException("Multiple values have the same name \'" + var6 + "\'");
}
this.nameToValue.put(var6, var5);
}
}
public Collection getAllowedValues()
{
return this.allowedValues;
}
public String getName(Enum value)
{
return ((IStringSerializable)value).getName();
}
/**
* Create a new PropertyEnum with all Enum constants of the given class.
*/
public static PropertyEnum create(String name, Class clazz)
{
return create(name, clazz, Predicates.alwaysTrue());
}
/**
* Create a new PropertyEnum with all Enum constants of the given class that match the given Predicate.
*/
public static PropertyEnum create(String name, Class clazz, Predicate filter)
{
return create(name, clazz, Collections2.filter(Lists.newArrayList(clazz.getEnumConstants()), filter));
}
/**
* Create a new PropertyEnum with the specified values
*/
public static PropertyEnum create(String name, Class clazz, Enum ... values)
{
return create(name, clazz, Lists.newArrayList(values));
}
/**
* Create a new PropertyEnum with the specified values
*/
public static PropertyEnum create(String name, Class clazz, Collection values)
{
return new PropertyEnum(name, clazz, values);
}
/**
* Get the name for the given value.
*/
public String getName(Comparable value)
{
return this.getName((Enum)value);
}
}