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 0a8aefef12..b917759f36 100644 --- a/runelite-api/src/main/java/net/runelite/api/Client.java +++ b/runelite-api/src/main/java/net/runelite/api/Client.java @@ -191,6 +191,8 @@ public interface Client extends GameEngine @VisibleForDevtools void setVarbitValue(int varbit, int value); + boolean shouldPostVarbitEvent(); + HashTable getWidgetFlags(); HashTable getComponentTable(); 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 33bbd35639..6983a71c3c 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 @@ -64,6 +64,7 @@ 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.events.VarbitChanged; import net.runelite.api.widgets.Widget; import static net.runelite.api.widgets.WidgetInfo.WORLD_MAP; import net.runelite.client.Notifier; @@ -102,6 +103,7 @@ public class Hooks 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 VarbitChanged varbitChanged = new VarbitChanged(); private static Dimension lastStretchedDimensions; private static BufferedImage stretchedImage; @@ -116,6 +118,11 @@ public class Hooks { shouldProcessGameTick = false; + if (client.shouldPostVarbitEvent()) + { + eventBus.post(varbitChanged); + } + _deferredEventBus.replay(); eventBus.post(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 91f3a51c7e..71025e4c29 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java @@ -74,7 +74,6 @@ import net.runelite.api.events.PlayerMenuOptionsChanged; import net.runelite.api.events.PlayerSpawned; 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.mixins.Copy; import net.runelite.api.mixins.FieldHook; @@ -129,6 +128,9 @@ public abstract class RSClientMixin implements RSClient @Inject private static int inventoryDragDelay; + @Inject + private static boolean hasVarbitChanged; + @Inject @Override public boolean isInterpolatePlayerAnimations() @@ -815,8 +817,16 @@ public abstract class RSClientMixin implements RSClient @Inject public static void settingsChanged(int idx) { - VarbitChanged varbitChanged = new VarbitChanged(); - eventBus.post(varbitChanged); + hasVarbitChanged = true; + } + + @Inject + @Override + public boolean shouldPostVarbitEvent() + { + boolean ret = hasVarbitChanged; + hasVarbitChanged = false; + return ret; } @FieldHook("isResized")