aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java1
-rw-r--r--src/main/java/de/hysky/skyblocker/config/categories/HelperCategory.java10
-rw-r--r--src/main/java/de/hysky/skyblocker/config/configs/HelperConfig.java3
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipManager.java1
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/CalendarStartTimeTooltip.java48
-rw-r--r--src/main/java/de/hysky/skyblocker/skyblock/itemlist/recipebook/UpcomingEventsTab.java36
-rw-r--r--src/main/java/de/hysky/skyblocker/utils/RegexUtils.java12
7 files changed, 91 insertions, 20 deletions
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 1df6bb26..24cd4974 100644
--- a/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java
+++ b/src/main/java/de/hysky/skyblocker/config/categories/GeneralCategory.java
@@ -58,6 +58,7 @@ public class GeneralCategory {
.controller(ConfigUtils::createBooleanController)
.build())
+ // Speed Presets
.group(OptionGroup.createBuilder()
.name(Text.translatable("skyblocker.config.general.speedPresets"))
.collapsed(true)
diff --git a/src/main/java/de/hysky/skyblocker/config/categories/HelperCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/HelperCategory.java
index 31bac293..c0a643e1 100644
--- a/src/main/java/de/hysky/skyblocker/config/categories/HelperCategory.java
+++ b/src/main/java/de/hysky/skyblocker/config/categories/HelperCategory.java
@@ -46,6 +46,16 @@ public class HelperCategory {
.controller(ConfigUtils::createBooleanController)
.build())
+ // Date Calculator
+ .option(Option.<Boolean>createBuilder()
+ .name(Text.translatable("skyblocker.config.helpers.enableDateCalculator"))
+ .description(OptionDescription.of(Text.translatable("skyblocker.config.helpers.enableDateCalculator.@Tooltip")))
+ .binding(defaults.helpers.enableDateCalculator,
+ () -> config.helpers.enableDateCalculator,
+ newValue -> config.helpers.enableDateCalculator = newValue)
+ .controller(ConfigUtils::createBooleanController)
+ .build())
+
//Mythological Ritual
.group(OptionGroup.createBuilder()
.name(Text.translatable("skyblocker.config.helpers.mythologicalRitual"))
diff --git a/src/main/java/de/hysky/skyblocker/config/configs/HelperConfig.java b/src/main/java/de/hysky/skyblocker/config/configs/HelperConfig.java
index 6541dee9..a2a4780e 100644
--- a/src/main/java/de/hysky/skyblocker/config/configs/HelperConfig.java
+++ b/src/main/java/de/hysky/skyblocker/config/configs/HelperConfig.java
@@ -14,6 +14,9 @@ public class HelperConfig {
@SerialEntry
public boolean enableWardrobeHelper = true;
+ @SerialEntry
+ public boolean enableDateCalculator = true;
+
@SerialEntry
public MythologicalRitual mythologicalRitual = new MythologicalRitual();
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipManager.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipManager.java
index 2566ea13..b015e755 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipManager.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/TooltipManager.java
@@ -44,6 +44,7 @@ public class TooltipManager {
new MuseumTooltip(11),
new ColorTooltip(12),
new AccessoryTooltip(13),
+ new CalendarStartTimeTooltip(14)
};
private static final ArrayList<TooltipAdder> currentScreenAdders = new ArrayList<>();
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/CalendarStartTimeTooltip.java b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/CalendarStartTimeTooltip.java
new file mode 100644
index 00000000..d3c0aa1e
--- /dev/null
+++ b/src/main/java/de/hysky/skyblocker/skyblock/item/tooltip/adders/CalendarStartTimeTooltip.java
@@ -0,0 +1,48 @@
+package de.hysky.skyblocker.skyblock.item.tooltip.adders;
+
+import de.hysky.skyblocker.config.SkyblockerConfigManager;
+import de.hysky.skyblocker.skyblock.item.tooltip.SimpleTooltipAdder;
+import de.hysky.skyblocker.utils.Formatters;
+import de.hysky.skyblocker.utils.RegexUtils;
+import net.minecraft.item.ItemStack;
+import net.minecraft.screen.slot.Slot;
+import net.minecraft.text.Text;
+import net.minecraft.util.Formatting;
+import org.jetbrains.annotations.Nullable;
+
+import java.time.Instant;
+import java.time.temporal.ChronoUnit;
+import java.util.List;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+public class CalendarStartTimeTooltip extends SimpleTooltipAdder {
+ private static final Pattern TIMER_PATTERN = Pattern.compile(".*(Starts in: |\\()((?<days>\\d+)d)? ?((?<hours>\\d+)h)? ?((?<minutes>\\d+)m)? ?((?<seconds>\\d+)s)?\\)?");
+
+ public CalendarStartTimeTooltip(int priority) {
+ super("(Calendar and Events|.*?, Year \\d+.*)", priority);
+ }
+
+ @Override
+ public void addToTooltip(@Nullable Slot focusedSlot, ItemStack stack, List<Text> lines) {
+ for (int i = 1; i < lines.size(); i++) {
+ Matcher matcher = TIMER_PATTERN.matcher(lines.get(i).getString());
+ if (matcher.matches()) {
+ Instant instant = Instant.now()
+ .plus(RegexUtils.parseOptionalIntFromMatcher(matcher, "days").orElse(0), ChronoUnit.DAYS)
+ .plus(RegexUtils.parseOptionalIntFromMatcher(matcher, "hours").orElse(0), ChronoUnit.HOURS)
+ .plus(RegexUtils.parseOptionalIntFromMatcher(matcher, "minutes").orElse(0), ChronoUnit.MINUTES)
+ .plusSeconds(RegexUtils.parseOptionalIntFromMatcher(matcher, "seconds").orElse(0))
+ .plusSeconds(30) // Add 30 seconds to round to the nearest minute
+ .truncatedTo(ChronoUnit.MINUTES);
+
+ lines.add(++i, Text.literal(Formatters.DATE_FORMATTER.format(instant)).formatted(Formatting.ITALIC, Formatting.DARK_GRAY));
+ }
+ }
+ }
+
+ @Override
+ public boolean isEnabled() {
+ return SkyblockerConfigManager.get().helpers.enableDateCalculator;
+ }
+}
diff --git a/src/main/java/de/hysky/skyblocker/skyblock/itemlist/recipebook/UpcomingEventsTab.java b/src/main/java/de/hysky/skyblocker/skyblock/itemlist/recipebook/UpcomingEventsTab.java
index ee91d458..e5878c65 100644
--- a/src/main/java/de/hysky/skyblocker/skyblock/itemlist/recipebook/UpcomingEventsTab.java
+++ b/src/main/java/de/hysky/skyblocker/skyblock/itemlist/recipebook/UpcomingEventsTab.java
@@ -1,15 +1,9 @@
package de.hysky.skyblocker.skyblock.itemlist.recipebook;
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.LinkedList;
-import java.util.List;
-
-import org.jetbrains.annotations.Nullable;
-
import de.hysky.skyblocker.mixins.accessors.DrawContextInvoker;
import de.hysky.skyblocker.skyblock.events.EventNotifications;
import de.hysky.skyblocker.skyblock.tabhud.widget.JacobsContestWidget;
+import de.hysky.skyblocker.utils.Formatters;
import de.hysky.skyblocker.utils.SkyblockTime;
import de.hysky.skyblocker.utils.render.RenderHelper;
import de.hysky.skyblocker.utils.scheduler.MessageScheduler;
@@ -24,6 +18,13 @@ import net.minecraft.text.Style;
import net.minecraft.text.Text;
import net.minecraft.util.Colors;
import net.minecraft.util.Formatting;
+import org.jetbrains.annotations.Nullable;
+
+import java.time.Instant;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.LinkedList;
+import java.util.List;
public class UpcomingEventsTab implements RecipeTab {
private static final MinecraftClient CLIENT = MinecraftClient.getInstance();
@@ -97,17 +98,9 @@ public class UpcomingEventsTab implements RecipeTab {
@Override
public void updateSearchResults(String query, FilterOption filterOption, boolean refresh) {}
- private static class EventRenderer {
+ private record EventRenderer(String eventName, LinkedList<EventNotifications.SkyblockEvent> events) {
private static final int HEIGHT = 20;
- private final String eventName;
- private final LinkedList<EventNotifications.SkyblockEvent> events;
-
- private EventRenderer(String eventName, LinkedList<EventNotifications.SkyblockEvent> events) {
- this.eventName = eventName;
- this.events = events;
- }
-
private void render(DrawContext context, int x, int y, int mouseX, int mouseY) {
long time = System.currentTimeMillis() / 1000;
TextRenderer textRenderer = CLIENT.textRenderer;
@@ -121,7 +114,7 @@ public class UpcomingEventsTab implements RecipeTab {
context.drawTextWithShadow(textRenderer, formatted, x, y + textRenderer.fontHeight, -1);
} else {
- Text formatted = Text.literal(" ").append(Text.translatable( "skyblocker.events.tab.endsIn", SkyblockTime.formatTime((int) (events.peekFirst().start() + events.peekFirst().duration() - time)))).formatted(Formatting.GREEN);
+ Text formatted = Text.literal(" ").append(Text.translatable("skyblocker.events.tab.endsIn", SkyblockTime.formatTime((int) (events.peekFirst().start() + events.peekFirst().duration() - time)))).formatted(Formatting.GREEN);
context.drawTextWithShadow(textRenderer, formatted, x, y + textRenderer.fontHeight, -1);
}
@@ -134,15 +127,18 @@ public class UpcomingEventsTab implements RecipeTab {
private List<TooltipComponent> getTooltip() {
List<TooltipComponent> components = new ArrayList<>();
- if (events.peekFirst() == null) return components;
+ EventNotifications.SkyblockEvent event = events.peekFirst();
+ if (event == null) return components;
if (eventName.equals(EventNotifications.JACOBS)) {
- components.add(new JacobsTooltip(events.peekFirst().extras()));
+ components.add(new JacobsTooltip(event.extras()));
}
- if (events.peekFirst().warpCommand() != null) {
+ if (event.warpCommand() != null) {
components.add(TooltipComponent.of(Text.translatable("skyblocker.events.tab.clickToWarp").formatted(Formatting.ITALIC).asOrderedText()));
}
+ components.add(TooltipComponent.of(Text.literal(Formatters.DATE_FORMATTER.format(Instant.ofEpochSecond(event.start()))).formatted(Formatting.ITALIC, Formatting.DARK_GRAY).asOrderedText()));
+
return components;
}
diff --git a/src/main/java/de/hysky/skyblocker/utils/RegexUtils.java b/src/main/java/de/hysky/skyblocker/utils/RegexUtils.java
index 3d6b8842..866d510e 100644
--- a/src/main/java/de/hysky/skyblocker/utils/RegexUtils.java
+++ b/src/main/java/de/hysky/skyblocker/utils/RegexUtils.java
@@ -36,6 +36,18 @@ public class RegexUtils {
return OptionalInt.of(parseIntFromMatcher(matcher, 1));
}
+ public static OptionalInt parseOptionalIntFromMatcher(Matcher matcher, int group) {
+ String s = matcher.group(group);
+ if (s == null) return OptionalInt.empty();
+ return OptionalInt.of(Integer.parseInt(s.replace(",", "")));
+ }
+
+ public static OptionalInt parseOptionalIntFromMatcher(Matcher matcher, String group) {
+ String s = matcher.group(group);
+ if (s == null) return OptionalInt.empty();
+ return OptionalInt.of(Integer.parseInt(s.replace(",", "")));
+ }
+
public static int parseIntFromMatcher(Matcher matcher, int group) {
return Integer.parseInt(matcher.group(group).replace(",", ""));
}