diff --git a/common/src/main/java/me/lucko/luckperms/common/util/EnumNamer.java b/common/src/main/java/me/lucko/luckperms/common/util/EnumNamer.java index 183c056ac..586b62326 100644 --- a/common/src/main/java/me/lucko/luckperms/common/util/EnumNamer.java +++ b/common/src/main/java/me/lucko/luckperms/common/util/EnumNamer.java @@ -38,6 +38,7 @@ public class EnumNamer> { public static final Function, String> LOWER_CASE_NAME = value -> value.name().toLowerCase(); private final String[] names; + private final Function namingFunction; public EnumNamer(Class enumClass, Map definedNames, Function namingFunction) { E[] values = enumClass.getEnumConstants(); @@ -49,6 +50,7 @@ public EnumNamer(Class enumClass, Map definedNames, Functi } this.names[value.ordinal()] = name; } + this.namingFunction = namingFunction; } public EnumNamer(Class enumClass, Function namingFunction) { @@ -56,7 +58,12 @@ public EnumNamer(Class enumClass, Function 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]; } }