package me.shedaniel.clothconfig2.impl.builders; import me.shedaniel.clothconfig2.gui.entries.EnumListEntry; import java.util.Objects; import java.util.Optional; import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier; public class EnumSelectorBuilder> extends FieldBuilder> { private Consumer saveConsumer = null; private Supplier> tooltipSupplier = null; private T value; private Class clazz; private Function enumNameProvider = EnumListEntry.DEFAULT_NAME_PROVIDER; public EnumSelectorBuilder(String resetButtonKey, String fieldNameKey, Class clazz, T value) { super(resetButtonKey, fieldNameKey); Objects.requireNonNull(clazz); Objects.requireNonNull(value); this.value = value; this.clazz = clazz; } public EnumSelectorBuilder requireRestart() { requireRestart(true); return this; } public EnumSelectorBuilder setSaveConsumer(Consumer saveConsumer) { this.saveConsumer = saveConsumer; return this; } public EnumSelectorBuilder setDefaultValue(Supplier defaultValue) { this.defaultValue = defaultValue; return this; } public EnumSelectorBuilder setDefaultValue(T defaultValue) { Objects.requireNonNull(defaultValue); this.defaultValue = () -> defaultValue; return this; } public EnumSelectorBuilder setTooltipSupplier(Supplier> tooltipSupplier) { this.tooltipSupplier = tooltipSupplier; return this; } public EnumSelectorBuilder setTooltip(Optional tooltip) { this.tooltipSupplier = () -> tooltip; return this; } public EnumSelectorBuilder setTooltip(String... tooltip) { this.tooltipSupplier = () -> Optional.ofNullable(tooltip); return this; } public EnumSelectorBuilder setEnumNameProvider(Function enumNameProvider) { Objects.requireNonNull(enumNameProvider); this.enumNameProvider = enumNameProvider; return this; } @Override public EnumListEntry build() { return new EnumListEntry(getFieldNameKey(), clazz, value, getResetButtonKey(), defaultValue, saveConsumer, enumNameProvider, tooltipSupplier, isRequireRestart()); } }