From fe2677452c6ef6a90b774b55e27de778a7a96464 Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 22 Jan 2022 22:59:54 -0500 Subject: [PATCH 1/3] devtools: add object animation ids --- .../main/java/net/runelite/api/Animation.java | 6 +++ .../java/net/runelite/api/DynamicObject.java | 37 +++++++++++++++++++ .../plugins/devtools/DevToolsOverlay.java | 18 ++++++++- 3 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 runelite-api/src/main/java/net/runelite/api/DynamicObject.java diff --git a/runelite-api/src/main/java/net/runelite/api/Animation.java b/runelite-api/src/main/java/net/runelite/api/Animation.java index 77c8a8af2e..972ed7f3cb 100644 --- a/runelite-api/src/main/java/net/runelite/api/Animation.java +++ b/runelite-api/src/main/java/net/runelite/api/Animation.java @@ -29,4 +29,10 @@ package net.runelite.api; */ public interface Animation { + /** + * Get the id for this animation + * @see AnimationID + * @return + */ + int getId(); } diff --git a/runelite-api/src/main/java/net/runelite/api/DynamicObject.java b/runelite-api/src/main/java/net/runelite/api/DynamicObject.java new file mode 100644 index 0000000000..cd3a9c1fb7 --- /dev/null +++ b/runelite-api/src/main/java/net/runelite/api/DynamicObject.java @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2022, 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.api; + +/** + * An animated object + */ +public interface DynamicObject extends Renderable +{ + /** + * Get the animation applied to the object + * @return + */ + Animation getAnimation(); +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsOverlay.java index 4217036796..60d9635535 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsOverlay.java @@ -38,9 +38,11 @@ import java.util.List; import java.util.Set; import javax.inject.Inject; import javax.inject.Singleton; +import net.runelite.api.Animation; import net.runelite.api.Client; import net.runelite.api.Constants; import net.runelite.api.DecorativeObject; +import net.runelite.api.DynamicObject; import net.runelite.api.GameObject; import net.runelite.api.GraphicsObject; import net.runelite.api.ItemLayer; @@ -355,7 +357,21 @@ class DevToolsOverlay extends Overlay { if (gameObject != null && gameObject.getSceneMinLocation().equals(tile.getSceneLocation())) { - renderTileObject(graphics, gameObject, player, GREEN); + if (player.getLocalLocation().distanceTo(gameObject.getLocalLocation()) <= MAX_DISTANCE) + { + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("ID: ").append(gameObject.getId()); + if (gameObject.getRenderable() instanceof DynamicObject) + { + Animation animation = ((DynamicObject) gameObject.getRenderable()).getAnimation(); + if (animation != null) + { + stringBuilder.append(" A: ").append(animation.getId()); + } + } + + OverlayUtil.renderTileOverlay(graphics, gameObject, stringBuilder.toString(), GREEN); + } } } } From bb4271c2f2bb04c2c8e5a48a40c887357062d4d0 Mon Sep 17 00:00:00 2001 From: awbasham Date: Wed, 26 Jan 2022 15:51:43 -0500 Subject: [PATCH 2/3] dps counter: add Corrupted Hunllef --- .../net/runelite/client/plugins/dpscounter/DpsCounterPlugin.java | 1 + 1 file changed, 1 insertion(+) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/dpscounter/DpsCounterPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/dpscounter/DpsCounterPlugin.java index 6af1e5d578..fd66d3c91a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/dpscounter/DpsCounterPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/dpscounter/DpsCounterPlugin.java @@ -72,6 +72,7 @@ public class DpsCounterPlugin extends Plugin CORPOREAL_BEAST, CRAZY_ARCHAEOLOGIST, CRYSTALLINE_HUNLLEF, CRYSTALLINE_HUNLLEF_9022, CRYSTALLINE_HUNLLEF_9023, CRYSTALLINE_HUNLLEF_9024, + CORRUPTED_HUNLLEF, CORRUPTED_HUNLLEF_9036, CORRUPTED_HUNLLEF_9037, CORRUPTED_HUNLLEF_9038, DAGANNOTH_SUPREME, DAGANNOTH_PRIME, DAGANNOTH_REX, DAGANNOTH_SUPREME_6496, DAGANNOTH_PRIME_6497, DAGANNOTH_REX_6498, DUSK, DAWN, DUSK_7851, DAWN_7852, DAWN_7853, DUSK_7854, DUSK_7855, GENERAL_GRAARDOR, GENERAL_GRAARDOR_6494, From 9458bd8d656beae0309d0995c591575b9b60607c Mon Sep 17 00:00:00 2001 From: Jordan Hanley Date: Sat, 22 Jan 2022 01:12:30 -0500 Subject: [PATCH 3/3] item identification: add jewellery Co-authored-by: Adam --- .../ItemIdentification.java | 75 ++++++++++++++++++- .../ItemIdentificationConfig.java | 22 ++++++ 2 files changed, 95 insertions(+), 2 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentification.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentification.java index 044aeeca8a..70b018c286 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentification.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentification.java @@ -427,7 +427,76 @@ enum ItemIdentification ZUL_ANDRA_TELEPORT(Type.SCROLL, "Zul-andra", "ZUL", ItemID.ZULANDRA_TELEPORT), KEY_MASTER_TELEPORT(Type.SCROLL, "Key master", "KEY", ItemID.KEY_MASTER_TELEPORT), REVENANT_CAVE_TELEPORT(Type.SCROLL, "Rev cave", "REV", ItemID.REVENANT_CAVE_TELEPORT), - WATSON_TELEPORT(Type.SCROLL, "Watson", "WATS", ItemID.WATSON_TELEPORT); + WATSON_TELEPORT(Type.SCROLL, "Watson", "WATS", ItemID.WATSON_TELEPORT), + + // Jewellery + OPAL_JEWELLERY(Type.JEWELLERY, "Opal", "OP", ItemID.OPAL_RING, ItemID.OPAL_NECKLACE, ItemID.OPAL_BRACELET, ItemID.OPAL_AMULET_U, ItemID.OPAL_AMULET), + JADE_JEWELLERY(Type.JEWELLERY, "Jade", "J", ItemID.JADE_RING, ItemID.JADE_NECKLACE, ItemID.JADE_BRACELET, ItemID.JADE_AMULET_U, ItemID.JADE_AMULET), + TOPAZ_JEWELLERY(Type.JEWELLERY, "Topaz", "T", ItemID.TOPAZ_RING, ItemID.TOPAZ_NECKLACE, ItemID.TOPAZ_BRACELET, ItemID.TOPAZ_AMULET_U, ItemID.TOPAZ_AMULET), + GOLD_JEWELLERY(Type.JEWELLERY, "Gold", "GOL", ItemID.GOLD_RING, ItemID.GOLD_NECKLACE, ItemID.GOLD_BRACELET, ItemID.GOLD_AMULET_U, ItemID.GOLD_AMULET), + SAPPHIRE_JEWELLERY(Type.JEWELLERY, "Sapphir", "S", ItemID.SAPPHIRE_RING, ItemID.SAPPHIRE_NECKLACE, ItemID.SAPPHIRE_BRACELET, ItemID.SAPPHIRE_AMULET_U, ItemID.SAPPHIRE_AMULET), + EMERALD_JEWELLERY(Type.JEWELLERY, "Emerald", "E", ItemID.EMERALD_RING, ItemID.EMERALD_NECKLACE, ItemID.EMERALD_BRACELET, ItemID.EMERALD_AMULET_U, ItemID.EMERALD_AMULET), + RUBY_JEWELLERY(Type.JEWELLERY, "Ruby", "R", ItemID.RUBY_RING, ItemID.RUBY_NECKLACE, ItemID.RUBY_BRACELET, ItemID.RUBY_AMULET_U, ItemID.RUBY_AMULET), + DIAMOND_JEWELLERY(Type.JEWELLERY, "Diamon", "DI", ItemID.DIAMOND_RING, ItemID.DIAMOND_NECKLACE, ItemID.DIAMOND_BRACELET, ItemID.DIAMOND_AMULET_U, ItemID.DIAMOND_AMULET), + DRAGONSTONE_JEWELLERY(Type.JEWELLERY, "Dragon", "DR", ItemID.DRAGONSTONE_RING, ItemID.DRAGON_NECKLACE, ItemID.DRAGONSTONE_BRACELET, ItemID.DRAGONSTONE_AMULET_U, ItemID.DRAGONSTONE_AMULET), + ONYX_JEWELLERY(Type.JEWELLERY, "Onyx", "ON", ItemID.ONYX_RING, ItemID.ONYX_NECKLACE, ItemID.ONYX_BRACELET, ItemID.ONYX_AMULET_U, ItemID.ONYX_AMULET), + ZENYTE_JEWELLERY(Type.JEWELLERY, "Zenyte", "Z", ItemID.ZENYTE_RING, ItemID.ZENYTE_NECKLACE, ItemID.ZENYTE_BRACELET, ItemID.ZENYTE_AMULET_U, ItemID.ZENYTE_AMULET), + + // Enchanted Jewellery + RING_OF_PURSUIT(Type.JEWELLERY_ENCHANTED, "Pursuit", "PUR", ItemID.RING_OF_PURSUIT), + DODGY_NECKLACE(Type.JEWELLERY_ENCHANTED, "Dodgy", "DOD", ItemID.DODGY_NECKLACE), + EXPEDITIOUS_BRACELET(Type.JEWELLERY_ENCHANTED, "Exped", "EXP", ItemID.EXPEDITIOUS_BRACELET), + AMULET_OF_BOUNTY(Type.JEWELLERY_ENCHANTED, "Bounty", "BOU", ItemID.AMULET_OF_BOUNTY), + + RING_OF_RETURNING(Type.JEWELLERY_ENCHANTED, "Return", "RET", ItemID.RING_OF_RETURNING1, ItemID.RING_OF_RETURNING2, ItemID.RING_OF_RETURNING3, ItemID.RING_OF_RETURNING4, ItemID.RING_OF_RETURNING5), + NECKLACE_OF_PASSAGE(Type.JEWELLERY_ENCHANTED, "Passage", "PASS", ItemID.NECKLACE_OF_PASSAGE1, ItemID.NECKLACE_OF_PASSAGE2, ItemID.NECKLACE_OF_PASSAGE3, ItemID.NECKLACE_OF_PASSAGE4, ItemID.NECKLACE_OF_PASSAGE5), + FLAMTAER_BRACELET(Type.JEWELLERY_ENCHANTED, "Flamta", "FLA", ItemID.FLAMTAER_BRACELET), + AMULET_OF_CHEMISTRY(Type.JEWELLERY_ENCHANTED, "Chem", "CH", ItemID.AMULET_OF_CHEMISTRY), + + EFARITAYS_AID(Type.JEWELLERY_ENCHANTED, "Efarit", "EFA", ItemID.EFARITAYS_AID), + NECKLACE_OF_FAITH(Type.JEWELLERY_ENCHANTED, "Faith", "FAI", ItemID.NECKLACE_OF_FAITH), + BRACELET_OF_SLAUGHTER(Type.JEWELLERY_ENCHANTED, "Slaught", "SLA", ItemID.BRACELET_OF_SLAUGHTER), + BURNING_AMULET(Type.JEWELLERY_ENCHANTED, "Burning", "BUR", ItemID.BURNING_AMULET1, ItemID.BURNING_AMULET2, ItemID.BURNING_AMULET3, ItemID.BURNING_AMULET4, ItemID.BURNING_AMULET5), + + RING_OF_RECOIL(Type.JEWELLERY_ENCHANTED, "Recoil", "REC", ItemID.RING_OF_RECOIL), + GAMES_NECKLACE(Type.JEWELLERY_ENCHANTED, "Games", "GAME", ItemID.GAMES_NECKLACE1, ItemID.GAMES_NECKLACE2, ItemID.GAMES_NECKLACE3, ItemID.GAMES_NECKLACE4, ItemID.GAMES_NECKLACE5, ItemID.GAMES_NECKLACE6, ItemID.GAMES_NECKLACE7, ItemID.GAMES_NECKLACE8), + BRACELET_OF_CLAY(Type.JEWELLERY_ENCHANTED, "Clay", "CLA", ItemID.BRACELET_OF_CLAY), + AMULET_OF_MAGIC(Type.JEWELLERY_ENCHANTED, "Magic", "MAG", ItemID.AMULET_OF_MAGIC), + + RING_OF_DUELING(Type.JEWELLERY_ENCHANTED, "Duel", "DU", ItemID.RING_OF_DUELING1, ItemID.RING_OF_DUELING2, ItemID.RING_OF_DUELING3, ItemID.RING_OF_DUELING4, ItemID.RING_OF_DUELING5, ItemID.RING_OF_DUELING6, ItemID.RING_OF_DUELING7, ItemID.RING_OF_DUELING8), + BINDING_NECKLACE(Type.JEWELLERY_ENCHANTED, "Binding", "BIND", ItemID.BINDING_NECKLACE), + CASTLE_WARS_BRACELET(Type.JEWELLERY_ENCHANTED, "Castle", "CAS", ItemID.CASTLE_WARS_BRACELET1, ItemID.CASTLE_WARS_BRACELET2, ItemID.CASTLE_WARS_BRACELET3), + AMULET_OF_DEFENCE(Type.JEWELLERY_ENCHANTED, "Defence", "DEF", ItemID.AMULET_OF_DEFENCE), + AMULET_OF_NATURE(Type.JEWELLERY_ENCHANTED, "Nature", "NAT", ItemID.AMULET_OF_NATURE), + + RING_OF_FORGING(Type.JEWELLERY_ENCHANTED, "Forging", "FOR", ItemID.RING_OF_FORGING), + DIGSITE_PENDANT(Type.JEWELLERY_ENCHANTED, "Digsite", "DIG", ItemID.DIGSITE_PENDANT_1, ItemID.DIGSITE_PENDANT_2, ItemID.DIGSITE_PENDANT_3, ItemID.DIGSITE_PENDANT_4, ItemID.DIGSITE_PENDANT_5), + INOCULATION_BRACELET(Type.JEWELLERY_ENCHANTED, "Inocul", "INO", ItemID.INOCULATION_BRACELET), + AMULET_OF_STRENGTH(Type.JEWELLERY_ENCHANTED, "Strengt", "STR", ItemID.AMULET_OF_STRENGTH), + + RING_OF_LIFE(Type.JEWELLERY_ENCHANTED, "Life", "LI", ItemID.RING_OF_LIFE), + PHOENIX_NECKLACE(Type.JEWELLERY_ENCHANTED, "Phoenix", "PHO", ItemID.PHOENIX_NECKLACE), + ABYSSAL_BRACELET(Type.JEWELLERY_ENCHANTED, "Abyss", "ABY", ItemID.ABYSSAL_BRACELET1, ItemID.ABYSSAL_BRACELET2, ItemID.ABYSSAL_BRACELET3, ItemID.ABYSSAL_BRACELET4, ItemID.ABYSSAL_BRACELET5), + AMULET_OF_POWER(Type.JEWELLERY_ENCHANTED, "Power", "POW", ItemID.AMULET_OF_POWER), + + RING_OF_WEALTH(Type.JEWELLERY_ENCHANTED, "Wealth", "WE", ItemID.RING_OF_WEALTH, ItemID.RING_OF_WEALTH_1, ItemID.RING_OF_WEALTH_2, ItemID.RING_OF_WEALTH_3, ItemID.RING_OF_WEALTH_4, ItemID.RING_OF_WEALTH_5), + SKILLS_NECKLACE(Type.JEWELLERY_ENCHANTED, "Skill", "SK", ItemID.SKILLS_NECKLACE, ItemID.SKILLS_NECKLACE1, ItemID.SKILLS_NECKLACE2, ItemID.SKILLS_NECKLACE3, ItemID.SKILLS_NECKLACE4, ItemID.SKILLS_NECKLACE5, ItemID.SKILLS_NECKLACE6), + COMBAT_BRACELET(Type.JEWELLERY_ENCHANTED, "Combat", "COM", ItemID.COMBAT_BRACELET, ItemID.COMBAT_BRACELET1, ItemID.COMBAT_BRACELET2, ItemID.COMBAT_BRACELET3, ItemID.COMBAT_BRACELET4, ItemID.COMBAT_BRACELET5, ItemID.COMBAT_BRACELET6), + AMULET_OF_GLORY(Type.JEWELLERY_ENCHANTED, "Glory", "GLO", ItemID.AMULET_OF_GLORY, ItemID.AMULET_OF_GLORY1, ItemID.AMULET_OF_GLORY2, ItemID.AMULET_OF_GLORY3, ItemID.AMULET_OF_GLORY4, ItemID.AMULET_OF_GLORY5, ItemID.AMULET_OF_GLORY6, ItemID.AMULET_OF_ETERNAL_GLORY), + + RING_OF_STONE(Type.JEWELLERY_ENCHANTED, "Stone", "STO", ItemID.RING_OF_STONE), + BERSERKER_NECKLACE(Type.JEWELLERY_ENCHANTED, "Berserk", "BER", ItemID.BERSERKER_NECKLACE), + REGEN_BRACELET(Type.JEWELLERY_ENCHANTED, "Regen", "REG", ItemID.REGEN_BRACELET), + AMULET_OF_FURY(Type.JEWELLERY_ENCHANTED, "Fury", "FU", ItemID.AMULET_OF_FURY), + + RING_OF_SUFFERING(Type.JEWELLERY_ENCHANTED, "Suffer", "SUF", ItemID.RING_OF_SUFFERING), + NECKLACE_OF_ANGUISH(Type.JEWELLERY_ENCHANTED, "Anguish", "ANG", ItemID.NECKLACE_OF_ANGUISH), + TORMENTED_BRACELET(Type.JEWELLERY_ENCHANTED, "Torment", "TOR", ItemID.TORMENTED_BRACELET), + AMULET_OF_TORTURE(Type.JEWELLERY_ENCHANTED, "Torture", "TOR", ItemID.AMULET_OF_TORTURE), + + OCCULT_NECKLACE(Type.JEWELLERY_ENCHANTED, "Occult", "OCC", ItemID.OCCULT_NECKLACE), + DRAGONBONE_NECKLACE(Type.JEWELLERY_ENCHANTED, "Dragon", "DRA", ItemID.DRAGONBONE_NECKLACE), + SLAYER_RING(Type.JEWELLERY_ENCHANTED, "Slayer", "SLA", ItemID.SLAYER_RING_1, ItemID.SLAYER_RING_2, ItemID.SLAYER_RING_3, ItemID.SLAYER_RING_4, ItemID.SLAYER_RING_5, ItemID.SLAYER_RING_6, ItemID.SLAYER_RING_7, ItemID.SLAYER_RING_8, ItemID.SLAYER_RING_ETERNAL); final Type type; final String medName; @@ -488,7 +557,9 @@ enum ItemIdentification POTION(ItemIdentificationConfig::showPotions), IMPLING_JAR(ItemIdentificationConfig::showImplingJars), TABLET(ItemIdentificationConfig::showTablets), - SCROLL(ItemIdentificationConfig::showTeleportScrolls); + SCROLL(ItemIdentificationConfig::showTeleportScrolls), + JEWELLERY(ItemIdentificationConfig::showJewellery), + JEWELLERY_ENCHANTED(ItemIdentificationConfig::showEnchantedJewellery); final Predicate enabled; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentificationConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentificationConfig.java index 0c2f2e5f02..c2b49becb7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentificationConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentificationConfig.java @@ -303,4 +303,26 @@ public interface ItemIdentificationConfig extends Config { return false; } + + @ConfigItem( + keyName = "showJewellery", + name = "Jewellery (Unenchanted)", + description = "Show identification on unenchanted jewellery", + section = identificationSection + ) + default boolean showJewellery() + { + return false; + } + + @ConfigItem( + keyName = "showEnchantedJewellery", + name = "Jewellery (Enchanted)", + description = "Show identification on enchanted jewellery", + section = identificationSection + ) + default boolean showEnchantedJewellery() + { + return false; + } }