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 607f7a11e1..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,17 +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;