aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/me/xmrvizzy/skyblocker/config/ConfigUtils.java
blob: 651f7aa9e18974d0859ec0b31edfa3c4307b4bd9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package me.xmrvizzy.skyblocker.config;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

import dev.isxander.yacl3.api.Option;
import dev.isxander.yacl3.api.controller.BooleanControllerBuilder;
import dev.isxander.yacl3.api.controller.DropdownStringControllerBuilder;
import dev.isxander.yacl3.api.controller.EnumControllerBuilder;

public class ConfigUtils {
	@SuppressWarnings("unchecked")
	public static <E extends Enum<E>> EnumControllerBuilder<E> createEnumCyclingListController(Option<E> opt) {
		return EnumControllerBuilder.create(opt).enumClass((Class<E>) opt.binding().defaultValue().getClass());
	}
	
	public static BooleanControllerBuilder createBooleanController(Option<Boolean> opt) {
		return BooleanControllerBuilder.create(opt).yesNoFormatter().coloured(true);
	}

	/**
	 * Searches through enum constants in {@code enumClass} for one whose {@link Enum#toString()} result equals {@code expectedValue}
	 * 
	 * @return The enum constant associated with the {@code expectedValue}
	 * @throws IllegalStateException Thrown when a constant couldn't be found
	 * 
	 * @implNote The return value of {@link Enum#toString()} on each enum constant should be unique in order to ensure accuracy
	 */
	public static <E extends Enum<E>> E enumConstantFromToString(Class<E> enumClass, String expectedValue) {
		for (E constant : enumClass.getEnumConstants()) {
			if (constant.toString().equals(expectedValue))
				return constant;
		}

		throw new IllegalStateException("Didn't find an enum constant matching: " + expectedValue);
	}

	public static <E extends Enum<E>> DropdownStringControllerBuilder createDropdownControllerFromEnum(Option<String> opt, Class<E> enumClass) {
		List<String> stringifiedConstants = Arrays.stream(enumClass.getEnumConstants()).map(Enum::toString).collect(Collectors.toList());

		return DropdownStringControllerBuilder.create(opt).allowAnyValue(false).allowEmptyValue(false).values(stringifiedConstants);
	}
}