Move menuActionHook to mixins

Signed-off-by: Tomas Slusny <slusnucky@gmail.com>
This commit is contained in:
Tomas Slusny
2018-06-22 11:24:52 +02:00
committed by Adam
parent 486c8c985a
commit ffbc89a801
3 changed files with 23 additions and 36 deletions

View File

@@ -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,

View File

@@ -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();
}
}

View File

@@ -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")