From d6e26410c8d0a8be59f66e6c7816260bd3ecb9d0 Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Fri, 22 Jun 2018 10:39:42 +0200 Subject: [PATCH 01/15] Move onActorHitsplat to mixins Signed-off-by: Tomas Slusny --- .../net/runelite/client/callback/Hooks.java | 28 ------------------- .../net/runelite/mixins/RSActorMixin.java | 25 +++++++++++++++++ 2 files changed, 25 insertions(+), 28 deletions(-) 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 9e8277cc50..a41623654d 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 @@ -39,11 +39,9 @@ import java.awt.event.MouseEvent; import java.awt.event.MouseWheelEvent; import java.awt.image.BufferedImage; import java.awt.image.VolatileImage; -import net.runelite.api.Actor; import net.runelite.api.ChatMessageType; import net.runelite.api.Client; import net.runelite.api.GraphicsObject; -import net.runelite.api.Hitsplat; import net.runelite.api.ItemComposition; import net.runelite.api.KeyFocusListener; import net.runelite.api.MainBufferProvider; @@ -60,7 +58,6 @@ import net.runelite.api.events.ChatMessage; import net.runelite.api.events.FocusChanged; import net.runelite.api.events.GameTick; import net.runelite.api.events.GraphicsObjectCreated; -import net.runelite.api.events.HitsplatApplied; import net.runelite.api.events.MenuOpened; import net.runelite.api.events.MenuOptionClicked; import net.runelite.api.events.PostItemComposition; @@ -467,31 +464,6 @@ public class Hooks eventBus.post(event); } - /** - * Called after a hitsplat has been processed on an actor. - * Note that this event runs even if the hitsplat didn't show up, - * i.e. the actor already had 4 visible hitsplats. - * - * @param actor The actor the hitsplat was applied to - * @param type The hitsplat type (i.e. color) - * @param value The value of the hitsplat (i.e. how high the hit was) - * @param var3 - * @param var4 - * @param gameCycle The gamecycle the hitsplat was applied on - * @param duration The amount of gamecycles the hitsplat will last for - */ - public static void onActorHitsplat(Actor actor, int type, int value, int var3, int var4, - int gameCycle, int duration) - { - Hitsplat hitsplat = new Hitsplat(Hitsplat.HitsplatType.fromInteger(type), value, - gameCycle + duration); - - HitsplatApplied event = new HitsplatApplied(); - event.setActor(actor); - event.setHitsplat(hitsplat); - eventBus.post(event); - } - public static void onGraphicsObjectCreated(GraphicsObject go, int var1, int var2, int var3, int var4, int var5, int var6, int var7) { GraphicsObjectCreated event = new GraphicsObjectCreated(go); 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 8686392541..3e7fc52c96 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSActorMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSActorMixin.java @@ -28,6 +28,7 @@ import java.awt.Graphics2D; import java.awt.Polygon; import java.awt.image.BufferedImage; import net.runelite.api.Actor; +import net.runelite.api.Hitsplat; import net.runelite.api.NPC; import net.runelite.api.NPCComposition; import net.runelite.api.Perspective; @@ -39,6 +40,7 @@ import net.runelite.api.coords.WorldArea; import net.runelite.api.coords.WorldPoint; import net.runelite.api.events.AnimationChanged; import net.runelite.api.events.GraphicChanged; +import net.runelite.api.events.HitsplatApplied; import net.runelite.api.events.LocalPlayerDeath; import net.runelite.api.mixins.FieldHook; import net.runelite.api.mixins.Inject; @@ -251,4 +253,27 @@ public abstract class RSActorMixin implements RSActor } } } + + /** + * Called after a hitsplat has been processed on an actor. + * Note that this event runs even if the hitsplat didn't show up, + * i.e. the actor already had 4 visible hitsplats. + * + * @param type The hitsplat type (i.e. color) + * @param value The value of the hitsplat (i.e. how high the hit was) + * @param var3 unknown + * @param var4 unknown + * @param gameCycle The gamecycle the hitsplat was applied on + * @param duration The amount of gamecycles the hitsplat will last for + */ + @Inject + @MethodHook(value = "applyActorHitsplat", end = true) + public void applyActorHitsplat(int type, int value, int var3, int var4, int gameCycle, int duration) + { + final Hitsplat hitsplat = new Hitsplat(Hitsplat.HitsplatType.fromInteger(type), value, gameCycle + duration); + final HitsplatApplied event = new HitsplatApplied(); + event.setActor(this); + event.setHitsplat(hitsplat); + eventBus.post(event); + } } From 8fb285f92898cf79e577f44b70d101c81680553b Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Fri, 22 Jun 2018 10:41:48 +0200 Subject: [PATCH 02/15] Move menuOpened to mixins Signed-off-by: Tomas Slusny --- .../java/net/runelite/client/callback/Hooks.java | 8 -------- .../java/net/runelite/mixins/RSClientMixin.java | 13 ++++++++++++- 2 files changed, 12 insertions(+), 9 deletions(-) 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 a41623654d..8fb6147d8c 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 @@ -58,7 +58,6 @@ import net.runelite.api.events.ChatMessage; import net.runelite.api.events.FocusChanged; import net.runelite.api.events.GameTick; import net.runelite.api.events.GraphicsObjectCreated; -import net.runelite.api.events.MenuOpened; import net.runelite.api.events.MenuOptionClicked; import net.runelite.api.events.PostItemComposition; import net.runelite.api.events.ProjectileMoved; @@ -457,13 +456,6 @@ public class Hooks eventBus.post(event); } - public static void menuOpened(Client client, int var1, int var2) - { - MenuOpened event = new MenuOpened(); - event.setMenuEntries(client.getMenuEntries()); - eventBus.post(event); - } - public static void onGraphicsObjectCreated(GraphicsObject go, int var1, int var2, int var3, int var4, int var5, int var6, int var7) { GraphicsObjectCreated event = new GraphicsObjectCreated(go); 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 f6952872f9..8905b8bde6 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java @@ -69,6 +69,7 @@ import net.runelite.api.events.ExperienceChanged; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GrandExchangeOfferChanged; import net.runelite.api.events.MenuEntryAdded; +import net.runelite.api.events.MenuOpened; import net.runelite.api.events.NpcSpawned; import net.runelite.api.events.PlayerDespawned; import net.runelite.api.events.PlayerMenuOptionsChanged; @@ -80,6 +81,7 @@ import net.runelite.api.events.WidgetLoaded; import net.runelite.api.mixins.Copy; import net.runelite.api.mixins.FieldHook; 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.api.mixins.Shadow; @@ -1015,4 +1017,13 @@ public abstract class RSClientMixin implements RSClient int flags = getFlags(); return WorldType.fromMask(flags); } -} + + @Inject + @MethodHook("openMenu") + public void menuOpened(int var1, int var2) + { + final MenuOpened event = new MenuOpened(); + event.setMenuEntries(getMenuEntries()); + eventBus.post(event); + } +} \ No newline at end of file From 2944e5b3349cf316a8f1baf0345afeb6402827c5 Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Fri, 22 Jun 2018 10:46:38 +0200 Subject: [PATCH 03/15] Move updateNpcs call to mixins Signed-off-by: Tomas Slusny --- .../src/main/java/net/runelite/client/callback/Hooks.java | 3 +-- .../src/main/java/net/runelite/client/callback/Hooks.java | 5 +++++ .../src/main/java/net/runelite/mixins/RSClientMixin.java | 8 ++++++++ 3 files changed, 14 insertions(+), 2 deletions(-) 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 8fb6147d8c..2f2a32a28d 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 @@ -47,7 +47,6 @@ import net.runelite.api.KeyFocusListener; import net.runelite.api.MainBufferProvider; import net.runelite.api.MenuAction; import net.runelite.api.MessageNode; -import net.runelite.api.PacketBuffer; import net.runelite.api.Projectile; import net.runelite.api.Region; import net.runelite.api.RenderOverview; @@ -441,7 +440,7 @@ public class Hooks eventBus.post(setMessage); } - public static void onNpcUpdate(boolean var0, PacketBuffer var1) + public static 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/src/main/java/net/runelite/client/callback/Hooks.java b/runelite-mixins/src/main/java/net/runelite/client/callback/Hooks.java index cf90c14151..f84b121474 100644 --- a/runelite-mixins/src/main/java/net/runelite/client/callback/Hooks.java +++ b/runelite-mixins/src/main/java/net/runelite/client/callback/Hooks.java @@ -104,6 +104,11 @@ public class Hooks throw new RuntimeException(); } + public static void updateNpcs() + { + throw new RuntimeException(); + } + public static boolean menuActionHook(int actionParam, int widgetId, int menuAction, int id, String menuOption, String menuTarget, int var6, int var7) { throw new RuntimeException(); 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 8905b8bde6..8a7122dcca 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java @@ -49,6 +49,7 @@ import static net.runelite.api.MenuAction.PLAYER_THIRD_OPTION; import net.runelite.api.MenuEntry; import net.runelite.api.NPC; import net.runelite.api.Node; +import net.runelite.api.PacketBuffer; import static net.runelite.api.Perspective.LOCAL_TILE_SIZE; import net.runelite.api.Player; import net.runelite.api.Point; @@ -1026,4 +1027,11 @@ public abstract class RSClientMixin implements RSClient event.setMenuEntries(getMenuEntries()); eventBus.post(event); } + + @Inject + @MethodHook("updateNpcs") + public static void updateNpcs(boolean var0, PacketBuffer var1) + { + Hooks.updateNpcs(); + } } \ No newline at end of file From 384bdb1179dcb9d1641a3cfca06cafef19a567b3 Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Fri, 22 Jun 2018 10:51:54 +0200 Subject: [PATCH 04/15] Move focusGained to mixins Signed-off-by: Tomas Slusny --- .../java/net/runelite/client/callback/Hooks.java | 8 -------- .../java/net/runelite/mixins/RSGameEngineMixin.java | 13 +++++++++++++ 2 files changed, 13 insertions(+), 8 deletions(-) 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 2f2a32a28d..298e463e98 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 @@ -240,14 +240,6 @@ public class Hooks keyManager.processKeyTyped(keyEvent); } - public static void focusGained(KeyFocusListener l, FocusEvent focusEvent) - { - FocusChanged focusChanged = new FocusChanged(); - focusChanged.setFocused(true); - - eventBus.post(focusChanged); - } - public static void focusLost(KeyFocusListener l, FocusEvent focusEvent) { FocusChanged focusChanged = new FocusChanged(); 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 5d9d2259cb..dd0ce6d4ab 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSGameEngineMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSGameEngineMixin.java @@ -24,10 +24,14 @@ */ package net.runelite.mixins; +import java.awt.event.FocusEvent; +import net.runelite.api.events.FocusChanged; import net.runelite.api.mixins.Copy; 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.rs.api.RSGameEngine; @Mixin(RSGameEngine.class) @@ -59,4 +63,13 @@ public abstract class RSGameEngineMixin implements RSGameEngine thread = Thread.currentThread(); rs$run(); } + + @Inject + @MethodHook("focusGained") + public void onFocusGained(FocusEvent focusEvent) + { + final FocusChanged focusChanged = new FocusChanged(); + focusChanged.setFocused(true); + eventBus.post(focusChanged); + } } From eea63dd171d7dbacc4f24ebb765988535d521c8c Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Fri, 22 Jun 2018 15:12:00 +0200 Subject: [PATCH 05/15] Move focusLost to mixins Signed-off-by: Tomas Slusny --- .../java/net/runelite/client/callback/Hooks.java | 11 ----------- .../runelite/mixins/RSKeyFocusListenerMixin.java | 14 ++++++++++++++ 2 files changed, 14 insertions(+), 11 deletions(-) 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 298e463e98..250a5a5b9a 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 @@ -33,7 +33,6 @@ import java.awt.Graphics2D; import java.awt.GraphicsConfiguration; import java.awt.Image; import java.awt.RenderingHints; -import java.awt.event.FocusEvent; import java.awt.event.KeyEvent; import java.awt.event.MouseEvent; import java.awt.event.MouseWheelEvent; @@ -43,7 +42,6 @@ import net.runelite.api.ChatMessageType; import net.runelite.api.Client; import net.runelite.api.GraphicsObject; import net.runelite.api.ItemComposition; -import net.runelite.api.KeyFocusListener; import net.runelite.api.MainBufferProvider; import net.runelite.api.MenuAction; import net.runelite.api.MessageNode; @@ -54,7 +52,6 @@ import net.runelite.api.TextureProvider; import net.runelite.api.WorldMapManager; import net.runelite.api.coords.LocalPoint; import net.runelite.api.events.ChatMessage; -import net.runelite.api.events.FocusChanged; import net.runelite.api.events.GameTick; import net.runelite.api.events.GraphicsObjectCreated; import net.runelite.api.events.MenuOptionClicked; @@ -240,14 +237,6 @@ public class Hooks keyManager.processKeyTyped(keyEvent); } - public static void focusLost(KeyFocusListener l, FocusEvent focusEvent) - { - FocusChanged focusChanged = new FocusChanged(); - focusChanged.setFocused(false); - - eventBus.post(focusChanged); - } - public static void draw(MainBufferProvider mainBufferProvider, Graphics graphics, int x, int y) { if (graphics == null) 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 3144bcecfb..bd2bcab407 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSKeyFocusListenerMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSKeyFocusListenerMixin.java @@ -24,11 +24,16 @@ */ package net.runelite.mixins; +import java.awt.event.FocusEvent; import java.awt.event.KeyEvent; +import net.runelite.api.events.FocusChanged; import net.runelite.api.mixins.Copy; +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.rs.api.RSKeyFocusListener; @Mixin(RSKeyFocusListener.class) @@ -75,4 +80,13 @@ public abstract class RSKeyFocusListenerMixin implements RSKeyFocusListener rs$keyTyped(keyEvent); } } + + @Inject + @MethodHook("focusLost") + public void onFocusLost(FocusEvent focusEvent) + { + final FocusChanged focusChanged = new FocusChanged(); + focusChanged.setFocused(false); + eventBus.post(focusChanged); + } } \ No newline at end of file From 4241e4384fff348c2aa035888801425fbb36a021 Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Fri, 22 Jun 2018 10:55:00 +0200 Subject: [PATCH 06/15] Move postItemComposition to mixins Signed-off-by: Tomas Slusny --- .../java/net/runelite/client/callback/Hooks.java | 9 --------- .../net/runelite/mixins/RSItemCompositionMixin.java | 12 ++++++++++++ 2 files changed, 12 insertions(+), 9 deletions(-) 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 250a5a5b9a..5af733a2b2 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 @@ -41,7 +41,6 @@ import java.awt.image.VolatileImage; import net.runelite.api.ChatMessageType; import net.runelite.api.Client; import net.runelite.api.GraphicsObject; -import net.runelite.api.ItemComposition; import net.runelite.api.MainBufferProvider; import net.runelite.api.MenuAction; import net.runelite.api.MessageNode; @@ -55,7 +54,6 @@ import net.runelite.api.events.ChatMessage; import net.runelite.api.events.GameTick; import net.runelite.api.events.GraphicsObjectCreated; import net.runelite.api.events.MenuOptionClicked; -import net.runelite.api.events.PostItemComposition; import net.runelite.api.events.ProjectileMoved; import net.runelite.api.events.SetMessage; import net.runelite.api.widgets.Widget; @@ -429,13 +427,6 @@ public class Hooks shouldProcessGameTick = true; } - public static void postItemComposition(ItemComposition itemComposition) - { - PostItemComposition event = new PostItemComposition(); - event.setItemComposition(itemComposition); - eventBus.post(event); - } - public static void onGraphicsObjectCreated(GraphicsObject go, int var1, int var2, int var3, int var4, int var5, int var6, int var7) { GraphicsObjectCreated event = new GraphicsObjectCreated(go); 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 6d8a7a6d61..12f10b7ed6 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSItemCompositionMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSItemCompositionMixin.java @@ -25,10 +25,13 @@ package net.runelite.mixins; +import net.runelite.api.events.PostItemComposition; import net.runelite.api.mixins.Copy; 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.rs.api.RSItemComposition; @Mixin(RSItemComposition.class) @@ -73,4 +76,13 @@ public abstract class RSItemCompositionMixin implements RSItemComposition { shiftClickActionIndex = DEFAULT_CUSTOM_SHIFT_CLICK_INDEX; } + + @Inject + @MethodHook(value = "post", end = true) + public void post() + { + final PostItemComposition event = new PostItemComposition(); + event.setItemComposition(this); + eventBus.post(event); + } } From 3835f005f6d8b40729305a4da667085133427bae Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Fri, 22 Jun 2018 10:58:42 +0200 Subject: [PATCH 07/15] Move setMessage to mixins Signed-off-by: Tomas Slusny --- .../net/runelite/client/callback/Hooks.java | 14 ---------- .../runelite/mixins/RSMessageNodeMixin.java | 28 +++++++++++++++++++ 2 files changed, 28 insertions(+), 14 deletions(-) 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 5af733a2b2..59b5adbe9a 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 @@ -43,7 +43,6 @@ import net.runelite.api.Client; import net.runelite.api.GraphicsObject; import net.runelite.api.MainBufferProvider; import net.runelite.api.MenuAction; -import net.runelite.api.MessageNode; import net.runelite.api.Projectile; import net.runelite.api.Region; import net.runelite.api.RenderOverview; @@ -55,7 +54,6 @@ import net.runelite.api.events.GameTick; import net.runelite.api.events.GraphicsObjectCreated; import net.runelite.api.events.MenuOptionClicked; import net.runelite.api.events.ProjectileMoved; -import net.runelite.api.events.SetMessage; import net.runelite.api.widgets.Widget; import static net.runelite.api.widgets.WidgetInfo.WORLD_MAP_VIEW; import net.runelite.client.Notifier; @@ -407,18 +405,6 @@ public class Hooks eventBus.post(projectileMoved); } - public static void setMessage(MessageNode messageNode, int type, String name, String sender, String value) - { - SetMessage setMessage = new SetMessage(); - setMessage.setMessageNode(messageNode); - setMessage.setType(ChatMessageType.of(type)); - setMessage.setName(name); - setMessage.setSender(sender); - setMessage.setValue(value); - - eventBus.post(setMessage); - } - public static void updateNpcs() { // The NPC update event seem to run every server tick, 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 0a6eff03dc..41e2f4ef4d 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSMessageNodeMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSMessageNodeMixin.java @@ -25,8 +25,11 @@ package net.runelite.mixins; import net.runelite.api.ChatMessageType; +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.rs.api.RSMessageNode; @Mixin(RSMessageNode.class) @@ -35,6 +38,18 @@ public abstract class RSMessageNodeMixin implements RSMessageNode @Inject private String runeLiteFormatMessage; + @Inject + RSMessageNodeMixin() + { + final SetMessage setMessage = new SetMessage(); + setMessage.setMessageNode(this); + setMessage.setType(getType()); + setMessage.setName(getName()); + setMessage.setSender(getSender()); + setMessage.setValue(getValue()); + eventBus.post(setMessage); + } + @Inject @Override public ChatMessageType getType() @@ -55,4 +70,17 @@ public abstract class RSMessageNodeMixin implements RSMessageNode { this.runeLiteFormatMessage = runeLiteFormatMessage; } + + @Inject + @MethodHook(value = "setMessage", end = true) + public void setMessage(int type, String name, String sender, String value) + { + final SetMessage setMessage = new SetMessage(); + setMessage.setMessageNode(this); + setMessage.setType(ChatMessageType.of(type)); + setMessage.setName(name); + setMessage.setSender(sender); + setMessage.setValue(value); + eventBus.post(setMessage); + } } From 4d6386d8468da27305e98649b025627125f1c867 Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Fri, 22 Jun 2018 11:00:22 +0200 Subject: [PATCH 08/15] Move projectileMoved to mixins Signed-off-by: Tomas Slusny --- .../net/runelite/client/callback/Hooks.java | 24 ----------------- .../runelite/mixins/RSProjectileMixin.java | 26 +++++++++++++++++++ 2 files changed, 26 insertions(+), 24 deletions(-) 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 59b5adbe9a..3da2cfd60a 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 @@ -43,17 +43,14 @@ import net.runelite.api.Client; import net.runelite.api.GraphicsObject; import net.runelite.api.MainBufferProvider; import net.runelite.api.MenuAction; -import net.runelite.api.Projectile; import net.runelite.api.Region; import net.runelite.api.RenderOverview; import net.runelite.api.TextureProvider; import net.runelite.api.WorldMapManager; -import net.runelite.api.coords.LocalPoint; import net.runelite.api.events.ChatMessage; import net.runelite.api.events.GameTick; import net.runelite.api.events.GraphicsObjectCreated; import net.runelite.api.events.MenuOptionClicked; -import net.runelite.api.events.ProjectileMoved; import net.runelite.api.widgets.Widget; import static net.runelite.api.widgets.WidgetInfo.WORLD_MAP_VIEW; import net.runelite.client.Notifier; @@ -384,27 +381,6 @@ public class Hooks eventBus.post(chatMessage); } - /** - * Called when a projectile is set to move towards a point. For - * projectiles that target the ground, like AoE projectiles from - * Lizardman Shamans, this is only called once - * - * @param projectile The projectile being moved - * @param targetX X position of where the projectile is being moved to - * @param targetY Y position of where the projectile is being moved to - * @param targetZ Z position of where the projectile is being moved to - * @param cycle - */ - public static void projectileMoved(Projectile projectile, int targetX, int targetY, int targetZ, int cycle) - { - LocalPoint position = new LocalPoint(targetX, targetY); - ProjectileMoved projectileMoved = new ProjectileMoved(); - projectileMoved.setProjectile(projectile); - projectileMoved.setPosition(position); - projectileMoved.setZ(targetZ); - eventBus.post(projectileMoved); - } - public static void updateNpcs() { // The NPC update event seem to run every server tick, 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 00212b46b2..7410a48b3d 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSProjectileMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSProjectileMixin.java @@ -25,9 +25,13 @@ package net.runelite.mixins; import net.runelite.api.Actor; +import net.runelite.api.coords.LocalPoint; +import net.runelite.api.events.ProjectileMoved; 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; @@ -77,4 +81,26 @@ public abstract class RSProjectileMixin implements RSProjectile return players[idx]; } } + + /** + * Called when a projectile is set to move towards a point. For + * projectiles that target the ground, like AoE projectiles from + * Lizardman Shamans, this is only called once + * + * @param targetX X position of where the projectile is being moved to + * @param targetY Y position of where the projectile is being moved to + * @param targetZ Z position of where the projectile is being moved to + * @param cycle + */ + @Inject + @MethodHook("moveProjectile") + public void projectileMoved(int targetX, int targetY, int targetZ, int cycle) + { + final LocalPoint position = new LocalPoint(targetX, targetY); + final ProjectileMoved projectileMoved = new ProjectileMoved(); + projectileMoved.setProjectile(this); + projectileMoved.setPosition(position); + projectileMoved.setZ(targetZ); + eventBus.post(projectileMoved); + } } From 517c4c479622fd0f77f403b7819962b349601afb Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Fri, 22 Jun 2018 11:03:25 +0200 Subject: [PATCH 09/15] Move addChatMessage to mixins Signed-off-by: Tomas Slusny --- .../java/net/runelite/client/callback/Hooks.java | 15 --------------- .../java/net/runelite/mixins/RSClientMixin.java | 16 ++++++++++++++++ 2 files changed, 16 insertions(+), 15 deletions(-) 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 3da2cfd60a..a7905322f9 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,7 +38,6 @@ import java.awt.event.MouseEvent; import java.awt.event.MouseWheelEvent; import java.awt.image.BufferedImage; import java.awt.image.VolatileImage; -import net.runelite.api.ChatMessageType; import net.runelite.api.Client; import net.runelite.api.GraphicsObject; import net.runelite.api.MainBufferProvider; @@ -47,7 +46,6 @@ import net.runelite.api.Region; import net.runelite.api.RenderOverview; import net.runelite.api.TextureProvider; import net.runelite.api.WorldMapManager; -import net.runelite.api.events.ChatMessage; import net.runelite.api.events.GameTick; import net.runelite.api.events.GraphicsObjectCreated; import net.runelite.api.events.MenuOptionClicked; @@ -368,19 +366,6 @@ public class Hooks return menuOptionClicked.isConsumed(); } - public static void addChatMessage(int type, String name, String message, String sender) - { - if (log.isDebugEnabled()) - { - log.debug("Chat message type {}: {}", ChatMessageType.of(type), message); - } - - ChatMessageType chatMessageType = ChatMessageType.of(type); - ChatMessage chatMessage = new ChatMessage(chatMessageType, name, message, sender); - - eventBus.post(chatMessage); - } - public static void updateNpcs() { // The NPC update event seem to run every server tick, 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 8a7122dcca..89940a16c4 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java @@ -64,6 +64,7 @@ import net.runelite.api.WorldType; import net.runelite.api.coords.LocalPoint; import net.runelite.api.coords.WorldPoint; import net.runelite.api.events.BoostedLevelChanged; +import net.runelite.api.events.ChatMessage; import net.runelite.api.events.ClanChanged; import net.runelite.api.events.DraggingWidgetChanged; import net.runelite.api.events.ExperienceChanged; @@ -92,6 +93,7 @@ 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; @@ -1034,4 +1036,18 @@ public abstract class RSClientMixin implements RSClient { Hooks.updateNpcs(); } + + @Inject + @MethodHook("addChatMessage") + public static void onAddChatMessage(int type, String name, String message, String sender) + { + if (log.isDebugEnabled()) + { + log.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); + } } \ No newline at end of file From bac06e5b3a93cf5c19a4268a45fa74ae07694809 Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Fri, 22 Jun 2018 11:05:33 +0200 Subject: [PATCH 10/15] Move graphicsObjectCreated to mixins Signed-off-by: Tomas Slusny --- .../main/java/net/runelite/client/callback/Hooks.java | 8 -------- .../java/net/runelite/mixins/GraphicsObjectMixin.java | 9 +++++++++ 2 files changed, 9 insertions(+), 8 deletions(-) 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 a7905322f9..e4dc01babe 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 @@ -39,7 +39,6 @@ import java.awt.event.MouseWheelEvent; import java.awt.image.BufferedImage; import java.awt.image.VolatileImage; import net.runelite.api.Client; -import net.runelite.api.GraphicsObject; import net.runelite.api.MainBufferProvider; import net.runelite.api.MenuAction; import net.runelite.api.Region; @@ -47,7 +46,6 @@ import net.runelite.api.RenderOverview; import net.runelite.api.TextureProvider; import net.runelite.api.WorldMapManager; import net.runelite.api.events.GameTick; -import net.runelite.api.events.GraphicsObjectCreated; import net.runelite.api.events.MenuOptionClicked; import net.runelite.api.widgets.Widget; import static net.runelite.api.widgets.WidgetInfo.WORLD_MAP_VIEW; @@ -373,10 +371,4 @@ public class Hooks // have been processed is typically more useful. shouldProcessGameTick = true; } - - public static void onGraphicsObjectCreated(GraphicsObject go, int var1, int var2, int var3, int var4, int var5, int var6, int var7) - { - GraphicsObjectCreated event = new GraphicsObjectCreated(go); - eventBus.post(event); - } } 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 0819c6301e..d9ab364eae 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/GraphicsObjectMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/GraphicsObjectMixin.java @@ -25,13 +25,22 @@ package net.runelite.mixins; 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.rs.api.RSGraphicsObject; @Mixin(RSGraphicsObject.class) public abstract class GraphicsObjectMixin implements RSGraphicsObject { + @Inject + GraphicsObjectMixin() + { + final GraphicsObjectCreated event = new GraphicsObjectCreated(this); + eventBus.post(event); + } + @Override @Inject public LocalPoint getLocation() From d948dc05ed183b15af2b59c0fe36db443c180da2 Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Fri, 22 Jun 2018 11:11:39 +0200 Subject: [PATCH 11/15] Move drawAboveOverheads call to mixins Signed-off-by: Tomas Slusny --- .../net/runelite/client/callback/Hooks.java | 3 +- .../net/runelite/client/callback/Hooks.java | 5 +++ .../mixins/RSTextureProviderMixin.java | 42 +++++++++++++++++++ 3 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 runelite-mixins/src/main/java/net/runelite/mixins/RSTextureProviderMixin.java 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 e4dc01babe..8ba888da83 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 @@ -43,7 +43,6 @@ import net.runelite.api.MainBufferProvider; import net.runelite.api.MenuAction; import net.runelite.api.Region; import net.runelite.api.RenderOverview; -import net.runelite.api.TextureProvider; import net.runelite.api.WorldMapManager; import net.runelite.api.events.GameTick; import net.runelite.api.events.MenuOptionClicked; @@ -307,7 +306,7 @@ public class Hooks } } - public static void drawAboveOverheads(TextureProvider textureProvider, int var1) + public static void drawAboveOverheads() { MainBufferProvider bufferProvider = (MainBufferProvider) client.getBufferProvider(); BufferedImage image = (BufferedImage) bufferProvider.getImage(); 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 index f84b121474..124fd68dcc 100644 --- a/runelite-mixins/src/main/java/net/runelite/client/callback/Hooks.java +++ b/runelite-mixins/src/main/java/net/runelite/client/callback/Hooks.java @@ -49,6 +49,11 @@ public class Hooks throw new IllegalStateException(); } + public static void drawAboveOverheads() + { + throw new IllegalStateException(); + } + public static MouseEvent mousePressed(MouseEvent mouseEvent) { throw new RuntimeException(); diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSTextureProviderMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSTextureProviderMixin.java new file mode 100644 index 0000000000..b7d60b0f01 --- /dev/null +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSTextureProviderMixin.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2018, Tomas Slusny + * 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.MethodHook; +import net.runelite.api.mixins.Mixin; +import net.runelite.client.callback.Hooks; +import net.runelite.rs.api.RSTextureProvider; + +@Mixin(RSTextureProvider.class) +public abstract class RSTextureProviderMixin implements RSTextureProvider +{ + @Inject + @MethodHook(value = "checkTextures", end = true) + public void checkTextures(int var1) + { + Hooks.drawAboveOverheads(); + } +} From 7437da12370d9e5985ce7f3186c914eea4858682 Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Fri, 22 Jun 2018 11:14:56 +0200 Subject: [PATCH 12/15] Move drawRegion call to mixins Signed-off-by: Tomas Slusny --- .../src/main/java/net/runelite/client/callback/Hooks.java | 3 +-- .../src/main/java/net/runelite/client/callback/Hooks.java | 5 +++++ .../src/main/java/net/runelite/mixins/RSRegionMixin.java | 2 ++ 3 files changed, 8 insertions(+), 2 deletions(-) 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 8ba888da83..d227e829e8 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 @@ -41,7 +41,6 @@ import java.awt.image.VolatileImage; import net.runelite.api.Client; import net.runelite.api.MainBufferProvider; import net.runelite.api.MenuAction; -import net.runelite.api.Region; import net.runelite.api.RenderOverview; import net.runelite.api.WorldMapManager; import net.runelite.api.events.GameTick; @@ -290,7 +289,7 @@ public class Hooks renderHooks.processDrawComplete(image); } - public static void drawRegion(Region region, int var1, int var2, int var3, int var4, int var5, int var6) + public static void drawRegion() { MainBufferProvider bufferProvider = (MainBufferProvider) client.getBufferProvider(); BufferedImage image = (BufferedImage) bufferProvider.getImage(); 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 index 124fd68dcc..f105adc236 100644 --- a/runelite-mixins/src/main/java/net/runelite/client/callback/Hooks.java +++ b/runelite-mixins/src/main/java/net/runelite/client/callback/Hooks.java @@ -54,6 +54,11 @@ public class Hooks throw new IllegalStateException(); } + public static void drawRegion() + { + throw new IllegalStateException(); + } + public static MouseEvent mousePressed(MouseEvent mouseEvent) { throw new RuntimeException(); 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 27a0bb3647..85f67f0b53 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSRegionMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSRegionMixin.java @@ -31,6 +31,7 @@ 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.rs.api.RSDecorativeObject; import net.runelite.rs.api.RSGroundObject; @@ -54,6 +55,7 @@ public abstract class RSRegionMixin implements RSRegion { isDrawingRegion = true; rs$drawRegion(cameraX, cameraY, cameraZ, cameraPitch, cameraYaw, plane); + Hooks.drawRegion(); } finally { From 486c8c985ae646d5925bdbeae1e666770a0cea81 Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Fri, 22 Jun 2018 11:22:02 +0200 Subject: [PATCH 13/15] Move clientMainLoop to mixins Signed-off-by: Tomas Slusny --- .../src/main/java/net/runelite/client/callback/Hooks.java | 2 +- .../src/main/java/net/runelite/client/callback/Hooks.java | 5 +++++ .../src/main/java/net/runelite/mixins/RSClientMixin.java | 7 +++++++ 3 files changed, 13 insertions(+), 1 deletion(-) 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 d227e829e8..7204fd4d4e 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 @@ -93,7 +93,7 @@ public class Hooks private static long lastCheck; private static boolean shouldProcessGameTick; - public static void clientMainLoop(Client client, boolean arg1) + public static void clientMainLoop() { if (shouldProcessGameTick) { 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 index f105adc236..04dc015362 100644 --- a/runelite-mixins/src/main/java/net/runelite/client/callback/Hooks.java +++ b/runelite-mixins/src/main/java/net/runelite/client/callback/Hooks.java @@ -44,6 +44,11 @@ public class Hooks 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(); 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 89940a16c4..e4451a1890 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java @@ -1050,4 +1050,11 @@ public abstract class RSClientMixin implements RSClient final ChatMessage chatMessage = new ChatMessage(chatMessageType, name, message, sender); eventBus.post(chatMessage); } + + @Inject + @MethodHook("methodDraw") + public void methodDraw(boolean var1) + { + Hooks.clientMainLoop(); + } } \ No newline at end of file From ffbc89a8010388f04aa1e7acbd9165818d6ce055 Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Fri, 22 Jun 2018 11:24:52 +0200 Subject: [PATCH 14/15] Move menuActionHook to mixins Signed-off-by: Tomas Slusny --- .../net/runelite/client/callback/Hooks.java | 29 +------------------ .../net/runelite/client/callback/Hooks.java | 5 ---- .../net/runelite/mixins/RSClientMixin.java | 25 ++++++++++++++-- 3 files changed, 23 insertions(+), 36 deletions(-) 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 7204fd4d4e..1ad07b523a 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 @@ -40,11 +40,9 @@ import java.awt.image.BufferedImage; import java.awt.image.VolatileImage; import net.runelite.api.Client; import net.runelite.api.MainBufferProvider; -import net.runelite.api.MenuAction; import net.runelite.api.RenderOverview; import net.runelite.api.WorldMapManager; import net.runelite.api.events.GameTick; -import net.runelite.api.events.MenuOptionClicked; import net.runelite.api.widgets.Widget; import static net.runelite.api.widgets.WidgetInfo.WORLD_MAP_VIEW; import net.runelite.client.Notifier; @@ -266,7 +264,7 @@ public class Hooks stretchedGraphics = (Graphics2D) stretchedImage.getGraphics(); lastStretchedDimensions = stretchedDimensions; - + /* Fill Canvas before drawing stretched image to prevent artifacts. */ @@ -337,31 +335,6 @@ public class Hooks } } - public static boolean menuActionHook(int actionParam, int widgetId, int menuAction, int id, String menuOption, String menuTarget, int var6, int var7) - { - /* Along the way, the RuneScape client may change a menuAction by incrementing it with 2000. - * I have no idea why, but it does. Their code contains the same conditional statement. - */ - if (menuAction >= 2000) - { - menuAction -= 2000; - } - - MenuOptionClicked menuOptionClicked = new MenuOptionClicked(); - menuOptionClicked.setActionParam(actionParam); - menuOptionClicked.setMenuOption(menuOption); - menuOptionClicked.setMenuTarget(menuTarget); - menuOptionClicked.setMenuAction(MenuAction.of(menuAction)); - menuOptionClicked.setId(id); - menuOptionClicked.setWidgetId(widgetId); - - log.debug("Menu action clicked: {}", menuOptionClicked); - - eventBus.post(menuOptionClicked); - - return menuOptionClicked.isConsumed(); - } - public static void updateNpcs() { // The NPC update event seem to run every server tick, 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 index 04dc015362..9f71c83cb8 100644 --- a/runelite-mixins/src/main/java/net/runelite/client/callback/Hooks.java +++ b/runelite-mixins/src/main/java/net/runelite/client/callback/Hooks.java @@ -123,9 +123,4 @@ public class Hooks { throw new RuntimeException(); } - - public static boolean menuActionHook(int actionParam, int widgetId, int menuAction, int id, String menuOption, String menuTarget, int var6, int var7) - { - throw new RuntimeException(); - } } 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 e4451a1890..b8fe5826f7 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java @@ -72,6 +72,7 @@ import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GrandExchangeOfferChanged; import net.runelite.api.events.MenuEntryAdded; import net.runelite.api.events.MenuOpened; +import net.runelite.api.events.MenuOptionClicked; import net.runelite.api.events.NpcSpawned; import net.runelite.api.events.PlayerDespawned; import net.runelite.api.events.PlayerMenuOptionsChanged; @@ -983,13 +984,31 @@ public abstract class RSClientMixin implements RSClient } @Replace("menuAction") - static void rl$menuAction(int var0, int var1, int var2, int var3, String var4, String var5, int var6, int var7) + static void rl$menuAction(int actionParam, int widgetId, int menuAction, int id, String menuOption, String menuTarget, int var6, int var7) { - if (Hooks.menuActionHook(var0, var1, var2, var3, var4, var5, var6, var7)) + /* Along the way, the RuneScape client may change a menuAction by incrementing it with 2000. + * I have no idea why, but it does. Their code contains the same conditional statement. + */ + if (menuAction >= 2000) + { + menuAction -= 2000; + } + + final MenuOptionClicked menuOptionClicked = new MenuOptionClicked(); + menuOptionClicked.setActionParam(actionParam); + menuOptionClicked.setMenuOption(menuOption); + menuOptionClicked.setMenuTarget(menuTarget); + menuOptionClicked.setMenuAction(MenuAction.of(menuAction)); + menuOptionClicked.setId(id); + menuOptionClicked.setWidgetId(widgetId); + eventBus.post(menuOptionClicked); + + if (menuOptionClicked.isConsumed()) { return; } - rs$menuAction(var0, var1, var2, var3, var4, var5, var6, var7); + + rs$menuAction(actionParam, widgetId, menuAction, id, menuOption, menuTarget, var6, var7); } @FieldHook("username") From d21cac1449da77416681deb3106621c8818b4a63 Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Fri, 22 Jun 2018 11:26:01 +0200 Subject: [PATCH 15/15] Add documentation for Hooks Signed-off-by: Tomas Slusny --- .../src/main/java/net/runelite/client/callback/Hooks.java | 5 +++++ 1 file changed, 5 insertions(+) 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 1ad07b523a..c0ee5d25ce 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 @@ -60,6 +60,11 @@ 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 { // must be public as the mixins use it