ground items plugin: add option to highlight menu

This commit is contained in:
Dennis
2018-03-10 20:54:47 +01:00
committed by Adam
parent 398441616a
commit 8f7db67984
3 changed files with 188 additions and 29 deletions

View File

@@ -71,11 +71,44 @@ public interface GroundItemsConfig extends Config
return false; return false;
} }
@ConfigItem(
keyName = "showMenuItemQuantities",
name = "Show Menu Item Quantities",
description = "Configures whether or not to show the item quantities in the menu",
position = 4
)
default boolean showMenuItemQuantities()
{
return true;
}
@ConfigItem(
keyName = "highlightMenuOption",
name = "Highlight Menu Option",
description = "Configures whether or not to highlight the menu option",
position = 5
)
default boolean highlightMenuOption()
{
return true;
}
@ConfigItem(
keyName = "highlightMenuItemName",
name = "Highlight Menu Item Name",
description = "Configures whether or not to highlight the menu item name",
position = 6
)
default boolean highlightMenuItemName()
{
return false;
}
@ConfigItem( @ConfigItem(
keyName = "hideUnderGeValue", keyName = "hideUnderGeValue",
name = "Hide < GE Value", name = "Hide < GE Value",
description = "Configures hidden ground items under GE value", description = "Configures hidden ground items under GE value",
position = 4 position = 7
) )
default int getHideUnderGeValue() default int getHideUnderGeValue()
{ {
@@ -86,7 +119,7 @@ public interface GroundItemsConfig extends Config
keyName = "hideUnderHaValue", keyName = "hideUnderHaValue",
name = "Hide < HA Value", name = "Hide < HA Value",
description = "Configures hidden ground items under High Alch value", description = "Configures hidden ground items under High Alch value",
position = 5 position = 8
) )
default int getHideUnderHAValue() default int getHideUnderHAValue()
{ {
@@ -97,7 +130,7 @@ public interface GroundItemsConfig extends Config
keyName = "highlightedItems", keyName = "highlightedItems",
name = "Highlighted Items", name = "Highlighted Items",
description = "Configures specifically highlighted ground items. Format: (item), (item)", description = "Configures specifically highlighted ground items. Format: (item), (item)",
position = 6 position = 9
) )
default String getHighlightItems() default String getHighlightItems()
{ {
@@ -108,7 +141,7 @@ public interface GroundItemsConfig extends Config
keyName = "hiddenItems", keyName = "hiddenItems",
name = "Hidden Items", name = "Hidden Items",
description = "Configures hidden ground items. Format: (item), (item)", description = "Configures hidden ground items. Format: (item), (item)",
position = 7 position = 10
) )
default String getHiddenItems() default String getHiddenItems()
{ {
@@ -119,7 +152,7 @@ public interface GroundItemsConfig extends Config
keyName = "defaultColor", keyName = "defaultColor",
name = "Default items color", name = "Default items color",
description = "Configures the color for default, non-highlighted items", description = "Configures the color for default, non-highlighted items",
position = 8 position = 11
) )
default Color defaultColor() default Color defaultColor()
{ {
@@ -130,7 +163,7 @@ public interface GroundItemsConfig extends Config
keyName = "highlightedColor", keyName = "highlightedColor",
name = "Highlighted items color", name = "Highlighted items color",
description = "Configures the color for highlighted items", description = "Configures the color for highlighted items",
position = 9 position = 12
) )
default Color highlightedColor() default Color highlightedColor()
{ {
@@ -141,7 +174,7 @@ public interface GroundItemsConfig extends Config
keyName = "lowValueColor", keyName = "lowValueColor",
name = "Low value items color", name = "Low value items color",
description = "Configures the color for low value items", description = "Configures the color for low value items",
position = 10 position = 13
) )
default Color lowValueColor() default Color lowValueColor()
{ {
@@ -152,7 +185,7 @@ public interface GroundItemsConfig extends Config
keyName = "mediumValueColor", keyName = "mediumValueColor",
name = "Medium value items color", name = "Medium value items color",
description = "Configures the color for medium value items", description = "Configures the color for medium value items",
position = 11 position = 14
) )
default Color mediumValueColor() default Color mediumValueColor()
{ {
@@ -163,7 +196,7 @@ public interface GroundItemsConfig extends Config
keyName = "highValueColor", keyName = "highValueColor",
name = "High value items color", name = "High value items color",
description = "Configures the color for high value items", description = "Configures the color for high value items",
position = 12 position = 15
) )
default Color highValueColor() default Color highValueColor()
{ {
@@ -174,7 +207,7 @@ public interface GroundItemsConfig extends Config
keyName = "insaneValueColor", keyName = "insaneValueColor",
name = "Insane value items color", name = "Insane value items color",
description = "Configures the color for insane value items", description = "Configures the color for insane value items",
position = 13 position = 16
) )
default Color insaneValueColor() default Color insaneValueColor()
{ {

View File

@@ -70,7 +70,7 @@ public class GroundItemsOverlay extends Overlay
// The 15 pixel gap between each drawn ground item. // The 15 pixel gap between each drawn ground item.
private static final int STRING_GAP = 15; private static final int STRING_GAP = 15;
// Threshold for highlighting items as blue. // Threshold for highlighting items as blue.
private static final int LOW_VALUE = 20_000; static final int LOW_VALUE = 20_000;
// Threshold for highlighting items as green. // Threshold for highlighting items as green.
private static final int MEDIUM_VALUE = 100_000; private static final int MEDIUM_VALUE = 100_000;
// Threshold for highlighting items as amber. // Threshold for highlighting items as amber.
@@ -80,7 +80,7 @@ public class GroundItemsOverlay extends Overlay
// Used when getting High Alchemy value - multiplied by general store price. // Used when getting High Alchemy value - multiplied by general store price.
private static final float HIGH_ALCHEMY_CONSTANT = 0.6f; private static final float HIGH_ALCHEMY_CONSTANT = 0.6f;
// Regex for splitting the hidden items in the config. // Regex for splitting the hidden items in the config.
private static final String DELIMITER_REGEX = "\\s*,\\s*"; static final String DELIMITER_REGEX = "\\s*,\\s*";
// ItemID for coins // ItemID for coins
private static final int COINS = ItemID.COINS_995; private static final int COINS = ItemID.COINS_995;
@@ -242,23 +242,8 @@ public class GroundItemsOverlay extends Overlay
if (itemPrice != null && config.showGEPrice()) if (itemPrice != null && config.showGEPrice())
{ {
int cost = itemPrice.getPrice() * quantity; int cost = itemPrice.getPrice() * quantity;
// set the color according to rarity, if possible
if (cost >= INSANE_VALUE) // 10,000,000 gp textColor = getCostColor(cost);
{
textColor = config.insaneValueColor();
}
else if (cost >= HIGH_VALUE) // 1,000,000 gp
{
textColor = config.highValueColor();
}
else if (cost >= MEDIUM_VALUE) // 100,000 gp
{
textColor = config.mediumValueColor();
}
else if (cost >= LOW_VALUE) // 20,000 gp
{
textColor = config.lowValueColor();
}
itemStringBuilder.append(" (EX: ") itemStringBuilder.append(" (EX: ")
.append(StackFormatter.quantityToStackSize(cost)) .append(StackFormatter.quantityToStackSize(cost))
@@ -294,4 +279,30 @@ public class GroundItemsOverlay extends Overlay
return null; return null;
} }
Color getCostColor(int cost)
{
// set the color according to rarity, if possible
if (cost >= INSANE_VALUE) // 10,000,000 gp
{
return config.insaneValueColor();
}
else if (cost >= HIGH_VALUE) // 1,000,000 gp
{
return config.highValueColor();
}
else if (cost >= MEDIUM_VALUE) // 100,000 gp
{
return config.mediumValueColor();
}
else if (cost >= LOW_VALUE) // 20,000 gp
{
return config.lowValueColor();
}
else
{
return config.defaultColor();
}
}
} }

View File

@@ -24,21 +24,45 @@
*/ */
package net.runelite.client.plugins.grounditems; package net.runelite.client.plugins.grounditems;
import com.google.common.eventbus.Subscribe;
import com.google.inject.Provides; import com.google.inject.Provides;
import java.awt.Color;
import java.util.Arrays;
import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
import net.runelite.api.Client;
import net.runelite.api.Item;
import net.runelite.api.ItemComposition;
import net.runelite.api.ItemLayer;
import net.runelite.api.MenuEntry;
import net.runelite.api.Node;
import net.runelite.api.Region;
import net.runelite.api.Tile;
import net.runelite.api.events.MenuEntryAdded;
import net.runelite.client.config.ConfigManager; import net.runelite.client.config.ConfigManager;
import net.runelite.client.game.ItemManager;
import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.plugins.PluginDescriptor;
import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.Overlay;
import net.runelite.http.api.item.ItemPrice;
@PluginDescriptor( @PluginDescriptor(
name = "Ground Items" name = "Ground Items"
) )
public class GroundItemsPlugin extends Plugin public class GroundItemsPlugin extends Plugin
{ {
@Inject
private Client client;
@Inject @Inject
private ConfigManager configManager; private ConfigManager configManager;
@Inject
private ItemManager itemManager;
@Inject
private GroundItemsConfig config;
@Inject @Inject
private GroundItemsOverlay overlay; private GroundItemsOverlay overlay;
@@ -54,4 +78,95 @@ public class GroundItemsPlugin extends Plugin
return overlay; return overlay;
} }
private ItemPrice getItemPrice(ItemComposition itemComposition)
{
if (itemComposition.getNote() != -1)
{
return itemManager.getItemPriceAsync(itemComposition.getLinkedNoteId());
}
else
{
return itemManager.getItemPriceAsync(itemComposition.getId());
}
}
@Subscribe
public void onMenuEntryAdded(MenuEntryAdded event)
{
if ((config.highlightMenuOption() || config.highlightMenuItemName()) && event.getOption().equals("Take"))
{
String hiddenItemsStr = config.getHiddenItems().toLowerCase();
List<String> hiddenItems = Arrays.asList(hiddenItemsStr.split(GroundItemsOverlay.DELIMITER_REGEX));
String highlightItemsStr = config.getHighlightItems().toLowerCase();
List<String> highlightedItems = Arrays.asList(highlightItemsStr.split(GroundItemsOverlay.DELIMITER_REGEX));
int itemId = event.getIdentifier();
ItemComposition itemComposition = client.getItemDefinition(itemId);
String name = itemComposition.getName().toLowerCase();
if (hiddenItems.contains(name))
{
return;
}
Region region = client.getRegion();
Tile tile = region.getTiles()[client.getPlane()][event.getActionParam0()][event.getActionParam1()];
ItemLayer itemLayer = tile.getItemLayer();
MenuEntry[] menuEntries = client.getMenuEntries();
MenuEntry lastEntry = menuEntries[menuEntries.length - 1];
int quantity = 1;
Node current = itemLayer.getBottom();
while (current instanceof Item)
{
Item item = (Item) current;
if (item.getId() == itemId)
{
quantity = item.getQuantity();
}
current = current.getNext();
}
ItemPrice itemPrice = getItemPrice(itemComposition);
int price = itemPrice == null ? itemComposition.getPrice() : itemPrice.getPrice();
int cost = quantity * price;
Color color = null;
if (cost >= GroundItemsOverlay.LOW_VALUE)
{
color = overlay.getCostColor(cost);
}
if (highlightedItems.contains(name))
{
color = config.highlightedColor();
}
if (color != null)
{
String hexColor = Integer.toHexString(color.getRGB() & 0xFFFFFF);
String colTag = "<col=" + hexColor + ">";
if (config.highlightMenuOption())
{
lastEntry.setOption(colTag + "Take");
}
if (config.highlightMenuItemName())
{
String target = lastEntry.getTarget().substring(lastEntry.getTarget().indexOf(">") + 1);
lastEntry.setTarget(colTag + target);
}
}
if (config.showMenuItemQuantities() && itemComposition.isStackable() && quantity > 1)
{
lastEntry.setTarget(lastEntry.getTarget() + " (" + quantity + ")");
}
client.setMenuEntries(menuEntries);
}
}
} }