diff options
Diffstat (limited to 'src/main/java')
-rw-r--r-- | src/main/java/de/hysky/skyblocker/config/categories/EventNotificationsCategory.java | 43 | ||||
-rw-r--r-- | src/main/java/de/hysky/skyblocker/skyblock/events/EventNotifications.java | 19 |
2 files changed, 58 insertions, 4 deletions
diff --git a/src/main/java/de/hysky/skyblocker/config/categories/EventNotificationsCategory.java b/src/main/java/de/hysky/skyblocker/config/categories/EventNotificationsCategory.java new file mode 100644 index 00000000..02be92a5 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/config/categories/EventNotificationsCategory.java @@ -0,0 +1,43 @@ +package de.hysky.skyblocker.config.categories; + +import de.hysky.skyblocker.config.SkyblockerConfig; +import de.hysky.skyblocker.skyblock.events.EventNotifications; +import de.hysky.skyblocker.utils.config.DurationController; +import dev.isxander.yacl3.api.ConfigCategory; +import dev.isxander.yacl3.api.ListOption; +import dev.isxander.yacl3.api.OptionDescription; +import dev.isxander.yacl3.api.OptionGroup; +import net.minecraft.text.Text; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class EventNotificationsCategory { + + public static ConfigCategory create(SkyblockerConfig config) { + return ConfigCategory.createBuilder() + .name(Text.literal("Event Notifications")) + .groups(createGroups(config)) + .tooltip(Text.translatable("text.autoconfig.skyblocker.option.general.eventNotifications.@Tooltip[0]"), + Text.translatable("text.autoconfig.skyblocker.option.general.eventNotifications.@Tooltip[1]")) + .build(); + + } + + private static List<OptionGroup> createGroups(SkyblockerConfig config) { + Map<String, List<Integer>> eventsReminderTimes = config.eventNotifications.eventsReminderTimes; + List<OptionGroup> groups = new ArrayList<>(eventsReminderTimes.size()); + for (Map.Entry<String, List<Integer>> entry : eventsReminderTimes.entrySet()) { + groups.add(ListOption.<Integer>createBuilder() + .name(Text.literal(entry.getKey())) + .binding(EventNotifications.DEFAULT_REMINDERS, entry::getValue, entry::setValue) + .controller(option -> () -> new DurationController(option)) // yea + .initial(60) + .collapsed(true) + .build() + ); + } + return groups; + } +} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/events/EventNotifications.java b/src/main/java/de/hysky/skyblocker/skyblock/events/EventNotifications.java index d2f99040..0d2d4d4d 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/events/EventNotifications.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/events/EventNotifications.java @@ -30,6 +30,8 @@ public class EventNotifications { public static final String JACOBS = "Jacob's Farming Contest"; + public static final List<Integer> DEFAULT_REMINDERS = List.of(60, 60*5); + public static final Map<String, ItemStack> eventIcons = new Object2ObjectOpenHashMap<>(); static { @@ -80,7 +82,7 @@ public class EventNotifications { JsonArray jsonElements = SkyblockerMod.GSON.fromJson(Http.sendGetRequest("https://hysky.de/api/calendar"), JsonArray.class); return jsonElements.asList().stream().map(JsonElement::getAsJsonObject).toList(); } catch (Exception e) { - LOGGER.error("[Skyblocker] Failed to download warps list", e); + LOGGER.error("[Skyblocker] Failed to download events list", e); } return List.<JsonObject>of(); }).thenAccept(eventsList -> { @@ -95,14 +97,21 @@ public class EventNotifications { entry.getValue().sort(Comparator.comparingLong(SkyblockEvent::start)); // Sort just in case it's not in order for some reason in API //LOGGER.info("Next {} is at {}", entry.getKey(), entry.getValue().peekFirst()); } - }); + + for (String s : events.keySet()) { + SkyblockerConfigManager.get().eventNotifications.eventsReminderTimes.computeIfAbsent(s, s1 -> DEFAULT_REMINDERS); + } + }).exceptionally(EventNotifications::itBorked); + } + + private static Void itBorked(Throwable throwable) { + LOGGER.error("[Skyblocker] Event loading borked, sowwy :(", throwable); + return null; } private static void timeUpdate() { - List<Integer> reminderTimes = SkyblockerConfigManager.get().general.eventNotifications.reminderTimes; - if (reminderTimes.isEmpty()) return; long newTime = System.currentTimeMillis() / 1000; for (Map.Entry<String, LinkedList<SkyblockEvent>> entry : events.entrySet()) { @@ -115,6 +124,8 @@ public class EventNotifications { if (skyblockEvent == null) continue; } String eventName = entry.getKey(); + List<Integer> reminderTimes = SkyblockerConfigManager.get().eventNotifications.eventsReminderTimes.getOrDefault(eventName, DEFAULT_REMINDERS); + if (reminderTimes.isEmpty()) return; for (Integer reminderTime : reminderTimes) { if (currentTime + reminderTime < skyblockEvent.start() && newTime + reminderTime >= skyblockEvent.start()) { |