SHARE
TWEET

Untitled

a guest Dec 9th, 2018 108 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.  * Copyright (c) 2018, Adam <Adam@sigterm.info>
  3.  * Copyright (c) 2018, Kamiel
  4.  * All rights reserved.
  5.  *
  6.  * Redistribution and use in source and binary forms, with or without
  7.  * modification, are permitted provided that the following conditions are met:
  8.  *
  9.  * 1. Redistributions of source code must retain the above copyright notice, this
  10.  *    list of conditions and the following disclaimer.
  11.  * 2. Redistributions in binary form must reproduce the above copyright notice,
  12.  *    this list of conditions and the following disclaimer in the documentation
  13.  *    and/or other materials provided with the distribution.
  14.  *
  15.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
  16.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
  17.  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  18.  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
  19.  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
  20.  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  21.  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  22.  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  23.  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  24.  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  25.  */
  26. package net.runelite.client.plugins.menuentryswapper;
  27.  
  28. import com.google.common.collect.ImmutableSet;
  29. import com.google.inject.Provides;
  30. import java.util.Set;
  31. import javax.inject.Inject;
  32. import lombok.Getter;
  33. import lombok.Setter;
  34. import net.runelite.api.Client;
  35. import net.runelite.api.GameState;
  36. import net.runelite.api.ItemComposition;
  37. import net.runelite.api.MenuAction;
  38. import net.runelite.api.MenuEntry;
  39. import net.runelite.api.NPC;
  40. import net.runelite.api.events.ConfigChanged;
  41. import net.runelite.api.events.FocusChanged;
  42. import net.runelite.api.events.MenuEntryAdded;
  43. import net.runelite.api.events.MenuOpened;
  44. import net.runelite.api.events.MenuOptionClicked;
  45. import net.runelite.api.events.PostItemComposition;
  46. import net.runelite.api.events.WidgetMenuOptionClicked;
  47. import net.runelite.api.widgets.WidgetInfo;
  48. import net.runelite.client.config.ConfigManager;
  49. import net.runelite.client.eventbus.Subscribe;
  50. import net.runelite.client.game.ItemVariationMapping;
  51. import net.runelite.client.input.KeyManager;
  52. import net.runelite.client.menus.MenuManager;
  53. import net.runelite.client.menus.WidgetMenuOption;
  54. import net.runelite.client.plugins.Plugin;
  55. import net.runelite.client.plugins.PluginDescriptor;
  56. import net.runelite.client.util.Text;
  57. import org.apache.commons.lang3.ArrayUtils;
  58.  
  59. import net.runelite.api.events.*;
  60. import static net.runelite.api.Skill.THIEVING;
  61. import static net.runelite.api.Skill.MAGIC;
  62. import static net.runelite.api.Skill.CONSTRUCTION;
  63.  
  64. import java.util.Arrays;
  65.  
  66. @PluginDescriptor(
  67.     name = "Menu Entry Swapper",
  68.     description = "Change the default option that is displayed when hovering over objects",
  69.     tags = {"npcs", "inventory", "items", "objects"},
  70.     enabledByDefault = false
  71. )
  72. public class MenuEntrySwapperPlugin extends Plugin
  73. {
  74.     private static final String CONFIGURE = "Configure";
  75.     private static final String SAVE = "Save";
  76.     private static final String RESET = "Reset";
  77.     private static final String MENU_TARGET = "Shift-click";
  78.  
  79.     private static final String CONFIG_GROUP = "shiftclick";
  80.     private static final String ITEM_KEY_PREFIX = "item_";
  81.  
  82.     private static final WidgetMenuOption FIXED_INVENTORY_TAB_CONFIGURE = new WidgetMenuOption(CONFIGURE,
  83.         MENU_TARGET, WidgetInfo.FIXED_VIEWPORT_INVENTORY_TAB);
  84.  
  85.     private static final WidgetMenuOption FIXED_INVENTORY_TAB_SAVE = new WidgetMenuOption(SAVE,
  86.         MENU_TARGET, WidgetInfo.FIXED_VIEWPORT_INVENTORY_TAB);
  87.  
  88.     private static final WidgetMenuOption RESIZABLE_INVENTORY_TAB_CONFIGURE = new WidgetMenuOption(CONFIGURE,
  89.         MENU_TARGET, WidgetInfo.RESIZABLE_VIEWPORT_INVENTORY_TAB);
  90.  
  91.     private static final WidgetMenuOption RESIZABLE_INVENTORY_TAB_SAVE = new WidgetMenuOption(SAVE,
  92.         MENU_TARGET, WidgetInfo.RESIZABLE_VIEWPORT_INVENTORY_TAB);
  93.  
  94.     private static final WidgetMenuOption RESIZABLE_BOTTOM_LINE_INVENTORY_TAB_CONFIGURE = new WidgetMenuOption(CONFIGURE,
  95.         MENU_TARGET, WidgetInfo.RESIZABLE_VIEWPORT_BOTTOM_LINE_INVENTORY_TAB);
  96.  
  97.     private static final WidgetMenuOption RESIZABLE_BOTTOM_LINE_INVENTORY_TAB_SAVE = new WidgetMenuOption(SAVE,
  98.         MENU_TARGET, WidgetInfo.RESIZABLE_VIEWPORT_BOTTOM_LINE_INVENTORY_TAB);
  99.  
  100.     @Inject
  101.     private Client client;
  102.  
  103.     @Inject
  104.     private MenuEntrySwapperConfig config;
  105.  
  106.     @Inject
  107.     private ShiftClickInputListener inputListener;
  108.  
  109.     @Inject
  110.     private ConfigManager configManager;
  111.  
  112.     @Inject
  113.     private KeyManager keyManager;
  114.  
  115.     @Inject
  116.     private MenuManager menuManager;
  117.  
  118.     @Getter
  119.     private boolean configuringShiftClick = false;
  120.  
  121.     @Setter
  122.     private boolean shiftModifier = false;
  123.  
  124.     @Provides
  125.     MenuEntrySwapperConfig provideConfig(ConfigManager configManager)
  126.     {
  127.         return configManager.getConfig(MenuEntrySwapperConfig.class);
  128.     }
  129.  
  130.     @Override
  131.     public void startUp()
  132.     {
  133.         if (config.shiftClickCustomization())
  134.         {
  135.             enableCustomization();
  136.         }
  137.     }
  138.  
  139.     @Override
  140.     public void shutDown()
  141.     {
  142.         disableCustomization();
  143.     }
  144.  
  145.     @Subscribe
  146.     public void onConfigChanged(ConfigChanged event)
  147.     {
  148.         if (event.getKey().equals("shiftClickCustomization"))
  149.         {
  150.             if (config.shiftClickCustomization())
  151.             {
  152.                 enableCustomization();
  153.             }
  154.             else
  155.             {
  156.                 disableCustomization();
  157.             }
  158.         }
  159.     }
  160.  
  161.     private Integer getSwapConfig(int itemId)
  162.     {
  163.         itemId = ItemVariationMapping.map(itemId);
  164.         String config = configManager.getConfiguration(CONFIG_GROUP, ITEM_KEY_PREFIX + itemId);
  165.         if (config == null || config.isEmpty())
  166.         {
  167.             return null;
  168.         }
  169.  
  170.         return Integer.parseInt(config);
  171.     }
  172.  
  173.     private void setSwapConfig(int itemId, int index)
  174.     {
  175.         itemId = ItemVariationMapping.map(itemId);
  176.         configManager.setConfiguration(CONFIG_GROUP, ITEM_KEY_PREFIX + itemId, index);
  177.     }
  178.  
  179.     private void unsetSwapConfig(int itemId)
  180.     {
  181.         configManager.unsetConfiguration(CONFIG_GROUP, ITEM_KEY_PREFIX + itemId);
  182.     }
  183.  
  184.     private void enableCustomization()
  185.     {
  186.         keyManager.registerKeyListener(inputListener);
  187.         refreshShiftClickCustomizationMenus();
  188.     }
  189.  
  190.     private void disableCustomization()
  191.     {
  192.         keyManager.unregisterKeyListener(inputListener);
  193.         removeShiftClickCustomizationMenus();
  194.         configuringShiftClick = false;
  195.     }
  196.  
  197.     @Subscribe
  198.     public void onWidgetMenuOptionClicked(WidgetMenuOptionClicked event)
  199.     {
  200.         if (event.getWidget() == WidgetInfo.FIXED_VIEWPORT_INVENTORY_TAB
  201.                 || event.getWidget() == WidgetInfo.RESIZABLE_VIEWPORT_INVENTORY_TAB
  202.                 || event.getWidget() == WidgetInfo.RESIZABLE_VIEWPORT_BOTTOM_LINE_INVENTORY_TAB)
  203.         {
  204.             configuringShiftClick = event.getMenuOption().equals(CONFIGURE) && Text.removeTags(event.getMenuTarget()).equals(MENU_TARGET);
  205.             refreshShiftClickCustomizationMenus();
  206.         }
  207.     }
  208.  
  209.     @Subscribe
  210.     public void onMenuOpened(MenuOpened event)
  211.     {
  212.         if (!configuringShiftClick)
  213.         {
  214.             return;
  215.         }
  216.  
  217.         MenuEntry firstEntry = event.getFirstEntry();
  218.         if (firstEntry == null)
  219.         {
  220.             return;
  221.         }
  222.  
  223.         int widgetId = firstEntry.getParam1();
  224.         if (widgetId != WidgetInfo.INVENTORY.getId())
  225.         {
  226.             return;
  227.         }
  228.  
  229.         int itemId = firstEntry.getIdentifier();
  230.         if (itemId == -1)
  231.         {
  232.             return;
  233.         }
  234.  
  235.         ItemComposition itemComposition = client.getItemDefinition(itemId);
  236.         String itemName = itemComposition.getName();
  237.         String option = "Use";
  238.         int shiftClickActionindex = itemComposition.getShiftClickActionIndex();
  239.         String[] inventoryActions = itemComposition.getInventoryActions();
  240.  
  241.         if (shiftClickActionindex >= 0 && shiftClickActionindex < inventoryActions.length)
  242.         {
  243.             option = inventoryActions[shiftClickActionindex];
  244.         }
  245.  
  246.         MenuEntry[] entries = event.getMenuEntries();
  247.  
  248.         for (MenuEntry entry : entries)
  249.         {
  250.             if (itemName.equals(Text.removeTags(entry.getTarget())))
  251.             {
  252.                 entry.setType(MenuAction.RUNELITE.getId());
  253.  
  254.                 if (option.equals(entry.getOption()))
  255.                 {
  256.                     entry.setOption("* " + option);
  257.                 }
  258.             }
  259.         }
  260.  
  261.         final MenuEntry resetShiftClickEntry = new MenuEntry();
  262.         resetShiftClickEntry.setOption(RESET);
  263.         resetShiftClickEntry.setTarget(MENU_TARGET);
  264.         resetShiftClickEntry.setIdentifier(itemId);
  265.         resetShiftClickEntry.setParam1(widgetId);
  266.         resetShiftClickEntry.setType(MenuAction.RUNELITE.getId());
  267.         client.setMenuEntries(ArrayUtils.addAll(entries, resetShiftClickEntry));
  268.     }
  269.  
  270.     @Subscribe
  271.     public void onMenuOptionClicked(MenuOptionClicked event)
  272.     {
  273.         if (event.getMenuAction() != MenuAction.RUNELITE || event.getWidgetId() != WidgetInfo.INVENTORY.getId())
  274.         {
  275.             return;
  276.         }
  277.  
  278.         int itemId = event.getId();
  279.  
  280.         if (itemId == -1)
  281.         {
  282.             return;
  283.         }
  284.  
  285.         String option = event.getMenuOption();
  286.         String target = event.getMenuTarget();
  287.         ItemComposition itemComposition = client.getItemDefinition(itemId);
  288.  
  289.         if (option.equals(RESET) && target.equals(MENU_TARGET))
  290.         {
  291.             unsetSwapConfig(itemId);
  292.             itemComposition.resetShiftClickActionIndex();
  293.             return;
  294.         }
  295.  
  296.         if (!itemComposition.getName().equals(Text.removeTags(target)))
  297.         {
  298.             return;
  299.         }
  300.  
  301.         int index = -1;
  302.         boolean valid = false;
  303.  
  304.         if (option.equals("Use")) //because "Use" is not in inventoryActions
  305.         {
  306.             valid = true;
  307.         }
  308.         else
  309.         {
  310.             String[] inventoryActions = itemComposition.getInventoryActions();
  311.  
  312.             for (index = 0; index < inventoryActions.length; index++)
  313.             {
  314.                 if (option.equals(inventoryActions[index]))
  315.                 {
  316.                     valid = true;
  317.                     break;
  318.                 }
  319.             }
  320.         }
  321.  
  322.         if (valid)
  323.         {
  324.             setSwapConfig(itemId, index);
  325.             itemComposition.setShiftClickActionIndex(index);
  326.         }
  327.     }
  328.  
  329.  
  330.     int cachedXp = 0;
  331.     boolean knockOutFirst = true;
  332.     boolean hasPickpocketed = false;
  333.  
  334.     int cachedMagic = 0;
  335.     int cachedCons = 0;
  336.     int timesBuilt = 0;
  337.     boolean castHomeTele = false;
  338.  
  339.     @Subscribe
  340.     public void onExperienceChanged(ExperienceChanged event)
  341.     {
  342.         if (event.getSkill() == THIEVING)
  343.         {
  344.             int thievingXp = client.getSkillExperience(THIEVING);
  345.  
  346.             if (thievingXp <= cachedXp)
  347.             {
  348.                 return;
  349.             }
  350.  
  351.             if (cachedXp == 0)
  352.             {
  353.                 // this is the initial xp sent on login
  354.                 cachedXp = thievingXp;
  355.                 return;
  356.             }
  357.  
  358.             int xpDrop = thievingXp - cachedXp;
  359.             if (xpDrop < 50)
  360.             {
  361.                 // successful knockout
  362.                 knockOutFirst = false;
  363.                 hasPickpocketed = false;
  364.  
  365.             }
  366.             else
  367.             {
  368.                 // successful pickpocket
  369.                 if (hasPickpocketed)
  370.                 {
  371.                     // knock out again next
  372.                     knockOutFirst = true;
  373.                     hasPickpocketed = false;
  374.                 }
  375.                 else
  376.                 {
  377.                     hasPickpocketed = true;
  378.                 }
  379.             }
  380.  
  381.             cachedXp = thievingXp;
  382.         }
  383.         else if(event.getSkill() == MAGIC)
  384.         {
  385.             int mageXp = client.getSkillExperience(MAGIC);
  386.  
  387.             if (mageXp <= cachedMagic)
  388.             {
  389.                 return;
  390.             }
  391.  
  392.             if (cachedMagic == 0)
  393.             {
  394.                 // this is the initial xp sent on login
  395.                 cachedMagic = mageXp;
  396.                 return;
  397.             }
  398.             int xpDrop = mageXp - cachedMagic;
  399.             if (xpDrop > 0)
  400.             {
  401.                 timesBuilt = 0;
  402.             }
  403.         }
  404.         else if(event.getSkill() == CONSTRUCTION)
  405.         {
  406.             int consXp = client.getSkillExperience(CONSTRUCTION);
  407.  
  408.             if (consXp <= cachedCons)
  409.             {
  410.                 return;
  411.             }
  412.  
  413.             if (cachedCons == 0)
  414.             {
  415.                 // this is the initial xp sent on login
  416.                 cachedCons = consXp;
  417.                 return;
  418.             }
  419.  
  420.             int xpDrop = consXp - cachedCons;
  421.             if (xpDrop > 0 && timesBuilt < 7)
  422.             {
  423.                 timesBuilt++;
  424.                 castHomeTele = true;
  425.             }
  426.             else if(xpDrop > 0)
  427.             {
  428.                 timesBuilt = 0;
  429.                 castHomeTele = false;
  430.             }
  431.  
  432.             xpDrop = 0;
  433.             cachedCons = consXp;
  434.         }
  435.  
  436.  
  437.     }
  438.  
  439.  
  440.  
  441.     @Subscribe
  442.     public void onMenuEntryAdded(MenuEntryAdded event)
  443.     {
  444.         if (client.getGameState() != GameState.LOGGED_IN)
  445.         {
  446.             return;
  447.         }
  448.  
  449.         int itemId = event.getIdentifier();
  450.         String option = Text.removeTags(event.getOption()).toLowerCase();
  451.         String target = Text.removeTags(event.getTarget()).toLowerCase();
  452.  
  453.  
  454.  
  455.         if (option.equals("talk-to"))
  456.         {
  457.             if (config.swapPickpocket())
  458.             {
  459.                 if (knockOutFirst)
  460.                 {
  461.                     swap("knock-out", option, target, true);
  462.                     swap("pickpocket", option, target, true);
  463.                 }
  464.                 else
  465.                 {
  466.                     swap("pickpocket", option, target, true);
  467.                     swap("knock-out", option, target, true);
  468.                 }
  469.             }
  470.  
  471.             if (config.swapPickpocket() && target.contains("h.a.m."))
  472.             {
  473.                 swap("pickpocket", option, target, true);
  474.             }
  475.  
  476.             if (config.swapAbyssTeleport() && target.contains("mage of zamorak"))
  477.             {
  478.                 swap("teleport", option, target, true);
  479.             }
  480.  
  481.             if (config.swapBank())
  482.             {
  483.                 swap("bank", option, target, true);
  484.             }
  485.  
  486.             if (config.swapExchange())
  487.             {
  488.                 swap("exchange", option, target, true);
  489.             }
  490.  
  491.             if (config.swapDarkMage())
  492.             {
  493.                 swap("repairs", option, target, true);
  494.             }
  495.  
  496.             // make sure assignment swap is higher priority than trade swap for slayer masters
  497.             if (config.swapAssignment())
  498.             {
  499.                 swap("assignment", option, target, true);
  500.             }
  501.  
  502.             if (config.swapTrade())
  503.             {
  504.                 swap("trade", option, target, true);
  505.                 swap("trade-with", option, target, true);
  506.             }
  507.  
  508.             if (config.claimSlime() && target.equals("robin"))
  509.             {
  510.                 swap("claim-slime", option, target, true);
  511.             }
  512.  
  513.             if (config.swapTravel())
  514.             {
  515.                 swap("travel", option, target, true);
  516.                 swap("pay-fare", option, target, true);
  517.                 swap("charter", option, target, true);
  518.                 swap("take-boat", option, target, true);
  519.                 swap("fly", option, target, true);
  520.                 swap("jatizso", option, target, true);
  521.                 swap("neitiznot", option, target, true);
  522.                 swap("rellekka", option, target, true);
  523.                 swap("follow", option, target, true);
  524.                 swap("transport", option, target, true);
  525.             }
  526.  
  527.             if (config.swapPay())
  528.             {
  529.                 swap("pay", option, target, true);
  530.             }
  531.  
  532.             if (config.swapDecant())
  533.             {
  534.                 swap("decant", option, target, true);
  535.             }
  536.  
  537.             if (config.swapQuick())
  538.             {
  539.                 swap("quick-travel", option, target, true);
  540.             }
  541.         }
  542.         else if(config.swapBuildOptions() && (target.equals("fencing") || target.equals("stone space")))
  543.         {
  544.             swapWalkHere("build", "walk here", target,true);
  545.         }
  546.         else if(config.swapBuildOptions() && (target.equals("attack stone") || target.equals("wooden fence")))
  547.         {
  548.             swapWalkHere("remove", "walk here", target, true);
  549.         }
  550.         else if(config.swapBuildOptions() && (target.equals("door hotspot") || target.equals("hedging") || target.equals("small plant") || target.equals("small plant 2")))
  551.         {
  552.             removeOptions(option, target, true);
  553.         }
  554.         else if(config.swapBuildOptions() && target.equals("razmire keelgan"))
  555.         {
  556.             swap("trade-builders-store", option, target, true);
  557.         }
  558.         else if(config.swapBuildOptions() && target.contains("morytania"))
  559.         {
  560.             swap("burgh teleport", option, target, true);
  561.         }
  562.         else if(config.swapBuildOptions() && target.equals("flamtaer bag") && castHomeTele)
  563.         {
  564.             swap("empty", option, target, true);
  565.         }
  566.         else if(config.swapBuildOptions() && option.equals("value"))
  567.         {
  568.             swap("buy 50", option, target, true);
  569.         }
  570.         else if(config.swapChop() && option.equals("chop down"))
  571.         {
  572.             swapWalkHere("walk here", option, "", true);
  573.         }
  574.         else if(config.marinsKitchen() && option.equals("take"))
  575.         {
  576.             swap("take-x", option, target, true);
  577.         }
  578.         else if(config.leftClickDismiss() && option.equals("talk to"))
  579.         {
  580.             swap("dismiss", option, target, true);
  581.         }
  582.         else if (config.swapTravel() && option.equals("pass") && target.equals("energy barrier"))
  583.         {
  584.             swap("pay-toll(2-ecto)", option, target, true);
  585.         }
  586.         else if (config.swapTravel() && option.equals("open") && target.equals("gate"))
  587.         {
  588.             swap("pay-toll(10gp)", option, target, true);
  589.         }
  590.         else if (config.swapTravel() && option.equals("inspect") && target.equals("trapdoor"))
  591.         {
  592.             swap("travel", option, target, true);
  593.         }
  594.         else if (config.swapHarpoon() && option.equals("cage"))
  595.         {
  596.             swap("harpoon", option, target, true);
  597.         }
  598.         else if (config.swapHarpoon() && (option.equals("big net") || option.equals("net")))
  599.         {
  600.             swap("harpoon", option, target, true);
  601.         }
  602.         else if (config.swapHomePortal() != HouseMode.ENTER && option.equals("enter"))
  603.         {
  604.             switch (config.swapHomePortal())
  605.             {
  606.                 case HOME:
  607.                     swap("home", option, target, true);
  608.                     break;
  609.                 case BUILD_MODE:
  610.                     swap("build mode", option, target, true);
  611.                     break;
  612.                 case FRIENDS_HOUSE:
  613.                     swap("friend's house", option, target, true);
  614.                     break;
  615.             }
  616.         }
  617.         else if (config.swapFairyRing() != FairyRingMode.OFF && config.swapFairyRing() != FairyRingMode.ZANARIS
  618.             && (option.equals("zanaris") || option.equals("configure") || option.equals("tree")))
  619.         {
  620.             if (config.swapFairyRing() == FairyRingMode.LAST_DESTINATION)
  621.             {
  622.                 swap("last-destination", option, target, false);
  623.             }
  624.             else if (config.swapFairyRing() == FairyRingMode.CONFIGURE)
  625.             {
  626.                 swap("configure", option, target, false);
  627.             }
  628.         }
  629.         else if (config.swapFairyRing() == FairyRingMode.ZANARIS && option.equals("tree"))
  630.         {
  631.             swap("zanaris", option, target, false);
  632.         }
  633.         else if (config.swapBoxTrap() && (option.equals("check") || option.equals("dismantle")))
  634.         {
  635.             swap("reset", option, target, true);
  636.         }
  637.         else if (config.swapBoxTrap() && option.equals("take"))
  638.         {
  639.             swap("lay", option, target, true);
  640.         }
  641.         else if (config.swapChase() && option.equals("pick-up"))
  642.         {
  643.             swap("chase", option, target, true);
  644.         }
  645.         else if (config.swapBirdhouseEmpty() && option.equals("interact") && target.contains("birdhouse"))
  646.         {
  647.             swap("empty", option, target, true);
  648.         }
  649.         else if (config.swapQuick() && option.equals("ring"))
  650.         {
  651.             swap("quick-start", option, target, true);
  652.         }
  653.         else if (config.swapQuick() && option.equals("pass"))
  654.         {
  655.             swap("quick-pass", option, target, true);
  656.             swap("quick pass", option, target, true);
  657.         }
  658.         else if (config.swapAdmire() && option.equals("admire"))
  659.         {
  660.             swap("teleport", option, target, true);
  661.             swap("spellbook", option, target, true);
  662.             swap("perks", option, target, true);
  663.         }
  664.         else if (config.shiftClickCustomization() && shiftModifier && !option.equals("use"))
  665.         {
  666.             Integer customOption = getSwapConfig(itemId);
  667.  
  668.             if (customOption != null && customOption == -1)
  669.             {
  670.                 swap("use", option, target, true);
  671.             }
  672.         }
  673.         // Put all item-related swapping after shift-click
  674.         else if (config.swapTeleportItem() && option.equals("wear"))
  675.         {
  676.             swap("rub", option, target, true);
  677.             swap("teleport", option, target, true);
  678.         }
  679.         else if (option.equals("wield"))
  680.         {
  681.             if (config.swapTeleportItem())
  682.             {
  683.                 swap("teleport", option, target, true);
  684.             }
  685.         }
  686.         else if (config.swapBones() && option.equals("bury"))
  687.         {
  688.             swap("use", option, target, true);
  689.         }
  690.     }
  691.  
  692.     @Subscribe
  693.     public void onPostItemComposition(PostItemComposition event)
  694.     {
  695.         ItemComposition itemComposition = event.getItemComposition();
  696.         Integer option = getSwapConfig(itemComposition.getId());
  697.  
  698.         if (option != null)
  699.         {
  700.             itemComposition.setShiftClickActionIndex(option);
  701.         }
  702.     }
  703.  
  704.     @Subscribe
  705.     public void onFocusChanged(FocusChanged event)
  706.     {
  707.         if (!event.isFocused())
  708.         {
  709.             shiftModifier = false;
  710.         }
  711.     }
  712.  
  713.     private int searchIndex(MenuEntry[] entries, String option, String target, boolean strict)
  714.     {
  715.         for (int i = entries.length - 1; i >= 0; i--)
  716.         {
  717.             MenuEntry entry = entries[i];
  718.             String entryOption = Text.removeTags(entry.getOption()).toLowerCase();
  719.             String entryTarget = Text.removeTags(entry.getTarget()).toLowerCase();
  720.  
  721.             if (strict)
  722.             {
  723.                 if (entryOption.equals(option) && entryTarget.equals(target))
  724.                 {
  725.                     return i;
  726.                 }
  727.             }
  728.             else
  729.             {
  730.                 if (entryOption.contains(option.toLowerCase()) && entryTarget.equals(target))
  731.                 {
  732.                     return i;
  733.                 }
  734.             }
  735.         }
  736.  
  737.         return -1;
  738.     }
  739.  
  740.     private void swap(String optionA, String optionB, String target, boolean strict)
  741.     {
  742.         MenuEntry[] entries = client.getMenuEntries();
  743.  
  744.         int idxA = searchIndex(entries, optionA, target, strict);
  745.         int idxB = searchIndex(entries, optionB, target, strict);
  746.  
  747.         if (idxA >= 0 && idxB >= 0)
  748.         {
  749.             MenuEntry entry = entries[idxA];
  750.             entries[idxA] = entries[idxB];
  751.             entries[idxB] = entry;
  752.  
  753.             client.setMenuEntries(entries);
  754.         }
  755.     }
  756.  
  757.     private void removeOptions(String option, String target, boolean strict)
  758.     {
  759.         MenuEntry[] entries = client.getMenuEntries();
  760.  
  761.         MenuEntry[] tempEntries = new MenuEntry[1];
  762.  
  763.         tempEntries[0] = entries[0];
  764.  
  765.         client.setMenuEntries(tempEntries);
  766.     }
  767.  
  768.     private void swapWalkHere(String optionA, String optionB, String target, boolean strict)
  769.     {
  770.         MenuEntry[] entries = client.getMenuEntries();
  771.  
  772.         int idxA = searchIndex(entries, optionA, target, strict);
  773.         MenuEntry[] tempEntries = new MenuEntry[1];
  774.         tempEntries[0] = entries[idxA];
  775.  
  776.         client.setMenuEntries(tempEntries);
  777.     }
  778.  
  779.     private void removeShiftClickCustomizationMenus()
  780.     {
  781.         menuManager.removeManagedCustomMenu(FIXED_INVENTORY_TAB_CONFIGURE);
  782.         menuManager.removeManagedCustomMenu(FIXED_INVENTORY_TAB_SAVE);
  783.         menuManager.removeManagedCustomMenu(RESIZABLE_BOTTOM_LINE_INVENTORY_TAB_CONFIGURE);
  784.         menuManager.removeManagedCustomMenu(RESIZABLE_BOTTOM_LINE_INVENTORY_TAB_SAVE);
  785.         menuManager.removeManagedCustomMenu(RESIZABLE_INVENTORY_TAB_CONFIGURE);
  786.         menuManager.removeManagedCustomMenu(RESIZABLE_INVENTORY_TAB_SAVE);
  787.     }
  788.  
  789.     private void refreshShiftClickCustomizationMenus()
  790.     {
  791.         removeShiftClickCustomizationMenus();
  792.         if (configuringShiftClick)
  793.         {
  794.             menuManager.addManagedCustomMenu(FIXED_INVENTORY_TAB_SAVE);
  795.             menuManager.addManagedCustomMenu(RESIZABLE_BOTTOM_LINE_INVENTORY_TAB_SAVE);
  796.             menuManager.addManagedCustomMenu(RESIZABLE_INVENTORY_TAB_SAVE);
  797.         }
  798.         else
  799.         {
  800.             menuManager.addManagedCustomMenu(FIXED_INVENTORY_TAB_CONFIGURE);
  801.             menuManager.addManagedCustomMenu(RESIZABLE_BOTTOM_LINE_INVENTORY_TAB_CONFIGURE);
  802.             menuManager.addManagedCustomMenu(RESIZABLE_INVENTORY_TAB_CONFIGURE);
  803.         }
  804.     }
  805. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top