aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/de/hysky/skyblocker/utils/config
diff options
context:
space:
mode:
authorvicisacat <victor.branchu@gmail.com>2024-04-21 23:16:20 +0200
committerviciscat <51047087+viciscat@users.noreply.github.com>2024-06-02 13:26:45 +0200
commit2617ae503efa5b13b84c8fd5530f219ebf28d427 (patch)
tree37435dd763524207a7ada00ce90607fe6840e326 /src/main/java/de/hysky/skyblocker/utils/config
parentcc4823e3646573d052ea36fef1ce6d9f9e9b90fd (diff)
downloadSkyblocker-2617ae503efa5b13b84c8fd5530f219ebf28d427.tar.gz
Skyblocker-2617ae503efa5b13b84c8fd5530f219ebf28d427.tar.bz2
Skyblocker-2617ae503efa5b13b84c8fd5530f219ebf28d427.zip
working notifications, probably
I ain't waiting 50 hours waiting for notifications
Diffstat (limited to 'src/main/java/de/hysky/skyblocker/utils/config')
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/config/DurationController.java70
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/config/DurationControllerWidget.java38
2 files changed, 108 insertions, 0 deletions
diff --git a/src/main/java/de/hysky/skyblocker/utils/config/DurationController.java b/src/main/java/de/hysky/skyblocker/utils/config/DurationController.java
new file mode 100644
index 00000000..09edcf3c
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/utils/config/DurationController.java
@@ -0,0 +1,70 @@
+package de.hysky.skyblocker.utils.config;
+
+import de.hysky.skyblocker.utils.Utils;
+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.string.IStringController;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public record DurationController(Option<Integer> option) implements IStringController<Integer> {
+
+ private static final Pattern secondsPattern = Pattern.compile("(^|\\s)(\\d+)s(\\s|$)");
+ private static final Pattern minutesPattern = Pattern.compile("(^|\\s)(\\d+)m(\\s|$)");
+ private static final Pattern hoursPattern = Pattern.compile("(^|\\s)(\\d+)h(\\s|$)");
+
+ @Override
+ public String getString() {
+ return Utils.getDurationText(option.pendingValue()).getString();
+ }
+
+
+ @Override
+ public void setFromString(String value) {
+ Matcher hoursMatcher = hoursPattern.matcher(value);
+ Matcher minutesMatcher = minutesPattern.matcher(value);
+ Matcher secondsMatcher = secondsPattern.matcher(value);
+
+ int result = 0;
+ if (hoursMatcher.find()) {
+ result += Integer.parseInt(hoursMatcher.group(2)) * 3600;
+ }
+ if (minutesMatcher.find()) {
+ result += Integer.parseInt(minutesMatcher.group(2)) * 60;
+ }
+ if (secondsMatcher.find()) {
+ result += Integer.parseInt(secondsMatcher.group(2));
+ }
+ option.requestSet(result);
+ }
+
+
+ @Override
+ public boolean isInputValid(String s) {
+ Matcher hoursMatcher = hoursPattern.matcher(s);
+ Matcher minutesMatcher = minutesPattern.matcher(s);
+ Matcher secondsMatcher = secondsPattern.matcher(s);
+
+ int hoursCount = 0;
+ while (hoursMatcher.find()) hoursCount++;
+ int minutesCount = 0;
+ while (minutesMatcher.find()) minutesCount++;
+ int secondsCount = 0;
+ while (secondsMatcher.find()) secondsCount++;
+
+ if (hoursCount == 0 && minutesCount == 0 && secondsCount == 0) return false;
+ if (hoursCount > 1 || minutesCount > 1 || secondsCount > 1) return false;
+ s = s.replaceAll(hoursPattern.pattern(), "");
+ s = s.replaceAll(minutesPattern.pattern(), "");
+ s = s.replaceAll(secondsPattern.pattern(), "");
+ return s.isBlank();
+ }
+
+ @Override
+ public AbstractWidget provideWidget(YACLScreen screen, Dimension<Integer> widgetDimension) {
+ return new DurationControllerWidget(this, screen, widgetDimension);
+ }
+}
diff --git a/src/main/java/de/hysky/skyblocker/utils/config/DurationControllerWidget.java b/src/main/java/de/hysky/skyblocker/utils/config/DurationControllerWidget.java
new file mode 100644
index 00000000..f25cd088
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/utils/config/DurationControllerWidget.java
@@ -0,0 +1,38 @@
+package de.hysky.skyblocker.utils.config;
+
+import dev.isxander.yacl3.api.utils.Dimension;
+import dev.isxander.yacl3.gui.YACLScreen;
+import dev.isxander.yacl3.gui.controllers.string.IStringController;
+import dev.isxander.yacl3.gui.controllers.string.StringControllerElement;
+import net.minecraft.text.Text;
+import net.minecraft.util.Formatting;
+
+import java.util.function.Consumer;
+
+public class DurationControllerWidget extends StringControllerElement {
+
+ public DurationControllerWidget(IStringController<?> control, YACLScreen screen, Dimension<Integer> dim) {
+ super(control, screen, dim, false);
+ }
+
+ @Override
+ public void unfocus() {
+ if (control.isInputValid(inputField)) super.unfocus();
+ else modifyInput(stringBuilder -> stringBuilder.replace(0, stringBuilder.length(), control.getString()));
+ }
+
+ @Override
+ public boolean modifyInput(Consumer<StringBuilder> consumer) {
+ StringBuilder temp = new StringBuilder(inputField);
+ consumer.accept(temp);
+ inputField = temp.toString();
+ return true;
+ }
+
+ @Override
+ protected Text getValueText() {
+ Text valueText = super.getValueText();
+ boolean inputValid = control.isInputValid(valueText.getString());
+ return valueText.copy().formatted(inputValid ? Formatting.WHITE: Formatting.RED);
+ }
+}