From f0da475370ad221e0569e0f1f5f0c3043b2859f3 Mon Sep 17 00:00:00 2001 From: Adam Date: Fri, 22 Jun 2018 22:36:39 -0400 Subject: [PATCH] Add interface representing all callbacks the client does, and convert mixins to use it This allows creating and injecting Hooks via guice --- .../main/java/net/runelite/api/Client.java | 15 ++ .../net/runelite/api/hooks/Callbacks.java | 84 ++++++++++ .../java/net/runelite/client/RuneLite.java | 3 + .../net/runelite/client/RuneLiteModule.java | 16 ++ .../net/runelite/client/callback/Hooks.java | 145 ++++++++++++------ runelite-mixins/pom.xml | 6 + .../net/runelite/client/callback/Hooks.java | 126 --------------- .../runelite/mixins/GraphicsObjectMixin.java | 8 +- .../mixins/ProcessClientErrorMixin.java | 7 +- .../net/runelite/mixins/RSActorMixin.java | 12 +- .../net/runelite/mixins/RSClientMixin.java | 75 +++++---- .../runelite/mixins/RSFriendManagerMixin.java | 8 +- .../runelite/mixins/RSGameEngineMixin.java | 8 +- .../runelite/mixins/RSIndexDataBaseMixin.java | 9 +- .../mixins/RSItemCompositionMixin.java | 8 +- .../runelite/mixins/RSItemContainerMixin.java | 3 +- .../mixins/RSKeyFocusListenerMixin.java | 15 +- .../mixins/RSMainBufferProviderMixin.java | 8 +- .../runelite/mixins/RSMessageNodeMixin.java | 10 +- .../runelite/mixins/RSMouseInputMixin.java | 20 ++- .../mixins/RSMouseWheelHandlerMixin.java | 8 +- .../java/net/runelite/mixins/RSNPCMixin.java | 3 +- .../net/runelite/mixins/RSNameableMixin.java | 8 +- .../mixins/RSNpcCompositionMixin.java | 8 +- .../runelite/mixins/RSProjectileMixin.java | 3 +- .../net/runelite/mixins/RSRegionMixin.java | 11 +- .../mixins/RSTextureProviderMixin.java | 8 +- .../java/net/runelite/mixins/RSTileMixin.java | 31 ++-- .../net/runelite/mixins/RSVarcsMixin.java | 10 +- .../net/runelite/mixins/RSWidgetMixin.java | 9 +- .../net/runelite/mixins/ScriptVMMixin.java | 5 +- 31 files changed, 408 insertions(+), 282 deletions(-) create mode 100644 runelite-api/src/main/java/net/runelite/api/hooks/Callbacks.java delete mode 100644 runelite-mixins/src/main/java/net/runelite/client/callback/Hooks.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 0e43507110..6b2cea5d6c 100644 --- a/runelite-api/src/main/java/net/runelite/api/Client.java +++ b/runelite-api/src/main/java/net/runelite/api/Client.java @@ -33,15 +33,30 @@ import javax.annotation.Nullable; import net.runelite.api.annotations.VisibleForDevtools; import net.runelite.api.coords.LocalPoint; import net.runelite.api.coords.WorldPoint; +import net.runelite.api.hooks.Callbacks; import net.runelite.api.vars.AccountType; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; +import org.slf4j.Logger; /** * Represents the RuneScape client. */ public interface Client extends GameEngine { + /** + * The client invokes these callbacks to communicate to + * @return + */ + Callbacks getCallbacks(); + + /** + * Retrieve a global logger for the client. + * This is most useful for mixins which can't have their own. + * @return + */ + Logger getLogger(); + /** * Gets a list of all valid players from the player cache. * diff --git a/runelite-api/src/main/java/net/runelite/api/hooks/Callbacks.java b/runelite-api/src/main/java/net/runelite/api/hooks/Callbacks.java new file mode 100644 index 0000000000..da2b1aaa17 --- /dev/null +++ b/runelite-api/src/main/java/net/runelite/api/hooks/Callbacks.java @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2018, 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.hooks; + +import java.awt.Graphics; +import java.awt.event.KeyEvent; +import java.awt.event.MouseEvent; +import java.awt.event.MouseWheelEvent; +import net.runelite.api.MainBufferProvider; + +/** + * Interface of callbacks the injected client uses to send events + */ +public interface Callbacks +{ + /** + * Post an event. See the events in net.runelite.api.events + * @param event + */ + void post(Object event); + + /** + * Post a deferred event, which gets delayed until the next cycle + * @param event + */ + void postDeferred(Object event); + + /** + * Called each client cycle + */ + void clientMainLoop(); + + void updateNpcs(); + + void drawRegion(); + + void drawAboveOverheads(); + + void draw(MainBufferProvider mainBufferProvider, Graphics graphics, int x, int y); + + MouseEvent mousePressed(MouseEvent mouseEvent); + + MouseEvent mouseReleased(MouseEvent mouseEvent); + + MouseEvent mouseClicked(MouseEvent mouseEvent); + + MouseEvent mouseEntered(MouseEvent mouseEvent); + + MouseEvent mouseExited(MouseEvent mouseEvent); + + MouseEvent mouseDragged(MouseEvent mouseEvent); + + MouseEvent mouseMoved(MouseEvent mouseEvent); + + MouseWheelEvent mouseWheelMoved(MouseWheelEvent event); + + void keyPressed(KeyEvent keyEvent); + + void keyReleased(KeyEvent keyEvent); + + void keyTyped(KeyEvent keyEvent); +} 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 f33163eb23..e50d087203 100644 --- a/runelite-client/src/main/java/net/runelite/client/RuneLite.java +++ b/runelite-client/src/main/java/net/runelite/client/RuneLite.java @@ -217,6 +217,9 @@ public class RuneLite if (!isOutdated) { this.client = (Client) client; + + // Inject members into client + injector.injectMembers(client); } // Initialize UI diff --git a/runelite-client/src/main/java/net/runelite/client/RuneLiteModule.java b/runelite-client/src/main/java/net/runelite/client/RuneLiteModule.java index 0a5e8ae515..79ed0173d2 100644 --- a/runelite-client/src/main/java/net/runelite/client/RuneLiteModule.java +++ b/runelite-client/src/main/java/net/runelite/client/RuneLiteModule.java @@ -28,12 +28,15 @@ import com.google.common.eventbus.EventBus; import com.google.common.eventbus.SubscriberExceptionContext; import com.google.inject.AbstractModule; import com.google.inject.Provides; +import com.google.inject.name.Names; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import javax.inject.Singleton; import lombok.extern.slf4j.Slf4j; import net.runelite.api.Client; +import net.runelite.api.hooks.Callbacks; import net.runelite.client.account.SessionManager; +import net.runelite.client.callback.Hooks; import net.runelite.client.chat.ChatMessageManager; import net.runelite.client.config.ChatColorConfig; import net.runelite.client.config.ConfigManager; @@ -42,7 +45,10 @@ import net.runelite.client.game.ItemManager; import net.runelite.client.menus.MenuManager; import net.runelite.client.plugins.PluginManager; import net.runelite.client.task.Scheduler; +import net.runelite.client.util.DeferredEventBus; import net.runelite.client.util.QueryRunner; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; @Slf4j public class RuneLiteModule extends AbstractModule @@ -59,6 +65,16 @@ public class RuneLiteModule extends AbstractModule bind(PluginManager.class); bind(RuneLiteProperties.class); bind(SessionManager.class); + + bind(Callbacks.class).to(Hooks.class); + + bind(EventBus.class) + .annotatedWith(Names.named("Deferred EventBus")) + .to(DeferredEventBus.class); + + bind(Logger.class) + .annotatedWith(Names.named("Core Logger")) + .toInstance(LoggerFactory.getLogger(RuneLite.class)); } @Provides 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 c0ee5d25ce..b824fb357c 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 @@ -38,11 +38,15 @@ import java.awt.event.MouseEvent; import java.awt.event.MouseWheelEvent; import java.awt.image.BufferedImage; import java.awt.image.VolatileImage; +import javax.inject.Inject; +import javax.inject.Singleton; +import lombok.extern.slf4j.Slf4j; import net.runelite.api.Client; import net.runelite.api.MainBufferProvider; import net.runelite.api.RenderOverview; import net.runelite.api.WorldMapManager; import net.runelite.api.events.GameTick; +import net.runelite.api.hooks.Callbacks; import net.runelite.api.widgets.Widget; import static net.runelite.api.widgets.WidgetInfo.WORLD_MAP_VIEW; import net.runelite.client.Notifier; @@ -57,54 +61,86 @@ import net.runelite.client.ui.overlay.OverlayLayer; import net.runelite.client.ui.overlay.OverlayRenderer; import net.runelite.client.ui.overlay.infobox.InfoBoxManager; import net.runelite.client.util.DeferredEventBus; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * This class contains field required for mixins and runelite hooks to work. * All remaining method hooks in this class are performance-critical or contain client-specific logic and so they * can't just be placed in mixins or sent through event bus. */ -public class Hooks +@Singleton +@Slf4j +public class Hooks implements Callbacks { - // must be public as the mixins use it - public static final Logger log = LoggerFactory.getLogger(Hooks.class); - private static final long CHECK = 600; // ms - how often to run checks private static final Injector injector = RuneLite.getInjector(); private static final Client client = injector.getInstance(Client.class); - public static final EventBus eventBus = injector.getInstance(EventBus.class); // symbol must match mixin Hook - private static final DeferredEventBus _deferredEventBus = injector.getInstance(DeferredEventBus.class); - public static final EventBus deferredEventBus = _deferredEventBus; // symbol must match mixin Hook - private static final Scheduler scheduler = injector.getInstance(Scheduler.class); - private static final InfoBoxManager infoBoxManager = injector.getInstance(InfoBoxManager.class); - private static final ChatMessageManager chatMessageManager = injector.getInstance(ChatMessageManager.class); private static final OverlayRenderer renderer = injector.getInstance(OverlayRenderer.class); - private static final MouseManager mouseManager = injector.getInstance(MouseManager.class); - private static final KeyManager keyManager = injector.getInstance(KeyManager.class); - private static final ClientThread clientThread = injector.getInstance(ClientThread.class); - private static final GameTick tick = new GameTick(); - private static final DrawManager renderHooks = injector.getInstance(DrawManager.class); - private static final Notifier notifier = injector.getInstance(Notifier.class); - private static final ClientUI clientUi = injector.getInstance(ClientUI.class); - private static Dimension lastStretchedDimensions; - private static VolatileImage stretchedImage; - private static Graphics2D stretchedGraphics; + private static final GameTick GAME_TICK = new GameTick(); - private static long lastCheck; - private static boolean shouldProcessGameTick; + @Inject + private EventBus eventBus; - public static void clientMainLoop() + @Inject + private DeferredEventBus deferredEventBus; + + @Inject + private Scheduler scheduler; + + @Inject + private InfoBoxManager infoBoxManager; + + @Inject + private ChatMessageManager chatMessageManager; + + @Inject + private MouseManager mouseManager; + + @Inject + private KeyManager keyManager; + + @Inject + private ClientThread clientThread; + + @Inject + private DrawManager drawManager; + + @Inject + private Notifier notifier; + + @Inject + private ClientUI clientUi; + + private Dimension lastStretchedDimensions; + private VolatileImage stretchedImage; + private Graphics2D stretchedGraphics; + + private long lastCheck; + private boolean shouldProcessGameTick; + + @Override + public void post(Object event) + { + eventBus.post(event); + } + + @Override + public void postDeferred(Object event) + { + deferredEventBus.post(event); + } + + @Override + public void clientMainLoop() { if (shouldProcessGameTick) { shouldProcessGameTick = false; - _deferredEventBus.replay(); + deferredEventBus.replay(); - eventBus.post(tick); + eventBus.post(GAME_TICK); int tick = client.getTickCount(); client.setTickCount(tick + 1); @@ -147,7 +183,7 @@ public class Hooks * data to be garbage collecged, and causes the map data from disk each time * is it opened. */ - private static void checkWorldMap() + private void checkWorldMap() { Widget widget = client.getWidget(WORLD_MAP_VIEW); @@ -172,62 +208,74 @@ public class Hooks } } - public static MouseEvent mousePressed(MouseEvent mouseEvent) + @Override + public MouseEvent mousePressed(MouseEvent mouseEvent) { return mouseManager.processMousePressed(mouseEvent); } - public static MouseEvent mouseReleased(MouseEvent mouseEvent) + @Override + public MouseEvent mouseReleased(MouseEvent mouseEvent) { return mouseManager.processMouseReleased(mouseEvent); } - public static MouseEvent mouseClicked(MouseEvent mouseEvent) + @Override + public MouseEvent mouseClicked(MouseEvent mouseEvent) { return mouseManager.processMouseClicked(mouseEvent); } - public static MouseEvent mouseEntered(MouseEvent mouseEvent) + @Override + public MouseEvent mouseEntered(MouseEvent mouseEvent) { return mouseManager.processMouseEntered(mouseEvent); } - public static MouseEvent mouseExited(MouseEvent mouseEvent) + @Override + public MouseEvent mouseExited(MouseEvent mouseEvent) { return mouseManager.processMouseExited(mouseEvent); } - public static MouseEvent mouseDragged(MouseEvent mouseEvent) + @Override + public MouseEvent mouseDragged(MouseEvent mouseEvent) { return mouseManager.processMouseDragged(mouseEvent); } - public static MouseEvent mouseMoved(MouseEvent mouseEvent) + @Override + public MouseEvent mouseMoved(MouseEvent mouseEvent) { return mouseManager.processMouseMoved(mouseEvent); } - public static MouseWheelEvent mouseWheelMoved(MouseWheelEvent event) + @Override + public MouseWheelEvent mouseWheelMoved(MouseWheelEvent event) { return mouseManager.processMouseWheelMoved(event); } - public static void keyPressed(KeyEvent keyEvent) + @Override + public void keyPressed(KeyEvent keyEvent) { keyManager.processKeyPressed(keyEvent); } - public static void keyReleased(KeyEvent keyEvent) + @Override + public void keyReleased(KeyEvent keyEvent) { keyManager.processKeyReleased(keyEvent); } - public static void keyTyped(KeyEvent keyEvent) + @Override + public void keyTyped(KeyEvent keyEvent) { keyManager.processKeyTyped(keyEvent); } - public static void draw(MainBufferProvider mainBufferProvider, Graphics graphics, int x, int y) + @Override + public void draw(MainBufferProvider mainBufferProvider, Graphics graphics, int x, int y) { if (graphics == null) { @@ -278,9 +326,9 @@ public class Hooks } stretchedGraphics.setRenderingHint(RenderingHints.KEY_INTERPOLATION, - client.isStretchedFast() - ? RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR - : RenderingHints.VALUE_INTERPOLATION_BILINEAR); + client.isStretchedFast() + ? RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR + : RenderingHints.VALUE_INTERPOLATION_BILINEAR); stretchedGraphics.drawImage(image, 0, 0, stretchedDimensions.width, stretchedDimensions.height, null); image = stretchedImage; @@ -289,10 +337,11 @@ public class Hooks // Draw the image onto the game canvas graphics.drawImage(image, 0, 0, client.getCanvas()); - renderHooks.processDrawComplete(image); + drawManager.processDrawComplete(image); } - public static void drawRegion() + @Override + public void drawRegion() { MainBufferProvider bufferProvider = (MainBufferProvider) client.getBufferProvider(); BufferedImage image = (BufferedImage) bufferProvider.getImage(); @@ -308,7 +357,8 @@ public class Hooks } } - public static void drawAboveOverheads() + @Override + public void drawAboveOverheads() { MainBufferProvider bufferProvider = (MainBufferProvider) client.getBufferProvider(); BufferedImage image = (BufferedImage) bufferProvider.getImage(); @@ -340,7 +390,8 @@ public class Hooks } } - public static void updateNpcs() + @Override + public void updateNpcs() { // The NPC update event seem to run every server tick, // but having the game tick event after all packets diff --git a/runelite-mixins/pom.xml b/runelite-mixins/pom.xml index 5e6dc00284..3412614a16 100644 --- a/runelite-mixins/pom.xml +++ b/runelite-mixins/pom.xml @@ -52,6 +52,12 @@ guava provided + + javax.inject + javax.inject + 1 + provided + diff --git a/runelite-mixins/src/main/java/net/runelite/client/callback/Hooks.java b/runelite-mixins/src/main/java/net/runelite/client/callback/Hooks.java deleted file mode 100644 index 9f71c83cb8..0000000000 --- a/runelite-mixins/src/main/java/net/runelite/client/callback/Hooks.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Copyright (c) 2018, 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.client.callback; - -import com.google.common.eventbus.EventBus; -import java.awt.Graphics; -import net.runelite.api.MainBufferProvider; -import java.awt.event.KeyEvent; -import java.awt.event.MouseEvent; -import java.awt.event.MouseWheelEvent; -import org.slf4j.Logger; - -/** - * Dummy class to make the mixins to compile. - * - * @author Adam - */ -public class Hooks -{ - public static Logger log; - - public static EventBus eventBus; - public static EventBus deferredEventBus; - - public static void clientMainLoop() - { - throw new IllegalStateException(); - } - - public static void draw(MainBufferProvider mainBufferProvider, Graphics graphics, int x, int y) - { - throw new IllegalStateException(); - } - - public static void drawAboveOverheads() - { - throw new IllegalStateException(); - } - - public static void drawRegion() - { - throw new IllegalStateException(); - } - - public static MouseEvent mousePressed(MouseEvent mouseEvent) - { - throw new RuntimeException(); - } - - public static MouseEvent mouseReleased(MouseEvent mouseEvent) - { - throw new RuntimeException(); - } - - public static MouseEvent mouseClicked(MouseEvent mouseEvent) - { - throw new RuntimeException(); - } - - public static MouseEvent mouseEntered(MouseEvent mouseEvent) - { - throw new RuntimeException(); - } - - public static MouseEvent mouseExited(MouseEvent mouseEvent) - { - throw new RuntimeException(); - } - - public static MouseEvent mouseDragged(MouseEvent mouseEvent) - { - throw new RuntimeException(); - } - - public static MouseEvent mouseMoved(MouseEvent mouseEvent) - { - throw new RuntimeException(); - } - - public static MouseWheelEvent mouseWheelMoved(MouseWheelEvent event) - { - throw new RuntimeException(); - } - - public static void keyPressed(KeyEvent keyEvent) - { - throw new RuntimeException(); - } - - public static void keyReleased(KeyEvent keyEvent) - { - throw new RuntimeException(); - } - - public static void keyTyped(KeyEvent keyEvent) - { - throw new RuntimeException(); - } - - public static void updateNpcs() - { - throw new RuntimeException(); - } -} diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/GraphicsObjectMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/GraphicsObjectMixin.java index d9ab364eae..7bfa3c1bd9 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/GraphicsObjectMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/GraphicsObjectMixin.java @@ -28,17 +28,21 @@ import net.runelite.api.coords.LocalPoint; import net.runelite.api.events.GraphicsObjectCreated; import net.runelite.api.mixins.Inject; import net.runelite.api.mixins.Mixin; -import static net.runelite.client.callback.Hooks.eventBus; +import net.runelite.api.mixins.Shadow; +import net.runelite.rs.api.RSClient; import net.runelite.rs.api.RSGraphicsObject; @Mixin(RSGraphicsObject.class) public abstract class GraphicsObjectMixin implements RSGraphicsObject { + @Shadow("clientInstance") + private static RSClient client; + @Inject GraphicsObjectMixin() { final GraphicsObjectCreated event = new GraphicsObjectCreated(this); - eventBus.post(event); + client.getCallbacks().post(event); } @Override diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/ProcessClientErrorMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/ProcessClientErrorMixin.java index 3b393b5678..a4498ea814 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/ProcessClientErrorMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/ProcessClientErrorMixin.java @@ -27,13 +27,16 @@ package net.runelite.mixins; import net.runelite.api.mixins.Copy; import net.runelite.api.mixins.Mixin; import net.runelite.api.mixins.Replace; -import net.runelite.client.callback.Hooks; +import net.runelite.api.mixins.Shadow; import net.runelite.rs.api.RSClient; import net.runelite.rs.api.RSRunException; @Mixin(RSClient.class) public abstract class ProcessClientErrorMixin implements RSClient { + @Shadow("clientInstance") + private static RSClient client; + @Copy("processClientError") static void rs$processClientError(String string, Throwable throwable) { @@ -52,7 +55,7 @@ public abstract class ProcessClientErrorMixin implements RSClient throwableToScan = ((RSRunException) throwable).getParent(); } - Hooks.log.error("Game crash", throwableToScan); + client.getLogger().error("Game crash", throwableToScan); StackTraceElement[] stackTrace = throwableToScan.getStackTrace(); diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSActorMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSActorMixin.java index 3e7fc52c96..01e479d98b 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSActorMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSActorMixin.java @@ -47,8 +47,6 @@ import net.runelite.api.mixins.Inject; import net.runelite.api.mixins.MethodHook; import net.runelite.api.mixins.Mixin; import net.runelite.api.mixins.Shadow; -import static net.runelite.client.callback.Hooks.eventBus; -import static net.runelite.client.callback.Hooks.log; import net.runelite.rs.api.RSActor; import net.runelite.rs.api.RSClient; import net.runelite.rs.api.RSCombatInfo1; @@ -189,7 +187,7 @@ public abstract class RSActorMixin implements RSActor { AnimationChanged animationChange = new AnimationChanged(); animationChange.setActor(this); - eventBus.post(animationChange); + client.getCallbacks().post(animationChange); } @FieldHook("graphic") @@ -198,7 +196,7 @@ public abstract class RSActorMixin implements RSActor { GraphicChanged graphicChanged = new GraphicChanged(); graphicChanged.setActor(this); - eventBus.post(graphicChanged); + client.getCallbacks().post(graphicChanged); } @Inject @@ -242,10 +240,10 @@ public abstract class RSActorMixin implements RSActor { if (this == client.getLocalPlayer()) { - log.debug("You died!"); + client.getLogger().debug("You died!"); LocalPlayerDeath event = new LocalPlayerDeath(); - eventBus.post(event); + client.getCallbacks().post(event); } else if (this instanceof RSNPC) { @@ -274,6 +272,6 @@ public abstract class RSActorMixin implements RSActor final HitsplatApplied event = new HitsplatApplied(); event.setActor(this); event.setHitsplat(hitsplat); - eventBus.post(event); + client.getCallbacks().post(event); } } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java index b8fe5826f7..ae63a28ae8 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java @@ -28,6 +28,7 @@ import java.util.ArrayList; import java.util.EnumSet; import java.util.List; import javax.annotation.Nullable; +import javax.inject.Named; import net.runelite.api.ChatMessageType; import net.runelite.api.ClanMember; import net.runelite.api.Friend; @@ -81,6 +82,7 @@ import net.runelite.api.events.ResizeableChanged; import net.runelite.api.events.UsernameChanged; import net.runelite.api.events.VarbitChanged; import net.runelite.api.events.WidgetLoaded; +import net.runelite.api.hooks.Callbacks; import net.runelite.api.mixins.Copy; import net.runelite.api.mixins.FieldHook; import net.runelite.api.mixins.Inject; @@ -91,10 +93,6 @@ import net.runelite.api.mixins.Shadow; import net.runelite.api.vars.AccountType; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; -import net.runelite.client.callback.Hooks; -import static net.runelite.client.callback.Hooks.deferredEventBus; -import static net.runelite.client.callback.Hooks.eventBus; -import static net.runelite.client.callback.Hooks.log; import net.runelite.rs.api.RSClanMemberManager; import net.runelite.rs.api.RSClient; import net.runelite.rs.api.RSDeque; @@ -108,6 +106,7 @@ import net.runelite.rs.api.RSName; import net.runelite.rs.api.RSNameable; import net.runelite.rs.api.RSPlayer; import net.runelite.rs.api.RSWidget; +import org.slf4j.Logger; @Mixin(RSClient.class) public abstract class RSClientMixin implements RSClient @@ -115,6 +114,15 @@ public abstract class RSClientMixin implements RSClient @Shadow("clientInstance") private static RSClient client; + @Inject + @javax.inject.Inject + private Callbacks callbacks; + + @Inject + @javax.inject.Inject + @Named("Core Logger") + private Logger logger; + @Inject private static int tickCount; @@ -139,6 +147,20 @@ public abstract class RSClientMixin implements RSClient @Inject private static int oldMenuEntryCount; + @Inject + @Override + public Callbacks getCallbacks() + { + return callbacks; + } + + @Inject + @Override + public Logger getLogger() + { + return logger; + } + @Inject @Override public boolean isInterpolatePlayerAnimations() @@ -512,7 +534,7 @@ public abstract class RSClientMixin implements RSClient client.getMenuActionParams1()[newCount - 1] ); - eventBus.post(event); + client.getCallbacks().post(event); } } @@ -645,7 +667,7 @@ public abstract class RSClientMixin implements RSClient { DraggingWidgetChanged draggingWidgetChanged = new DraggingWidgetChanged(); draggingWidgetChanged.setDraggingWidget(client.isDraggingWidget()); - eventBus.post(draggingWidgetChanged); + client.getCallbacks().post(draggingWidgetChanged); } @Inject @@ -683,7 +705,7 @@ public abstract class RSClientMixin implements RSClient { WidgetLoaded event = new WidgetLoaded(); event.setGroupId(groupId); - eventBus.post(event); + client.getCallbacks().post(event); } } @@ -721,7 +743,7 @@ public abstract class RSClientMixin implements RSClient { Skill updatedSkill = possibleSkills[idx]; experienceChanged.setSkill(updatedSkill); - eventBus.post(experienceChanged); + client.getCallbacks().post(experienceChanged); } } @@ -736,7 +758,7 @@ public abstract class RSClientMixin implements RSClient Skill updatedSkill = skills[idx]; BoostedLevelChanged boostedLevelChanged = new BoostedLevelChanged(); boostedLevelChanged.setSkill(updatedSkill); - eventBus.post(boostedLevelChanged); + client.getCallbacks().post(boostedLevelChanged); } } @@ -755,7 +777,7 @@ public abstract class RSClientMixin implements RSClient PlayerMenuOptionsChanged optionsChanged = new PlayerMenuOptionsChanged(); optionsChanged.setIndex(idx); - eventBus.post(optionsChanged); + client.getCallbacks().post(optionsChanged); } @FieldHook("gameState") @@ -764,7 +786,7 @@ public abstract class RSClientMixin implements RSClient { GameStateChanged gameStateChange = new GameStateChanged(); gameStateChange.setGameState(client.getGameState()); - eventBus.post(gameStateChange); + client.getCallbacks().post(gameStateChange); } @@ -783,7 +805,7 @@ public abstract class RSClientMixin implements RSClient { npc.setIndex(idx); - deferredEventBus.post(new NpcSpawned(npc)); + client.getCallbacks().postDeferred(new NpcSpawned(npc)); } } @@ -803,11 +825,11 @@ public abstract class RSClientMixin implements RSClient if (oldPlayer != null) { - eventBus.post(new PlayerDespawned(oldPlayer)); + client.getCallbacks().post(new PlayerDespawned(oldPlayer)); } if (player != null) { - deferredEventBus.post(new PlayerSpawned(player)); + client.getCallbacks().postDeferred(new PlayerSpawned(player)); } } @@ -830,7 +852,7 @@ public abstract class RSClientMixin implements RSClient GrandExchangeOfferChanged offerChangedEvent = new GrandExchangeOfferChanged(); offerChangedEvent.setOffer(internalOffer); offerChangedEvent.setSlot(idx); - eventBus.post(offerChangedEvent); + client.getCallbacks().post(offerChangedEvent); } @FieldHook("clientVarps") @@ -838,7 +860,7 @@ public abstract class RSClientMixin implements RSClient public static void settingsChanged(int idx) { VarbitChanged varbitChanged = new VarbitChanged(); - eventBus.post(varbitChanged); + client.getCallbacks().post(varbitChanged); } @FieldHook("isResized") @@ -848,14 +870,14 @@ public abstract class RSClientMixin implements RSClient //maybe couple with varbitChanged. resizeable may not be a varbit but it would fit with the other client settings. ResizeableChanged resizeableChanged = new ResizeableChanged(); resizeableChanged.setResized(client.isResized()); - eventBus.post(resizeableChanged); + client.getCallbacks().post(resizeableChanged); } @FieldHook("clanMemberManager") @Inject public static void clanMemberManagerChanged(int idx) { - eventBus.post(new ClanChanged(client.getClanMemberManager() != null)); + client.getCallbacks().post(new ClanChanged(client.getClanMemberManager() != null)); } @Inject @@ -1001,7 +1023,7 @@ public abstract class RSClientMixin implements RSClient menuOptionClicked.setMenuAction(MenuAction.of(menuAction)); menuOptionClicked.setId(id); menuOptionClicked.setWidgetId(widgetId); - eventBus.post(menuOptionClicked); + client.getCallbacks().post(menuOptionClicked); if (menuOptionClicked.isConsumed()) { @@ -1015,7 +1037,7 @@ public abstract class RSClientMixin implements RSClient @Inject public static void onUsernameChanged(int idx) { - eventBus.post(new UsernameChanged()); + client.getCallbacks().post(new UsernameChanged()); } @Override @@ -1046,34 +1068,35 @@ public abstract class RSClientMixin implements RSClient { final MenuOpened event = new MenuOpened(); event.setMenuEntries(getMenuEntries()); - eventBus.post(event); + callbacks.post(event); } @Inject @MethodHook("updateNpcs") public static void updateNpcs(boolean var0, PacketBuffer var1) { - Hooks.updateNpcs(); + client.getCallbacks().updateNpcs(); } @Inject @MethodHook("addChatMessage") public static void onAddChatMessage(int type, String name, String message, String sender) { - if (log.isDebugEnabled()) + Logger logger = client.getLogger(); + if (logger.isDebugEnabled()) { - log.debug("Chat message type {}: {}", ChatMessageType.of(type), message); + logger.debug("Chat message type {}: {}", ChatMessageType.of(type), message); } final ChatMessageType chatMessageType = ChatMessageType.of(type); final ChatMessage chatMessage = new ChatMessage(chatMessageType, name, message, sender); - eventBus.post(chatMessage); + client.getCallbacks().post(chatMessage); } @Inject @MethodHook("methodDraw") public void methodDraw(boolean var1) { - Hooks.clientMainLoop(); + callbacks.clientMainLoop(); } } \ No newline at end of file diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSFriendManagerMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSFriendManagerMixin.java index 9e568096be..1e3f79eb44 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSFriendManagerMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSFriendManagerMixin.java @@ -28,18 +28,22 @@ import net.runelite.api.events.RemovedFriend; import net.runelite.api.mixins.Inject; import net.runelite.api.mixins.MethodHook; import net.runelite.api.mixins.Mixin; -import static net.runelite.client.callback.Hooks.eventBus; +import net.runelite.api.mixins.Shadow; +import net.runelite.rs.api.RSClient; import net.runelite.rs.api.RSFriend; import net.runelite.rs.api.RSFriendManager; @Mixin(RSFriendManager.class) public abstract class RSFriendManagerMixin implements RSFriend { + @Shadow("clientInstance") + private static RSClient client; + @MethodHook("removeFriend") @Inject public void rl$removeFriend(String friendName) { RemovedFriend removedFriend = new RemovedFriend(friendName); - eventBus.post(removedFriend); + client.getCallbacks().post(removedFriend); } } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSGameEngineMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSGameEngineMixin.java index dd0ce6d4ab..93e3ef3266 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSGameEngineMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSGameEngineMixin.java @@ -31,12 +31,16 @@ import net.runelite.api.mixins.Inject; import net.runelite.api.mixins.MethodHook; import net.runelite.api.mixins.Mixin; import net.runelite.api.mixins.Replace; -import static net.runelite.client.callback.Hooks.eventBus; +import net.runelite.api.mixins.Shadow; +import net.runelite.rs.api.RSClient; import net.runelite.rs.api.RSGameEngine; @Mixin(RSGameEngine.class) public abstract class RSGameEngineMixin implements RSGameEngine { + @Shadow("clientInstance") + private static RSClient client; + @Inject private Thread thread; @@ -70,6 +74,6 @@ public abstract class RSGameEngineMixin implements RSGameEngine { final FocusChanged focusChanged = new FocusChanged(); focusChanged.setFocused(true); - eventBus.post(focusChanged); + client.getCallbacks().post(focusChanged); } } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSIndexDataBaseMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSIndexDataBaseMixin.java index 99140e4999..dfab94efb4 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSIndexDataBaseMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSIndexDataBaseMixin.java @@ -35,14 +35,19 @@ import java.io.InputStreamReader; import net.runelite.api.mixins.Copy; import net.runelite.api.mixins.Mixin; import net.runelite.api.mixins.Replace; +import net.runelite.api.mixins.Shadow; import net.runelite.api.overlay.OverlayIndex; -import static net.runelite.client.callback.Hooks.log; +import net.runelite.rs.api.RSClient; import net.runelite.rs.api.RSIndexData; import net.runelite.rs.api.RSIndexDataBase; +import org.slf4j.Logger; @Mixin(RSIndexDataBase.class) public abstract class RSIndexDataBaseMixin implements RSIndexDataBase { + @Shadow("clientInstance") + private static RSClient client; + @Copy("getConfigData") abstract byte[] rs$getConfigData(int archiveId, int fileId); @@ -57,6 +62,8 @@ public abstract class RSIndexDataBaseMixin implements RSIndexDataBase return rsData; } + Logger log = client.getLogger(); + InputStream in = getClass().getResourceAsStream("/runelite/" + indexData.getIndex() + "/" + archiveId); if (in == null) { diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSItemCompositionMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSItemCompositionMixin.java index 12f10b7ed6..c37acc3946 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSItemCompositionMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSItemCompositionMixin.java @@ -31,7 +31,8 @@ import net.runelite.api.mixins.Inject; import net.runelite.api.mixins.MethodHook; import net.runelite.api.mixins.Mixin; import net.runelite.api.mixins.Replace; -import static net.runelite.client.callback.Hooks.eventBus; +import net.runelite.api.mixins.Shadow; +import net.runelite.rs.api.RSClient; import net.runelite.rs.api.RSItemComposition; @Mixin(RSItemComposition.class) @@ -39,6 +40,9 @@ public abstract class RSItemCompositionMixin implements RSItemComposition { private static final int DEFAULT_CUSTOM_SHIFT_CLICK_INDEX = -2; + @Shadow("clientInstance") + private static RSClient client; + @Inject private int shiftClickActionIndex = DEFAULT_CUSTOM_SHIFT_CLICK_INDEX; @@ -83,6 +87,6 @@ public abstract class RSItemCompositionMixin implements RSItemComposition { final PostItemComposition event = new PostItemComposition(); event.setItemComposition(this); - eventBus.post(event); + client.getCallbacks().post(event); } } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSItemContainerMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSItemContainerMixin.java index 4fbc679e5c..638e90ced9 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSItemContainerMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSItemContainerMixin.java @@ -30,7 +30,6 @@ import net.runelite.api.mixins.FieldHook; import net.runelite.api.mixins.Inject; import net.runelite.api.mixins.Mixin; import net.runelite.api.mixins.Shadow; -import static net.runelite.client.callback.Hooks.deferredEventBus; import net.runelite.rs.api.RSClient; import net.runelite.rs.api.RSItem; import net.runelite.rs.api.RSItemContainer; @@ -77,7 +76,7 @@ public abstract class RSItemContainerMixin implements RSItemContainer rl$lastCycle = cycle; ItemContainerChanged event = new ItemContainerChanged(this); - deferredEventBus.post(event); + client.getCallbacks().postDeferred(event); } } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSKeyFocusListenerMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSKeyFocusListenerMixin.java index bd2bcab407..73ddd9fd99 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSKeyFocusListenerMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSKeyFocusListenerMixin.java @@ -32,13 +32,16 @@ import net.runelite.api.mixins.Inject; import net.runelite.api.mixins.MethodHook; import net.runelite.api.mixins.Mixin; import net.runelite.api.mixins.Replace; -import net.runelite.client.callback.Hooks; -import static net.runelite.client.callback.Hooks.eventBus; +import net.runelite.api.mixins.Shadow; +import net.runelite.rs.api.RSClient; import net.runelite.rs.api.RSKeyFocusListener; @Mixin(RSKeyFocusListener.class) public abstract class RSKeyFocusListenerMixin implements RSKeyFocusListener { + @Shadow("clientInstance") + private static RSClient client; + @Copy("keyPressed") abstract void rs$keyPressed(KeyEvent keyEvent); @@ -52,7 +55,7 @@ public abstract class RSKeyFocusListenerMixin implements RSKeyFocusListener @Replace("keyPressed") public final synchronized void keyPressed(KeyEvent keyEvent) { - Hooks.keyPressed(keyEvent); + client.getCallbacks().keyPressed(keyEvent); if (!keyEvent.isConsumed()) { rs$keyPressed(keyEvent); @@ -63,7 +66,7 @@ public abstract class RSKeyFocusListenerMixin implements RSKeyFocusListener @Replace("keyReleased") public final synchronized void keyReleased(KeyEvent keyEvent) { - Hooks.keyReleased(keyEvent); + client.getCallbacks().keyReleased(keyEvent); if (!keyEvent.isConsumed()) { rs$keyReleased(keyEvent); @@ -74,7 +77,7 @@ public abstract class RSKeyFocusListenerMixin implements RSKeyFocusListener @Replace("keyTyped") public final void keyTyped(KeyEvent keyEvent) { - Hooks.keyTyped(keyEvent); + client.getCallbacks().keyTyped(keyEvent); if (!keyEvent.isConsumed()) { rs$keyTyped(keyEvent); @@ -87,6 +90,6 @@ public abstract class RSKeyFocusListenerMixin implements RSKeyFocusListener { final FocusChanged focusChanged = new FocusChanged(); focusChanged.setFocused(false); - eventBus.post(focusChanged); + client.getCallbacks().post(focusChanged); } } \ No newline at end of file diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSMainBufferProviderMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSMainBufferProviderMixin.java index ceb9a0cfac..98f24b5fca 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSMainBufferProviderMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSMainBufferProviderMixin.java @@ -27,12 +27,16 @@ package net.runelite.mixins; import java.awt.Graphics; import net.runelite.api.mixins.Mixin; import net.runelite.api.mixins.Replace; -import net.runelite.client.callback.Hooks; +import net.runelite.api.mixins.Shadow; +import net.runelite.rs.api.RSClient; import net.runelite.rs.api.RSMainBufferProvider; @Mixin(RSMainBufferProvider.class) public abstract class RSMainBufferProviderMixin implements RSMainBufferProvider { + @Shadow("clientInstance") + private static RSClient client; + /** * Replacing this method makes it so we can completely * control when/what is drawn on the game's canvas, @@ -42,6 +46,6 @@ public abstract class RSMainBufferProviderMixin implements RSMainBufferProvider @Replace("draw") final void draw(Graphics graphics, int x, int y) { - Hooks.draw(this, graphics, x, y); + client.getCallbacks().draw(this, graphics, x, y); } } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSMessageNodeMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSMessageNodeMixin.java index 41e2f4ef4d..d070b6505c 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSMessageNodeMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSMessageNodeMixin.java @@ -29,12 +29,16 @@ import net.runelite.api.events.SetMessage; import net.runelite.api.mixins.Inject; import net.runelite.api.mixins.MethodHook; import net.runelite.api.mixins.Mixin; -import static net.runelite.client.callback.Hooks.eventBus; +import net.runelite.api.mixins.Shadow; +import net.runelite.rs.api.RSClient; import net.runelite.rs.api.RSMessageNode; @Mixin(RSMessageNode.class) public abstract class RSMessageNodeMixin implements RSMessageNode { + @Shadow("clientInstance") + private static RSClient client; + @Inject private String runeLiteFormatMessage; @@ -47,7 +51,7 @@ public abstract class RSMessageNodeMixin implements RSMessageNode setMessage.setName(getName()); setMessage.setSender(getSender()); setMessage.setValue(getValue()); - eventBus.post(setMessage); + client.getCallbacks().post(setMessage); } @Inject @@ -81,6 +85,6 @@ public abstract class RSMessageNodeMixin implements RSMessageNode setMessage.setName(name); setMessage.setSender(sender); setMessage.setValue(value); - eventBus.post(setMessage); + client.getCallbacks().post(setMessage); } } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSMouseInputMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSMouseInputMixin.java index 50818ba5b7..65cb96b8af 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSMouseInputMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSMouseInputMixin.java @@ -28,12 +28,16 @@ import java.awt.event.MouseEvent; import net.runelite.api.mixins.Copy; import net.runelite.api.mixins.Mixin; import net.runelite.api.mixins.Replace; -import net.runelite.client.callback.Hooks; +import net.runelite.api.mixins.Shadow; +import net.runelite.rs.api.RSClient; import net.runelite.rs.api.RSMouseInput; @Mixin(RSMouseInput.class) public abstract class RSMouseInputMixin implements RSMouseInput { + @Shadow("clientInstance") + private static RSClient client; + @Copy("mousePressed") abstract void rs$mousePressed(MouseEvent mouseEvent); @@ -59,7 +63,7 @@ public abstract class RSMouseInputMixin implements RSMouseInput @Replace("mousePressed") public synchronized void mousePressed(MouseEvent mouseEvent) { - mouseEvent = Hooks.mousePressed(mouseEvent); + mouseEvent = client.getCallbacks().mousePressed(mouseEvent); if (!mouseEvent.isConsumed()) { rs$mousePressed(mouseEvent); @@ -70,7 +74,7 @@ public abstract class RSMouseInputMixin implements RSMouseInput @Replace("mouseReleased") public synchronized void mouseReleased(MouseEvent mouseEvent) { - mouseEvent = Hooks.mouseReleased(mouseEvent); + mouseEvent = client.getCallbacks().mouseReleased(mouseEvent); if (!mouseEvent.isConsumed()) { rs$mouseReleased(mouseEvent); @@ -81,7 +85,7 @@ public abstract class RSMouseInputMixin implements RSMouseInput @Replace("mouseClicked") public void mouseClicked(MouseEvent event) { - event = Hooks.mouseClicked(event); + event = client.getCallbacks().mouseClicked(event); if (!event.isConsumed()) { rs$mouseClicked(event); @@ -92,7 +96,7 @@ public abstract class RSMouseInputMixin implements RSMouseInput @Replace("mouseEntered") public synchronized void mouseEntered(MouseEvent mouseEvent) { - mouseEvent = Hooks.mouseEntered(mouseEvent); + mouseEvent = client.getCallbacks().mouseEntered(mouseEvent); if (!mouseEvent.isConsumed()) { rs$mouseEntered(mouseEvent); @@ -104,7 +108,7 @@ public abstract class RSMouseInputMixin implements RSMouseInput @Replace("mouseExited") public synchronized void mouseExited(MouseEvent mouseEvent) { - mouseEvent = Hooks.mouseExited(mouseEvent); + mouseEvent = client.getCallbacks().mouseExited(mouseEvent); if (!mouseEvent.isConsumed()) { rs$mouseExited(mouseEvent); @@ -115,7 +119,7 @@ public abstract class RSMouseInputMixin implements RSMouseInput @Replace("mouseDragged") public synchronized void mouseDragged(MouseEvent mouseEvent) { - mouseEvent = Hooks.mouseDragged(mouseEvent); + mouseEvent = client.getCallbacks().mouseDragged(mouseEvent); if (!mouseEvent.isConsumed()) { rs$mouseDragged(mouseEvent); @@ -126,7 +130,7 @@ public abstract class RSMouseInputMixin implements RSMouseInput @Replace("mouseMoved") public synchronized void mouseMoved(MouseEvent mouseEvent) { - mouseEvent = Hooks.mouseMoved(mouseEvent); + mouseEvent = client.getCallbacks().mouseMoved(mouseEvent); if (!mouseEvent.isConsumed()) { rs$mouseMoved(mouseEvent); diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSMouseWheelHandlerMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSMouseWheelHandlerMixin.java index 3f167a5721..1c56a34458 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSMouseWheelHandlerMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSMouseWheelHandlerMixin.java @@ -28,12 +28,16 @@ import java.awt.event.MouseWheelEvent; import net.runelite.api.mixins.Copy; import net.runelite.api.mixins.Mixin; import net.runelite.api.mixins.Replace; -import net.runelite.client.callback.Hooks; +import net.runelite.api.mixins.Shadow; +import net.runelite.rs.api.RSClient; import net.runelite.rs.api.RSMouseWheelHandler; @Mixin(RSMouseWheelHandler.class) public abstract class RSMouseWheelHandlerMixin implements RSMouseWheelHandler { + @Shadow("clientInstance") + private static RSClient client; + @Copy("mouseWheelMoved") abstract void rs$mouseWheelMoved(MouseWheelEvent event); @@ -41,7 +45,7 @@ public abstract class RSMouseWheelHandlerMixin implements RSMouseWheelHandler @Replace("mouseWheelMoved") public void mouseWheelMoved(MouseWheelEvent event) { - event = Hooks.mouseWheelMoved(event); + event = client.getCallbacks().mouseWheelMoved(event); if (!event.isConsumed()) { rs$mouseWheelMoved(event); diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSNPCMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSNPCMixin.java index 42e934a25e..52ae249f62 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSNPCMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSNPCMixin.java @@ -32,7 +32,6 @@ import net.runelite.api.mixins.Inject; import net.runelite.api.mixins.Mixin; import net.runelite.api.mixins.Replace; import net.runelite.api.mixins.Shadow; -import static net.runelite.client.callback.Hooks.eventBus; import net.runelite.rs.api.RSClient; import net.runelite.rs.api.RSModel; import net.runelite.rs.api.RSNPC; @@ -106,7 +105,7 @@ public abstract class RSNPCMixin implements RSNPC { if (composition == null) { - eventBus.post(new NpcDespawned(this)); + client.getCallbacks().post(new NpcDespawned(this)); } } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSNameableMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSNameableMixin.java index 5032129952..2d64135330 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSNameableMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSNameableMixin.java @@ -28,17 +28,21 @@ import net.runelite.api.events.NameableNameChanged; import net.runelite.api.mixins.FieldHook; import net.runelite.api.mixins.Inject; import net.runelite.api.mixins.Mixin; -import static net.runelite.client.callback.Hooks.eventBus; +import net.runelite.api.mixins.Shadow; +import net.runelite.rs.api.RSClient; import net.runelite.rs.api.RSNameable; @Mixin(RSNameable.class) public abstract class RSNameableMixin implements RSNameable { + @Shadow("clientInstance") + private static RSClient client; + @FieldHook("prevName") @Inject public void onPrevNameChanged(int idx) { NameableNameChanged nameableNameChanged = new NameableNameChanged(this); - eventBus.post(nameableNameChanged); + client.getCallbacks().post(nameableNameChanged); } } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSNpcCompositionMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSNpcCompositionMixin.java index b359786653..b12477525c 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSNpcCompositionMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSNpcCompositionMixin.java @@ -33,12 +33,16 @@ import net.runelite.api.events.NpcActionChanged; import net.runelite.api.mixins.FieldHook; import net.runelite.api.mixins.Inject; import net.runelite.api.mixins.Mixin; -import static net.runelite.client.callback.Hooks.eventBus; +import net.runelite.api.mixins.Shadow; +import net.runelite.rs.api.RSClient; import net.runelite.rs.api.RSNPCComposition; @Mixin(RSNPCComposition.class) public abstract class RSNpcCompositionMixin implements RSNPCComposition { + @Shadow("clientInstance") + private static RSClient client; + @Inject @Override public HeadIcon getOverheadIcon() @@ -65,6 +69,6 @@ public abstract class RSNpcCompositionMixin implements RSNPCComposition NpcActionChanged npcActionChanged = new NpcActionChanged(); npcActionChanged.setNpcComposition(this); npcActionChanged.setIdx(idx); - eventBus.post(npcActionChanged); + client.getCallbacks().post(npcActionChanged); } } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSProjectileMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSProjectileMixin.java index 7410a48b3d..3d73dda927 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSProjectileMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSProjectileMixin.java @@ -31,7 +31,6 @@ import net.runelite.api.mixins.Inject; import net.runelite.api.mixins.MethodHook; import net.runelite.api.mixins.Mixin; import net.runelite.api.mixins.Shadow; -import static net.runelite.client.callback.Hooks.eventBus; import net.runelite.rs.api.RSClient; import net.runelite.rs.api.RSNPC; import net.runelite.rs.api.RSPlayer; @@ -101,6 +100,6 @@ public abstract class RSProjectileMixin implements RSProjectile projectileMoved.setProjectile(this); projectileMoved.setPosition(position); projectileMoved.setZ(targetZ); - eventBus.post(projectileMoved); + client.getCallbacks().post(projectileMoved); } } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSRegionMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSRegionMixin.java index 85f67f0b53..7d2322ae12 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSRegionMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSRegionMixin.java @@ -31,8 +31,8 @@ import net.runelite.api.mixins.Copy; import net.runelite.api.mixins.Inject; import net.runelite.api.mixins.Mixin; import net.runelite.api.mixins.Replace; -import net.runelite.client.callback.Hooks; -import static net.runelite.client.callback.Hooks.log; +import net.runelite.api.mixins.Shadow; +import net.runelite.rs.api.RSClient; import net.runelite.rs.api.RSDecorativeObject; import net.runelite.rs.api.RSGroundObject; import net.runelite.rs.api.RSItemLayer; @@ -42,6 +42,9 @@ import net.runelite.rs.api.RSWallObject; @Mixin(RSRegion.class) public abstract class RSRegionMixin implements RSRegion { + @Shadow("clientInstance") + private static RSClient client; + @Inject static boolean isDrawingRegion; @@ -55,7 +58,7 @@ public abstract class RSRegionMixin implements RSRegion { isDrawingRegion = true; rs$drawRegion(cameraX, cameraY, cameraZ, cameraPitch, cameraYaw, plane); - Hooks.drawRegion(); + client.getCallbacks().drawRegion(); } finally { @@ -147,7 +150,7 @@ public abstract class RSRegionMixin implements RSRegion } catch (Exception ex) { - log.warn("error during tile underlay rendering", ex); + client.getLogger().warn("error during tile underlay rendering", ex); } } } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSTextureProviderMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSTextureProviderMixin.java index b7d60b0f01..b48b1f33ae 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSTextureProviderMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSTextureProviderMixin.java @@ -27,16 +27,20 @@ package net.runelite.mixins; import net.runelite.api.mixins.Inject; import net.runelite.api.mixins.MethodHook; import net.runelite.api.mixins.Mixin; -import net.runelite.client.callback.Hooks; +import net.runelite.api.mixins.Shadow; +import net.runelite.rs.api.RSClient; import net.runelite.rs.api.RSTextureProvider; @Mixin(RSTextureProvider.class) public abstract class RSTextureProviderMixin implements RSTextureProvider { + @Shadow("clientInstance") + private static RSClient client; + @Inject @MethodHook(value = "checkTextures", end = true) public void checkTextures(int var1) { - Hooks.drawAboveOverheads(); + client.getCallbacks().drawAboveOverheads(); } } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSTileMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSTileMixin.java index 28e59ebe8f..9100f8b751 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSTileMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSTileMixin.java @@ -24,6 +24,8 @@ */ package net.runelite.mixins; +import java.util.ArrayList; +import java.util.List; import net.runelite.api.Actor; import net.runelite.api.CollisionDataFlag; import net.runelite.api.DecorativeObject; @@ -55,13 +57,10 @@ import net.runelite.api.mixins.FieldHook; import net.runelite.api.mixins.Inject; import net.runelite.api.mixins.Mixin; import net.runelite.api.mixins.Shadow; -import static net.runelite.client.callback.Hooks.eventBus; import net.runelite.rs.api.RSClient; import net.runelite.rs.api.RSCollisionData; import net.runelite.rs.api.RSGameObject; import net.runelite.rs.api.RSTile; -import java.util.ArrayList; -import java.util.List; @Mixin(RSTile.class) public abstract class RSTileMixin implements RSTile @@ -119,14 +118,14 @@ public abstract class RSTileMixin implements RSTile WallObjectDespawned wallObjectDespawned = new WallObjectDespawned(); wallObjectDespawned.setTile(this); wallObjectDespawned.setWallObject(previous); - eventBus.post(wallObjectDespawned); + client.getCallbacks().post(wallObjectDespawned); } else if (current != null && previous == null) { WallObjectSpawned wallObjectSpawned = new WallObjectSpawned(); wallObjectSpawned.setTile(this); wallObjectSpawned.setWallObject(current); - eventBus.post(wallObjectSpawned); + client.getCallbacks().post(wallObjectSpawned); } else if (current != null && previous != null) { @@ -134,7 +133,7 @@ public abstract class RSTileMixin implements RSTile wallObjectChanged.setTile(this); wallObjectChanged.setPrevious(previous); wallObjectChanged.setWallObject(current); - eventBus.post(wallObjectChanged); + client.getCallbacks().post(wallObjectChanged); } } @@ -152,14 +151,14 @@ public abstract class RSTileMixin implements RSTile DecorativeObjectDespawned decorativeObjectDespawned = new DecorativeObjectDespawned(); decorativeObjectDespawned.setTile(this); decorativeObjectDespawned.setDecorativeObject(previous); - eventBus.post(decorativeObjectDespawned); + client.getCallbacks().post(decorativeObjectDespawned); } else if (current != null && previous == null) { DecorativeObjectSpawned decorativeObjectSpawned = new DecorativeObjectSpawned(); decorativeObjectSpawned.setTile(this); decorativeObjectSpawned.setDecorativeObject(current); - eventBus.post(decorativeObjectSpawned); + client.getCallbacks().post(decorativeObjectSpawned); } else if (current != null && previous != null) { @@ -167,7 +166,7 @@ public abstract class RSTileMixin implements RSTile decorativeObjectChanged.setTile(this); decorativeObjectChanged.setPrevious(previous); decorativeObjectChanged.setDecorativeObject(current); - eventBus.post(decorativeObjectChanged); + client.getCallbacks().post(decorativeObjectChanged); } } @@ -185,14 +184,14 @@ public abstract class RSTileMixin implements RSTile GroundObjectDespawned groundObjectDespawned = new GroundObjectDespawned(); groundObjectDespawned.setTile(this); groundObjectDespawned.setGroundObject(previous); - eventBus.post(groundObjectDespawned); + client.getCallbacks().post(groundObjectDespawned); } else if (current != null && previous == null) { GroundObjectSpawned groundObjectSpawned = new GroundObjectSpawned(); groundObjectSpawned.setTile(this); groundObjectSpawned.setGroundObject(current); - eventBus.post(groundObjectSpawned); + client.getCallbacks().post(groundObjectSpawned); } else if (current != null && previous != null) { @@ -200,7 +199,7 @@ public abstract class RSTileMixin implements RSTile groundObjectChanged.setTile(this); groundObjectChanged.setPrevious(previous); groundObjectChanged.setGroundObject(current); - eventBus.post(groundObjectChanged); + client.getCallbacks().post(groundObjectChanged); } } @@ -247,14 +246,14 @@ public abstract class RSTileMixin implements RSTile GameObjectDespawned gameObjectDespawned = new GameObjectDespawned(); gameObjectDespawned.setTile(this); gameObjectDespawned.setGameObject(previous); - eventBus.post(gameObjectDespawned); + client.getCallbacks().post(gameObjectDespawned); } else if (current != null && previous == null) { GameObjectSpawned gameObjectSpawned = new GameObjectSpawned(); gameObjectSpawned.setTile(this); gameObjectSpawned.setGameObject(current); - eventBus.post(gameObjectSpawned); + client.getCallbacks().post(gameObjectSpawned); } else if (current != null && previous != null) { @@ -262,7 +261,7 @@ public abstract class RSTileMixin implements RSTile gameObjectsChanged.setTile(this); gameObjectsChanged.setPrevious(previous); gameObjectsChanged.setGameObject(current); - eventBus.post(gameObjectsChanged); + client.getCallbacks().post(gameObjectsChanged); } } } @@ -278,7 +277,7 @@ public abstract class RSTileMixin implements RSTile } ItemLayerChanged itemLayerChanged = new ItemLayerChanged(this); - eventBus.post(itemLayerChanged); + client.getCallbacks().post(itemLayerChanged); } @Inject diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSVarcsMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSVarcsMixin.java index 1166398ac7..c30a1388ae 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSVarcsMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSVarcsMixin.java @@ -5,23 +5,27 @@ import net.runelite.api.events.VarClientStrChanged; import net.runelite.api.mixins.FieldHook; import net.runelite.api.mixins.Inject; import net.runelite.api.mixins.Mixin; -import net.runelite.client.callback.Hooks; +import net.runelite.api.mixins.Shadow; +import net.runelite.rs.api.RSClient; import net.runelite.rs.api.RSVarcs; @Mixin(RSVarcs.class) public abstract class RSVarcsMixin implements RSVarcs { + @Shadow("clientInstance") + private static RSClient client; + @FieldHook("varCInts") @Inject public void onVarCIntChanged(int idx) { - Hooks.eventBus.post(new VarClientIntChanged(idx)); + client.getCallbacks().post(new VarClientIntChanged(idx)); } @FieldHook("varCStrings") @Inject public void onVarCStrChanged(int idx) { - Hooks.eventBus.post(new VarClientStrChanged(idx)); + client.getCallbacks().post(new VarClientStrChanged(idx)); } } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSWidgetMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSWidgetMixin.java index c9cb92df68..14a44ec564 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSWidgetMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSWidgetMixin.java @@ -41,9 +41,6 @@ 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 static net.runelite.client.callback.Hooks.deferredEventBus; -import static net.runelite.client.callback.Hooks.eventBus; -import static net.runelite.client.callback.Hooks.log; import net.runelite.rs.api.RSClient; import net.runelite.rs.api.RSHashTable; import net.runelite.rs.api.RSNode; @@ -365,7 +362,7 @@ public abstract class RSWidgetMixin implements RSWidget event.setWidget(this); event.setHidden(hidden); - eventBus.post(event); + client.getCallbacks().post(event); RSWidget[] children = getChildren(); @@ -443,9 +440,9 @@ public abstract class RSWidgetMixin implements RSWidget rl$widgetLastPosChanged = tick; - log.trace("Posting widget position changed"); + client.getLogger().trace("Posting widget position changed"); WidgetPositioned widgetPositioned = new WidgetPositioned(); - deferredEventBus.post(widgetPositioned); + client.getCallbacks().postDeferred(widgetPositioned); } } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/ScriptVMMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/ScriptVMMixin.java index d7a794607f..5812ccb383 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/ScriptVMMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/ScriptVMMixin.java @@ -33,7 +33,6 @@ import net.runelite.api.mixins.Inject; import net.runelite.api.mixins.Mixin; import net.runelite.api.mixins.Replace; import net.runelite.api.mixins.Shadow; -import net.runelite.client.callback.Hooks; import net.runelite.rs.api.RSClient; import net.runelite.rs.api.RSScript; import net.runelite.rs.api.RSScriptEvent; @@ -91,7 +90,7 @@ public abstract class ScriptVMMixin implements RSClient } m.appendTail(out); - Hooks.log.debug(out.toString()); + client.getLogger().debug(out.toString()); client.setStringStackSize(stringStackSize); client.setIntStackSize(intStackSize); @@ -101,7 +100,7 @@ public abstract class ScriptVMMixin implements RSClient ScriptCallbackEvent event = new ScriptCallbackEvent(); event.setScript(currentScript); event.setEventName(stringOp); - Hooks.eventBus.post(event); + client.getCallbacks().post(event); return true; } return false;