package net.t7seven7t.util; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Arrays; /** * Utility class for matching Strings to enum values or constants within enum-like classes */ public class EnumUtil { public static <V extends Enum<V>> V matchEnumValue(Class<V> enumClass, String id) { return getValue(enumClass.getEnumConstants(), id); } /** * Attempts to match a value from one of Bukkit's constants classes by searching for a values() * method */ public static <V> V matchConstantValue(Class<V> constantClazz, String id) { try { Method m = constantClazz.getMethod("values"); return getValue((V[]) m.invoke(null), id); } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { e.printStackTrace(); } return null; } private static <V> V getValue(V[] values, String id) { String pattern = enumify(id); return Arrays.stream(values) .filter(v -> v != null) .filter(v -> pattern.equalsIgnoreCase(v.toString())) .findAny() .orElse(null); } public static String enumify(String string) { return string.toUpperCase().replaceAll("\\s+", "_").replaceAll("\\W", ""); } }