From e93ee86a21c2ab1c633e6dd336b28b618933ad57 Mon Sep 17 00:00:00 2001 From: Lotto Date: Wed, 8 Aug 2018 04:02:59 +0200 Subject: [PATCH] mixins: add world hopping mixin --- .../main/java/net/runelite/api/Client.java | 4 ++ .../runelite/mixins/WorldHoppingMixin.java | 50 +++++++++++++++++++ .../java/net/runelite/rs/api/RSClient.java | 5 ++ 3 files changed, 59 insertions(+) create mode 100644 runelite-mixins/src/main/java/net/runelite/mixins/WorldHoppingMixin.java 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 dff3d89ef2..1024b2b7f4 100644 --- a/runelite-api/src/main/java/net/runelite/api/Client.java +++ b/runelite-api/src/main/java/net/runelite/api/Client.java @@ -1426,4 +1426,8 @@ public interface Client extends GameEngine * @param speed speed */ void setOculusOrbNormalSpeed(int speed); + + void openWorldHopper(); + + void hopToWorld(int world); } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/WorldHoppingMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/WorldHoppingMixin.java new file mode 100644 index 0000000000..f0ce4afd34 --- /dev/null +++ b/runelite-mixins/src/main/java/net/runelite/mixins/WorldHoppingMixin.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2018, Lotto + * 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.MenuAction; +import net.runelite.api.mixins.Inject; +import net.runelite.api.mixins.Mixin; +import net.runelite.api.widgets.WidgetInfo; +import net.runelite.rs.api.RSClient; + +@Mixin(RSClient.class) +public abstract class WorldHoppingMixin implements RSClient +{ + @Inject + @Override + public void openWorldHopper() + { + // The clicked x & y coordinates (the last arguments) are not processed in the game or sent to Jagex, so they don't have to be real. + menuAction(-1, WidgetInfo.WORLD_SWITCHER_BUTTON.getId(), MenuAction.WIDGET_DEFAULT.getId(), 1, "World Switcher", "", 658, 384); + } + + @Inject + @Override + public void hopToWorld(int world) + { + menuAction(world, WidgetInfo.WORLD_SWITCHER_LIST.getId(), MenuAction.WIDGET_DEFAULT.getId(), 1, "Switch", "" + (world - 300) + "", 683, 244); + } +} diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java b/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java index be0a606e56..631ebb66cb 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSClient.java @@ -32,6 +32,7 @@ import net.runelite.api.World; import net.runelite.api.widgets.Widget; import net.runelite.mapping.Construct; import net.runelite.mapping.Import; +import net.runelite.mapping.Protect; public interface RSClient extends RSGameEngine, Client { @@ -664,4 +665,8 @@ public interface RSClient extends RSGameEngine, Client @Import("revalidateWidgetScroll") void revalidateWidgetScroll(Widget[] group, Widget w, boolean postEvent); + + @Import("menuAction") + @Protect + void menuAction(int var0, int var1, int var2, int var3, String var4, String var5, int var6, int var7); }