Support Bukkit-Forge hacks which add enum constants at runtime (#2779)

This commit is contained in:
Luck 2020-12-20 15:45:57 +00:00
parent c28b1949a9
commit abb608b856
No known key found for this signature in database
GPG Key ID: EFA9B3EC5FD90F8B

View File

@ -38,6 +38,7 @@ public class EnumNamer<E extends Enum<E>> {
public static final Function<Enum<?>, String> LOWER_CASE_NAME = value -> value.name().toLowerCase(); public static final Function<Enum<?>, String> LOWER_CASE_NAME = value -> value.name().toLowerCase();
private final String[] names; 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) { public EnumNamer(Class<E> enumClass, Map<? super E, String> definedNames, Function<? super E, String> namingFunction) {
E[] values = enumClass.getEnumConstants(); E[] values = enumClass.getEnumConstants();
@ -49,6 +50,7 @@ public class EnumNamer<E extends Enum<E>> {
} }
this.names[value.ordinal()] = name; this.names[value.ordinal()] = name;
} }
this.namingFunction = namingFunction;
} }
public EnumNamer(Class<E> enumClass, Function<? super E, String> namingFunction) { public EnumNamer(Class<E> enumClass, Function<? super E, String> namingFunction) {
@ -56,7 +58,12 @@ public class EnumNamer<E extends Enum<E>> {
} }
public String name(E value) { 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];
} }
} }