From d27f5f9a76eeeaa07265fc2b535d771149475ecb Mon Sep 17 00:00:00 2001 From: Jordan Atwood Date: Tue, 22 Jun 2021 10:18:55 -0700 Subject: [PATCH 1/4] api: Add getMirrorPoint to WorldPoint API --- .../net/runelite/api/coords/WorldPoint.java | 33 ++++++++++ .../runelite/api/coords/WorldPointTest.java | 62 +++++++++++++++++++ .../plugins/cluescrolls/ClueScrollPlugin.java | 34 +--------- .../cluescrolls/clues/HotColdClue.java | 2 +- .../cluescrolls/ClueScrollPluginTest.java | 32 ---------- 5 files changed, 97 insertions(+), 66 deletions(-) create mode 100644 runelite-api/src/test/java/net/runelite/api/coords/WorldPointTest.java diff --git a/runelite-api/src/main/java/net/runelite/api/coords/WorldPoint.java b/runelite-api/src/main/java/net/runelite/api/coords/WorldPoint.java index 780c7c4494..6dfff72cd3 100644 --- a/runelite-api/src/main/java/net/runelite/api/coords/WorldPoint.java +++ b/runelite-api/src/main/java/net/runelite/api/coords/WorldPoint.java @@ -44,6 +44,14 @@ import net.runelite.api.Perspective; @Value public class WorldPoint { + private static final int[] REGION_MIRRORS = { + // Prifddinas + 12894, 8755, + 12895, 8756, + 13150, 9011, + 13151, 9012 + }; + /** * X-axis coordinate. */ @@ -373,4 +381,29 @@ public class WorldPoint { return position & (REGION_SIZE - 1); } + + /** + * Translate a coordinate either between overworld and real, or real and overworld + * + * @param worldPoint + * @param toOverworld whether to convert to overworld coordinates, or to real coordinates + * @return + */ + public static WorldPoint getMirrorPoint(WorldPoint worldPoint, boolean toOverworld) + { + int region = worldPoint.getRegionID(); + for (int i = 0; i < REGION_MIRRORS.length; i += 2) + { + int real = REGION_MIRRORS[i]; + int overworld = REGION_MIRRORS[i + 1]; + + // Test against what we are converting from + if (region == (toOverworld ? real : overworld)) + { + return fromRegion(toOverworld ? overworld : real, + worldPoint.getRegionX(), worldPoint.getRegionY(), worldPoint.getPlane()); + } + } + return worldPoint; + } } diff --git a/runelite-api/src/test/java/net/runelite/api/coords/WorldPointTest.java b/runelite-api/src/test/java/net/runelite/api/coords/WorldPointTest.java new file mode 100644 index 0000000000..397da68ca0 --- /dev/null +++ b/runelite-api/src/test/java/net/runelite/api/coords/WorldPointTest.java @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2021 Jordan Atwood + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.api.coords; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotEquals; +import org.junit.Test; + +public class WorldPointTest +{ + @Test + public void getGetMirrorPoint() + { + WorldPoint point, converted; + + // Zalcano's entrance portal + point = new WorldPoint(3282, 6058, 0); + converted = WorldPoint.getMirrorPoint(point, true); + assertNotEquals(point, converted); + + // Elven Crystal Chest, which is upstairs + point = new WorldPoint(3273, 6082, 2); + converted = WorldPoint.getMirrorPoint(point, true); + assertNotEquals(point, converted); + + // Around the area of the Elite coordinate clue + point = new WorldPoint(2185, 3280, 0); + // To overworld + converted = WorldPoint.getMirrorPoint(point, true); + assertEquals(point, converted); + // To real + converted = WorldPoint.getMirrorPoint(point, false); + assertNotEquals(point, converted); + + // Brugsen Bursen, Grand Exchange + point = new WorldPoint(3165, 3477, 0); + converted = WorldPoint.getMirrorPoint(point, false); + assertEquals(point, converted); + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java index 81aa28c38e..7cb988874c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java @@ -142,13 +142,6 @@ public class ClueScrollPlugin extends Plugin private static final Color HIGHLIGHT_BORDER_COLOR = Color.ORANGE; private static final Color HIGHLIGHT_HOVER_BORDER_COLOR = HIGHLIGHT_BORDER_COLOR.darker(); private static final Color HIGHLIGHT_FILL_COLOR = new Color(0, 255, 0, 20); - private static final int[] REGION_MIRRORS = { - // Prifddinas - 12894, 8755, - 12895, 8756, - 13150, 9011, - 13151, 9012 - }; private static final String CLUE_TAG_NAME = "clue"; @Getter @@ -850,7 +843,7 @@ public class ClueScrollPlugin extends Plugin WorldPoint coordinate = coordinatesToWorldPoint(degX, minX, degY, minY); // Convert from overworld to real - WorldPoint mirrorPoint = getMirrorPoint(coordinate, false); + WorldPoint mirrorPoint = WorldPoint.getMirrorPoint(coordinate, false); // Use mirror point as mirrorLocation if there is one return new CoordinateClue(text, coordinate, coordinate == mirrorPoint ? null : mirrorPoint); } @@ -1132,31 +1125,6 @@ public class ClueScrollPlugin extends Plugin ); } - /** - * Translate a coordinate either between overworld and real, or real and overworld - * - * @param worldPoint - * @param toOverworld whether to convert to overworld coordinates, or to real coordinates - * @return - */ - public static WorldPoint getMirrorPoint(WorldPoint worldPoint, boolean toOverworld) - { - int region = worldPoint.getRegionID(); - for (int i = 0; i < REGION_MIRRORS.length; i += 2) - { - int real = REGION_MIRRORS[i]; - int overworld = REGION_MIRRORS[i + 1]; - - // Test against what we are converting from - if (region == (toOverworld ? real : overworld)) - { - return WorldPoint.fromRegion(toOverworld ? overworld : real, - worldPoint.getRegionX(), worldPoint.getRegionY(), worldPoint.getPlane()); - } - } - return worldPoint; - } - private boolean testClueTag(int itemId) { ClueScroll c = clue; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/HotColdClue.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/HotColdClue.java index 24ab3264bf..aa2e397f99 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/HotColdClue.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/HotColdClue.java @@ -307,7 +307,7 @@ public class HotColdClue extends ClueScroll implements LocationClueScroll, Locat } // Convert from real to overworld - final WorldPoint localWorld = ClueScrollPlugin.getMirrorPoint(plugin.getClient().getLocalPlayer().getWorldLocation(), true); + final WorldPoint localWorld = WorldPoint.getMirrorPoint(plugin.getClient().getLocalPlayer().getWorldLocation(), true); if (localWorld == null) { diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/cluescrolls/ClueScrollPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/cluescrolls/ClueScrollPluginTest.java index 59daa49af7..668e7fe837 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/cluescrolls/ClueScrollPluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/cluescrolls/ClueScrollPluginTest.java @@ -45,8 +45,6 @@ import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.banktags.TagManager; import net.runelite.client.plugins.cluescrolls.clues.hotcold.HotColdLocation; import net.runelite.client.ui.overlay.OverlayManager; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import org.junit.Before; @@ -96,36 +94,6 @@ public class ClueScrollPluginTest Guice.createInjector(BoundFieldModule.of(this)).injectMembers(this); } - @Test - public void getGetMirrorPoint() - { - WorldPoint point, converted; - - // Zalcano's entrance portal - point = new WorldPoint(3282, 6058, 0); - converted = ClueScrollPlugin.getMirrorPoint(point, true); - assertNotEquals(point, converted); - - // Elven Crystal Chest, which is upstairs - point = new WorldPoint(3273, 6082, 2); - converted = ClueScrollPlugin.getMirrorPoint(point, true); - assertNotEquals(point, converted); - - // Around the area of the Elite coordinate clue - point = new WorldPoint(2185, 3280, 0); - // To overworld - converted = ClueScrollPlugin.getMirrorPoint(point, true); - assertEquals(point, converted); - // To real - converted = ClueScrollPlugin.getMirrorPoint(point, false); - assertNotEquals(point, converted); - - // Brugsen Bursen, Grand Exchange - point = new WorldPoint(3165, 3477, 0); - converted = ClueScrollPlugin.getMirrorPoint(point, false); - assertEquals(point, converted); - } - @Test public void testLocationHintArrowCleared() { From 763db213a28eeef341cba53f5a063cc30046faca Mon Sep 17 00:00:00 2001 From: Jordan Atwood Date: Tue, 22 Jun 2021 10:21:15 -0700 Subject: [PATCH 2/4] skybox: Show surface color while in Prifddinas --- .../java/net/runelite/client/plugins/skybox/SkyboxPlugin.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/skybox/SkyboxPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/skybox/SkyboxPlugin.java index ecb90c6dab..0d07857421 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/skybox/SkyboxPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/skybox/SkyboxPlugin.java @@ -34,6 +34,7 @@ import net.runelite.api.Constants; import net.runelite.api.GameState; import net.runelite.api.Player; import net.runelite.api.coords.LocalPoint; +import net.runelite.api.coords.WorldPoint; import net.runelite.api.events.BeforeRender; import net.runelite.api.events.GameStateChanged; import net.runelite.client.config.ConfigManager; @@ -108,7 +109,7 @@ public class SkyboxPlugin extends Plugin return; } - Color overrideColor = player.getWorldLocation().getY() < Constants.OVERWORLD_MAX_Y + Color overrideColor = WorldPoint.getMirrorPoint(player.getWorldLocation(), true).getY() < Constants.OVERWORLD_MAX_Y ? config.customOverworldColor() : config.customOtherColor(); if (overrideColor != null) { From fc183c13afb91e7715e75e9d0205e380e409dccf Mon Sep 17 00:00:00 2001 From: Adam Date: Sun, 19 Sep 2021 15:44:49 -0400 Subject: [PATCH 3/4] xp tracker overlay: treat counter=off progressbar=off as hidden If the xptracker is shown, but both counter and progress bar set to off, the xp tracker layer is not actually hidden but only has hidden children. This causes the overlay renderer to layout things around the invisible xptracker. Avoid this by checking the vars for the xptracker to see if it is hidden or not. --- .../runelite/client/ui/overlay/WidgetOverlay.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) 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 9435086d7c..6cdd78248c 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 @@ -204,6 +204,20 @@ public class WidgetOverlay extends Overlay this.overlayManager = overlayManager; } + @Override + public Dimension render(Graphics2D graphics) + { + // The xptracker component layer isn't hidden if the counter and process bar are both configured "Off", + // it just has its children hidden. + if (client.getVar(Varbits.EXPERIENCE_TRACKER_COUNTER) == 30 // Off + && client.getVar(Varbits.EXPERIENCE_TRACKER_PROGRESS_BAR) == 0) // Off + { + return null; + } + + return super.render(graphics); + } + /** * Get the overlay position of the xptracker based on the configured location in-game. * From c5d4c757f111abd07ca3bb188786bfbe42b91de5 Mon Sep 17 00:00:00 2001 From: Christian Bull <56417349+Christian-Bull@users.noreply.github.com> Date: Sun, 19 Sep 2021 16:44:08 -0400 Subject: [PATCH 4/4] agility shortcut: include grapple rocks in observatory shortcut Co-authored-by: christianbull-maxx --- .../src/main/java/net/runelite/client/game/AgilityShortcut.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runelite-client/src/main/java/net/runelite/client/game/AgilityShortcut.java b/runelite-client/src/main/java/net/runelite/client/game/AgilityShortcut.java index 2bf8b26d53..1b13fdae2c 100644 --- a/runelite-client/src/main/java/net/runelite/client/game/AgilityShortcut.java +++ b/runelite-client/src/main/java/net/runelite/client/game/AgilityShortcut.java @@ -100,7 +100,7 @@ public enum AgilityShortcut COAL_TRUCKS_LOG_BALANCE(20, "Log Balance", new WorldPoint(2598, 3475, 0), LOG_BALANCE_23274), GRAND_EXCHANGE_UNDERWALL_TUNNEL(21, "Underwall Tunnel", new WorldPoint(3139, 3515, 0), UNDERWALL_TUNNEL_16529, UNDERWALL_TUNNEL_16530), BRIMHAVEN_DUNGEON_PIPE(22, "Pipe Squeeze", new WorldPoint(2654, 9569, 0), PIPE_21728), - OBSERVATORY_SCALE_CLIFF(23, "Grapple Rocks", new WorldPoint(2447, 3155, 0), NULL_31849), + OBSERVATORY_SCALE_CLIFF(23, "Grapple Rocks", new WorldPoint(2447, 3155, 0), NULL_31849, NULL_31852), EAGLES_PEAK_ROCK_CLIMB(25, "Rock Climb", new WorldPoint(2320, 3499, 0), ROCKS_19849), FALADOR_UNDERWALL_TUNNEL(26, "Underwall Tunnel", new WorldPoint(2947, 3313, 0), UNDERWALL_TUNNEL, UNDERWALL_TUNNEL_16528), KOUREND_CATACOMBS_PILLAR_JUMP_NORTH(28, "Pillar Jump", new WorldPoint(1613, 10071, 0)),