diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d2fa7ff580..691a56bcdb 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -12,7 +12,7 @@ jobs: if: github.event_name == 'pull_request' uses: seferov/pr-lint-action@master with: - title-regex: '^([\w-]+): \w+' + title-regex: '^([\w-/]+): \w+' build: runs-on: windows-latest 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 0cfc81ca28..2913e6e065 100644 --- a/runelite-api/src/main/java/net/runelite/api/Client.java +++ b/runelite-api/src/main/java/net/runelite/api/Client.java @@ -1839,4 +1839,22 @@ public interface Client extends GameShell * @param oldWidth old width */ void scaleSprite(int[] canvas, int[] pixels, int color, int pixelX, int pixelY, int canvasIdx, int canvasOffset, int newWidth, int newHeight, int pixelWidth, int pixelHeight, int oldWidth); + + /** + * Get the MenuEntry at client.getMenuOptionCount() - 1 + * + * This is useful so you don't have to use getMenuEntries, + * which will create a big array, when you only want to change + * the left click one. + */ + MenuEntry getLeftClickMenuEntry(); + + /** + * Set the MenuEntry at client.getMenuOptionCount() - 1 + * + * This is useful so you don't have to use setMenuEntries, + * which will arraycopy a big array to several smaller arrays lol, + * when you only want to change the left click one. + */ + void setLeftClickMenuEntry(MenuEntry entry); } \ No newline at end of file diff --git a/runelite-api/src/main/java/net/runelite/api/MenuEntry.java b/runelite-api/src/main/java/net/runelite/api/MenuEntry.java index 68a51ee1e9..cc1c96a783 100644 --- a/runelite-api/src/main/java/net/runelite/api/MenuEntry.java +++ b/runelite-api/src/main/java/net/runelite/api/MenuEntry.java @@ -24,17 +24,15 @@ */ package net.runelite.api; -import lombok.AccessLevel; import lombok.Data; import lombok.NoArgsConstructor; -import lombok.Setter; /** * A menu entry in a right-click menu. */ @Data @NoArgsConstructor -public class MenuEntry +public class MenuEntry implements Cloneable { /** * The option text added to the menu (ie. "Walk here", "Use"). @@ -46,7 +44,6 @@ public class MenuEntry * If the option does not apply to any target, this field * will be set to empty string. */ - @Setter(AccessLevel.NONE) private String target; /** * An identifier value for the target of the action. @@ -84,21 +81,24 @@ public class MenuEntry this.forceLeftClick = forceLeftClick; } - public static MenuEntry copy(MenuEntry src) + @Override + public MenuEntry clone() { - return new MenuEntry( - src.getOption(), - src.getTarget(), - src.getIdentifier(), - src.getOpcode(), - src.getParam0(), - src.getParam1(), - src.isForceLeftClick() - ); + try + { + return (MenuEntry) super.clone(); + } + catch (CloneNotSupportedException ex) + { + throw new RuntimeException(ex); + } } - public void setTarget(String target) + /** + * Get opcode, but as it's enum counterpart + */ + public MenuOpcode getMenuOpcode() { - this.target = target; + return MenuOpcode.of(getOpcode()); } } diff --git a/runelite-api/src/main/java/net/runelite/api/events/MenuEntryAdded.java b/runelite-api/src/main/java/net/runelite/api/events/MenuEntryAdded.java index 00238f8b10..442c2dc1b3 100644 --- a/runelite-api/src/main/java/net/runelite/api/events/MenuEntryAdded.java +++ b/runelite-api/src/main/java/net/runelite/api/events/MenuEntryAdded.java @@ -24,21 +24,18 @@ */ package net.runelite.api.events; -import lombok.Data; -import lombok.RequiredArgsConstructor; +import lombok.Setter; import net.runelite.api.MenuEntry; /** * An event when a new entry is added to a right-click menu. */ -@Data -@RequiredArgsConstructor -public class MenuEntryAdded implements Event +public class MenuEntryAdded extends MenuEntry implements Event { - /** - * The MenuEntry object that was actually added - */ - private final MenuEntry menuEntry; + public MenuEntryAdded(String option, String target, int identifier, int opcode, int param0, int param1, boolean forceLeftClick) + { + super(option, target, identifier, opcode, param0, param1, forceLeftClick); + } /** * If this is set to true client mixin will update @@ -47,40 +44,11 @@ public class MenuEntryAdded implements Event * Checks if count is the same, but doesn't check if there's * been multiple changes */ - private boolean wasModified; + @Setter + private boolean modified; - public String getOption() + public boolean hasBeenModified() { - return menuEntry.getOption(); - } - - public String getTarget() - { - return menuEntry.getTarget(); - } - - public int getType() - { - return menuEntry.getOpcode(); - } - - public int getIdentifier() - { - return menuEntry.getIdentifier(); - } - - public int getActionParam0() - { - return menuEntry.getParam0(); - } - - public int getActionParam1() - { - return menuEntry.getParam1(); - } - - public boolean isForceLeftClick() - { - return menuEntry.isForceLeftClick(); + return modified; } } diff --git a/runelite-api/src/main/java/net/runelite/api/events/MenuOptionClicked.java b/runelite-api/src/main/java/net/runelite/api/events/MenuOptionClicked.java index 04d1084c9a..5bd32e33ee 100644 --- a/runelite-api/src/main/java/net/runelite/api/events/MenuOptionClicked.java +++ b/runelite-api/src/main/java/net/runelite/api/events/MenuOptionClicked.java @@ -25,9 +25,9 @@ package net.runelite.api.events; import lombok.AccessLevel; -import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.Getter; import lombok.Setter; -import net.runelite.api.MenuOpcode; import net.runelite.api.MenuEntry; /** @@ -41,88 +41,23 @@ import net.runelite.api.MenuEntry; * By default, when there is no action performed when left-clicking, * it seems that this event still triggers with the "Cancel" action. */ -@Data -public class MenuOptionClicked implements Event +@Getter +@EqualsAndHashCode(callSuper = true) +public class MenuOptionClicked extends MenuEntry implements Event { - public MenuOptionClicked(MenuEntry entry) + public MenuOptionClicked(String option, String target, int identifier, int opcode, int param0, int param1, boolean forceLeftClick) { - menuEntry = entry; + super(option, target, identifier, opcode, param0, param1, forceLeftClick); authentic = true; } - public MenuOptionClicked(MenuEntry entry, boolean authentic, int mouseButton) + public MenuOptionClicked(String option, String target, int identifier, int opcode, int param0, int param1, boolean forceLeftClick, boolean authentic, int mouseButton) { - menuEntry = entry; + super(option, target, identifier, opcode, param0, param1, forceLeftClick); this.authentic = authentic; this.mouseButton = mouseButton; } - /** - * The actual MenuEntry object representing what was clicked - */ - private MenuEntry menuEntry; - - /** - * The option text added to the menu. - */ - public String getOption() - { - return menuEntry.getOption(); - } - - /** - * The target of the action. - */ - public String getTarget() - { - return menuEntry.getTarget(); - } - - /** - * MenuOpcode but int-ish - */ - public int getOpcode() - { - return menuEntry.getOpcode(); - } - - /** - * The ID of the object, actor, or item that the interaction targets. - */ - public int getIdentifier() - { - return menuEntry.getIdentifier(); - } - - /** - * The action parameter used in the click. - */ - public int getActionParam0() - { - return menuEntry.getParam0(); - } - - /** - * shit docs - */ - public int getActionParam1() - { - return menuEntry.getParam1(); - } - - public boolean isForceLeftClick() - { - return menuEntry.isForceLeftClick(); - } - - /** - * The action performed. - */ - public MenuOpcode getMenuOpcode() - { - return MenuOpcode.of(getOpcode()); - } - /** * Whether or not the event has been consumed by a subscriber. */ @@ -148,6 +83,17 @@ public class MenuOptionClicked implements Event /** * Whether or not the event is authentic. */ - @Setter(AccessLevel.PRIVATE) - private boolean authentic; + @Setter(AccessLevel.NONE) + private final boolean authentic; + + public void setMenuEntry(MenuEntry e) + { + setOption(e.getOption()); + setTarget(e.getTarget()); + setIdentifier(e.getIdentifier()); + setOpcode(e.getOpcode()); + setParam0(e.getParam0()); + setParam1(e.getParam1()); + setForceLeftClick(e.isForceLeftClick()); + } } diff --git a/runelite-client/src/main/java/net/runelite/client/menus/MenuManager.java b/runelite-client/src/main/java/net/runelite/client/menus/MenuManager.java index 0a4de83914..58962ca97a 100644 --- a/runelite-client/src/main/java/net/runelite/client/menus/MenuManager.java +++ b/runelite-client/src/main/java/net/runelite/client/menus/MenuManager.java @@ -247,14 +247,14 @@ public class MenuManager { for (AbstractComparableEntry e : hiddenEntries) { - if (e.matches(event.getMenuEntry())) + if (e.matches(event)) { client.setMenuOptionCount(client.getMenuOptionCount() - 1); return; } } - int widgetId = event.getActionParam1(); + int widgetId = event.getParam1(); Collection options = managedMenuOptions.get(widgetId); for (WidgetMenuOption currentMenu : options) @@ -443,7 +443,7 @@ public class MenuManager return; // not a player menu } - int widgetId = event.getActionParam1(); + int widgetId = event.getParam1(); Collection options = managedMenuOptions.get(widgetId); for (WidgetMenuOption curMenuOption : options) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/agility/AgilityPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/agility/AgilityPlugin.java index 54f2108588..fcceef31f9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/agility/AgilityPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/agility/AgilityPlugin.java @@ -40,8 +40,8 @@ import lombok.extern.slf4j.Slf4j; import net.runelite.api.Client; import net.runelite.api.ItemID; import static net.runelite.api.ItemID.AGILITY_ARENA_TICKET; -import net.runelite.api.MenuOpcode; import net.runelite.api.MenuEntry; +import net.runelite.api.MenuOpcode; import net.runelite.api.Player; import net.runelite.api.Skill; import static net.runelite.api.Skill.AGILITY; @@ -49,6 +49,7 @@ import net.runelite.api.Tile; import net.runelite.api.TileItem; import net.runelite.api.TileObject; import net.runelite.api.coords.WorldPoint; +import net.runelite.api.events.BeforeRender; import net.runelite.api.events.BoostedLevelChanged; import net.runelite.api.events.ConfigChanged; import net.runelite.api.events.DecorativeObjectChanged; @@ -65,7 +66,7 @@ import net.runelite.api.events.GroundObjectDespawned; import net.runelite.api.events.GroundObjectSpawned; import net.runelite.api.events.ItemDespawned; import net.runelite.api.events.ItemSpawned; -import net.runelite.api.events.MenuEntryAdded; +import net.runelite.api.events.MenuOpened; import net.runelite.api.events.WallObjectChanged; import net.runelite.api.events.WallObjectDespawned; import net.runelite.api.events.WallObjectSpawned; @@ -90,6 +91,7 @@ import net.runelite.client.util.ColorUtil; public class AgilityPlugin extends Plugin { private static final int AGILITY_ARENA_REGION_ID = 11157; + private static final Object MENU_SUBS = new Object(); @Getter(AccessLevel.PACKAGE) private final Map obstacles = new HashMap<>(); @@ -164,7 +166,6 @@ public class AgilityPlugin extends Plugin private Color trapColor; private boolean notifyAgilityArena; private boolean showAgilityArenaTimer; - private boolean showShortcutLevel; @Override protected void startUp() throws Exception @@ -172,6 +173,11 @@ public class AgilityPlugin extends Plugin updateConfig(); addSubscriptions(); + if (config.showShortcutLevel()) + { + addMenuSubscriptions(); + } + overlayManager.add(agilityOverlay); overlayManager.add(lapCounterOverlay); agilityLevel = client.getBoostedSkillLevel(Skill.AGILITY); @@ -181,6 +187,7 @@ public class AgilityPlugin extends Plugin protected void shutDown() throws Exception { eventBus.unregister(this); + eventBus.unregister(MENU_SUBS); overlayManager.remove(agilityOverlay); overlayManager.remove(lapCounterOverlay); @@ -211,7 +218,12 @@ public class AgilityPlugin extends Plugin eventBus.subscribe(DecorativeObjectSpawned.class, this, this::onDecorativeObjectSpawned); eventBus.subscribe(DecorativeObjectChanged.class, this, this::onDecorativeObjectChanged); eventBus.subscribe(DecorativeObjectDespawned.class, this, this::onDecorativeObjectDespawned); - eventBus.subscribe(MenuEntryAdded.class, this, this::onMenuEntryAdded); + } + + private void addMenuSubscriptions() + { + eventBus.subscribe(BeforeRender.class, MENU_SUBS, this::onBeforeRender); + eventBus.subscribe(MenuOpened.class, MENU_SUBS, this::onMenuOpened); } private void onGameStateChanged(GameStateChanged event) @@ -245,6 +257,19 @@ public class AgilityPlugin extends Plugin return; } + if ("addLevelsToShortcutOptions".equals(event.getKey())) + { + if (config.showShortcutLevel()) + { + addMenuSubscriptions(); + } + else + { + eventBus.unregister(MENU_SUBS); + } + return; + } + updateConfig(); if (!this.showAgilityArenaTimer) @@ -268,7 +293,6 @@ public class AgilityPlugin extends Plugin this.trapColor = config.getTrapColor(); this.notifyAgilityArena = config.notifyAgilityArena(); this.showAgilityArenaTimer = config.showAgilityArenaTimer(); - this.showShortcutLevel = config.showShortcutLevel(); } private void onExperienceChanged(ExperienceChanged event) @@ -495,32 +519,52 @@ public class AgilityPlugin extends Plugin } } - private void onMenuEntryAdded(MenuEntryAdded event) + private void onBeforeRender(BeforeRender event) { - if (!this.showShortcutLevel) + if (client.isMenuOpen() || client.getMenuOptionCount() <= 0) { return; } - //Guarding against non-first option because agility shortcuts are always that type of event. - if (event.getType() != MenuOpcode.GAME_OBJECT_FIRST_OPTION.getId()) + final MenuEntry entry = client.getLeftClickMenuEntry(); + if (checkAndModify(entry)) { - return; + client.setLeftClickMenuEntry(entry); + } + } + + private void onMenuOpened(MenuOpened event) + { + boolean changed = false; + for (MenuEntry entry : event.getMenuEntries()) + { + changed |= checkAndModify(entry); + } + + event.setModified(changed); + } + + private boolean checkAndModify(MenuEntry old) + { + //Guarding against non-first option because agility shortcuts are always that type of event. + if (old.getOpcode() != MenuOpcode.GAME_OBJECT_FIRST_OPTION.getId()) + { + return false; } for (Obstacle nearbyObstacle : getObstacles().values()) { AgilityShortcut shortcut = nearbyObstacle.getShortcut(); - if (shortcut != null && Ints.contains(shortcut.getObstacleIds(), event.getIdentifier())) + if (shortcut != null && Ints.contains(shortcut.getObstacleIds(), old.getIdentifier())) { - final MenuEntry entry = event.getMenuEntry(); final int reqLevel = shortcut.getLevel(); final String requirementText = ColorUtil.getLevelColorString(reqLevel, getAgilityLevel()) + " (level-" + reqLevel + ")"; - entry.setTarget(event.getTarget() + requirementText); - event.setWasModified(true); - return; + old.setTarget(old.getTarget() + requirementText); + return true; } } + + return false; } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/BankTagsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/BankTagsPlugin.java index ee192041ff..1c122df047 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/BankTagsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/BankTagsPlugin.java @@ -314,11 +314,11 @@ public class BankTagsPlugin extends Plugin implements MouseWheelListener, KeyLis private void onMenuEntryAdded(MenuEntryAdded event) { - if (event.getActionParam1() == WidgetInfo.BANK_ITEM_CONTAINER.getId() + if (event.getParam1() == WidgetInfo.BANK_ITEM_CONTAINER.getId() && event.getOption().equals("Examine")) { Widget container = client.getWidget(WidgetInfo.BANK_ITEM_CONTAINER); - Widget item = container.getChild(event.getActionParam0()); + Widget item = container.getChild(event.getParam0()); int itemID = item.getItemId(); String text = EDIT_TAGS_MENU_OPTION; int tagCount = tagManager.getTags(itemID, false).size() + tagManager.getTags(itemID, true).size(); @@ -333,8 +333,8 @@ public class BankTagsPlugin extends Plugin implements MouseWheelListener, KeyLis event.getTarget(), MenuOpcode.RUNELITE.getId(), event.getIdentifier(), - event.getActionParam0(), - event.getActionParam1(), + event.getParam0(), + event.getParam1(), false ); } @@ -344,12 +344,12 @@ public class BankTagsPlugin extends Plugin implements MouseWheelListener, KeyLis private void onMenuOptionClicked(MenuOptionClicked event) { - if (event.getActionParam1() == WidgetInfo.BANK_ITEM_CONTAINER.getId() + if (event.getParam1() == WidgetInfo.BANK_ITEM_CONTAINER.getId() && event.getMenuOpcode() == MenuOpcode.RUNELITE && event.getOption().startsWith(EDIT_TAGS_MENU_OPTION)) { event.consume(); - int inventoryIndex = event.getActionParam0(); + int inventoryIndex = event.getParam0(); ItemContainer bankContainer = client.getItemContainer(InventoryID.BANK); if (bankContainer == null) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/TabInterface.java b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/TabInterface.java index 6870af1e76..b15c412c95 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/TabInterface.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/TabInterface.java @@ -536,12 +536,12 @@ public class TabInterface } if (activeTab != null - && event.getActionParam1() == WidgetInfo.BANK_ITEM_CONTAINER.getId() + && event.getParam1() == WidgetInfo.BANK_ITEM_CONTAINER.getId() && event.getOption().equals("Examine")) { insertMenuEntry(event, REMOVE_TAG + " (" + activeTab.getTag() + ")", event.getTarget()); } - else if (event.getActionParam1() == WidgetInfo.BANK_DEPOSIT_INVENTORY.getId() + else if (event.getParam1() == WidgetInfo.BANK_DEPOSIT_INVENTORY.getId() && event.getOption().equals("Deposit inventory")) { insertMenuEntry(event, TAG_INVENTORY, event.getTarget()); @@ -551,7 +551,7 @@ public class TabInterface insertMenuEntry(event, TAG_INVENTORY, ColorUtil.wrapWithColorTag(activeTab.getTag(), HILIGHT_COLOR)); } } - else if (event.getActionParam1() == WidgetInfo.BANK_DEPOSIT_EQUIPMENT.getId() + else if (event.getParam1() == WidgetInfo.BANK_DEPOSIT_EQUIPMENT.getId() && event.getOption().equals("Deposit worn items")) { insertMenuEntry(event, TAG_GEAR, event.getTarget()); @@ -591,7 +591,7 @@ public class TabInterface { if (event.getOption().startsWith(CHANGE_ICON + " (")) { - ItemDefinition item = getItem(event.getActionParam0()); + ItemDefinition item = getItem(event.getParam0()); if (item != null) { int itemId = itemManager.canonicalize(item.getId()); @@ -622,13 +622,13 @@ public class TabInterface activateTab(null); } else if (activeTab != null - && event.getActionParam1() == WidgetInfo.BANK_ITEM_CONTAINER.getId() + && event.getParam1() == WidgetInfo.BANK_ITEM_CONTAINER.getId() && event.getMenuOpcode() == MenuOpcode.RUNELITE && event.getOption().startsWith(REMOVE_TAG)) { // Add "remove" menu entry to all items in bank while tab is selected event.consume(); - final ItemDefinition item = getItem(event.getActionParam0()); + final ItemDefinition item = getItem(event.getParam0()); final int itemId; if (item != null) { @@ -638,10 +638,10 @@ public class TabInterface } } else if (event.getMenuOpcode() == MenuOpcode.RUNELITE - && ((event.getActionParam1() == WidgetInfo.BANK_DEPOSIT_INVENTORY.getId() && event.getOption().equals(TAG_INVENTORY)) - || (event.getActionParam1() == WidgetInfo.BANK_DEPOSIT_EQUIPMENT.getId() && event.getOption().equals(TAG_GEAR)))) + && ((event.getParam1() == WidgetInfo.BANK_DEPOSIT_INVENTORY.getId() && event.getOption().equals(TAG_INVENTORY)) + || (event.getParam1() == WidgetInfo.BANK_DEPOSIT_EQUIPMENT.getId() && event.getOption().equals(TAG_GEAR)))) { - handleDeposit(event, event.getActionParam1() == WidgetInfo.BANK_DEPOSIT_INVENTORY.getId()); + handleDeposit(event, event.getParam1() == WidgetInfo.BANK_DEPOSIT_INVENTORY.getId()); } } @@ -1057,8 +1057,8 @@ public class TabInterface target, MenuOpcode.RUNELITE.getId(), event.getIdentifier(), - event.getActionParam0(), - event.getActionParam1(), + event.getParam0(), + event.getParam1(), false ); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chattranslation/ChatTranslationConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/chattranslation/ChatTranslationConfig.java index 224555ea78..44809065a0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chattranslation/ChatTranslationConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chattranslation/ChatTranslationConfig.java @@ -21,13 +21,13 @@ public interface ChatTranslationConfig extends Config } @ConfigItem( - keyName = "translateOptionVisable", + keyName = "translateOptionVisible", name = "Show 'Translate' menu option", description = "Adds 'Translate' to the right-click menu in the Chatbox.", position = 1, titleSection = "chatTranslation" ) - default boolean translateOptionVisable() + default boolean translateOptionVisible() { return true; } @@ -39,7 +39,7 @@ public interface ChatTranslationConfig extends Config position = 2, titleSection = "chatTranslation", hidden = true, - unhide = "translateOptionVisable" + unhide = "translateOptionVisible" ) default boolean publicChat() { @@ -53,17 +53,25 @@ public interface ChatTranslationConfig extends Config position = 3, titleSection = "chatTranslation", hidden = true, - unhide = "translateOptionVisable" + unhide = "translateOptionVisible" ) - default String getPlayerNames() + default String playerNames() { return ""; } + @ConfigItem( + keyName = "playerNames", + name = "", + description = "", + hidden = true + ) + void playerNames(String names); + @ConfigItem( keyName = "publicTargetLanguage", name = "Target Language", - description = "Language to translate messages to.", + description = "Language to translate others' messages to.", position = 4, titleSection = "chatTranslation", hidden = true, @@ -100,7 +108,7 @@ public interface ChatTranslationConfig extends Config @ConfigItem( keyName = "playerTargetLanguage", name = "Target Language", - description = "Language to translate messages to.", + description = "Language to translate your messages to.", position = 7, titleSection = "playerMessageTranslation", hidden = true, diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chattranslation/ChatTranslationPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/chattranslation/ChatTranslationPlugin.java index 2d2d2723c5..8fcdc625c1 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chattranslation/ChatTranslationPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chattranslation/ChatTranslationPlugin.java @@ -1,26 +1,25 @@ package net.runelite.client.plugins.chattranslation; import com.google.common.collect.ImmutableList; -import com.google.common.collect.ObjectArrays; import com.google.inject.Provides; import java.awt.event.KeyEvent; +import java.io.IOException; import java.util.HashSet; import java.util.Set; import javax.inject.Inject; -import javax.inject.Provider; import javax.inject.Singleton; import lombok.extern.slf4j.Slf4j; import net.runelite.api.Client; import net.runelite.api.GameState; -import net.runelite.api.MenuOpcode; import net.runelite.api.MenuEntry; +import net.runelite.api.MenuOpcode; import net.runelite.api.MessageNode; import static net.runelite.api.ScriptID.CHATBOX_INPUT; import net.runelite.api.VarClientStr; import net.runelite.api.events.ChatMessage; import net.runelite.api.events.ConfigChanged; -import net.runelite.api.events.MenuEntryAdded; -import net.runelite.api.events.PlayerMenuOptionClicked; +import net.runelite.api.events.MenuOpened; +import net.runelite.api.events.MenuOptionClicked; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.callback.ClientThread; @@ -34,7 +33,6 @@ import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.PluginType; import net.runelite.api.util.Text; -import org.apache.commons.lang3.ArrayUtils; @PluginDescriptor( name = "Chat Translator", @@ -46,11 +44,14 @@ import org.apache.commons.lang3.ArrayUtils; @Slf4j public class ChatTranslationPlugin extends Plugin implements KeyListener { - + private static final Object PUBLIC = new Object(); + private static final Object OPTION = new Object(); private static final String TRANSLATE = "Translate"; + // TODO: Find out if "Remove friend" is correct here, aka if clan tab should have the Translate option private static final ImmutableList AFTER_OPTIONS = ImmutableList.of("Message", "Add ignore", "Remove friend", "Kick"); + private final Translator translator = new Translator(); private final Set playerNames = new HashSet<>(); @Inject @@ -60,10 +61,7 @@ public class ChatTranslationPlugin extends Plugin implements KeyListener private ClientThread clientThread; @Inject - private ConfigManager configManager; - - @Inject - private Provider menuManager; + private MenuManager menuManager; @Inject private ChatMessageManager chatMessageManager; @@ -77,13 +75,6 @@ public class ChatTranslationPlugin extends Plugin implements KeyListener @Inject private EventBus eventBus; - private boolean translateOptionVisable; - private boolean publicChat; - private String getPlayerNames; - private Languages publicTargetLanguage; - private boolean playerChat; - private Languages playerTargetLanguage; - @Provides ChatTranslationConfig provideConfig(ConfigManager configManager) { @@ -93,104 +84,149 @@ public class ChatTranslationPlugin extends Plugin implements KeyListener @Override protected void startUp() throws Exception { - updateConfig(); - addSubscriptions(); + eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - if (client != null && this.translateOptionVisable) + translator.setInLang(config.publicTargetLanguage()); + translator.setOutLang(config.playerTargetLanguage()); + + if (config.playerChat()) { - menuManager.get().addPlayerMenuItem(TRANSLATE); + keyManager.registerKeyListener(this); } - keyManager.registerKeyListener(this); - playerNames.addAll(Text.fromCSV(config.getPlayerNames())); + if (config.publicChat()) + { + eventBus.subscribe(ChatMessage.class, PUBLIC, this::onChatMessage); + } + + if (config.translateOptionVisible()) + { + menuManager.addPlayerMenuItem(TRANSLATE); + eventBus.subscribe(MenuOpened.class, OPTION, this::onMenuOpened); + eventBus.subscribe(MenuOptionClicked.class, OPTION, this::onMenuOptionClicked); + } + + for (String name : Text.fromCSV(config.playerNames().toLowerCase())) + { + playerNames.add(Text.toJagexName(name)); + } } @Override protected void shutDown() throws Exception { eventBus.unregister(this); - if (client != null && this.translateOptionVisable) - { - menuManager.get().removePlayerMenuItem(TRANSLATE); - } + eventBus.unregister(OPTION); + eventBus.unregister(PUBLIC); + menuManager.removePlayerMenuItem(TRANSLATE); keyManager.unregisterKeyListener(this); - playerNames.clear(); } - private void addSubscriptions() - { - eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(MenuEntryAdded.class, this, this::onMenuEntryAdded); - eventBus.subscribe(PlayerMenuOptionClicked.class, this, this::onPlayerMenuOptionClicked); - eventBus.subscribe(ChatMessage.class, this, this::onChatMessage); - } - private void onConfigChanged(ConfigChanged event) { - if (event.getGroup().equals("chattranslation")) - { - updateConfig(); - if (event.getKey().equals("playerNames")) - { - for (String names : Text.fromCSV(this.getPlayerNames)) - { - if (!playerNames.contains(Text.toJagexName(names))) - { - playerNames.add(Text.toJagexName(names)); - } - } - } - } - } - - private void onMenuEntryAdded(MenuEntryAdded event) - { - if (!this.translateOptionVisable) + if (!event.getGroup().equals("chattranslation")) { return; } - int groupId = WidgetInfo.TO_GROUP(event.getActionParam1()); - String option = event.getOption(); - - if (groupId == WidgetInfo.CHATBOX.getGroupId()) + switch (event.getKey()) { - if (!AFTER_OPTIONS.contains(option)) - { - return; - } - - final MenuEntry menuEntry = new MenuEntry(); - menuEntry.setOption(TRANSLATE); - menuEntry.setTarget(event.getTarget()); - menuEntry.setOpcode(MenuOpcode.RUNELITE.getId()); - menuEntry.setParam0(event.getActionParam0()); - menuEntry.setParam1(event.getActionParam1()); - menuEntry.setIdentifier(event.getIdentifier()); - - MenuEntry[] newMenu = ObjectArrays.concat(menuEntry, client.getMenuEntries()); - int menuEntryCount = newMenu.length; - ArrayUtils.swap(newMenu, menuEntryCount - 1, menuEntryCount - 2); - client.setMenuEntries(newMenu); + case "translateOptionVisible": + if (config.translateOptionVisible()) + { + menuManager.addPlayerMenuItem(TRANSLATE); + eventBus.subscribe(MenuOpened.class, TRANSLATE, this::onMenuOpened); + eventBus.subscribe(MenuOptionClicked.class, TRANSLATE, this::onMenuOptionClicked); + } + else + { + menuManager.removePlayerMenuItem(TRANSLATE); + eventBus.unregister(TRANSLATE); + } + break; + case "publicChat": + if (config.publicChat()) + { + eventBus.subscribe(ChatMessage.class, PUBLIC, this::onChatMessage); + } + else + { + eventBus.unregister(PUBLIC); + } + break; + case "playerNames": + playerNames.clear(); + for (String names : Text.fromCSV(config.playerNames().toLowerCase())) + { + playerNames.add(Text.toJagexName(names)); + } + break; + case "publicTargetLanguage": + translator.setInLang(config.publicTargetLanguage()); + break; + case "playerChat": + if (config.playerChat()) + { + keyManager.registerKeyListener(this); + } + else + { + keyManager.unregisterKeyListener(this); + } + break; + case "playerTargetLanguage": + translator.setOutLang(config.playerTargetLanguage()); + break; } } - private void onPlayerMenuOptionClicked(PlayerMenuOptionClicked event) + private void onMenuOpened(MenuOpened event) { - if (event.getMenuOption().equals(TRANSLATE)) + MenuEntry[] entries = event.getMenuEntries(); + + for (int i = 0; i < event.getMenuEntries().length; i++) { - String name = Text.toJagexName(event.getMenuTarget()); - if (!playerNames.contains(name)) + if (!AFTER_OPTIONS.contains(entries[i].getOption())) { - playerNames.add(name); + continue; } - configManager.setConfiguration("chattranslation", "playerNames", Text.toCSV(playerNames)); - configManager.sendConfig(); + MenuEntry[] newEntries = new MenuEntry[entries.length + 1]; + + System.arraycopy(entries, 0, newEntries, 0, i + 1); + System.arraycopy(entries, i, newEntries, i + 1, entries.length - i); + + newEntries[i] = newEntries[i].clone(); + newEntries[i].setOption(TRANSLATE); + newEntries[i].setOpcode(MenuOpcode.RUNELITE.getId()); + + event.setMenuEntries(newEntries); + event.setModified(true); + + return; } } + private void onMenuOptionClicked(MenuOptionClicked event) + { + if (event.getOpcode() != MenuOpcode.RUNELITE.getId() || + !event.getOption().equals(TRANSLATE)) + { + return; + } + + String name = + Text.toJagexName( + Text.removeTags(event.getTarget(), true) + .toLowerCase() + ); + + playerNames.add(name); + + config.playerNames(Text.toCSV(playerNames)); + } + private void onChatMessage(ChatMessage chatMessage) { if (client.getGameState() != GameState.LOADING && client.getGameState() != GameState.LOGGED_IN) @@ -202,41 +238,31 @@ public class ChatTranslationPlugin extends Plugin implements KeyListener case PUBLICCHAT: case MODCHAT: case FRIENDSCHAT: - if (!this.publicChat) - { - return; - } break; default: return; } - for (String nameList : playerNames) + if (!playerNames.contains(Text.toJagexName(Text.removeTags(chatMessage.getName().toLowerCase())))) { - if (nameList.contains(Text.toJagexName(chatMessage.getName()))) - { - String message = chatMessage.getMessage(); - - Translator translator = new Translator(); - - try - { - String translation = translator.translate("auto", this.publicTargetLanguage.toShortString(), message); - if (translation != null) - { - final MessageNode messageNode = chatMessage.getMessageNode(); - messageNode.setRuneLiteFormatMessage(translation); - chatMessageManager.update(messageNode); - } - } - catch (Exception e) - { - log.warn(e.toString()); - } - - client.refreshChat(); - } + return; } + + final String message = chatMessage.getMessage(); + + try + { + final String translation = translator.translateIncoming(message); + final MessageNode messageNode = chatMessage.getMessageNode(); + messageNode.setRuneLiteFormatMessage(translation); + chatMessageManager.update(messageNode); + } + catch (IOException e) + { + log.warn("Error translating message", e); + } + + client.refreshChat(); } @Override @@ -247,59 +273,39 @@ public class ChatTranslationPlugin extends Plugin implements KeyListener return; } - if (!this.playerChat) + final Widget chatboxParent = client.getWidget(WidgetInfo.CHATBOX_PARENT); + + if (chatboxParent == null || chatboxParent.getOnKeyListener() == null || event.getKeyCode() != 0xA) { return; } - Widget chatboxParent = client.getWidget(WidgetInfo.CHATBOX_PARENT); + final String message = client.getVar(VarClientStr.CHATBOX_TYPED_TEXT); + final String translated; - if (chatboxParent != null && chatboxParent.getOnKeyListener() != null && event.getKeyCode() == 0xA) + try { - Translator translator = new Translator(); - String message = client.getVar(VarClientStr.CHATBOX_TYPED_TEXT); - - if (message.startsWith("/")) - { - try - { - if (config.playerTargetLanguage() == Languages.GERMAN) - { - // This is 'sort of' needed as German will translate the / and it will send to public-chat instead of clan-chat. - client.setVar(VarClientStr.CHATBOX_TYPED_TEXT, "/" + translator.translate("auto", config.playerTargetLanguage().toShortString(), message)); - } - else - { - client.setVar(VarClientStr.CHATBOX_TYPED_TEXT, translator.translate("auto", config.playerTargetLanguage().toShortString(), message)); - } - } - catch (Exception e) - { - log.warn("Translation error", e); - } - return; - } - - event.consume(); - - try - { - //Automatically check language of message and translate to selected language. - String translation = translator.translate("auto", this.playerTargetLanguage.toShortString(), message); - if (translation != null) - { - client.setVar(VarClientStr.CHATBOX_TYPED_TEXT, translation); - - clientThread.invoke(() -> - client.runScript(CHATBOX_INPUT, 0, translation)); - } - client.setVar(VarClientStr.CHATBOX_TYPED_TEXT, ""); - } - catch (Exception e) - { - log.warn(e.toString()); - } + translated = translator.translateOutgoing(message); } + catch (IOException e) + { + log.warn("Error translating message", e); + return; + } + + if (message.startsWith("/")) + { + client.setVar(VarClientStr.CHATBOX_TYPED_TEXT, translated.startsWith("/") ? translated : "/" + translated); + return; + } + + event.consume(); + + client.setVar(VarClientStr.CHATBOX_TYPED_TEXT, translated); + + clientThread.invoke(() -> client.runScript(CHATBOX_INPUT, 0, translated)); + + client.setVar(VarClientStr.CHATBOX_TYPED_TEXT, ""); } @Override @@ -313,14 +319,4 @@ public class ChatTranslationPlugin extends Plugin implements KeyListener { // Nothing. } - - private void updateConfig() - { - this.publicChat = config.publicChat(); - this.getPlayerNames = config.getPlayerNames(); - this.translateOptionVisable = config.translateOptionVisable(); - this.publicTargetLanguage = config.publicTargetLanguage(); - this.playerChat = config.playerChat(); - this.playerTargetLanguage = config.playerTargetLanguage(); - } } \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chattranslation/Languages.java b/runelite-client/src/main/java/net/runelite/client/plugins/chattranslation/Languages.java index 05206c40e7..c1078c768c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chattranslation/Languages.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chattranslation/Languages.java @@ -2,9 +2,9 @@ package net.runelite.client.plugins.chattranslation; import lombok.Getter; +// TODO: Doesn't Locale pretty much do this as well? public enum Languages { - ENGLISH("English", "en"), WELSH("Welsh", "cy"), DUTCH("Dutch", "nl"), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chattranslation/Translator.java b/runelite-client/src/main/java/net/runelite/client/plugins/chattranslation/Translator.java index 8ab04b3281..88f5eb85ac 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chattranslation/Translator.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chattranslation/Translator.java @@ -2,8 +2,8 @@ package net.runelite.client.plugins.chattranslation; import com.google.gson.JsonArray; import com.google.gson.JsonParser; - import java.io.BufferedReader; +import java.io.IOException; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; @@ -11,27 +11,56 @@ import java.net.URLEncoder; class Translator { + private static final String BASE_URL = "https://translate.googleapis.com/translate_a/single?client=gtx&sl="; + private static final String SOURCE = "auto"; + private static final String CENT_URL = "&tl="; + private static final String LAST_URL = "&dt=t&q="; - public String translate(String source, String target, String message) throws Exception + private String incomingUrlBase; + private String outgoingUrlBase; + + void setInLang(Languages lang) { + incomingUrlBase = BASE_URL + SOURCE + CENT_URL + lang.toShortString() + LAST_URL; + } + void setOutLang(Languages lang) + { + outgoingUrlBase = BASE_URL + SOURCE + CENT_URL + lang.toShortString() + LAST_URL; + } - String url = "https://translate.googleapis.com/translate_a/single?client=gtx&sl=" + source + "&tl=" + target + "&dt=t&q=" + URLEncoder.encode(message, "UTF-8"); + String translateIncoming(String message) throws IOException + { + final String url = incomingUrlBase + URLEncoder.encode(message, "UTF-8"); + return translate(new URL(url)); + } - URL obj = new URL(url); - HttpURLConnection con = (HttpURLConnection) obj.openConnection(); + String translateOutgoing(String message) throws IOException + { + final String url = outgoingUrlBase + URLEncoder.encode(message, "UTF-8"); + return translate(new URL(url)); + } + + public String translate(URL url) throws IOException + { + HttpURLConnection con = (HttpURLConnection) url.openConnection(); con.setRequestProperty("User-Agent", "Mozilla/5.0"); - BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream())); - String inputLine; - StringBuilder response = new StringBuilder(); - - while ((inputLine = in.readLine()) != null) + try (BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()))) { - response.append(inputLine); - } - in.close(); + String inputLine; + StringBuilder response = new StringBuilder(); - return parseResult(response.toString()); + while ((inputLine = in.readLine()) != null) + { + response.append(inputLine); + } + + return parseResult(response.toString()); + } + catch (IOException e) + { + throw e; + } } private String parseResult(String inputJson) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/corp/CorpPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/corp/CorpPlugin.java index c0c7c4e5e0..a6f6a5f9e9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/corp/CorpPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/corp/CorpPlugin.java @@ -244,7 +244,7 @@ public class CorpPlugin extends Plugin private void onMenuEntryAdded(MenuEntryAdded event) { - if (event.getType() != NPC_SECOND_OPTION.getId() + if (event.getOpcode() != NPC_SECOND_OPTION.getId() || !this.leftClickCore || !event.getOption().equals(ATTACK)) { return; @@ -257,8 +257,8 @@ public class CorpPlugin extends Plugin return; } - event.getMenuEntry().setOpcode(NPC_SECOND_OPTION.getId() + MENU_ACTION_DEPRIORITIZE_OFFSET); - event.setWasModified(true); + event.setOpcode(NPC_SECOND_OPTION.getId() + MENU_ACTION_DEPRIORITIZE_OFFSET); + event.setModified(true); } private void onConfigChanged(ConfigChanged configChanged) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsPlugin.java index 0710de3019..96d8dd9d4b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsPlugin.java @@ -37,7 +37,6 @@ import net.runelite.api.ChatMessageType; import net.runelite.api.Client; import net.runelite.api.Experience; import net.runelite.api.MenuOpcode; -import net.runelite.api.MenuEntry; import net.runelite.api.NPC; import net.runelite.api.Player; import net.runelite.api.Skill; @@ -377,20 +376,18 @@ public class DevToolsPlugin extends Plugin } } - private void onMenuEntryAdded(MenuEntryAdded event) + private void onMenuEntryAdded(MenuEntryAdded entry) { if (!examine.isActive()) { return; } - MenuOpcode action = MenuOpcode.of(event.getType()); + MenuOpcode action = MenuOpcode.of(entry.getOpcode()); if (EXAMINE_MENU_ACTIONS.contains(action)) { - final MenuEntry entry = event.getMenuEntry(); - - final int identifier = event.getIdentifier(); + final int identifier = entry.getIdentifier(); String info = "ID: "; if (action == MenuOpcode.EXAMINE_NPC) @@ -410,7 +407,7 @@ public class DevToolsPlugin extends Plugin } entry.setTarget(entry.getTarget() + " " + ColorUtil.prependColorTag("(" + info + ")", JagexColors.MENU_TARGET)); - event.setWasModified(true); + entry.setModified(true); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java index 0ff9afb80a..4c54e03458 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java @@ -145,18 +145,18 @@ public class ExaminePlugin extends Plugin type = ExamineType.ITEM; id = event.getIdentifier(); - int widgetId = event.getActionParam1(); + int widgetId = event.getParam1(); int widgetGroup = TO_GROUP(widgetId); int widgetChild = TO_CHILD(widgetId); Widget widget = client.getWidget(widgetGroup, widgetChild); - WidgetItem widgetItem = widget.getWidgetItem(event.getActionParam0()); + WidgetItem widgetItem = widget.getWidgetItem(event.getParam0()); quantity = widgetItem != null && widgetItem.getId() >= 0 ? widgetItem.getQuantity() : 1; break; } case EXAMINE_ITEM_BANK_EQ: { type = ExamineType.ITEM_BANK_EQ; - int[] qi = findItemFromWidget(event.getActionParam1(), event.getActionParam0()); + int[] qi = findItemFromWidget(event.getParam1(), event.getParam0()); if (qi == null) { log.debug("Examine for item with unknown widget: {}", event); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/friendnotes/FriendNotesPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/friendnotes/FriendNotesPlugin.java index bada2cd5b7..a36ef9b3a9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/friendnotes/FriendNotesPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/friendnotes/FriendNotesPlugin.java @@ -174,7 +174,7 @@ public class FriendNotesPlugin extends Plugin private void onMenuEntryAdded(MenuEntryAdded event) { - final int groupId = WidgetInfo.TO_GROUP(event.getActionParam1()); + final int groupId = WidgetInfo.TO_GROUP(event.getParam1()); // Look for "Message" on friends list if (groupId == WidgetInfo.FRIENDS_LIST.getGroupId() && event.getOption().equals("Message")) @@ -189,8 +189,8 @@ public class FriendNotesPlugin extends Plugin event.getTarget(), MenuOpcode.RUNELITE.getId(), 0, - event.getActionParam0(), - event.getActionParam1(), + event.getParam0(), + event.getParam1(), false ); } @@ -202,7 +202,7 @@ public class FriendNotesPlugin extends Plugin private void onMenuOptionClicked(MenuOptionClicked event) { - if (WidgetInfo.TO_GROUP(event.getActionParam1()) == WidgetInfo.FRIENDS_LIST.getGroupId()) + if (WidgetInfo.TO_GROUP(event.getParam1()) == WidgetInfo.FRIENDS_LIST.getGroupId()) { if (Strings.isNullOrEmpty(event.getTarget())) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/friendtagging/FriendTaggingPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/friendtagging/FriendTaggingPlugin.java index 0421d1761e..66aba4b5d9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/friendtagging/FriendTaggingPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/friendtagging/FriendTaggingPlugin.java @@ -119,7 +119,7 @@ public class FriendTaggingPlugin extends Plugin private void onMenuEntryAdded(MenuEntryAdded event) { - final int groupId = WidgetInfo.TO_GROUP(event.getActionParam1()); + final int groupId = WidgetInfo.TO_GROUP(event.getParam1()); if (groupId == WidgetInfo.FRIENDS_LIST.getGroupId() && event.getOption().equals("Message")) { @@ -132,8 +132,8 @@ public class FriendTaggingPlugin extends Plugin event.getTarget(), MenuOpcode.RUNELITE.getId(), 0, - event.getActionParam0(), - event.getActionParam1(), + event.getParam0(), + event.getParam1(), false ); // Add menu entry @@ -173,7 +173,7 @@ public class FriendTaggingPlugin extends Plugin private void onMenuOptionClicked(MenuOptionClicked event) { - if (WidgetInfo.TO_GROUP(event.getActionParam1()) == WidgetInfo.FRIENDS_LIST.getGroupId()) + if (WidgetInfo.TO_GROUP(event.getParam1()) == WidgetInfo.FRIENDS_LIST.getGroupId()) { if (Strings.isNullOrEmpty(event.getTarget())) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java index 50b5f3c7b2..874c1fbb3b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grandexchange/GrandExchangePlugin.java @@ -54,7 +54,6 @@ import net.runelite.api.ItemContainer; import net.runelite.api.ItemDefinition; import static net.runelite.api.ItemID.COINS_995; import net.runelite.api.MenuOpcode; -import net.runelite.api.MenuEntry; import net.runelite.api.Varbits; import net.runelite.api.events.ChatMessage; import net.runelite.api.events.ConfigChanged; @@ -420,7 +419,7 @@ public class GrandExchangePlugin extends Plugin } } - private void onMenuEntryAdded(MenuEntryAdded event) + private void onMenuEntryAdded(MenuEntryAdded menuEntry) { // At the moment, if the user disables quick lookup, the input listener gets disabled. Thus, isHotKeyPressed() // should always return false when quick lookup is disabled. @@ -430,7 +429,6 @@ public class GrandExchangePlugin extends Plugin return; } - final MenuEntry menuEntry = event.getMenuEntry(); final int widgetId = menuEntry.getParam1(); final int groupId = WidgetInfo.TO_GROUP(widgetId); @@ -448,7 +446,7 @@ public class GrandExchangePlugin extends Plugin case WidgetID.SHOP_INVENTORY_GROUP_ID: menuEntry.setOption(SEARCH_GRAND_EXCHANGE); menuEntry.setOpcode(MenuOpcode.RUNELITE.getId()); - event.setWasModified(true); + menuEntry.setModified(true); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsPlugin.java index 3a7b49609c..7ea70f2bfc 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/grounditems/GroundItemsPlugin.java @@ -931,19 +931,19 @@ public class GroundItemsPlugin extends Plugin } } - private void onMenuEntryAdded(MenuEntryAdded event) + private void onMenuEntryAdded(MenuEntryAdded lastEntry) { if (this.itemHighlightMode != OVERLAY) { - final boolean telegrabEntry = event.getOption().equals("Cast") && event.getTarget().startsWith(TELEGRAB_TEXT) && event.getType() == CAST_ON_ITEM; - if (!(event.getOption().equals("Take") && event.getType() == THIRD_OPTION) && !telegrabEntry) + final boolean telegrabEntry = lastEntry.getOption().equals("Cast") && lastEntry.getTarget().startsWith(TELEGRAB_TEXT) && lastEntry.getOpcode() == CAST_ON_ITEM; + if (!(lastEntry.getOption().equals("Take") && lastEntry.getOpcode() == THIRD_OPTION) && !telegrabEntry) { return; } - int itemId = event.getIdentifier(); + int itemId = lastEntry.getIdentifier(); Scene scene = client.getScene(); - Tile tile = scene.getTiles()[client.getPlane()][event.getActionParam0()][event.getActionParam1()]; + Tile tile = scene.getTiles()[client.getPlane()][lastEntry.getParam0()][lastEntry.getParam1()]; TileItemPile tileItemPile = tile.getItemLayer(); if (tileItemPile == null) @@ -951,8 +951,6 @@ public class GroundItemsPlugin extends Plugin return; } - final MenuEntry lastEntry = event.getMenuEntry(); - int quantity = 1; Node current = tileItemPile.getBottom(); @@ -985,7 +983,7 @@ public class GroundItemsPlugin extends Plugin { final String optionText = telegrabEntry ? "Cast" : "Take"; lastEntry.setOption(ColorUtil.prependColorTag(optionText, color)); - event.setWasModified(true); + lastEntry.setModified(true); } if (mode == BOTH || mode == NAME) @@ -1005,17 +1003,17 @@ public class GroundItemsPlugin extends Plugin } lastEntry.setTarget(target); - event.setWasModified(true); + lastEntry.setModified(true); } } if (this.showMenuItemQuantities && itemComposition.isStackable() && quantity > 1) { lastEntry.setTarget(lastEntry.getTarget() + " (" + quantity + ")"); - event.setWasModified(true); + lastEntry.setModified(true); } - if (this.removeIgnored && event.getOption().equals("Take") && hiddenItemList.contains(Text.removeTags(event.getTarget()))) + if (this.removeIgnored && lastEntry.getOption().equals("Take") && hiddenItemList.contains(Text.removeTags(lastEntry.getTarget()))) { client.setMenuOptionCount(client.getMenuOptionCount() - 1); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePlugin.java index 39fc61e9dc..4dd0b0cd00 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePlugin.java @@ -202,7 +202,7 @@ public class HiscorePlugin extends Plugin return; } - int groupId = WidgetInfo.TO_GROUP(event.getActionParam1()); + int groupId = WidgetInfo.TO_GROUP(event.getParam1()); String option = event.getOption(); if (groupId == WidgetInfo.FRIENDS_LIST.getGroupId() || groupId == WidgetInfo.CLAN_CHAT.getGroupId() || @@ -218,8 +218,8 @@ public class HiscorePlugin extends Plugin lookup.setOption(LOOKUP); lookup.setTarget(event.getTarget()); lookup.setOpcode(MenuOpcode.RUNELITE.getId()); - lookup.setParam0(event.getActionParam0()); - lookup.setParam1(event.getActionParam1()); + lookup.setParam0(event.getParam0()); + lookup.setParam1(event.getParam1()); lookup.setIdentifier(event.getIdentifier()); if (client != null) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/KourendLibraryPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/KourendLibraryPlugin.java index d32160d6e7..2778d7a595 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/KourendLibraryPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/kourendlibrary/KourendLibraryPlugin.java @@ -210,7 +210,7 @@ public class KourendLibraryPlugin extends Plugin { if (MenuOpcode.GAME_OBJECT_FIRST_OPTION == menuOpt.getMenuOpcode() && menuOpt.getTarget().contains("Bookshelf")) { - lastBookcaseClick = WorldPoint.fromScene(client, menuOpt.getActionParam0(), menuOpt.getActionParam1(), client.getPlane()); + lastBookcaseClick = WorldPoint.fromScene(client, menuOpt.getParam0(), menuOpt.getParam1(), client.getPlane()); overlay.setHidden(false); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java index e4eb1d5695..9eb7255f96 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java @@ -974,7 +974,7 @@ public class LootTrackerPlugin extends Plugin private void onMenuOptionClicked(MenuOptionClicked event) { - if (event.getActionParam1() != WidgetInfo.INVENTORY.getId()) + if (event.getParam1() != WidgetInfo.INVENTORY.getId()) { return; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java index d2f55aa849..98ed0cf81d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java @@ -608,7 +608,7 @@ public class MenuEntrySwapperPlugin extends Plugin if (this.getSwapPuro && isPuroPuro()) { - if (event.getType() == WALK.getId()) + if (event.getOpcode() == WALK.getId()) { MenuEntry[] menuEntries = client.getMenuEntries(); MenuEntry menuEntry = menuEntries[menuEntries.length - 1]; @@ -627,7 +627,7 @@ public class MenuEntrySwapperPlugin extends Plugin if (hintArrowNpc != null && hintArrowNpc.getIndex() == eventId - && NPC_MENU_TYPES.contains(MenuOpcode.of(event.getType()))) + && NPC_MENU_TYPES.contains(MenuOpcode.of(event.getOpcode()))) { return; } @@ -722,17 +722,17 @@ public class MenuEntrySwapperPlugin extends Plugin } } - private void onMenuOptionClicked(MenuOptionClicked event) + private void onMenuOptionClicked(MenuOptionClicked entry) { - if (event.getOpcode() == MenuOpcode.WIDGET_DEFAULT.getId() && - WidgetInfo.TO_GROUP(event.getActionParam1()) == WidgetID.JEWELLERY_BOX_GROUP_ID) + if (entry.getOpcode() == MenuOpcode.WIDGET_DEFAULT.getId() && + WidgetInfo.TO_GROUP(entry.getParam1()) == WidgetID.JEWELLERY_BOX_GROUP_ID) { - if (event.getOption().equals(lastDes == null ? null : lastDes.getOption())) + if (entry.getOption().equals(lastDes == null ? null : lastDes.getOption())) { return; } - JewelleryBoxDestination newDest = JewelleryBoxDestination.withOption(event.getOption()); + JewelleryBoxDestination newDest = JewelleryBoxDestination.withOption(entry.getOption()); if (newDest == null) { return; @@ -741,17 +741,16 @@ public class MenuEntrySwapperPlugin extends Plugin lastDes = newDest; config.lastDes(lastDes.getOption()); } - else if (event.getOption().equals("Teleport") && event.getTarget().contains("Jewellery Box")) + else if (entry.getOption().equals("Teleport") && entry.getTarget().contains("Jewellery Box")) { - eventBus.unregister("wait for widget"); + eventBus.unregister(JEWEL_WIDGET); } else if (lastDes != null && - event.getOpcode() == MenuOpcode.PRIO_RUNELITE.getId() && - event.getOption().equals(lastDes.getOption())) + entry.getOpcode() == MenuOpcode.PRIO_RUNELITE.getId() && + entry.getOption().equals(lastDes.getOption())) { - MenuEntry e = event.getMenuEntry(); - e.setOption("Teleport"); - e.setOpcode(MenuOpcode.GAME_OBJECT_FIRST_OPTION.getId()); + entry.setOption("Teleport"); + entry.setOpcode(MenuOpcode.GAME_OBJECT_FIRST_OPTION.getId()); eventBus.subscribe(ScriptCallbackEvent.class, JEWEL_WIDGET, this::onScriptCallback); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/mining/MiningPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/mining/MiningPlugin.java index 4bf4ad880a..61bdedaa5e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/mining/MiningPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/mining/MiningPlugin.java @@ -244,7 +244,7 @@ public class MiningPlugin extends Plugin private void onMenuOptionClicked(MenuOptionClicked event) { //TODO: should work hopefully - if (event.getMenuOpcode() != MenuOpcode.RUNELITE || event.getActionParam1() != WidgetInfo.INVENTORY.getId()) + if (event.getMenuOpcode() != MenuOpcode.RUNELITE || event.getParam1() != WidgetInfo.INVENTORY.getId()) { return; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodePlugin.java index fb0ff10196..8324f199dc 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodePlugin.java @@ -377,8 +377,8 @@ public class MotherlodePlugin extends Plugin if (MINE_SPOTS.contains(menu.getIdentifier()) && menu.getMenuOpcode() == MenuOpcode.GAME_OBJECT_FIRST_OPTION) { resetIdleChecks(); - int veinX = menu.getActionParam0(); - int veinY = menu.getActionParam1(); + int veinX = menu.getParam0(); + int veinY = menu.getParam1(); targetVeinLocation = WorldPoint.fromScene(client, veinX, veinY, client.getPlane()); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsPlugin.java index 7d909378d4..58c5ad1d14 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/npchighlight/NpcIndicatorsPlugin.java @@ -298,7 +298,7 @@ public class NpcIndicatorsPlugin extends Plugin private void onMenuEntryAdded(MenuEntryAdded event) { - int type = event.getType(); + int type = event.getOpcode(); if (type >= MENU_ACTION_DEPRIORITIZE_OFFSET) { @@ -309,9 +309,9 @@ public class NpcIndicatorsPlugin extends Plugin NPC_MENU_ACTIONS.contains(MenuOpcode.of(type)) && highlightedNpcs.stream().anyMatch(npc -> npc.getIndex() == event.getIdentifier())) { - final String target = ColorUtil.prependColorTag(Text.removeTags(event.getMenuEntry().getTarget()), this.getHighlightColor); - event.getMenuEntry().setTarget(target); - event.setWasModified(true); + final String target = ColorUtil.prependColorTag(Text.removeTags(event.getTarget()), this.getHighlightColor); + event.setTarget(target); + event.setModified(true); } else if (hotKeyPressed && type == MenuOpcode.EXAMINE_NPC.getId()) { @@ -321,8 +321,8 @@ public class NpcIndicatorsPlugin extends Plugin event.getTarget(), MenuOpcode.RUNELITE.getId(), event.getIdentifier(), - event.getActionParam0(), - event.getActionParam1(), + event.getParam0(), + event.getParam1(), false ); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/objectindicators/ObjectIndicatorsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/objectindicators/ObjectIndicatorsPlugin.java index 90dd55189c..40b63ebb7f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/objectindicators/ObjectIndicatorsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/objectindicators/ObjectIndicatorsPlugin.java @@ -242,12 +242,12 @@ public class ObjectIndicatorsPlugin extends Plugin implements KeyListener private void onMenuEntryAdded(MenuEntryAdded event) { - if (!hotKeyPressed || event.getType() != MenuOpcode.EXAMINE_OBJECT.getId()) + if (!hotKeyPressed || event.getOpcode() != MenuOpcode.EXAMINE_OBJECT.getId()) { return; } - final Tile tile = client.getScene().getTiles()[client.getPlane()][event.getActionParam0()][event.getActionParam1()]; + final Tile tile = client.getScene().getTiles()[client.getPlane()][event.getParam0()][event.getParam1()]; MenuEntry[] menuEntries = client.getMenuEntries(); menuEntries = Arrays.copyOf(menuEntries, menuEntries.length + 1); @@ -255,8 +255,8 @@ public class ObjectIndicatorsPlugin extends Plugin implements KeyListener menuEntry.setOption(objects.contains(findTileObject(tile, event.getIdentifier())) ? UNMARK : MARK); menuEntry.setTarget(event.getTarget()); - menuEntry.setParam0(event.getActionParam0()); - menuEntry.setParam1(event.getActionParam1()); + menuEntry.setParam0(event.getParam0()); + menuEntry.setParam1(event.getParam1()); menuEntry.setIdentifier(event.getIdentifier()); menuEntry.setOpcode(MenuOpcode.RUNELITE.getId()); client.setMenuEntries(menuEntries); @@ -272,8 +272,8 @@ public class ObjectIndicatorsPlugin extends Plugin implements KeyListener Scene scene = client.getScene(); Tile[][][] tiles = scene.getTiles(); - final int x = event.getActionParam0(); - final int y = event.getActionParam1(); + final int x = event.getParam0(); + final int y = event.getParam1(); final int z = client.getPlane(); final Tile tile = tiles[z][x][y]; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoPlugin.java index 8c79904a96..f6f63b08d3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoPlugin.java @@ -206,7 +206,7 @@ public class OpponentInfoPlugin extends Plugin private void onMenuEntryAdded(MenuEntryAdded menuEntryAdded) { - if (menuEntryAdded.getType() != MenuOpcode.NPC_SECOND_OPTION.getId() + if (menuEntryAdded.getOpcode() != MenuOpcode.NPC_SECOND_OPTION.getId() || !menuEntryAdded.getOption().equals("Attack") || !config.showOpponentsInMenu()) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsPlugin.java index e19d5e745d..2377a8800f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsPlugin.java @@ -248,7 +248,7 @@ public class PlayerIndicatorsPlugin extends Plugin private void onMenuEntryAdded(MenuEntryAdded menuEntryAdded) { - int type = menuEntryAdded.getType(); + int type = menuEntryAdded.getOpcode(); if (type >= 2000) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/PuzzleSolverPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/PuzzleSolverPlugin.java index 98dae9d8a6..aaa333993a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/PuzzleSolverPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/puzzlesolver/PuzzleSolverPlugin.java @@ -167,7 +167,7 @@ public class PuzzleSolverPlugin extends Plugin private void onMenuOptionClicked(MenuOptionClicked menuOptionClicked) { - int widgetId = menuOptionClicked.getActionParam1(); + int widgetId = menuOptionClicked.getParam1(); if (TO_GROUP(widgetId) != WidgetID.LIGHT_BOX_GROUP_ID) { return; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/slayermusiq/SlayermusiqPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/slayermusiq/SlayermusiqPlugin.java index 06b295e924..51a4695459 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/slayermusiq/SlayermusiqPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/slayermusiq/SlayermusiqPlugin.java @@ -114,7 +114,7 @@ public class SlayermusiqPlugin extends Plugin private void onMenuEntryAdded(MenuEntryAdded event) { - int widgetID = event.getActionParam1(); + int widgetID = event.getParam1(); if (Ints.contains(QUESTLIST_WIDGET_IDS, widgetID) && "Read Journal:".equals(event.getOption())) { MenuEntry[] menuEntries = client.getMenuEntries(); @@ -139,8 +139,8 @@ public class SlayermusiqPlugin extends Plugin private MenuEntry createSlayermusiqOptionMenuEntry(MenuEntryAdded event) { - int widgetIndex = event.getActionParam0(); - int widgetID = event.getActionParam1(); + int widgetIndex = event.getParam0(); + int widgetID = event.getParam1(); MenuEntry menuEntry = new MenuEntry(); menuEntry.setTarget(event.getTarget()); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/suppliestracker/SuppliesTrackerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/suppliestracker/SuppliesTrackerPlugin.java index e4d235d783..3f3003ed2a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/suppliestracker/SuppliesTrackerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/suppliestracker/SuppliesTrackerPlugin.java @@ -389,7 +389,7 @@ public class SuppliesTrackerPlugin extends Plugin { ItemContainer itemContainer = itemContainerChanged.getItemContainer(); - if (itemContainer == client.getItemContainer(InventoryID.INVENTORY) && old != null && !actionStack.isEmpty()) + if (itemContainer == client.getItemContainer(InventoryID.INVENTORY) && old != null) { while (!actionStack.isEmpty()) { @@ -529,10 +529,10 @@ public class SuppliesTrackerPlugin extends Plugin })) { old = client.getItemContainer(InventoryID.INVENTORY); - int slot = event.getActionParam0(); + int slot = event.getParam0(); if (old.getItems() != null) { - int pushItem = old.getItems()[event.getActionParam0()].getId(); + int pushItem = old.getItems()[event.getParam0()].getId(); MenuAction newAction = new MenuAction.ItemAction(CONSUMABLE, old.getItems(), pushItem, slot); actionStack.push(newAction); } @@ -551,7 +551,7 @@ public class SuppliesTrackerPlugin extends Plugin a.getType() == TELEPORT)) { int teleid = event.getIdentifier(); - MenuAction newAction = new MenuAction.ItemAction(TELEPORT, old.getItems(), teleid, event.getActionParam0()); + MenuAction newAction = new MenuAction.ItemAction(TELEPORT, old.getItems(), teleid, event.getParam0()); actionStack.push(newAction); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timers/TimersPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/timers/TimersPlugin.java index a05d1154ac..963c9f0db0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timers/TimersPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timers/TimersPlugin.java @@ -482,7 +482,7 @@ public class TimersPlugin extends Plugin return; } - TeleportWidget teleportWidget = TeleportWidget.of(event.getActionParam1()); + TeleportWidget teleportWidget = TeleportWidget.of(event.getParam1()); if (teleportWidget != null) { lastTeleportClicked = teleportWidget; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/warindicators/WarIndicatorPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/warindicators/WarIndicatorPlugin.java index fcad30f1f9..9a793b1f2b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/warindicators/WarIndicatorPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/warindicators/WarIndicatorPlugin.java @@ -136,7 +136,7 @@ public class WarIndicatorPlugin extends Plugin private void onMenuEntryAdded(MenuEntryAdded onMenuEntryAdded) { - int type = onMenuEntryAdded.getType(); + int type = onMenuEntryAdded.getOpcode(); if (type >= 2000) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/wiki/WikiPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/wiki/WikiPlugin.java index d47fdfca9d..52d0a87ba2 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/wiki/WikiPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/wiki/WikiPlugin.java @@ -252,7 +252,7 @@ public class WikiPlugin extends Plugin } id = lc.getId(); name = lc.getName(); - location = WorldPoint.fromScene(client, ev.getActionParam0(), ev.getActionParam1(), client.getPlane()); + location = WorldPoint.fromScene(client, ev.getParam0(), ev.getParam1(), client.getPlane()); break; } default: @@ -334,8 +334,8 @@ public class WikiPlugin extends Plugin private void onMenuEntryAdded(MenuEntryAdded event) { - int widgetIndex = event.getActionParam0(); - int widgetID = event.getActionParam1(); + int widgetIndex = event.getParam0(); + int widgetID = event.getParam1(); if (Ints.contains(QUESTLIST_WIDGET_IDS, widgetID) && "Read Journal:".equals(event.getOption())) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPlugin.java index c654c53429..a8230a4e32 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPlugin.java @@ -390,7 +390,7 @@ public class WorldHopperPlugin extends Plugin return; } - int groupId = WidgetInfo.TO_GROUP(event.getActionParam1()); + int groupId = WidgetInfo.TO_GROUP(event.getParam1()); String option = event.getOption(); if (groupId == WidgetInfo.FRIENDS_LIST.getGroupId() || groupId == WidgetInfo.CLAN_CHAT.getGroupId()) @@ -433,8 +433,8 @@ public class WorldHopperPlugin extends Plugin hopTo.setOption(HOP_TO); hopTo.setTarget(event.getTarget()); hopTo.setOpcode(MenuOpcode.RUNELITE.getId()); - hopTo.setParam0(event.getActionParam0()); - hopTo.setParam1(event.getActionParam1()); + hopTo.setParam0(event.getParam0()); + hopTo.setParam1(event.getParam1()); insertMenuEntry(hopTo, client.getMenuEntries(), after); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerPlugin.java index c1b8ef32dd..62ea5fa4c7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerPlugin.java @@ -498,7 +498,7 @@ public class XpTrackerPlugin extends Plugin private void onMenuEntryAdded(final MenuEntryAdded event) { - int widgetID = event.getActionParam1(); + int widgetID = event.getParam1(); if (TO_GROUP(widgetID) != WidgetID.SKILLS_GROUP_ID || !event.getOption().startsWith("View") @@ -517,7 +517,7 @@ public class XpTrackerPlugin extends Plugin MenuEntry menuEntry = menuEntries[menuEntries.length - 1] = new MenuEntry(); menuEntry.setTarget(skillText); menuEntry.setOption(hasOverlay(skill) ? MENUOP_REMOVE_CANVAS_TRACKER : MENUOP_ADD_CANVAS_TRACKER); - menuEntry.setParam0(event.getActionParam0()); + menuEntry.setParam0(event.getParam0()); menuEntry.setParam1(widgetID); menuEntry.setOpcode(MenuOpcode.RUNELITE.getId()); @@ -527,7 +527,7 @@ public class XpTrackerPlugin extends Plugin private void onMenuOptionClicked(MenuOptionClicked event) { if (event.getMenuOpcode().getId() != MenuOpcode.RUNELITE.getId() - || TO_GROUP(event.getActionParam1()) != WidgetID.SKILLS_GROUP_ID) + || TO_GROUP(event.getParam1()) != WidgetID.SKILLS_GROUP_ID) { return; } diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/examine/ExaminePluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/examine/ExaminePluginTest.java index 9ae455d100..e4844ad860 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/examine/ExaminePluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/examine/ExaminePluginTest.java @@ -89,7 +89,7 @@ public class ExaminePluginTest { when(client.getWidget(anyInt(), anyInt())).thenReturn(mock(Widget.class)); - MenuOptionClicked menuOptionClicked = new MenuOptionClicked(new MenuEntry( + MenuOptionClicked menuOptionClicked = new MenuOptionClicked( "Examine", "Something", ItemID.ABYSSAL_WHIP, @@ -97,7 +97,7 @@ public class ExaminePluginTest 123, 456, false - )); + ); examinePlugin.onMenuOptionClicked(menuOptionClicked); ChatMessage chatMessage = new ChatMessage(null, ChatMessageType.ITEM_EXAMINE, "", "A weapon from the abyss.", "", 0); @@ -112,7 +112,7 @@ public class ExaminePluginTest { when(client.getWidget(anyInt(), anyInt())).thenReturn(mock(Widget.class)); - MenuOptionClicked menuOptionClicked = new MenuOptionClicked(new MenuEntry( + MenuOptionClicked menuOptionClicked = new MenuOptionClicked( "Examine", "Something", ItemID.ABYSSAL_WHIP, @@ -120,8 +120,7 @@ public class ExaminePluginTest 123, 456, false - )); - + ); examinePlugin.onMenuOptionClicked(menuOptionClicked); @@ -130,4 +129,4 @@ public class ExaminePluginTest verify(examineClient, never()).submitItem(anyInt(), anyString()); } -} \ No newline at end of file +} diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/MenuMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/MenuMixin.java index 9cb9c68639..4f88ec22cd 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/MenuMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/MenuMixin.java @@ -24,6 +24,7 @@ */ package net.runelite.mixins; +import net.runelite.api.MenuEntry; import net.runelite.api.mixins.Inject; import net.runelite.api.mixins.Mixin; import net.runelite.rs.api.RSClient; @@ -109,4 +110,34 @@ public abstract class MenuMixin implements RSClient } } } + + @Inject + @Override + public MenuEntry getLeftClickMenuEntry() + { + final int i = getMenuOptionCount() - 1; + return new MenuEntry( + getMenuOptions()[i], + getMenuTargets()[i], + getMenuIdentifiers()[i], + getMenuOpcodes()[i], + getMenuArguments1()[i], + getMenuArguments2()[i], + getMenuForceLeftClick()[i] + ); + } + + @Inject + @Override + public void setLeftClickMenuEntry(final MenuEntry entry) + { + final int i = getMenuOptionCount() - 1; + getMenuOptions()[i] = entry.getOption(); + getMenuTargets()[i] = entry.getTarget(); + getMenuIdentifiers()[i] = entry.getIdentifier(); + getMenuOpcodes()[i] = entry.getOpcode(); + getMenuArguments1()[i] = entry.getParam0(); + getMenuArguments2()[i] = entry.getParam1(); + getMenuForceLeftClick()[i] = entry.isForceLeftClick(); + } } 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 81538cc417..d033f92a35 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java @@ -729,27 +729,25 @@ public abstract class RSClientMixin implements RSClient if (newCount == oldCount + 1) { MenuEntryAdded event = new MenuEntryAdded( - new MenuEntry( - options[oldCount], - targets[oldCount], - identifiers[oldCount], - opcodes[oldCount], - arguments1[oldCount], - arguments2[oldCount], - forceLeftClick[oldCount] - ) + options[oldCount], + targets[oldCount], + identifiers[oldCount], + opcodes[oldCount], + arguments1[oldCount], + arguments2[oldCount], + forceLeftClick[oldCount] ); client.getCallbacks().post(MenuEntryAdded.class, event); - if (event.isWasModified() && client.getMenuOptionCount() == newCount) + if (event.hasBeenModified() && client.getMenuOptionCount() == newCount) { options[oldCount] = event.getOption(); targets[oldCount] = event.getTarget(); identifiers[oldCount] = event.getIdentifier(); - opcodes[oldCount] = event.getType(); - arguments1[oldCount] = event.getActionParam0(); - arguments2[oldCount] = event.getActionParam1(); + opcodes[oldCount] = event.getOpcode(); + arguments1[oldCount] = event.getParam0(); + arguments2[oldCount] = event.getParam1(); forceLeftClick[oldCount] = event.isForceLeftClick(); } } @@ -1346,15 +1344,13 @@ public abstract class RSClientMixin implements RSClient } final MenuOptionClicked menuOptionClicked = new MenuOptionClicked( - new MenuEntry( - menuOption, - menuTarget, - id, - menuAction, - actionParam, - widgetId, - false - ), + menuOption, + menuTarget, + id, + menuAction, + actionParam, + widgetId, + false, authentic, client.getMouseCurrentButton() ); @@ -1366,7 +1362,7 @@ public abstract class RSClientMixin implements RSClient return; } - rs$menuAction(menuOptionClicked.getActionParam0(), menuOptionClicked.getActionParam1(), menuOptionClicked.getOpcode(), + rs$menuAction(menuOptionClicked.getParam0(), menuOptionClicked.getParam1(), menuOptionClicked.getOpcode(), menuOptionClicked.getIdentifier(), menuOptionClicked.getOption(), menuOptionClicked.getTarget(), var6, var7); }