diff --git a/runelite-api/src/main/java/net/runelite/api/queries/WallObjectQuery.java b/runelite-api/src/main/java/net/runelite/api/queries/WallObjectQuery.java deleted file mode 100644 index df23822a25..0000000000 --- a/runelite-api/src/main/java/net/runelite/api/queries/WallObjectQuery.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright (c) 2017, Devin French - * 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.queries; - -import net.runelite.api.Client; -import net.runelite.api.Tile; -import net.runelite.api.WallObject; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Objects; - -/** - * Used for getting wall objects in view,deprecated as of existence of Wall object spawn events - * - * @see net.runelite.api.events.WallObjectSpawned - * @see net.runelite.api.events.WallObjectDespawned - * @see net.runelite.api.events.WallObjectChanged - */ -@Deprecated -public class WallObjectQuery extends TileObjectQuery -{ - @Override - public WallObject[] result(Client client) - { - return getWallObjects(client).stream() - .filter(Objects::nonNull) - .filter(predicate) - .distinct() - .toArray(WallObject[]::new); - } - - private Collection getWallObjects(Client client) - { - Collection objects = new ArrayList<>(); - for (Tile tile : getTiles(client)) - { - objects.add(tile.getWallObject()); - } - return objects; - } -} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/mta/MTAPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/mta/MTAPlugin.java index 43cd86ed29..5b7d6bffa1 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/mta/MTAPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/mta/MTAPlugin.java @@ -101,6 +101,8 @@ public class MTAPlugin extends Plugin { eventBus.unregister(room); } + + telekineticRoom.resetRoom(); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/mta/telekinetic/TelekineticRoom.java b/runelite-client/src/main/java/net/runelite/client/plugins/mta/telekinetic/TelekineticRoom.java index 5bcb2e689d..a74376ebff 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/mta/telekinetic/TelekineticRoom.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/mta/telekinetic/TelekineticRoom.java @@ -28,9 +28,11 @@ import java.awt.Color; import java.awt.Graphics2D; import java.awt.Polygon; import java.awt.Rectangle; +import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedList; +import java.util.List; import java.util.Map; import java.util.Queue; import java.util.Set; @@ -52,11 +54,12 @@ import net.runelite.api.coords.Direction; import net.runelite.api.coords.LocalPoint; import net.runelite.api.coords.WorldArea; import net.runelite.api.coords.WorldPoint; +import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameTick; import net.runelite.api.events.NpcDespawned; import net.runelite.api.events.NpcSpawned; +import net.runelite.api.events.WallObjectSpawned; import net.runelite.api.queries.GroundObjectQuery; -import net.runelite.api.queries.WallObjectQuery; import net.runelite.api.widgets.WidgetID; import net.runelite.client.eventbus.Subscribe; import net.runelite.client.plugins.mta.MTAConfig; @@ -71,6 +74,8 @@ public class TelekineticRoom extends MTARoom private final Client client; + private final List telekineticWalls = new ArrayList<>(); + private Stack moves = new Stack<>(); private LocalPoint destination; private WorldPoint location; @@ -85,6 +90,34 @@ public class TelekineticRoom extends MTARoom this.client = client; } + public void resetRoom() + { + telekineticWalls.clear(); + } + + @Subscribe + public void onWallObjectSpawned(WallObjectSpawned event) + { + final WallObject wall = event.getWallObject(); + if (wall.getId() != TELEKINETIC_WALL) + { + return; + } + + telekineticWalls.add(wall); + } + + @Subscribe + public void onGameStateChanged(GameStateChanged event) + { + if (event.getGameState() == GameState.LOADING) + { + // Game objects are nulled when loading new scenes, thus never trigger their respective + // ObjectDespawned events. + resetRoom(); + } + } + @Subscribe public void onGameTick(GameTick event) { @@ -97,15 +130,10 @@ public class TelekineticRoom extends MTARoom return; } - WallObjectQuery qry = new WallObjectQuery() - .idEquals(TELEKINETIC_WALL); - WallObject[] result = qry.result(client); - int length = result.length; - - if (maze == null || length != maze.getWalls()) + if (maze == null || telekineticWalls.size() != maze.getWalls()) { - bounds = getBounds(result); - maze = Maze.fromWalls(length); + bounds = getBounds(telekineticWalls.toArray(new WallObject[0])); + maze = Maze.fromWalls(telekineticWalls.size()); client.clearHintArrow(); } else if (guardian != null)