EnumSelectorBuilder.java 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package me.shedaniel.clothconfig2.impl.builders;
  2. import me.shedaniel.clothconfig2.gui.entries.EnumListEntry;
  3. import java.util.Objects;
  4. import java.util.Optional;
  5. import java.util.function.Consumer;
  6. import java.util.function.Function;
  7. import java.util.function.Supplier;
  8. public class EnumSelectorBuilder<T extends Enum<?>> extends FieldBuilder<T, EnumListEntry<T>> {
  9. private Consumer<T> saveConsumer = null;
  10. private Supplier<Optional<String[]>> tooltipSupplier = null;
  11. private T value;
  12. private Class<T> clazz;
  13. private Function<Enum, String> enumNameProvider = EnumListEntry.DEFAULT_NAME_PROVIDER;
  14. public EnumSelectorBuilder(String resetButtonKey, String fieldNameKey, Class<T> clazz, T value) {
  15. super(resetButtonKey, fieldNameKey);
  16. Objects.requireNonNull(clazz);
  17. Objects.requireNonNull(value);
  18. this.value = value;
  19. this.clazz = clazz;
  20. }
  21. public EnumSelectorBuilder<T> requireRestart() {
  22. requireRestart(true);
  23. return this;
  24. }
  25. public EnumSelectorBuilder setSaveConsumer(Consumer<T> saveConsumer) {
  26. this.saveConsumer = saveConsumer;
  27. return this;
  28. }
  29. public EnumSelectorBuilder setDefaultValue(Supplier<T> defaultValue) {
  30. this.defaultValue = defaultValue;
  31. return this;
  32. }
  33. public EnumSelectorBuilder setDefaultValue(T defaultValue) {
  34. Objects.requireNonNull(defaultValue);
  35. this.defaultValue = () -> defaultValue;
  36. return this;
  37. }
  38. public EnumSelectorBuilder setTooltipSupplier(Supplier<Optional<String[]>> tooltipSupplier) {
  39. this.tooltipSupplier = tooltipSupplier;
  40. return this;
  41. }
  42. public EnumSelectorBuilder setTooltip(Optional<String[]> tooltip) {
  43. this.tooltipSupplier = () -> tooltip;
  44. return this;
  45. }
  46. public EnumSelectorBuilder setTooltip(String... tooltip) {
  47. this.tooltipSupplier = () -> Optional.ofNullable(tooltip);
  48. return this;
  49. }
  50. public EnumSelectorBuilder setEnumNameProvider(Function<Enum, String> enumNameProvider) {
  51. Objects.requireNonNull(enumNameProvider);
  52. this.enumNameProvider = enumNameProvider;
  53. return this;
  54. }
  55. @Override
  56. public EnumListEntry<T> build() {
  57. return new EnumListEntry<T>(getFieldNameKey(), clazz, value, getResetButtonKey(), defaultValue, saveConsumer, enumNameProvider, tooltipSupplier, isRequireRestart());
  58. }
  59. }