From 78a1df45894a9b495fc1f0c657f61baa35635139 Mon Sep 17 00:00:00 2001 From: Manatsawin Hanmongkolchai Date: Sun, 6 Oct 2019 12:18:35 +0700 Subject: [PATCH] Swap herb clean/use menu by level --- .../MenuEntrySwapperConfig.java | 27 +++++++ .../MenuEntrySwapperPlugin.java | 12 ++++ .../comparables/GrimyHerbComparableEntry.java | 71 +++++++++++++++++++ .../util/GrimyHerbLookup.java | 59 +++++++++++++++ .../util/HerbNotFoundException.java | 5 ++ .../util/SwapGrimyHerbMode.java | 20 ++++++ runelite-client/src/main/resources/herbs.json | 57 +++++++++++++++ 7 files changed, 251 insertions(+) create mode 100644 runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/comparables/GrimyHerbComparableEntry.java create mode 100644 runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/util/GrimyHerbLookup.java create mode 100644 runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/util/HerbNotFoundException.java create mode 100644 runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/util/SwapGrimyHerbMode.java create mode 100644 runelite-client/src/main/resources/herbs.json diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperConfig.java index b492bf5ea7..be74efc663 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperConfig.java @@ -54,6 +54,7 @@ import net.runelite.client.plugins.menuentryswapper.util.QuestCapeMode; import net.runelite.client.plugins.menuentryswapper.util.RingOfWealthMode; import net.runelite.client.plugins.menuentryswapper.util.SkillsNecklaceMode; import net.runelite.client.plugins.menuentryswapper.util.SlayerRingMode; +import net.runelite.client.plugins.menuentryswapper.util.SwapGrimyHerbMode; import net.runelite.client.plugins.menuentryswapper.util.XericsTalismanMode; @@ -1127,6 +1128,32 @@ public interface MenuEntrySwapperConfig extends Config return false; } + @ConfigItem( + keyName = "swapGrimyHerb", + name = "Grimy Herbs", + description = "", + position = 6, + section = "skillingSection" + ) + default boolean getSwapGrimyHerb() + { + return false; + } + + @ConfigItem( + keyName = "swapGrimyHerbMode", + name = "Mode", + description = "", + position = 7, + section = "skillingSection", + hidden = true, + unhide = "swapGrimyHerb" + ) + default SwapGrimyHerbMode swapGrimyHerbMode() + { + return SwapGrimyHerbMode.DYNAMIC; + } + //------------------------------------------------------------// // Talk-To //------------------------------------------------------------// 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 3cfa9cc17f..92cc3ffd91 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 @@ -85,6 +85,7 @@ import net.runelite.client.plugins.PluginManager; import net.runelite.client.plugins.PluginType; import net.runelite.client.plugins.menuentryswapper.comparables.BankComparableEntry; import net.runelite.client.plugins.menuentryswapper.comparables.EquipmentComparableEntry; +import net.runelite.client.plugins.menuentryswapper.comparables.GrimyHerbComparableEntry; import net.runelite.client.plugins.menuentryswapper.comparables.InventoryComparableEntry; import net.runelite.client.plugins.menuentryswapper.comparables.ShopComparableEntry; import net.runelite.client.plugins.menuentryswapper.comparables.WithdrawComparableEntry; @@ -110,6 +111,7 @@ import net.runelite.client.plugins.menuentryswapper.util.QuestCapeMode; import net.runelite.client.plugins.menuentryswapper.util.RingOfWealthMode; import net.runelite.client.plugins.menuentryswapper.util.SkillsNecklaceMode; import net.runelite.client.plugins.menuentryswapper.util.SlayerRingMode; +import net.runelite.client.plugins.menuentryswapper.util.SwapGrimyHerbMode; import net.runelite.client.plugins.menuentryswapper.util.XericsTalismanMode; import net.runelite.client.plugins.pvptools.PvpToolsConfig; import net.runelite.client.plugins.pvptools.PvpToolsPlugin; @@ -206,6 +208,7 @@ public class MenuEntrySwapperPlugin extends Plugin private OccultAltarMode swapOccultMode; private QuestCapeMode questCapeMode; private RingOfWealthMode getRingofWealthMode; + private SwapGrimyHerbMode swapGrimyHerbMode; private Set hideCastIgnoredCoX; private Set hideCastIgnoredToB; private SkillsNecklaceMode getSkillsNecklaceMode; @@ -230,6 +233,7 @@ public class MenuEntrySwapperPlugin extends Plugin private boolean getSwapExplorersRing; private boolean getSwapMagicCape; private boolean getSwapPuro; + private boolean getSwapGrimyHerb; private boolean getSwapSawmill; private boolean getSwapSawmillPlanks; private boolean getSwapTanning; @@ -1157,6 +1161,11 @@ public class MenuEntrySwapperPlugin extends Plugin { menuManager.addPriorityEntry(this.swapHouseAdMode.getEntry()); } + + if (this.getSwapGrimyHerb) + { + menuManager.addPriorityEntry(new GrimyHerbComparableEntry(this.swapGrimyHerbMode, client)); + } } private void removeSwaps() @@ -1269,6 +1278,7 @@ public class MenuEntrySwapperPlugin extends Plugin menuManager.removePriorityEntry(new EquipmentComparableEntry(this.getXericsTalismanMode.toString(), "talisman")); menuManager.removePriorityEntry(new InventoryComparableEntry("Rub", "", false)); menuManager.removePriorityEntry(new InventoryComparableEntry("Teleport", "", false)); + menuManager.removePriorityEntry(new GrimyHerbComparableEntry(this.swapGrimyHerbMode, client)); menuManager.removePriorityEntry(newBankComparableEntry("Empty", "Coal bag")); menuManager.removePriorityEntry(this.constructionCapeMode.toString(), "Construct. cape"); menuManager.removePriorityEntry(this.constructionCapeMode.toString(), "Construct. cape(t)"); @@ -1562,6 +1572,7 @@ public class MenuEntrySwapperPlugin extends Plugin this.getNecklaceofPassageMode = config.getNecklaceofPassageMode(); this.getRingofWealth = config.getRingofWealth(); this.getRingofWealthMode = config.getRingofWealthMode(); + this.swapGrimyHerbMode = config.swapGrimyHerbMode(); this.getSkillsNecklace = config.getSkillsNecklace(); this.getSkillsNecklaceMode = config.getSkillsNecklaceMode(); this.getSlayerRing = config.getSlayerRing(); @@ -1572,6 +1583,7 @@ public class MenuEntrySwapperPlugin extends Plugin this.getSwapExplorersRing = config.getSwapExplorersRing(); this.getSwapMagicCape = config.getSwapMagicCape(); this.getSwapPuro = config.getSwapPuro(); + this.getSwapGrimyHerb = config.getSwapGrimyHerb(); this.getSwapSawmill = config.getSwapSawmill(); this.getSwapSawmillPlanks = config.getSwapSawmillPlanks(); this.getSwapTanning = config.getSwapTanning(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/comparables/GrimyHerbComparableEntry.java b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/comparables/GrimyHerbComparableEntry.java new file mode 100644 index 0000000000..9b0c75a664 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/comparables/GrimyHerbComparableEntry.java @@ -0,0 +1,71 @@ +package net.runelite.client.plugins.menuentryswapper.comparables; + +import net.runelite.api.Client; +import net.runelite.api.MenuEntry; +import net.runelite.api.Skill; +import net.runelite.api.widgets.WidgetID; +import net.runelite.api.widgets.WidgetInfo; +import net.runelite.client.menus.AbstractComparableEntry; +import net.runelite.client.plugins.menuentryswapper.util.GrimyHerbLookup; +import net.runelite.client.plugins.menuentryswapper.util.HerbNotFoundException; +import net.runelite.client.plugins.menuentryswapper.util.SwapGrimyHerbMode; +import org.apache.commons.lang3.StringUtils; + +public class GrimyHerbComparableEntry extends AbstractComparableEntry +{ + private SwapGrimyHerbMode mode; + + private final GrimyHerbLookup lookup = new GrimyHerbLookup(); + private final Client client; + + public GrimyHerbComparableEntry(SwapGrimyHerbMode mode, Client client) + { + this.mode = mode; + this.client = client; + } + + @Override + public int getPriority() + { + return 100; + } + + @Override + public boolean equals(Object other) + { + return other instanceof GrimyHerbComparableEntry && ((GrimyHerbComparableEntry) other).mode == mode && super.equals(other); + } + + public boolean matches(MenuEntry entry) + { + final int groupId = WidgetInfo.TO_GROUP(entry.getParam1()); + + if (groupId != WidgetID.INVENTORY_GROUP_ID) + { + return false; + } + + int cleanLevel; + try + { + cleanLevel = lookup.getCleanLevel(entry.getIdentifier()); + } + catch (HerbNotFoundException e) + { + return false; + } + + if (this.mode == SwapGrimyHerbMode.USE) + { + return StringUtils.equalsIgnoreCase(entry.getOption(), "use"); + } + + String swapOption = "use"; + if (client.getBoostedSkillLevel(Skill.HERBLORE) >= cleanLevel) + { + swapOption = "clean"; + } + + return StringUtils.equalsIgnoreCase(entry.getOption(), swapOption); + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/util/GrimyHerbLookup.java b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/util/GrimyHerbLookup.java new file mode 100644 index 0000000000..97236ddc37 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/util/GrimyHerbLookup.java @@ -0,0 +1,59 @@ +package net.runelite.client.plugins.menuentryswapper.util; + +import com.google.gson.Gson; +import com.google.gson.annotations.SerializedName; +import com.google.gson.reflect.TypeToken; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public class GrimyHerbLookup +{ + private static Map mapping; + + static + { + final InputStream herbFile = GrimyHerbLookup.class.getResourceAsStream("/herbs.json"); + Gson gson = new Gson(); + mapping = gson.fromJson(new InputStreamReader(herbFile), new TypeToken>() + { + }.getType()); + } + + public int getCleanLevel(int itemId) + { + HerbInfo info = mapping.get(String.valueOf(itemId)); + if (info == null) + { + throw new HerbNotFoundException(); + } + + return info.level; + } + + public int getCleanedItemId(int itemId) + { + HerbInfo info = mapping.get(String.valueOf(itemId)); + if (info == null) + { + throw new HerbNotFoundException(); + } + + return info.cleanedId; + } + + public List getGrimyHerbIds() + { + return mapping.keySet().stream().mapToInt(Integer::valueOf).boxed().collect(Collectors.toList()); + } + + private class HerbInfo + { + @SerializedName("cleaned") + private int cleanedId; + private int level; + } + +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/util/HerbNotFoundException.java b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/util/HerbNotFoundException.java new file mode 100644 index 0000000000..c352d90d47 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/util/HerbNotFoundException.java @@ -0,0 +1,5 @@ +package net.runelite.client.plugins.menuentryswapper.util; + +public class HerbNotFoundException extends RuntimeException +{ +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/util/SwapGrimyHerbMode.java b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/util/SwapGrimyHerbMode.java new file mode 100644 index 0000000000..497079cb92 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/util/SwapGrimyHerbMode.java @@ -0,0 +1,20 @@ +package net.runelite.client.plugins.menuentryswapper.util; + +public enum SwapGrimyHerbMode +{ + USE("Use"), + DYNAMIC("By level"); + + private final String name; + + SwapGrimyHerbMode(String name) + { + this.name = name; + } + + @Override + public String toString() + { + return name; + } +} diff --git a/runelite-client/src/main/resources/herbs.json b/runelite-client/src/main/resources/herbs.json new file mode 100644 index 0000000000..0689d41705 --- /dev/null +++ b/runelite-client/src/main/resources/herbs.json @@ -0,0 +1,57 @@ +{ + "199": { + "cleaned": 249, + "level": 3 + }, + "201": { + "cleaned": 251, + "level": 5 + }, + "203": { + "cleaned": 253, + "level": 11 + }, + "205": { + "cleaned": 255, + "level": 20 + }, + "207": { + "cleaned": 257, + "level": 25 + }, + "3049": { + "cleaned": 2998, + "level": 30 + }, + "209": { + "cleaned": 259, + "level": 40 + }, + "211": { + "cleaned": 261, + "level": 48 + }, + "213": { + "cleaned": 263, + "level": 54 + }, + "3051": { + "cleaned": 3000, + "level": 59 + }, + "215": { + "cleaned": 265, + "level": 65 + }, + "2485": { + "level": 67 + }, + "217": { + "cleaned": 267, + "level": 70 + }, + "219": { + "cleaned": 269, + "level": 75 + } +} \ No newline at end of file