From 701df6731f46e64282341677d6434a75b0abd268 Mon Sep 17 00:00:00 2001 From: Devin Date: Thu, 15 Jun 2017 02:33:05 -0700 Subject: [PATCH] Add object queries --- .../api/queries/DecorativeObjectQuery.java | 52 +++++++++++ .../runelite/api/queries/GameObjectQuery.java | 57 ++++++++++++ .../api/queries/GroundObjectQuery.java | 52 +++++++++++ .../runelite/api/queries/TileObjectQuery.java | 92 +++++++++++++++++++ .../runelite/api/queries/WallObjectQuery.java | 52 +++++++++++ 5 files changed, 305 insertions(+) create mode 100644 runelite-api/src/main/java/net/runelite/api/queries/DecorativeObjectQuery.java create mode 100644 runelite-api/src/main/java/net/runelite/api/queries/GameObjectQuery.java create mode 100644 runelite-api/src/main/java/net/runelite/api/queries/GroundObjectQuery.java create mode 100644 runelite-api/src/main/java/net/runelite/api/queries/TileObjectQuery.java create mode 100644 runelite-api/src/main/java/net/runelite/api/queries/WallObjectQuery.java diff --git a/runelite-api/src/main/java/net/runelite/api/queries/DecorativeObjectQuery.java b/runelite-api/src/main/java/net/runelite/api/queries/DecorativeObjectQuery.java new file mode 100644 index 0000000000..61e0e93c11 --- /dev/null +++ b/runelite-api/src/main/java/net/runelite/api/queries/DecorativeObjectQuery.java @@ -0,0 +1,52 @@ +/* + * 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.DecorativeObject; +import net.runelite.api.Tile; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Objects; + +public class DecorativeObjectQuery extends TileObjectQuery +{ + @Override + protected DecorativeObject[] result(Client client) + { + return getDecorativeObjects(client).stream().filter(Objects::nonNull).filter(predicate).toArray(DecorativeObject[]::new); + } + + private Collection getDecorativeObjects(Client client) + { + Collection objects = new ArrayList<>(); + for (Tile tile : getTiles(client)) + { + objects.add(tile.getDecorativeObject()); + } + return objects; + } +} diff --git a/runelite-api/src/main/java/net/runelite/api/queries/GameObjectQuery.java b/runelite-api/src/main/java/net/runelite/api/queries/GameObjectQuery.java new file mode 100644 index 0000000000..5c6e9592d0 --- /dev/null +++ b/runelite-api/src/main/java/net/runelite/api/queries/GameObjectQuery.java @@ -0,0 +1,57 @@ +/* + * 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.GameObject; +import net.runelite.api.Tile; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Objects; + +public class GameObjectQuery extends TileObjectQuery +{ + @Override + protected GameObject[] result(Client client) + { + return getGameObjects(client).stream().filter(Objects::nonNull).filter(predicate).toArray(GameObject[]::new); + } + + private Collection getGameObjects(Client client) + { + Collection objects = new ArrayList<>(); + for (Tile tile : getTiles(client)) + { + GameObject[] gameObjects = tile.getGameObjects(); + if (gameObjects != null) + { + objects.addAll(Arrays.asList(gameObjects)); + } + } + return objects; + } +} diff --git a/runelite-api/src/main/java/net/runelite/api/queries/GroundObjectQuery.java b/runelite-api/src/main/java/net/runelite/api/queries/GroundObjectQuery.java new file mode 100644 index 0000000000..e11974e52e --- /dev/null +++ b/runelite-api/src/main/java/net/runelite/api/queries/GroundObjectQuery.java @@ -0,0 +1,52 @@ +/* + * 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.GroundObject; +import net.runelite.api.Tile; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Objects; + +public class GroundObjectQuery extends TileObjectQuery +{ + @Override + protected GroundObject[] result(Client client) + { + return getGroundObjects(client).stream().filter(Objects::nonNull).filter(predicate).toArray(GroundObject[]::new); + } + + private Collection getGroundObjects(Client client) + { + Collection objects = new ArrayList<>(); + for (Tile tile : getTiles(client)) + { + objects.add(tile.getGroundObject()); + } + return objects; + } +} diff --git a/runelite-api/src/main/java/net/runelite/api/queries/TileObjectQuery.java b/runelite-api/src/main/java/net/runelite/api/queries/TileObjectQuery.java new file mode 100644 index 0000000000..743fa5581d --- /dev/null +++ b/runelite-api/src/main/java/net/runelite/api/queries/TileObjectQuery.java @@ -0,0 +1,92 @@ +/* + * 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.Point; +import net.runelite.api.Query; +import net.runelite.api.Region; +import net.runelite.api.Tile; +import net.runelite.api.TileObject; + +import java.util.ArrayList; +import java.util.List; + +public abstract class TileObjectQuery extends Query +{ + private static final int REGION_SIZE = 104; + + protected List getTiles(Client client) + { + List tilesList = new ArrayList<>(); + Region region = client.getRegion(); + Tile[][][] tiles = region.getTiles(); + int z = client.getPlane(); + for (int x = 0; x < REGION_SIZE; ++x) + { + for (int y = 0; y < REGION_SIZE; ++y) + { + Tile tile = tiles[z][x][y]; + if (tile == null) + { + continue; + } + tilesList.add(tile); + } + } + return tilesList; + } + + @SuppressWarnings("unchecked") + public QueryType idEquals(int... ids) + { + predicate = and(object -> + { + for (int id : ids) + { + if (object.getId() == id) + { + return true; + } + } + return false; + }); + return (QueryType) this; + } + + @SuppressWarnings("unchecked") + public QueryType atWorldLocation(Point location) + { + predicate = and(object -> object.getWorldLocation().equals(location)); + return (QueryType) this; + } + + @SuppressWarnings("unchecked") + public QueryType atLocalLocation(Point location) + { + predicate = and(object -> object.getLocalLocation().equals(location)); + return (QueryType) this; + } +} 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 new file mode 100644 index 0000000000..64fe914157 --- /dev/null +++ b/runelite-api/src/main/java/net/runelite/api/queries/WallObjectQuery.java @@ -0,0 +1,52 @@ +/* + * 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; + +public class WallObjectQuery extends TileObjectQuery +{ + @Override + protected WallObject[] result(Client client) + { + return getWallObjects(client).stream().filter(Objects::nonNull).filter(predicate).toArray(WallObject[]::new); + } + + private Collection getWallObjects(Client client) + { + Collection objects = new ArrayList<>(); + for (Tile tile : getTiles(client)) + { + objects.add(tile.getWallObject()); + } + return objects; + } +}