diff options
Diffstat (limited to 'src/main/java/de/hysky/skyblocker/config')
9 files changed, 187 insertions, 196 deletions
diff --git a/src/main/java/de/hysky/skyblocker/config/ConfigUtils.java b/src/main/java/de/hysky/skyblocker/config/ConfigUtils.java index 9a7a41b5..8b0f27a7 100644 --- a/src/main/java/de/hysky/skyblocker/config/ConfigUtils.java +++ b/src/main/java/de/hysky/skyblocker/config/ConfigUtils.java @@ -1,9 +1,7 @@ package de.hysky.skyblocker.config; import dev.isxander.yacl3.api.Option; -import dev.isxander.yacl3.api.controller.BooleanControllerBuilder; -import dev.isxander.yacl3.api.controller.EnumControllerBuilder; -import dev.isxander.yacl3.api.controller.ValueFormatter; +import dev.isxander.yacl3.api.controller.*; import net.minecraft.text.Text; import net.minecraft.util.Formatting; import org.apache.commons.lang3.StringUtils; @@ -11,7 +9,7 @@ import org.apache.commons.lang3.StringUtils; import java.util.function.Function; public class ConfigUtils { - public static final Function<Formatting, String> FORMATTING_TO_STRING = formatting -> StringUtils.capitalize(formatting.getName().replaceAll("_", " ")); + public static final ValueFormatter<Formatting> FORMATTING_FORMATTER = formatting -> Text.literal(StringUtils.capitalize(formatting.getName().replaceAll("_", " "))); public static final ValueFormatter<Float> FLOAT_TWO_FORMATTER = value -> Text.literal(String.format("%,.2f", value).replaceAll("[\u00a0\u202F]", " ")); public static BooleanControllerBuilder createBooleanController(Option<Boolean> opt) { @@ -22,4 +20,18 @@ public class ConfigUtils { public static <E extends Enum<E>> EnumControllerBuilder<E> createEnumCyclingListController(Option<E> opt) { return EnumControllerBuilder.create(opt).enumClass((Class<E>) opt.binding().defaultValue().getClass()); } + + /** + * Creates a factory for {@link EnumDropdownControllerBuilder}s with the given function for converting enum constants to texts. + * Use this if a custom formatter function for an enum is needed. + * Use it like this: + * <pre>{@code Option.<MyEnum>createBuilder().controller(ConfigUtils.getEnumDropdownControllerFactory(MY_CUSTOM_ENUM_TO_TEXT_FUNCTION))}</pre> + * + * @param formatter The function used to convert enum constants to texts used for display, suggestion, and validation + * @param <E> the enum type + * @return a factory for {@link EnumDropdownControllerBuilder}s + */ + public static <E extends Enum<E>> Function<Option<E>, ControllerBuilder<E>> getEnumDropdownControllerFactory(ValueFormatter<E> formatter) { + return opt -> EnumDropdownControllerBuilder.create(opt).formatValue(formatter); + } } diff --git a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java index 8604913c..609e7c2f 100644 --- a/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java +++ b/src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java @@ -150,6 +150,9 @@ public class SkyblockerConfig { public static class General { @SerialEntry + public boolean enableTips = true; + + @SerialEntry public boolean acceptReparty = true; @SerialEntry @@ -163,6 +166,9 @@ public class SkyblockerConfig { @SerialEntry public boolean hideStatusEffectOverlay = false; + + @SerialEntry + public boolean dontStripSkinAlphaValues = true; @SerialEntry public TabHudConf tabHud = new TabHudConf(); @@ -591,6 +597,9 @@ public class SkyblockerConfig { public DoorHighlight doorHighlight = new DoorHighlight(); @SerialEntry + public DungeonScore dungeonScore = new DungeonScore(); + + @SerialEntry public DungeonChestProfit dungeonChestProfit = new DungeonChestProfit(); @SerialEntry @@ -630,6 +639,9 @@ public class SkyblockerConfig { public boolean solveTicTacToe = true; @SerialEntry + public boolean solveWaterboard = true; + + @SerialEntry public boolean fireFreezeStaffTimer = true; @SerialEntry @@ -644,10 +656,10 @@ public class SkyblockerConfig { public static class SecretWaypoints { @SerialEntry - public boolean enableSecretWaypoints = true; + public boolean enableRoomMatching = true; @SerialEntry - public boolean noInitSecretWaypoints = false; + public boolean enableSecretWaypoints = true; @SerialEntry public Waypoint.Type waypointType = Waypoint.Type.WAYPOINT; @@ -715,6 +727,32 @@ public class SkyblockerConfig { } } + public static class DungeonScore { + @SerialEntry + public boolean enableDungeonScore270Message = false; + + @SerialEntry + public boolean enableDungeonScore270Title = false; + + @SerialEntry + public boolean enableDungeonScore270Sound = false; + + @SerialEntry + public String dungeonScore270Message = "270 Score Reached!"; + + @SerialEntry + public boolean enableDungeonScore300Message = true; + + @SerialEntry + public boolean enableDungeonScore300Title = true; + + @SerialEntry + public boolean enableDungeonScore300Sound = true; + + @SerialEntry + public String dungeonScore300Message = "300 Score Reached!"; + } + public static class DungeonChestProfit { @SerialEntry public boolean enableProfitCalculator = true; @@ -749,6 +787,9 @@ public class SkyblockerConfig { public boolean enableLividColorText = true; @SerialEntry + public boolean enableLividColorTitle = true; + + @SerialEntry public String lividColorText = "The livid color is [color]"; } @@ -920,6 +961,9 @@ public class SkyblockerConfig { public ChatFilterResult hideShowOff = ChatFilterResult.PASS; @SerialEntry + public ChatFilterResult hideToggleSkyMall = ChatFilterResult.PASS; + + @SerialEntry public boolean hideMana = false; } diff --git a/src/main/java/de/hysky/skyblocker/config/categories/DungeonsCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/DungeonsCategory.java index 246611cc..ad64e2e4 100644 --- a/src/main/java/de/hysky/skyblocker/config/categories/DungeonsCategory.java +++ b/src/main/java/de/hysky/skyblocker/config/categories/DungeonsCategory.java @@ -12,7 +12,6 @@ import dev.isxander.yacl3.api.OptionGroup; import dev.isxander.yacl3.api.controller.FloatFieldControllerBuilder; import dev.isxander.yacl3.api.controller.IntegerFieldControllerBuilder; import dev.isxander.yacl3.api.controller.StringControllerBuilder; -import de.hysky.skyblocker.config.controllers.EnumDropdownControllerBuilder; import de.hysky.skyblocker.skyblock.dungeon.DungeonMapConfigScreen; import net.minecraft.client.MinecraftClient; import net.minecraft.text.Text; @@ -29,21 +28,21 @@ public class DungeonsCategory { .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.secretWaypoints")) .collapsed(true) .option(Option.<Boolean>createBuilder() + .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.secretWaypoints.enableRoomMatching")) + .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.secretWaypoints.enableRoomMatching.@Tooltip"))) + .binding(defaults.locations.dungeons.secretWaypoints.enableRoomMatching, + () -> config.locations.dungeons.secretWaypoints.enableRoomMatching, + newValue -> config.locations.dungeons.secretWaypoints.enableRoomMatching = newValue) + .controller(ConfigUtils::createBooleanController) + .flag(OptionFlag.GAME_RESTART) + .build()) + .option(Option.<Boolean>createBuilder() .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.secretWaypoints.enableSecretWaypoints")) .binding(defaults.locations.dungeons.secretWaypoints.enableSecretWaypoints, () -> config.locations.dungeons.secretWaypoints.enableSecretWaypoints, newValue -> config.locations.dungeons.secretWaypoints.enableSecretWaypoints = newValue) .controller(ConfigUtils::createBooleanController) .build()) - .option(Option.<Boolean>createBuilder() - .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.secretWaypoints.noInitSecretWaypoints")) - .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.secretWaypoints.noInitSecretWaypoints.@Tooltip"))) - .binding(defaults.locations.dungeons.secretWaypoints.noInitSecretWaypoints, - () -> config.locations.dungeons.secretWaypoints.noInitSecretWaypoints, - newValue -> config.locations.dungeons.secretWaypoints.noInitSecretWaypoints = newValue) - .controller(ConfigUtils::createBooleanController) - .flag(OptionFlag.GAME_RESTART) - .build()) .option(Option.<Type>createBuilder() .name(Text.translatable("text.autoconfig.skyblocker.option.general.waypoints.waypointType")) .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.waypoints.waypointType.@Tooltip"))) @@ -168,6 +167,76 @@ public class DungeonsCategory { .build()) .build()) + //Dungeon Score + .group(OptionGroup.createBuilder() + .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore")) + .collapsed(true) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.enableDungeonScoreMessage", 270)) + .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.enableDungeonScoreMessage.@Tooltip", 270))) + .binding(defaults.locations.dungeons.dungeonScore.enableDungeonScore270Message, + () -> config.locations.dungeons.dungeonScore.enableDungeonScore270Message, + newValue -> config.locations.dungeons.dungeonScore.enableDungeonScore270Message = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.enableDungeonScoreTitle", 270)) + .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.enableDungeonScoreTitle.@Tooltip", 270))) + .binding(defaults.locations.dungeons.dungeonScore.enableDungeonScore270Title, + () -> config.locations.dungeons.dungeonScore.enableDungeonScore270Title, + newValue -> config.locations.dungeons.dungeonScore.enableDungeonScore270Title = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.enableDungeonScoreSound", 270)) + .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.enableDungeonScoreSound.@Tooltip", 270))) + .binding(defaults.locations.dungeons.dungeonScore.enableDungeonScore270Sound, + () -> config.locations.dungeons.dungeonScore.enableDungeonScore270Sound, + newValue -> config.locations.dungeons.dungeonScore.enableDungeonScore270Sound = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.dungeonScoreMessage", 270)) + .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.dungeonScoreMessage.@Tooltip", 270, 270))) + .binding(defaults.locations.dungeons.dungeonScore.dungeonScore270Message, + () -> config.locations.dungeons.dungeonScore.dungeonScore270Message, + newValue -> config.locations.dungeons.dungeonScore.dungeonScore270Message = newValue) + .controller(StringControllerBuilder::create) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.enableDungeonScoreMessage", 300)) + .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.enableDungeonScoreMessage.@Tooltip", 300))) + .binding(defaults.locations.dungeons.dungeonScore.enableDungeonScore300Message, + () -> config.locations.dungeons.dungeonScore.enableDungeonScore300Message, + newValue -> config.locations.dungeons.dungeonScore.enableDungeonScore300Message = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.enableDungeonScoreTitle", 300)) + .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.enableDungeonScoreTitle.@Tooltip", 300))) + .binding(defaults.locations.dungeons.dungeonScore.enableDungeonScore300Title, + () -> config.locations.dungeons.dungeonScore.enableDungeonScore300Title, + newValue -> config.locations.dungeons.dungeonScore.enableDungeonScore300Title = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.enableDungeonScoreSound", 300)) + .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.enableDungeonScoreSound.@Tooltip", 300))) + .binding(defaults.locations.dungeons.dungeonScore.enableDungeonScore300Sound, + () -> config.locations.dungeons.dungeonScore.enableDungeonScore300Sound, + newValue -> config.locations.dungeons.dungeonScore.enableDungeonScore300Sound = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<String>createBuilder() + .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.dungeonScoreMessage", 300)) + .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonScore.dungeonScoreMessage.@Tooltip", 300, 300))) + .binding(defaults.locations.dungeons.dungeonScore.dungeonScore300Message, + () -> config.locations.dungeons.dungeonScore.dungeonScore300Message, + newValue -> config.locations.dungeons.dungeonScore.dungeonScore300Message = newValue) + .controller(StringControllerBuilder::create) + .build()) + .build()) + //Dungeon Chest Profit .group(OptionGroup.createBuilder() .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonChestProfit")) @@ -209,21 +278,21 @@ public class DungeonsCategory { .binding(defaults.locations.dungeons.dungeonChestProfit.neutralColor, () -> config.locations.dungeons.dungeonChestProfit.neutralColor, newValue -> config.locations.dungeons.dungeonChestProfit.neutralColor = newValue) - .controller(EnumDropdownControllerBuilder.getFactory(ConfigUtils.FORMATTING_TO_STRING)) + .controller(ConfigUtils.getEnumDropdownControllerFactory(ConfigUtils.FORMATTING_FORMATTER)) .build()) .option(Option.<Formatting>createBuilder() .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonChestProfit.profitColor")) .binding(defaults.locations.dungeons.dungeonChestProfit.profitColor, () -> config.locations.dungeons.dungeonChestProfit.profitColor, newValue -> config.locations.dungeons.dungeonChestProfit.profitColor = newValue) - .controller(EnumDropdownControllerBuilder.getFactory(ConfigUtils.FORMATTING_TO_STRING)) + .controller(ConfigUtils.getEnumDropdownControllerFactory(ConfigUtils.FORMATTING_FORMATTER)) .build()) .option(Option.<Formatting>createBuilder() .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.dungeonChestProfit.lossColor")) .binding(defaults.locations.dungeons.dungeonChestProfit.lossColor, () -> config.locations.dungeons.dungeonChestProfit.lossColor, newValue -> config.locations.dungeons.dungeonChestProfit.lossColor = newValue) - .controller(EnumDropdownControllerBuilder.getFactory(ConfigUtils.FORMATTING_TO_STRING)) + .controller(ConfigUtils.getEnumDropdownControllerFactory(ConfigUtils.FORMATTING_FORMATTER)) .build()) .option(Option.<Formatting>createBuilder() .name(Text.translatable("text.autoconfig.skyblocker.option.general.chestValue.incompleteColor")) @@ -231,7 +300,7 @@ public class DungeonsCategory { .binding(defaults.locations.dungeons.dungeonChestProfit.incompleteColor, () -> config.locations.dungeons.dungeonChestProfit.incompleteColor, newValue -> config.locations.dungeons.dungeonChestProfit.incompleteColor = newValue) - .controller(EnumDropdownControllerBuilder.getFactory(ConfigUtils.FORMATTING_TO_STRING)) + .controller(ConfigUtils.getEnumDropdownControllerFactory(ConfigUtils.FORMATTING_FORMATTER)) .build()) .build()) @@ -318,6 +387,14 @@ public class DungeonsCategory { .controller(ConfigUtils::createBooleanController) .build()) .option(Option.<Boolean>createBuilder() + .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.solveWaterboard")) + .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.solveWaterboard.@Tooltip"))) + .binding(defaults.locations.dungeons.solveWaterboard, + () -> config.locations.dungeons.solveWaterboard, + newValue -> config.locations.dungeons.solveWaterboard = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.fireFreezeStaffTimer")) .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.fireFreezeStaffTimer.@Tooltip"))) .binding(defaults.locations.dungeons.fireFreezeStaffTimer, @@ -354,6 +431,14 @@ public class DungeonsCategory { newValue -> config.locations.dungeons.lividColor.enableLividColorText = newValue) .controller(ConfigUtils::createBooleanController) .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.lividColor.enableLividColorTitle")) + .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.lividColor.enableLividColorTitle.@Tooltip"))) + .binding(defaults.locations.dungeons.lividColor.enableLividColorTitle, + () -> config.locations.dungeons.lividColor.enableLividColorTitle, + newValue -> config.locations.dungeons.lividColor.enableLividColorTitle = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) .option(Option.<String>createBuilder() .name(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.lividColor.lividColorText")) .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.locations.dungeons.lividColor.lividColorText.@Tooltip"))) diff --git a/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java index 8d8c6f46..3b9cbe60 100644 --- a/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java +++ b/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java @@ -2,7 +2,6 @@ package de.hysky.skyblocker.config.categories; import de.hysky.skyblocker.config.ConfigUtils; import de.hysky.skyblocker.config.SkyblockerConfig; -import de.hysky.skyblocker.config.controllers.EnumDropdownControllerBuilder; import de.hysky.skyblocker.skyblock.shortcut.ShortcutsConfigScreen; import de.hysky.skyblocker.utils.render.title.TitleContainerConfigScreen; import de.hysky.skyblocker.utils.waypoint.Waypoint; @@ -22,6 +21,13 @@ public class GeneralCategory { //Ungrouped Options .option(Option.<Boolean>createBuilder() + .name(Text.translatable("text.autoconfig.skyblocker.option.general.enableTips")) + .binding(defaults.general.enableTips, + () -> config.general.enableTips, + newValue -> config.general.enableTips = newValue) + .controller(ConfigUtils::createBooleanController) + .build()) + .option(Option.<Boolean>createBuilder() .name(Text.translatable("text.autoconfig.skyblocker.option.general.acceptReparty")) .binding(defaults.general.acceptReparty, () -> config.general.acceptReparty, @@ -56,6 +62,15 @@ public class GeneralCategory { newValue -> config.general.hideStatusEffectOverlay = newValue) .controller(ConfigUtils::createBooleanController) .build()) + .option(Option.<Boolean>createBuilder() + .name(Text.translatable("text.autoconfig.skyblocker.option.general.dontStripSkinAlphaValues")) + .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.general.dontStripSkinAlphaValues.@Tooltip"))) + .binding(defaults.general.dontStripSkinAlphaValues, + () -> config.general.dontStripSkinAlphaValues, + newValue -> config.general.dontStripSkinAlphaValues = newValue) + .controller(ConfigUtils::createBooleanController) + .flag(OptionFlag.ASSET_RELOAD) + .build()) //Tab Hud .group(OptionGroup.createBuilder() @@ -474,7 +489,7 @@ public class GeneralCategory { .binding(defaults.general.chestValue.color, () -> config.general.chestValue.color, newValue -> config.general.chestValue.color = newValue) - .controller(EnumDropdownControllerBuilder.getFactory(ConfigUtils.FORMATTING_TO_STRING)) + .controller(ConfigUtils.getEnumDropdownControllerFactory(ConfigUtils.FORMATTING_FORMATTER)) .build()) .option(Option.<Formatting>createBuilder() .name(Text.translatable("text.autoconfig.skyblocker.option.general.chestValue.incompleteColor")) @@ -482,7 +497,7 @@ public class GeneralCategory { .binding(defaults.general.chestValue.incompleteColor, () -> config.general.chestValue.incompleteColor, newValue -> config.general.chestValue.incompleteColor = newValue) - .controller(EnumDropdownControllerBuilder.getFactory(ConfigUtils.FORMATTING_TO_STRING)) + .controller(ConfigUtils.getEnumDropdownControllerFactory(ConfigUtils.FORMATTING_FORMATTER)) .build()) .build()) diff --git a/src/main/java/de/hysky/skyblocker/config/categories/MessageFilterCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/MessageFilterCategory.java index c63b933d..37f24d8c 100644 --- a/src/main/java/de/hysky/skyblocker/config/categories/MessageFilterCategory.java +++ b/src/main/java/de/hysky/skyblocker/config/categories/MessageFilterCategory.java @@ -87,6 +87,14 @@ public class MessageFilterCategory { newValue -> config.messages.hideShowOff = newValue) .controller(ConfigUtils::createEnumCyclingListController) .build()) + .option(Option.<ChatFilterResult>createBuilder() + .name(Text.translatable("text.autoconfig.skyblocker.option.messages.hideToggleSkyMall")) + .description(OptionDescription.of(Text.translatable("text.autoconfig.skyblocker.option.messages.hideToggleSkyMall.@Tooltip"))) + .binding(defaults.messages.hideToggleSkyMall, + () -> config.messages.hideToggleSkyMall, + newValue -> config.messages.hideToggleSkyMall = newValue) + .controller(ConfigUtils::createEnumCyclingListController) + .build()) .option(Option.<Boolean>createBuilder() .name(Text.translatable("text.autoconfig.skyblocker.option.messages.hideMana")) .binding(defaults.messages.hideMana, diff --git a/src/main/java/de/hysky/skyblocker/config/controllers/EnumDropdownController.java b/src/main/java/de/hysky/skyblocker/config/controllers/EnumDropdownController.java deleted file mode 100644 index 0b9a809d..00000000 --- a/src/main/java/de/hysky/skyblocker/config/controllers/EnumDropdownController.java +++ /dev/null @@ -1,93 +0,0 @@ -package de.hysky.skyblocker.config.controllers; - -import dev.isxander.yacl3.api.Option; -import dev.isxander.yacl3.api.utils.Dimension; -import dev.isxander.yacl3.gui.AbstractWidget; -import dev.isxander.yacl3.gui.YACLScreen; -import dev.isxander.yacl3.gui.controllers.dropdown.AbstractDropdownController; -import org.jetbrains.annotations.NotNull; - -import java.util.Arrays; -import java.util.function.Function; -import java.util.stream.Stream; - -public class EnumDropdownController<E extends Enum<E>> extends AbstractDropdownController<E> { - /** - * The function used to convert enum constants to strings used for display, suggestion, and validation. Defaults to {@link Enum#toString}. - */ - protected final Function<E, String> toString; - - protected EnumDropdownController(Option<E> option, Function<E, String> toString) { - super(option); - this.toString = toString; - } - - @Override - public String getString() { - return toString.apply(option().pendingValue()); - } - - @Override - public void setFromString(String value) { - option().requestSet(getEnumFromString(value)); - } - - /** - * Searches through enum constants for one whose {@link #toString} result equals {@code value} - * - * @return The enum constant associated with the {@code value} or the pending value if none are found - * @implNote The return value of {@link #toString} on each enum constant should be unique in order to ensure accuracy - */ - private E getEnumFromString(String value) { - value = value.toLowerCase(); - for (E constant : option().pendingValue().getDeclaringClass().getEnumConstants()) { - if (toString.apply(constant).toLowerCase().equals(value)) return constant; - } - - return option().pendingValue(); - } - - @Override - public boolean isValueValid(String value) { - value = value.toLowerCase(); - for (E constant : option().pendingValue().getDeclaringClass().getEnumConstants()) { - if (toString.apply(constant).equals(value)) return true; - } - - return false; - } - - @Override - protected String getValidValue(String value, int offset) { - return getValidEnumConstants(value) - .skip(offset) - .findFirst() - .orElseGet(this::getString); - } - - /** - * Filters and sorts through enum constants for those whose {@link #toString} result equals {@code value} - * - * @return a sorted stream containing enum constants associated with the {@code value} - * @implNote The return value of {@link #toString} on each enum constant should be unique in order to ensure accuracy - */ - @NotNull - protected Stream<String> getValidEnumConstants(String value) { - String valueLowerCase = value.toLowerCase(); - return Arrays.stream(option().pendingValue().getDeclaringClass().getEnumConstants()) - .map(this.toString) - .filter(constant -> constant.toLowerCase().contains(valueLowerCase)) - .sorted((s1, s2) -> { - String s1LowerCase = s1.toLowerCase(); - String s2LowerCase = s2.toLowerCase(); - if (s1LowerCase.startsWith(valueLowerCase) && !s2LowerCase.startsWith(valueLowerCase)) return -1; - if (!s1LowerCase.startsWith(valueLowerCase) && s2LowerCase.startsWith(valueLowerCase)) return 1; - return s1.compareTo(s2); - }); - } - - @Override - public AbstractWidget provideWidget(YACLScreen screen, Dimension<Integer> widgetDimension) { - return new EnumDropdownControllerElement<>(this, screen, widgetDimension); - } -} diff --git a/src/main/java/de/hysky/skyblocker/config/controllers/EnumDropdownControllerBuilder.java b/src/main/java/de/hysky/skyblocker/config/controllers/EnumDropdownControllerBuilder.java deleted file mode 100644 index d451a88c..00000000 --- a/src/main/java/de/hysky/skyblocker/config/controllers/EnumDropdownControllerBuilder.java +++ /dev/null @@ -1,27 +0,0 @@ -package de.hysky.skyblocker.config.controllers; - -import dev.isxander.yacl3.api.Option; -import dev.isxander.yacl3.api.controller.ControllerBuilder; - -import java.util.function.Function; - -public interface EnumDropdownControllerBuilder<E extends Enum<E>> extends ControllerBuilder<E> { - EnumDropdownControllerBuilder<E> toString(Function<E, String> toString); - - static <E extends Enum<E>> EnumDropdownControllerBuilder<E> create(Option<E> option) { - return new EnumDropdownControllerBuilderImpl<>(option); - } - - /** - * Creates a factory for {@link EnumDropdownControllerBuilder}s with the given function for converting enum constants to strings. - * Use this if a custom toString function for an enum is needed. - * Use it like this: - * <pre>{@code Option.<MyEnum>createBuilder().controller(createEnumDropdownControllerBuilder.getFactory(MY_CUSTOM_ENUM_TO_STRING_FUNCTION))}</pre> - * @param toString The function used to convert enum constants to strings used for display, suggestion, and validation - * @return a factory for {@link EnumDropdownControllerBuilder}s - * @param <E> the enum type - */ - static <E extends Enum<E>> Function<Option<E>, ControllerBuilder<E>> getFactory(Function<E, String> toString) { - return opt -> EnumDropdownControllerBuilder.create(opt).toString(toString); - } -} diff --git a/src/main/java/de/hysky/skyblocker/config/controllers/EnumDropdownControllerBuilderImpl.java b/src/main/java/de/hysky/skyblocker/config/controllers/EnumDropdownControllerBuilderImpl.java deleted file mode 100644 index 8f6dbb2a..00000000 --- a/src/main/java/de/hysky/skyblocker/config/controllers/EnumDropdownControllerBuilderImpl.java +++ /dev/null @@ -1,27 +0,0 @@ -package de.hysky.skyblocker.config.controllers; - -import dev.isxander.yacl3.api.Controller; -import dev.isxander.yacl3.api.Option; -import dev.isxander.yacl3.impl.controller.AbstractControllerBuilderImpl; - -import java.util.function.Function; - -public class EnumDropdownControllerBuilderImpl<E extends Enum<E>> extends AbstractControllerBuilderImpl<E> implements EnumDropdownControllerBuilder<E> { - private Function<E, String> toString = Enum::toString; - - public EnumDropdownControllerBuilderImpl(Option<E> option) { - super(option); - } - - @Override - public EnumDropdownControllerBuilder<E> toString(Function<E, String> toString) { - this.toString = toString; - return this; - } - - @SuppressWarnings("UnstableApiUsage") - @Override - public Controller<E> build() { - return new EnumDropdownController<>(option, toString); - } -} diff --git a/src/main/java/de/hysky/skyblocker/config/controllers/EnumDropdownControllerElement.java b/src/main/java/de/hysky/skyblocker/config/controllers/EnumDropdownControllerElement.java deleted file mode 100644 index 2a8de609..00000000 --- a/src/main/java/de/hysky/skyblocker/config/controllers/EnumDropdownControllerElement.java +++ /dev/null @@ -1,26 +0,0 @@ -package de.hysky.skyblocker.config.controllers; - -import dev.isxander.yacl3.api.utils.Dimension; -import dev.isxander.yacl3.gui.YACLScreen; -import dev.isxander.yacl3.gui.controllers.dropdown.AbstractDropdownControllerElement; - -import java.util.List; - -public class EnumDropdownControllerElement<E extends Enum<E>> extends AbstractDropdownControllerElement<E, String> { - private final EnumDropdownController<E> controller; - - public EnumDropdownControllerElement(EnumDropdownController<E> control, YACLScreen screen, Dimension<Integer> dim) { - super(control, screen, dim); - this.controller = control; - } - - @Override - public List<String> computeMatchingValues() { - return controller.getValidEnumConstants(inputField).toList(); - } - - @Override - public String getString(String object) { - return object; - } -} |