From daaf1c19af88a666de6fee499e78615b8b66b9aa Mon Sep 17 00:00:00 2001 From: Jory Anderson Date: Fri, 23 Jan 2026 05:01:12 -0800 Subject: [PATCH 1/4] rename HideStopNavigatingDuringTrials -> LockToHelmDuringTrials --- .../java/com/duckblade/osrs/sailing/SailingConfig.java | 8 ++++---- ...atingDuringTrials.java => LockToHelmDuringTrials.java} | 4 ++-- .../com/duckblade/osrs/sailing/module/SailingModule.java | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) rename src/main/java/com/duckblade/osrs/sailing/features/mes/{HideStopNavigatingDuringTrials.java => LockToHelmDuringTrials.java} (89%) diff --git a/src/main/java/com/duckblade/osrs/sailing/SailingConfig.java b/src/main/java/com/duckblade/osrs/sailing/SailingConfig.java index 25968c9f..e45be51e 100644 --- a/src/main/java/com/duckblade/osrs/sailing/SailingConfig.java +++ b/src/main/java/com/duckblade/osrs/sailing/SailingConfig.java @@ -444,13 +444,13 @@ default boolean prioritizeCargoHold() } @ConfigItem( - keyName = "hideStopNavigatingDuringTrials", - name = "Deprio Stop-navigating During BT", - description = "Deprioritizes the 'Stop-navigating' and 'Escape' option while you are in a Barracuda Trial.", + keyName = "lockToHelmDuringTrials", + name = "Lock to Helm During Trials", + description = "Deprioritizes non-movement facilities while sailing through Barracuda Trials.", section = SECTION_MES, position = 3 ) - default boolean hideStopNavigatingDuringTrials() + default boolean lockToHelmDuringTrials() { return true; } diff --git a/src/main/java/com/duckblade/osrs/sailing/features/mes/HideStopNavigatingDuringTrials.java b/src/main/java/com/duckblade/osrs/sailing/features/mes/LockToHelmDuringTrials.java similarity index 89% rename from src/main/java/com/duckblade/osrs/sailing/features/mes/HideStopNavigatingDuringTrials.java rename to src/main/java/com/duckblade/osrs/sailing/features/mes/LockToHelmDuringTrials.java index 79315bf8..42c80bf4 100644 --- a/src/main/java/com/duckblade/osrs/sailing/features/mes/HideStopNavigatingDuringTrials.java +++ b/src/main/java/com/duckblade/osrs/sailing/features/mes/LockToHelmDuringTrials.java @@ -14,7 +14,7 @@ @Slf4j @Singleton @RequiredArgsConstructor(onConstructor_ = @Inject) -public class HideStopNavigatingDuringTrials implements PluginLifecycleComponent +public class LockToHelmDuringTrials implements PluginLifecycleComponent { private static final String OPTION_STOP_NAVIGATING = "Stop-navigating"; @@ -25,7 +25,7 @@ public class HideStopNavigatingDuringTrials implements PluginLifecycleComponent @Override public boolean isEnabled(SailingConfig config) { - return config.hideStopNavigatingDuringTrials(); + return config.lockToHelmDuringTrials(); } @Subscribe diff --git a/src/main/java/com/duckblade/osrs/sailing/module/SailingModule.java b/src/main/java/com/duckblade/osrs/sailing/module/SailingModule.java index f60bbf5b..4de7ceea 100644 --- a/src/main/java/com/duckblade/osrs/sailing/module/SailingModule.java +++ b/src/main/java/com/duckblade/osrs/sailing/module/SailingModule.java @@ -25,7 +25,7 @@ import com.duckblade.osrs.sailing.features.facilities.LuffOverlay; import com.duckblade.osrs.sailing.features.facilities.SpeedBoostInfoBox; import com.duckblade.osrs.sailing.features.mes.DeprioSailsOffHelm; -import com.duckblade.osrs.sailing.features.mes.HideStopNavigatingDuringTrials; +import com.duckblade.osrs.sailing.features.mes.LockToHelmDuringTrials; import com.duckblade.osrs.sailing.features.mes.PrioritizeCargoHold; import com.duckblade.osrs.sailing.features.navigation.LightningCloudsOverlay; import com.duckblade.osrs.sailing.features.navigation.LowHPNotification; @@ -83,8 +83,8 @@ Set lifecycleComponents( DeprioSailsOffHelm deprioSailsOffHelm, GiantClam giantClam, HidePortalTransitions hidePortalTransitions, - HideStopNavigatingDuringTrials hideStopNavigatingDuringTrials, JubblyJiveHelper jubblyJiveHelper, + LockToHelmDuringTrials lockToHelmDuringTrials, LightningCloudsOverlay lightningCloudsOverlay, LostCargoHighlighter lostCargoHighlighter, LostShipment lostShipment, @@ -127,8 +127,8 @@ Set lifecycleComponents( .add(deprioSailsOffHelm) .add(giantClam) .add(hidePortalTransitions) - .add(hideStopNavigatingDuringTrials) .add(jubblyJiveHelper) + .add(lockToHelmDuringTrials) .add(lightningCloudsOverlay) .add(lostCargoHighlighter) .add(lostShipment) From c991425f561430a877696d02effc74672748ca4e Mon Sep 17 00:00:00 2001 From: Jory Anderson Date: Fri, 23 Jan 2026 05:06:48 -0800 Subject: [PATCH 2/4] implement LockToHelmDuringTrials --- README.md | 1 + .../features/mes/LockToHelmDuringTrials.java | 35 +++++++++++++------ 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 3243bdad..8ba433b6 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,7 @@ Sailing quality-of-life for charting, navigation, facilities, and more. ## Menu Entry Swaps - Sails At Helm Only: Deprioritizes sail interaction options when you’re not at the helm. - Prioritize Cargo Hold: Prioritizes clicking the Cargo Hold over nearby objects to make it easier to open. +- Lock to Helm During Trials: Deprioritizes non-movement facilities while sailing through Barracuda Trials. ## Sea Charting - Highlight Sea Charting Locations: Highlights nearby chartable locations. diff --git a/src/main/java/com/duckblade/osrs/sailing/features/mes/LockToHelmDuringTrials.java b/src/main/java/com/duckblade/osrs/sailing/features/mes/LockToHelmDuringTrials.java index 42c80bf4..de842c38 100644 --- a/src/main/java/com/duckblade/osrs/sailing/features/mes/LockToHelmDuringTrials.java +++ b/src/main/java/com/duckblade/osrs/sailing/features/mes/LockToHelmDuringTrials.java @@ -2,12 +2,16 @@ import com.duckblade.osrs.sailing.SailingConfig; import com.duckblade.osrs.sailing.module.PluginLifecycleComponent; +import java.util.Arrays; +import java.util.Comparator; import javax.inject.Inject; import javax.inject.Singleton; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import net.runelite.api.Client; -import net.runelite.api.events.MenuEntryAdded; +import net.runelite.api.Menu; +import net.runelite.api.MenuEntry; +import net.runelite.api.events.PostMenuSort; import net.runelite.api.gameval.VarbitID; import net.runelite.client.eventbus.Subscribe; @@ -17,8 +21,16 @@ public class LockToHelmDuringTrials implements PluginLifecycleComponent { - private static final String OPTION_STOP_NAVIGATING = "Stop-navigating"; - private static final String OPTION_ESCAPE = "Escape"; + private static final int LOCKED_TO_HELM = 3; + + private static final String[] FACILITY_SUBSTRINGS = new String[] {"Anchor", "Helm", "Keg", "Range", "cargo hold", "cannon", + "focus", "net", "pearl", "salvaging hook", "station", "spreader", "stone"}; + + private static final Comparator MENU_ENTRY_COMPARATOR = + Comparator.comparing((MenuEntry me) -> + me.getTarget().startsWith("") && + Arrays.stream(FACILITY_SUBSTRINGS).anyMatch(facilitySubstring -> me.getTarget().contains(facilitySubstring))) + .reversed(); private final Client client; @@ -29,18 +41,19 @@ public boolean isEnabled(SailingConfig config) } @Subscribe - public void onMenuEntryAdded(MenuEntryAdded e) + public void onPostMenuSort(PostMenuSort e) { - if (client.getVarbitValue(VarbitID.SAILING_BT_IN_TRIAL) == 0) + if (client.getVarbitValue(VarbitID.SAILING_BOAT_FACILITY_LOCKEDIN) != LOCKED_TO_HELM || + client.getVarbitValue(VarbitID.SAILING_BT_IN_TRIAL) == 0) { return; } - if (OPTION_STOP_NAVIGATING.equals(e.getOption()) || - OPTION_ESCAPE.equals(e.getOption())) - { - // Push the Stop-navigating option down instead of removing it - e.getMenuEntry().setDeprioritized(true); - } + Menu menu = client.getMenu(); + menu.setMenuEntries( + Arrays.stream(menu.getMenuEntries()) + .sorted(MENU_ENTRY_COMPARATOR) + .toArray(MenuEntry[]::new) + ); } } From ed52bb58f645ce272d70c223183d90161262fc26 Mon Sep 17 00:00:00 2001 From: Jory Anderson Date: Sun, 1 Mar 2026 02:35:56 -0800 Subject: [PATCH 3/4] Reworked LockToHelmDuringTrials to be more in-line with my standalone plugin. Moved feature to the barracudatrials package Updated the config to use a Set rather than a simple boolean, giving finer control. Updated the default config to include crystal extractor, that way users aren't surprised when they can no longer click it after the plugin updates. Added util function and model enums --- .../duckblade/osrs/sailing/SailingConfig.java | 43 ++++---- .../locktohelm/LockToHelmDuringTrials.java | 102 ++++++++++++++++++ .../locktohelm/LockToHelmFilter.java | 39 +++++++ .../features/mes/LockToHelmDuringTrials.java | 59 ---------- .../sailing/features/util/SailingUtil.java | 8 ++ .../sailing/model/BarracudaTrialTier.java | 47 ++++++++ .../osrs/sailing/model/WindFacilityTier.java | 46 ++++++++ .../osrs/sailing/module/SailingModule.java | 6 +- 8 files changed, 269 insertions(+), 81 deletions(-) create mode 100644 src/main/java/com/duckblade/osrs/sailing/features/barracudatrials/locktohelm/LockToHelmDuringTrials.java create mode 100644 src/main/java/com/duckblade/osrs/sailing/features/barracudatrials/locktohelm/LockToHelmFilter.java delete mode 100644 src/main/java/com/duckblade/osrs/sailing/features/mes/LockToHelmDuringTrials.java create mode 100644 src/main/java/com/duckblade/osrs/sailing/model/BarracudaTrialTier.java create mode 100644 src/main/java/com/duckblade/osrs/sailing/model/WindFacilityTier.java diff --git a/src/main/java/com/duckblade/osrs/sailing/SailingConfig.java b/src/main/java/com/duckblade/osrs/sailing/SailingConfig.java index e45be51e..0a455ad6 100644 --- a/src/main/java/com/duckblade/osrs/sailing/SailingConfig.java +++ b/src/main/java/com/duckblade/osrs/sailing/SailingConfig.java @@ -1,6 +1,9 @@ package com.duckblade.osrs.sailing; import java.awt.Color; +import java.util.Set; + +import com.duckblade.osrs.sailing.features.barracudatrials.locktohelm.LockToHelmFilter; import net.runelite.client.config.Alpha; import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; @@ -443,18 +446,6 @@ default boolean prioritizeCargoHold() return true; } - @ConfigItem( - keyName = "lockToHelmDuringTrials", - name = "Lock to Helm During Trials", - description = "Deprioritizes non-movement facilities while sailing through Barracuda Trials.", - section = SECTION_MES, - position = 3 - ) - default boolean lockToHelmDuringTrials() - { - return true; - } - enum ShowChartsMode { NONE, @@ -587,12 +578,26 @@ default boolean chartingMermaidSolver() return true; } + String LOCK_PLAYER_TO_HELM = "lockToHelmDuringTrials"; + @ConfigItem( + keyName = LOCK_PLAYER_TO_HELM, + name = "Lock to Helm", + description = "Hides actions unrelated to the trial or selected movement facilities. " + + "Selecting \"Disabled\" turns this feature off.", + section = SECTION_BARRACUDA_TRIALS, + position = 1 + ) + default Set lockToHelmFilter() + { + return Set.of(LockToHelmFilter.WIND_GALE_CATCHER, LockToHelmFilter.CRYSTAL_EXTRACTOR); + } + @ConfigItem( keyName = "barracudaHighlightLostCrates", name = "Highlight Crates", description = "Highlight lost crates that need to be collected during Barracuda Trials.", section = SECTION_BARRACUDA_TRIALS, - position = 1 + position = 2 ) default boolean barracudaHighlightLostCrates() { @@ -604,7 +609,7 @@ default boolean barracudaHighlightLostCrates() name = "Crate Colour", description = "The colour to highlight lost crates.", section = SECTION_BARRACUDA_TRIALS, - position = 2 + position = 3 ) @Alpha default Color barracudaHighlightLostCratesColour() @@ -617,7 +622,7 @@ default Color barracudaHighlightLostCratesColour() name = "Hide Portal Transitions", description = "Hide the transition animation when taking a portal in The Gwenith Glide.", section = SECTION_BARRACUDA_TRIALS, - position = 3 + position = 4 ) default boolean barracudaHidePortalTransitions() { @@ -629,7 +634,7 @@ default boolean barracudaHidePortalTransitions() name = "TT: Show Rum Target", description = "Show whether you have rum/need to drop-off rum in the Tempor Tantrum course.", section = SECTION_BARRACUDA_TRIALS, - position = 4 + position = 5 ) default boolean barracudaTemporTantrumShowRumTarget() { @@ -641,7 +646,7 @@ default boolean barracudaTemporTantrumShowRumTarget() name = "JJ: Show Toady Targets", description = "Show which outcrops need toadies thrown at them in the Jubbly Jive course.", section = SECTION_BARRACUDA_TRIALS, - position = 5 + position = 6 ) default boolean barracudaJubblyJiveShowToadyTargets() { @@ -653,7 +658,7 @@ default boolean barracudaJubblyJiveShowToadyTargets() name = "Splits Chat Message", description = "Post Barracuda Trials split times to chat.", section = SECTION_BARRACUDA_TRIALS, - position = 6 + position = 7 ) default boolean barracudaSplitsChatMessage() { @@ -665,7 +670,7 @@ default boolean barracudaSplitsChatMessage() name = "Splits Overlay Panel", description = "Show an overlay panel with Barracuda Trials split times.", section = SECTION_BARRACUDA_TRIALS, - position = 7 + position = 8 ) default boolean barracudaSplitsOverlayPanel() { diff --git a/src/main/java/com/duckblade/osrs/sailing/features/barracudatrials/locktohelm/LockToHelmDuringTrials.java b/src/main/java/com/duckblade/osrs/sailing/features/barracudatrials/locktohelm/LockToHelmDuringTrials.java new file mode 100644 index 00000000..e230fd65 --- /dev/null +++ b/src/main/java/com/duckblade/osrs/sailing/features/barracudatrials/locktohelm/LockToHelmDuringTrials.java @@ -0,0 +1,102 @@ +package com.duckblade.osrs.sailing.features.barracudatrials.locktohelm; + +import com.duckblade.osrs.sailing.SailingConfig; +import com.duckblade.osrs.sailing.features.util.SailingUtil; +import com.duckblade.osrs.sailing.model.BarracudaTrialTier; +import com.duckblade.osrs.sailing.model.SailTier; +import com.duckblade.osrs.sailing.model.WindFacilityTier; +import com.duckblade.osrs.sailing.module.PluginLifecycleComponent; +import lombok.extern.slf4j.Slf4j; +import net.runelite.api.Client; +import net.runelite.api.MenuAction; +import net.runelite.api.events.MenuEntryAdded; +import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; +import java.util.Arrays; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import javax.inject.Inject; +import javax.inject.Singleton; + +@Slf4j +@Singleton +public class LockToHelmDuringTrials + implements PluginLifecycleComponent +{ + + private final Client client; + private final SailingConfig config; + private Set clickableObjects; + private Set lockToHelmFilters; + + @Inject + public LockToHelmDuringTrials(Client client, SailingConfig config) + { + this.client = client; + this.config = config; + this.lockToHelmFilters = config.lockToHelmFilter(); + this.clickableObjects = reloadClickableObjects(); + } + + private Set reloadClickableObjects() + { + return Stream.of( + Arrays.stream(BarracudaTrialTier.values()) + .map(BarracudaTrialTier::getGameObjectIds) + .flatMapToInt(Arrays::stream), + Arrays.stream(SailTier.values()) + .map(SailTier::getGameObjectIds) + .flatMapToInt(Arrays::stream), + Arrays.stream(WindFacilityTier.getWindFacilityObjectIDs(WindFacilityTier.WIND_CATCHER, WindFacilityTier.GALE_CATCHER)) + .filter(s -> lockToHelmFilters.contains(LockToHelmFilter.WIND_GALE_CATCHER)), + Arrays.stream(WindFacilityTier.CRYSTAL_EXTRACTOR.getGameObjectIds()) + .filter(s -> lockToHelmFilters.contains(LockToHelmFilter.CRYSTAL_EXTRACTOR)) + ) + .flatMapToInt(s -> s) + .boxed() + .collect(Collectors.toUnmodifiableSet()); + } + + @Subscribe + public void onConfigChanged(ConfigChanged e) + { + if (isEnabled(config) && SailingConfig.LOCK_PLAYER_TO_HELM.equals(e.getKey())) + { + log.info("{}: {} -> {}", e.getKey(), e.getOldValue(), e.getNewValue()); + lockToHelmFilters = config.lockToHelmFilter(); + clickableObjects = reloadClickableObjects(); + } + } + + @Subscribe(priority = -99) + public void onMenuEntryAdded(MenuEntryAdded e) + { + if (!SailingUtil.isInBarracudaTrialAndAtHelm(client)) + { + return; + } + + if (e.getMenuEntry().getType() != MenuAction.SET_HEADING) + { + if (!clickableObjects.contains(e.getIdentifier())) + { + e.getMenuEntry().setDeprioritized(true); + } + } + } + + @Override + public boolean isEnabled(SailingConfig config) + { + return !config.lockToHelmFilter().contains(LockToHelmFilter.DISABLED); + } + + @Override + public void startUp() + { + lockToHelmFilters = config.lockToHelmFilter(); + clickableObjects = reloadClickableObjects(); + log.info("{}: {}", this.getClass().getSimpleName(), lockToHelmFilters); + } +} diff --git a/src/main/java/com/duckblade/osrs/sailing/features/barracudatrials/locktohelm/LockToHelmFilter.java b/src/main/java/com/duckblade/osrs/sailing/features/barracudatrials/locktohelm/LockToHelmFilter.java new file mode 100644 index 00000000..1695a4f9 --- /dev/null +++ b/src/main/java/com/duckblade/osrs/sailing/features/barracudatrials/locktohelm/LockToHelmFilter.java @@ -0,0 +1,39 @@ +package com.duckblade.osrs.sailing.features.barracudatrials.locktohelm; + +import com.duckblade.osrs.sailing.model.WindFacilityTier; +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +public enum LockToHelmFilter +{ + DISABLED(new int[] {}) + { + @Override + public final String toString() + { + return "Disabled"; + } + }, + + WIND_GALE_CATCHER(WindFacilityTier.getWindFacilityObjectIDs(WindFacilityTier.WIND_CATCHER, WindFacilityTier.GALE_CATCHER)) + { + @Override + public final String toString() + { + return "Wind/Gale Catcher"; + } + }, + + CRYSTAL_EXTRACTOR(WindFacilityTier.CRYSTAL_EXTRACTOR.getGameObjectIds()) + { + @Override + public String toString() + { + return "Crystal Extractor"; + } + }; + + @Getter + private final int[] facility; +} \ No newline at end of file diff --git a/src/main/java/com/duckblade/osrs/sailing/features/mes/LockToHelmDuringTrials.java b/src/main/java/com/duckblade/osrs/sailing/features/mes/LockToHelmDuringTrials.java deleted file mode 100644 index de842c38..00000000 --- a/src/main/java/com/duckblade/osrs/sailing/features/mes/LockToHelmDuringTrials.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.duckblade.osrs.sailing.features.mes; - -import com.duckblade.osrs.sailing.SailingConfig; -import com.duckblade.osrs.sailing.module.PluginLifecycleComponent; -import java.util.Arrays; -import java.util.Comparator; -import javax.inject.Inject; -import javax.inject.Singleton; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import net.runelite.api.Client; -import net.runelite.api.Menu; -import net.runelite.api.MenuEntry; -import net.runelite.api.events.PostMenuSort; -import net.runelite.api.gameval.VarbitID; -import net.runelite.client.eventbus.Subscribe; - -@Slf4j -@Singleton -@RequiredArgsConstructor(onConstructor_ = @Inject) -public class LockToHelmDuringTrials implements PluginLifecycleComponent -{ - - private static final int LOCKED_TO_HELM = 3; - - private static final String[] FACILITY_SUBSTRINGS = new String[] {"Anchor", "Helm", "Keg", "Range", "cargo hold", "cannon", - "focus", "net", "pearl", "salvaging hook", "station", "spreader", "stone"}; - - private static final Comparator MENU_ENTRY_COMPARATOR = - Comparator.comparing((MenuEntry me) -> - me.getTarget().startsWith("") && - Arrays.stream(FACILITY_SUBSTRINGS).anyMatch(facilitySubstring -> me.getTarget().contains(facilitySubstring))) - .reversed(); - - private final Client client; - - @Override - public boolean isEnabled(SailingConfig config) - { - return config.lockToHelmDuringTrials(); - } - - @Subscribe - public void onPostMenuSort(PostMenuSort e) - { - if (client.getVarbitValue(VarbitID.SAILING_BOAT_FACILITY_LOCKEDIN) != LOCKED_TO_HELM || - client.getVarbitValue(VarbitID.SAILING_BT_IN_TRIAL) == 0) - { - return; - } - - Menu menu = client.getMenu(); - menu.setMenuEntries( - Arrays.stream(menu.getMenuEntries()) - .sorted(MENU_ENTRY_COMPARATOR) - .toArray(MenuEntry[]::new) - ); - } -} diff --git a/src/main/java/com/duckblade/osrs/sailing/features/util/SailingUtil.java b/src/main/java/com/duckblade/osrs/sailing/features/util/SailingUtil.java index b86f7982..f62c9629 100644 --- a/src/main/java/com/duckblade/osrs/sailing/features/util/SailingUtil.java +++ b/src/main/java/com/duckblade/osrs/sailing/features/util/SailingUtil.java @@ -25,6 +25,7 @@ public class SailingUtil 3 // 3? confirm sloop? ); public static final int ACCOUNT_TYPE_UIM = 2; + public static final int SAILING_BOAT_FACILITY_LOCKEDIN_HELM = 3; @SuppressWarnings("BooleanMethodIsAlwaysInverted") public static boolean isSailing(Client client) @@ -33,6 +34,13 @@ public static boolean isSailing(Client client) !client.getLocalPlayer().getWorldView().isTopLevel(); } + public static boolean isInBarracudaTrialAndAtHelm(Client client) + { + return isSailing(client) + && client.getVarbitValue(VarbitID.SAILING_BT_IN_TRIAL) > 0 + && client.getVarbitValue(VarbitID.SAILING_BOAT_FACILITY_LOCKEDIN) == SAILING_BOAT_FACILITY_LOCKEDIN_HELM; + } + public static boolean isUim(Client client) { return client.getVarbitValue(VarbitID.IRONMAN) == ACCOUNT_TYPE_UIM; diff --git a/src/main/java/com/duckblade/osrs/sailing/model/BarracudaTrialTier.java b/src/main/java/com/duckblade/osrs/sailing/model/BarracudaTrialTier.java new file mode 100644 index 00000000..625db19b --- /dev/null +++ b/src/main/java/com/duckblade/osrs/sailing/model/BarracudaTrialTier.java @@ -0,0 +1,47 @@ +package com.duckblade.osrs.sailing.model; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import net.runelite.api.gameval.NpcID; +import net.runelite.api.gameval.ObjectID; + +@RequiredArgsConstructor +@Getter +public enum BarracudaTrialTier +{ + + TEMPOR_TANTRUM( + new int[]{ + ObjectID.SAILING_BT_SCOREBOARD_TEMPOR_TANTRUM, + ObjectID.SAILING_BT_TEMPOR_TANTRUM_NORTH_LOC_PARENT, + ObjectID.SAILING_BT_TEMPOR_TANTRUM_SOUTH_LOC_PARENT, + } + ), + JUBBLY_JIVE( + new int[]{ + ObjectID.SAILING_BT_SCOREBOARD_JUBBLY_JIVE, + ObjectID.SAILING_BT_JUBBLY_JIVE_TOAD_SUPPLIES_PARENT, + ObjectID.SAILING_BT_JUBBLY_JIVE_PILLAR_CLICKBOX_0_PARENT, + ObjectID.SAILING_BT_JUBBLY_JIVE_PILLAR_CLICKBOX_1_PARENT, + ObjectID.SAILING_BT_JUBBLY_JIVE_PILLAR_CLICKBOX_2_PARENT, + ObjectID.SAILING_BT_JUBBLY_JIVE_PILLAR_CLICKBOX_3_PARENT, + ObjectID.SAILING_BT_JUBBLY_JIVE_PILLAR_CLICKBOX_4_PARENT, + ObjectID.SAILING_BT_JUBBLY_JIVE_PILLAR_CLICKBOX_5_PARENT, + ObjectID.SAILING_BT_JUBBLY_JIVE_PILLAR_CLICKBOX_6_PARENT, + ObjectID.SAILING_BT_JUBBLY_JIVE_PILLAR_CLICKBOX_7_PARENT, + } + ), + GWENITH_GLIDE( + new int[]{ + ObjectID.SAILING_BT_SCOREBOARD_GWENITH_GLIDE, + ObjectID.SAILING_BOAT_STEERING_KANDARIN_1X3_CRYSTALLISED, + ObjectID.SAILING_BOAT_STEERING_KANDARIN_2X5_CRYSTALLISED, + ObjectID.SAILING_BOAT_STEERING_KANDARIN_3X8_CRYSTALLISED, + NpcID.SAILING_BT_GWENITH_GLIDE_CRYSTAL_STEERING_HEADBAR_NPC + } + ), + ; + + private final int[] gameObjectIds; + +} diff --git a/src/main/java/com/duckblade/osrs/sailing/model/WindFacilityTier.java b/src/main/java/com/duckblade/osrs/sailing/model/WindFacilityTier.java new file mode 100644 index 00000000..00cb641c --- /dev/null +++ b/src/main/java/com/duckblade/osrs/sailing/model/WindFacilityTier.java @@ -0,0 +1,46 @@ +package com.duckblade.osrs.sailing.model; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import net.runelite.api.gameval.ObjectID; +import org.apache.commons.lang3.ArrayUtils; + +import java.util.Arrays; + +@RequiredArgsConstructor +@Getter +public enum WindFacilityTier +{ + + WIND_CATCHER( + new int[]{ + ObjectID.SAILING_WIND_CATCHER_ACTIVATED, + ObjectID.SAILING_WIND_CATCHER_DEACTIVATED + } + ), + + GALE_CATCHER( + new int[]{ + ObjectID.SAILING_GALE_CATCHER_ACTIVATED, + ObjectID.SAILING_GALE_CATCHER_DEACTIVATED + } + ), + + CRYSTAL_EXTRACTOR( + new int[]{ + ObjectID.SAILING_CRYSTAL_EXTRACTOR_ACTIVATED, + ObjectID.SAILING_CRYSTAL_EXTRACTOR_DEACTIVATED + } + ); + + private final int[] gameObjectIds; + + public static int[] getWindFacilityObjectIDs(WindFacilityTier... facilities) + { + return Arrays.stream(facilities) + .map(WindFacilityTier::getGameObjectIds) + .flatMapToInt(Arrays::stream) + .toArray(); + } + +} diff --git a/src/main/java/com/duckblade/osrs/sailing/module/SailingModule.java b/src/main/java/com/duckblade/osrs/sailing/module/SailingModule.java index 4de7ceea..a884aa66 100644 --- a/src/main/java/com/duckblade/osrs/sailing/module/SailingModule.java +++ b/src/main/java/com/duckblade/osrs/sailing/module/SailingModule.java @@ -5,6 +5,7 @@ import com.duckblade.osrs.sailing.features.barracudatrials.JubblyJiveHelper; import com.duckblade.osrs.sailing.features.barracudatrials.LostCargoHighlighter; import com.duckblade.osrs.sailing.features.barracudatrials.TemporTantrumHelper; +import com.duckblade.osrs.sailing.features.barracudatrials.locktohelm.LockToHelmDuringTrials; import com.duckblade.osrs.sailing.features.barracudatrials.splits.BarracudaSplitsChatMessage; import com.duckblade.osrs.sailing.features.barracudatrials.splits.BarracudaSplitsFileWriter; import com.duckblade.osrs.sailing.features.barracudatrials.splits.BarracudaSplitsOverlayPanel; @@ -25,7 +26,6 @@ import com.duckblade.osrs.sailing.features.facilities.LuffOverlay; import com.duckblade.osrs.sailing.features.facilities.SpeedBoostInfoBox; import com.duckblade.osrs.sailing.features.mes.DeprioSailsOffHelm; -import com.duckblade.osrs.sailing.features.mes.LockToHelmDuringTrials; import com.duckblade.osrs.sailing.features.mes.PrioritizeCargoHold; import com.duckblade.osrs.sailing.features.navigation.LightningCloudsOverlay; import com.duckblade.osrs.sailing.features.navigation.LowHPNotification; @@ -84,8 +84,8 @@ Set lifecycleComponents( GiantClam giantClam, HidePortalTransitions hidePortalTransitions, JubblyJiveHelper jubblyJiveHelper, - LockToHelmDuringTrials lockToHelmDuringTrials, LightningCloudsOverlay lightningCloudsOverlay, + LockToHelmDuringTrials lockToHelmDuringTrials, LostCargoHighlighter lostCargoHighlighter, LostShipment lostShipment, LowHPNotification lowHPNotification, @@ -128,8 +128,8 @@ Set lifecycleComponents( .add(giantClam) .add(hidePortalTransitions) .add(jubblyJiveHelper) - .add(lockToHelmDuringTrials) .add(lightningCloudsOverlay) + .add(lockToHelmDuringTrials) .add(lostCargoHighlighter) .add(lostShipment) .add(lowHPNotification) From 61c2ea452f53369b80264a25bf9da51aba78b8f5 Mon Sep 17 00:00:00 2001 From: Jory Anderson Date: Sun, 1 Mar 2026 02:38:31 -0800 Subject: [PATCH 4/4] Removed unused import --- .../java/com/duckblade/osrs/sailing/model/WindFacilityTier.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/com/duckblade/osrs/sailing/model/WindFacilityTier.java b/src/main/java/com/duckblade/osrs/sailing/model/WindFacilityTier.java index 00cb641c..5d5088f4 100644 --- a/src/main/java/com/duckblade/osrs/sailing/model/WindFacilityTier.java +++ b/src/main/java/com/duckblade/osrs/sailing/model/WindFacilityTier.java @@ -3,8 +3,6 @@ import lombok.Getter; import lombok.RequiredArgsConstructor; import net.runelite.api.gameval.ObjectID; -import org.apache.commons.lang3.ArrayUtils; - import java.util.Arrays; @RequiredArgsConstructor