Merge pull request #1724 from whs/whs/herb-mes

mes: Swap herb clean/use menu by level
This commit is contained in:
ST0NEWALL
2019-10-11 17:03:42 -04:00
committed by GitHub
7 changed files with 251 additions and 0 deletions

View File

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

View File

@@ -91,6 +91,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;
@@ -117,6 +118,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;
@@ -218,6 +220,7 @@ public class MenuEntrySwapperPlugin extends Plugin
private OccultAltarMode swapOccultMode;
private QuestCapeMode questCapeMode;
private RingOfWealthMode getRingofWealthMode;
private SwapGrimyHerbMode swapGrimyHerbMode;
private Set<String> hideCastIgnoredCoX;
private Set<String> hideCastIgnoredToB;
private SkillsNecklaceMode getSkillsNecklaceMode;
@@ -242,6 +245,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;
@@ -1296,6 +1300,11 @@ public class MenuEntrySwapperPlugin extends Plugin
{
menuManager.addPriorityEntry(this.swapHouseAdMode.getEntry());
}
if (this.getSwapGrimyHerb)
{
menuManager.addPriorityEntry(new GrimyHerbComparableEntry(this.swapGrimyHerbMode, client));
}
}
private void removeSwaps()
@@ -1408,6 +1417,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)");
@@ -1701,6 +1711,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();
@@ -1711,6 +1722,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();

View File

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

View File

@@ -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<String, HerbInfo> mapping;
static
{
final InputStream herbFile = GrimyHerbLookup.class.getResourceAsStream("/herbs.json");
Gson gson = new Gson();
mapping = gson.fromJson(new InputStreamReader(herbFile), new TypeToken<Map<String, HerbInfo>>()
{
}.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<Integer> getGrimyHerbIds()
{
return mapping.keySet().stream().mapToInt(Integer::valueOf).boxed().collect(Collectors.toList());
}
private class HerbInfo
{
@SerializedName("cleaned")
private int cleanedId;
private int level;
}
}

View File

@@ -0,0 +1,5 @@
package net.runelite.client.plugins.menuentryswapper.util;
public class HerbNotFoundException extends RuntimeException
{
}

View File

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

View File

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