From e6d83c832224eeee3771b953162266bba8c4f83a Mon Sep 17 00:00:00 2001 From: Adam Date: Fri, 22 Apr 2022 21:31:41 -0400 Subject: [PATCH] examine: fix examining ground items Remove support for examining npcs/objects which has been unused for a long time. All examines I see go through this examine_item script, so we can assume the ITEM_EXAMINE chat message type is used for all examines. --- .../client/plugins/examine/CacheKey.java | 71 ------------------- .../client/plugins/examine/ExaminePlugin.java | 70 +++++------------- .../client/plugins/examine/ExamineType.java | 33 --------- .../plugins/examine/PendingExamine.java | 4 +- 4 files changed, 20 insertions(+), 158 deletions(-) delete mode 100644 runelite-client/src/main/java/net/runelite/client/plugins/examine/CacheKey.java delete mode 100644 runelite-client/src/main/java/net/runelite/client/plugins/examine/ExamineType.java diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/examine/CacheKey.java b/runelite-client/src/main/java/net/runelite/client/plugins/examine/CacheKey.java deleted file mode 100644 index 8cd0340b69..0000000000 --- a/runelite-client/src/main/java/net/runelite/client/plugins/examine/CacheKey.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright (c) 2017, Adam - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package net.runelite.client.plugins.examine; - -import java.util.Objects; - -class CacheKey -{ - private final ExamineType type; - private final int id; - - public CacheKey(ExamineType type, int id) - { - this.type = type; - this.id = id; - } - - @Override - public int hashCode() - { - int hash = 3; - hash = 23 * hash + Objects.hashCode(this.type); - hash = 23 * hash + this.id; - return hash; - } - - @Override - public boolean equals(Object obj) - { - if (this == obj) - { - return true; - } - if (obj == null) - { - return false; - } - if (getClass() != obj.getClass()) - { - return false; - } - final CacheKey other = (CacheKey) obj; - if (this.id != other.id) - { - return false; - } - return this.type == other.type; - } -} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java index 66323a1ca5..f6b7615e47 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExaminePlugin.java @@ -25,7 +25,6 @@ package net.runelite.client.plugins.examine; import com.google.common.annotations.VisibleForTesting; -import java.time.Instant; import java.util.ArrayDeque; import java.util.Deque; import javax.inject.Inject; @@ -52,7 +51,6 @@ import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.util.QuantityFormatter; -import net.runelite.client.util.Text; @PluginDescriptor( name = "Examine", @@ -82,18 +80,18 @@ public class ExaminePlugin extends Plugin @Subscribe public void onMenuOptionClicked(MenuOptionClicked event) { - if (!Text.removeTags(event.getMenuOption()).equals("Examine")) + if (!event.getMenuOption().equals("Examine")) { return; } - ExamineType type; + final ChatMessageType type; int id, quantity = -1; switch (event.getMenuAction()) { case EXAMINE_ITEM: { - type = ExamineType.ITEM; + type = ChatMessageType.ITEM_EXAMINE; id = event.getId(); int widgetId = event.getParam1(); @@ -120,12 +118,12 @@ public class ExaminePlugin extends Plugin break; } case EXAMINE_ITEM_GROUND: - type = ExamineType.ITEM; + type = ChatMessageType.ITEM_EXAMINE; id = event.getId(); break; case CC_OP_LOW_PRIORITY: { - type = ExamineType.IF3_ITEM; + type = ChatMessageType.ITEM_EXAMINE; // these are spoofed by us from a [proc,examine_item] script edit int[] qi = findItemFromWidget(event.getParam1(), event.getParam0()); if (qi == null) { @@ -136,77 +134,45 @@ public class ExaminePlugin extends Plugin id = qi[1]; break; } - case EXAMINE_OBJECT: - type = ExamineType.OBJECT; - id = event.getId(); - break; - case EXAMINE_NPC: - type = ExamineType.NPC; - id = event.getId(); - break; default: return; } PendingExamine pendingExamine = new PendingExamine(); - pendingExamine.setType(type); + pendingExamine.setResponseType(type); pendingExamine.setId(id); pendingExamine.setQuantity(quantity); - pendingExamine.setCreated(Instant.now()); pending.push(pendingExamine); } @Subscribe public void onChatMessage(ChatMessage event) { - ExamineType type; - switch (event.getType()) - { - case OBJECT_EXAMINE: - type = ExamineType.OBJECT; - break; - case NPC_EXAMINE: - type = ExamineType.NPC; - break; - case GAMEMESSAGE: - case ITEM_EXAMINE: // these are spoofed by us from a [proc,examine_item] script edit - type = ExamineType.IF3_ITEM; - break; - default: - return; - } - if (pending.isEmpty()) { - log.debug("Got examine without a pending examine?"); return; } - PendingExamine pendingExamine = pending.pop(); - - if (pendingExamine.getType() != type) + PendingExamine pendingExamine = pending.poll(); + if (pendingExamine.getResponseType() != event.getType()) { - log.debug("Type mismatch for pending examine: {} != {}", pendingExamine.getType(), type); + log.debug("Type mismatch for pending examine: {} != {}", pendingExamine.getResponseType(), event.getType()); pending.clear(); // eh return; } - log.debug("Got examine for {} {}: {}", pendingExamine.getType(), pendingExamine.getId(), event.getMessage()); + log.debug("Got examine type {} {}: {}", pendingExamine.getResponseType(), pendingExamine.getId(), event.getMessage()); - // If it is an item, show the price of it - if (pendingExamine.getType() == ExamineType.ITEM || pendingExamine.getType() == ExamineType.IF3_ITEM) + final int itemId = pendingExamine.getId(); + final int itemQuantity = pendingExamine.getQuantity(); + + if (itemId == ItemID.COINS_995) { - final int itemId = pendingExamine.getId(); - final int itemQuantity = pendingExamine.getQuantity(); - - if (itemId == ItemID.COINS_995) - { - return; - } - - final ItemComposition itemComposition = itemManager.getItemComposition(itemId); - getItemPrice(itemComposition.getId(), itemComposition, itemQuantity); + return; } + + final ItemComposition itemComposition = itemManager.getItemComposition(itemId); + getItemPrice(itemComposition.getId(), itemComposition, itemQuantity); } private int[] findItemFromWidget(int widgetId, int childIdx) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExamineType.java b/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExamineType.java deleted file mode 100644 index 796d8db764..0000000000 --- a/runelite-client/src/main/java/net/runelite/client/plugins/examine/ExamineType.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (c) 2017, Adam - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package net.runelite.client.plugins.examine; - -enum ExamineType -{ - ITEM, - IF3_ITEM, - NPC, - OBJECT; -} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/examine/PendingExamine.java b/runelite-client/src/main/java/net/runelite/client/plugins/examine/PendingExamine.java index 96b7389e06..8ae2844499 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/examine/PendingExamine.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/examine/PendingExamine.java @@ -26,12 +26,12 @@ package net.runelite.client.plugins.examine; import java.time.Instant; import lombok.Data; +import net.runelite.api.ChatMessageType; @Data class PendingExamine { - private ExamineType type; + private ChatMessageType responseType; private int id; private int quantity; - private Instant created; }