Browse Source

Enum name provider

Lortseam 4 years ago
parent
commit
c7dae6d92a

+ 6 - 6
src/main/java/me/lortseam/completeconfig/collection/EntryMap.java

@@ -93,34 +93,34 @@ public class EntryMap extends ConfigMap<Entry> {
                         throw new IllegalAnnotationTargetException("Cannot apply Integer bound to non Integer field " + field);
                     }
                     ConfigEntry.Bounded.Integer bounds = field.getDeclaredAnnotation(ConfigEntry.Bounded.Integer.class);
-                    entry.getExtras().setBounds(bounds.min(), bounds.max(), bounds.slider());
+                    entry.setBounds(bounds.min(), bounds.max(), bounds.slider());
                 }
                 if (field.isAnnotationPresent(ConfigEntry.Bounded.Long.class)) {
                     if (field.getType() != long.class && field.getType() != Long.class) {
                         throw new IllegalAnnotationTargetException("Cannot apply Long bound to non Long field " + field);
                     }
                     ConfigEntry.Bounded.Long bounds = field.getDeclaredAnnotation(ConfigEntry.Bounded.Long.class);
-                    entry.getExtras().setBounds(bounds.min(), bounds.max(), bounds.slider());
+                    entry.setBounds(bounds.min(), bounds.max(), bounds.slider());
                 }
                 if (field.isAnnotationPresent(ConfigEntry.Bounded.Float.class)) {
                     if (field.getType() != float.class && field.getType() != Float.class) {
                         throw new IllegalAnnotationTargetException("Cannot apply Float bound to non Float field " + field);
                     }
                     ConfigEntry.Bounded.Float bounds = field.getDeclaredAnnotation(ConfigEntry.Bounded.Float.class);
-                    entry.getExtras().setBounds(bounds.min(), bounds.max(), false);
+                    entry.setBounds(bounds.min(), bounds.max(), false);
                 }
                 if (field.isAnnotationPresent(ConfigEntry.Bounded.Double.class)) {
                     if (field.getType() != double.class && field.getType() != Double.class) {
                         throw new IllegalAnnotationTargetException("Cannot apply Double bound to non Double field " + field);
                     }
                     ConfigEntry.Bounded.Double bounds = field.getDeclaredAnnotation(ConfigEntry.Bounded.Double.class);
-                    entry.getExtras().setBounds(bounds.min(), bounds.max(), false);
+                    entry.setBounds(bounds.min(), bounds.max(), false);
                 }
                 if (Enum.class.isAssignableFrom(field.getType())) {
                     if (field.isAnnotationPresent(ConfigEntry.EnumOptions.class)) {
-                        entry.getExtras().setEnumOptions(field.getDeclaredAnnotation(ConfigEntry.EnumOptions.class).displayType());
+                        entry.setEnumOptions(field.getDeclaredAnnotation(ConfigEntry.EnumOptions.class).displayType());
                     } else {
-                        entry.getExtras().setEnumOptions(EnumOptions.DisplayType.getDefault());
+                        entry.setEnumOptions(EnumOptions.DisplayType.getDefault());
                     }
                 } else if (field.isAnnotationPresent(ConfigEntry.EnumOptions.class)) {
                     throw new IllegalAnnotationTargetException("Cannot apply enum options to non enum field " + field);

+ 10 - 0
src/main/java/me/lortseam/completeconfig/entry/Entry.java

@@ -1,6 +1,7 @@
 package me.lortseam.completeconfig.entry;
 
 import com.google.common.collect.MoreCollectors;
+import lombok.AccessLevel;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 import lombok.Setter;
@@ -58,6 +59,7 @@ public class Entry<T> {
     private ConfigEntryContainer parentObject;
     @Getter
     private T defaultValue;
+    @Getter(AccessLevel.PACKAGE)
     private String translationKey;
     private String[] tooltipTranslationKeys;
     @Getter
@@ -168,6 +170,14 @@ public class Entry<T> {
         return tooltipTranslationKeys != null ? Optional.of(Arrays.stream(tooltipTranslationKeys).map(TranslatableText::new).toArray(Text[]::new)) : Optional.empty();
     }
 
+    public <N extends Number> void setBounds(N min, N max, boolean slider) {
+        extras.setBounds(min, max, slider);
+    }
+
+    public void setEnumOptions(EnumOptions.DisplayType displayType) {
+        extras.setEnumOptions(displayType);
+    }
+
     @AllArgsConstructor
     private static class Listener {
 

+ 12 - 3
src/main/java/me/lortseam/completeconfig/entry/EnumOptions.java

@@ -1,15 +1,24 @@
 package me.lortseam.completeconfig.entry;
 
-import lombok.AccessLevel;
-import lombok.AllArgsConstructor;
+import com.google.common.base.CaseFormat;
 import lombok.Getter;
 import me.lortseam.completeconfig.api.ConfigEntry;
+import net.minecraft.text.Text;
+import net.minecraft.text.TranslatableText;
+
+import java.util.function.Function;
 
-@AllArgsConstructor(access = AccessLevel.PACKAGE)
 public class EnumOptions {
 
     @Getter
     private final DisplayType displayType;
+    @Getter
+    private final Function<Enum, Text> nameProvider;
+
+    EnumOptions(Entry<?> entry, DisplayType displayType) {
+        this.displayType = displayType;
+        nameProvider = enumValue -> new TranslatableText(entry.getTranslationKey() + "." + CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, enumValue.name()));
+    }
 
     public enum DisplayType {
 

+ 3 - 3
src/main/java/me/lortseam/completeconfig/entry/Extras.java

@@ -14,15 +14,15 @@ public class Extras<T> {
     @Getter
     private EnumOptions enumOptions;
 
-    public <N extends Number> void setBounds(N min, N max, boolean slider) {
+    <N extends Number> void setBounds(N min, N max, boolean slider) {
         if (!ClassUtils.isAssignable(entry.getType(), min.getClass()) || !ClassUtils.isAssignable(entry.getType(), max.getClass())) {
             throw new IllegalArgumentException();
         }
         bounds = new Bounds<>((T) min, (T) max, slider);
     }
 
-    public void setEnumOptions(EnumOptions.DisplayType displayType) {
-        enumOptions = new EnumOptions(displayType);
+    void setEnumOptions(EnumOptions.DisplayType displayType) {
+        enumOptions = new EnumOptions(entry, displayType);
     }
 
 }

+ 1 - 4
src/main/java/me/lortseam/completeconfig/gui/GuiRegistry.java

@@ -1,11 +1,9 @@
 package me.lortseam.completeconfig.gui;
 
-import com.google.common.base.CaseFormat;
 import com.google.common.collect.Lists;
 import me.lortseam.completeconfig.entry.Entry;
 import me.lortseam.completeconfig.entry.EnumOptions;
 import me.shedaniel.clothconfig2.api.ConfigEntryBuilder;
-import net.minecraft.text.TranslatableText;
 import org.apache.commons.lang3.ArrayUtils;
 
 import java.lang.reflect.ParameterizedType;
@@ -180,8 +178,7 @@ public class GuiRegistry {
                 .startEnumSelector(text, (Class<Enum>) field.getType(), value)
                 .setDefaultValue(defaultValue)
                 .setTooltip(tooltip)
-                                                                                            //TODO: Bad solution; provide custom enum name provider
-                .setEnumNameProvider(e -> new TranslatableText(((TranslatableText) text).getKey() + "." + CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, e.name())))
+                .setEnumNameProvider(extras.getEnumOptions().getNameProvider())
                 .setSaveConsumer(saveConsumer)
                 .build(),
                 EnumOptions.DisplayType.BUTTON