@@ -168,6 +168,7 @@ class EnumArgumentType<T extends Enum<T>> implements SimpleArgumentType<T> {
168
168
private final Class <T > enumClass ;
169
169
private final String enumName ;
170
170
private final List <String > tabCompletes ;
171
+ private final boolean uppercaseValues ;
171
172
172
173
/**
173
174
* Creates a new {@code ArgumentType}
@@ -185,6 +186,17 @@ public EnumArgumentType(@NotNull Class<T> enumClass, @NotNull String enumName) {
185
186
this .enumClass = enumClass ;
186
187
this .enumName = enumName ;
187
188
this .tabCompletes = Arrays .stream (enumClass .getEnumConstants ()).map (val -> val .name ().toLowerCase (Locale .ROOT )).collect (Collectors .toList ());
189
+
190
+ for (T enumConstant : enumClass .getEnumConstants ()) {
191
+ for (char letter : enumConstant .name ().toCharArray ()) {
192
+ if (Character .isLetter (letter ) && !Character .isUpperCase (letter )) {
193
+ this .uppercaseValues = false ;
194
+ Bukkit .getLogger ().warning ("[CommandCore] Enum " + enumName + " includes values that aren't in uppercase!" );
195
+ return ;
196
+ }
197
+ }
198
+ }
199
+ this .uppercaseValues = true ;
188
200
}
189
201
190
202
@ Override
@@ -194,7 +206,7 @@ public EnumArgumentType(@NotNull Class<T> enumClass, @NotNull String enumName) {
194
206
195
207
@ Override
196
208
public @ NotNull Result <T , None > parseWord (String word ) {
197
- return Result .resolve (() -> EnumUtils .findEnumInsensitiveCase (enumClass , word ));
209
+ return Result .resolve (() -> uppercaseValues ? Enum . valueOf ( enumClass , word . toUpperCase ()) : EnumUtils .findEnumInsensitiveCase (enumClass , word ));
198
210
}
199
211
200
212
@ Override
@@ -207,10 +219,8 @@ public EnumArgumentType(@NotNull Class<T> enumClass, @NotNull String enumName) {
207
219
* Represents a custom {@code ArgumentType} that parses to a filtered enum
208
220
* @param <T> The type of the enum
209
221
*/
210
- class FilteredEnumArgumentType <T extends Enum <T >> implements SimpleArgumentType <T > {
222
+ class FilteredEnumArgumentType <T extends Enum <T >> extends EnumArgumentType <T > {
211
223
private final Predicate <T > filter ;
212
- private final String enumName ;
213
- private final Class <T > enumClass ;
214
224
private final List <String > tabCompletes ;
215
225
216
226
/**
@@ -220,21 +230,14 @@ class FilteredEnumArgumentType<T extends Enum<T>> implements SimpleArgumentType<
220
230
* @param enumName The name of the enum. This is used when displaying an error message (Invalid {{@code enumName}} '{val}'
221
231
*/
222
232
public FilteredEnumArgumentType (@ NotNull Class <T > enumClass , Predicate <T > filter , String enumName ) {
223
- this . enumClass = enumClass ;
233
+ super ( enumClass , enumName ) ;
224
234
this .filter = filter ;
225
- this .enumName = enumName ;
226
235
this .tabCompletes = Arrays .stream (enumClass .getEnumConstants ()).filter (filter ).map (val -> val .name ().toLowerCase (Locale .ROOT )).collect (Collectors .toList ());
227
236
}
228
237
229
- @ Override
230
- public @ NotNull String getTypeName () {
231
- return enumName ;
232
- }
233
-
234
238
@ Override
235
239
public @ NotNull Result <T , None > parseWord (String word ) {
236
- return Result .resolve (() -> EnumUtils .findEnumInsensitiveCase (enumClass , word ))
237
- .andThen (val -> filter .test (val ) ? Result .ok (val ) : Result .error ());
240
+ return super .parseWord (word ).andThen (val -> filter .test (val ) ? Result .ok (val ) : Result .error ());
238
241
}
239
242
240
243
@ Override
0 commit comments