diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeConfig.java index 8d33d384b8..e02ac1d3ac 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeConfig.java @@ -91,11 +91,51 @@ public interface ItemChargeConfig extends Config return true; } + @ConfigItem( + keyName = "showDodgyCount", + name = "Dodgy Necklace Count", + description = "Configures if Dodgy Necklace charge count is shown", + position = 6 + ) + default boolean showDodgyCount() + { + return true; + } + + @ConfigItem( + keyName = "dodgyNotification", + name = "Dodgy Necklace Notification", + description = "Configures if the dodgy necklace breaking notification is shown", + position = 7 + ) + default boolean dodgyNotification() + { + return true; + } + + @ConfigItem( + keyName = "dodgyNecklace", + name = "", + description = "", + hidden = true + ) + default int dodgyNecklace() + { + return -1; + } + + @ConfigItem( + keyName = "dodgyNecklace", + name = "", + description = "" + ) + void dodgyNecklace(int dodgyNecklace); + @ConfigItem( keyName = "showImpCharges", name = "Show Imp-in-a-box charges", description = "Configures if imp-in-a-box item charges is shown", - position = 6 + position = 8 ) default boolean showImpCharges() { @@ -106,7 +146,7 @@ public interface ItemChargeConfig extends Config keyName = "showFungicideCharges", name = "Show Fungicide Charges", description = "Configures if fungicide item charges is shown", - position = 7 + position = 9 ) default boolean showFungicideCharges() { @@ -117,7 +157,7 @@ public interface ItemChargeConfig extends Config keyName = "showWateringCanCharges", name = "Show Watering Can Charges", description = "Configures if watering can item charge is shown", - position = 8 + position = 10 ) default boolean showWateringCanCharges() { @@ -128,7 +168,7 @@ public interface ItemChargeConfig extends Config keyName = "showWaterskinCharges", name = "Show Waterskin Charges", description = "Configures if waterskin item charge is shown", - position = 9 + position = 11 ) default boolean showWaterskinCharges() { @@ -139,7 +179,7 @@ public interface ItemChargeConfig extends Config keyName = "recoilNotification", name = "Ring of Recoil Notification", description = "Configures if the ring of recoil breaking notification is shown", - position = 10 + position = 12 ) default boolean recoilNotification() { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeOverlay.java index f1f3568c16..96be2ee08e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargeOverlay.java @@ -33,6 +33,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import javax.inject.Inject; +import net.runelite.api.ItemID; import net.runelite.api.Query; import net.runelite.api.queries.EquipmentItemQuery; import net.runelite.api.queries.InventoryWidgetItemQuery; @@ -53,22 +54,23 @@ import net.runelite.client.util.QueryRunner; class ItemChargeOverlay extends Overlay { private final QueryRunner queryRunner; + private final ItemChargePlugin itemChargePlugin; private final ItemChargeConfig config; @Inject - ItemChargeOverlay(QueryRunner queryRunner, ItemChargeConfig config) + ItemChargeOverlay(QueryRunner queryRunner, ItemChargePlugin itemChargePlugin, ItemChargeConfig config) { setPosition(OverlayPosition.DYNAMIC); setLayer(OverlayLayer.ABOVE_WIDGETS); this.queryRunner = queryRunner; + this.itemChargePlugin = itemChargePlugin; this.config = config; } @Override public Dimension render(Graphics2D graphics) { - if (!config.showTeleportCharges() && !config.showFungicideCharges() && !config.showImpCharges() - && !config.showWateringCanCharges() && !config.showWaterskinCharges()) + if (!displayOverlay()) { return null; } @@ -77,27 +79,41 @@ class ItemChargeOverlay extends Overlay for (WidgetItem item : getChargeWidgetItems()) { - ItemWithCharge chargeItem = ItemWithCharge.findItem(item.getId()); - if (chargeItem == null) + int charges; + if (item.getId() == ItemID.DODGY_NECKLACE) { - continue; + if (!config.showDodgyCount()) + { + continue; + } + + charges = itemChargePlugin.getDodgyCharges(); + } + else + { + ItemWithCharge chargeItem = ItemWithCharge.findItem(item.getId()); + if (chargeItem == null) + { + continue; + } + + ItemChargeType type = chargeItem.getType(); + if ((type == TELEPORT && !config.showTeleportCharges()) + || (type == FUNGICIDE_SPRAY && !config.showFungicideCharges()) + || (type == IMPBOX && !config.showImpCharges()) + || (type == WATERCAN && !config.showWateringCanCharges()) + || (type == WATERSKIN && !config.showWaterskinCharges())) + { + continue; + } + + charges = chargeItem.getCharges(); } - ItemChargeType type = chargeItem.getType(); - if ((type == TELEPORT && !config.showTeleportCharges()) - || (type == FUNGICIDE_SPRAY && !config.showFungicideCharges()) - || (type == IMPBOX && !config.showImpCharges()) - || (type == WATERCAN && !config.showWateringCanCharges()) - || (type == WATERSKIN && !config.showWaterskinCharges())) - { - continue; - } - - int charges = chargeItem.getCharges(); final Rectangle bounds = item.getCanvasBounds(); final TextComponent textComponent = new TextComponent(); textComponent.setPosition(new Point(bounds.x, bounds.y + 16)); - textComponent.setText(String.valueOf(charges)); + textComponent.setText(charges < 0 ? "?" : String.valueOf(charges)); textComponent.setColor(getColor(charges)); textComponent.render(graphics); } @@ -136,4 +152,10 @@ class ItemChargeOverlay extends Overlay } return color; } + + private boolean displayOverlay() + { + return config.showTeleportCharges() || config.showDodgyCount() || config.showFungicideCharges() + || config.showImpCharges() || config.showWateringCanCharges() || config.showWaterskinCharges(); + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargePlugin.java index 03a255bb82..166e418ff9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargePlugin.java @@ -26,7 +26,11 @@ package net.runelite.client.plugins.itemcharges; import com.google.common.eventbus.Subscribe; import com.google.inject.Provides; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import javax.inject.Inject; +import lombok.AccessLevel; +import lombok.Getter; import net.runelite.api.ChatMessageType; import net.runelite.api.events.ChatMessage; import net.runelite.client.Notifier; @@ -40,6 +44,15 @@ import net.runelite.client.ui.overlay.OverlayManager; ) public class ItemChargePlugin extends Plugin { + private static final Pattern DODGY_CHECK_PATTERN = Pattern.compile( + "Your dodgy necklace has (\\d+) charges? left\\."); + private static final Pattern DODGY_PROTECT_PATTERN = Pattern.compile( + "Your dodgy necklace protects you\\..*It has (\\d+) charges? left\\."); + private static final Pattern DODGY_BREAK_PATTERN = Pattern.compile( + "Your dodgy necklace protects you\\..*It then crumbles to dust\\."); + + private static final int MAX_DODGY_CHARGES = 10; + @Inject private OverlayManager overlayManager; @@ -52,6 +65,9 @@ public class ItemChargePlugin extends Plugin @Inject private ItemChargeConfig config; + @Getter(AccessLevel.PACKAGE) + private int dodgyCharges; + @Provides ItemChargeConfig getConfig(ConfigManager configManager) { @@ -59,9 +75,10 @@ public class ItemChargePlugin extends Plugin } @Override - protected void startUp() throws Exception + protected void startUp() { overlayManager.add(overlay); + dodgyCharges = config.dodgyNecklace(); } @Override @@ -73,12 +90,39 @@ public class ItemChargePlugin extends Plugin @Subscribe public void onChatMessage(ChatMessage event) { - if (event.getType() == ChatMessageType.SERVER) + String message = event.getMessage(); + Matcher dodgyCheckMatcher = DODGY_CHECK_PATTERN.matcher(message); + Matcher dodgyProtectMatcher = DODGY_PROTECT_PATTERN.matcher(message); + Matcher dodgyBreakMatcher = DODGY_BREAK_PATTERN.matcher(message); + if (event.getType() == ChatMessageType.SERVER || event.getType() == ChatMessageType.FILTERED) { - if (config.recoilNotification() && event.getMessage().contains("