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 454d508856..9e2266f385 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 @@ -53,6 +53,7 @@ public class WidgetID public static final int EMOTES_GROUP_ID = 216; public static final int RUNE_POUCH_GROUP_ID = 190; public static final int DIARY_GROUP_ID = 259; + public static final int PEST_CONTROL_BOAT_GROUP_ID = 407; public static final int PEST_CONTROL_GROUP_ID = 408; public static final int CLAN_CHAT_GROUP_ID = 7; public static final int MINIMAP_GROUP_ID = 160; @@ -141,8 +142,15 @@ public class WidgetID static final int LOGOUT_BUTTON = 6; } + static class PestControlBoat + { + static final int INFO = 3; + } + static class PestControl { + static final int INFO = 3; + static final int ACTIVITY_BAR = 12; static final int ACTIVITY_PROGRESS = 14; 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 f4ead41b8f..c439bcb525 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 @@ -78,6 +78,8 @@ public enum WidgetInfo DIARY_QUEST_WIDGET_TITLE(WidgetID.DIARY_QUEST_GROUP_ID, WidgetID.Diary.DIARY_TITLE), DIARY_QUEST_WIDGET_TEXT(WidgetID.DIARY_QUEST_GROUP_ID, WidgetID.Diary.DIARY_TEXT), + PEST_CONTROL_BOAT_INFO(WidgetID.PEST_CONTROL_BOAT_GROUP_ID, WidgetID.PestControlBoat.INFO), + PEST_CONTROL_INFO(WidgetID.PEST_CONTROL_GROUP_ID, WidgetID.PestControl.INFO), PEST_CONTROL_PURPLE_SHIELD(WidgetID.PEST_CONTROL_GROUP_ID, WidgetID.PestControl.PURPLE_SHIELD), PEST_CONTROL_BLUE_SHIELD(WidgetID.PEST_CONTROL_GROUP_ID, WidgetID.PestControl.BLUE_SHIELD), PEST_CONTROL_YELLOW_SHIELD(WidgetID.PEST_CONTROL_GROUP_ID, WidgetID.PestControl.YELLOW_SHIELD), diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayManager.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayManager.java index ab0f9f7ba7..3cec82c9d8 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayManager.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayManager.java @@ -84,7 +84,7 @@ public class OverlayManager }; /** - * Sorted set of overlays + * Insertion-order sorted set of overlays * All access to this must be guarded by a lock on this OverlayManager */ @Getter(AccessLevel.PACKAGE) @@ -108,7 +108,7 @@ public class OverlayManager } /** - * Gets all of the overlays on a layer + * Gets all of the overlays on a layer sorted by priority and position * * @param layer the layer * @return An immutable list of all of the overlays on that layer @@ -211,8 +211,6 @@ public class OverlayManager private synchronized void rebuildOverlayLayers() { - overlays.sort(OVERLAY_COMPARATOR); - for (OverlayLayer l : OverlayLayer.values()) { overlayLayers.put(l, new ArrayList<>()); @@ -235,7 +233,11 @@ public class OverlayManager overlayLayers.get(layer).add(overlay); } - overlayLayers.forEach((layer, value) -> overlayLayers.put(layer, Collections.unmodifiableList(value))); + overlayLayers.forEach((layer, value) -> + { + value.sort(OVERLAY_COMPARATOR); + overlayLayers.put(layer, Collections.unmodifiableList(value)); + }); } private void loadOverlay(final Overlay overlay) diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/WidgetOverlay.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/WidgetOverlay.java index 4037261150..4d7f3d6f9c 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/WidgetOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/WidgetOverlay.java @@ -28,9 +28,9 @@ import com.google.common.collect.ImmutableMap; import java.awt.Dimension; import java.awt.Graphics2D; import java.awt.Rectangle; +import java.util.Collection; import java.util.Map; import java.util.Objects; -import java.util.Set; import java.util.stream.Collectors; import net.runelite.api.Client; import net.runelite.api.widgets.Widget; @@ -40,15 +40,19 @@ public class WidgetOverlay extends Overlay { private static final Map WIDGETS = ImmutableMap .builder() - .put(WidgetInfo.FOSSIL_ISLAND_OXYGENBAR, OverlayPosition.TOP_LEFT) - .put(WidgetInfo.EXPERIENCE_TRACKER_WIDGET, OverlayPosition.TOP_RIGHT) .put(WidgetInfo.RESIZABLE_MINIMAP_WIDGET, OverlayPosition.CANVAS_TOP_RIGHT) .put(WidgetInfo.RESIZABLE_MINIMAP_STONES_WIDGET, OverlayPosition.CANVAS_TOP_RIGHT) + .put(WidgetInfo.FOSSIL_ISLAND_OXYGENBAR, OverlayPosition.TOP_LEFT) + .put(WidgetInfo.EXPERIENCE_TRACKER_WIDGET, OverlayPosition.TOP_RIGHT) + .put(WidgetInfo.PEST_CONTROL_BOAT_INFO, OverlayPosition.TOP_LEFT) + .put(WidgetInfo.PEST_CONTROL_INFO, OverlayPosition.TOP_LEFT) .build(); - public static Set createOverlays(final Client client) + public static Collection createOverlays(final Client client) { - return WIDGETS.entrySet().stream().map(w -> new WidgetOverlay(client, w.getKey(), w.getValue())).collect(Collectors.toSet()); + return WIDGETS.entrySet().stream() + .map(w -> new WidgetOverlay(client, w.getKey(), w.getValue())) + .collect(Collectors.toList()); } private final Client client;