diff --git a/README.md b/README.md index 190d7e51be..4c05bba357 100644 --- a/README.md +++ b/README.md @@ -13,8 +13,9 @@ If you have any questions please join our IRC channel on [irc.rizon.net #runelit - http-service - Service for api.runelite.net - model-viewer - RS Model, NPC/Object, and terrain viewer - runelite-api - runelite api, use this for plugin development -- runescape-api - mappings correspond to these interfaces, runelite-api wraps this -- runescape-client-injector - builds the injection from the vanilla client and the mappings +- runelite-mixins - Mixins which are injected into the injected client's classes +- runescape-api - mappings correspond to these interfaces, runelite-api is a subset of this +- runescape-client-injector - builds the injected client from the vanilla client and the mappings - runescape-client - decompiled RuneScape client, contains mappings ## Usage diff --git a/pom.xml b/pom.xml index 0030dff412..e16d57627f 100644 --- a/pom.xml +++ b/pom.xml @@ -101,6 +101,7 @@ model-viewer-rsmv runelite-api runelite-client + runelite-mixins runescape-api runescape-client runescape-client-injector diff --git a/runelite-api/pom.xml b/runelite-api/pom.xml index c2a44a8eb9..3865ebad53 100644 --- a/runelite-api/pom.xml +++ b/runelite-api/pom.xml @@ -37,12 +37,6 @@ Runelite API - - net.runelite.rs - api - ${project.version} - - junit junit diff --git a/runelite-api/src/main/java/net/runelite/api/Actor.java b/runelite-api/src/main/java/net/runelite/api/Actor.java index 88dff72d94..1d6ba09f47 100644 --- a/runelite-api/src/main/java/net/runelite/api/Actor.java +++ b/runelite-api/src/main/java/net/runelite/api/Actor.java @@ -27,172 +27,34 @@ package net.runelite.api; import java.awt.Graphics2D; import java.awt.Polygon; import java.awt.image.BufferedImage; -import java.util.Objects; -import net.runelite.rs.api.CombatInfo1; -import net.runelite.rs.api.CombatInfo2; -import net.runelite.rs.api.CombatInfoList; -import net.runelite.rs.api.CombatInfoListHolder; -import net.runelite.rs.api.Node; -public abstract class Actor extends Renderable +public interface Actor extends Renderable { + int getCombatLevel(); - private final Client client; - private net.runelite.rs.api.Actor actor; + String getName(); - public Actor(Client client, net.runelite.rs.api.Actor actor) - { - super(actor); + Actor getInteracting(); - this.client = client; - this.actor = actor; - } + int getHealthRatio(); - @Override - public int hashCode() - { - int hash = 5; - hash = 47 * hash + Objects.hashCode(this.client); - return hash; - } + int getHealth(); - @Override - public boolean equals(Object obj) - { - if (this == obj) - { - return true; - } - if (obj == null) - { - return false; - } - if (getClass() != obj.getClass()) - { - return false; - } - final Actor other = (Actor) obj; - if (!Objects.equals(this.client, other.client)) - { - return false; - } - return true; - } + Point getLocalLocation(); - public abstract int getCombatLevel(); + int getOrientation(); - public abstract String getName(); + int getAnimation(); - public Actor getInteracting() - { - int i = actor.getInteracting(); - if (i == -1) - { - return null; - } + int getGraphic(); - if (i < 0x8000) - { - return client.getNpc(i); - } + int getModelHeight(); - i -= 0x8000; - return client.getPlayer(i); - } + Polygon getCanvasTilePoly(); - public int getHealthRatio() - { - CombatInfoList combatInfoList = actor.getCombatInfoList(); - if (combatInfoList != null) - { - Node node = combatInfoList.getNode(); - Node next = node.getNext(); - if (next instanceof CombatInfoListHolder) - { - CombatInfoListHolder combatInfoListWrapper = (CombatInfoListHolder) next; - CombatInfoList combatInfoList1 = combatInfoListWrapper.getCombatInfo1(); + Point getCanvasTextLocation(Graphics2D graphics, String text, int zOffset); - Node node2 = combatInfoList1.getNode(); - Node next2 = node2.getNext(); - if (next2 instanceof CombatInfo1) - { - CombatInfo1 combatInfo = (CombatInfo1) next2; - return combatInfo.getHealthRatio(); - } - } - } - return -1; - } + Point getCanvasImageLocation(Graphics2D graphics, BufferedImage image, int zOffset); - public int getHealth() - { - CombatInfoList combatInfoList = actor.getCombatInfoList(); - if (combatInfoList != null) - { - Node node = combatInfoList.getNode(); - Node next = node.getNext(); - if (next instanceof CombatInfoListHolder) - { - CombatInfoListHolder combatInfoListWrapper = (CombatInfoListHolder) next; - CombatInfo2 cf = combatInfoListWrapper.getCombatInfo2(); - return cf.getHealthScale(); - } - } - return -1; - } - - public Point getLocalLocation() - { - return new Point(getX(), getY()); - } - - private int getX() - { - return actor.getX(); - } - - private int getY() - { - return actor.getY(); - } - - public int getOrientation() - { - return actor.getOrientation(); - } - - public int getAnimation() - { - return actor.getAnimation(); - } - - public int getGraphic() - { - return actor.getGraphic(); - } - - public int getModelHeight() - { - return actor.getModelHeight(); - } - - public Polygon getCanvasTilePoly() - { - return Perspective.getCanvasTilePoly(client, getLocalLocation()); - } - - public Point getCanvasTextLocation(Graphics2D graphics, String text, int zOffset) - { - return Perspective.getCanvasTextLocation(client, graphics, getLocalLocation(), text, zOffset); - } - - public Point getCanvasImageLocation(Graphics2D graphics, BufferedImage image, int zOffset) - { - return Perspective.getCanvasImageLocation(client, graphics, getLocalLocation(), image, zOffset); - } - - public Point getMinimapLocation() - { - return Perspective.worldToMiniMap(client, getX(), getY()); - } + Point getMinimapLocation(); } diff --git a/runelite-api/src/main/java/net/runelite/api/Client.java b/runelite-api/src/main/java/net/runelite/api/Client.java index 5008c40646..29f8dae718 100644 --- a/runelite-api/src/main/java/net/runelite/api/Client.java +++ b/runelite-api/src/main/java/net/runelite/api/Client.java @@ -25,396 +25,122 @@ package net.runelite.api; import java.awt.Canvas; -import java.util.Arrays; -import java.util.Objects; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; -import net.runelite.rs.api.ItemComposition; -public class Client +public interface Client { - private final net.runelite.rs.api.Client client; - - public Client(net.runelite.rs.api.Client client) - { - this.client = client; - } - - public Player getLocalPlayer() - { - if (client.getLocalPlayer() == null) - { - return null; - } - - return new Player(this, client.getLocalPlayer()); - } - - public NPC[] getNpcs() - { - return Arrays.stream(client.getCachedNPCs()) - .map(npc -> npc != null ? new NPC(this, npc) : null) - .toArray(size -> new NPC[size]); - } - - NPC getNpc(int idx) - { - net.runelite.rs.api.NPC npc = client.getCachedNPCs()[idx]; - return npc != null ? new NPC(this, npc) : null; - } - - public Player[] getPlayers() - { - return Arrays.stream(client.getCachedPlayers()) - .map(player -> player != null ? new Player(this, player) : null) - .toArray(size -> new Player[size]); - } - - Player getPlayer(int idx) - { - net.runelite.rs.api.Player player = client.getCachedPlayers()[idx]; - return player != null ? new Player(this, player) : null; - } - - @SuppressWarnings("unchecked") - public T[] runQuery(Query query) - { - return (T[]) query.result(this); - } - - public int getBoostedSkillLevel(Skill skill) - { - int[] boostedLevels = client.getBoostedSkillLevels(); - return boostedLevels[skill.ordinal()]; - } - - public int getRealSkillLevel(Skill skill) - { - int[] realLevels = client.getRealSkillLevels(); - return realLevels[skill.ordinal()]; - } - - public void sendGameMessage(String message) - { - client.sendGameMessage(99, "", message); - } - - public GameState getGameState() - { - return GameState.of(client.getGameState()); - } - - public String getUsername() - { - return client.getUsername(); - } - - public void setUsername(String name) - { - client.setUsername(name); - } - - public Canvas getCanvas() - { - return client.getCanvas(); - } - - public int getFPS() - { - return client.getFPS(); - } - - public int getClientHeight() - { - return client.getCanvas().getHeight(); - } - - public int getClientWidth() - { - return client.getCanvas().getWidth(); - } - - public int getCameraX() - { - return client.getCameraX(); - } - - public int getCameraY() - { - return client.getCameraY(); - } - - public int getCameraZ() - { - return client.getCameraZ(); - } - - public int getCameraPitch() - { - return client.getCameraPitch(); - } - - public int getCameraYaw() - { - return client.getCameraYaw(); - } - - public int getViewportHeight() - { - return client.getViewportHeight(); - } - - public int getViewportWidth() - { - return client.getViewportWidth(); - } - - public int getScale() - { - return client.getScale(); - } - - public Point getMouseCanvasPosition() - { - return new Point(client.getMouseX(), client.getMouseY()); - } - - public int[][][] getTileHeights() - { - return client.getTileHeights(); - } - - public byte[][][] getTileSettings() - { - return client.getTileSettings(); - } - - public int getPlane() - { - return client.getPlane(); - } - - public Region getRegion() - { - return new Region(this, client.getRegion()); - } - - public ItemComposition getItemDefinition(int id) - { - return client.getItemDefinition(id); - } - - public int getBaseX() - { - return client.getBaseX(); - } - - public int getBaseY() - { - return client.getBaseY(); - } - - public Widget[] getWidgetRoots() - { - int topGroup = client.getWidgetRoot(); - return Arrays.stream(client.getWidgets()[topGroup]) - .filter(Objects::nonNull) - .filter(w -> w.getParentId() == -1) // is a root - .map(w -> new Widget(this, w)) - .toArray(Widget[]::new); - } - - public Widget getWidget(WidgetInfo widget) - { - int groupId = widget.getGroupId(); - int childId = widget.getChildId(); - - return getWidget(groupId, childId); - } - - public Widget[] getGroup(int groupId) - { - net.runelite.rs.api.Widget[][] widgets = client.getWidgets(); - - if (widgets == null || groupId < 0 || groupId >= widgets.length) - { - return null; - } - - return Arrays.stream(widgets[groupId]) - .filter(Objects::nonNull) - .map(w -> new Widget(this, w)) - .toArray(Widget[]::new); - } - - public Widget getWidget(int groupId, int childId) - { - net.runelite.rs.api.Widget[][] widgets = client.getWidgets(); - - if (widgets == null || widgets.length <= groupId) - { - return null; - } - - net.runelite.rs.api.Widget[] childWidgets = widgets[groupId]; - if (childWidgets == null || childWidgets.length <= childId) - { - return null; - } - - return new Widget(this, childWidgets[childId]); - } - - public int[] getWidgetPositionsX() - { - return client.getWidgetPositionsX(); - } - - public int[] getWidgetPositionsY() - { - return client.getWidgetPositionsY(); - } - - public String[] getPlayerOptions() - { - return client.getPlayerOptions(); - } - - public boolean[] getPlayerOptionsPriorities() - { - return client.getPlayerOptionsPriorities(); - } - - public int[] getPlayerMenuType() - { - return client.getPlayerMenuTypes(); - } - - public String[] getMenuOptions() - { - return client.getMenuOptions(); - } - - public String[] getMenuTargets() - { - return client.getMenuTargets(); - } - - public int getMenuCount() - { - return client.getMenuOptionCount(); - } - - public boolean isMenuOpen() - { - return client.isMenuOpen(); - } - - public int getMapAngle() - { - return client.getMapAngle(); - } - - public boolean isResized() - { - return client.isResized(); - } - - public int getRevision() - { - return client.getRevision(); - } - - public int[] getMapRegions() - { - return client.getMapRegions(); - } - - public int[][] getXteaKeys() - { - return client.getXteaKeys(); - } - - public int getSetting(Varbits varbit) - { - int[] settings = client.getSettings(); - int value = settings[varbit.getIndex()]; - return varbit.get(value); - } - - public XHashTable getComponentTable() - { - return new XHashTable(client.getComponentTable()); - } - - public int[] getSettings() - { - return client.getSettings(); - } - - public int[] getWidgetSettings() - { - return client.getWidgetSettings(); - } - - public boolean isPrayerActive(Prayer prayer) - { - return getSetting(prayer.getVarbit()) == 1; - } - - public int getClanChatCount() - { - return client.getClanChatCount(); - } - - /** - * Returns the local player's current experience in the specified - * {@link Skill}. - * - * @param skill the {@link Skill} to retrieve the experience for - * @return the local player's current experience in the specified - * {@link Skill}, or -1 if the {@link Skill} isn't valid - */ - public int getSkillExperience(Skill skill) - { - int[] experiences = client.getSkillExperiences(); - - if (skill == Skill.OVERALL) - { - int totalExperience = 0; - - for (int experience : experiences) - { - totalExperience += experience; - } - - return totalExperience; - } - - int idx = skill.ordinal(); - - // I'm not certain exactly how needed this is, but if the Skill enum is updated in the future - // to hold something else that's not reported it'll save us from an ArrayIndexOutOfBoundsException. - if (idx >= experiences.length) - { - return -1; - } - - return experiences[idx]; - } - - public int getGameDrawingMode() - { - return client.getGameDrawingMode(); - } - - public void setGameDrawingMode(int gameDrawingMode) - { - client.setGameDrawingMode(gameDrawingMode); - } - - public void refreshChat() - { - client.setChatCycle(client.getCycleCntr()); - } + Player getPlayer(int idx); + + Player[] getCachedPlayers(); + + NPC getNpc(int idx); + + NPC[] getCachedNPCs(); + + int getBoostedSkillLevel(Skill skill); + + int getRealSkillLevel(Skill skill); + + void sendGameMessage(String message); + + GameState getGameState(); + + String getUsername(); + + void setUsername(String name); + + Canvas getCanvas(); + + int getFPS(); + + int getCameraX(); + + int getCameraY(); + + int getCameraZ(); + + int getCameraPitch(); + + int getCameraYaw(); + + int getViewportHeight(); + + int getViewportWidth(); + + int getScale(); + + Point getMouseCanvasPosition(); + + int[][][] getTileHeights(); + + byte[][][] getTileSettings(); + + int getPlane(); + + Region getRegion(); + + Player getLocalPlayer(); + + ItemComposition getItemDefinition(int id); + + int getBaseX(); + + int getBaseY(); + + Widget[] getWidgetRoots(); + + Widget getWidget(WidgetInfo widget); + + Widget[] getGroup(int groupId); + + Widget getWidget(int groupId, int childId); + + int[] getWidgetPositionsX(); + + int[] getWidgetPositionsY(); + + String[] getPlayerOptions(); + + boolean[] getPlayerOptionsPriorities(); + + int[] getPlayerMenuTypes(); + + String[] getMenuOptions(); + + String[] getMenuTargets(); + + int getMenuOptionCount(); + + boolean isMenuOpen(); + + int getMapAngle(); + + boolean isResized(); + + int getRevision(); + + int[] getMapRegions(); + + int[][] getXteaKeys(); + + int[] getSettings(); + + int[] getWidgetSettings(); + + int getSetting(Varbits varbit); + + int getClanChatCount(); + + HashTable getComponentTable(); + + boolean isPrayerActive(Prayer prayer); + + int getSkillExperience(Skill skill); + + int getGameDrawingMode(); + + void setGameDrawingMode(int gameDrawingMode); + + void refreshChat(); } diff --git a/runelite-api/src/main/java/net/runelite/api/DecorativeObject.java b/runelite-api/src/main/java/net/runelite/api/DecorativeObject.java index 68808cca5c..8ad1eb06bf 100644 --- a/runelite-api/src/main/java/net/runelite/api/DecorativeObject.java +++ b/runelite-api/src/main/java/net/runelite/api/DecorativeObject.java @@ -31,63 +31,7 @@ import java.awt.Polygon; * * @author Adam */ -public class DecorativeObject extends TileObject +public interface DecorativeObject extends TileObject { - private final net.runelite.rs.api.DecorativeObject decorativeObject; - - public DecorativeObject(Client client, net.runelite.rs.api.DecorativeObject decorativeObject) - { - super(client); - this.decorativeObject = decorativeObject; - } - - @Override - protected int getHash() - { - return decorativeObject.getHash(); - } - - @Override - protected int getLocalX() - { - return decorativeObject.getX(); - } - - @Override - protected int getLocalY() - { - return decorativeObject.getY(); - } - - public Renderable getRenderable() - { - return Renderable.of(decorativeObject.getRenderable()); - } - - public Polygon getConvexHull() - { - Renderable renderable = getRenderable(); - if (renderable == null) - { - return null; - } - - Model model; - - if (renderable instanceof Model) - { - model = (Model) renderable; - } - else - { - model = renderable.getModel(); - } - - if (model == null) - { - return null; - } - - return getConvexHull(model, decorativeObject.getOrientation()); - } + Polygon getConvexHull(); } diff --git a/runelite-api/src/main/java/net/runelite/api/GameObject.java b/runelite-api/src/main/java/net/runelite/api/GameObject.java index 54a5a65ef2..07cd9680ff 100644 --- a/runelite-api/src/main/java/net/runelite/api/GameObject.java +++ b/runelite-api/src/main/java/net/runelite/api/GameObject.java @@ -30,63 +30,7 @@ import java.awt.Polygon; * * @author Adam */ -public class GameObject extends TileObject +public interface GameObject extends TileObject { - private final net.runelite.rs.api.GameObject gameObject; - - public GameObject(Client client, net.runelite.rs.api.GameObject gameObject) - { - super(client); - this.gameObject = gameObject; - } - - @Override - protected int getHash() - { - return gameObject.getHash(); - } - - @Override - protected int getLocalX() - { - return gameObject.getX(); - } - - @Override - protected int getLocalY() - { - return gameObject.getY(); - } - - public Renderable getRenderable() - { - return Renderable.of(gameObject.getRenderable()); - } - - public Polygon getConvexHull() - { - Renderable renderable = getRenderable(); - if (renderable == null) - { - return null; - } - - Model model; - - if (renderable instanceof Model) - { - model = (Model) renderable; - } - else - { - model = renderable.getModel(); - } - - if (model == null) - { - return null; - } - - return getConvexHull(model, gameObject.getOrientation()); - } + Polygon getConvexHull(); } diff --git a/runelite-api/src/main/java/net/runelite/api/GroundObject.java b/runelite-api/src/main/java/net/runelite/api/GroundObject.java index 6646e65893..3824ae669d 100644 --- a/runelite-api/src/main/java/net/runelite/api/GroundObject.java +++ b/runelite-api/src/main/java/net/runelite/api/GroundObject.java @@ -24,31 +24,6 @@ */ package net.runelite.api; -public class GroundObject extends TileObject +public interface GroundObject extends TileObject { - private final net.runelite.rs.api.GroundObject groundObject; - - public GroundObject(Client client, net.runelite.rs.api.GroundObject groundObject) - { - super(client); - this.groundObject = groundObject; - } - - @Override - protected int getHash() - { - return groundObject.getHash(); - } - - @Override - protected int getLocalX() - { - return groundObject.getX(); - } - - @Override - protected int getLocalY() - { - return groundObject.getY(); - } } diff --git a/runelite-api/src/main/java/net/runelite/api/HashTable.java b/runelite-api/src/main/java/net/runelite/api/HashTable.java new file mode 100644 index 0000000000..40df027830 --- /dev/null +++ b/runelite-api/src/main/java/net/runelite/api/HashTable.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2017, Adam + * 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; + +import java.util.Collection; + +public interface HashTable +{ + Collection getNodes(); +} diff --git a/runelite-api/src/main/java/net/runelite/api/Item.java b/runelite-api/src/main/java/net/runelite/api/Item.java index 6d2ef3fb8b..2e90d8bc29 100644 --- a/runelite-api/src/main/java/net/runelite/api/Item.java +++ b/runelite-api/src/main/java/net/runelite/api/Item.java @@ -24,23 +24,9 @@ */ package net.runelite.api; -public class Item extends Renderable +public interface Item extends Renderable { - private final net.runelite.rs.api.Item item; + int getId(); - public Item(net.runelite.rs.api.Item item) - { - super(item); - this.item = item; - } - - public int getId() - { - return item.getId(); - } - - public int getQuantity() - { - return item.getQuantity(); - } + int getQuantity(); } diff --git a/runescape-api/src/main/java/net/runelite/rs/api/ItemComposition.java b/runelite-api/src/main/java/net/runelite/api/ItemComposition.java similarity index 66% rename from runescape-api/src/main/java/net/runelite/rs/api/ItemComposition.java rename to runelite-api/src/main/java/net/runelite/api/ItemComposition.java index 9f207bcd99..600628e9ec 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/ItemComposition.java +++ b/runelite-api/src/main/java/net/runelite/api/ItemComposition.java @@ -22,69 +22,56 @@ * (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; -package net.runelite.rs.api; - -import net.runelite.mapping.Import; - -/** - * ItemComposition is an interface that represents the various properties - * of an item. Imports several values from rs-client/ItemComposition, - * and allows direct access to them by calling these methods. - */ public interface ItemComposition { /** * Returns the item's name as a string. + * * @return the name of the item */ - @Import("name") String getName(); /** - * Returns the item's ID. A list of item IDs can be - * found in net.runelite.api.ItemID. + * Returns the item's ID. A list of item IDs can be found in + * ItemID. + * * @return the item's ID as an integer */ - @Import("id") int getId(); /** - * Returns a result that depends on whether the item - * is in noted form or not. + * Returns a result that depends on whether the item is in noted form or + * not. + * * @return 799 if noted, -1 if unnoted */ - @Import("notedTemplate") int getNote(); /** - * Returns the item ID of the noted/unnoted counterpart. - * For example, if you call this on an unnoted monkfish(ID 7946), - * this method will return the ID of a noted monkfish(ID 7947), - * and vice versa. + * Returns the item ID of the noted/unnoted counterpart. For example, if + * you call this on an unnoted monkfish(ID 7946), this method will + * return the ID of a noted monkfish(ID 7947), and vice versa. + * * @return the ID that is linked to this item in noted/unnoted form. */ - @Import("note") int getLinkedNoteId(); /** - * Returns the store price of the item. Even if the item cannot - * be found in a store, all items have a store price from which the - * High and Low Alchemy values are calculated. Multiply the price by - * 0.6 to get the High Alchemy value, or 0.4 to get the Low Alchemy - * value. + * Returns the store price of the item. Even if the item cannot be found + * in a store, all items have a store price from which the High and Low + * Alchemy values are calculated. Multiply the price by 0.6 to get the + * High Alchemy value, or 0.4 to get the Low Alchemy value. + * * @return the general store value of the item */ - @Import("price") int getPrice(); /** * Returns whether or not the item is members-only. + * * @return true if members-only, false otherwise. */ - @Import("isMembers") boolean isMembers(); - - @Import("maleModel") - int getMaleModel(); } diff --git a/runelite-api/src/main/java/net/runelite/api/ItemLayer.java b/runelite-api/src/main/java/net/runelite/api/ItemLayer.java index 094349e093..a521c1d492 100644 --- a/runelite-api/src/main/java/net/runelite/api/ItemLayer.java +++ b/runelite-api/src/main/java/net/runelite/api/ItemLayer.java @@ -24,46 +24,11 @@ */ package net.runelite.api; -public class ItemLayer extends TileObject +public interface ItemLayer extends TileObject { - private final net.runelite.rs.api.ItemLayer itemLayer; + Renderable getBottom(); - public ItemLayer(Client client, net.runelite.rs.api.ItemLayer itemLayer) - { - super(client); - this.itemLayer = itemLayer; - } + Renderable getMiddle(); - @Override - protected int getHash() - { - return itemLayer.getHash(); - } - - @Override - protected int getLocalX() - { - return itemLayer.getX(); - } - - @Override - protected int getLocalY() - { - return itemLayer.getY(); - } - - public Renderable getBottom() - { - return Renderable.of(itemLayer.getBottom()); - } - - public Renderable getMiddle() - { - return Renderable.of(itemLayer.getMiddle()); - } - - public Renderable getTop() - { - return Renderable.of(itemLayer.getTop()); - } + Renderable getTop(); } diff --git a/runescape-api/src/main/java/net/runelite/rs/api/MainBufferProvider.java b/runelite-api/src/main/java/net/runelite/api/MainBufferProvider.java similarity index 91% rename from runescape-api/src/main/java/net/runelite/rs/api/MainBufferProvider.java rename to runelite-api/src/main/java/net/runelite/api/MainBufferProvider.java index c0e80e9e25..780c925654 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/MainBufferProvider.java +++ b/runelite-api/src/main/java/net/runelite/api/MainBufferProvider.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, Adam + * Copyright (c) 2016-2017, Adam * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -22,13 +22,11 @@ * (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.rs.api; +package net.runelite.api; import java.awt.Image; -import net.runelite.mapping.Import; public interface MainBufferProvider { - @Import("image") Image getImage(); } diff --git a/runelite-api/src/main/java/net/runelite/api/MessageNode.java b/runelite-api/src/main/java/net/runelite/api/MessageNode.java index eb9e9f7061..346757f667 100644 --- a/runelite-api/src/main/java/net/runelite/api/MessageNode.java +++ b/runelite-api/src/main/java/net/runelite/api/MessageNode.java @@ -24,32 +24,13 @@ */ package net.runelite.api; -public class MessageNode +public interface MessageNode { - private final net.runelite.rs.api.MessageNode messageNode; + ChatMessageType getType(); - public MessageNode(net.runelite.rs.api.MessageNode messageNode) - { - this.messageNode = messageNode; - } + String getSender(); - public ChatMessageType getType() - { - return ChatMessageType.of(messageNode.getType()); - } + String getValue(); - public String getSender() - { - return messageNode.getSender(); - } - - public String getValue() - { - return messageNode.getValue(); - } - - public void setValue(String value) - { - messageNode.setValue(value); - } + void setValue(String value); } diff --git a/runelite-api/src/main/java/net/runelite/api/Model.java b/runelite-api/src/main/java/net/runelite/api/Model.java index a707707878..969dd668bf 100644 --- a/runelite-api/src/main/java/net/runelite/api/Model.java +++ b/runelite-api/src/main/java/net/runelite/api/Model.java @@ -24,71 +24,13 @@ */ package net.runelite.api; -import java.util.ArrayList; import java.util.List; import net.runelite.api.model.Triangle; import net.runelite.api.model.Vertex; -public class Model extends Renderable +public interface Model extends Renderable { - private final net.runelite.rs.api.Model model; + List getVertices(); - public Model(net.runelite.rs.api.Model model) - { - super(model); - this.model = model; - } - - public List getVertices() - { - int[] verticesX = model.getVerticesX(); - int[] verticesY = model.getVerticesY(); - int[] verticesZ = model.getVerticesZ(); - - assert verticesX.length == verticesY.length; - assert verticesY.length == verticesZ.length; - - List vertices = new ArrayList<>(); - - for (int i = 0; i < verticesX.length; ++i) - { - Vertex v = new Vertex( - verticesX[i], - verticesY[i], - verticesZ[i] - ); - vertices.add(v); - } - - return vertices; - } - - public List getTriangles() - { - int[] trianglesX = model.getTrianglesX(); - int[] trianglesY = model.getTrianglesY(); - int[] trianglesZ = model.getTrianglesZ(); - - assert trianglesX.length == trianglesY.length; - assert trianglesY.length == trianglesZ.length; - - List vertices = getVertices(); - List triangles = new ArrayList<>(trianglesX.length); - - for (int i = 0; i < trianglesX.length; ++i) - { - int triangleX = trianglesX[i]; - int triangleY = trianglesY[i]; - int triangleZ = trianglesZ[i]; - - Triangle triangle = new Triangle( - vertices.get(triangleX), - vertices.get(triangleY), - vertices.get(triangleZ) - ); - triangles.add(triangle); - } - - return triangles; - } + List getTriangles(); } diff --git a/runelite-api/src/main/java/net/runelite/api/NPC.java b/runelite-api/src/main/java/net/runelite/api/NPC.java index e2c6d1a5d3..9fcf4ff919 100644 --- a/runelite-api/src/main/java/net/runelite/api/NPC.java +++ b/runelite-api/src/main/java/net/runelite/api/NPC.java @@ -22,34 +22,16 @@ * (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; -public class NPC extends Actor +public interface NPC extends Actor { - private net.runelite.rs.api.NPC npc; - - public NPC(Client client, net.runelite.rs.api.NPC npc) - { - super(client, npc); - this.npc = npc; - } - - public int getId() - { - return npc.getComposition().getId(); - } + int getId(); @Override - public String getName() - { - return npc.getComposition().getName().replace('\u00A0', ' '); - } + String getName(); @Override - public int getCombatLevel() - { - return npc.getComposition().getCombatLevel(); - } + int getCombatLevel(); } diff --git a/runelite-api/src/main/java/net/runelite/api/Node.java b/runelite-api/src/main/java/net/runelite/api/Node.java index 630769f0d3..5c5a338937 100644 --- a/runelite-api/src/main/java/net/runelite/api/Node.java +++ b/runelite-api/src/main/java/net/runelite/api/Node.java @@ -24,58 +24,11 @@ */ package net.runelite.api; -public class Node +public interface Node { - private final net.runelite.rs.api.Node node; + Node getNext(); - public Node(net.runelite.rs.api.Node node) - { - this.node = node; - } + Node getPrevious(); - @Override - public String toString() - { - return "Node{" + "node=" + node + '}'; - } - - public Node getNext() - { - return of(node.getNext()); - } - - public Node getPrev() - { - return of(node.getPrevious()); - } - - public long getHash() - { - return node.getHash(); - } - - public static final Node of(net.runelite.rs.api.Node node) - { - if (node == null) - { - return null; - } - - if (node instanceof net.runelite.rs.api.Item) - { - return new Item((net.runelite.rs.api.Item) node); - } - - if (node instanceof net.runelite.rs.api.Renderable) - { - return Renderable.of((net.runelite.rs.api.Renderable) node); - } - - if (node instanceof net.runelite.rs.api.WidgetNode) - { - return new WidgetNode((net.runelite.rs.api.WidgetNode) node); - } - - return new Node(node); - } + long getHash(); } diff --git a/runelite-api/src/main/java/net/runelite/api/Perspective.java b/runelite-api/src/main/java/net/runelite/api/Perspective.java index 1a3ac65bbe..cf5f5de8f9 100644 --- a/runelite-api/src/main/java/net/runelite/api/Perspective.java +++ b/runelite-api/src/main/java/net/runelite/api/Perspective.java @@ -156,7 +156,7 @@ public class Perspective int xx = y * sin + cos * x >> 16; int yy = sin * x - y * cos >> 16; - int miniMapX = client.getClientWidth() - (!client.isResized() ? 208 : 167); + int miniMapX = client.getCanvas().getWidth() - (!client.isResized() ? 208 : 167); x = (miniMapX + 167 / 2) + xx; y = (167 / 2 - 1) + yy; diff --git a/runelite-api/src/main/java/net/runelite/api/Player.java b/runelite-api/src/main/java/net/runelite/api/Player.java index b9764e8037..6dd05ba00a 100644 --- a/runelite-api/src/main/java/net/runelite/api/Player.java +++ b/runelite-api/src/main/java/net/runelite/api/Player.java @@ -25,115 +25,13 @@ package net.runelite.api; import java.awt.Polygon; -import java.util.ArrayList; -import java.util.List; -import net.runelite.api.model.Triangle; -import net.runelite.api.model.Vertex; -public class Player extends Actor +public interface Player extends Actor { - private final Client client; - private final net.runelite.rs.api.Player player; - - public Player(Client client, net.runelite.rs.api.Player player) - { - super(client, player); - - this.player = player; - this.client = client; - } - @Override - public String getName() - { - return player.getName().replace('\u00A0', ' '); - } + int getCombatLevel(); - @Override - public int getCombatLevel() - { - return player.getCombatLevel(); - } + PlayerComposition getPlayerComposition(); - public PlayerComposition getPlayerComposition() - { - return new PlayerComposition(player.getComposition()); - } - - public Polygon[] getPolygons() - { - Model model = getModel(); - - if (model == null) - { - return null; - } - - int localX = player.getX(); - int localY = player.getY(); - - // models are orientated north (1024) and there are 2048 angles total - int orientation = (player.getOrientation() + 1024) % 2048; - - List triangles = model.getTriangles(); - - if (orientation != 0) - { - triangles = rotate(triangles, orientation); - } - - List polys = new ArrayList<>(); - for (Triangle triangle : triangles) - { - Vertex vx = triangle.getA(); - Vertex vy = triangle.getB(); - Vertex vz = triangle.getC(); - - Point x = Perspective.worldToCanvas(client, - localX - vx.getX(), - localY - vx.getZ(), - -vx.getY()); - - Point y = Perspective.worldToCanvas(client, - localX - vy.getX(), - localY - vy.getZ(), - -vy.getY()); - - Point z = Perspective.worldToCanvas(client, - localX - vz.getX(), - localY - vz.getZ(), - -vz.getY()); - - int xx[] = - { - x.getX(), y.getX(), z.getX() - }; - int yy[] = - { - x.getY(), y.getY(), z.getY() - }; - polys.add(new Polygon(xx, yy, 3)); - } - - return polys.toArray(new Polygon[polys.size()]); - } - - private List rotate(List triangles, int orientation) - { - List rotatedTriangles = new ArrayList<>(); - for (Triangle triangle : triangles) - { - Vertex a = triangle.getA(); - Vertex b = triangle.getB(); - Vertex c = triangle.getC(); - - Triangle rotatedTriangle = new Triangle( - a.rotate(orientation), - b.rotate(orientation), - c.rotate(orientation) - ); - rotatedTriangles.add(rotatedTriangle); - } - return rotatedTriangles; - } + Polygon[] getPolygons(); } diff --git a/runelite-api/src/main/java/net/runelite/api/PlayerComposition.java b/runelite-api/src/main/java/net/runelite/api/PlayerComposition.java index ce3b3df14f..e7dcc97de8 100644 --- a/runelite-api/src/main/java/net/runelite/api/PlayerComposition.java +++ b/runelite-api/src/main/java/net/runelite/api/PlayerComposition.java @@ -26,43 +26,18 @@ package net.runelite.api; import net.runelite.api.kit.KitType; -public class PlayerComposition +public interface PlayerComposition { - private final net.runelite.rs.api.PlayerComposition playerComposition; - - public PlayerComposition(net.runelite.rs.api.PlayerComposition playerComposition) - { - this.playerComposition = playerComposition; - } - /** - * Get equipment ids. If id is ≥ 256 && < 512 then subtract 256 and the id is a kit definition. - * If the id is ≥ 512 then subtract 512 and the id is an item id. + * Get equipment ids. If id is ≥ 256 && < 512 then + * subtract 256 and the id is a kit definition. If the id is ≥ 512 + * then subtract 512 and the id is an item id. * * @return */ - public int[] getEquipmentIds() - { - return playerComposition.getEquipmentIds(); - } + int[] getEquipmentIds(); - public int getEquipmentId(KitType type) - { - int id = getEquipmentIds()[type.getIndex()]; - if (id < 512) - { - return -1; // not an item - } - return id - 512; - } + int getEquipmentId(KitType type); - public int getKitId(KitType type) - { - int id = getEquipmentIds()[type.getIndex()]; - if (id < 256 || id >= 512) - { - return -1; // not a kit - } - return id - 256; - } + int getKitId(KitType type); } diff --git a/runelite-api/src/main/java/net/runelite/api/Query.java b/runelite-api/src/main/java/net/runelite/api/Query.java index d54e174cc2..08d9e0e8da 100644 --- a/runelite-api/src/main/java/net/runelite/api/Query.java +++ b/runelite-api/src/main/java/net/runelite/api/Query.java @@ -34,7 +34,7 @@ public abstract class Query { } - protected abstract EntityType[] result(Client client); + public abstract EntityType[] result(Client client); protected Predicate and(Predicate other) { diff --git a/runelite-api/src/main/java/net/runelite/api/Region.java b/runelite-api/src/main/java/net/runelite/api/Region.java index 2d61f2cd16..95fd4148eb 100644 --- a/runelite-api/src/main/java/net/runelite/api/Region.java +++ b/runelite-api/src/main/java/net/runelite/api/Region.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, Adam + * Copyright (c) 2016-2017, Adam * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -24,27 +24,7 @@ */ package net.runelite.api; -import java.util.Arrays; - -public class Region +public interface Region { - private final Client client; - private final net.runelite.rs.api.Region region; - - public Region(Client client, net.runelite.rs.api.Region region) - { - this.client = client; - this.region = region; - } - - public Tile[][][] getTiles() - { - return Arrays.stream(region.getTiles()) - .map(tile1 -> Arrays.stream(tile1) - .map(tile2 -> Arrays.stream(tile2) - .map(tile3 -> tile3 != null ? new Tile(client, tile3) : null) - .toArray(Tile[]::new) - ).toArray(Tile[][]::new) - ).toArray(Tile[][][]::new); - } + Tile[][][] getTiles(); } diff --git a/runelite-api/src/main/java/net/runelite/api/Renderable.java b/runelite-api/src/main/java/net/runelite/api/Renderable.java index fcb48045a8..a4dc13cc9f 100644 --- a/runelite-api/src/main/java/net/runelite/api/Renderable.java +++ b/runelite-api/src/main/java/net/runelite/api/Renderable.java @@ -24,34 +24,7 @@ */ package net.runelite.api; -public class Renderable extends Node +public interface Renderable extends Node { - private final net.runelite.rs.api.Renderable renderable; - - public Renderable(net.runelite.rs.api.Renderable renderable) - { - super(renderable); - this.renderable = renderable; - } - - public Model getModel() - { - net.runelite.rs.api.Model model = renderable.getModel(); - return model != null ? new Model(model) : null; - } - - public static Renderable of(net.runelite.rs.api.Renderable renderable) - { - if (renderable == null) - { - return null; - } - - if (renderable instanceof net.runelite.rs.api.Model) - { - return new Model((net.runelite.rs.api.Model) renderable); - } - - return new Renderable(renderable); - } + Model getModel(); } diff --git a/runelite-api/src/main/java/net/runelite/api/Tile.java b/runelite-api/src/main/java/net/runelite/api/Tile.java index 5eba540ad8..ee1899a948 100644 --- a/runelite-api/src/main/java/net/runelite/api/Tile.java +++ b/runelite-api/src/main/java/net/runelite/api/Tile.java @@ -24,83 +24,20 @@ */ package net.runelite.api; -import java.util.Arrays; - -public class Tile +public interface Tile { - private final Client client; - private final net.runelite.rs.api.Tile tile; - - public Tile(Client client, net.runelite.rs.api.Tile tile) - { - this.client = client; - this.tile = tile; - } - /** * Get the decorative object for this tile. * * @return */ - public DecorativeObject getDecorativeObject() - { - net.runelite.rs.api.DecorativeObject decorativeObject = tile.getDecorativeObject(); + DecorativeObject getDecorativeObject(); - if (decorativeObject == null) - { - return null; - } + GameObject[] getGameObjects(); - return new DecorativeObject(client, decorativeObject); - } + ItemLayer getItemLayer(); - public GameObject[] getGameObjects() - { - net.runelite.rs.api.GameObject[] objects = tile.getObjects(); + GroundObject getGroundObject(); - if (objects == null) - { - return null; - } - - return Arrays.stream(tile.getObjects()) - .map(go -> go != null ? new GameObject(client, go) : null) - .toArray(i -> new GameObject[i]); - } - - public ItemLayer getItemLayer() - { - net.runelite.rs.api.ItemLayer itemLayer = tile.getItemLayer(); - - if (itemLayer == null) - { - return null; - } - - return new ItemLayer(client, itemLayer); - } - - public GroundObject getGroundObject() - { - net.runelite.rs.api.GroundObject groundObject = tile.getGroundObject(); - - if (groundObject == null) - { - return null; - } - - return new GroundObject(client, groundObject); - } - - public WallObject getWallObject() - { - net.runelite.rs.api.WallObject wallObject = tile.getWallObject(); - - if (wallObject == null) - { - return null; - } - - return new WallObject(client, wallObject); - } + WallObject getWallObject(); } diff --git a/runelite-api/src/main/java/net/runelite/api/TileObject.java b/runelite-api/src/main/java/net/runelite/api/TileObject.java index 590a1951a1..0bc7086a1a 100644 --- a/runelite-api/src/main/java/net/runelite/api/TileObject.java +++ b/runelite-api/src/main/java/net/runelite/api/TileObject.java @@ -26,113 +26,28 @@ package net.runelite.api; import java.awt.Graphics2D; import java.awt.Polygon; -import java.util.ArrayList; -import java.util.List; -import net.runelite.api.model.Jarvis; -import net.runelite.api.model.Vertex; -public abstract class TileObject +public interface TileObject { - protected final Client client; + int getHash(); - public TileObject(Client client) - { - this.client = client; - } + int getX(); - protected abstract int getHash(); + int getY(); - protected abstract int getLocalX(); + int getId(); - protected abstract int getLocalY(); + Point getWorldLocation(); - public int getId() - { - int hash = getHash(); - return hash >> 14 & 32767; - } + Point getLocalLocation(); - public Point getWorldLocation() - { - Point localLocation = getLocalLocation(); - return Perspective.localToWorld(client, localLocation); - } + Point getCanvasLocation(); - public Point getLocalLocation() - { - return new Point(getLocalX(), getLocalY()); - } + Polygon getCanvasTilePoly(); - public Point getCanvasLocation() - { - Point locaLocation = getLocalLocation(); - return Perspective.worldToCanvas(client, locaLocation.getX(), locaLocation.getY(), 0); - } + Point getCanvasTextLocation(Graphics2D graphics, String text, int zOffset); - public Polygon getCanvasTilePoly() - { - return Perspective.getCanvasTilePoly(client, getLocalLocation()); - } + Point getMinimapLocation(); - public Point getCanvasTextLocation(Graphics2D graphics, String text, int zOffset) - { - return Perspective.getCanvasTextLocation(client, graphics, getLocalLocation(), text, zOffset); - } - - public Point getMinimapLocation() - { - return Perspective.worldToMiniMap(client, getLocalX(), getLocalY()); - } - - protected Polygon getConvexHull(Model model, int orientation) - { - int localX = getLocalX(); - int localY = getLocalY(); - - // models are orientated north (1024) and there are 2048 angles total - orientation = (orientation + 1024) % 2048; - - List verticies = model.getVertices(); - - if (orientation != 0) - { - // rotate verticies - for (int i = 0; i < verticies.size(); ++i) - { - Vertex v = verticies.get(i); - verticies.set(i, v.rotate(orientation)); - } - } - - List points = new ArrayList<>(); - - for (Vertex v : verticies) - { - // Compute canvas location of vertex - Point p = Perspective.worldToCanvas(client, - localX - v.getX(), - localY - v.getZ(), - -v.getY()); - if (p != null) - { - points.add(p); - } - } - - // Run Jarvis march algorithm - points = Jarvis.convexHull(points); - if (points == null) - { - return null; - } - - // Convert to a polygon - Polygon p = new Polygon(); - for (Point point : points) - { - p.addPoint(point.getX(), point.getY()); - } - - return p; - } + Polygon getConvexHull(Model model, int orientation); } diff --git a/runelite-api/src/main/java/net/runelite/api/WallObject.java b/runelite-api/src/main/java/net/runelite/api/WallObject.java index 244b3292c5..e5510d05e6 100644 --- a/runelite-api/src/main/java/net/runelite/api/WallObject.java +++ b/runelite-api/src/main/java/net/runelite/api/WallObject.java @@ -29,31 +29,6 @@ package net.runelite.api; * * @author Adam */ -public class WallObject extends TileObject +public interface WallObject extends TileObject { - private final net.runelite.rs.api.WallObject wallObject; - - public WallObject(Client client, net.runelite.rs.api.WallObject wallObject) - { - super(client); - this.wallObject = wallObject; - } - - @Override - protected int getHash() - { - return wallObject.getHash(); - } - - @Override - protected int getLocalX() - { - return wallObject.getX(); - } - - @Override - protected int getLocalY() - { - return wallObject.getY(); - } } diff --git a/runelite-api/src/main/java/net/runelite/api/WidgetNode.java b/runelite-api/src/main/java/net/runelite/api/WidgetNode.java index 391237599f..1518cb23ea 100644 --- a/runelite-api/src/main/java/net/runelite/api/WidgetNode.java +++ b/runelite-api/src/main/java/net/runelite/api/WidgetNode.java @@ -24,18 +24,7 @@ */ package net.runelite.api; -public class WidgetNode extends Node +public interface WidgetNode extends Node { - private final net.runelite.rs.api.WidgetNode widgetNode; - - public WidgetNode(net.runelite.rs.api.WidgetNode widgetNode) - { - super(widgetNode); - this.widgetNode = widgetNode; - } - - public int getId() - { - return widgetNode.getId(); - } + int getId(); } 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 index 61e0e93c11..e5a9f94de5 100644 --- a/runelite-api/src/main/java/net/runelite/api/queries/DecorativeObjectQuery.java +++ b/runelite-api/src/main/java/net/runelite/api/queries/DecorativeObjectQuery.java @@ -35,7 +35,7 @@ import java.util.Objects; public class DecorativeObjectQuery extends TileObjectQuery { @Override - protected DecorativeObject[] result(Client client) + public DecorativeObject[] result(Client client) { return getDecorativeObjects(client).stream().filter(Objects::nonNull).filter(predicate).toArray(DecorativeObject[]::new); } 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 index 5c6e9592d0..1937db4335 100644 --- a/runelite-api/src/main/java/net/runelite/api/queries/GameObjectQuery.java +++ b/runelite-api/src/main/java/net/runelite/api/queries/GameObjectQuery.java @@ -36,7 +36,7 @@ import java.util.Objects; public class GameObjectQuery extends TileObjectQuery { @Override - protected GameObject[] result(Client client) + public GameObject[] result(Client client) { return getGameObjects(client).stream().filter(Objects::nonNull).filter(predicate).toArray(GameObject[]::new); } 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 index e11974e52e..cfd0b1c93e 100644 --- a/runelite-api/src/main/java/net/runelite/api/queries/GroundObjectQuery.java +++ b/runelite-api/src/main/java/net/runelite/api/queries/GroundObjectQuery.java @@ -35,7 +35,7 @@ import java.util.Objects; public class GroundObjectQuery extends TileObjectQuery { @Override - protected GroundObject[] result(Client client) + public GroundObject[] result(Client client) { return getGroundObjects(client).stream().filter(Objects::nonNull).filter(predicate).toArray(GroundObject[]::new); } diff --git a/runelite-api/src/main/java/net/runelite/api/queries/NPCQuery.java b/runelite-api/src/main/java/net/runelite/api/queries/NPCQuery.java index 033f150ec3..108c0a6ac3 100644 --- a/runelite-api/src/main/java/net/runelite/api/queries/NPCQuery.java +++ b/runelite-api/src/main/java/net/runelite/api/queries/NPCQuery.java @@ -33,9 +33,9 @@ import java.util.Objects; public class NPCQuery extends ActorQuery { @Override - protected NPC[] result(Client client) + public NPC[] result(Client client) { - return Arrays.stream(client.getNpcs()) + return Arrays.stream(client.getCachedNPCs()) .filter(Objects::nonNull) .filter(predicate) .toArray(NPC[]::new); diff --git a/runelite-api/src/main/java/net/runelite/api/queries/PlayerQuery.java b/runelite-api/src/main/java/net/runelite/api/queries/PlayerQuery.java index a375cf8dd7..5e5b2e1781 100644 --- a/runelite-api/src/main/java/net/runelite/api/queries/PlayerQuery.java +++ b/runelite-api/src/main/java/net/runelite/api/queries/PlayerQuery.java @@ -33,9 +33,9 @@ import java.util.Objects; public class PlayerQuery extends ActorQuery { @Override - protected Player[] result(Client client) + public Player[] result(Client client) { - return Arrays.stream(client.getPlayers()) + return Arrays.stream(client.getCachedPlayers()) .filter(Objects::nonNull) .filter(predicate) .toArray(Player[]::new); 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 index 64fe914157..d292b50871 100644 --- a/runelite-api/src/main/java/net/runelite/api/queries/WallObjectQuery.java +++ b/runelite-api/src/main/java/net/runelite/api/queries/WallObjectQuery.java @@ -35,7 +35,7 @@ import java.util.Objects; public class WallObjectQuery extends TileObjectQuery { @Override - protected WallObject[] result(Client client) + public WallObject[] result(Client client) { return getWallObjects(client).stream().filter(Objects::nonNull).filter(predicate).toArray(WallObject[]::new); } diff --git a/runelite-api/src/main/java/net/runelite/api/queries/WidgetItemQuery.java b/runelite-api/src/main/java/net/runelite/api/queries/WidgetItemQuery.java index 0ec64cef60..8ee9c9e5f7 100644 --- a/runelite-api/src/main/java/net/runelite/api/queries/WidgetItemQuery.java +++ b/runelite-api/src/main/java/net/runelite/api/queries/WidgetItemQuery.java @@ -81,7 +81,7 @@ public class WidgetItemQuery extends Query } @Override - protected WidgetItem[] result(Client client) + public WidgetItem[] result(Client client) { Widget widget = client.getWidget(widgetInfo); if (widget != null) diff --git a/runelite-api/src/main/java/net/runelite/api/widgets/Widget.java b/runelite-api/src/main/java/net/runelite/api/widgets/Widget.java index e438e29cf2..af983ccd6b 100644 --- a/runelite-api/src/main/java/net/runelite/api/widgets/Widget.java +++ b/runelite-api/src/main/java/net/runelite/api/widgets/Widget.java @@ -25,320 +25,60 @@ package net.runelite.api.widgets; import java.awt.Rectangle; -import java.util.ArrayList; -import java.util.Arrays; import java.util.Collection; -import java.util.List; -import java.util.Objects; -import net.runelite.api.Client; -import net.runelite.api.Node; import net.runelite.api.Point; -import net.runelite.api.WidgetNode; -import net.runelite.api.XHashTable; -import static net.runelite.api.widgets.WidgetInfo.TO_CHILD; -import static net.runelite.api.widgets.WidgetInfo.TO_GROUP; -public class Widget +public interface Widget { - private static final int ITEM_SLOT_SIZE = 32; + int getId(); - private final Client client; - private final net.runelite.rs.api.Widget widget; + int getType(); - public Widget(Client client, net.runelite.rs.api.Widget widget) - { - this.client = client; - this.widget = widget; - } + int getContentType(); - public int getId() - { - return widget.getId(); - } + Widget getParent(); - public int getType() - { - return widget.getType(); - } + int getParentId(); - public int getContentType() - { - return widget.getContentType(); - } + Widget getChild(int index); - public Widget getParent() - { - int id = getParentId(); - if (id == -1) - { - return null; - } + Widget[] getDynamicChildren(); - return client.getWidget(TO_GROUP(id), TO_CHILD(id)); - } + Widget[] getStaticChildren(); - public int getParentId() - { - int parentId = widget.getParentId(); - if (parentId != -1) - { - return parentId; - } + Widget[] getNestedChildren(); - int i = TO_GROUP(getId()); - XHashTable componentTable = client.getComponentTable(); - for (Node node : componentTable.getNodes()) - { - WidgetNode wn = (WidgetNode) node; + int getRelativeX(); - if (i == wn.getId()) - { - return (int) wn.getHash(); - } - } + int getRelativeY(); - return -1; - } + String getText(); - public Widget getChild(int index) - { - net.runelite.rs.api.Widget[] widgets = widget.getChildren(); + void setText(String text); - if (widgets == null || widgets[index] == null) - { - return null; - } + int getTextColor(); - return new Widget(client, widgets[index]); - } + String getName(); - public Widget[] getDynamicChildren() - { - net.runelite.rs.api.Widget[] children = widget.getChildren(); + int getModelId(); - if (children == null) - { - return new Widget[0]; - } + int getSpriteId(); - return Arrays.stream(children) - .filter(Objects::nonNull) - .filter(w -> w.getParentId() == getId()) - .map(w -> new Widget(client, w)) - .toArray(Widget[]::new); - } + boolean isHidden(); - public Widget[] getStaticChildren() - { - return Arrays.stream(client.getGroup(TO_GROUP(getId()))) - .filter(Objects::nonNull) - .filter(w -> w.getParentId() == getId()) - .toArray(Widget[]::new); - } + Point getCanvasLocation(); - public Widget[] getNestedChildren() - { - XHashTable componentTable = client.getComponentTable(); - int group = -1; + int getWidth(); - // XXX can actually use hashtable lookup instead of table - // iteration here... - for (Node node : componentTable.getNodes()) - { - WidgetNode wn = (WidgetNode) node; + int getHeight(); - if (wn.getHash() == getId()) - { - group = wn.getId(); - break; - } - } + Rectangle getBounds(); - if (group == -1) - { - return new Widget[0]; - } + Collection getWidgetItems(); - return Arrays.stream(client.getGroup(group)) - .filter(w -> w.getParentId() == getId()) - .toArray(Widget[]::new); - } + WidgetItem getWidgetItem(int index); - private int getRelativeX() - { - return widget.getRelativeX(); - } + int getItemId(); - private int getRelativeY() - { - return widget.getRelativeY(); - } - - public String getText() - { - return widget.getText().replace('\u00A0', ' '); - } - - public void setText(String text) - { - widget.setText(text); - } - - public int getTextColor() - { - return widget.getTextColor(); - } - - public String getName() - { - return widget.getName().replace('\u00A0', ' '); - } - - public int getModelId() - { - return widget.getModelId(); - } - - public int getSpriteId() - { - return widget.getSpriteId(); - } - - public boolean isHidden() - { - Widget parent = getParent(); - return (parent != null && parent.isHidden()) || widget.isHidden(); - } - - public Point getCanvasLocation() - { - int x = 0; - int y = 0; - Widget cur; - - for (cur = this; cur.getParent() != null; cur = cur.getParent()) - { - x += cur.getRelativeX(); - y += cur.getRelativeY(); - - x -= cur.widget.getScrollX(); - y -= cur.widget.getScrollY(); - } - - // cur is now the root - int[] widgetBoundsWidth = client.getWidgetPositionsX(); - int[] widgetBoundsHeight = client.getWidgetPositionsY(); - - int boundsIndex = cur.widget.getBoundsIndex(); - if (boundsIndex != -1) - { - x += widgetBoundsWidth[boundsIndex]; - y += widgetBoundsHeight[boundsIndex]; - - if (cur.getType() > 0) - { - x += cur.getRelativeX(); - y += cur.getRelativeY(); - } - } - else - { - x += cur.getRelativeX(); - y += cur.getRelativeY(); - } - - return new Point(x, y); - } - - public int getWidth() - { - return widget.getWidth(); - } - - public int getHeight() - { - return widget.getHeight(); - } - - public Rectangle getBounds() - { - Point canvasLocation = getCanvasLocation(); - return new Rectangle(canvasLocation.getX(), canvasLocation.getY(), getWidth(), getHeight()); - } - - public Collection getWidgetItems() - { - int[] itemIds = widget.getItemIds(); - - if (itemIds == null) - { - return null; - } - - List items = new ArrayList<>(itemIds.length); - - for (int i = 0; i < itemIds.length; ++i) - { - WidgetItem item = getWidgetItem(i); - - if (item != null) - { - items.add(item); - } - } - - return items; - } - - public WidgetItem getWidgetItem(int index) - { - int[] itemIds = widget.getItemIds(); - int[] itemQuantities = widget.getItemQuantities(); - - if (itemIds == null || itemQuantities == null) - { - return null; - } - - int columns = getWidth(); // the number of item slot columns is stored here - int paddingX = getPaddingX(); - int paddingY = getPaddingY(); - int itemId = itemIds[index]; - int itemQuantity = itemQuantities[index]; - - Point widgetCanvasLocation = getCanvasLocation(); - - if (itemId <= 0 || itemQuantity <= 0 || columns <= 0) - { - return null; - } - - int row = index / columns; - int col = index % columns; - int itemX = widgetCanvasLocation.getX() + ((ITEM_SLOT_SIZE + paddingX) * col); - int itemY = widgetCanvasLocation.getY() + ((ITEM_SLOT_SIZE + paddingY) * row); - - Rectangle bounds = new Rectangle(itemX - 1, itemY - 1, ITEM_SLOT_SIZE, ITEM_SLOT_SIZE); - return new WidgetItem(itemId - 1, itemQuantity, index, bounds); - } - - private int getPaddingX() - { - return widget.getPaddingX(); - } - - private int getPaddingY() - { - return widget.getPaddingY(); - } - - public int getItemId() - { - return widget.getItemId(); - } - - public int getItemQuantity() - { - return widget.getItemQuantity(); - } + int getItemQuantity(); } diff --git a/runelite-client/pom.xml b/runelite-client/pom.xml index 8191761efb..0e41a2c0be 100644 --- a/runelite-client/pom.xml +++ b/runelite-client/pom.xml @@ -87,7 +87,13 @@ net.runelite.rs - client + api + ${project.version} + runtime + + + net.runelite + injected-client ${project.version} runtime @@ -148,13 +154,16 @@ shaded - + - net.runelite.*:* + + net.runelite:* + + ** + + + + net.runelite.rs:api ** diff --git a/runelite-client/src/main/java/net/runelite/client/RuneLite.java b/runelite-client/src/main/java/net/runelite/client/RuneLite.java index 2391651baa..f23ff6ea3e 100644 --- a/runelite-client/src/main/java/net/runelite/client/RuneLite.java +++ b/runelite-client/src/main/java/net/runelite/client/RuneLite.java @@ -52,6 +52,7 @@ import javax.swing.UnsupportedLookAndFeelException; import joptsimple.OptionParser; import joptsimple.OptionSet; import net.runelite.api.Client; +import net.runelite.api.Query; import net.runelite.client.account.AccountSession; import net.runelite.client.config.ConfigManager; import net.runelite.client.events.SessionClose; @@ -428,4 +429,9 @@ public class RuneLite { return infoBoxManager; } + + public T[] runQuery(Query query) + { + return (T[]) query.result(client); + } } diff --git a/runelite-client/src/main/java/net/runelite/client/callback/Hooks.java b/runelite-client/src/main/java/net/runelite/client/callback/Hooks.java index 41182b6637..8ec9276c4a 100644 --- a/runelite-client/src/main/java/net/runelite/client/callback/Hooks.java +++ b/runelite-client/src/main/java/net/runelite/client/callback/Hooks.java @@ -27,7 +27,9 @@ package net.runelite.client.callback; import java.awt.Graphics; import java.awt.image.BufferedImage; import net.runelite.api.ChatMessageType; +import net.runelite.api.MainBufferProvider; import net.runelite.api.MenuAction; +import net.runelite.api.MessageNode; import net.runelite.api.Skill; import net.runelite.client.RuneLite; import net.runelite.client.events.*; @@ -35,8 +37,6 @@ import net.runelite.client.game.DeathChecker; import net.runelite.client.task.Scheduler; import net.runelite.client.ui.overlay.OverlayRenderer; import net.runelite.client.ui.overlay.infobox.InfoBoxManager; -import net.runelite.rs.api.MainBufferProvider; -import net.runelite.rs.api.MessageNode; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -205,7 +205,7 @@ public class Hooks // Hook is fired prior to actually setting these on the MessageNode, so send them // in the event too. SetMessage setMessage = new SetMessage(); - setMessage.setMessageNode(new net.runelite.api.MessageNode(messageNode)); + setMessage.setMessageNode(messageNode); setMessage.setType(ChatMessageType.of(type)); setMessage.setName(name); setMessage.setSender(sender); diff --git a/runelite-client/src/main/java/net/runelite/client/menus/MenuManager.java b/runelite-client/src/main/java/net/runelite/client/menus/MenuManager.java index 24f24b0ebe..f48740b0da 100644 --- a/runelite-client/src/main/java/net/runelite/client/menus/MenuManager.java +++ b/runelite-client/src/main/java/net/runelite/client/menus/MenuManager.java @@ -119,7 +119,7 @@ public class MenuManager client.getPlayerOptions()[playerOptionIndex] = menuText; client.getPlayerOptionsPriorities()[playerOptionIndex] = true; - client.getPlayerMenuType()[playerOptionIndex] = MenuAction.RUNELITE.getId(); + client.getPlayerMenuTypes()[playerOptionIndex] = MenuAction.RUNELITE.getId(); playerMenuIndexMap.put(playerOptionIndex, menuText); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommands.java b/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommands.java index 5f04d66514..93480ded3a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommands.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommands.java @@ -33,6 +33,7 @@ import java.util.concurrent.ScheduledExecutorService; import net.runelite.api.ChatMessageType; import net.runelite.api.Client; import net.runelite.api.GameState; +import net.runelite.api.ItemComposition; import net.runelite.api.MessageNode; import net.runelite.client.RuneLite; import net.runelite.client.events.SetMessage; @@ -46,7 +47,6 @@ import net.runelite.http.api.item.Item; import net.runelite.http.api.item.ItemClient; import net.runelite.http.api.item.ItemPrice; import net.runelite.http.api.item.SearchResult; -import net.runelite.rs.api.ItemComposition; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollOverlay.java index ca4dafbc50..f3fe61f60c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollOverlay.java @@ -31,11 +31,11 @@ import java.time.Duration; import java.time.Instant; import net.runelite.api.Client; import net.runelite.api.GameState; +import net.runelite.api.ItemComposition; import net.runelite.client.RuneLite; import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayPosition; import net.runelite.client.ui.overlay.OverlayPriority; -import net.runelite.rs.api.ItemComposition; public class ClueScrollOverlay extends Overlay { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsOverlay.java index c4ccb66e45..9beed39399 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsOverlay.java @@ -123,7 +123,7 @@ public class DevToolsOverlay extends Overlay private void renderPlayers(Graphics2D graphics) { - Player[] players = client.getPlayers(); + Player[] players = client.getCachedPlayers(); Player local = client.getLocalPlayer(); if (players != null && (players.length - 1) > 0) @@ -148,7 +148,7 @@ public class DevToolsOverlay extends Overlay private void renderNpcs(Graphics2D graphics) { - NPC[] npcs = client.getNpcs(); + NPC[] npcs = client.getCachedNPCs(); if (npcs != null && (npcs.length - 1) > 0) { for (NPC npc : npcs) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingSpotOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingSpotOverlay.java index 5fd8c333ab..26f5c724df 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingSpotOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/fishing/FishingSpotOverlay.java @@ -53,8 +53,9 @@ class FishingSpotOverlay extends Overlay private final List ids = new ArrayList<>(); + private final RuneLite runelite = RuneLite.getRunelite(); + private final Client client = RuneLite.getClient(); private final FishingConfig config; - private final static Client client = RuneLite.getClient(); public FishingSpotOverlay(FishingPlugin plugin) { @@ -72,7 +73,7 @@ class FishingSpotOverlay extends Overlay NPCQuery query = new NPCQuery() .idEquals(Ints.toArray(ids)); - NPC[] npcs = client.runQuery(query); + NPC[] npcs = runelite.runQuery(query); for (NPC npc : npcs) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsOverlay.java index 719d685be9..c6bb1f4c27 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsOverlay.java @@ -41,6 +41,7 @@ import java.util.concurrent.TimeUnit; import net.runelite.api.Client; import net.runelite.api.GameState; import net.runelite.api.Item; +import net.runelite.api.ItemComposition; import net.runelite.api.ItemLayer; import net.runelite.api.Node; import net.runelite.api.Player; @@ -53,7 +54,6 @@ import net.runelite.client.RuneLite; import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayPosition; import net.runelite.http.api.item.ItemPrice; -import net.runelite.rs.api.ItemComposition; public class GroundItemsOverlay extends Overlay { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/implings/ImplingsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/implings/ImplingsOverlay.java index 015fd0fc25..52417c2285 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/implings/ImplingsOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/implings/ImplingsOverlay.java @@ -54,11 +54,12 @@ public class ImplingsOverlay extends Overlay private static final int STATIC_SPAWN = 1618; private static final int DYNAMIC_SPAWN = 1633; + private final RuneLite runelite = RuneLite.getRunelite(); + private final Client client = RuneLite.getClient(); + private final ImplingsConfig config; private final List ids; - private final Client client = RuneLite.getClient(); - public ImplingsOverlay(Implings plugin) { super(OverlayPosition.DYNAMIC); @@ -75,7 +76,7 @@ public class ImplingsOverlay extends Overlay } NPCQuery implingQuery = new NPCQuery().idEquals(Ints.toArray(ids)); - NPC[] implings = client.runQuery(implingQuery); + NPC[] implings = runelite.runQuery(implingQuery); for (NPC imp : implings) { //Spawns have the name "null", so they get changed to "Spawn" diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/mousehighlight/MouseHighlightOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/mousehighlight/MouseHighlightOverlay.java index 69b854a20c..eff4ee0855 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/mousehighlight/MouseHighlightOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/mousehighlight/MouseHighlightOverlay.java @@ -66,7 +66,7 @@ class MouseHighlightOverlay extends Overlay String[] targets = client.getMenuTargets(); String[] options = client.getMenuOptions(); - int count = client.getMenuCount() - 1; + int count = client.getMenuOptionCount() - 1; if (count < 0 || count >= targets.length || count >= options.length) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/pestcontrol/PestControlOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/pestcontrol/PestControlOverlay.java index 772a4d4c63..09d9ef20aa 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/pestcontrol/PestControlOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/pestcontrol/PestControlOverlay.java @@ -54,7 +54,9 @@ public class PestControlOverlay extends Overlay { private static final Logger logger = LoggerFactory.getLogger(PestControlOverlay.class); + private final RuneLite runelite = RuneLite.getRunelite(); private final Client client = RuneLite.getClient(); + private final PestControl plugin; // Pest control game @@ -107,7 +109,7 @@ public class PestControlOverlay extends Overlay private void renderSpinners(Graphics2D graphics) { Query query = new NPCQuery().nameEquals("Spinner"); - NPC[] result = client.runQuery(query); + NPC[] result = runelite.runQuery(query); Arrays.stream(result).forEach(npc -> OverlayUtil.renderActorOverlay(graphics, npc, npc.getName(), Color.CYAN)); } @@ -266,4 +268,4 @@ public class PestControlOverlay extends Overlay { return widget.getText().trim().equals("0"); } -} \ No newline at end of file +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesOverlay.java index 634ebe2689..4dd31949f3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesOverlay.java @@ -93,7 +93,7 @@ public class XpGlobesOverlay extends Overlay } //check the width of the client if we can draw properly - int clientWidth = client.isResized() ? client.getClientWidth() : client.getViewportHeight(); + int clientWidth = client.isResized() ? client.getCanvas().getWidth() : client.getViewportHeight(); if (clientWidth <= 0) { return null; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/zulrah/Zulrah.java b/runelite-client/src/main/java/net/runelite/client/plugins/zulrah/Zulrah.java index 9f8125f685..95189788d6 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/zulrah/Zulrah.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/zulrah/Zulrah.java @@ -51,6 +51,7 @@ public class Zulrah extends Plugin { private static final Logger logger = LoggerFactory.getLogger(Zulrah.class); + private final RuneLite runelite = RuneLite.getRunelite(); private final Client client = RuneLite.getClient(); private final StatusOverlay overlay = new StatusOverlay(this); @@ -171,7 +172,7 @@ public class Zulrah extends Plugin private NPC findZulrah() { Query query = new NPCQuery().nameEquals("Zulrah"); - NPC[] result = client.runQuery(query); + NPC[] result = runelite.runQuery(query); return result.length == 1 ? result[0] : null; } diff --git a/runelite-client/src/main/java/net/runelite/client/ui/ClientPanel.java b/runelite-client/src/main/java/net/runelite/client/ui/ClientPanel.java index 5c99632a9d..6366c2bc30 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/ClientPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/ClientPanel.java @@ -84,13 +84,14 @@ final class ClientPanel extends JPanel return; } - if (!(rs instanceof net.runelite.rs.api.Client)) + if (!(rs instanceof Client)) { logger.error("Injected client does not implement Client!"); System.exit(-1); } - Client client = new Client((net.runelite.rs.api.Client) rs); + Client client = (Client) rs; + RuneLite.setClient(client); // This causes the whole game frame to be redrawn each frame instead diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/TopDownRendererRight.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/TopDownRendererRight.java index e04b7f450f..bdb1067abf 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/TopDownRendererRight.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/TopDownRendererRight.java @@ -52,8 +52,8 @@ public class TopDownRendererRight implements Renderer overlays.sort((o1, o2) -> o2.getPriority().compareTo(o1.getPriority())); int y = BORDER_TOP; - int clientWidth = client.getClientWidth(); - int clientHeight = client.getClientHeight(); + int clientWidth = client.getCanvas().getWidth(); + int clientHeight = client.getCanvas().getHeight(); for (Overlay overlay : overlays) { diff --git a/runelite-mixins/pom.xml b/runelite-mixins/pom.xml new file mode 100644 index 0000000000..47140c838b --- /dev/null +++ b/runelite-mixins/pom.xml @@ -0,0 +1,63 @@ + + + + 4.0.0 + + + net.runelite + runelite-parent + 1.2.3-SNAPSHOT + + + net.runelite + mixins + Runelite Mixins + + + + net.runelite.rs + api + ${project.version} + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.6.1 + + + 1.6 + 1.6 + + + + + diff --git a/runelite-mixins/src/main/java/net/runelite/api/mixins/Inject.java b/runelite-mixins/src/main/java/net/runelite/api/mixins/Inject.java new file mode 100644 index 0000000000..9db13ca5c0 --- /dev/null +++ b/runelite-mixins/src/main/java/net/runelite/api/mixins/Inject.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2017, Adam + * 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.mixins; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.METHOD) +public @interface Inject +{ + +} diff --git a/runelite-mixins/src/main/java/net/runelite/api/mixins/Mixin.java b/runelite-mixins/src/main/java/net/runelite/api/mixins/Mixin.java new file mode 100644 index 0000000000..6efd9d41fa --- /dev/null +++ b/runelite-mixins/src/main/java/net/runelite/api/mixins/Mixin.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2017, Adam + * 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.mixins; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Repeatable; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +@Repeatable(Mixins.class) +public @interface Mixin +{ + /** + * Class to inject this mixin into + * + * @return + */ + Class value(); +} diff --git a/runelite-mixins/src/main/java/net/runelite/api/mixins/Mixins.java b/runelite-mixins/src/main/java/net/runelite/api/mixins/Mixins.java new file mode 100644 index 0000000000..2d55b71e51 --- /dev/null +++ b/runelite-mixins/src/main/java/net/runelite/api/mixins/Mixins.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2017, Adam + * 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.mixins; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface Mixins +{ + Mixin[] value(); +} diff --git a/runelite-mixins/src/main/java/net/runelite/api/mixins/Shadow.java b/runelite-mixins/src/main/java/net/runelite/api/mixins/Shadow.java new file mode 100644 index 0000000000..8b177eab19 --- /dev/null +++ b/runelite-mixins/src/main/java/net/runelite/api/mixins/Shadow.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2017, Adam + * 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.mixins; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +public @interface Shadow +{ + String value(); +} diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSActorMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSActorMixin.java new file mode 100644 index 0000000000..82e5e29b5b --- /dev/null +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSActorMixin.java @@ -0,0 +1,148 @@ +/* + * Copyright (c) 2016-2017, Adam + * 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.mixins; + +import java.awt.Graphics2D; +import java.awt.Polygon; +import java.awt.image.BufferedImage; +import net.runelite.api.Actor; +import net.runelite.api.Perspective; +import net.runelite.api.Point; +import net.runelite.api.mixins.Inject; +import net.runelite.api.mixins.Mixin; +import net.runelite.api.mixins.Shadow; +import net.runelite.rs.api.RSActor; +import net.runelite.rs.api.RSClient; +import net.runelite.rs.api.RSCombatInfo1; +import net.runelite.rs.api.RSCombatInfo2; +import net.runelite.rs.api.RSCombatInfoList; +import net.runelite.rs.api.RSCombatInfoListHolder; +import net.runelite.rs.api.RSNode; + +@Mixin(RSActor.class) +public abstract class RSActorMixin implements RSActor +{ + @Shadow("clientInstance") + private static RSClient client; + + @Inject + @Override + public Actor getInteracting() + { + int i = getRSInteracting(); + if (i == -1) + { + return null; + } + + if (i < 0x8000) + { + return client.getNpc(i); + } + + i -= 0x8000; + return client.getPlayer(i); + } + + @Inject + @Override + public int getHealthRatio() + { + RSCombatInfoList combatInfoList = getCombatInfoList(); + if (combatInfoList != null) + { + RSNode node = combatInfoList.getNode(); + RSNode next = node.getNext(); + if (next instanceof RSCombatInfoListHolder) + { + RSCombatInfoListHolder combatInfoListWrapper = (RSCombatInfoListHolder) next; + RSCombatInfoList combatInfoList1 = combatInfoListWrapper.getCombatInfo1(); + + RSNode node2 = combatInfoList1.getNode(); + RSNode next2 = node2.getNext(); + if (next2 instanceof RSCombatInfo1) + { + RSCombatInfo1 combatInfo = (RSCombatInfo1) next2; + return combatInfo.getHealthRatio(); + } + } + } + return -1; + } + + @Inject + @Override + public int getHealth() + { + RSCombatInfoList combatInfoList = getCombatInfoList(); + if (combatInfoList != null) + { + RSNode node = combatInfoList.getNode(); + RSNode next = node.getNext(); + if (next instanceof RSCombatInfoListHolder) + { + RSCombatInfoListHolder combatInfoListWrapper = (RSCombatInfoListHolder) next; + RSCombatInfo2 cf = combatInfoListWrapper.getCombatInfo2(); + return cf.getHealthScale(); + } + } + return -1; + } + + @Inject + @Override + public Point getLocalLocation() + { + return new Point(getX(), getY()); + } + + @Inject + @Override + public Polygon getCanvasTilePoly() + { + return Perspective.getCanvasTilePoly(client, getLocalLocation()); + } + + @Inject + @Override + public Point getCanvasTextLocation(Graphics2D graphics, String text, int zOffset) + { + return Perspective.getCanvasTextLocation(client, graphics, getLocalLocation(), text, zOffset); + } + + @Inject + @Override + public Point getCanvasImageLocation(Graphics2D graphics, BufferedImage image, int zOffset) + { + return Perspective.getCanvasImageLocation(client, graphics, getLocalLocation(), image, zOffset); + } + + @Inject + @Override + public Point getMinimapLocation() + { + return Perspective.worldToMiniMap(client, getX(), getY()); + } +} diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java new file mode 100644 index 0000000000..866b81bb71 --- /dev/null +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java @@ -0,0 +1,225 @@ +/* + * Copyright (c) 2016-2017, Adam + * 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.mixins; + +import java.util.ArrayList; +import java.util.List; +import net.runelite.api.GameState; +import net.runelite.api.NPC; +import net.runelite.api.Player; +import net.runelite.api.Point; +import net.runelite.api.Prayer; +import net.runelite.api.Skill; +import net.runelite.api.Varbits; +import net.runelite.api.widgets.Widget; +import net.runelite.api.widgets.WidgetInfo; +import net.runelite.api.mixins.Inject; +import net.runelite.api.mixins.Mixin; +import net.runelite.rs.api.RSClient; +import net.runelite.rs.api.RSWidget; + +@Mixin(RSClient.class) +public abstract class RSClientMixin implements RSClient +{ + @Inject + @Override + public Player getPlayer(int idx) + { + return getCachedPlayers()[idx]; + } + + @Inject + @Override + public NPC getNpc(int idx) + { + return getCachedNPCs()[idx]; + } + + @Inject + @Override + public int getBoostedSkillLevel(Skill skill) + { + int[] boostedLevels = getBoostedSkillLevels(); + return boostedLevels[skill.ordinal()]; + } + + @Inject + @Override + public int getRealSkillLevel(Skill skill) + { + int[] realLevels = getRealSkillLevels(); + return realLevels[skill.ordinal()]; + } + + @Inject + @Override + public void sendGameMessage(String message) + { + sendGameMessage(99, "", message); + } + + @Inject + @Override + public GameState getGameState() + { + return GameState.of(getRSGameState()); + } + + @Inject + @Override + public Point getMouseCanvasPosition() + { + return new Point(getMouseX(), getMouseY()); + } + + @Inject + @Override + public Widget[] getWidgetRoots() + { + int topGroup = getWidgetRoot(); + List widgets = new ArrayList(); + for (Widget widget : getWidgets()[topGroup]) + { + if (widget != null && widget.getParentId() == -1) + { + widgets.add(widget); + } + } + return widgets.toArray(new Widget[widgets.size()]); + } + + @Inject + @Override + public Widget getWidget(WidgetInfo widget) + { + int groupId = widget.getGroupId(); + int childId = widget.getChildId(); + + return getWidget(groupId, childId); + } + + @Inject + @Override + public Widget[] getGroup(int groupId) + { + RSWidget[][] widgets = getWidgets(); + + if (widgets == null || groupId < 0 || groupId >= widgets.length) + { + return null; + } + + List w = new ArrayList(); + for (Widget widget : widgets[groupId]) + { + if (widget != null) + { + w.add(widget); + } + } + return w.toArray(new Widget[w.size()]); + } + + @Inject + @Override + public Widget getWidget(int groupId, int childId) + { + RSWidget[][] widgets = getWidgets(); + + if (widgets == null || widgets.length <= groupId) + { + return null; + } + + RSWidget[] childWidgets = widgets[groupId]; + if (childWidgets == null || childWidgets.length <= childId) + { + return null; + } + + return childWidgets[childId]; + } + + @Inject + @Override + public int getSetting(Varbits varbit) + { + int[] settings = getSettings(); + int value = settings[varbit.getIndex()]; + return varbit.get(value); + } + + @Inject + @Override + public boolean isPrayerActive(Prayer prayer) + { + return getSetting(prayer.getVarbit()) == 1; + } + + /** + * Returns the local player's current experience in the specified + * {@link Skill}. + * + * @param skill the {@link Skill} to retrieve the experience for + * @return the local player's current experience in the specified + * {@link Skill}, or -1 if the {@link Skill} isn't valid + */ + @Inject + @Override + public int getSkillExperience(Skill skill) + { + int[] experiences = getSkillExperiences(); + + if (skill == Skill.OVERALL) + { + int totalExperience = 0; + + for (int experience : experiences) + { + totalExperience += experience; + } + + return totalExperience; + } + + int idx = skill.ordinal(); + + // I'm not certain exactly how needed this is, but if the Skill enum is updated in the future + // to hold something else that's not reported it'll save us from an ArrayIndexOutOfBoundsException. + if (idx >= experiences.length) + { + return -1; + } + + return experiences[idx]; + } + + @Inject + @Override + public void refreshChat() + { + setChatCycle(getCycleCntr()); + } +} diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSDecorativeObjectMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSDecorativeObjectMixin.java new file mode 100644 index 0000000000..42160674e2 --- /dev/null +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSDecorativeObjectMixin.java @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2016-2017, Adam + * 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.mixins; + +import java.awt.Polygon; +import net.runelite.api.Model; +import net.runelite.api.Renderable; +import net.runelite.api.mixins.Inject; +import net.runelite.api.mixins.Mixin; +import net.runelite.rs.api.RSDecorativeObject; + +@Mixin(RSDecorativeObject.class) +public abstract class RSDecorativeObjectMixin implements RSDecorativeObject +{ + @Inject + @Override + public Polygon getConvexHull() + { + Renderable renderable = getRenderable(); + if (renderable == null) + { + return null; + } + + Model model; + + if (renderable instanceof Model) + { + model = (Model) renderable; + } + else + { + model = renderable.getModel(); + } + + if (model == null) + { + return null; + } + + return getConvexHull(model, getOrientation()); + } +} diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSGameObjectMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSGameObjectMixin.java new file mode 100644 index 0000000000..4c549c5235 --- /dev/null +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSGameObjectMixin.java @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2016-2017, Adam + * 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.mixins; + +import java.awt.Polygon; +import net.runelite.api.Model; +import net.runelite.api.Renderable; +import net.runelite.api.mixins.Inject; +import net.runelite.api.mixins.Mixin; +import net.runelite.rs.api.RSGameObject; + +@Mixin(RSGameObject.class) +public abstract class RSGameObjectMixin implements RSGameObject +{ + @Inject + @Override + public Polygon getConvexHull() + { + Renderable renderable = getRenderable(); + if (renderable == null) + { + return null; + } + + Model model; + + if (renderable instanceof Model) + { + model = (Model) renderable; + } + else + { + model = renderable.getModel(); + } + + if (model == null) + { + return null; + } + + return getConvexHull(model, getOrientation()); + } +} diff --git a/runelite-api/src/main/java/net/runelite/api/XHashTable.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSHashTableMixin.java similarity index 75% rename from runelite-api/src/main/java/net/runelite/api/XHashTable.java rename to runelite-mixins/src/main/java/net/runelite/mixins/RSHashTableMixin.java index 304224b5f4..25426d526f 100644 --- a/runelite-api/src/main/java/net/runelite/api/XHashTable.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSHashTableMixin.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, Adam + * Copyright (c) 2016-2017, Adam * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -22,36 +22,37 @@ * (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; +package net.runelite.mixins; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import net.runelite.api.Node; +import net.runelite.api.mixins.Inject; +import net.runelite.api.mixins.Mixin; +import net.runelite.rs.api.RSHashTable; +import net.runelite.rs.api.RSNode; -public class XHashTable +@Mixin(RSHashTable.class) +public abstract class RSHashTableMixin implements RSHashTable { - private final net.runelite.rs.api.XHashTable hashtable; - - public XHashTable(net.runelite.rs.api.XHashTable hashtable) - { - this.hashtable = hashtable; - } - + @Inject + @Override public Collection getNodes() { - List nodes = new ArrayList<>(); + List nodes = new ArrayList(); - net.runelite.rs.api.Node[] buckets = hashtable.getBuckets(); + RSNode[] buckets = getBuckets(); for (int i = 0; i < buckets.length; ++i) { - net.runelite.rs.api.Node node = buckets[i]; + Node node = buckets[i]; // It looks like the first node in the bucket is always // a sentinel - net.runelite.rs.api.Node cur = node.getNext(); + Node cur = node.getNext(); while (cur != node) { - nodes.add(Node.of(cur)); + nodes.add(cur); cur = cur.getNext(); } } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSMessageNodeMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSMessageNodeMixin.java new file mode 100644 index 0000000000..cee32848e7 --- /dev/null +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSMessageNodeMixin.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2016-2017, Adam + * 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.mixins; + +import net.runelite.api.ChatMessageType; +import net.runelite.api.mixins.Inject; +import net.runelite.api.mixins.Mixin; +import net.runelite.rs.api.RSMessageNode; + +@Mixin(RSMessageNode.class) +public abstract class RSMessageNodeMixin implements RSMessageNode +{ + @Inject + @Override + public ChatMessageType getType() + { + return ChatMessageType.of(getRSType()); + } +} diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSModelMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSModelMixin.java new file mode 100644 index 0000000000..7451255ebb --- /dev/null +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSModelMixin.java @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2016-2017, Adam + * 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.mixins; + +import java.util.ArrayList; +import java.util.List; +import net.runelite.api.model.Triangle; +import net.runelite.api.model.Vertex; +import net.runelite.api.mixins.Inject; +import net.runelite.api.mixins.Mixin; +import net.runelite.rs.api.RSModel; + +@Mixin(RSModel.class) +public abstract class RSModelMixin implements RSModel +{ + @Override + @Inject + public List getVertices() + { + int[] verticesX = getVerticesX(); + int[] verticesY = getVerticesY(); + int[] verticesZ = getVerticesZ(); + + List vertices = new ArrayList(); + + for (int i = 0; i < verticesX.length; ++i) + { + Vertex v = new Vertex( + verticesX[i], + verticesY[i], + verticesZ[i] + ); + vertices.add(v); + } + + return vertices; + } + + @Override + @Inject + public List getTriangles() + { + int[] trianglesX = getTrianglesX(); + int[] trianglesY = getTrianglesY(); + int[] trianglesZ = getTrianglesZ(); + + List vertices = getVertices(); + List triangles = new ArrayList(trianglesX.length); + + for (int i = 0; i < trianglesX.length; ++i) + { + int triangleX = trianglesX[i]; + int triangleY = trianglesY[i]; + int triangleZ = trianglesZ[i]; + + Triangle triangle = new Triangle( + vertices.get(triangleX), + vertices.get(triangleY), + vertices.get(triangleZ) + ); + triangles.add(triangle); + } + + return triangles; + } +} diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSNPCMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSNPCMixin.java new file mode 100644 index 0000000000..d939576e33 --- /dev/null +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSNPCMixin.java @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2016-2017, Adam + * 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.mixins; + +import net.runelite.api.mixins.Inject; +import net.runelite.api.mixins.Mixin; +import net.runelite.rs.api.RSNPC; + +@Mixin(RSNPC.class) +public abstract class RSNPCMixin implements RSNPC +{ + @Inject + @Override + public int getId() + { + return getComposition().getId(); + } + + @Inject + @Override + public String getName() + { + return getComposition().getName().replace('\u00A0', ' '); + } + + @Inject + @Override + public int getCombatLevel() + { + return getComposition().getCombatLevel(); + } +} diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSPlayerCompositionMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSPlayerCompositionMixin.java new file mode 100644 index 0000000000..d52b267daf --- /dev/null +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSPlayerCompositionMixin.java @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2016-2017, Adam + * 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.mixins; + +import net.runelite.api.kit.KitType; +import net.runelite.api.mixins.Inject; +import net.runelite.api.mixins.Mixin; +import net.runelite.rs.api.RSPlayerComposition; + +@Mixin(RSPlayerComposition.class) +public abstract class RSPlayerCompositionMixin implements RSPlayerComposition +{ + @Inject + @Override + public int getEquipmentId(KitType type) + { + int id = getEquipmentIds()[type.getIndex()]; + if (id < 512) + { + return -1; // not an item + } + return id - 512; + } + + @Inject + @Override + public int getKitId(KitType type) + { + int id = getEquipmentIds()[type.getIndex()]; + if (id < 256 || id >= 512) + { + return -1; // not a kit + } + return id - 256; + } +} diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSPlayerMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSPlayerMixin.java new file mode 100644 index 0000000000..6722218420 --- /dev/null +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSPlayerMixin.java @@ -0,0 +1,133 @@ +/* + * Copyright (c) 2016-2017, Adam + * 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.mixins; + +import java.awt.Polygon; +import java.util.ArrayList; +import java.util.List; +import net.runelite.api.Model; +import net.runelite.api.Perspective; +import net.runelite.api.Point; +import net.runelite.api.model.Triangle; +import net.runelite.api.model.Vertex; +import net.runelite.api.mixins.Inject; +import net.runelite.api.mixins.Mixin; +import net.runelite.api.mixins.Shadow; +import net.runelite.rs.api.RSClient; +import net.runelite.rs.api.RSPlayer; + +@Mixin(RSPlayer.class) +public abstract class RSPlayerMixin implements RSPlayer +{ + @Shadow("clientInstance") + private static RSClient client; + + @Inject + @Override + public String getName() + { + return getRSName().replace('\u00A0', ' '); + } + + @Inject + @Override + public Polygon[] getPolygons() + { + Model model = getModel(); + + if (model == null) + { + return null; + } + + int localX = getX(); + int localY = getY(); + + // models are orientated north (1024) and there are 2048 angles total + int orientation = (getOrientation() + 1024) % 2048; + + List triangles = model.getTriangles(); + + if (orientation != 0) + { + triangles = rotate(triangles, orientation); + } + + List polys = new ArrayList(); + for (Triangle triangle : triangles) + { + Vertex vx = triangle.getA(); + Vertex vy = triangle.getB(); + Vertex vz = triangle.getC(); + + Point x = Perspective.worldToCanvas(client, + localX - vx.getX(), + localY - vx.getZ(), + -vx.getY()); + + Point y = Perspective.worldToCanvas(client, + localX - vy.getX(), + localY - vy.getZ(), + -vy.getY()); + + Point z = Perspective.worldToCanvas(client, + localX - vz.getX(), + localY - vz.getZ(), + -vz.getY()); + + int xx[] = + { + x.getX(), y.getX(), z.getX() + }; + int yy[] = + { + x.getY(), y.getY(), z.getY() + }; + polys.add(new Polygon(xx, yy, 3)); + } + + return polys.toArray(new Polygon[polys.size()]); + } + + @Inject + private List rotate(List triangles, int orientation) + { + List rotatedTriangles = new ArrayList(); + for (Triangle triangle : triangles) + { + Vertex a = triangle.getA(); + Vertex b = triangle.getB(); + Vertex c = triangle.getC(); + + Triangle rotatedTriangle = new Triangle( + a.rotate(orientation), + b.rotate(orientation), + c.rotate(orientation) + ); + rotatedTriangles.add(rotatedTriangle); + } + return rotatedTriangles; + } +} diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSWidgetMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSWidgetMixin.java new file mode 100644 index 0000000000..05366fbd04 --- /dev/null +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSWidgetMixin.java @@ -0,0 +1,310 @@ +/* + * Copyright (c) 2016-2017, Adam + * 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.mixins; + +import java.awt.Rectangle; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import net.runelite.api.Node; +import net.runelite.api.Point; +import net.runelite.api.WidgetNode; +import net.runelite.api.widgets.Widget; +import static net.runelite.api.widgets.WidgetInfo.TO_CHILD; +import static net.runelite.api.widgets.WidgetInfo.TO_GROUP; +import net.runelite.api.widgets.WidgetItem; +import net.runelite.api.mixins.Inject; +import net.runelite.api.mixins.Mixin; +import net.runelite.api.mixins.Shadow; +import net.runelite.rs.api.RSClient; +import net.runelite.rs.api.RSHashTable; +import net.runelite.rs.api.RSWidget; + +@Mixin(RSWidget.class) +public abstract class RSWidgetMixin implements RSWidget +{ + private static final int ITEM_SLOT_SIZE = 32; + + @Shadow("clientInstance") + private static RSClient client; + + @Inject + @Override + public Widget getParent() + { + int id = getParentId(); + if (id == -1) + { + return null; + } + + return client.getWidget(TO_GROUP(id), TO_CHILD(id)); + } + + @Inject + @Override + public int getParentId() + { + int parentId = getRSParentId(); + if (parentId != -1) + { + return parentId; + } + + int i = TO_GROUP(getId()); + RSHashTable componentTable = client.getComponentTable(); + for (Node node : componentTable.getNodes()) + { + WidgetNode wn = (WidgetNode) node; + + if (i == wn.getId()) + { + return (int) wn.getHash(); + } + } + + return -1; + } + + @Inject + @Override + public String getText() + { + return getRSText().replace('\u00A0', ' '); + } + + @Inject + @Override + public String getName() + { + return getRSName().replace('\u00A0', ' '); + } + + @Inject + @Override + public boolean isHidden() + { + Widget parent = getParent(); + return (parent != null && parent.isHidden()) || isRSHidden(); + } + + @Inject + @Override + public Point getCanvasLocation() + { + int x = 0; + int y = 0; + RSWidget cur; + + for (cur = this; cur.getParent() != null; cur = (RSWidget) cur.getParent()) + { + x += cur.getRelativeX(); + y += cur.getRelativeY(); + + x -= cur.getScrollX(); + y -= cur.getScrollY(); + } + + // cur is now the root + int[] widgetBoundsWidth = client.getWidgetPositionsX(); + int[] widgetBoundsHeight = client.getWidgetPositionsY(); + + int boundsIndex = cur.getBoundsIndex(); + if (boundsIndex != -1) + { + x += widgetBoundsWidth[boundsIndex]; + y += widgetBoundsHeight[boundsIndex]; + + if (cur.getType() > 0) + { + x += cur.getRelativeX(); + y += cur.getRelativeY(); + } + } + else + { + x += cur.getRelativeX(); + y += cur.getRelativeY(); + } + + return new Point(x, y); + } + + @Inject + @Override + public Rectangle getBounds() + { + Point canvasLocation = getCanvasLocation(); + return new Rectangle(canvasLocation.getX(), canvasLocation.getY(), getWidth(), getHeight()); + } + + @Inject + @Override + public Collection getWidgetItems() + { + int[] itemIds = getItemIds(); + + if (itemIds == null) + { + return null; + } + + List items = new ArrayList(itemIds.length); + + for (int i = 0; i < itemIds.length; ++i) + { + WidgetItem item = getWidgetItem(i); + + if (item != null) + { + items.add(item); + } + } + + return items; + } + + @Inject + @Override + public WidgetItem getWidgetItem(int index) + { + int[] itemIds = getItemIds(); + int[] itemQuantities = getItemQuantities(); + + if (itemIds == null || itemQuantities == null) + { + return null; + } + + int columns = getWidth(); // the number of item slot columns is stored here + int paddingX = getPaddingX(); + int paddingY = getPaddingY(); + int itemId = itemIds[index]; + int itemQuantity = itemQuantities[index]; + + Point widgetCanvasLocation = getCanvasLocation(); + + if (itemId <= 0 || itemQuantity <= 0 || columns <= 0) + { + return null; + } + + int row = index / columns; + int col = index % columns; + int itemX = widgetCanvasLocation.getX() + ((ITEM_SLOT_SIZE + paddingX) * col); + int itemY = widgetCanvasLocation.getY() + ((ITEM_SLOT_SIZE + paddingY) * row); + + Rectangle bounds = new Rectangle(itemX - 1, itemY - 1, ITEM_SLOT_SIZE, ITEM_SLOT_SIZE); + return new WidgetItem(itemId - 1, itemQuantity, index, bounds); + } + + @Inject + @Override + public Widget getChild(int index) + { + RSWidget[] widgets = getChildren(); + + if (widgets == null || widgets[index] == null) + { + return null; + } + + return widgets[index]; + } + + @Inject + @Override + public Widget[] getDynamicChildren() + { + RSWidget[] children = getChildren(); + + if (children == null) + { + return new Widget[0]; + } + + List widgets = new ArrayList(); + for (Widget widget : children) + { + if (widget != null && widget.getParentId() == getId()) + { + widgets.add(widget); + } + } + return widgets.toArray(new Widget[widgets.size()]); + } + + @Inject + @Override + public Widget[] getStaticChildren() + { + List widgets = new ArrayList(); + for (Widget widget : client.getGroup(TO_GROUP(getId()))) + { + if (widget != null && widget.getParentId() == getId()) + { + widgets.add(widget); + } + } + return widgets.toArray(new Widget[widgets.size()]); + } + + @Inject + @Override + public Widget[] getNestedChildren() + { + RSHashTable componentTable = client.getComponentTable(); + int group = -1; + + // XXX can actually use hashtable lookup instead of table + // iteration here... + for (Node node : componentTable.getNodes()) + { + WidgetNode wn = (WidgetNode) node; + + if (wn.getHash() == getId()) + { + group = wn.getId(); + break; + } + } + + if (group == -1) + { + return new Widget[0]; + } + + List widgets = new ArrayList(); + for (Widget widget : client.getGroup(group)) + { + if (widget != null && widget.getParentId() == getId()) + { + widgets.add(widget); + } + } + return widgets.toArray(new Widget[widgets.size()]); + } + +} diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/TileObjectMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/TileObjectMixin.java new file mode 100644 index 0000000000..dba2997fcf --- /dev/null +++ b/runelite-mixins/src/main/java/net/runelite/mixins/TileObjectMixin.java @@ -0,0 +1,165 @@ +/* + * Copyright (c) 2016-2017, Adam + * 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.mixins; + +import java.awt.Graphics2D; +import java.awt.Polygon; +import java.util.ArrayList; +import java.util.List; +import net.runelite.api.Model; +import net.runelite.api.Perspective; +import net.runelite.api.Point; +import net.runelite.api.TileObject; +import net.runelite.api.model.Jarvis; +import net.runelite.api.model.Vertex; +import net.runelite.api.mixins.Inject; +import net.runelite.api.mixins.Mixin; +import net.runelite.api.mixins.Mixins; +import net.runelite.api.mixins.Shadow; +import net.runelite.rs.api.RSClient; +import net.runelite.rs.api.RSDecorativeObject; +import net.runelite.rs.api.RSGameObject; +import net.runelite.rs.api.RSGroundObject; +import net.runelite.rs.api.RSItemLayer; +import net.runelite.rs.api.RSWallObject; + +@Mixins({ + @Mixin(RSDecorativeObject.class), + @Mixin(RSGameObject.class), + @Mixin(RSGroundObject.class), + @Mixin(RSItemLayer.class), + @Mixin(RSWallObject.class) +}) +public abstract class TileObjectMixin implements TileObject +{ + @Shadow("clientInstance") + private static RSClient client; + + @Override + @Inject + public int getId() + { + int hash = getHash(); + return hash >> 14 & 32767; + } + + @Override + @Inject + public Point getWorldLocation() + { + Point localLocation = getLocalLocation(); + return Perspective.localToWorld(client, localLocation); + } + + @Override + @Inject + public Point getLocalLocation() + { + return new Point(getX(), getY()); + } + + @Override + @Inject + public Point getCanvasLocation() + { + Point locaLocation = getLocalLocation(); + return Perspective.worldToCanvas(client, locaLocation.getX(), locaLocation.getY(), 0); + } + + @Override + @Inject + public Polygon getCanvasTilePoly() + { + return Perspective.getCanvasTilePoly(client, getLocalLocation()); + } + + @Override + @Inject + public Point getCanvasTextLocation(Graphics2D graphics, String text, int zOffset) + { + return Perspective.getCanvasTextLocation(client, graphics, getLocalLocation(), text, zOffset); + } + + @Override + @Inject + public Point getMinimapLocation() + { + return Perspective.worldToMiniMap(client, getX(), getY()); + } + + @Override + @Inject + public Polygon getConvexHull(Model model, int orientation) + { + int localX = getX(); + int localY = getY(); + + // models are orientated north (1024) and there are 2048 angles total + orientation = (orientation + 1024) % 2048; + + List verticies = model.getVertices(); + + if (orientation != 0) + { + // rotate verticies + for (int i = 0; i < verticies.size(); ++i) + { + Vertex v = verticies.get(i); + verticies.set(i, v.rotate(orientation)); + } + } + + List points = new ArrayList(); + + for (Vertex v : verticies) + { + // Compute canvas location of vertex + Point p = Perspective.worldToCanvas(client, + localX - v.getX(), + localY - v.getZ(), + -v.getY()); + if (p != null) + { + points.add(p); + } + } + + // Run Jarvis march algorithm + points = Jarvis.convexHull(points); + if (points == null) + { + return null; + } + + // Convert to a polygon + Polygon p = new Polygon(); + for (Point point : points) + { + p.addPoint(point.getX(), point.getY()); + } + + return p; + } +} diff --git a/runescape-api/pom.xml b/runescape-api/pom.xml index f67d8d0c48..85129a522d 100644 --- a/runescape-api/pom.xml +++ b/runescape-api/pom.xml @@ -35,4 +35,12 @@ net.runelite.rs api RuneScape API + + + + net.runelite + api + ${project.version} + + diff --git a/runescape-api/src/main/java/net/runelite/mapping/Export.java b/runescape-api/src/main/java/net/runelite/mapping/Export.java index ed2f29a842..3a47639758 100644 --- a/runescape-api/src/main/java/net/runelite/mapping/Export.java +++ b/runescape-api/src/main/java/net/runelite/mapping/Export.java @@ -22,7 +22,6 @@ * (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.mapping; import java.lang.annotation.ElementType; @@ -31,7 +30,10 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) -@Target({ElementType.FIELD, ElementType.METHOD}) +@Target( + { + ElementType.FIELD, ElementType.METHOD + }) public @interface Export { String value(); diff --git a/runescape-api/src/main/java/net/runelite/mapping/Hook.java b/runescape-api/src/main/java/net/runelite/mapping/Hook.java index c129ea2025..a7cac33c8e 100644 --- a/runescape-api/src/main/java/net/runelite/mapping/Hook.java +++ b/runescape-api/src/main/java/net/runelite/mapping/Hook.java @@ -30,7 +30,10 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) -@Target({ElementType.FIELD, ElementType.METHOD, ElementType.CONSTRUCTOR}) +@Target( + { + ElementType.FIELD, ElementType.METHOD, ElementType.CONSTRUCTOR + }) public @interface Hook { String value(); diff --git a/runescape-api/src/main/java/net/runelite/mapping/Implements.java b/runescape-api/src/main/java/net/runelite/mapping/Implements.java index 15b7d09d44..4c19074e10 100644 --- a/runescape-api/src/main/java/net/runelite/mapping/Implements.java +++ b/runescape-api/src/main/java/net/runelite/mapping/Implements.java @@ -22,7 +22,6 @@ * (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.mapping; import java.lang.annotation.ElementType; diff --git a/runescape-api/src/main/java/net/runelite/mapping/Import.java b/runescape-api/src/main/java/net/runelite/mapping/Import.java index 5318b8f857..3ee85e5976 100644 --- a/runescape-api/src/main/java/net/runelite/mapping/Import.java +++ b/runescape-api/src/main/java/net/runelite/mapping/Import.java @@ -22,7 +22,6 @@ * (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.mapping; import java.lang.annotation.ElementType; @@ -31,7 +30,10 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) -@Target({ElementType.FIELD, ElementType.METHOD}) +@Target( + { + ElementType.FIELD, ElementType.METHOD + }) public @interface Import { String value(); diff --git a/runescape-api/src/main/java/net/runelite/mapping/ObfuscatedGetter.java b/runescape-api/src/main/java/net/runelite/mapping/ObfuscatedGetter.java index f890b7df28..b8e2873006 100644 --- a/runescape-api/src/main/java/net/runelite/mapping/ObfuscatedGetter.java +++ b/runescape-api/src/main/java/net/runelite/mapping/ObfuscatedGetter.java @@ -22,7 +22,6 @@ * (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.mapping; import java.lang.annotation.ElementType; @@ -35,6 +34,6 @@ import java.lang.annotation.Target; public @interface ObfuscatedGetter { int intValue() default 0; - + long longValue() default 0L; } diff --git a/runescape-api/src/main/java/net/runelite/mapping/ObfuscatedName.java b/runescape-api/src/main/java/net/runelite/mapping/ObfuscatedName.java index 45b0990a9c..10ccf9ecd4 100644 --- a/runescape-api/src/main/java/net/runelite/mapping/ObfuscatedName.java +++ b/runescape-api/src/main/java/net/runelite/mapping/ObfuscatedName.java @@ -22,7 +22,6 @@ * (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.mapping; import java.lang.annotation.ElementType; @@ -31,7 +30,10 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) -@Target({ElementType.FIELD, ElementType.METHOD, ElementType.TYPE}) +@Target( + { + ElementType.FIELD, ElementType.METHOD, ElementType.TYPE + }) public @interface ObfuscatedName { String value(); diff --git a/runescape-api/src/main/java/net/runelite/mapping/ObfuscatedOverride.java b/runescape-api/src/main/java/net/runelite/mapping/ObfuscatedOverride.java index 996f3d39e1..6c0e195c3f 100644 --- a/runescape-api/src/main/java/net/runelite/mapping/ObfuscatedOverride.java +++ b/runescape-api/src/main/java/net/runelite/mapping/ObfuscatedOverride.java @@ -22,7 +22,6 @@ * (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.mapping; import java.lang.annotation.ElementType; diff --git a/runescape-api/src/main/java/net/runelite/mapping/ObfuscatedSignature.java b/runescape-api/src/main/java/net/runelite/mapping/ObfuscatedSignature.java index 9d961cc814..1c0bf31b35 100644 --- a/runescape-api/src/main/java/net/runelite/mapping/ObfuscatedSignature.java +++ b/runescape-api/src/main/java/net/runelite/mapping/ObfuscatedSignature.java @@ -30,7 +30,10 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME) -@Target({ElementType.METHOD, ElementType.CONSTRUCTOR, ElementType.FIELD}) +@Target( + { + ElementType.METHOD, ElementType.CONSTRUCTOR, ElementType.FIELD + }) public @interface ObfuscatedSignature { String signature(); diff --git a/runescape-api/src/main/java/net/runelite/mapping/Replace.java b/runescape-api/src/main/java/net/runelite/mapping/Replace.java index bd04924aed..a8fee04c2a 100644 --- a/runescape-api/src/main/java/net/runelite/mapping/Replace.java +++ b/runescape-api/src/main/java/net/runelite/mapping/Replace.java @@ -22,7 +22,6 @@ * (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.mapping; import java.lang.annotation.ElementType; diff --git a/runescape-api/src/main/java/net/runelite/rs/api/Actor.java b/runescape-api/src/main/java/net/runelite/rs/api/RSActor.java similarity index 90% rename from runescape-api/src/main/java/net/runelite/rs/api/Actor.java rename to runescape-api/src/main/java/net/runelite/rs/api/RSActor.java index 7c7b166be3..c6955f6e90 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/Actor.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSActor.java @@ -22,15 +22,15 @@ * (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.rs.api; +import net.runelite.api.Actor; import net.runelite.mapping.Import; -public interface Actor extends Renderable +public interface RSActor extends RSRenderable, Actor { @Import("interacting") - int getInteracting(); + int getRSInteracting(); @Import("inSequence") boolean inSequence(); @@ -45,14 +45,17 @@ public interface Actor extends Renderable int getY(); @Import("animation") + @Override int getAnimation(); @Import("graphic") + @Override int getGraphic(); @Import("combatInfoList") - CombatInfoList getCombatInfoList(); + RSCombatInfoList getCombatInfoList(); @Import("orientation") + @Override int getOrientation(); } diff --git a/runescape-api/src/main/java/net/runelite/rs/api/Buffer.java b/runescape-api/src/main/java/net/runelite/rs/api/RSBuffer.java similarity index 98% rename from runescape-api/src/main/java/net/runelite/rs/api/Buffer.java rename to runescape-api/src/main/java/net/runelite/rs/api/RSBuffer.java index 6f9c45d2f2..361147d715 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/Buffer.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSBuffer.java @@ -22,12 +22,11 @@ * (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.rs.api; import net.runelite.mapping.Import; -public interface Buffer +public interface RSBuffer { @Import("payload") byte[] getPayload(); diff --git a/runescape-api/src/main/java/net/runelite/rs/api/CacheableNode.java b/runescape-api/src/main/java/net/runelite/rs/api/RSCacheableNode.java similarity index 94% rename from runescape-api/src/main/java/net/runelite/rs/api/CacheableNode.java rename to runescape-api/src/main/java/net/runelite/rs/api/RSCacheableNode.java index 505565b565..53882ccb73 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/CacheableNode.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSCacheableNode.java @@ -22,16 +22,15 @@ * (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.rs.api; import net.runelite.mapping.Import; -public interface CacheableNode +public interface RSCacheableNode { @Import("next") - CacheableNode getNext(); + RSCacheableNode getNext(); @Import("previous") - CacheableNode getPrevious(); + RSCacheableNode getPrevious(); } diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSCanvas.java b/runescape-api/src/main/java/net/runelite/rs/api/RSCanvas.java index cb26315662..db56948916 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSCanvas.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSCanvas.java @@ -22,7 +22,6 @@ * (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.rs.api; public interface RSCanvas diff --git a/runescape-api/src/main/java/net/runelite/rs/api/XClanMember.java b/runescape-api/src/main/java/net/runelite/rs/api/RSClanMember.java similarity index 98% rename from runescape-api/src/main/java/net/runelite/rs/api/XClanMember.java rename to runescape-api/src/main/java/net/runelite/rs/api/RSClanMember.java index 6c7e9fbe8c..fa7bd19f1e 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/XClanMember.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSClanMember.java @@ -22,12 +22,11 @@ * (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.rs.api; import net.runelite.mapping.Import; -public interface XClanMember +public interface RSClanMember { @Import("username") String getUsernameName(); diff --git a/runescape-api/src/main/java/net/runelite/rs/api/ClassInfo.java b/runescape-api/src/main/java/net/runelite/rs/api/RSClassInfo.java similarity index 98% rename from runescape-api/src/main/java/net/runelite/rs/api/ClassInfo.java rename to runescape-api/src/main/java/net/runelite/rs/api/RSClassInfo.java index 4353374017..52dbd172d1 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/ClassInfo.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSClassInfo.java @@ -22,14 +22,13 @@ * (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.rs.api; import java.lang.reflect.Field; import java.lang.reflect.Method; import net.runelite.mapping.Import; -public interface ClassInfo +public interface RSClassInfo { @Import("methods") Method[] getMethods(); diff --git a/runescape-api/src/main/java/net/runelite/rs/api/Client.java b/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java similarity index 80% rename from runescape-api/src/main/java/net/runelite/rs/api/Client.java rename to runescape-api/src/main/java/net/runelite/rs/api/RSClient.java index c15caf1450..03d57c125c 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/Client.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java @@ -24,47 +24,60 @@ */ package net.runelite.rs.api; +import net.runelite.api.Client; import net.runelite.mapping.Import; -public interface Client extends GameEngine +public interface RSClient extends RSGameEngine, Client { @Import("cameraX") + @Override int getCameraX(); @Import("cameraY") + @Override int getCameraY(); @Import("cameraZ") + @Override int getCameraZ(); @Import("plane") + @Override int getPlane(); @Import("cameraPitch") + @Override int getCameraPitch(); @Import("cameraYaw") + @Override int getCameraYaw(); @Import("world") int getWorld(); @Import("FPS") + @Override int getFPS(); @Import("mapAngle") + @Override int getMapAngle(); @Import("tileHeights") + @Override int[][][] getTileHeights(); @Import("tileSettings") + @Override byte[][][] getTileSettings(); @Import("settings") + @Override int[] getSettings(); @Import("widgetSettings") + @Override int[] getWidgetSettings(); @Import("energy") @@ -74,9 +87,11 @@ public interface Client extends GameEngine int getWeight(); @Import("baseX") + @Override int getBaseX(); @Import("baseY") + @Override int getBaseY(); @Import("boostedSkillLevels") @@ -89,48 +104,59 @@ public interface Client extends GameEngine int[] getSkillExperiences(); @Import("gameState") - int getGameState(); + int getRSGameState(); @Import("widgets") - Widget[][] getWidgets(); + RSWidget[][] getWidgets(); @Import("region") - Region getRegion(); + @Override + RSRegion getRegion(); @Import("localPlayer") - Player getLocalPlayer(); + @Override + RSPlayer getLocalPlayer(); @Import("cachedNPCs") - NPC[] getCachedNPCs(); + @Override + RSNPC[] getCachedNPCs(); @Import("collisionMaps") - CollisionData[] getCollisionMaps(); + RSCollisionData[] getCollisionMaps(); @Import("cachedPlayers") - Player[] getCachedPlayers(); + @Override + RSPlayer[] getCachedPlayers(); @Import("groundItemDeque") - Deque[][][] getGroundItemDeque(); + RSDeque[][][] getGroundItemDeque(); @Import("username") + @Override String getUsername(); @Import(value = "username", setter = true) + @Override void setUsername(String username); @Import("playerOptions") + @Override String[] getPlayerOptions(); @Import("playerOptionsPriorities") + @Override boolean[] getPlayerOptionsPriorities(); @Import("playerMenuTypes") + @Override int[] getPlayerMenuTypes(); @Import("menuTargets") + @Override String[] getMenuTargets(); @Import("menuOptions") + @Override String[] getMenuOptions(); @Import("mouseX") @@ -149,57 +175,67 @@ public interface Client extends GameEngine int[] getMenuIdentifiers(); @Import("friends") - Friend[] getFriends(); + RSFriend[] getFriends(); @Import("ignores") - Ignore[] getIgnores(); + RSIgnore[] getIgnores(); @Import("worldList") - World[] getWorldList(); + RSWorld[] getWorldList(); @Import("sendGameMessage") void sendGameMessage(int var1, String var2, String var3); @Import("getObjectDefinition") - ObjectComposition getObjectDefinition(int objectId); + RSObjectComposition getObjectDefinition(int objectId); @Import("scale") + @Override int getScale(); @Import("viewportHeight") + @Override int getViewportHeight(); @Import("viewportWidth") + @Override int getViewportWidth(); @Import("isResized") + @Override boolean isResized(); @Import("widgetPositionX") + @Override int[] getWidgetPositionsX(); @Import("widgetPositionY") + @Override int[] getWidgetPositionsY(); @Import("itemContainers") - XHashTable getItemContainers(); + RSHashTable getItemContainers(); @Import("getItemDefinition") - ItemComposition getItemDefinition(int itemId); + @Override + RSItemComposition getItemDefinition(int itemId); @Import("componentTable") - XHashTable getComponentTable(); + @Override + RSHashTable getComponentTable(); @Import("grandExchangeOffers") - XGrandExchangeOffer[] getGrandExchangeOffers(); + RSGrandExchangeOffer[] getGrandExchangeOffers(); @Import("clanChatCount") + @Override int getClanChatCount(); @Import("clanMembers") - XClanMember[] getClanMembers(); + RSClanMember[] getClanMembers(); @Import("isMenuOpen") + @Override boolean isMenuOpen(); @Import("gameCycle") @@ -209,21 +245,26 @@ public interface Client extends GameEngine void packetHandler(); @Import("revision") + @Override int getRevision(); @Import("mapRegions") + @Override int[] getMapRegions(); @Import("xteaKeys") + @Override int[][] getXteaKeys(); @Import("gameDrawingMode") + @Override int getGameDrawingMode(); @Import( value = "gameDrawingMode", setter = true ) + @Override void setGameDrawingMode(int gameDrawingMode); @Import("cycleCntr") @@ -235,6 +276,7 @@ public interface Client extends GameEngine /** * Get the widget top group. widgets[topGroup] contains widgets with * parentId -1, which are the widget roots. + * * @return */ @Import("widgetRoot") diff --git a/runescape-api/src/main/java/net/runelite/rs/api/CollisionData.java b/runescape-api/src/main/java/net/runelite/rs/api/RSCollisionData.java similarity index 97% rename from runescape-api/src/main/java/net/runelite/rs/api/CollisionData.java rename to runescape-api/src/main/java/net/runelite/rs/api/RSCollisionData.java index 639cb1d956..5363333740 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/CollisionData.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSCollisionData.java @@ -22,12 +22,11 @@ * (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.rs.api; import net.runelite.mapping.Import; -public interface CollisionData +public interface RSCollisionData { @Import("flags") int[][] getFlags(); diff --git a/runescape-api/src/main/java/net/runelite/rs/api/CombatInfo1.java b/runescape-api/src/main/java/net/runelite/rs/api/RSCombatInfo1.java similarity index 98% rename from runescape-api/src/main/java/net/runelite/rs/api/CombatInfo1.java rename to runescape-api/src/main/java/net/runelite/rs/api/RSCombatInfo1.java index 56e95790f7..7f9519718b 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/CombatInfo1.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSCombatInfo1.java @@ -22,12 +22,11 @@ * (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.rs.api; import net.runelite.mapping.Import; -public interface CombatInfo1 +public interface RSCombatInfo1 { @Import("healthRatio") int getHealthRatio(); diff --git a/runescape-api/src/main/java/net/runelite/rs/api/CombatInfo2.java b/runescape-api/src/main/java/net/runelite/rs/api/RSCombatInfo2.java similarity index 97% rename from runescape-api/src/main/java/net/runelite/rs/api/CombatInfo2.java rename to runescape-api/src/main/java/net/runelite/rs/api/RSCombatInfo2.java index 5f97017c81..3e3f69e42a 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/CombatInfo2.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSCombatInfo2.java @@ -22,12 +22,11 @@ * (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.rs.api; import net.runelite.mapping.Import; -public interface CombatInfo2 +public interface RSCombatInfo2 { @Import("healthScale") int getHealthScale(); diff --git a/runescape-api/src/main/java/net/runelite/rs/api/CombatInfoList.java b/runescape-api/src/main/java/net/runelite/rs/api/RSCombatInfoList.java similarity index 96% rename from runescape-api/src/main/java/net/runelite/rs/api/CombatInfoList.java rename to runescape-api/src/main/java/net/runelite/rs/api/RSCombatInfoList.java index 6dbc6ab044..297556f8ec 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/CombatInfoList.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSCombatInfoList.java @@ -22,7 +22,6 @@ * (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.rs.api; import net.runelite.mapping.Import; @@ -30,8 +29,8 @@ import net.runelite.mapping.Import; /** * Created by bold on 2/2/17. */ -public interface CombatInfoList +public interface RSCombatInfoList { @Import("node") - Node getNode(); + RSNode getNode(); } diff --git a/runescape-api/src/main/java/net/runelite/rs/api/CombatInfoListHolder.java b/runescape-api/src/main/java/net/runelite/rs/api/RSCombatInfoListHolder.java similarity index 92% rename from runescape-api/src/main/java/net/runelite/rs/api/CombatInfoListHolder.java rename to runescape-api/src/main/java/net/runelite/rs/api/RSCombatInfoListHolder.java index f71cf5df9c..8b8d84432c 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/CombatInfoListHolder.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSCombatInfoListHolder.java @@ -22,16 +22,15 @@ * (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.rs.api; import net.runelite.mapping.Import; -public interface CombatInfoListHolder extends Node +public interface RSCombatInfoListHolder extends RSNode { @Import("combatInfo1") - CombatInfoList getCombatInfo1(); + RSCombatInfoList getCombatInfo1(); @Import("combatInfo2") - CombatInfo2 getCombatInfo2(); + RSCombatInfo2 getCombatInfo2(); } diff --git a/runescape-api/src/main/java/net/runelite/rs/api/DecorativeObject.java b/runescape-api/src/main/java/net/runelite/rs/api/RSDecorativeObject.java similarity index 91% rename from runescape-api/src/main/java/net/runelite/rs/api/DecorativeObject.java rename to runescape-api/src/main/java/net/runelite/rs/api/RSDecorativeObject.java index efeb6c6edd..ea0ea0d34f 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/DecorativeObject.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSDecorativeObject.java @@ -24,11 +24,14 @@ */ package net.runelite.rs.api; +import net.runelite.api.DecorativeObject; +import net.runelite.api.Renderable; import net.runelite.mapping.Import; -public interface DecorativeObject +public interface RSDecorativeObject extends DecorativeObject { @Import("hash") + @Override int getHash(); @Import("x") diff --git a/runescape-api/src/main/java/net/runelite/rs/api/Deque.java b/runescape-api/src/main/java/net/runelite/rs/api/RSDeque.java similarity index 95% rename from runescape-api/src/main/java/net/runelite/rs/api/Deque.java rename to runescape-api/src/main/java/net/runelite/rs/api/RSDeque.java index a9e4f520bc..9a0c2aa303 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/Deque.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSDeque.java @@ -22,16 +22,15 @@ * (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.rs.api; import net.runelite.mapping.Import; -public interface Deque +public interface RSDeque { @Import("current") - Node getCurrent(); + RSNode getCurrent(); @Import("head") - Node getHead(); + RSNode getHead(); } diff --git a/runescape-api/src/main/java/net/runelite/rs/api/FileOnDisk.java b/runescape-api/src/main/java/net/runelite/rs/api/RSFileOnDisk.java similarity index 98% rename from runescape-api/src/main/java/net/runelite/rs/api/FileOnDisk.java rename to runescape-api/src/main/java/net/runelite/rs/api/RSFileOnDisk.java index 0f089cfa5f..e7f07e34ee 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/FileOnDisk.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSFileOnDisk.java @@ -22,13 +22,12 @@ * (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.rs.api; import java.io.RandomAccessFile; import net.runelite.mapping.Import; -public interface FileOnDisk +public interface RSFileOnDisk { @Import("file") RandomAccessFile getFile(); diff --git a/runescape-api/src/main/java/net/runelite/rs/api/Friend.java b/runescape-api/src/main/java/net/runelite/rs/api/RSFriend.java similarity index 98% rename from runescape-api/src/main/java/net/runelite/rs/api/Friend.java rename to runescape-api/src/main/java/net/runelite/rs/api/RSFriend.java index 95c9fc3134..cdded19d6b 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/Friend.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSFriend.java @@ -22,12 +22,11 @@ * (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.rs.api; import net.runelite.mapping.Import; -public interface Friend +public interface RSFriend { @Import("name") String getName(); diff --git a/runescape-api/src/main/java/net/runelite/rs/api/GameEngine.java b/runescape-api/src/main/java/net/runelite/rs/api/RSGameEngine.java similarity index 98% rename from runescape-api/src/main/java/net/runelite/rs/api/GameEngine.java rename to runescape-api/src/main/java/net/runelite/rs/api/RSGameEngine.java index 60ae77c90d..e1b6ef1f3d 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/GameEngine.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSGameEngine.java @@ -27,7 +27,7 @@ package net.runelite.rs.api; import java.awt.Canvas; import net.runelite.mapping.Import; -public interface GameEngine +public interface RSGameEngine { @Import("canvas") Canvas getCanvas(); diff --git a/runescape-api/src/main/java/net/runelite/rs/api/GameObject.java b/runescape-api/src/main/java/net/runelite/rs/api/RSGameObject.java similarity index 92% rename from runescape-api/src/main/java/net/runelite/rs/api/GameObject.java rename to runescape-api/src/main/java/net/runelite/rs/api/RSGameObject.java index 6561355861..8fdfe1c47f 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/GameObject.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSGameObject.java @@ -22,12 +22,13 @@ * (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.rs.api; +import net.runelite.api.GameObject; +import net.runelite.api.Renderable; import net.runelite.mapping.Import; -public interface GameObject +public interface RSGameObject extends GameObject { @Import("renderable") Renderable getRenderable(); @@ -48,9 +49,11 @@ public interface GameObject int getOffsetY(); @Import("x") + @Override int getX(); @Import("y") + @Override int getY(); @Import("height") @@ -60,6 +63,7 @@ public interface GameObject int getOrientation(); @Import("hash") + @Override int getHash(); @Import("flags") diff --git a/runescape-api/src/main/java/net/runelite/rs/api/XGrandExchangeOffer.java b/runescape-api/src/main/java/net/runelite/rs/api/RSGrandExchangeOffer.java similarity index 97% rename from runescape-api/src/main/java/net/runelite/rs/api/XGrandExchangeOffer.java rename to runescape-api/src/main/java/net/runelite/rs/api/RSGrandExchangeOffer.java index 30421ef3f3..572718976d 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/XGrandExchangeOffer.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSGrandExchangeOffer.java @@ -22,12 +22,11 @@ * (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.rs.api; import net.runelite.mapping.Import; -public interface XGrandExchangeOffer +public interface RSGrandExchangeOffer { @Import("quantitySold") int getQuantitySold(); diff --git a/runescape-api/src/main/java/net/runelite/rs/api/GroundObject.java b/runescape-api/src/main/java/net/runelite/rs/api/RSGroundObject.java similarity index 93% rename from runescape-api/src/main/java/net/runelite/rs/api/GroundObject.java rename to runescape-api/src/main/java/net/runelite/rs/api/RSGroundObject.java index 03ae0de2e5..d1c0c8ef26 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/GroundObject.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSGroundObject.java @@ -24,11 +24,13 @@ */ package net.runelite.rs.api; +import net.runelite.api.GroundObject; import net.runelite.mapping.Import; -public interface GroundObject +public interface RSGroundObject extends GroundObject { @Import("hash") + @Override int getHash(); @Import("x") diff --git a/runescape-api/src/main/java/net/runelite/rs/api/XHashTable.java b/runescape-api/src/main/java/net/runelite/rs/api/RSHashTable.java similarity index 93% rename from runescape-api/src/main/java/net/runelite/rs/api/XHashTable.java rename to runescape-api/src/main/java/net/runelite/rs/api/RSHashTable.java index fedba0108d..cbbce495af 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/XHashTable.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSHashTable.java @@ -22,16 +22,16 @@ * (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.rs.api; +import net.runelite.api.HashTable; import net.runelite.mapping.Import; -public interface XHashTable +public interface RSHashTable extends HashTable { @Import("size") int getSize(); @Import("buckets") - Node[] getBuckets(); + RSNode[] getBuckets(); } diff --git a/runescape-api/src/main/java/net/runelite/rs/api/Ignore.java b/runescape-api/src/main/java/net/runelite/rs/api/RSIgnore.java similarity index 98% rename from runescape-api/src/main/java/net/runelite/rs/api/Ignore.java rename to runescape-api/src/main/java/net/runelite/rs/api/RSIgnore.java index f0c080810b..7a89de3015 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/Ignore.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSIgnore.java @@ -22,12 +22,11 @@ * (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.rs.api; import net.runelite.mapping.Import; -public interface Ignore +public interface RSIgnore { @Import("name") String getName(); diff --git a/runescape-api/src/main/java/net/runelite/rs/api/Item.java b/runescape-api/src/main/java/net/runelite/rs/api/RSItem.java similarity index 93% rename from runescape-api/src/main/java/net/runelite/rs/api/Item.java rename to runescape-api/src/main/java/net/runelite/rs/api/RSItem.java index 86b9fb462b..7fc0b1efc8 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/Item.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSItem.java @@ -22,16 +22,18 @@ * (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.rs.api; +import net.runelite.api.Item; import net.runelite.mapping.Import; -public interface Item extends Renderable +public interface RSItem extends RSRenderable, Item { @Import("id") + @Override int getId(); @Import("quantity") + @Override int getQuantity(); } diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSItemComposition.java b/runescape-api/src/main/java/net/runelite/rs/api/RSItemComposition.java new file mode 100644 index 0000000000..3237a7dfd7 --- /dev/null +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSItemComposition.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2016-2017, Adam + * 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.rs.api; + +import net.runelite.api.ItemComposition; +import net.runelite.mapping.Import; + +/** + * ItemComposition is an interface that represents the various properties of an + * item. Imports several values from runescape-client/ItemComposition, and allows + * direct access to them by calling these methods. + */ +public interface RSItemComposition extends ItemComposition +{ + @Import("name") + @Override + String getName(); + + @Import("id") + @Override + int getId(); + + @Import("notedTemplate") + @Override + int getNote(); + + @Import("note") + @Override + int getLinkedNoteId(); + + @Import("price") + @Override + int getPrice(); + + @Import("isMembers") + @Override + boolean isMembers(); + + @Import("maleModel") + int getMaleModel(); +} diff --git a/runescape-api/src/main/java/net/runelite/rs/api/XItemContainer.java b/runescape-api/src/main/java/net/runelite/rs/api/RSItemContainer.java similarity index 96% rename from runescape-api/src/main/java/net/runelite/rs/api/XItemContainer.java rename to runescape-api/src/main/java/net/runelite/rs/api/RSItemContainer.java index 669e5ada57..9c878489a2 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/XItemContainer.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSItemContainer.java @@ -22,12 +22,11 @@ * (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.rs.api; import net.runelite.mapping.Import; -public interface XItemContainer extends Node +public interface RSItemContainer extends RSNode { @Import("itemIds") int[] getItemIds(); diff --git a/runescape-api/src/main/java/net/runelite/rs/api/ItemLayer.java b/runescape-api/src/main/java/net/runelite/rs/api/RSItemLayer.java similarity index 89% rename from runescape-api/src/main/java/net/runelite/rs/api/ItemLayer.java rename to runescape-api/src/main/java/net/runelite/rs/api/RSItemLayer.java index 3133762944..65e50e5947 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/ItemLayer.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSItemLayer.java @@ -22,12 +22,12 @@ * (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.rs.api; +import net.runelite.api.ItemLayer; import net.runelite.mapping.Import; -public interface ItemLayer +public interface RSItemLayer extends ItemLayer { @Import("x") int getX(); @@ -36,6 +36,7 @@ public interface ItemLayer int getY(); @Import("hash") + @Override int getHash(); @Import("flags") @@ -45,11 +46,14 @@ public interface ItemLayer int getHeight(); @Import("bottom") - Renderable getBottom(); + @Override + RSRenderable getBottom(); @Import("middle") - Renderable getMiddle(); + @Override + RSRenderable getMiddle(); @Import("top") - Renderable getTop(); + @Override + RSRenderable getTop(); } diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSMainBufferProvider.java b/runescape-api/src/main/java/net/runelite/rs/api/RSMainBufferProvider.java new file mode 100644 index 0000000000..aa2e893f5f --- /dev/null +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSMainBufferProvider.java @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2017, Adam + * 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.rs.api; + +import java.awt.Image; +import net.runelite.api.MainBufferProvider; +import net.runelite.mapping.Import; + +public interface RSMainBufferProvider extends MainBufferProvider +{ + @Import("image") + @Override + Image getImage(); +} diff --git a/runescape-api/src/main/java/net/runelite/rs/api/MessageNode.java b/runescape-api/src/main/java/net/runelite/rs/api/RSMessageNode.java similarity index 92% rename from runescape-api/src/main/java/net/runelite/rs/api/MessageNode.java rename to runescape-api/src/main/java/net/runelite/rs/api/RSMessageNode.java index a903b6357f..b094de6780 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/MessageNode.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSMessageNode.java @@ -24,22 +24,26 @@ */ package net.runelite.rs.api; +import net.runelite.api.MessageNode; import net.runelite.mapping.Import; -public interface MessageNode +public interface RSMessageNode extends MessageNode { @Import("type") - int getType(); + int getRSType(); @Import("sender") + @Override String getSender(); @Import("value") + @Override String getValue(); @Import( value = "value", setter = true ) + @Override void setValue(String value); } diff --git a/runescape-api/src/main/java/net/runelite/rs/api/Model.java b/runescape-api/src/main/java/net/runelite/rs/api/RSModel.java similarity index 95% rename from runescape-api/src/main/java/net/runelite/rs/api/Model.java rename to runescape-api/src/main/java/net/runelite/rs/api/RSModel.java index 1a719ec116..14ac5379d3 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/Model.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSModel.java @@ -22,12 +22,12 @@ * (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.rs.api; +import net.runelite.api.Model; import net.runelite.mapping.Import; -public interface Model extends Renderable +public interface RSModel extends RSRenderable, Model { @Import("verticesX") int[] getVerticesX(); diff --git a/runescape-api/src/main/java/net/runelite/rs/api/NPC.java b/runescape-api/src/main/java/net/runelite/rs/api/RSNPC.java similarity index 93% rename from runescape-api/src/main/java/net/runelite/rs/api/NPC.java rename to runescape-api/src/main/java/net/runelite/rs/api/RSNPC.java index 30bfd2a007..9419850d27 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/NPC.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSNPC.java @@ -22,13 +22,13 @@ * (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.rs.api; +import net.runelite.api.NPC; import net.runelite.mapping.Import; -public interface NPC extends Actor +public interface RSNPC extends RSActor, NPC { @Import("composition") - NPCComposition getComposition(); + RSNPCComposition getComposition(); } diff --git a/runescape-api/src/main/java/net/runelite/rs/api/NPCComposition.java b/runescape-api/src/main/java/net/runelite/rs/api/RSNPCComposition.java similarity index 98% rename from runescape-api/src/main/java/net/runelite/rs/api/NPCComposition.java rename to runescape-api/src/main/java/net/runelite/rs/api/RSNPCComposition.java index b70d5e35a2..0d65fe5334 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/NPCComposition.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSNPCComposition.java @@ -22,12 +22,11 @@ * (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.rs.api; import net.runelite.mapping.Import; -public interface NPCComposition +public interface RSNPCComposition { @Import("name") String getName(); diff --git a/runescape-api/src/main/java/net/runelite/rs/api/Node.java b/runescape-api/src/main/java/net/runelite/rs/api/RSNode.java similarity index 91% rename from runescape-api/src/main/java/net/runelite/rs/api/Node.java rename to runescape-api/src/main/java/net/runelite/rs/api/RSNode.java index c10e809236..f279e2bda2 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/Node.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSNode.java @@ -22,19 +22,22 @@ * (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.rs.api; +import net.runelite.api.Node; import net.runelite.mapping.Import; -public interface Node +public interface RSNode extends Node { @Import("next") - Node getNext(); + @Override + RSNode getNext(); @Import("hash") + @Override long getHash(); @Import("previous") - Node getPrevious(); + @Override + RSNode getPrevious(); } diff --git a/runescape-api/src/main/java/net/runelite/rs/api/ObjectComposition.java b/runescape-api/src/main/java/net/runelite/rs/api/RSObjectComposition.java similarity index 97% rename from runescape-api/src/main/java/net/runelite/rs/api/ObjectComposition.java rename to runescape-api/src/main/java/net/runelite/rs/api/RSObjectComposition.java index f51217e963..73aa6a1b7b 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/ObjectComposition.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSObjectComposition.java @@ -22,12 +22,11 @@ * (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.rs.api; import net.runelite.mapping.Import; -public interface ObjectComposition +public interface RSObjectComposition { @Import("name") String getName(); diff --git a/runescape-api/src/main/java/net/runelite/rs/api/Player.java b/runescape-api/src/main/java/net/runelite/rs/api/RSPlayer.java similarity index 90% rename from runescape-api/src/main/java/net/runelite/rs/api/Player.java rename to runescape-api/src/main/java/net/runelite/rs/api/RSPlayer.java index db50b53d8e..d72f87da85 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/Player.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSPlayer.java @@ -22,20 +22,22 @@ * (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.rs.api; +import net.runelite.api.Player; import net.runelite.mapping.Import; -public interface Player extends Actor +public interface RSPlayer extends RSActor, Player { @Import("composition") - PlayerComposition getComposition(); + @Override + RSPlayerComposition getPlayerComposition(); @Import("name") - String getName(); + String getRSName(); @Import("combatLevel") + @Override int getCombatLevel(); @Import("totalLevel") diff --git a/runescape-api/src/main/java/net/runelite/rs/api/PlayerComposition.java b/runescape-api/src/main/java/net/runelite/rs/api/RSPlayerComposition.java similarity index 93% rename from runescape-api/src/main/java/net/runelite/rs/api/PlayerComposition.java rename to runescape-api/src/main/java/net/runelite/rs/api/RSPlayerComposition.java index 41899de8dc..d186b4c735 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/PlayerComposition.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSPlayerComposition.java @@ -22,12 +22,12 @@ * (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.rs.api; +import net.runelite.api.PlayerComposition; import net.runelite.mapping.Import; -public interface PlayerComposition +public interface RSPlayerComposition extends PlayerComposition { @Import("isFemale") boolean isFemale(); @@ -36,5 +36,6 @@ public interface PlayerComposition int[] getBodyPartColours(); @Import("equipmentIds") + @Override int[] getEquipmentIds(); } diff --git a/runescape-api/src/main/java/net/runelite/rs/api/Projectile.java b/runescape-api/src/main/java/net/runelite/rs/api/RSProjectile.java similarity index 96% rename from runescape-api/src/main/java/net/runelite/rs/api/Projectile.java rename to runescape-api/src/main/java/net/runelite/rs/api/RSProjectile.java index 23cbab99e8..98068354b7 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/Projectile.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSProjectile.java @@ -22,18 +22,17 @@ * (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.rs.api; import net.runelite.mapping.Import; -public interface Projectile +public interface RSProjectile { @Import("isMoving") boolean isMoving(); @Import("animationSequence") - Sequence getAnimationSequence(); + RSSequence getAnimationSequence(); @Import("velocityY") double getVelocityY(); diff --git a/runescape-api/src/main/java/net/runelite/rs/api/Region.java b/runescape-api/src/main/java/net/runelite/rs/api/RSRegion.java similarity index 91% rename from runescape-api/src/main/java/net/runelite/rs/api/Region.java rename to runescape-api/src/main/java/net/runelite/rs/api/RSRegion.java index d0bdbbd2a5..a217075d8b 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/Region.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSRegion.java @@ -22,16 +22,18 @@ * (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.rs.api; +import net.runelite.api.Region; +import net.runelite.api.Tile; import net.runelite.mapping.Import; -public interface Region +public interface RSRegion extends Region { @Import("objects") - GameObject[] getObjects(); + RSGameObject[] getObjects(); @Import("tiles") + @Override Tile[][][] getTiles(); } diff --git a/runescape-api/src/main/java/net/runelite/rs/api/Renderable.java b/runescape-api/src/main/java/net/runelite/rs/api/RSRenderable.java similarity index 91% rename from runescape-api/src/main/java/net/runelite/rs/api/Renderable.java rename to runescape-api/src/main/java/net/runelite/rs/api/RSRenderable.java index 3834ee28e7..04b2e077f2 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/Renderable.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSRenderable.java @@ -22,16 +22,18 @@ * (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.rs.api; +import net.runelite.api.Model; +import net.runelite.api.Renderable; import net.runelite.mapping.Import; -public interface Renderable extends Node +public interface RSRenderable extends RSNode, Renderable { @Import("modelHeight") int getModelHeight(); @Import("getModel") + @Override Model getModel(); } diff --git a/runescape-api/src/main/java/net/runelite/rs/api/Sequence.java b/runescape-api/src/main/java/net/runelite/rs/api/RSSequence.java similarity index 98% rename from runescape-api/src/main/java/net/runelite/rs/api/Sequence.java rename to runescape-api/src/main/java/net/runelite/rs/api/RSSequence.java index 58eb48f1e8..1672347d13 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/Sequence.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSSequence.java @@ -22,12 +22,11 @@ * (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.rs.api; import net.runelite.mapping.Import; -public interface Sequence +public interface RSSequence { @Import("stretches") boolean getStretches(); diff --git a/runescape-api/src/main/java/net/runelite/rs/api/XSprite.java b/runescape-api/src/main/java/net/runelite/rs/api/RSSprite.java similarity index 98% rename from runescape-api/src/main/java/net/runelite/rs/api/XSprite.java rename to runescape-api/src/main/java/net/runelite/rs/api/RSSprite.java index 06cf2e27f5..6f6cd9b67c 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/XSprite.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSSprite.java @@ -22,9 +22,8 @@ * (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.rs.api; -public interface XSprite +public interface RSSprite { } diff --git a/runescape-api/src/main/java/net/runelite/rs/api/SpritePixels.java b/runescape-api/src/main/java/net/runelite/rs/api/RSSpritePixels.java similarity index 97% rename from runescape-api/src/main/java/net/runelite/rs/api/SpritePixels.java rename to runescape-api/src/main/java/net/runelite/rs/api/RSSpritePixels.java index d6810718a0..46de44150e 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/SpritePixels.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSSpritePixels.java @@ -22,9 +22,8 @@ * (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.rs.api; -public interface SpritePixels +public interface RSSpritePixels { } diff --git a/runescape-api/src/main/java/net/runelite/rs/api/Tile.java b/runescape-api/src/main/java/net/runelite/rs/api/RSTile.java similarity index 84% rename from runescape-api/src/main/java/net/runelite/rs/api/Tile.java rename to runescape-api/src/main/java/net/runelite/rs/api/RSTile.java index 029bfbfb29..9ba477cdbc 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/Tile.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSTile.java @@ -24,23 +24,34 @@ */ package net.runelite.rs.api; +import net.runelite.api.DecorativeObject; +import net.runelite.api.GameObject; +import net.runelite.api.GroundObject; +import net.runelite.api.ItemLayer; +import net.runelite.api.Tile; +import net.runelite.api.WallObject; import net.runelite.mapping.Import; -public interface Tile +public interface RSTile extends Tile { @Import("objects") - GameObject[] getObjects(); + @Override + GameObject[] getGameObjects(); @Import("itemLayer") + @Override ItemLayer getItemLayer(); @Import("decorativeObject") + @Override DecorativeObject getDecorativeObject(); @Import("groundObject") + @Override GroundObject getGroundObject(); @Import("wallObject") + @Override WallObject getWallObject(); @Import("x") diff --git a/runescape-api/src/main/java/net/runelite/rs/api/WallObject.java b/runescape-api/src/main/java/net/runelite/rs/api/RSWallObject.java similarity index 92% rename from runescape-api/src/main/java/net/runelite/rs/api/WallObject.java rename to runescape-api/src/main/java/net/runelite/rs/api/RSWallObject.java index 48c0a59708..2880895b09 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/WallObject.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSWallObject.java @@ -24,16 +24,20 @@ */ package net.runelite.rs.api; +import net.runelite.api.WallObject; import net.runelite.mapping.Import; -public interface WallObject +public interface RSWallObject extends WallObject { @Import("hash") + @Override int getHash(); @Import("x") + @Override int getX(); @Import("y") + @Override int getY(); } diff --git a/runescape-api/src/main/java/net/runelite/rs/api/Widget.java b/runescape-api/src/main/java/net/runelite/rs/api/RSWidget.java similarity index 89% rename from runescape-api/src/main/java/net/runelite/rs/api/Widget.java rename to runescape-api/src/main/java/net/runelite/rs/api/RSWidget.java index e68676285f..53023975f3 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/Widget.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSWidget.java @@ -24,26 +24,29 @@ */ package net.runelite.rs.api; +import net.runelite.api.widgets.Widget; import net.runelite.mapping.Import; -public interface Widget +public interface RSWidget extends Widget { @Import("dynamicValues") int[][] getDynamicValues(); @Import("children") - Widget[] getChildren(); + RSWidget[] getChildren(); @Import("id") + @Override int getId(); @Import("parentId") - int getParentId(); + int getRSParentId(); @Import("boundsIndex") int getBoundsIndex(); @Import("modelId") + @Override int getModelId(); @Import("itemIds") @@ -59,34 +62,40 @@ public interface Widget String[] getActions(); @Import("text") - String getText(); + String getRSText(); @Import("name") - String getName(); + String getRSName(); @Import(value = "text", setter = true) + @Override void setText(String text); @Import("textColor") + @Override int getTextColor(); @Import("opacity") int getOpacity(); @Import("relativeX") + @Override int getRelativeX(); @Import("relativeY") + @Override int getRelativeY(); @Import("width") + @Override int getWidth(); @Import("height") + @Override int getHeight(); @Import("isHidden") - boolean isHidden(); + boolean isRSHidden(); @Import("index") int getIndex(); @@ -101,9 +110,11 @@ public interface Widget int getRotationZ(); @Import("contentType") + @Override int getContentType(); @Import("type") + @Override int getType(); @Import("scrollX") @@ -113,15 +124,18 @@ public interface Widget int getScrollY(); @Import("spriteId") + @Override int getSpriteId(); @Import("borderThickness") int getBorderThickness(); @Import("itemId") + @Override int getItemId(); @Import("itemQuantity") + @Override int getItemQuantity(); @Import("originalX") diff --git a/runescape-api/src/main/java/net/runelite/rs/api/WidgetNode.java b/runescape-api/src/main/java/net/runelite/rs/api/RSWidgetNode.java similarity index 93% rename from runescape-api/src/main/java/net/runelite/rs/api/WidgetNode.java rename to runescape-api/src/main/java/net/runelite/rs/api/RSWidgetNode.java index 7dd232f406..9c08a5a977 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/WidgetNode.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSWidgetNode.java @@ -22,13 +22,14 @@ * (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.rs.api; +import net.runelite.api.WidgetNode; import net.runelite.mapping.Import; -public interface WidgetNode extends Node +public interface RSWidgetNode extends RSNode, WidgetNode { @Import("id") + @Override int getId(); } diff --git a/runescape-api/src/main/java/net/runelite/rs/api/World.java b/runescape-api/src/main/java/net/runelite/rs/api/RSWorld.java similarity index 98% rename from runescape-api/src/main/java/net/runelite/rs/api/World.java rename to runescape-api/src/main/java/net/runelite/rs/api/RSWorld.java index 2862f8ca44..26105585e5 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/World.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSWorld.java @@ -22,12 +22,11 @@ * (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.rs.api; import net.runelite.mapping.Import; -public interface World +public interface RSWorld { @Import("mask") int getMask();