From 62d99c1d3e37ae00eaa0065788e1dbf88d00aa2e Mon Sep 17 00:00:00 2001 From: Elliott Date: Tue, 23 Apr 2019 17:38:13 -0400 Subject: [PATCH] fishing plugin: add trawler timer Co-authored-by: Adam --- .../net/runelite/api/widgets/WidgetID.java | 1 + .../net/runelite/api/widgets/WidgetInfo.java | 2 + .../client/plugins/fishing/FishingConfig.java | 11 +++ .../client/plugins/fishing/FishingPlugin.java | 74 ++++++++++++++++++- 4 files changed, 87 insertions(+), 1 deletion(-) diff --git a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java index ffd20e7eb9..bb10df74ad 100644 --- a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java +++ b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java @@ -121,6 +121,7 @@ public class WidgetID public static final int MINIGAME_TAB_ID = 76; public static final int SPELLBOOK_GROUP_ID = 218; public static final int PVP_GROUP_ID = 90; + public static final int FISHING_TRAWLER_GROUP_ID = 366; public static final int ZEAH_MESS_HALL_GROUP_ID = 235; public static final int KOUREND_FAVOUR_GROUP_ID = 246; public static final int LOOTING_BAG_GROUP_ID = 81; diff --git a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java index 579007c2f4..1bff89b327 100644 --- a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java +++ b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java @@ -420,6 +420,8 @@ public enum WidgetInfo EXPERIENCE_TRACKER_WIDGET(WidgetID.EXPERIENCE_TRACKER_GROUP_ID, WidgetID.ExperienceTracker.WIDGET), EXPERIENCE_TRACKER_BOTTOM_BAR(WidgetID.EXPERIENCE_TRACKER_GROUP_ID, WidgetID.ExperienceTracker.BOTTOM_BAR), + FISHING_TRAWLER_TIMER(WidgetID.FISHING_TRAWLER_GROUP_ID, 37), + TITHE_FARM(WidgetID.TITHE_FARM_GROUP_ID, 1), BARROWS_INFO(WidgetID.BARROWS_GROUP_ID, 0), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingConfig.java index 17cb508a12..01d7454e4a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingConfig.java @@ -118,4 +118,15 @@ public interface FishingConfig extends Config { return true; } + + @ConfigItem( + position = 8, + keyName = "trawlerTimer", + name = "Trawler timer in MM:SS", + description = "Trawler Timer will display a more accurate timer in MM:SS format." + ) + default boolean trawlerTimer() + { + return true; + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingPlugin.java index b9144a300f..d27886c1aa 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingPlugin.java @@ -57,6 +57,10 @@ import net.runelite.api.events.ItemContainerChanged; import net.runelite.api.events.NpcDespawned; import net.runelite.api.events.NpcSpawned; import net.runelite.api.events.VarbitChanged; +import net.runelite.api.events.WidgetLoaded; +import net.runelite.api.widgets.Widget; +import net.runelite.api.widgets.WidgetID; +import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.Notifier; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.Subscribe; @@ -78,9 +82,11 @@ public class FishingPlugin extends Plugin { private static final int TRAWLER_SHIP_REGION_NORMAL = 7499; private static final int TRAWLER_SHIP_REGION_SINKING = 8011; - + private static final int TRAWLER_TIME_LIMIT_IN_SECONDS = 614; private static final int TRAWLER_ACTIVITY_THRESHOLD = Math.round(0.15f * 255); + private Instant trawlerStartTime; + @Getter(AccessLevel.PACKAGE) private final FishingSession session = new FishingSession(); @@ -142,6 +148,7 @@ public class FishingPlugin extends Plugin minnowSpots.clear(); trawlerNotificationSent = false; currentSpot = null; + trawlerStartTime = null; } @Subscribe @@ -296,6 +303,11 @@ public class FishingPlugin extends Plugin } } } + + if (config.trawlerTimer()) + { + updateTrawlerTimer(); + } } @Subscribe @@ -351,6 +363,66 @@ public class FishingPlugin extends Plugin } } + @Subscribe + public void onWidgetLoaded(WidgetLoaded event) + { + if (event.getGroupId() == WidgetID.FISHING_TRAWLER_GROUP_ID) + { + trawlerStartTime = Instant.now(); + } + } + + /** + * Changes the Fishing Trawler timer widget from minutes to minutes and seconds + */ + private void updateTrawlerTimer() + { + if (trawlerStartTime == null) + { + return; + } + + int regionID = client.getLocalPlayer().getWorldLocation().getRegionID(); + if (regionID != TRAWLER_SHIP_REGION_NORMAL && regionID != TRAWLER_SHIP_REGION_SINKING) + { + log.debug("Trawler session ended"); + return; + } + + Widget trawlerTimerWidget = client.getWidget(WidgetInfo.FISHING_TRAWLER_TIMER); + if (trawlerTimerWidget == null) + { + return; + } + + long timeLeft = TRAWLER_TIME_LIMIT_IN_SECONDS - Duration.between(trawlerStartTime, Instant.now()).getSeconds(); + int minutes = (int) timeLeft / 60; + int seconds = (int) timeLeft % 60; + + final StringBuilder trawlerText = new StringBuilder(); + trawlerText.append("Time Left: "); + + if (minutes > 0) + { + trawlerText.append(minutes); + } + else + { + trawlerText.append("00"); + } + + trawlerText.append(':'); + + if (seconds < 10) + { + trawlerText.append("0"); + } + + trawlerText.append(seconds); + + trawlerTimerWidget.setText(trawlerText.toString()); + } + private void inverseSortSpotDistanceFromPlayer() { final LocalPoint cameraPoint = new LocalPoint(client.getCameraX(), client.getCameraY());