Skip to content

Commit

Permalink
Support Bukkit-Forge hacks which add enum constants at runtime (#2779)
Browse files Browse the repository at this point in the history
  • Loading branch information
lucko committed Dec 20, 2020
1 parent c28b194 commit abb608b
Showing 1 changed file with 8 additions and 1 deletion.
Expand Up @@ -38,6 +38,7 @@ public class EnumNamer<E extends Enum<E>> {
public static final Function<Enum<?>, String> LOWER_CASE_NAME = value -> value.name().toLowerCase();

private final String[] names;
private final Function<? super E, String> namingFunction;

public EnumNamer(Class<E> enumClass, Map<? super E, String> definedNames, Function<? super E, String> namingFunction) {
E[] values = enumClass.getEnumConstants();
Expand All @@ -49,14 +50,20 @@ public EnumNamer(Class<E> enumClass, Map<? super E, String> definedNames, Functi
}
this.names[value.ordinal()] = name;
}
this.namingFunction = namingFunction;
}

public EnumNamer(Class<E> enumClass, Function<? super E, String> namingFunction) {
this(enumClass, Collections.emptyMap(), namingFunction);
}

public String name(E value) {
return this.names[value.ordinal()];
int ordinal = value.ordinal();
// support the Bukkit-Forge hack where enum constants are added at runtime...
if (ordinal >= this.names.length) {
return this.namingFunction.apply(value);
}
return this.names[ordinal];
}

}

0 comments on commit abb608b

Please sign in to comment.