aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/hysky/skyblocker/config
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/de/hysky/skyblocker/config')
-rw-r--r--src/main/java/de/hysky/skyblocker/config/ConfigUtils.java20
-rw-r--r--src/main/java/de/hysky/skyblocker/config/SkyblockerConfig.java48
-rw-r--r--src/main/java/de/hysky/skyblocker/config/categories/DungeonsCategory.java113
-rw-r--r--src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java21
-rw-r--r--src/main/java/de/hysky/skyblocker/config/categories/MessageFilterCategory.java8
-rw-r--r--src/main/java/de/hysky/skyblocker/config/controllers/EnumDropdownController.java93
-rw-r--r--src/main/java/de/hysky/skyblocker/config/controllers/EnumDropdownControllerBuilder.java27
-rw-r--r--src/main/java/de/hysky/skyblocker/config/controllers/EnumDropdownControllerBuilderImpl.java27
-rw-r--r--src/main/java/de/hysky/skyblocker/config/controllers/EnumDropdownControllerElement.java26
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;
- }
-}