From 708970f375e836bc991a46532bab58a26e5abe8e Mon Sep 17 00:00:00 2001 From: Broooklyn <54762282+Broooklyn@users.noreply.github.com> Date: Wed, 10 Jun 2020 14:42:27 -0400 Subject: [PATCH 01/31] poh: Fix Altar of the Occult ID The null object is used because the occult altar is a multiloc. Its state changes in relation to which spellbook you currently have active. --- .../src/main/java/net/runelite/client/plugins/poh/PohIcons.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/poh/PohIcons.java b/runelite-client/src/main/java/net/runelite/client/plugins/poh/PohIcons.java index cd47e2e894..84f265f0c2 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/poh/PohIcons.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/poh/PohIcons.java @@ -73,7 +73,7 @@ public enum PohIcons POOLS("pool", POOL_OF_RESTORATION, POOL_OF_REVITALISATION, POOL_OF_REJUVENATION, FANCY_REJUVENATION_POOL, ORNATE_REJUVENATION_POOL), GLORY("glory", AMULET_OF_GLORY), REPAIR("repair", ARMOUR_REPAIR_STAND), - SPELLBOOKALTAR("spellbook", ANCIENT_ALTAR, LUNAR_ALTAR, DARK_ALTAR, ALTAR_OF_THE_OCCULT), + SPELLBOOKALTAR("spellbook", ANCIENT_ALTAR, LUNAR_ALTAR, DARK_ALTAR, NULL_29150), JEWELLERYBOX("jewellery", NULL_29154, NULL_29155, NULL_29156), MAGICTRAVEL("transportation", SPIRIT_TREE_29227, NULL_29228, NULL_29229, OBELISK_31554), PORTALNEXUS("portalnexus", From ba7f6de4458833bfcf580d74dc728124e132806d Mon Sep 17 00:00:00 2001 From: PresNL Date: Sun, 14 Jun 2020 09:58:23 +0200 Subject: [PATCH 02/31] slayer: Parse task information from gem activate chat (#11866) --- .../client/plugins/slayer/SlayerPlugin.java | 2 +- .../plugins/slayer/SlayerPluginTest.java | 70 +++++++++++++++++++ 2 files changed, 71 insertions(+), 1 deletion(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java index 89ad7d1473..c8c02a8bf3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java @@ -111,7 +111,7 @@ public class SlayerPlugin extends Plugin private static final Pattern NPC_ASSIGN_MESSAGE = Pattern.compile(".*(?:Your new task is to kill|You are to bring balance to)\\s*(?\\d+) (?.+?)(?: (?:in|on|south of) (?:the )?(?.+))?\\."); private static final Pattern NPC_ASSIGN_BOSS_MESSAGE = Pattern.compile("^(?:Excellent\\. )?You're now assigned to (?:kill|bring balance to) (?:the )?(.*) (\\d+) times.*Your reward point tally is (.*)\\.$"); private static final Pattern NPC_ASSIGN_FIRST_MESSAGE = Pattern.compile("^We'll start you off (?:hunting|bringing balance to) (.*), you'll need to kill (\\d*) of them\\.$"); - private static final Pattern NPC_CURRENT_MESSAGE = Pattern.compile("^You're still (?:hunting|bringing balance to) (?.+)(?: (?:in|on|south of) (?:the )?(?.+), with|; you have) (?\\d+) to go\\..*"); + private static final Pattern NPC_CURRENT_MESSAGE = Pattern.compile("^You're (?:still(?: meant to be)?|currently assigned to) (?:hunting|bringing balance to|kill|bring balance to|slaying) (?.+?)(?: (?:in|on|south of) (?:the )?(?.+))?(?:, with|; (?:you have|only)) (?\\d+)(?: more)? to go\\..*"); //Reward UI private static final Pattern REWARD_POINTS = Pattern.compile("Reward points: ((?:\\d+,)*\\d+)"); diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/slayer/SlayerPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/slayer/SlayerPluginTest.java index f5dc666aca..1c0bbb67f9 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/slayer/SlayerPluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/slayer/SlayerPluginTest.java @@ -86,6 +86,12 @@ public class SlayerPluginTest private static final String TASK_KONAR_BOSS = "You're now assigned to bring balance to the Alchemical
Hydra 35 times. Your reward point tally is 724."; private static final String TASK_EXISTING = "You're still hunting suqahs; you have 222 to go. Come
back when you've finished your task."; + private static final String TASK_EXISTING_KONAR = "You're still bringing balance to adamant dragons in the Lithkren Vault, with 3 to go. Come back when you're finished."; + private static final String TASK_EXISTING_WILDERNESS = "You're still meant to be slaying bandits in the Wilderness; you have 99 to go. Come back when you've finished your task."; + + private static final String TASK_ACTIVATESLAYERGEM = "You're currently assigned to kill fossil island wyverns; only 23 more to go. Your reward point tally is 46."; + private static final String TASK_ACTIVATESLAYERGEM_KONAR = "You're currently assigned to bring balance to adamant dragons in the Lithkren Vault; you have 3 more to go. Your reward point tally is 16."; + private static final String TASK_ACTIVATESLAYERGEM_WILDERNESS = "You're currently assigned to kill bandits in the Wilderness; only 99 more to go. Your reward point tally is 34."; private static final String REWARD_POINTS = "Reward points: 17,566"; @@ -348,6 +354,70 @@ public class SlayerPluginTest assertEquals(222, slayerPlugin.getAmount()); } + @Test + public void testExistingTaskKonar() + { + Widget npcDialog = mock(Widget.class); + when(npcDialog.getText()).thenReturn(TASK_EXISTING_KONAR); + when(client.getWidget(WidgetInfo.DIALOG_NPC_TEXT)).thenReturn(npcDialog); + slayerPlugin.onGameTick(new GameTick()); + + assertEquals("adamant dragons", slayerPlugin.getTaskName()); + assertEquals(3, slayerPlugin.getAmount()); + assertEquals("Lithkren Vault", slayerPlugin.getTaskLocation()); + } + + @Test + public void testExistingTaskWilderness() + { + Widget npcDialog = mock(Widget.class); + when(npcDialog.getText()).thenReturn(TASK_EXISTING_WILDERNESS); + when(client.getWidget(WidgetInfo.DIALOG_NPC_TEXT)).thenReturn(npcDialog); + slayerPlugin.onGameTick(new GameTick()); + + assertEquals("bandits", slayerPlugin.getTaskName()); + assertEquals(99, slayerPlugin.getAmount()); + assertEquals("Wilderness", slayerPlugin.getTaskLocation()); + } + + @Test + public void testSlayergemActivate() + { + Widget npcDialog = mock(Widget.class); + when(npcDialog.getText()).thenReturn(TASK_ACTIVATESLAYERGEM); + when(client.getWidget(WidgetInfo.DIALOG_NPC_TEXT)).thenReturn(npcDialog); + slayerPlugin.onGameTick(new GameTick()); + + assertEquals("fossil island wyverns", slayerPlugin.getTaskName()); + assertEquals(23, slayerPlugin.getAmount()); + } + + @Test + public void testSlayergemActivateKonar() + { + Widget npcDialog = mock(Widget.class); + when(npcDialog.getText()).thenReturn(TASK_ACTIVATESLAYERGEM_KONAR); + when(client.getWidget(WidgetInfo.DIALOG_NPC_TEXT)).thenReturn(npcDialog); + slayerPlugin.onGameTick(new GameTick()); + + assertEquals("adamant dragons", slayerPlugin.getTaskName()); + assertEquals(3, slayerPlugin.getAmount()); + assertEquals("Lithkren Vault", slayerPlugin.getTaskLocation()); + } + + @Test + public void testSlayergemActivateWilderness() + { + Widget npcDialog = mock(Widget.class); + when(npcDialog.getText()).thenReturn(TASK_ACTIVATESLAYERGEM_WILDERNESS); + when(client.getWidget(WidgetInfo.DIALOG_NPC_TEXT)).thenReturn(npcDialog); + slayerPlugin.onGameTick(new GameTick()); + + assertEquals("bandits", slayerPlugin.getTaskName()); + assertEquals(99, slayerPlugin.getAmount()); + assertEquals("Wilderness", slayerPlugin.getTaskLocation()); + } + @Test public void testRewardPointsWidget() { From cdc1a057081a823237f019639486b368c8bbc58e Mon Sep 17 00:00:00 2001 From: melkypie <5113962+melkypie@users.noreply.github.com> Date: Fri, 29 May 2020 18:22:17 +0300 Subject: [PATCH 03/31] client: fix infernal eel, karambwan and karambwanji fishing spot enum world map tooltips --- .../src/main/java/net/runelite/client/game/FishingSpot.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/game/FishingSpot.java b/runelite-client/src/main/java/net/runelite/client/game/FishingSpot.java index 0a6437efb9..14d7b96316 100644 --- a/runelite-client/src/main/java/net/runelite/client/game/FishingSpot.java +++ b/runelite-client/src/main/java/net/runelite/client/game/FishingSpot.java @@ -171,13 +171,13 @@ public enum FishingSpot MINNOW("Minnow", ItemID.MINNOW, FISHING_SPOT_7730, FISHING_SPOT_7731, FISHING_SPOT_7732, FISHING_SPOT_7733 ), - INFERNAL_EEL("Infernal Eel", "Leaping sturgeon", ItemID.INFERNAL_EEL, + INFERNAL_EEL("Infernal Eel", ItemID.INFERNAL_EEL, ROD_FISHING_SPOT_7676 ), - KARAMBWAN("Karambwan", "Karambwanji", ItemID.RAW_KARAMBWAN, + KARAMBWAN("Karambwan", ItemID.RAW_KARAMBWAN, FISHING_SPOT_4712, FISHING_SPOT_4713 ), - KARAMBWANJI("Karambwanji, Shrimp", ItemID.KARAMBWANJI, + KARAMBWANJI("Karambwanji, Shrimp", "Karambwanji", ItemID.KARAMBWANJI, FISHING_SPOT_4710 ), SACRED_EEL("Sacred eel", ItemID.SACRED_EEL, From 30ccc14711a93bdf6aafb45a677d12586a210541 Mon Sep 17 00:00:00 2001 From: melkypie <5113962+melkypie@users.noreply.github.com> Date: Fri, 29 May 2020 18:23:28 +0300 Subject: [PATCH 04/31] worldmap: fix spelling mistake in mor ul rek --- .../runelite/client/plugins/worldmap/FishingSpotLocation.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/FishingSpotLocation.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/FishingSpotLocation.java index f789d7e7c3..3180ca0973 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/FishingSpotLocation.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/FishingSpotLocation.java @@ -114,7 +114,7 @@ enum FishingSpotLocation new WorldPoint(3480, 3433, 0), new WorldPoint(3485, 3448, 0)), MORT_MYRE_SWAMP_WEST(FishingSpot.SLIMY_EEL, new WorldPoint(3425, 3409, 0), new WorldPoint(3432, 3415, 0)), - MOR_UI_REK(FishingSpot.INFERNAL_EEL, + MOR_UL_REK(FishingSpot.INFERNAL_EEL, new WorldPoint(2443, 5104, 0), new WorldPoint(2476, 5077, 0), new WorldPoint(2537, 5086, 0)), MOUNT_QUIDAMORTEM(FishingSpot.BARB_FISH, From 735d7eba372c97de5604d7a01987de168fa6f9c4 Mon Sep 17 00:00:00 2001 From: Steven Goodman Date: Fri, 29 May 2020 21:37:05 -0700 Subject: [PATCH 05/31] chatfilter: fix formatted messages not being collapsed --- .../plugins/chatfilter/ChatFilterPlugin.java | 7 ++-- .../chatfilter/ChatFilterPluginTest.java | 40 +++++++++++++++---- 2 files changed, 36 insertions(+), 11 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterPlugin.java index 607d50d3f9..0944073594 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterPlugin.java @@ -237,13 +237,14 @@ public class ChatFilterPlugin extends Plugin event.getActor().setOverheadText(message); } - @Subscribe + @Subscribe(priority = -2) // run after ChatMessageManager public void onChatMessage(ChatMessage chatMessage) { if (COLLAPSIBLE_MESSAGETYPES.contains(chatMessage.getType())) { + final MessageNode messageNode = chatMessage.getMessageNode(); // remove and re-insert into map to move to end of list - final String key = chatMessage.getName() + ":" + chatMessage.getMessage(); + final String key = messageNode.getName() + ":" + messageNode.getValue(); Duplicate duplicate = duplicateChatCache.remove(key); if (duplicate == null) { @@ -251,7 +252,7 @@ public class ChatFilterPlugin extends Plugin } duplicate.count++; - duplicate.messageId = chatMessage.getMessageNode().getId(); + duplicate.messageId = messageNode.getId(); duplicateChatCache.put(key, duplicate); } } diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/chatfilter/ChatFilterPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/chatfilter/ChatFilterPluginTest.java index de4c104e3d..cbfe2f3110 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/chatfilter/ChatFilterPluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/chatfilter/ChatFilterPluginTest.java @@ -116,6 +116,15 @@ public class ChatFilterPluginTest return node; } + private MessageNode mockMessageNode(int id, String sender, String value) + { + MessageNode node = mock(MessageNode.class); + when(node.getId()).thenReturn(id); + when(node.getName()).thenReturn(sender); + when(node.getValue()).thenReturn(value); + return node; + } + @Test public void testCensorWords() { @@ -335,7 +344,7 @@ public class ChatFilterPluginTest public void testDuplicateChatFiltered() { when(chatFilterConfig.collapseGameChat()).thenReturn(true); - chatFilterPlugin.onChatMessage(new ChatMessage(mockMessageNode(0), ChatMessageType.GAMEMESSAGE, null, "testMessage", null, 0)); + chatFilterPlugin.onChatMessage(new ChatMessage(mockMessageNode(0, null, "testMessage"), ChatMessageType.GAMEMESSAGE, null, null, null, 0)); ScriptCallbackEvent event = createCallbackEvent(null, "testMessage", ChatMessageType.GAMEMESSAGE); chatFilterPlugin.onScriptCallbackEvent(event); @@ -358,10 +367,10 @@ public class ChatFilterPluginTest public void testDuplicateChatCount() { when(chatFilterConfig.collapseGameChat()).thenReturn(true); - chatFilterPlugin.onChatMessage(new ChatMessage(mockMessageNode(4), ChatMessageType.GAMEMESSAGE, null, "testMessage", null, 0)); - chatFilterPlugin.onChatMessage(new ChatMessage(mockMessageNode(3), ChatMessageType.GAMEMESSAGE, null, "testMessage", null, 0)); - chatFilterPlugin.onChatMessage(new ChatMessage(mockMessageNode(2), ChatMessageType.GAMEMESSAGE, null, "testMessage", null, 0)); - chatFilterPlugin.onChatMessage(new ChatMessage(mockMessageNode(1), ChatMessageType.GAMEMESSAGE, null, "testMessage", null, 0)); + chatFilterPlugin.onChatMessage(new ChatMessage(mockMessageNode(4, null, "testMessage"), ChatMessageType.GAMEMESSAGE, null, null, null, 0)); + chatFilterPlugin.onChatMessage(new ChatMessage(mockMessageNode(3, null, "testMessage"), ChatMessageType.GAMEMESSAGE, null, null, null, 0)); + chatFilterPlugin.onChatMessage(new ChatMessage(mockMessageNode(2, null, "testMessage"), ChatMessageType.GAMEMESSAGE, null, null, null, 0)); + chatFilterPlugin.onChatMessage(new ChatMessage(mockMessageNode(1, null, "testMessage"), ChatMessageType.GAMEMESSAGE, null, null, null, 0)); ScriptCallbackEvent event = createCallbackEvent(null, "testMessage", ChatMessageType.GAMEMESSAGE); chatFilterPlugin.onScriptCallbackEvent(event); @@ -374,12 +383,27 @@ public class ChatFilterPluginTest { when(chatFilterConfig.collapsePlayerChat()).thenReturn(true); when(chatFilterConfig.maxRepeatedPublicChats()).thenReturn(2); - chatFilterPlugin.onChatMessage(new ChatMessage(mockMessageNode(1), ChatMessageType.PUBLICCHAT, "testName", "testMessage", null, 0)); - chatFilterPlugin.onChatMessage(new ChatMessage(mockMessageNode(1), ChatMessageType.PUBLICCHAT, "testName", "testMessage", null, 0)); - chatFilterPlugin.onChatMessage(new ChatMessage(mockMessageNode(1), ChatMessageType.PUBLICCHAT, "testName", "testMessage", null, 0)); + chatFilterPlugin.onChatMessage(new ChatMessage(mockMessageNode(1, "testName", "testMessage"), ChatMessageType.PUBLICCHAT, null, null, null, 0)); + chatFilterPlugin.onChatMessage(new ChatMessage(mockMessageNode(1, "testName", "testMessage"), ChatMessageType.PUBLICCHAT, null, null, null, 0)); + chatFilterPlugin.onChatMessage(new ChatMessage(mockMessageNode(1, "testName", "testMessage"), ChatMessageType.PUBLICCHAT, null, null, null, 0)); ScriptCallbackEvent event = createCallbackEvent("testName", "testMessage", ChatMessageType.PUBLICCHAT); chatFilterPlugin.onScriptCallbackEvent(event); assertEquals(0, client.getIntStack()[client.getIntStackSize() - 3]); } + + @Test + public void testDuplicateChatFilterIgnoresFormatting() + { + when(chatFilterConfig.collapseGameChat()).thenReturn(true); + chatFilterPlugin.onChatMessage(new ChatMessage(mockMessageNode(4, null, "testMessage"), ChatMessageType.GAMEMESSAGE, null, null, null, 0)); + chatFilterPlugin.onChatMessage(new ChatMessage(mockMessageNode(3, null, "testMessage"), ChatMessageType.GAMEMESSAGE, null, null, null, 0)); + chatFilterPlugin.onChatMessage(new ChatMessage(mockMessageNode(2, null, "testMessage"), ChatMessageType.GAMEMESSAGE, null, null, null, 0)); + chatFilterPlugin.onChatMessage(new ChatMessage(mockMessageNode(1, null, "testMessage"), ChatMessageType.GAMEMESSAGE, null, null, null, 0)); + ScriptCallbackEvent event = createCallbackEvent(null, "testMessage", ChatMessageType.GAMEMESSAGE); + chatFilterPlugin.onScriptCallbackEvent(event); + + assertEquals(1, client.getIntStack()[client.getIntStackSize() - 3]); + assertEquals("testMessage (4)", client.getStringStack()[client.getStringStackSize() - 1]); + } } \ No newline at end of file From aa0b9fb3418f9bd963fa71d0d7bac87f488f97d5 Mon Sep 17 00:00:00 2001 From: plondrein Date: Sat, 30 May 2020 15:48:52 +0200 Subject: [PATCH 06/31] slayer: Highlight baby dragons on task --- .../java/net/runelite/client/plugins/slayer/Task.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/Task.java b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/Task.java index bb4fbcb7cf..6be7c6d454 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/Task.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/Task.java @@ -54,9 +54,9 @@ enum Task LAVA_DRAGONS("Lava Dragons", ItemID.LAVA_SCALE, "Lava dragon"), BIRDS("Birds", ItemID.FEATHER, "Chicken", "Rooster", "Terrorbird", "Seagull"), BLACK_DEMONS("Black demons", ItemID.BLACK_DEMON_MASK), - BLACK_DRAGONS("Black dragons", ItemID.BLACK_DRAGON_MASK), + BLACK_DRAGONS("Black dragons", ItemID.BLACK_DRAGON_MASK, "Baby black dragon"), BLOODVELD("Bloodveld", ItemID.BLOODVELD), - BLUE_DRAGONS("Blue dragons", ItemID.BLUE_DRAGON_MASK), + BLUE_DRAGONS("Blue dragons", ItemID.BLUE_DRAGON_MASK, "Baby blue dragon"), BRINE_RATS("Brine rats", ItemID.BRINE_RAT), BRONZE_DRAGONS("Bronze dragons", ItemID.BRONZE_DRAGON_MASK), CALLISTO("Callisto", ItemID.CALLISTO_CUB), @@ -97,7 +97,7 @@ enum Task GHOULS("Ghouls", ItemID.ZOMBIE_HEAD), GOBLINS("Goblins", ItemID.ENSOULED_GOBLIN_HEAD), GREATER_DEMONS("Greater demons", ItemID.GREATER_DEMON_MASK), - GREEN_DRAGONS("Green dragons", ItemID.GREEN_DRAGON_MASK), + GREEN_DRAGONS("Green dragons", ItemID.GREEN_DRAGON_MASK, "Baby green dragon"), GROTESQUE_GUARDIANS("Grotesque Guardians", ItemID.MIDNIGHT, 0, ItemID.ROCK_HAMMER, "Dusk", "Dawn"), HARPIE_BUG_SWARMS("Harpie bug swarms", ItemID.SWARM), HELLHOUNDS("Hellhounds", ItemID.HELLHOUND), @@ -138,7 +138,7 @@ enum Task OTHERWORLDLY_BEING("Otherworldly beings", ItemID.GHOSTLY_HOOD), PYREFIENDS("Pyrefiends", ItemID.PYREFIEND, "Flaming pyrelord"), RATS("Rats", ItemID.RATS_TAIL), - RED_DRAGONS("Red dragons", ItemID.BABY_RED_DRAGON), + RED_DRAGONS("Red dragons", ItemID.BABY_RED_DRAGON, "Baby red dragon"), ROCKSLUGS("Rockslugs", ItemID.ROCKSLUG, 4, ItemID.BAG_OF_SALT), RUNE_DRAGONS("Rune dragons", ItemID.RUNE_DRAGON_MASK), SCORPIA("Scorpia", ItemID.SCORPIAS_OFFSPRING), From fba6d7fcf63cd0e29fe5e84f6937918321158285 Mon Sep 17 00:00:00 2001 From: leejt Date: Sun, 14 Jun 2020 18:04:37 -0700 Subject: [PATCH 07/31] LootTracker: track ground items in addition to inventory --- .../net/runelite/client/game/LootManager.java | 22 +++++++++++++++++++ .../loottracker/LootTrackerPlugin.java | 16 +++++++++++--- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/game/LootManager.java b/runelite-client/src/main/java/net/runelite/client/game/LootManager.java index ddd8157502..e44c5d7572 100644 --- a/runelite-client/src/main/java/net/runelite/client/game/LootManager.java +++ b/runelite-client/src/main/java/net/runelite/client/game/LootManager.java @@ -29,6 +29,7 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.ListMultimap; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Map; @@ -403,4 +404,25 @@ public class LootManager return new WorldPoint(x, y, worldLocation.getPlane()); } + + /** + * Get the list of items present at the provided WorldPoint that spawned this tick. + * + * @param worldPoint the location in question + * @return the list of item stacks + */ + public Collection getItemSpawns(WorldPoint worldPoint) + { + LocalPoint localPoint = LocalPoint.fromWorld(client, worldPoint); + if (localPoint == null) + { + return Collections.emptyList(); + } + + final int sceneX = localPoint.getSceneX(); + final int sceneY = localPoint.getSceneY(); + final int packed = sceneX << 8 | sceneY; + final List itemStacks = itemSpawns.get(packed); + return Collections.unmodifiableList(itemStacks); + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java index 9fd849ac61..811a165e78 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java @@ -96,6 +96,7 @@ import net.runelite.client.events.SessionClose; import net.runelite.client.events.SessionOpen; import net.runelite.client.game.ItemManager; import net.runelite.client.game.ItemStack; +import net.runelite.client.game.LootManager; import net.runelite.client.game.SpriteManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -199,6 +200,9 @@ public class LootTrackerPlugin extends Plugin @Inject private ChatMessageManager chatMessageManager; + @Inject + private LootManager lootManager; + private LootTrackerPanel panel; private NavigationButton navButton; @VisibleForTesting @@ -635,7 +639,10 @@ public class LootTrackerPlugin extends Plugin || SEEDPACK_EVENT.equals(eventType) || lootRecordType == LootRecordType.PICKPOCKET) { - processInventoryLoot(eventType, lootRecordType, event.getItemContainer()); + WorldPoint playerLocation = client.getLocalPlayer().getWorldLocation(); + Collection groundItems = lootManager.getItemSpawns(playerLocation); + + processInventoryLoot(eventType, lootRecordType, event.getItemContainer(), groundItems); eventType = null; lootRecordType = null; } @@ -702,11 +709,11 @@ public class LootTrackerPlugin extends Plugin { inventorySnapshot = HashMultiset.create(); Arrays.stream(itemContainer.getItems()) - .forEach(item -> inventorySnapshot.add(item.getId(), item.getQuantity())); + .forEach(item -> inventorySnapshot.add(item.getId(), item.getQuantity())); } } - private void processInventoryLoot(String event, LootRecordType lootRecordType, ItemContainer inventoryContainer) + private void processInventoryLoot(String event, LootRecordType lootRecordType, ItemContainer inventoryContainer, Collection groundItems) { if (inventorySnapshot != null) { @@ -714,6 +721,9 @@ public class LootTrackerPlugin extends Plugin Arrays.stream(inventoryContainer.getItems()) .forEach(item -> currentInventory.add(item.getId(), item.getQuantity())); + groundItems.stream() + .forEach(item -> currentInventory.add(item.getId(), item.getQuantity())); + final Multiset diff = Multisets.difference(currentInventory, inventorySnapshot); List items = diff.entrySet().stream() From 88e3845d97eb2b099ecb5eca87838f8cde396c43 Mon Sep 17 00:00:00 2001 From: leejt Date: Sun, 14 Jun 2020 18:04:55 -0700 Subject: [PATCH 08/31] LootTracker: track shade chest loot --- .../loottracker/LootTrackerPlugin.java | 53 ++++++++++++++++--- 1 file changed, 47 insertions(+), 6 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java index 811a165e78..c2dd8508cf 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java @@ -69,6 +69,7 @@ import net.runelite.api.ItemContainer; import net.runelite.api.ItemID; import net.runelite.api.MessageNode; import net.runelite.api.NPC; +import net.runelite.api.ObjectID; import net.runelite.api.Player; import net.runelite.api.SpriteID; import net.runelite.api.coords.WorldPoint; @@ -153,6 +154,31 @@ public class LootTrackerPlugin extends Plugin put(13151, "Elven Crystal Chest"). build(); + // Shade chest loot handling + private static final Pattern SHADE_CHEST_NO_KEY_PATTERN = Pattern.compile("You need a [a-z]+ key with a [a-z]+ trim to open this chest .*"); + private static final Map SHADE_CHEST_OBJECTS = new ImmutableMap.Builder(). + put(ObjectID.BRONZE_CHEST, "Bronze key red"). + put(ObjectID.BRONZE_CHEST_4112, "Bronze key brown"). + put(ObjectID.BRONZE_CHEST_4113, "Bronze key crimson"). + put(ObjectID.BRONZE_CHEST_4114, "Bronze key black"). + put(ObjectID.BRONZE_CHEST_4115, "Bronze key purple"). + put(ObjectID.STEEL_CHEST, "Steel key red"). + put(ObjectID.STEEL_CHEST_4117, "Steel key brown"). + put(ObjectID.STEEL_CHEST_4118, "Steel key crimson"). + put(ObjectID.STEEL_CHEST_4119, "Steel key black"). + put(ObjectID.STEEL_CHEST_4120, "Steel key purple"). + put(ObjectID.BLACK_CHEST, "Black key red"). + put(ObjectID.BLACK_CHEST_4122, "Black key brown"). + put(ObjectID.BLACK_CHEST_4123, "Black key crimson"). + put(ObjectID.BLACK_CHEST_4124, "Black key black"). + put(ObjectID.BLACK_CHEST_4125, "Black key purple"). + put(ObjectID.SILVER_CHEST, "Silver key red"). + put(ObjectID.SILVER_CHEST_4127, "Silver key brown"). + put(ObjectID.SILVER_CHEST_4128, "Silver key crimson"). + put(ObjectID.SILVER_CHEST_4129, "Silver key black"). + put(ObjectID.SILVER_CHEST_4130, "Silver key purple"). + build(); + // Last man standing map regions private static final Set LAST_MAN_STANDING_REGIONS = ImmutableSet.of(13658, 13659, 13914, 13915, 13916); @@ -600,29 +626,36 @@ public class LootTrackerPlugin extends Plugin case "beginner": eventType = "Clue Scroll (Beginner)"; lootRecordType = LootRecordType.EVENT; - break; + return; case "easy": eventType = "Clue Scroll (Easy)"; lootRecordType = LootRecordType.EVENT; - break; + return; case "medium": eventType = "Clue Scroll (Medium)"; lootRecordType = LootRecordType.EVENT; - break; + return; case "hard": eventType = "Clue Scroll (Hard)"; lootRecordType = LootRecordType.EVENT; - break; + return; case "elite": eventType = "Clue Scroll (Elite)"; lootRecordType = LootRecordType.EVENT; - break; + return; case "master": eventType = "Clue Scroll (Master)"; lootRecordType = LootRecordType.EVENT; - break; + return; } } + + if (SHADE_CHEST_NO_KEY_PATTERN.matcher(message).matches()) + { + // Player didn't have the key they needed. + eventType = null; + lootRecordType = null; + } } @Subscribe @@ -634,6 +667,7 @@ public class LootTrackerPlugin extends Plugin } if (CHEST_EVENT_TYPES.containsValue(eventType) + || SHADE_CHEST_OBJECTS.containsValue(eventType) || HERBIBOAR_EVENT.equals(eventType) || HESPORI_EVENT.equals(eventType) || SEEDPACK_EVENT.equals(eventType) @@ -664,6 +698,13 @@ public class LootTrackerPlugin extends Plugin lootRecordType = LootRecordType.EVENT; takeInventorySnapshot(); } + + if (event.getMenuOption().equals("Open") && SHADE_CHEST_OBJECTS.containsKey(event.getId())) + { + eventType = SHADE_CHEST_OBJECTS.get(event.getId()); + lootRecordType = LootRecordType.EVENT; + takeInventorySnapshot(); + } } @Schedule( From bed1bfcd79922bb01a475975b52b91a96a9acfea Mon Sep 17 00:00:00 2001 From: Bart Peeters Date: Mon, 15 Jun 2020 00:24:23 -0700 Subject: [PATCH 09/31] driftnet: Hightlight Annette when no nets in inventory --- .../plugins/driftnet/DriftNetConfig.java | 22 +++++++++++ .../plugins/driftnet/DriftNetOverlay.java | 14 +++++++ .../plugins/driftnet/DriftNetPlugin.java | 37 +++++++++++++++++++ 3 files changed, 73 insertions(+) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/driftnet/DriftNetConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/driftnet/DriftNetConfig.java index e5f9756de8..4826768790 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/driftnet/DriftNetConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/driftnet/DriftNetConfig.java @@ -94,4 +94,26 @@ public interface DriftNetConfig extends Config { return Color.CYAN; } + + @ConfigItem( + keyName = "tagAnnette", + name = "Tag Annette when no nets in inventory", + description = "Tag Annette when no nets in inventory", + position = 6 + ) + default boolean tagAnnetteWhenNoNets() + { + return true; + } + + @ConfigItem( + keyName = "annetteTagColor", + name = "Annette tag color", + description = "Color of Annette tag", + position = 7 + ) + default Color annetteTagColor() + { + return Color.RED; + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/driftnet/DriftNetOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/driftnet/DriftNetOverlay.java index d01c88344c..1ff9e117f8 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/driftnet/DriftNetOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/driftnet/DriftNetOverlay.java @@ -28,6 +28,7 @@ import java.awt.Dimension; import java.awt.Graphics2D; import java.awt.Shape; import javax.inject.Inject; +import net.runelite.api.GameObject; import net.runelite.api.NPC; import net.runelite.api.Point; import net.runelite.client.ui.overlay.Overlay; @@ -67,6 +68,10 @@ class DriftNetOverlay extends Overlay { renderNets(graphics); } + if (config.tagAnnetteWhenNoNets()) + { + renderAnnette(graphics); + } return null; } @@ -101,4 +106,13 @@ class DriftNetOverlay extends Overlay } } } + + private void renderAnnette(Graphics2D graphics) + { + GameObject annette = plugin.getAnnette(); + if (annette != null && !plugin.isDriftNetsInInventory()) + { + OverlayUtil.renderPolygon(graphics, annette.getConvexHull(), config.annetteTagColor()); + } + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/driftnet/DriftNetPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/driftnet/DriftNetPlugin.java index 8dd6ff16b9..30449ad516 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/driftnet/DriftNetPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/driftnet/DriftNetPlugin.java @@ -39,9 +39,13 @@ import net.runelite.api.ChatMessageType; import net.runelite.api.Client; import net.runelite.api.GameObject; import net.runelite.api.GameState; +import net.runelite.api.InventoryID; +import net.runelite.api.ItemContainer; +import net.runelite.api.ItemID; import net.runelite.api.NPC; import net.runelite.api.NpcID; import net.runelite.api.NullObjectID; +import net.runelite.api.ObjectID; import net.runelite.api.Player; import net.runelite.api.Varbits; import net.runelite.api.coords.WorldPoint; @@ -51,6 +55,7 @@ import net.runelite.api.events.GameObjectSpawned; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameTick; import net.runelite.api.events.InteractingChanged; +import net.runelite.api.events.ItemContainerChanged; import net.runelite.api.events.NpcDespawned; import net.runelite.api.events.NpcSpawned; import net.runelite.api.events.VarbitChanged; @@ -101,6 +106,12 @@ public class DriftNetPlugin extends Plugin private boolean inDriftNetArea; private boolean armInteraction; + @Getter + private boolean driftNetsInInventory; + + @Getter + private GameObject annette; + @Provides DriftNetConfig provideConfig(ConfigManager configManager) { @@ -132,6 +143,10 @@ public class DriftNetPlugin extends Plugin @Subscribe public void onGameStateChanged(GameStateChanged event) { + if (event.getGameState() != GameState.LOGGED_IN) + { + annette = null; + } switch (event.getGameState()) { case LOGIN_SCREEN: @@ -262,6 +277,11 @@ public class DriftNetPlugin extends Plugin public void onGameObjectSpawned(GameObjectSpawned event) { GameObject object = event.getGameObject(); + if (object.getId() == ObjectID.ANNETTE) + { + annette = object; + } + for (DriftNet net : NETS) { if (net.getObjectId() == object.getId()) @@ -275,6 +295,11 @@ public class DriftNetPlugin extends Plugin public void onGameObjectDespawned(GameObjectDespawned event) { GameObject object = event.getGameObject(); + if (object == annette) + { + annette = null; + } + for (DriftNet net : NETS) { if (net.getObjectId() == object.getId()) @@ -284,6 +309,18 @@ public class DriftNetPlugin extends Plugin } } + @Subscribe + public void onItemContainerChanged(final ItemContainerChanged event) + { + final ItemContainer itemContainer = event.getItemContainer(); + if (itemContainer != client.getItemContainer(InventoryID.INVENTORY)) + { + return; + } + + driftNetsInInventory = itemContainer.contains(ItemID.DRIFT_NET); + } + private boolean checkArea() { final Player localPlayer = client.getLocalPlayer(); From f975e0415d2b70e6843d57d010d6398f5aece409 Mon Sep 17 00:00:00 2001 From: Bart Peeters Date: Mon, 15 Jun 2020 00:25:14 -0700 Subject: [PATCH 10/31] driftnet: Improve fish shoal highlighting This commit increases the default highlight length for fish shoals as they are often active for much longer than 10 ticks, and also untags fish shoals more accurately when they are adjacent to nets which cannot catch fish. --- .../client/plugins/driftnet/DriftNet.java | 16 +++++++ .../plugins/driftnet/DriftNetConfig.java | 4 +- .../plugins/driftnet/DriftNetPlugin.java | 48 +++++++++++++++---- 3 files changed, 56 insertions(+), 12 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/driftnet/DriftNet.java b/runelite-client/src/main/java/net/runelite/client/plugins/driftnet/DriftNet.java index 8a5dfdfeeb..99dd0356e1 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/driftnet/DriftNet.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/driftnet/DriftNet.java @@ -25,10 +25,13 @@ */ package net.runelite.client.plugins.driftnet; +import java.util.Set; import lombok.Data; import lombok.RequiredArgsConstructor; +import lombok.Setter; import net.runelite.api.GameObject; import net.runelite.api.Varbits; +import net.runelite.api.coords.WorldPoint; @Data @RequiredArgsConstructor @@ -37,10 +40,23 @@ class DriftNet private final int objectId; private final Varbits statusVarbit; private final Varbits countVarbit; + private final Set adjacentTiles; private GameObject net; private DriftNetStatus status; private int count; + @Setter + private DriftNetStatus prevTickStatus; + + // Nets that are not accepting fish are those currently not accepting, or those which were not + // accepting in the previous tick. (When a fish shoal is 2 tiles adjacent to a drift net and is + // moving to a net that is just being setup it will be denied even though the net is currently + // in the CATCHING status) + boolean isNotAcceptingFish() + { + return (status != DriftNetStatus.CATCH && status != DriftNetStatus.SET) || + (prevTickStatus != DriftNetStatus.CATCH && prevTickStatus != DriftNetStatus.SET); + } String getFormattedCountText() { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/driftnet/DriftNetConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/driftnet/DriftNetConfig.java index 4826768790..5ca1f29194 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/driftnet/DriftNetConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/driftnet/DriftNetConfig.java @@ -76,12 +76,12 @@ public interface DriftNetConfig extends Config ) @Range( min = 1, - max = 60 + max = 100 ) @Units(Units.TICKS) default int timeoutDelay() { - return 10; + return 60; } @ConfigItem( diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/driftnet/DriftNetPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/driftnet/DriftNetPlugin.java index 30449ad516..b7eecf2545 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/driftnet/DriftNetPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/driftnet/DriftNetPlugin.java @@ -26,12 +26,15 @@ package net.runelite.client.plugins.driftnet; import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; import com.google.inject.Provides; +import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.stream.Collectors; import javax.inject.Inject; import lombok.Getter; import net.runelite.api.Actor; @@ -99,8 +102,19 @@ public class DriftNetPlugin extends Plugin private Map taggedFish = new HashMap<>(); @Getter private final List NETS = ImmutableList.of( - new DriftNet(NullObjectID.NULL_31433, Varbits.NORTH_NET_STATUS, Varbits.NORTH_NET_CATCH_COUNT), - new DriftNet(NullObjectID.NULL_31434, Varbits.SOUTH_NET_STATUS, Varbits.SOUTH_NET_CATCH_COUNT)); + new DriftNet(NullObjectID.NULL_31433, Varbits.NORTH_NET_STATUS, Varbits.NORTH_NET_CATCH_COUNT, ImmutableSet.of( + new WorldPoint(3746, 10297, 1), + new WorldPoint(3747, 10297, 1), + new WorldPoint(3748, 10297, 1), + new WorldPoint(3749, 10297, 1) + )), + new DriftNet(NullObjectID.NULL_31434, Varbits.SOUTH_NET_STATUS, Varbits.SOUTH_NET_CATCH_COUNT, ImmutableSet.of( + new WorldPoint(3742, 10288, 1), + new WorldPoint(3742, 10289, 1), + new WorldPoint(3742, 10290, 1), + new WorldPoint(3742, 10291, 1), + new WorldPoint(3742, 10292, 1) + ))); @Getter private boolean inDriftNetArea; @@ -190,12 +204,6 @@ public class DriftNetPlugin extends Plugin net.setStatus(status); net.setCount(count); } - - // When you collect any loot, all tags become invalidated - if (client.getVar(Varbits.DRIFT_NET_COLLECT) != 0) - { - taggedFish.clear(); - } } @Subscribe @@ -211,6 +219,17 @@ public class DriftNetPlugin extends Plugin } } + private boolean isFishNextToNet(NPC fish, Collection nets) + { + final WorldPoint fishTile = WorldPoint.fromLocalInstance(client, fish.getLocalLocation()); + return nets.stream().anyMatch(net -> net.getAdjacentTiles().contains(fishTile)); + } + + private boolean isTagExpired(Integer tick) + { + return tick + config.timeoutDelay() < client.getTickCount(); + } + @Subscribe public void onGameTick(GameTick tick) { @@ -219,8 +238,16 @@ public class DriftNetPlugin extends Plugin return; } - final int currentTickCount = client.getTickCount(); - taggedFish.entrySet().removeIf(entry -> entry.getValue() + config.timeoutDelay() < currentTickCount); + List closedNets = NETS.stream() + .filter(DriftNet::isNotAcceptingFish) + .collect(Collectors.toList()); + + taggedFish.entrySet().removeIf(entry -> + isTagExpired(entry.getValue()) || + isFishNextToNet(entry.getKey(), closedNets) + ); + + NETS.forEach(net -> net.setPrevTickStatus(net.getStatus())); armInteraction = false; } @@ -271,6 +298,7 @@ public class DriftNetPlugin extends Plugin { final NPC npc = event.getNpc(); fish.remove(npc); + taggedFish.remove(npc); } @Subscribe From fd517da9d4d1c2127ed5c74ec6893314a6ae703e Mon Sep 17 00:00:00 2001 From: Jordan Atwood Date: Mon, 15 Jun 2020 00:45:44 -0700 Subject: [PATCH 11/31] HotColdLocation: Add new Darkmeyer master step See: runelite/runelite#11713 --- .../plugins/cluescrolls/clues/hotcold/HotColdLocation.java | 1 + 1 file changed, 1 insertion(+) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/hotcold/HotColdLocation.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/hotcold/HotColdLocation.java index c889ab4b9f..e1c71cda2b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/hotcold/HotColdLocation.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/hotcold/HotColdLocation.java @@ -128,6 +128,7 @@ public enum HotColdLocation MISTHALIN_DRAYNOR_BANK(new WorldPoint(3098, 3234, 0), MISTHALIN, "South of Draynor Village bank.", BRASSICAN_MAGE), MISTHALIN_LUMBER_YARD(new WorldPoint(3301, 3484, 0), MISTHALIN, "South of Lumber Yard, east of Assistant Serf.", BRASSICAN_MAGE), MORYTANIA_BURGH_DE_ROTT(new WorldPoint(3545, 3253, 0), MORYTANIA, "In the north-east area of Burgh de Rott, by the reverse-L-shaped ruins.", BRASSICAN_MAGE), + MORYTANIA_DARKMEYER(new WorldPoint(3604, 3326, 0), MORYTANIA, "Southwestern part of Darkmeyer.", BRASSICAN_MAGE), MORYTANIA_PORT_PHASMATYS(new WorldPoint(3611, 3485, 0), MORYTANIA, "West of Port Phasmatys, south-east of fairy ring.", BRASSICAN_MAGE), MORYTANIA_HOLLOWS(new WorldPoint(3499, 3421, 0), MORYTANIA, "Inside The Hollows, south of the bridge which was repaired in a quest.", BRASSICAN_MAGE), MORYTANIA_SWAMP(new WorldPoint(3418, 3372, 0), MORYTANIA, "Inside the Mort Myre Swamp, north-west of the Nature Grotto.", BRASSICAN_MAGE), From 8822ae0afdfc488f5b7607d96825f04f0488b5a1 Mon Sep 17 00:00:00 2001 From: Jordan Atwood Date: Mon, 15 Jun 2020 00:49:46 -0700 Subject: [PATCH 12/31] HotColdLocation: Center some location spots Center some hot-cold locations as reported and verified from the mega issue. Ref: runelite/runelite#9601 --- .../cluescrolls/clues/hotcold/HotColdLocation.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/hotcold/HotColdLocation.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/hotcold/HotColdLocation.java index e1c71cda2b..4aeb73a6e5 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/hotcold/HotColdLocation.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/hotcold/HotColdLocation.java @@ -118,7 +118,7 @@ public enum HotColdLocation KARAMJA_WEST_BRIMHAVEN(new WorldPoint(2718, 3167, 0), KARAMJA, "West of Brimhaven.", BRASSICAN_MAGE), KARAMJA_GLIDER(new WorldPoint(2966, 2975, 0), KARAMJA, "West of the gnome glider.", BRASSICAN_MAGE), KARAMJA_KHARAZI_NE(new WorldPoint(2904, 2925, 0), KARAMJA, "North-eastern part of Kharazi Jungle.", BRASSICAN_MAGE), - KARAMJA_KHARAZI_SW(new WorldPoint(2783, 2898, 0), KARAMJA, "South-western part of Kharazi Jungle.", BRASSICAN_MAGE), + KARAMJA_KHARAZI_SW(new WorldPoint(2786, 2899, 0), KARAMJA, "South-western part of Kharazi Jungle.", BRASSICAN_MAGE), KARAMJA_CRASH_ISLAND(new WorldPoint(2909, 2737, 0), KARAMJA, "Northern part of Crash Island.", BRASSICAN_MAGE), LUMBRIDGE_COW_FIELD( new WorldPoint(3174, 3336, 0), MISTHALIN, "Cow field north of Lumbridge"), MISTHALIN_VARROCK_STONE_CIRCLE(new WorldPoint(3225, 3356, 0), MISTHALIN, "South of the stone circle near Varrock's entrance.", BRASSICAN_MAGE), @@ -160,7 +160,7 @@ public enum HotColdLocation WILDERNESS_38(new WorldPoint(3293, 3813, 0), WILDERNESS, "South of Callisto, level 38 Wilderness.", ANCIENT_WIZARDS), WILDERNESS_49(new WorldPoint(3140, 3910, 0), WILDERNESS, "South-west of the Deserted Keep, level 49 Wilderness.", BRASSICAN_MAGE), WILDERNESS_54(new WorldPoint(2981, 3944, 0), WILDERNESS, "West of the Wilderness Agility Course, level 54 Wilderness.", BRASSICAN_MAGE), - ZEAH_BLASTMINE_BANK(new WorldPoint(1507, 3856, 0), ZEAH, "Next to the bank in the Lovakengj blast mine.", BRASSICAN_MAGE), + ZEAH_BLASTMINE_BANK(new WorldPoint(1504, 3859, 0), ZEAH, "Next to the bank in the Lovakengj blast mine.", BRASSICAN_MAGE), ZEAH_BLASTMINE_NORTH(new WorldPoint(1488, 3881, 0), ZEAH, "Northern part of the Lovakengj blast mine.", BRASSICAN_MAGE), ZEAH_LOVAKITE_FURNACE(new WorldPoint(1507, 3819, 0), ZEAH, "Next to the lovakite furnace in Lovakengj.", ANCIENT_WIZARDS), ZEAH_LOVAKENGJ_MINE(new WorldPoint(1477, 3778, 0), ZEAH, "Next to mithril rock in the Lovakengj mine.", ANCIENT_WIZARDS), @@ -169,7 +169,7 @@ public enum HotColdLocation ZEAH_OVERPASS(new WorldPoint(1467, 3714, 0), ZEAH, "Overpass between Lovakengj and Shayzien.", BRASSICAN_MAGE), ZEAH_LIZARDMAN(new WorldPoint(1490, 3698, 0), ZEAH, "Within Lizardman Canyon, east of the ladder. Requires 5% favour with Shayzien.", ANCIENT_WIZARDS), ZEAH_COMBAT_RING(new WorldPoint(1559, 3582, 0), ZEAH, "Shayzien, south-east of the Combat Ring.", BRASSICAN_MAGE), - ZEAH_SHAYZIEN_BANK_2(new WorldPoint(1494, 3622, 0), ZEAH, "North-west of the bank in Shayzien.", ANCIENT_WIZARDS), + ZEAH_SHAYZIEN_BANK_2(new WorldPoint(1491, 3623, 0), ZEAH, "North-west of the bank in Shayzien.", ANCIENT_WIZARDS), ZEAH_LIBRARY(new WorldPoint(1603, 3843, 0), ZEAH, "North-west of the Arceuus Library.", BRASSICAN_MAGE), ZEAH_HOUSECHURCH(new WorldPoint(1682, 3792, 0), ZEAH, "By the entrance to the Arceuus church.", ANCIENT_WIZARDS), ZEAH_DARK_ALTAR(new WorldPoint(1699, 3879, 0), ZEAH, "West of the Dark Altar.", BRASSICAN_MAGE), @@ -177,7 +177,7 @@ public enum HotColdLocation ZEAH_ESSENCE_MINE(new WorldPoint(1762, 3852, 0), ZEAH, "By the Arceuus essence mine.", BRASSICAN_MAGE), ZEAH_ESSENCE_MINE_NE(new WorldPoint(1773, 3867, 0), ZEAH, "North-east of the Arceuus essence mine.", BRASSICAN_MAGE), ZEAH_PISCARILUS_MINE(new WorldPoint(1768, 3705, 0), ZEAH, "South of the Piscarilius mine.", ANCIENT_WIZARDS), - ZEAH_GOLDEN_FIELD_TAVERN(new WorldPoint(1718, 3647, 0), ZEAH, "South of The Golden Field tavern in the northern area of Hosidius.", BRASSICAN_MAGE), + ZEAH_GOLDEN_FIELD_TAVERN(new WorldPoint(1718, 3643, 0), ZEAH, "South of the gravestone in Kingstown.", BRASSICAN_MAGE), ZEAH_MESS_HALL(new WorldPoint(1656, 3621, 0), ZEAH, "East of the Mess hall.", ANCIENT_WIZARDS), ZEAH_WATSONS_HOUSE(new WorldPoint(1653, 3573, 0), ZEAH, "East of Watson's house.", ANCIENT_WIZARDS), ZEAH_VANNAHS_FARM_STORE(new WorldPoint(1806, 3521, 0), ZEAH, "North of Vannah's Farm Store, between the chicken coop and willow trees.", BRASSICAN_MAGE), From 84611f0db8cd8410dce66b7faa71b24bccd45b1a Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 15 Jun 2020 14:39:01 -0400 Subject: [PATCH 13/31] Rename clan chat to friends chat --- .../net/runelite/api/ChatMessageType.java | 6 +- .../main/java/net/runelite/api/Client.java | 10 +- ...erManager.java => FriendsChatManager.java} | 10 +- ...ClanMember.java => FriendsChatMember.java} | 8 +- ...anMemberRank.java => FriendsChatRank.java} | 18 +- .../java/net/runelite/api/MessageNode.java | 2 +- .../main/java/net/runelite/api/Player.java | 6 +- .../main/java/net/runelite/api/ScriptID.java | 8 +- .../main/java/net/runelite/api/SpriteID.java | 24 +- .../java/net/runelite/api/VarClientStr.java | 2 +- .../main/java/net/runelite/api/VarPlayer.java | 4 +- .../net/runelite/api/events/ChatMessage.java | 4 +- ...anChanged.java => FriendsChatChanged.java} | 6 +- ...ined.java => FriendsChatMemberJoined.java} | 8 +- ...erLeft.java => FriendsChatMemberLeft.java} | 8 +- .../net/runelite/api/widgets/WidgetID.java | 12 +- .../net/runelite/api/widgets/WidgetInfo.java | 18 +- .../java/net/runelite/client/RuneLite.java | 6 +- .../client/chat/ChatCommandManager.java | 2 +- .../client/chat/ChatMessageManager.java | 40 +-- .../client/config/ChatColorConfig.java | 72 ++--- ...lanManager.java => FriendChatManager.java} | 98 +++--- .../plugins/chatfilter/ChatFilterConfig.java | 6 +- .../plugins/chatfilter/ChatFilterPlugin.java | 6 +- .../entityhider/EntityHiderConfig.java | 6 +- .../entityhider/EntityHiderPlugin.java | 4 +- .../ActivityType.java} | 4 +- .../FriendsChatConfig.java} | 38 +-- .../FriendsChatPlugin.java} | 284 +++++++++--------- .../MemberActivity.java} | 10 +- .../MemberJoinMessage.java} | 4 +- .../MembersIndicator.java} | 14 +- .../client/plugins/hiscore/HiscorePlugin.java | 2 +- .../plugins/hiscore/NameAutocompleter.java | 12 +- .../interfacestyles/SpriteOverride.java | 2 +- .../plugins/interfacestyles/WidgetOffset.java | 16 +- .../interfacestyles/WidgetOverride.java | 2 +- .../LeagueChatIconsPlugin.java | 24 +- .../client/plugins/minimap/MinimapConfig.java | 6 +- .../client/plugins/minimap/MinimapPlugin.java | 2 +- .../PlayerIndicatorsConfig.java | 30 +- .../PlayerIndicatorsOverlay.java | 40 +-- .../PlayerIndicatorsPlugin.java | 22 +- .../PlayerIndicatorsService.java | 14 +- .../client/plugins/raids/RaidsConfig.java | 6 +- .../client/plugins/raids/RaidsOverlay.java | 16 +- .../client/plugins/raids/RaidsPlugin.java | 4 +- .../plugins/screenshot/ScreenshotConfig.java | 8 +- .../plugins/screenshot/ScreenshotPlugin.java | 8 +- .../worldhopper/WorldHopperConfig.java | 2 +- .../worldhopper/WorldHopperPlugin.java | 20 +- .../net/runelite/client/ui/JagexColors.java | 8 +- .../src/main/scripts/CommandScript.rs2asm | 2 +- ...SendKick.hash => FriendsChatSendKick.hash} | 0 ...Kick.rs2asm => FriendsChatSendKick.rs2asm} | 8 +- .../chatfilter/ChatFilterPluginTest.java | 20 +- 56 files changed, 511 insertions(+), 511 deletions(-) rename runelite-api/src/main/java/net/runelite/api/{ClanMemberManager.java => FriendsChatManager.java} (85%) rename runelite-api/src/main/java/net/runelite/api/{ClanMember.java => FriendsChatMember.java} (90%) rename runelite-api/src/main/java/net/runelite/api/{ClanMemberRank.java => FriendsChatRank.java} (84%) rename runelite-api/src/main/java/net/runelite/api/events/{ClanChanged.java => FriendsChatChanged.java} (90%) rename runelite-api/src/main/java/net/runelite/api/events/{ClanMemberJoined.java => FriendsChatMemberJoined.java} (91%) rename runelite-api/src/main/java/net/runelite/api/events/{ClanMemberLeft.java => FriendsChatMemberLeft.java} (91%) rename runelite-client/src/main/java/net/runelite/client/game/{ClanManager.java => FriendChatManager.java} (53%) rename runelite-client/src/main/java/net/runelite/client/plugins/{clanchat/ClanActivityType.java => friendschat/ActivityType.java} (95%) rename runelite-client/src/main/java/net/runelite/client/plugins/{clanchat/ClanChatConfig.java => friendschat/FriendsChatConfig.java} (79%) rename runelite-client/src/main/java/net/runelite/client/plugins/{clanchat/ClanChatPlugin.java => friendschat/FriendsChatPlugin.java} (61%) rename runelite-client/src/main/java/net/runelite/client/plugins/{clanchat/ClanMemberActivity.java => friendschat/MemberActivity.java} (89%) rename runelite-client/src/main/java/net/runelite/client/plugins/{clanchat/ClanJoinMessage.java => friendschat/MemberJoinMessage.java} (95%) rename runelite-client/src/main/java/net/runelite/client/plugins/{clanchat/ClanChatIndicator.java => friendschat/MembersIndicator.java} (83%) rename runelite-client/src/main/scripts/{ClanSendKick.hash => FriendsChatSendKick.hash} (100%) rename runelite-client/src/main/scripts/{ClanSendKick.rs2asm => FriendsChatSendKick.rs2asm} (80%) diff --git a/runelite-api/src/main/java/net/runelite/api/ChatMessageType.java b/runelite-api/src/main/java/net/runelite/api/ChatMessageType.java index abed95406c..f96d7fba63 100644 --- a/runelite-api/src/main/java/net/runelite/api/ChatMessageType.java +++ b/runelite-api/src/main/java/net/runelite/api/ChatMessageType.java @@ -69,11 +69,11 @@ public enum ChatMessageType */ MODPRIVATECHAT(7), /** - * A message received in clan chat. + * A message received in friends chat. */ FRIENDSCHAT(9), /** - * A message received with information about the current clan chat. + * A message received with information about the current friends chat. */ FRIENDSCHATNOTIFICATION(11), /** @@ -133,7 +133,7 @@ public enum ChatMessageType */ CHALREQ_TRADE(103), /** - * A message received when someone sends a clan challenge offer. + * A message received when someone sends a friends chat challenge offer. */ CHALREQ_FRIENDSCHAT(104), /** diff --git a/runelite-api/src/main/java/net/runelite/api/Client.java b/runelite-api/src/main/java/net/runelite/api/Client.java index c756debbe6..356a1e5690 100644 --- a/runelite-api/src/main/java/net/runelite/api/Client.java +++ b/runelite-api/src/main/java/net/runelite/api/Client.java @@ -1152,12 +1152,12 @@ public interface Client extends GameEngine boolean isFriended(String name, boolean mustBeLoggedIn); /** - * Retrieve the clan member manager + * Retrieve the friends chat manager * * @return */ @Nullable - ClanMemberManager getClanMemberManager(); + FriendsChatManager getFriendsChatManager(); /** * Retrieve the nameable container containing friends @@ -1466,11 +1466,11 @@ public interface Client extends GameEngine void setFriendsHidden(boolean state); /** - * Sets whether or not clan mates are hidden. + * Sets whether or not friends chat members are hidden. * - * @param state the new clan mates hidden state + * @param state the new friends chat member hidden state */ - void setClanMatesHidden(boolean state); + void setFriendsChatMembersHidden(boolean state); /** * Sets whether the local player is hidden. diff --git a/runelite-api/src/main/java/net/runelite/api/ClanMemberManager.java b/runelite-api/src/main/java/net/runelite/api/FriendsChatManager.java similarity index 85% rename from runelite-api/src/main/java/net/runelite/api/ClanMemberManager.java rename to runelite-api/src/main/java/net/runelite/api/FriendsChatManager.java index e618525084..b31ae501dc 100644 --- a/runelite-api/src/main/java/net/runelite/api/ClanMemberManager.java +++ b/runelite-api/src/main/java/net/runelite/api/FriendsChatManager.java @@ -24,19 +24,19 @@ */ package net.runelite.api; -public interface ClanMemberManager extends NameableContainer +public interface FriendsChatManager extends NameableContainer { /** - * Gets the clan owner of the currently joined clan chat + * Gets the owner of the currently joined friends chat * * @return */ - String getClanOwner(); + String getOwner(); /** - * Gets the clan chat name of the currently joined clan chat + * Gets the name of the currently joined friends chat * * @return */ - String getClanChatName(); + String getName(); } diff --git a/runelite-api/src/main/java/net/runelite/api/ClanMember.java b/runelite-api/src/main/java/net/runelite/api/FriendsChatMember.java similarity index 90% rename from runelite-api/src/main/java/net/runelite/api/ClanMember.java rename to runelite-api/src/main/java/net/runelite/api/FriendsChatMember.java index 3afb7d85d9..6096166993 100644 --- a/runelite-api/src/main/java/net/runelite/api/ClanMember.java +++ b/runelite-api/src/main/java/net/runelite/api/FriendsChatMember.java @@ -25,9 +25,9 @@ package net.runelite.api; /** - * Represents a clan member. + * Represents a friends chat member. */ -public interface ClanMember extends ChatPlayer +public interface FriendsChatMember extends ChatPlayer { /** * Gets the world the member is in. @@ -37,9 +37,9 @@ public interface ClanMember extends ChatPlayer int getWorld(); /** - * Gets the rank of the clan member. + * Gets the rank of the friends chat member. * * @return the rank */ - ClanMemberRank getRank(); + FriendsChatRank getRank(); } diff --git a/runelite-api/src/main/java/net/runelite/api/ClanMemberRank.java b/runelite-api/src/main/java/net/runelite/api/FriendsChatRank.java similarity index 84% rename from runelite-api/src/main/java/net/runelite/api/ClanMemberRank.java rename to runelite-api/src/main/java/net/runelite/api/FriendsChatRank.java index c919e343c7..166f63c1e5 100644 --- a/runelite-api/src/main/java/net/runelite/api/ClanMemberRank.java +++ b/runelite-api/src/main/java/net/runelite/api/FriendsChatRank.java @@ -30,14 +30,14 @@ import lombok.AllArgsConstructor; import lombok.Getter; /** - * An enumeration of ranks of clan members. + * An enumeration of ranks of friends chat members. */ @AllArgsConstructor @Getter -public enum ClanMemberRank +public enum FriendsChatRank { /** - * Not in a clan. + * Not ranked. */ UNRANKED(-1), /** @@ -77,30 +77,30 @@ public enum ClanMemberRank */ JMOD(127); - private static final Map RANKS = new HashMap<>(); + private static final Map RANKS = new HashMap<>(); static { - for (final ClanMemberRank clanMemberRank : ClanMemberRank.values()) + for (final FriendsChatRank friendsChatRank : FriendsChatRank.values()) { - RANKS.put(clanMemberRank.value, clanMemberRank); + RANKS.put(friendsChatRank.value, friendsChatRank); } } /** * Utility method that maps the rank value to its respective - * {@link ClanMemberRank} value. + * {@link FriendsChatRank} value. * * @param rank the rank value * @return rank type */ - public static ClanMemberRank valueOf(int rank) + public static FriendsChatRank valueOf(int rank) { return RANKS.get(rank); } /** - * The value of the clan rank. + * The value of the rank. */ private final int value; } diff --git a/runelite-api/src/main/java/net/runelite/api/MessageNode.java b/runelite-api/src/main/java/net/runelite/api/MessageNode.java index 9ff1385b3b..9b7325a3e0 100644 --- a/runelite-api/src/main/java/net/runelite/api/MessageNode.java +++ b/runelite-api/src/main/java/net/runelite/api/MessageNode.java @@ -58,7 +58,7 @@ public interface MessageNode extends Node void setName(String name); /** - * Gets the sender of the message (ie. clan name). + * Gets the sender of the message (ie. friends chat name). * * @return the message sender */ diff --git a/runelite-api/src/main/java/net/runelite/api/Player.java b/runelite-api/src/main/java/net/runelite/api/Player.java index 560fd19e9b..e6ae715a7d 100644 --- a/runelite-api/src/main/java/net/runelite/api/Player.java +++ b/runelite-api/src/main/java/net/runelite/api/Player.java @@ -57,12 +57,12 @@ public interface Player extends Actor int getTeam(); /** - * Checks whether this player is a member of the same clan as + * Checks whether this player is a member of the same friends chat * the local player. * - * @return true if the player is a clan member, false otherwise + * @return true if the player is a friends chat member, false otherwise */ - boolean isClanMember(); + boolean isFriendsChatMember(); /** * Checks whether this player is a friend of the local player. diff --git a/runelite-api/src/main/java/net/runelite/api/ScriptID.java b/runelite-api/src/main/java/net/runelite/api/ScriptID.java index 00ecd1d285..35b159a198 100644 --- a/runelite-api/src/main/java/net/runelite/api/ScriptID.java +++ b/runelite-api/src/main/java/net/runelite/api/ScriptID.java @@ -196,13 +196,13 @@ public final class ScriptID public static final int XPDROP_DISABLED = 2091; /** - * Attempts to kick the specified player from the Clan Chat + * Attempts to kick the specified player from the friends chat *
    *
  • String Players in-game name
  • *
*/ @ScriptArguments(string = 1) - public static final int CLAN_SEND_KICK = 215; + public static final int FRIENDS_CHAT_SEND_KICK = 215; /** * Builds the items kept on death widget @@ -211,10 +211,10 @@ public final class ScriptID public static final int DEATH_KEEP_BUILD = 1601; /** - * Builds the widget that holds all of the players inside a clan chat + * Builds the widget that holds all of the players inside a friends chat */ @ScriptArguments(integer = 15) - public static final int CLAN_CHAT_CHANNEL_BUILD = 1658; + public static final int FRIENDS_CHAT_CHANNEL_REBUILD = 1658; /** * Builds the widget for making an offer in Grand Exchange diff --git a/runelite-api/src/main/java/net/runelite/api/SpriteID.java b/runelite-api/src/main/java/net/runelite/api/SpriteID.java index 0d81f168c4..9f53e45448 100644 --- a/runelite-api/src/main/java/net/runelite/api/SpriteID.java +++ b/runelite-api/src/main/java/net/runelite/api/SpriteID.java @@ -776,7 +776,7 @@ public final class SpriteID public static final int RS2_TAB_EQUIPMENT = 778; public static final int RS2_TAB_PRAYER = 779; public static final int TAB_MAGIC = 780; - public static final int RS2_TAB_CLAN_CHAT = 781; + public static final int RS2_TAB_FRIENDS_CHAT = 781; public static final int TAB_FRIENDS = 782; public static final int TAB_IGNORES = 783; public static final int RS2_TAB_LOGOUT = 784; @@ -888,7 +888,7 @@ public final class SpriteID public static final int TAB_EQUIPMENT = 901; public static final int TAB_PRAYER = 902; public static final int UNUSED_TAB_MAGIC_903 = 903; - public static final int TAB_CLAN_CHAT = 904; + public static final int TAB_FRIENDS_CHAT = 904; public static final int TAB_LOGOUT = 907; public static final int TAB_OPTIONS = 908; public static final int TAB_EMOTES = 909; @@ -977,15 +977,15 @@ public final class SpriteID public static final int STASH_UNITS_SLANTED_TAB_EDGE_LEFT_HOVERED = 1001; public static final int STASH_UNITS_SLANTED_TAB_MIDDLE_HOVERED = 1002; public static final int STASH_UNITS_SLANTED_TAB_EDGE_RIGHT_HOVERED = 1003; - public static final int CLAN_CHAT_RANK_SMILEY_FRIEND = 1004; - public static final int CLAN_CHAT_RANK_CROWN_JAGEX_MODERATOR = 1005; - public static final int CLAN_CHAT_RANK_KEY_CHANNEL_OWNER = 1006; - public static final int CLAN_CHAT_RANK_GOLD_STAR_GENERAL = 1007; - public static final int CLAN_CHAT_RANK_SILVER_STAR_CAPTAIN = 1008; - public static final int CLAN_CHAT_RANK_BRONZE_STAR_LIEUTENANT = 1009; - public static final int CLAN_CHAT_RANK_TRIPLE_CHEVRON_SERGEANT = 1010; - public static final int CLAN_CHAT_RANK_DOUBLE_CHEVRON_CORPORAL = 1011; - public static final int CLAN_CHAT_RANK_SINGLE_CHEVRON_RECRUIT = 1012; + public static final int FRIENDS_CHAT_RANK_SMILEY_FRIEND = 1004; + public static final int FRIENDS_CHAT_RANK_CROWN_JAGEX_MODERATOR = 1005; + public static final int FRIENDS_CHAT_RANK_KEY_CHANNEL_OWNER = 1006; + public static final int FRIENDS_CHAT_RANK_GOLD_STAR_GENERAL = 1007; + public static final int FRIENDS_CHAT_RANK_SILVER_STAR_CAPTAIN = 1008; + public static final int FRIENDS_CHAT_RANK_BRONZE_STAR_LIEUTENANT = 1009; + public static final int FRIENDS_CHAT_RANK_TRIPLE_CHEVRON_SERGEANT = 1010; + public static final int FRIENDS_CHAT_RANK_DOUBLE_CHEVRON_CORPORAL = 1011; + public static final int FRIENDS_CHAT_RANK_SINGLE_CHEVRON_RECRUIT = 1012; public static final int UNKNOWN_BUTTON_METAL_CORNERS = 1013; public static final int UNKNOWN_BUTTON_METAL_CORNERS_HOVERED = 1014; public static final int UNKNOWN_SLANTED_TAB_LONG = 1015; @@ -1017,7 +1017,7 @@ public final class SpriteID public static final int BANK_DEPOSIT_INVENTORY = 1041; public static final int BANK_DEPOSIT_EQUIPMENT = 1042; public static final int BANK_SEARCH = 1043; - public static final int MINIMAP_MARKER_PURPLE_PLAYER_CLAN_CHAT = 1044; + public static final int MINIMAP_MARKER_PURPLE_PLAYER_FRIENDS_CHAT = 1044; public static final int OPTIONS_PROFANITY_FILTER = 1045; public static final int PLAYER_KILLER_SKULL_1046 = 1046; public static final int PLAYER_KILLING_DISABLED_OVERLAY = 1047; diff --git a/runelite-api/src/main/java/net/runelite/api/VarClientStr.java b/runelite-api/src/main/java/net/runelite/api/VarClientStr.java index 0831569546..68ba463897 100644 --- a/runelite-api/src/main/java/net/runelite/api/VarClientStr.java +++ b/runelite-api/src/main/java/net/runelite/api/VarClientStr.java @@ -41,7 +41,7 @@ public enum VarClientStr CHATBOX_TYPED_TEXT(335), INPUT_TEXT(359), PRIVATE_MESSAGE_TARGET(360), - RECENT_CLAN_CHAT(362); + RECENT_FRIENDS_CHAT(362); private final int index; } diff --git a/runelite-api/src/main/java/net/runelite/api/VarPlayer.java b/runelite-api/src/main/java/net/runelite/api/VarPlayer.java index d9ea173d19..a18acd81ba 100644 --- a/runelite-api/src/main/java/net/runelite/api/VarPlayer.java +++ b/runelite-api/src/main/java/net/runelite/api/VarPlayer.java @@ -57,11 +57,11 @@ public enum VarPlayer /** * The ID of the party. This Var is only set in the raid bank area and the raid lobby * - * This gets set to -1 when the raid starts. This is first set when the first player of the clan forms a party + * This gets set to -1 when the raid starts. This is first set when the first player of the friends chat forms a party * on the recruiting board and it changes again when the first person actually enters the raid. * * -1 : Not in a party or in the middle of an ongoing raid - * Anything else : This means that your clan has a raid party being formed and has not started yet + * Anything else : This means that your friends chat has a raid party being formed and has not started yet */ IN_RAID_PARTY(1427), diff --git a/runelite-api/src/main/java/net/runelite/api/events/ChatMessage.java b/runelite-api/src/main/java/net/runelite/api/events/ChatMessage.java index 0f5182e22b..91ddf32ed2 100644 --- a/runelite-api/src/main/java/net/runelite/api/events/ChatMessage.java +++ b/runelite-api/src/main/java/net/runelite/api/events/ChatMessage.java @@ -62,8 +62,8 @@ public class ChatMessage /** * The sender of the message. *

- * This field is only used for clan messages and refers to the - * current name of the clan chat the client is in. + * This field is only used for friends chat messages and refers to the + * current name of the friends chat the client is in. */ private String sender; /** diff --git a/runelite-api/src/main/java/net/runelite/api/events/ClanChanged.java b/runelite-api/src/main/java/net/runelite/api/events/FriendsChatChanged.java similarity index 90% rename from runelite-api/src/main/java/net/runelite/api/events/ClanChanged.java rename to runelite-api/src/main/java/net/runelite/api/events/FriendsChatChanged.java index e39dbc400e..0bab986a4d 100644 --- a/runelite-api/src/main/java/net/runelite/api/events/ClanChanged.java +++ b/runelite-api/src/main/java/net/runelite/api/events/FriendsChatChanged.java @@ -27,13 +27,13 @@ package net.runelite.api.events; import lombok.Value; /** - * An event where the client has joined or left a clan chat. + * An event where the client has joined or left a friends chat. */ @Value -public class ClanChanged +public class FriendsChatChanged { /** - * Whether or not the client is now in a clan chat. + * Whether or not the client is now in a friends chat. */ private boolean joined; } diff --git a/runelite-api/src/main/java/net/runelite/api/events/ClanMemberJoined.java b/runelite-api/src/main/java/net/runelite/api/events/FriendsChatMemberJoined.java similarity index 91% rename from runelite-api/src/main/java/net/runelite/api/events/ClanMemberJoined.java rename to runelite-api/src/main/java/net/runelite/api/events/FriendsChatMemberJoined.java index ff2a373c4b..cab17bd556 100644 --- a/runelite-api/src/main/java/net/runelite/api/events/ClanMemberJoined.java +++ b/runelite-api/src/main/java/net/runelite/api/events/FriendsChatMemberJoined.java @@ -25,13 +25,13 @@ package net.runelite.api.events; import lombok.Value; -import net.runelite.api.ClanMember; +import net.runelite.api.FriendsChatMember; @Value -public class ClanMemberJoined +public class FriendsChatMemberJoined { /** - * The ClanMember that joined + * The member that joined */ - private ClanMember member; + private FriendsChatMember member; } diff --git a/runelite-api/src/main/java/net/runelite/api/events/ClanMemberLeft.java b/runelite-api/src/main/java/net/runelite/api/events/FriendsChatMemberLeft.java similarity index 91% rename from runelite-api/src/main/java/net/runelite/api/events/ClanMemberLeft.java rename to runelite-api/src/main/java/net/runelite/api/events/FriendsChatMemberLeft.java index 24bc58f960..a5ed698988 100644 --- a/runelite-api/src/main/java/net/runelite/api/events/ClanMemberLeft.java +++ b/runelite-api/src/main/java/net/runelite/api/events/FriendsChatMemberLeft.java @@ -25,13 +25,13 @@ package net.runelite.api.events; import lombok.Value; -import net.runelite.api.ClanMember; +import net.runelite.api.FriendsChatMember; @Value -public class ClanMemberLeft +public class FriendsChatMemberLeft { /** - * The ClanMember that left + * The member that left */ - private ClanMember member; + private FriendsChatMember member; } diff --git a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java index a3457b1f01..2a9927894a 100644 --- a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java +++ b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java @@ -57,7 +57,7 @@ public class WidgetID public static final int ACHIEVEMENT_DIARY_GROUP_ID = 259; public static final int PEST_CONTROL_BOAT_GROUP_ID = 407; public static final int PEST_CONTROL_GROUP_ID = 408; - public static final int CLAN_CHAT_GROUP_ID = 7; + public static final int FRIENDS_CHAT_GROUP_ID = 7; public static final int MINIMAP_GROUP_ID = 160; public static final int LOGIN_CLICK_TO_PLAY_GROUP_ID = 378; public static final int CLUE_SCROLL_GROUP_ID = 203; @@ -239,7 +239,7 @@ public class WidgetID static final int PREVIOUS_NAME_HOLDER = 16; } - static class ClanChat + static class FriendsChat { static final int TITLE = 1; static final int NAME = 4; @@ -361,14 +361,14 @@ public class WidgetID { static final int MINIMAP = 3; static final int MINIMAP_DRAW_AREA = 8; - static final int CLAN_CHAT_TAB = 33; + static final int FRIENDS_CHAT_TAB = 33; static final int FRIENDS_TAB = 35; static final int IGNORES_TAB = 34; static final int LOGOUT_TAB = 36; static final int OPTIONS_TAB = 37; static final int EMOTES_TAB = 38; static final int MUSIC_TAB = 39; - static final int CLAN_CHAT_ICON = 40; + static final int FRIENDS_CHAT_ICON = 40; static final int FRIENDS_ICON = 42; static final int IGNORES_ICON = 41; static final int LOGOUT_ICON = 43; @@ -397,14 +397,14 @@ public class WidgetID static class ResizableViewport { - static final int CLAN_CHAT_TAB = 37; + static final int FRIENDS_CHAT_TAB = 37; static final int FRIENDS_TAB = 39; static final int IGNORES_TAB = 38; static final int LOGOUT_TAB = 40; static final int OPTIONS_TAB = 41; static final int EMOTES_TAB = 42; static final int MUSIC_TAB = 43; - static final int CLAN_CHAT_ICON = 44; + static final int FRIENDS_CHAT_ICON = 44; static final int FRIENDS_ICON = 46; static final int IGNORES_ICON = 45; static final int LOGOUT_ICON = 47; diff --git a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java index aeef3d01bf..1372874a20 100644 --- a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java +++ b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java @@ -46,7 +46,7 @@ public enum WidgetInfo INVENTORY(WidgetID.INVENTORY_GROUP_ID, 0), FRIENDS_LIST(WidgetID.FRIENDS_LIST_GROUP_ID, 0), IGNORE_LIST(WidgetID.IGNORE_LIST_GROUP_ID, 0), - CLAN_CHAT(WidgetID.CLAN_CHAT_GROUP_ID, 0), + FRIENDS_CHAT(WidgetID.FRIENDS_CHAT_GROUP_ID, 0), RAIDING_PARTY(WidgetID.RAIDING_PARTY_GROUP_ID, 0), WORLD_MAP_VIEW(WidgetID.WORLD_MAP_GROUP_ID, WidgetID.WorldMap.MAPVIEW), @@ -125,10 +125,10 @@ public enum WidgetInfo EXPLORERS_RING_ALCH_INVENTORY(WidgetID.EXPLORERS_RING_ALCH_GROUP_ID, WidgetID.ExplorersRing.INVENTORY), - CLAN_CHAT_TITLE(WidgetID.CLAN_CHAT_GROUP_ID, WidgetID.ClanChat.TITLE), - CLAN_CHAT_NAME(WidgetID.CLAN_CHAT_GROUP_ID, WidgetID.ClanChat.NAME), - CLAN_CHAT_OWNER(WidgetID.CLAN_CHAT_GROUP_ID, WidgetID.ClanChat.OWNER), - CLAN_CHAT_LIST(WidgetID.CLAN_CHAT_GROUP_ID, WidgetID.ClanChat.LIST), + FRIENDS_CHAT_TITLE(WidgetID.FRIENDS_CHAT_GROUP_ID, WidgetID.FriendsChat.TITLE), + FRIENDS_CHAT_NAME(WidgetID.FRIENDS_CHAT_GROUP_ID, WidgetID.FriendsChat.NAME), + FRIENDS_CHAT_OWNER(WidgetID.FRIENDS_CHAT_GROUP_ID, WidgetID.FriendsChat.OWNER), + FRIENDS_CHAT_LIST(WidgetID.FRIENDS_CHAT_GROUP_ID, WidgetID.FriendsChat.LIST), BANK_CONTAINER(WidgetID.BANK_GROUP_ID, WidgetID.Bank.BANK_CONTAINER), BANK_SEARCH_BUTTON_BACKGROUND(WidgetID.BANK_GROUP_ID, WidgetID.Bank.SEARCH_BUTTON_BACKGROUND), @@ -198,7 +198,7 @@ public enum WidgetInfo FIXED_VIEWPORT_EQUIPMENT_TAB(WidgetID.FIXED_VIEWPORT_GROUP_ID, WidgetID.FixedViewport.EQUIPMENT_TAB), FIXED_VIEWPORT_PRAYER_TAB(WidgetID.FIXED_VIEWPORT_GROUP_ID, WidgetID.FixedViewport.PRAYER_TAB), FIXED_VIEWPORT_MAGIC_TAB(WidgetID.FIXED_VIEWPORT_GROUP_ID, WidgetID.FixedViewport.MAGIC_TAB), - FIXED_VIEWPORT_CLAN_CHAT_TAB(WidgetID.FIXED_VIEWPORT_GROUP_ID, WidgetID.FixedViewport.CLAN_CHAT_TAB), + FIXED_VIEWPORT_FRIENDS_CHAT_TAB(WidgetID.FIXED_VIEWPORT_GROUP_ID, WidgetID.FixedViewport.FRIENDS_CHAT_TAB), FIXED_VIEWPORT_FRIENDS_TAB(WidgetID.FIXED_VIEWPORT_GROUP_ID, WidgetID.FixedViewport.FRIENDS_TAB), FIXED_VIEWPORT_IGNORES_TAB(WidgetID.FIXED_VIEWPORT_GROUP_ID, WidgetID.FixedViewport.IGNORES_TAB), FIXED_VIEWPORT_LOGOUT_TAB(WidgetID.FIXED_VIEWPORT_GROUP_ID, WidgetID.FixedViewport.LOGOUT_TAB), @@ -212,7 +212,7 @@ public enum WidgetInfo FIXED_VIEWPORT_EQUIPMENT_ICON(WidgetID.FIXED_VIEWPORT_GROUP_ID, WidgetID.FixedViewport.EQUIPMENT_ICON), FIXED_VIEWPORT_PRAYER_ICON(WidgetID.FIXED_VIEWPORT_GROUP_ID, WidgetID.FixedViewport.PRAYER_ICON), FIXED_VIEWPORT_MAGIC_ICON(WidgetID.FIXED_VIEWPORT_GROUP_ID, WidgetID.FixedViewport.MAGIC_ICON), - FIXED_VIEWPORT_CLAN_CHAT_ICON(WidgetID.FIXED_VIEWPORT_GROUP_ID, WidgetID.FixedViewport.CLAN_CHAT_ICON), + FIXED_VIEWPORT_FRIENDS_CHAT_ICON(WidgetID.FIXED_VIEWPORT_GROUP_ID, WidgetID.FixedViewport.FRIENDS_CHAT_ICON), FIXED_VIEWPORT_FRIENDS_ICON(WidgetID.FIXED_VIEWPORT_GROUP_ID, WidgetID.FixedViewport.FRIENDS_ICON), FIXED_VIEWPORT_IGNORES_ICON(WidgetID.FIXED_VIEWPORT_GROUP_ID, WidgetID.FixedViewport.IGNORES_ICON), FIXED_VIEWPORT_LOGOUT_ICON(WidgetID.FIXED_VIEWPORT_GROUP_ID, WidgetID.FixedViewport.LOGOUT_ICON), @@ -243,7 +243,7 @@ public enum WidgetInfo RESIZABLE_VIEWPORT_EQUIPMENT_TAB(WidgetID.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX_GROUP_ID, WidgetID.ResizableViewport.EQUIPMENT_TAB), RESIZABLE_VIEWPORT_PRAYER_TAB(WidgetID.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX_GROUP_ID, WidgetID.ResizableViewport.PRAYER_TAB), RESIZABLE_VIEWPORT_MAGIC_TAB(WidgetID.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX_GROUP_ID, WidgetID.ResizableViewport.MAGIC_TAB), - RESIZABLE_VIEWPORT_CLAN_CHAT_TAB(WidgetID.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX_GROUP_ID, WidgetID.ResizableViewport.CLAN_CHAT_TAB), + RESIZABLE_VIEWPORT_FRIENDS_CHAT_TAB(WidgetID.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX_GROUP_ID, WidgetID.ResizableViewport.FRIENDS_CHAT_TAB), RESIZABLE_VIEWPORT_FRIENDS_TAB(WidgetID.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX_GROUP_ID, WidgetID.ResizableViewport.FRIENDS_TAB), RESIZABLE_VIEWPORT_IGNORES_TAB(WidgetID.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX_GROUP_ID, WidgetID.ResizableViewport.IGNORES_TAB), RESIZABLE_VIEWPORT_LOGOUT_TAB(WidgetID.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX_GROUP_ID, WidgetID.ResizableViewport.LOGOUT_TAB), @@ -257,7 +257,7 @@ public enum WidgetInfo RESIZABLE_VIEWPORT_EQUIPMENT_ICON(WidgetID.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX_GROUP_ID, WidgetID.ResizableViewport.EQUIPMENT_ICON), RESIZABLE_VIEWPORT_PRAYER_ICON(WidgetID.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX_GROUP_ID, WidgetID.ResizableViewport.PRAYER_ICON), RESIZABLE_VIEWPORT_MAGIC_ICON(WidgetID.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX_GROUP_ID, WidgetID.ResizableViewport.MAGIC_ICON), - RESIZABLE_VIEWPORT_CLAN_CHAT_ICON(WidgetID.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX_GROUP_ID, WidgetID.ResizableViewport.CLAN_CHAT_ICON), + RESIZABLE_VIEWPORT_FRIENDS_CHAT_ICON(WidgetID.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX_GROUP_ID, WidgetID.ResizableViewport.FRIENDS_CHAT_ICON), RESIZABLE_VIEWPORT_FRIENDS_ICON(WidgetID.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX_GROUP_ID, WidgetID.ResizableViewport.FRIENDS_ICON), RESIZABLE_VIEWPORT_IGNORES_ICON(WidgetID.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX_GROUP_ID, WidgetID.ResizableViewport.IGNORES_ICON), RESIZABLE_VIEWPORT_LOGOUT_ICON(WidgetID.RESIZABLE_VIEWPORT_OLD_SCHOOL_BOX_GROUP_ID, WidgetID.ResizableViewport.LOGOUT_ICON), diff --git a/runelite-client/src/main/java/net/runelite/client/RuneLite.java b/runelite-client/src/main/java/net/runelite/client/RuneLite.java index b9304a11e6..ef6d299ea4 100644 --- a/runelite-client/src/main/java/net/runelite/client/RuneLite.java +++ b/runelite-client/src/main/java/net/runelite/client/RuneLite.java @@ -56,7 +56,7 @@ import net.runelite.client.config.ConfigManager; import net.runelite.client.discord.DiscordService; import net.runelite.client.eventbus.EventBus; import net.runelite.client.externalplugins.ExternalPluginManager; -import net.runelite.client.game.ClanManager; +import net.runelite.client.game.FriendChatManager; import net.runelite.client.game.ItemManager; import net.runelite.client.game.LootManager; import net.runelite.client.game.chatbox.ChatboxPanelManager; @@ -137,7 +137,7 @@ public class RuneLite private Provider overlayRenderer; @Inject - private Provider clanManager; + private Provider friendsChatManager; @Inject private Provider chatMessageManager; @@ -347,7 +347,7 @@ public class RuneLite eventBus.register(partyService.get()); eventBus.register(overlayRenderer.get()); - eventBus.register(clanManager.get()); + eventBus.register(friendsChatManager.get()); eventBus.register(itemManager.get()); eventBus.register(menuManager.get()); eventBus.register(chatMessageManager.get()); diff --git a/runelite-client/src/main/java/net/runelite/client/chat/ChatCommandManager.java b/runelite-client/src/main/java/net/runelite/client/chat/ChatCommandManager.java index 1000ba641c..03bc5960b6 100644 --- a/runelite-client/src/main/java/net/runelite/client/chat/ChatCommandManager.java +++ b/runelite-client/src/main/java/net/runelite/client/chat/ChatCommandManager.java @@ -133,7 +133,7 @@ public class ChatCommandManager implements ChatboxInputListener String message = chatboxInput.getValue(); if (message.startsWith("/")) { - message = message.substring(1); // clan chat input + message = message.substring(1); // friends chat input } String command = extractCommand(message); diff --git a/runelite-client/src/main/java/net/runelite/client/chat/ChatMessageManager.java b/runelite-client/src/main/java/net/runelite/client/chat/ChatMessageManager.java index 2f4d860c2c..4640c90c99 100644 --- a/runelite-client/src/main/java/net/runelite/client/chat/ChatMessageManager.java +++ b/runelite-client/src/main/java/net/runelite/client/chat/ChatMessageManager.java @@ -139,11 +139,11 @@ public class ChatMessageManager break; } case FRIENDSCHAT: - usernameColor = isChatboxTransparent ? chatColorConfig.transparentClanUsernames() : chatColorConfig.opaqueClanUsernames(); + usernameColor = isChatboxTransparent ? chatColorConfig.transparentFriendsChatUsernames() : chatColorConfig.opaqueFriendsChatUsernames(); break; } - senderColor = isChatboxTransparent ? chatColorConfig.transparentClanChannelName() : chatColorConfig.opaqueClanChannelName(); + senderColor = isChatboxTransparent ? chatColorConfig.transparentFriendsChatChannelName() : chatColorConfig.opaqueFriendsChatChannelName(); if (usernameColor != null) { @@ -218,7 +218,7 @@ public class ChatMessageManager case PRIVATECHAT: return JagexColors.CHAT_PRIVATE_MESSAGE_TEXT_OPAQUE_BACKGROUND; case FRIENDSCHAT: - return JagexColors.CHAT_CLAN_TEXT_OPAQUE_BACKGROUND; + return JagexColors.CHAT_FC_TEXT_OPAQUE_BACKGROUND; case ITEM_EXAMINE: case OBJECT_EXAMINE: case NPC_EXAMINE: @@ -238,7 +238,7 @@ public class ChatMessageManager case PRIVATECHAT: return JagexColors.CHAT_PRIVATE_MESSAGE_TEXT_TRANSPARENT_BACKGROUND; case FRIENDSCHAT: - return JagexColors.CHAT_CLAN_TEXT_TRANSPARENT_BACKGROUND; + return JagexColors.CHAT_FC_TEXT_TRANSPARENT_BACKGROUND; case ITEM_EXAMINE: case OBJECT_EXAMINE: case NPC_EXAMINE: @@ -311,24 +311,24 @@ public class ChatMessageManager cacheColor(new ChatColor(ChatColorType.HIGHLIGHT, chatColorConfig.opaquePrivateMessageReceivedHighlight(), false), ChatMessageType.MODPRIVATECHAT); } - if (chatColorConfig.opaqueClanChatInfo() != null) + if (chatColorConfig.opaqueFriendsChatInfo() != null) { - cacheColor(new ChatColor(ChatColorType.NORMAL, chatColorConfig.opaqueClanChatInfo(), false), + cacheColor(new ChatColor(ChatColorType.NORMAL, chatColorConfig.opaqueFriendsChatInfo(), false), ChatMessageType.FRIENDSCHATNOTIFICATION); } - if (chatColorConfig.opaqueClanChatInfoHighlight() != null) + if (chatColorConfig.opaqueFriendsChatInfoHighlight() != null) { - cacheColor(new ChatColor(ChatColorType.HIGHLIGHT, chatColorConfig.opaqueClanChatInfoHighlight(), false), + cacheColor(new ChatColor(ChatColorType.HIGHLIGHT, chatColorConfig.opaqueFriendsChatInfoHighlight(), false), ChatMessageType.FRIENDSCHATNOTIFICATION); } - if (chatColorConfig.opaqueClanChatMessage() != null) + if (chatColorConfig.opaqueFriendsChatMessage() != null) { - cacheColor(new ChatColor(ChatColorType.NORMAL, chatColorConfig.opaqueClanChatMessage(), false), + cacheColor(new ChatColor(ChatColorType.NORMAL, chatColorConfig.opaqueFriendsChatMessage(), false), ChatMessageType.FRIENDSCHAT); } - if (chatColorConfig.opaqueClanChatMessageHighlight() != null) + if (chatColorConfig.opaqueFriendsChatMessageHighlight() != null) { - cacheColor(new ChatColor(ChatColorType.HIGHLIGHT, chatColorConfig.opaqueClanChatMessageHighlight(), false), + cacheColor(new ChatColor(ChatColorType.HIGHLIGHT, chatColorConfig.opaqueFriendsChatMessageHighlight(), false), ChatMessageType.FRIENDSCHAT); } if (chatColorConfig.opaqueAutochatMessage() != null) @@ -444,24 +444,24 @@ public class ChatMessageManager cacheColor(new ChatColor(ChatColorType.HIGHLIGHT, chatColorConfig.transparentPrivateMessageReceivedHighlight(), true), ChatMessageType.MODPRIVATECHAT); } - if (chatColorConfig.transparentClanChatInfo() != null) + if (chatColorConfig.transparentFriendsChatInfo() != null) { - cacheColor(new ChatColor(ChatColorType.NORMAL, chatColorConfig.transparentClanChatInfo(), true), + cacheColor(new ChatColor(ChatColorType.NORMAL, chatColorConfig.transparentFriendsChatInfo(), true), ChatMessageType.FRIENDSCHATNOTIFICATION); } - if (chatColorConfig.transparentClanChatInfoHighlight() != null) + if (chatColorConfig.transparentFriendsChatInfoHighlight() != null) { - cacheColor(new ChatColor(ChatColorType.HIGHLIGHT, chatColorConfig.transparentClanChatInfoHighlight(), true), + cacheColor(new ChatColor(ChatColorType.HIGHLIGHT, chatColorConfig.transparentFriendsChatInfoHighlight(), true), ChatMessageType.FRIENDSCHATNOTIFICATION); } - if (chatColorConfig.transparentClanChatMessage() != null) + if (chatColorConfig.transparentFriendsChatMessage() != null) { - cacheColor(new ChatColor(ChatColorType.NORMAL, chatColorConfig.transparentClanChatMessage(), true), + cacheColor(new ChatColor(ChatColorType.NORMAL, chatColorConfig.transparentFriendsChatMessage(), true), ChatMessageType.FRIENDSCHAT); } - if (chatColorConfig.transparentClanChatMessageHighlight() != null) + if (chatColorConfig.transparentFriendsChatMessageHighlight() != null) { - cacheColor(new ChatColor(ChatColorType.HIGHLIGHT, chatColorConfig.transparentClanChatMessageHighlight(), true), + cacheColor(new ChatColor(ChatColorType.HIGHLIGHT, chatColorConfig.transparentFriendsChatMessageHighlight(), true), ChatMessageType.FRIENDSCHAT); } if (chatColorConfig.transparentAutochatMessage() != null) diff --git a/runelite-client/src/main/java/net/runelite/client/config/ChatColorConfig.java b/runelite-client/src/main/java/net/runelite/client/config/ChatColorConfig.java index 2839512e3d..a6757a382a 100644 --- a/runelite-client/src/main/java/net/runelite/client/config/ChatColorConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/config/ChatColorConfig.java @@ -112,11 +112,11 @@ public interface ChatColorConfig extends Config @ConfigItem( position = 7, keyName = "opaqueClanChatInfo", - name = "Clan chat info", - description = "Clan Chat Information (eg. when joining a channel)", + name = "Friends chat info", + description = "Friends Chat Information (eg. when joining a channel)", section = opaqueSection ) - default Color opaqueClanChatInfo() + default Color opaqueFriendsChatInfo() { return JagexColors.CHAT_GAME_EXAMINE_TEXT_OPAQUE_BACKGROUND; } @@ -124,11 +124,11 @@ public interface ChatColorConfig extends Config @ConfigItem( position = 8, keyName = "opaqueClanChatInfoHighlight", - name = "Clan chat info highlight", - description = "Clan Chat Information highlight (used for the Raids plugin)", + name = "Friends chat info highlight", + description = "Friends Chat Information highlight (used for the Raids plugin)", section = opaqueSection ) - default Color opaqueClanChatInfoHighlight() + default Color opaqueFriendsChatInfoHighlight() { return Color.RED; } @@ -136,20 +136,20 @@ public interface ChatColorConfig extends Config @ConfigItem( position = 9, keyName = "opaqueClanChatMessage", - name = "Clan chat message", - description = "Color of Clan Chat Messages", + name = "Friends chat message", + description = "Color of Friends chat messages", section = opaqueSection ) - Color opaqueClanChatMessage(); + Color opaqueFriendsChatMessage(); @ConfigItem( position = 10, keyName = "opaqueClanChatMessageHighlight", - name = "Clan chat message highlight", - description = "Color of highlights in Clan Chat Messages", + name = "Friends chat message highlight", + description = "Color of highlights in Friends Chat messages", section = opaqueSection ) - default Color opaqueClanChatMessageHighlight() + default Color opaqueFriendsChatMessageHighlight() { return Color.decode("#000000"); } @@ -289,20 +289,20 @@ public interface ChatColorConfig extends Config @ConfigItem( position = 25, keyName = "opaqueClanChannelName", - name = "Clan channel name", - description = "Color of Clan Channel Name", + name = "Friends chat channel name", + description = "Color of Friends chat channel name", section = opaqueSection ) - Color opaqueClanChannelName(); + Color opaqueFriendsChatChannelName(); @ConfigItem( position = 26, keyName = "opaqueClanUsernames", - name = "Clan usernames", - description = "Color of Usernames in Clan Chat", + name = "Friends chat usernames", + description = "Color of usernames in Friends chat", section = opaqueSection ) - Color opaqueClanUsernames(); + Color opaqueFriendsChatUsernames(); @ConfigItem( position = 27, @@ -379,11 +379,11 @@ public interface ChatColorConfig extends Config @ConfigItem( position = 57, keyName = "transparentClanChatInfo", - name = "Clan chat info (transparent)", - description = "Clan Chat Information (eg. when joining a channel) (transparent)", + name = "Friends chat info (transparent)", + description = "Friends chat information (eg. when joining a channel) (transparent)", section = transparentSection ) - default Color transparentClanChatInfo() + default Color transparentFriendsChatInfo() { return JagexColors.CHAT_GAME_EXAMINE_TEXT_TRANSPARENT_BACKGROUND; } @@ -391,11 +391,11 @@ public interface ChatColorConfig extends Config @ConfigItem( position = 58, keyName = "transparentClanChatInfoHighlight", - name = "Clan chat info highlight (transparent)", - description = "Clan Chat Information highlight (used for the Raids plugin) (transparent)", + name = "Friends chat info highlight (transparent)", + description = "Friends chat information highlight (used for the Raids plugin) (transparent)", section = transparentSection ) - default Color transparentClanChatInfoHighlight() + default Color transparentFriendsChatInfoHighlight() { return Color.RED; } @@ -403,20 +403,20 @@ public interface ChatColorConfig extends Config @ConfigItem( position = 59, keyName = "transparentClanChatMessage", - name = "Clan chat message (transparent)", - description = "Color of Clan Chat Messages (transparent)", + name = "Friends chat message (transparent)", + description = "Color of Friends chat messages (transparent)", section = transparentSection ) - Color transparentClanChatMessage(); + Color transparentFriendsChatMessage(); @ConfigItem( position = 60, keyName = "transparentClanChatMessageHighlight", - name = "Clan chat message highlight (transparent)", - description = "Color of highlights in Clan Chat Messages (transparent)", + name = "Friends chat message highlight (transparent)", + description = "Color of highlights in Friends chat messages (transparent)", section = transparentSection ) - default Color transparentClanChatMessageHighlight() + default Color transparentFriendsChatMessageHighlight() { return Color.decode("#FFFFFF"); } @@ -556,20 +556,20 @@ public interface ChatColorConfig extends Config @ConfigItem( position = 75, keyName = "transparentClanChannelName", - name = "Clan channel name (transparent)", - description = "Color of Clan Channel Name (transparent)", + name = "Friends chat channel name (transparent)", + description = "Color of Friends chat channel name (transparent)", section = transparentSection ) - Color transparentClanChannelName(); + Color transparentFriendsChatChannelName(); @ConfigItem( position = 76, keyName = "transparentClanUsernames", - name = "Clan usernames (transparent)", - description = "Color of Usernames in Clan Chat (transparent)", + name = "Friends chat usernames (transparent)", + description = "Color of usernames in Friends chat (transparent)", section = transparentSection ) - Color transparentClanUsernames(); + Color transparentFriendsChatUsernames(); @ConfigItem( position = 77, diff --git a/runelite-client/src/main/java/net/runelite/client/game/ClanManager.java b/runelite-client/src/main/java/net/runelite/client/game/FriendChatManager.java similarity index 53% rename from runelite-client/src/main/java/net/runelite/client/game/ClanManager.java rename to runelite-client/src/main/java/net/runelite/client/game/FriendChatManager.java index 7ac318243e..5c24a6ce33 100644 --- a/runelite-client/src/main/java/net/runelite/client/game/ClanManager.java +++ b/runelite-client/src/main/java/net/runelite/client/game/FriendChatManager.java @@ -36,94 +36,94 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; import javax.inject.Inject; import javax.inject.Singleton; -import net.runelite.api.ClanMember; -import net.runelite.api.ClanMemberManager; -import net.runelite.api.ClanMemberRank; +import net.runelite.api.FriendsChatMember; +import net.runelite.api.FriendsChatManager; +import net.runelite.api.FriendsChatRank; import net.runelite.api.Client; import net.runelite.api.GameState; import net.runelite.api.IndexedSprite; import net.runelite.api.SpriteID; -import net.runelite.api.events.ClanChanged; +import net.runelite.api.events.FriendsChatChanged; import net.runelite.api.events.GameStateChanged; import net.runelite.client.eventbus.Subscribe; import net.runelite.client.util.ImageUtil; import net.runelite.client.util.Text; @Singleton -public class ClanManager +public class FriendChatManager { - private static final int[] CLANCHAT_IMAGES = + private static final int[] RANK_IMAGES = { - SpriteID.CLAN_CHAT_RANK_SMILEY_FRIEND, - SpriteID.CLAN_CHAT_RANK_SINGLE_CHEVRON_RECRUIT, - SpriteID.CLAN_CHAT_RANK_DOUBLE_CHEVRON_CORPORAL, - SpriteID.CLAN_CHAT_RANK_TRIPLE_CHEVRON_SERGEANT, - SpriteID.CLAN_CHAT_RANK_BRONZE_STAR_LIEUTENANT, - SpriteID.CLAN_CHAT_RANK_SILVER_STAR_CAPTAIN, - SpriteID.CLAN_CHAT_RANK_GOLD_STAR_GENERAL, - SpriteID.CLAN_CHAT_RANK_KEY_CHANNEL_OWNER, - SpriteID.CLAN_CHAT_RANK_CROWN_JAGEX_MODERATOR, + SpriteID.FRIENDS_CHAT_RANK_SMILEY_FRIEND, + SpriteID.FRIENDS_CHAT_RANK_SINGLE_CHEVRON_RECRUIT, + SpriteID.FRIENDS_CHAT_RANK_DOUBLE_CHEVRON_CORPORAL, + SpriteID.FRIENDS_CHAT_RANK_TRIPLE_CHEVRON_SERGEANT, + SpriteID.FRIENDS_CHAT_RANK_BRONZE_STAR_LIEUTENANT, + SpriteID.FRIENDS_CHAT_RANK_SILVER_STAR_CAPTAIN, + SpriteID.FRIENDS_CHAT_RANK_GOLD_STAR_GENERAL, + SpriteID.FRIENDS_CHAT_RANK_KEY_CHANNEL_OWNER, + SpriteID.FRIENDS_CHAT_RANK_CROWN_JAGEX_MODERATOR, }; - private static final Dimension CLANCHAT_IMAGE_DIMENSION = new Dimension(11, 11); - private static final Color CLANCHAT_IMAGE_OUTLINE_COLOR = new Color(33, 33, 33); + private static final Dimension IMAGE_DIMENSION = new Dimension(11, 11); + private static final Color IMAGE_OUTLINE_COLOR = new Color(33, 33, 33); private final Client client; private final SpriteManager spriteManager; - private final BufferedImage[] clanChatImages = new BufferedImage[CLANCHAT_IMAGES.length]; + private final BufferedImage[] rankImages = new BufferedImage[RANK_IMAGES.length]; - private final LoadingCache clanRanksCache = CacheBuilder.newBuilder() + private final LoadingCache ranksCache = CacheBuilder.newBuilder() .maximumSize(100) .expireAfterWrite(1, TimeUnit.MINUTES) - .build(new CacheLoader() + .build(new CacheLoader() { @Override - public ClanMemberRank load(@Nonnull String key) + public FriendsChatRank load(@Nonnull String key) { - final ClanMemberManager clanMemberManager = client.getClanMemberManager(); - if (clanMemberManager == null) + final FriendsChatManager friendsChatManager = client.getFriendsChatManager(); + if (friendsChatManager == null) { - return ClanMemberRank.UNRANKED; + return FriendsChatRank.UNRANKED; } - ClanMember clanMember = clanMemberManager.findByName(sanitize(key)); - return clanMember != null ? clanMember.getRank() : ClanMemberRank.UNRANKED; + FriendsChatMember friendsChatMember = friendsChatManager.findByName(sanitize(key)); + return friendsChatMember != null ? friendsChatMember.getRank() : FriendsChatRank.UNRANKED; } }); private int offset; @Inject - private ClanManager(Client client, SpriteManager spriteManager) + private FriendChatManager(Client client, SpriteManager spriteManager) { this.client = client; this.spriteManager = spriteManager; } - public boolean isClanMember(String name) + public boolean isMember(String name) { - ClanMemberManager clanMemberManager = client.getClanMemberManager(); - return clanMemberManager != null && clanMemberManager.findByName(name) != null; + FriendsChatManager friendsChatManager = client.getFriendsChatManager(); + return friendsChatManager != null && friendsChatManager.findByName(name) != null; } - public ClanMemberRank getRank(String playerName) + public FriendsChatRank getRank(String playerName) { - return clanRanksCache.getUnchecked(playerName); + return ranksCache.getUnchecked(playerName); } @Nullable - public BufferedImage getClanImage(final ClanMemberRank clanMemberRank) + public BufferedImage getRankImage(final FriendsChatRank friendsChatRank) { - if (clanMemberRank == ClanMemberRank.UNRANKED) + if (friendsChatRank == FriendsChatRank.UNRANKED) { return null; } - return clanChatImages[clanMemberRank.ordinal() - 1]; + return rankImages[friendsChatRank.ordinal() - 1]; } - public int getIconNumber(final ClanMemberRank clanMemberRank) + public int getIconNumber(final FriendsChatRank friendsChatRank) { - return offset + clanMemberRank.ordinal() - 1; + return offset + friendsChatRank.ordinal() - 1; } @Subscribe @@ -131,17 +131,17 @@ public class ClanManager { if (gameStateChanged.getGameState() == GameState.LOGIN_SCREEN && offset == 0) { - loadClanChatIcons(); + loadRankIcons(); } } @Subscribe - public void onClanChanged(ClanChanged clanChanged) + public void onFriendsChatChanged(FriendsChatChanged friendsChatChanged) { - clanRanksCache.invalidateAll(); + ranksCache.invalidateAll(); } - private void loadClanChatIcons() + private void loadRankIcons() { { IndexedSprite[] modIcons = client.getModIcons(); @@ -151,21 +151,21 @@ public class ClanManager new BufferedImage(modIcons[0].getWidth(), modIcons[0].getHeight(), BufferedImage.TYPE_INT_ARGB), client); - modIcons = Arrays.copyOf(modIcons, offset + CLANCHAT_IMAGES.length); + modIcons = Arrays.copyOf(modIcons, offset + RANK_IMAGES.length); Arrays.fill(modIcons, offset, modIcons.length, blank); client.setModIcons(modIcons); } - for (int i = 0; i < CLANCHAT_IMAGES.length; i++) + for (int i = 0; i < RANK_IMAGES.length; i++) { final int fi = i; - spriteManager.getSpriteAsync(CLANCHAT_IMAGES[i], 0, sprite -> + spriteManager.getSpriteAsync(RANK_IMAGES[i], 0, sprite -> { IndexedSprite[] modIcons = client.getModIcons(); - clanChatImages[fi] = clanChatImageFromSprite(sprite); - modIcons[offset + fi] = ImageUtil.getImageIndexedSprite(clanChatImages[fi], client); + rankImages[fi] = friendsChatImageFromSprite(sprite); + modIcons[offset + fi] = ImageUtil.getImageIndexedSprite(rankImages[fi], client); }); } } @@ -176,9 +176,9 @@ public class ClanManager return cleaned.replace('\u00A0', ' '); } - private static BufferedImage clanChatImageFromSprite(final BufferedImage clanSprite) + private static BufferedImage friendsChatImageFromSprite(final BufferedImage sprite) { - final BufferedImage clanChatCanvas = ImageUtil.resizeCanvas(clanSprite, CLANCHAT_IMAGE_DIMENSION.width, CLANCHAT_IMAGE_DIMENSION.height); - return ImageUtil.outlineImage(clanChatCanvas, CLANCHAT_IMAGE_OUTLINE_COLOR); + final BufferedImage canvas = ImageUtil.resizeCanvas(sprite, IMAGE_DIMENSION.width, IMAGE_DIMENSION.height); + return ImageUtil.outlineImage(canvas, IMAGE_OUTLINE_COLOR); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterConfig.java index 86eff01756..c1c2378934 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterConfig.java @@ -89,11 +89,11 @@ public interface ChatFilterConfig extends Config @ConfigItem( keyName = "filterClan", - name = "Filter Clan Chat Members", - description = "Filter your clan chat members' messages", + name = "Filter Friends Chat Members", + description = "Filter your friends chat members' messages", position = 6 ) - default boolean filterClan() + default boolean filterFriendsChat() { return false; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterPlugin.java index 0944073594..1e413ea759 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterPlugin.java @@ -58,7 +58,7 @@ import net.runelite.api.events.ScriptCallbackEvent; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; -import net.runelite.client.game.ClanManager; +import net.runelite.client.game.FriendChatManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.util.Text; @@ -118,7 +118,7 @@ public class ChatFilterPlugin extends Plugin private ChatFilterConfig config; @Inject - private ClanManager clanManager; + private FriendChatManager friendChatManager; @Provides ChatFilterConfig provideConfig(ConfigManager configManager) @@ -262,7 +262,7 @@ public class ChatFilterPlugin extends Plugin boolean isMessageFromSelf = playerName.equals(client.getLocalPlayer().getName()); return !isMessageFromSelf && (config.filterFriends() || !client.isFriended(playerName, false)) && - (config.filterClan() || !clanManager.isClanMember(playerName)); + (config.filterFriendsChat() || !friendChatManager.isMember(playerName)); } String censorMessage(final String username, final String message) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/entityhider/EntityHiderConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/entityhider/EntityHiderConfig.java index 4fdc717182..d3ee118b8c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/entityhider/EntityHiderConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/entityhider/EntityHiderConfig.java @@ -68,10 +68,10 @@ public interface EntityHiderConfig extends Config @ConfigItem( position = 4, keyName = "hideClanMates", - name = "Hide Clan Mates", - description = "Configures whether or not clan mates are hidden" + name = "Hide Friends Chat members", + description = "Configures whether or not friends chat members are hidden" ) - default boolean hideClanMates() + default boolean hideFriendsChatMembers() { return false; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/entityhider/EntityHiderPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/entityhider/EntityHiderPlugin.java index 25d6625e49..155bc6cc38 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/entityhider/EntityHiderPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/entityhider/EntityHiderPlugin.java @@ -87,7 +87,7 @@ public class EntityHiderPlugin extends Plugin client.setPlayersHidden2D(config.hidePlayers2D()); client.setFriendsHidden(config.hideFriends()); - client.setClanMatesHidden(config.hideClanMates()); + client.setFriendsChatMembersHidden(config.hideFriendsChatMembers()); client.setLocalPlayerHidden(config.hideLocalPlayer()); client.setLocalPlayerHidden2D(config.hideLocalPlayer2D()); @@ -111,7 +111,7 @@ public class EntityHiderPlugin extends Plugin client.setPlayersHidden2D(false); client.setFriendsHidden(false); - client.setClanMatesHidden(false); + client.setFriendsChatMembersHidden(false); client.setLocalPlayerHidden(false); client.setLocalPlayerHidden2D(false); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanActivityType.java b/runelite-client/src/main/java/net/runelite/client/plugins/friendschat/ActivityType.java similarity index 95% rename from runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanActivityType.java rename to runelite-client/src/main/java/net/runelite/client/plugins/friendschat/ActivityType.java index 86cc5e60a5..242090392f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanActivityType.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/friendschat/ActivityType.java @@ -22,9 +22,9 @@ * (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.clanchat; +package net.runelite.client.plugins.friendschat; -enum ClanActivityType +enum ActivityType { JOINED, LEFT diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanChatConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/friendschat/FriendsChatConfig.java similarity index 79% rename from runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanChatConfig.java rename to runelite-client/src/main/java/net/runelite/client/plugins/friendschat/FriendsChatConfig.java index 3a7dbfa20d..5ea7df3635 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanChatConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/friendschat/FriendsChatConfig.java @@ -22,24 +22,24 @@ * (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.clanchat; +package net.runelite.client.plugins.friendschat; import java.awt.Color; -import net.runelite.api.ClanMemberRank; +import net.runelite.api.FriendsChatRank; import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; -@ConfigGroup("clanchat") -public interface ClanChatConfig extends Config +@ConfigGroup("clanchat") // group name from the old plugin +public interface FriendsChatConfig extends Config { @ConfigItem( keyName = "clanChatIcons", - name = "Clan Chat Icons", - description = "Show clan chat icons next to clan members.", + name = "Chat Icons", + description = "Show friends chat chat icons next to members.", position = 1 ) - default boolean clanChatIcons() + default boolean chatIcons() { return true; } @@ -47,7 +47,7 @@ public interface ClanChatConfig extends Config @ConfigItem( keyName = "recentChats", name = "Recent Chats", - description = "Show recent clan chats.", + description = "Show recent friends chats.", position = 2 ) default boolean recentChats() @@ -57,11 +57,11 @@ public interface ClanChatConfig extends Config @ConfigItem( keyName = "clanCounter", - name = "Clan Members Counter", - description = "Show the amount of clan members near you.", + name = "Members Counter", + description = "Show the amount of friends chat members near you.", position = 3 ) - default boolean showClanCounter() + default boolean showCounter() { return false; } @@ -101,15 +101,15 @@ public interface ClanChatConfig extends Config description = "Only show join/leave messages for members at or above this rank.", position = 5 ) - default ClanMemberRank joinLeaveRank() + default FriendsChatRank joinLeaveRank() { - return ClanMemberRank.UNRANKED; + return FriendsChatRank.UNRANKED; } @ConfigItem( keyName = "privateMessageIcons", name = "Private Message Icons", - description = "Add clan chat rank icons to private messages received from clan mates.", + description = "Add rank icons to private messages received from members.", position = 6 ) default boolean privateMessageIcons() @@ -120,7 +120,7 @@ public interface ClanChatConfig extends Config @ConfigItem( keyName = "publicChatIcons", name = "Public Chat Icons", - description = "Add clan chat rank icons to public chat messages from clan mates.", + description = "Add rank icons to public chat messages from members.", position = 7 ) default boolean publicChatIcons() @@ -130,11 +130,11 @@ public interface ClanChatConfig extends Config @ConfigItem( keyName = "clanTabChat", - name = "Clan Tab Chat", - description = "Allows clan chat without prepending '/' to messages when on clan tab", + name = "Tab Chat", + description = "Allows friends chat chat without prepending '/' to messages when on the friends chat tab", position = 8 ) - default boolean clanTabChat() + default boolean friendsChatTabChat() { return false; } @@ -164,7 +164,7 @@ public interface ClanChatConfig extends Config @ConfigItem( keyName = "showIgnoresColor", name = "Ignored color", - description = "Allows you to change the color of the ignored players in your clan chat", + description = "Allows you to change the color of the ignored players in your friends chat", position = 11 ) default Color showIgnoresColor() diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanChatPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/friendschat/FriendsChatPlugin.java similarity index 61% rename from runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanChatPlugin.java rename to runelite-client/src/main/java/net/runelite/client/plugins/friendschat/FriendsChatPlugin.java index 1e51d1b4df..e442606192 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanChatPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/friendschat/FriendsChatPlugin.java @@ -24,7 +24,7 @@ * (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.clanchat; +package net.runelite.client.plugins.friendschat; import com.google.common.base.Strings; import com.google.common.collect.Lists; @@ -42,9 +42,9 @@ import java.util.Map; import javax.inject.Inject; import net.runelite.api.ChatLineBuffer; import net.runelite.api.ChatMessageType; -import net.runelite.api.ClanMember; -import net.runelite.api.ClanMemberManager; -import net.runelite.api.ClanMemberRank; +import net.runelite.api.FriendsChatMember; +import net.runelite.api.FriendsChatManager; +import net.runelite.api.FriendsChatRank; import net.runelite.api.Client; import net.runelite.api.GameState; import net.runelite.api.Ignore; @@ -56,9 +56,9 @@ import net.runelite.api.SpriteID; import net.runelite.api.VarClientStr; import net.runelite.api.Varbits; import net.runelite.api.events.ChatMessage; -import net.runelite.api.events.ClanChanged; -import net.runelite.api.events.ClanMemberJoined; -import net.runelite.api.events.ClanMemberLeft; +import net.runelite.api.events.FriendsChatChanged; +import net.runelite.api.events.FriendsChatMemberJoined; +import net.runelite.api.events.FriendsChatMemberLeft; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameTick; import net.runelite.api.events.PlayerDespawned; @@ -74,28 +74,28 @@ import net.runelite.client.chat.ChatMessageBuilder; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.ConfigChanged; -import net.runelite.client.game.ClanManager; +import net.runelite.client.game.FriendChatManager; import net.runelite.client.game.SpriteManager; import net.runelite.client.game.chatbox.ChatboxPanelManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; -import static net.runelite.client.ui.JagexColors.CHAT_CLAN_NAME_OPAQUE_BACKGROUND; -import static net.runelite.client.ui.JagexColors.CHAT_CLAN_NAME_TRANSPARENT_BACKGROUND; -import static net.runelite.client.ui.JagexColors.CHAT_CLAN_TEXT_OPAQUE_BACKGROUND; -import static net.runelite.client.ui.JagexColors.CHAT_CLAN_TEXT_TRANSPARENT_BACKGROUND; +import static net.runelite.client.ui.JagexColors.CHAT_FC_NAME_OPAQUE_BACKGROUND; +import static net.runelite.client.ui.JagexColors.CHAT_FC_NAME_TRANSPARENT_BACKGROUND; +import static net.runelite.client.ui.JagexColors.CHAT_FC_TEXT_OPAQUE_BACKGROUND; +import static net.runelite.client.ui.JagexColors.CHAT_FC_TEXT_TRANSPARENT_BACKGROUND; import net.runelite.client.ui.overlay.infobox.InfoBoxManager; import net.runelite.client.util.Text; @PluginDescriptor( - name = "Clan Chat", - description = "Add rank icons to users talking in clan chat", - tags = {"icons", "rank", "recent"} + name = "Friends Chat", + description = "Add rank icons to users talking in friends chat", + tags = {"icons", "rank", "recent", "clan"} ) -public class ClanChatPlugin extends Plugin +public class FriendsChatPlugin extends Plugin { private static final int MAX_CHATS = 10; - private static final String CLAN_CHAT_TITLE = "CC"; - private static final String RECENT_TITLE = "Recent CCs"; + private static final String TITLE = "FC"; + private static final String RECENT_TITLE = "Recent FCs"; private static final int JOIN_LEAVE_DURATION = 20; private static final int MESSAGE_DELAY = 10; @@ -103,10 +103,10 @@ public class ClanChatPlugin extends Plugin private Client client; @Inject - private ClanManager clanManager; + private FriendChatManager friendChatManager; @Inject - private ClanChatConfig config; + private FriendsChatConfig config; @Inject private InfoBoxManager infoBoxManager; @@ -121,21 +121,21 @@ public class ClanChatPlugin extends Plugin private ChatboxPanelManager chatboxPanelManager; private List chats = new ArrayList<>(); - private List clanMembers = new ArrayList<>(); - private ClanChatIndicator clanMemberCounter; + private List members = new ArrayList<>(); + private MembersIndicator membersIndicator; /** * queue of temporary messages added to the client */ - private final Deque clanJoinMessages = new ArrayDeque<>(); - private Map activityBuffer = new HashMap<>(); - private int clanJoinedTick; + private final Deque joinMessages = new ArrayDeque<>(); + private Map activityBuffer = new HashMap<>(); + private int joinedTick; private boolean kickConfirmed = false; @Provides - ClanChatConfig getConfig(ConfigManager configManager) + FriendsChatConfig getConfig(ConfigManager configManager) { - return configManager.getConfig(ClanChatConfig.class); + return configManager.getConfig(FriendsChatConfig.class); } @Override @@ -153,9 +153,9 @@ public class ClanChatPlugin extends Plugin public void shutDown() { clientThread.invoke(() -> colorIgnoredPlayers(Color.WHITE)); - clanMembers.clear(); - removeClanCounter(); - resetClanChats(); + members.clear(); + resetCounter(); + resetChats(); } @Subscribe @@ -165,16 +165,16 @@ public class ClanChatPlugin extends Plugin { if (!config.recentChats()) { - resetClanChats(); + resetChats(); } - if (config.showClanCounter()) + if (config.showCounter()) { - clientThread.invoke(this::addClanCounter); + clientThread.invoke(this::addCounter); } else { - removeClanCounter(); + resetCounter(); } Color ignoreColor = config.showIgnores() ? config.showIgnoresColor() : Color.WHITE; @@ -183,9 +183,9 @@ public class ClanChatPlugin extends Plugin } @Subscribe - public void onClanMemberJoined(ClanMemberJoined event) + public void onFriendsChatMemberJoined(FriendsChatMemberJoined event) { - final ClanMember member = event.getMember(); + final FriendsChatMember member = event.getMember(); if (member.getWorld() == client.getWorld()) { @@ -196,15 +196,15 @@ public class ClanChatPlugin extends Plugin { if (player != null && player != local && memberName.equals(Text.toJagexName(player.getName()))) { - clanMembers.add(player); - addClanCounter(); + members.add(player); + addCounter(); break; } } } - // clan members getting initialized isn't relevant - if (clanJoinedTick == client.getTickCount()) + // members getting initialized isn't relevant + if (joinedTick == client.getTickCount()) { return; } @@ -218,7 +218,7 @@ public class ClanChatPlugin extends Plugin // attempt to filter out world hopping joins if (!activityBuffer.containsKey(member.getName())) { - ClanMemberActivity joinActivity = new ClanMemberActivity(ClanActivityType.JOINED, + MemberActivity joinActivity = new MemberActivity(ActivityType.JOINED, member, client.getTickCount()); activityBuffer.put(member.getName(), joinActivity); } @@ -229,14 +229,14 @@ public class ClanChatPlugin extends Plugin } @Subscribe - public void onClanMemberLeft(ClanMemberLeft event) + public void onFriendsChatMemberLeft(FriendsChatMemberLeft event) { - final ClanMember member = event.getMember(); + final FriendsChatMember member = event.getMember(); if (member.getWorld() == client.getWorld()) { final String memberName = Text.toJagexName(member.getName()); - final Iterator each = clanMembers.iterator(); + final Iterator each = members.iterator(); while (each.hasNext()) { @@ -244,9 +244,9 @@ public class ClanChatPlugin extends Plugin { each.remove(); - if (clanMembers.isEmpty()) + if (members.isEmpty()) { - removeClanCounter(); + resetCounter(); } break; @@ -262,7 +262,7 @@ public class ClanChatPlugin extends Plugin if (!activityBuffer.containsKey(member.getName())) { - ClanMemberActivity leaveActivity = new ClanMemberActivity(ClanActivityType.LEFT, + MemberActivity leaveActivity = new MemberActivity(ActivityType.LEFT, member, client.getTickCount()); activityBuffer.put(member.getName(), leaveActivity); } @@ -280,21 +280,21 @@ public class ClanChatPlugin extends Plugin return; } - Widget clanChatTitleWidget = client.getWidget(WidgetInfo.CLAN_CHAT_TITLE); - if (clanChatTitleWidget != null) + Widget chatTitleWidget = client.getWidget(WidgetInfo.FRIENDS_CHAT_TITLE); + if (chatTitleWidget != null) { - Widget clanChatList = client.getWidget(WidgetInfo.CLAN_CHAT_LIST); - Widget owner = client.getWidget(WidgetInfo.CLAN_CHAT_OWNER); - ClanMemberManager clanMemberManager = client.getClanMemberManager(); - if (clanMemberManager != null && clanMemberManager.getCount() > 0) + Widget chatList = client.getWidget(WidgetInfo.FRIENDS_CHAT_LIST); + Widget owner = client.getWidget(WidgetInfo.FRIENDS_CHAT_OWNER); + FriendsChatManager friendsChatManager = client.getFriendsChatManager(); + if (friendsChatManager != null && friendsChatManager.getCount() > 0) { - clanChatTitleWidget.setText(CLAN_CHAT_TITLE + " (" + clanMemberManager.getCount() + "/100)"); + chatTitleWidget.setText(TITLE + " (" + friendsChatManager.getCount() + "/100)"); } - else if (config.recentChats() && clanChatList.getChildren() == null && !Strings.isNullOrEmpty(owner.getText())) + else if (config.recentChats() && chatList.getChildren() == null && !Strings.isNullOrEmpty(owner.getText())) { - clanChatTitleWidget.setText(RECENT_TITLE); + chatTitleWidget.setText(RECENT_TITLE); - loadClanChats(); + loadFriendsChats(); } } @@ -303,32 +303,32 @@ public class ClanChatPlugin extends Plugin return; } - timeoutClanMessages(); + timeoutMessages(); - addClanActivityMessages(); + addActivityMessages(); } - private void timeoutClanMessages() + private void timeoutMessages() { - if (clanJoinMessages.isEmpty()) + if (joinMessages.isEmpty()) { return; } boolean removed = false; - for (Iterator it = clanJoinMessages.iterator(); it.hasNext(); ) + for (Iterator it = joinMessages.iterator(); it.hasNext(); ) { - ClanJoinMessage clanJoinMessage = it.next(); - MessageNode messageNode = clanJoinMessage.getMessageNode(); - final int createdTick = clanJoinMessage.getTick(); + MemberJoinMessage joinMessage = it.next(); + MessageNode messageNode = joinMessage.getMessageNode(); + final int createdTick = joinMessage.getTick(); if (client.getTickCount() > createdTick + JOIN_LEAVE_DURATION) { it.remove(); // If this message has been reused since, it will get a different id - if (clanJoinMessage.getGetMessageId() == messageNode.getId()) + if (joinMessage.getGetMessageId() == messageNode.getId()) { ChatLineBuffer ccInfoBuffer = client.getChatLineMap().get(ChatMessageType.FRIENDSCHATNOTIFICATION.getType()); if (ccInfoBuffer != null) @@ -351,50 +351,50 @@ public class ClanChatPlugin extends Plugin } } - private void addClanActivityMessages() + private void addActivityMessages() { - ClanMemberManager clanMemberManager = client.getClanMemberManager(); - if (clanMemberManager == null || activityBuffer.isEmpty()) + FriendsChatManager friendsChatManager = client.getFriendsChatManager(); + if (friendsChatManager == null || activityBuffer.isEmpty()) { return; } - Iterator activityIt = activityBuffer.values().iterator(); + Iterator activityIt = activityBuffer.values().iterator(); while (activityIt.hasNext()) { - ClanMemberActivity activity = activityIt.next(); + MemberActivity activity = activityIt.next(); if (activity.getTick() < client.getTickCount() - MESSAGE_DELAY) { activityIt.remove(); - addActivityMessage(clanMemberManager, activity.getMember(), activity.getActivityType()); + addActivityMessage(friendsChatManager, activity.getMember(), activity.getActivityType()); } } } - private void addActivityMessage(ClanMemberManager clanMemberManager, ClanMember member, ClanActivityType activityType) + private void addActivityMessage(FriendsChatManager friendsChatManager, FriendsChatMember member, ActivityType activityType) { - final String activityMessage = activityType == ClanActivityType.JOINED ? " has joined." : " has left."; - final ClanMemberRank rank = member.getRank(); - Color textColor = CHAT_CLAN_TEXT_OPAQUE_BACKGROUND; - Color channelColor = CHAT_CLAN_NAME_OPAQUE_BACKGROUND; + final String activityMessage = activityType == ActivityType.JOINED ? " has joined." : " has left."; + final FriendsChatRank rank = member.getRank(); + Color textColor = CHAT_FC_TEXT_OPAQUE_BACKGROUND; + Color channelColor = CHAT_FC_NAME_OPAQUE_BACKGROUND; int rankIcon = -1; if (client.isResized() && client.getVar(Varbits.TRANSPARENT_CHATBOX) == 1) { - textColor = CHAT_CLAN_TEXT_TRANSPARENT_BACKGROUND; - channelColor = CHAT_CLAN_NAME_TRANSPARENT_BACKGROUND; + textColor = CHAT_FC_TEXT_TRANSPARENT_BACKGROUND; + channelColor = CHAT_FC_NAME_TRANSPARENT_BACKGROUND; } - if (config.clanChatIcons() && rank != null && rank != ClanMemberRank.UNRANKED) + if (config.chatIcons() && rank != null && rank != FriendsChatRank.UNRANKED) { - rankIcon = clanManager.getIconNumber(rank); + rankIcon = friendChatManager.getIconNumber(rank); } ChatMessageBuilder message = new ChatMessageBuilder() .append("[") - .append(channelColor, clanMemberManager.getClanChatName()); + .append(channelColor, friendsChatManager.getName()); if (rankIcon > -1) { message @@ -412,16 +412,16 @@ public class ClanChatPlugin extends Plugin final MessageNode[] lines = chatLineBuffer.getLines(); final MessageNode line = lines[0]; - ClanJoinMessage clanJoinMessage = new ClanJoinMessage(line, line.getId(), client.getTickCount()); - clanJoinMessages.addLast(clanJoinMessage); + MemberJoinMessage joinMessage = new MemberJoinMessage(line, line.getId(), client.getTickCount()); + joinMessages.addLast(joinMessage); } @Subscribe public void onVarClientStrChanged(VarClientStrChanged strChanged) { - if (strChanged.getIndex() == VarClientStr.RECENT_CLAN_CHAT.getIndex() && config.recentChats()) + if (strChanged.getIndex() == VarClientStr.RECENT_FRIENDS_CHAT.getIndex() && config.recentChats()) { - updateRecentChat(client.getVar(VarClientStr.RECENT_CLAN_CHAT)); + updateRecentChat(client.getVar(VarClientStr.RECENT_FRIENDS_CHAT)); } } @@ -433,8 +433,8 @@ public class ClanChatPlugin extends Plugin return; } - ClanMemberManager clanMemberManager = client.getClanMemberManager(); - if (clanMemberManager == null || clanMemberManager.getCount() == 0) + FriendsChatManager friendsChatManager = client.getFriendsChatManager(); + if (friendsChatManager == null || friendsChatManager.getCount() == 0) { return; } @@ -456,7 +456,7 @@ public class ClanChatPlugin extends Plugin } break; case FRIENDSCHAT: - if (!config.clanChatIcons()) + if (!config.chatIcons()) { return; } @@ -465,7 +465,7 @@ public class ClanChatPlugin extends Plugin return; } - insertClanRankIcon(chatMessage); + insertRankIcon(chatMessage); } @Subscribe @@ -475,10 +475,10 @@ public class ClanChatPlugin extends Plugin if (gameState == GameState.LOGIN_SCREEN || gameState == GameState.CONNECTION_LOST || gameState == GameState.HOPPING) { - clanMembers.clear(); - removeClanCounter(); + members.clear(); + resetCounter(); - clanJoinMessages.clear(); + joinMessages.clear(); } } @@ -488,33 +488,33 @@ public class ClanChatPlugin extends Plugin final Player local = client.getLocalPlayer(); final Player player = event.getPlayer(); - if (player != local && player.isClanMember()) + if (player != local && player.isFriendsChatMember()) { - clanMembers.add(player); - addClanCounter(); + members.add(player); + addCounter(); } } @Subscribe public void onPlayerDespawned(PlayerDespawned event) { - if (clanMembers.remove(event.getPlayer()) && clanMembers.isEmpty()) + if (members.remove(event.getPlayer()) && members.isEmpty()) { - removeClanCounter(); + resetCounter(); } } @Subscribe - public void onClanChanged(ClanChanged event) + public void onFriendsChatChanged(FriendsChatChanged event) { if (event.isJoined()) { - clanJoinedTick = client.getTickCount(); + joinedTick = client.getTickCount(); } else { - clanMembers.clear(); - removeClanCounter(); + members.clear(); + resetCounter(); } activityBuffer.clear(); @@ -525,16 +525,16 @@ public class ClanChatPlugin extends Plugin { switch (scriptCallbackEvent.getEventName()) { - case "clanchatInput": + case "friendsChatInput": { final int[] intStack = client.getIntStack(); final int size = client.getIntStackSize(); - // If the user accidentally adds a / when the config and the clan chat tab is active, handle it like a normal message - boolean alterClanChatDispatch = config.clanTabChat() && !client.getVar(VarClientStr.CHATBOX_TYPED_TEXT).startsWith("/"); - intStack[size - 1] = alterClanChatDispatch ? 1 : 0; + // If the user accidentally adds a / when the config and the friends chat chat tab is active, handle it like a normal message + boolean alterDispatch = config.friendsChatTabChat() && !client.getVar(VarClientStr.CHATBOX_TYPED_TEXT).startsWith("/"); + intStack[size - 1] = alterDispatch ? 1 : 0; break; } - case "confirmClanKick": + case "confirmFriendsChatKick": { if (!config.confirmKicks() || kickConfirmed) { @@ -561,24 +561,24 @@ public class ClanChatPlugin extends Plugin @Subscribe public void onScriptPostFired(ScriptPostFired event) { - if (event.getScriptId() == ScriptID.CLAN_CHAT_CHANNEL_BUILD && config.showIgnores()) + if (event.getScriptId() == ScriptID.FRIENDS_CHAT_CHANNEL_REBUILD && config.showIgnores()) { colorIgnoredPlayers(config.showIgnoresColor()); } } - int getClanAmount() + int getMembersSize() { - return clanMembers.size(); + return members.size(); } - private void insertClanRankIcon(final ChatMessage message) + private void insertRankIcon(final ChatMessage message) { - final ClanMemberRank rank = clanManager.getRank(message.getName()); + final FriendsChatRank rank = friendChatManager.getRank(message.getName()); - if (rank != null && rank != ClanMemberRank.UNRANKED) + if (rank != null && rank != FriendsChatRank.UNRANKED) { - int iconNumber = clanManager.getIconNumber(rank); + int iconNumber = friendChatManager.getIconNumber(rank); final String img = ""; if (message.getType() == ChatMessageType.FRIENDSCHAT) { @@ -594,38 +594,38 @@ public class ClanChatPlugin extends Plugin } } - private void resetClanChats() + private void resetChats() { - Widget clanChatList = client.getWidget(WidgetInfo.CLAN_CHAT_LIST); - Widget clanChatTitleWidget = client.getWidget(WidgetInfo.CLAN_CHAT_TITLE); + Widget chatList = client.getWidget(WidgetInfo.FRIENDS_CHAT_LIST); + Widget chatTitleWidget = client.getWidget(WidgetInfo.FRIENDS_CHAT_TITLE); - if (clanChatList == null) + if (chatList == null) { return; } - ClanMemberManager clanMemberManager = client.getClanMemberManager(); - if (clanMemberManager == null || clanMemberManager.getCount() == 0) + FriendsChatManager friendsChatManager = client.getFriendsChatManager(); + if (friendsChatManager == null || friendsChatManager.getCount() == 0) { - clanChatList.setChildren(null); + chatList.setChildren(null); } - clanChatTitleWidget.setText(CLAN_CHAT_TITLE); + chatTitleWidget.setText(TITLE); } - private void loadClanChats() + private void loadFriendsChats() { - Widget clanChatList = client.getWidget(WidgetInfo.CLAN_CHAT_LIST); - if (clanChatList == null) + Widget chatList = client.getWidget(WidgetInfo.FRIENDS_CHAT_LIST); + if (chatList == null) { return; } int y = 2; - clanChatList.setChildren(null); + chatList.setChildren(null); for (String chat : Lists.reverse(chats)) { - Widget widget = clanChatList.createChild(-1, WidgetType.TEXT); + Widget widget = chatList.createChild(-1, WidgetType.TEXT); widget.setFontId(494); widget.setTextColor(0xffffff); widget.setText(chat); @@ -659,22 +659,22 @@ public class ClanChatPlugin extends Plugin config.chatsData(Text.toCSV(chats)); } - private void removeClanCounter() + private void resetCounter() { - infoBoxManager.removeInfoBox(clanMemberCounter); - clanMemberCounter = null; + infoBoxManager.removeInfoBox(membersIndicator); + membersIndicator = null; } - private void addClanCounter() + private void addCounter() { - if (!config.showClanCounter() || clanMemberCounter != null || clanMembers.isEmpty()) + if (!config.showCounter() || membersIndicator != null || members.isEmpty()) { return; } - final BufferedImage image = spriteManager.getSprite(SpriteID.TAB_CLAN_CHAT, 0); - clanMemberCounter = new ClanChatIndicator(image, this); - infoBoxManager.addInfoBox(clanMemberCounter); + final BufferedImage image = spriteManager.getSprite(SpriteID.TAB_FRIENDS_CHAT, 0); + membersIndicator = new MembersIndicator(image, this); + infoBoxManager.addInfoBox(membersIndicator); } private void confirmKickPlayer(final String kickPlayerName) @@ -684,7 +684,7 @@ public class ClanChatPlugin extends Plugin clientThread.invoke(() -> { kickConfirmed = true; - client.runScript(ScriptID.CLAN_SEND_KICK, kickPlayerName); + client.runScript(ScriptID.FRIENDS_CHAT_SEND_KICK, kickPlayerName); kickConfirmed = false; }) ) @@ -694,19 +694,19 @@ public class ClanChatPlugin extends Plugin private void colorIgnoredPlayers(Color ignoreColor) { - Widget clanChatList = client.getWidget(WidgetInfo.CLAN_CHAT_LIST); - if (clanChatList == null || clanChatList.getChildren() == null) + Widget chatList = client.getWidget(WidgetInfo.FRIENDS_CHAT_LIST); + if (chatList == null || chatList.getChildren() == null) { return; } NameableContainer ignoreContainer = client.getIgnoreContainer(); // Iterate every 3 widgets, since the order of widgets is name, world, icon - for (int i = 0; i < clanChatList.getChildren().length; i += 3) + for (int i = 0; i < chatList.getChildren().length; i += 3) { - Widget listWidget = clanChatList.getChild(i); - String clanMemberName = listWidget.getText(); - if (clanMemberName.isEmpty() || ignoreContainer.findByName(clanMemberName) == null) + Widget listWidget = chatList.getChild(i); + String memberName = listWidget.getText(); + if (memberName.isEmpty() || ignoreContainer.findByName(memberName) == null) { continue; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanMemberActivity.java b/runelite-client/src/main/java/net/runelite/client/plugins/friendschat/MemberActivity.java similarity index 89% rename from runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanMemberActivity.java rename to runelite-client/src/main/java/net/runelite/client/plugins/friendschat/MemberActivity.java index 1cea036a95..8e3135b99d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanMemberActivity.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/friendschat/MemberActivity.java @@ -22,17 +22,17 @@ * (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.clanchat; +package net.runelite.client.plugins.friendschat; import lombok.AllArgsConstructor; import lombok.Value; -import net.runelite.api.ClanMember; +import net.runelite.api.FriendsChatMember; @Value @AllArgsConstructor -class ClanMemberActivity +class MemberActivity { - private ClanActivityType activityType; - private ClanMember member; + private ActivityType activityType; + private FriendsChatMember member; private Integer tick; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanJoinMessage.java b/runelite-client/src/main/java/net/runelite/client/plugins/friendschat/MemberJoinMessage.java similarity index 95% rename from runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanJoinMessage.java rename to runelite-client/src/main/java/net/runelite/client/plugins/friendschat/MemberJoinMessage.java index 8ac0b0069b..e90905d15c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanJoinMessage.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/friendschat/MemberJoinMessage.java @@ -22,13 +22,13 @@ * (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.clanchat; +package net.runelite.client.plugins.friendschat; import lombok.Value; import net.runelite.api.MessageNode; @Value -class ClanJoinMessage +class MemberJoinMessage { private final MessageNode messageNode; private final int getMessageId; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanChatIndicator.java b/runelite-client/src/main/java/net/runelite/client/plugins/friendschat/MembersIndicator.java similarity index 83% rename from runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanChatIndicator.java rename to runelite-client/src/main/java/net/runelite/client/plugins/friendschat/MembersIndicator.java index e8f7542d7d..99b488fd90 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanChatIndicator.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/friendschat/MembersIndicator.java @@ -22,32 +22,32 @@ * (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.clanchat; +package net.runelite.client.plugins.friendschat; import java.awt.Color; import java.awt.image.BufferedImage; import net.runelite.client.ui.overlay.infobox.Counter; -class ClanChatIndicator extends Counter +class MembersIndicator extends Counter { - private final ClanChatPlugin plugin; + private final FriendsChatPlugin plugin; - ClanChatIndicator(BufferedImage image, ClanChatPlugin plugin) + MembersIndicator(BufferedImage image, FriendsChatPlugin plugin) { - super(image, plugin, plugin.getClanAmount()); + super(image, plugin, plugin.getMembersSize()); this.plugin = plugin; } @Override public int getCount() { - return plugin.getClanAmount(); + return plugin.getMembersSize(); } @Override public String getTooltip() { - return plugin.getClanAmount() + " clan member(s) near you"; + return plugin.getMembersSize() + " friends chat member(s) near you"; } @Override diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePlugin.java index e7c18d9133..28073677b0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/HiscorePlugin.java @@ -155,7 +155,7 @@ public class HiscorePlugin extends Plugin int groupId = WidgetInfo.TO_GROUP(event.getActionParam1()); String option = event.getOption(); - if (groupId == WidgetInfo.FRIENDS_LIST.getGroupId() || groupId == WidgetInfo.CLAN_CHAT.getGroupId() || + if (groupId == WidgetInfo.FRIENDS_LIST.getGroupId() || groupId == WidgetInfo.FRIENDS_CHAT.getGroupId() || groupId == WidgetInfo.CHATBOX.getGroupId() && !KICK_OPTION.equals(option) || //prevent from adding for Kick option (interferes with the raiding party one) groupId == WidgetInfo.RAIDING_PARTY.getGroupId() || groupId == WidgetInfo.PRIVATE_CHAT_MESSAGE.getGroupId() || groupId == WidgetInfo.IGNORE_LIST.getGroupId()) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/NameAutocompleter.java b/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/NameAutocompleter.java index 1cdbaf526e..00cadc1e22 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/NameAutocompleter.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/hiscore/NameAutocompleter.java @@ -40,7 +40,7 @@ import javax.swing.text.Document; import javax.swing.text.JTextComponent; import lombok.NonNull; import lombok.extern.slf4j.Slf4j; -import net.runelite.api.ClanMemberManager; +import net.runelite.api.FriendsChatManager; import net.runelite.api.Client; import net.runelite.api.Friend; import net.runelite.api.Nameable; @@ -222,20 +222,20 @@ class NameAutocompleter implements KeyListener } } - // Search clan if a friend wasn't found + // Search friends chat if a friend wasn't found if (!autocompleteName.isPresent()) { - final ClanMemberManager clanMemberManager = client.getClanMemberManager(); - if (clanMemberManager != null) + final FriendsChatManager friendsChatManager = client.getFriendsChatManager(); + if (friendsChatManager != null) { - autocompleteName = Arrays.stream(clanMemberManager.getMembers()) + autocompleteName = Arrays.stream(friendsChatManager.getMembers()) .map(Nameable::getName) .filter(n -> pattern.matcher(n).matches()) .findFirst(); } } - // Search cached players if a clannie wasn't found. + // Search cached players if a friend wasn't found if (!autocompleteName.isPresent()) { final Player[] cachedPlayers = client.getCachedPlayers(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/SpriteOverride.java b/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/SpriteOverride.java index 49232a8909..4f0153ee2c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/SpriteOverride.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/SpriteOverride.java @@ -48,7 +48,7 @@ enum SpriteOverride TAB_MAGIC_SPELLBOOK_ANCIENT_MAGICKS(SpriteID.TAB_MAGIC_SPELLBOOK_ANCIENT_MAGICKS, AROUND_2005), TAB_MAGIC_SPELLBOOK_LUNAR(SpriteID.TAB_MAGIC_SPELLBOOK_LUNAR, AROUND_2005), TAB_MAGIC_SPELLBOOK_ARCEUUS(SpriteID.TAB_MAGIC_SPELLBOOK_ARCEUUS, AROUND_2005), - TAB_CLAN_CHAT(SpriteID.TAB_CLAN_CHAT, AROUND_2005, AROUND_2010), + TAB_CLAN_CHAT(SpriteID.TAB_FRIENDS_CHAT, AROUND_2005, AROUND_2010), TAB_FRIENDS(SpriteID.TAB_FRIENDS, AROUND_2005, AROUND_2010), TAB_IGNORES(SpriteID.TAB_IGNORES, AROUND_2005, AROUND_2010), TAB_LOGOUT(SpriteID.TAB_LOGOUT, AROUND_2005, AROUND_2010), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/WidgetOffset.java b/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/WidgetOffset.java index 49593ce66b..8b189e57eb 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/WidgetOffset.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/WidgetOffset.java @@ -46,8 +46,8 @@ enum WidgetOffset RESIZABLE_2010_PRAYER_ICON(Skin.AROUND_2010, WidgetInfo.RESIZABLE_VIEWPORT_PRAYER_ICON, 172, 1, null, null), RESIZABLE_2010_MAGIC_HIGHLIGHT(Skin.AROUND_2010, WidgetInfo.RESIZABLE_VIEWPORT_MAGIC_TAB, 205, 1, null, null), RESIZABLE_2010_MAGIC_ICON(Skin.AROUND_2010, WidgetInfo.RESIZABLE_VIEWPORT_MAGIC_ICON, 206, null, null, null), - RESIZABLE_2010_CLAN_CHAT_HIGHLIGHT(Skin.AROUND_2010, WidgetInfo.RESIZABLE_VIEWPORT_CLAN_CHAT_TAB, -4, 1, null, null), - RESIZABLE_2010_CLAN_CHAT_ICON(Skin.AROUND_2010, WidgetInfo.RESIZABLE_VIEWPORT_CLAN_CHAT_ICON, 2, 1, null, null), + RESIZABLE_2010_FRENDS_CHAT_HIGHLIGHT(Skin.AROUND_2010, WidgetInfo.RESIZABLE_VIEWPORT_FRIENDS_CHAT_TAB, -4, 1, null, null), + RESIZABLE_2010_FRIENDS_CHAT_ICON(Skin.AROUND_2010, WidgetInfo.RESIZABLE_VIEWPORT_FRIENDS_CHAT_ICON, 2, 1, null, null), RESIZABLE_2010_FRIENDS_HIGHLIGHT(Skin.AROUND_2010, WidgetInfo.RESIZABLE_VIEWPORT_FRIENDS_TAB, 35, 1, null, null), RESIZABLE_2010_FRIENDS_ICON(Skin.AROUND_2010, WidgetInfo.RESIZABLE_VIEWPORT_FRIENDS_ICON, 37, 1, null, null), RESIZABLE_2010_IGNORES_HIGHLIGHT(Skin.AROUND_2010, WidgetInfo.RESIZABLE_VIEWPORT_IGNORES_TAB, 69, 1, null, null), @@ -87,8 +87,8 @@ enum WidgetOffset FIXED_2010_PRAYER_ICON(Skin.AROUND_2010, WidgetInfo.FIXED_VIEWPORT_PRAYER_ICON, 178, 1, null, null), FIXED_2010_MAGIC_HIGHLIGHT(Skin.AROUND_2010, WidgetInfo.FIXED_VIEWPORT_MAGIC_TAB, 211, 1, null, null), FIXED_2010_MAGIC_ICON(Skin.AROUND_2010, WidgetInfo.FIXED_VIEWPORT_MAGIC_ICON, 212, 1, null, null), - FIXED_2010_CLAN_CHAT_HIGHLIGHT(Skin.AROUND_2010, WidgetInfo.FIXED_VIEWPORT_CLAN_CHAT_TAB, 0, 1, null, null), - FIXED_2010_CLAN_CHAT_ICON(Skin.AROUND_2010, WidgetInfo.FIXED_VIEWPORT_CLAN_CHAT_ICON, 5, null, null, null), + FIXED_2010_FRIENDS_CHAT_HIGHLIGHT(Skin.AROUND_2010, WidgetInfo.FIXED_VIEWPORT_FRIENDS_CHAT_TAB, 0, 1, null, null), + FIXED_2010_FRIENDS_CHAT_ICON(Skin.AROUND_2010, WidgetInfo.FIXED_VIEWPORT_FRIENDS_CHAT_ICON, 5, null, null, null), FIXED_2010_FRIENDS_HIGHLIGHT(Skin.AROUND_2010, WidgetInfo.FIXED_VIEWPORT_FRIENDS_TAB, 38, 1, 33, null), FIXED_2010_FRIENDS_ICON(Skin.AROUND_2010, WidgetInfo.FIXED_VIEWPORT_FRIENDS_ICON, 40, null, null, null), FIXED_2010_IGNORES_HIGHLIGHT(Skin.AROUND_2010, WidgetInfo.FIXED_VIEWPORT_IGNORES_TAB, 72, 1, null, null), @@ -131,8 +131,8 @@ enum WidgetOffset FIXED_2005_PRAYER_ICON(Skin.AROUND_2005, WidgetInfo.FIXED_VIEWPORT_PRAYER_ICON, 178, null, null, null), FIXED_2005_MAGIC_HIGHLIGHT(Skin.AROUND_2005, WidgetInfo.FIXED_VIEWPORT_MAGIC_TAB, 209, 1, 30, null), FIXED_2005_MAGIC_ICON(Skin.AROUND_2005, WidgetInfo.FIXED_VIEWPORT_MAGIC_ICON, 206, 2, null, null), - FIXED_2005_CLAN_CHAT_HIGHLIGHT(Skin.AROUND_2005, WidgetInfo.FIXED_VIEWPORT_CLAN_CHAT_TAB, 15, null, null, null), - FIXED_2005_CLAN_CHAT_ICON(Skin.AROUND_2005, WidgetInfo.FIXED_VIEWPORT_CLAN_CHAT_ICON, 22, 0, null, null), + FIXED_2005_FRIENDS_CHAT_HIGHLIGHT(Skin.AROUND_2005, WidgetInfo.FIXED_VIEWPORT_FRIENDS_CHAT_TAB, 15, null, null, null), + FIXED_2005_FRIENDS_CHAT_ICON(Skin.AROUND_2005, WidgetInfo.FIXED_VIEWPORT_FRIENDS_CHAT_ICON, 22, 0, null, null), FIXED_2005_FRIENDS_HIGHLIGHT(Skin.AROUND_2005, WidgetInfo.FIXED_VIEWPORT_FRIENDS_TAB, 51, null, 30, null), FIXED_2005_FRIENDS_ICON(Skin.AROUND_2005, WidgetInfo.FIXED_VIEWPORT_FRIENDS_ICON, 49, -1, null, null), FIXED_2005_IGNORES_HIGHLIGHT(Skin.AROUND_2005, WidgetInfo.FIXED_VIEWPORT_IGNORES_TAB, 79, null, 30, null), @@ -163,8 +163,8 @@ enum WidgetOffset FIXED_2006_PRAYER_ICON(Skin.AROUND_2006, WidgetInfo.FIXED_VIEWPORT_PRAYER_ICON, 180, 2, null, null), FIXED_2006_MAGIC_HIGHLIGHT(Skin.AROUND_2006, WidgetInfo.FIXED_VIEWPORT_MAGIC_TAB, 209, 1, 30, null), FIXED_2006_MAGIC_ICON(Skin.AROUND_2006, WidgetInfo.FIXED_VIEWPORT_MAGIC_ICON, 207, 4, null, null), - FIXED_2006_CLAN_CHAT_HIGHLIGHT(Skin.AROUND_2006, WidgetInfo.FIXED_VIEWPORT_CLAN_CHAT_TAB, 15, null, null, null), - FIXED_2006_CLAN_CHAT_ICON(Skin.AROUND_2006, WidgetInfo.FIXED_VIEWPORT_CLAN_CHAT_ICON, 22, -1, null, null), + FIXED_2006_FRIENDS_CHAT_HIGHLIGHT(Skin.AROUND_2006, WidgetInfo.FIXED_VIEWPORT_FRIENDS_CHAT_TAB, 15, null, null, null), + FIXED_2006_FRIENDS_CHAT_ICON(Skin.AROUND_2006, WidgetInfo.FIXED_VIEWPORT_FRIENDS_CHAT_ICON, 22, -1, null, null), FIXED_2006_FRIENDS_HIGHLIGHT(Skin.AROUND_2006, WidgetInfo.FIXED_VIEWPORT_FRIENDS_TAB, 51, null, 30, null), FIXED_2006_FRIENDS_ICON(Skin.AROUND_2006, WidgetInfo.FIXED_VIEWPORT_FRIENDS_ICON, 49, 1, null, null), FIXED_2006_IGNORES_HIGHLIGHT(Skin.AROUND_2006, WidgetInfo.FIXED_VIEWPORT_IGNORES_TAB, 79, null, 30, null), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/WidgetOverride.java b/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/WidgetOverride.java index 1998fb3808..1dfbf80766 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/WidgetOverride.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/interfacestyles/WidgetOverride.java @@ -34,7 +34,7 @@ enum WidgetOverride { FIXED_CORNER_TOP_LEFT_2005(Skin.AROUND_2005, "1026", WidgetInfo.FIXED_VIEWPORT_COMBAT_TAB), FIXED_CORNER_TOP_RIGHT_2005(Skin.AROUND_2005, "1027", WidgetInfo.FIXED_VIEWPORT_MAGIC_TAB), - FIXED_CORNER_BOTTOM_LEFT_2005(Skin.AROUND_2005, "1028", WidgetInfo.FIXED_VIEWPORT_CLAN_CHAT_TAB), + FIXED_CORNER_BOTTOM_LEFT_2005(Skin.AROUND_2005, "1028", WidgetInfo.FIXED_VIEWPORT_FRIENDS_CHAT_TAB), FIXED_CORNER_BOTTOM_RIGHT_2005(Skin.AROUND_2005, "1029", WidgetInfo.FIXED_VIEWPORT_MUSIC_TAB), FIXED_TOP_LEFT_2005(Skin.AROUND_2005, "1030_top_left", WidgetInfo.FIXED_VIEWPORT_STATS_TAB, WidgetInfo.FIXED_VIEWPORT_QUESTS_TAB), FIXED_TOP_RIGHT_2005(Skin.AROUND_2005, "1030_top_right", WidgetInfo.FIXED_VIEWPORT_EQUIPMENT_TAB, WidgetInfo.FIXED_VIEWPORT_PRAYER_TAB), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/leaguechaticons/LeagueChatIconsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/leaguechaticons/LeagueChatIconsPlugin.java index 4001a7312f..207f52504d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/leaguechaticons/LeagueChatIconsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/leaguechaticons/LeagueChatIconsPlugin.java @@ -30,8 +30,8 @@ import java.util.Arrays; import javax.inject.Inject; import lombok.extern.slf4j.Slf4j; import net.runelite.api.ChatPlayer; -import net.runelite.api.ClanMember; -import net.runelite.api.ClanMemberManager; +import net.runelite.api.FriendsChatMember; +import net.runelite.api.FriendsChatManager; import net.runelite.api.Client; import net.runelite.api.Friend; import net.runelite.api.GameState; @@ -145,7 +145,7 @@ public class LeagueChatIconsPlugin extends Plugin { case PRIVATECHAT: case MODPRIVATECHAT: - // Note this is unable to change icon on PMs if they are not a friend or in clan chat + // Note this is unable to change icon on PMs if they are not a friend or in friends chat case FRIENDSCHAT: String name = Text.removeTags(chatMessage.getName()); if (isChatPlayerOnLeague(name)) @@ -265,7 +265,7 @@ public class LeagueChatIconsPlugin extends Plugin } /** - * Checks if a player name is a friend or clan member on a league world. + * Checks if a player name is a friend or friends chat member on a league world. * * @param name name of player to check. * @return boolean true/false. @@ -325,22 +325,22 @@ public class LeagueChatIconsPlugin extends Plugin } /** - * Gets a ChatPlayer object from a clean name by searching clan and friends list. + * Gets a ChatPlayer object from a clean name by searching friends chat and friends list. * * @param name name of player to find. * @return ChatPlayer if found, else null. */ private ChatPlayer getChatPlayerFromName(String name) { - // Search clan members first, because if a friend is in the clan chat but their private - // chat is 'off', then we won't know the world - ClanMemberManager clanMemberManager = client.getClanMemberManager(); - if (clanMemberManager != null) + // Search friends chat members first, because we will be able to get the world if their private + // is off. + FriendsChatManager friendsChatManager = client.getFriendsChatManager(); + if (friendsChatManager != null) { - ClanMember clanMember = clanMemberManager.findByName(name); - if (clanMember != null) + FriendsChatMember member = friendsChatManager.findByName(name); + if (member != null) { - return clanMember; + return member; } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/minimap/MinimapConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/minimap/MinimapConfig.java index c771854645..3ccd0e970f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/minimap/MinimapConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/minimap/MinimapConfig.java @@ -84,10 +84,10 @@ public interface MinimapConfig extends Config @ConfigItem( keyName = "clan", - name = "Clan color", - description = "Set the minimap color your clan is drawn in" + name = "Friends Chat color", + description = "Set the minimap color your friends chat members are drawn in" ) - default Color clanColor() //mapdot 5 + default Color friendsChatColor() //mapdot 5 { return new Color(170, 0, 190); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/minimap/MinimapPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/minimap/MinimapPlugin.java index 64d4f1df3a..c70f1b75b7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/minimap/MinimapPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/minimap/MinimapPlugin.java @@ -164,7 +164,7 @@ public class MinimapPlugin extends Plugin colors[2] = config.playerColor(); colors[3] = config.friendColor(); colors[4] = config.teamColor(); - colors[5] = config.clanColor(); + colors[5] = config.friendsChatColor(); return colors; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsConfig.java index 6dd5964c63..cb55db7b1e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsConfig.java @@ -91,11 +91,11 @@ public interface PlayerIndicatorsConfig extends Config @ConfigItem( position = 4, keyName = "drawClanMemberNames", - name = "Highlight clan members", - description = "Configures whether or clan members should be highlighted", + name = "Highlight friends chat members", + description = "Configures if friends chat members should be highlighted", section = highlightSection ) - default boolean drawClanMemberNames() + default boolean drawFriendsChatMemberNames() { return true; } @@ -103,11 +103,11 @@ public interface PlayerIndicatorsConfig extends Config @ConfigItem( position = 5, keyName = "clanMemberColor", - name = "Clan member color", - description = "Color of clan members", + name = "Friends chat member color", + description = "Color of friends chat members", section = highlightSection ) - default Color getClanMemberColor() + default Color getFriendsChatMemberColor() { return new Color(170, 0, 255); } @@ -139,11 +139,11 @@ public interface PlayerIndicatorsConfig extends Config @ConfigItem( position = 8, keyName = "drawNonClanMemberNames", - name = "Highlight non-clan members", - description = "Configures whether or not non-clan members should be highlighted", + name = "Highlight others", + description = "Configures whether or not other players should be highlighted", section = highlightSection ) - default boolean highlightNonClanMembers() + default boolean highlightOthers() { return false; } @@ -151,11 +151,11 @@ public interface PlayerIndicatorsConfig extends Config @ConfigItem( position = 9, keyName = "nonClanMemberColor", - name = "Non-clan member color", - description = "Color of non-clan member names", + name = "Others color", + description = "Color of other players names", section = highlightSection ) - default Color getNonClanMemberColor() + default Color getOthersColor() { return Color.RED; } @@ -207,10 +207,10 @@ public interface PlayerIndicatorsConfig extends Config @ConfigItem( position = 14, keyName = "clanMenuIcons", - name = "Show clan ranks", - description = "Add clan rank to right click menu and next to player names" + name = "Show friends chat ranks", + description = "Add friends chat rank to right click menu and next to player names" ) - default boolean showClanRanks() + default boolean showFriendsChatRanks() { return true; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsOverlay.java index 5373fc1eb4..5ca263a64c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsOverlay.java @@ -31,10 +31,10 @@ import java.awt.Graphics2D; import java.awt.image.BufferedImage; import javax.inject.Inject; import javax.inject.Singleton; -import net.runelite.api.ClanMemberRank; +import net.runelite.api.FriendsChatRank; import net.runelite.api.Player; import net.runelite.api.Point; -import net.runelite.client.game.ClanManager; +import net.runelite.client.game.FriendChatManager; import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayPosition; import net.runelite.client.ui.overlay.OverlayPriority; @@ -49,15 +49,15 @@ public class PlayerIndicatorsOverlay extends Overlay private final PlayerIndicatorsService playerIndicatorsService; private final PlayerIndicatorsConfig config; - private final ClanManager clanManager; + private final FriendChatManager friendChatManager; @Inject private PlayerIndicatorsOverlay(PlayerIndicatorsConfig config, PlayerIndicatorsService playerIndicatorsService, - ClanManager clanManager) + FriendChatManager friendChatManager) { this.config = config; this.playerIndicatorsService = playerIndicatorsService; - this.clanManager = clanManager; + this.friendChatManager = friendChatManager; setPosition(OverlayPosition.DYNAMIC); setPriority(OverlayPriority.MED); } @@ -108,37 +108,37 @@ public class PlayerIndicatorsOverlay extends Overlay return; } - if (config.showClanRanks() && actor.isClanMember()) + if (config.showFriendsChatRanks() && actor.isFriendsChatMember()) { - final ClanMemberRank rank = clanManager.getRank(name); + final FriendsChatRank rank = friendChatManager.getRank(name); - if (rank != ClanMemberRank.UNRANKED) + if (rank != FriendsChatRank.UNRANKED) { - final BufferedImage clanchatImage = clanManager.getClanImage(rank); + final BufferedImage rankImage = friendChatManager.getRankImage(rank); - if (clanchatImage != null) + if (rankImage != null) { - final int clanImageWidth = clanchatImage.getWidth(); - final int clanImageTextMargin; - final int clanImageNegativeMargin; + final int imageWidth = rankImage.getWidth(); + final int imageTextMargin; + final int imageNegativeMargin; if (drawPlayerNamesConfig == PlayerNameLocation.MODEL_RIGHT) { - clanImageTextMargin = clanImageWidth; - clanImageNegativeMargin = 0; + imageTextMargin = imageWidth; + imageNegativeMargin = 0; } else { - clanImageTextMargin = clanImageWidth / 2; - clanImageNegativeMargin = clanImageWidth / 2; + imageTextMargin = imageWidth / 2; + imageNegativeMargin = imageWidth / 2; } final int textHeight = graphics.getFontMetrics().getHeight() - graphics.getFontMetrics().getMaxDescent(); - final Point imageLocation = new Point(textLocation.getX() - clanImageNegativeMargin - 1, textLocation.getY() - textHeight / 2 - clanchatImage.getHeight() / 2); - OverlayUtil.renderImageLocation(graphics, imageLocation, clanchatImage); + final Point imageLocation = new Point(textLocation.getX() - imageNegativeMargin - 1, textLocation.getY() - textHeight / 2 - rankImage.getHeight() / 2); + OverlayUtil.renderImageLocation(graphics, imageLocation, rankImage); // move text - textLocation = new Point(textLocation.getX() + clanImageTextMargin, textLocation.getY()); + textLocation = new Point(textLocation.getX() + imageTextMargin, textLocation.getY()); } } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsPlugin.java index 2fceea3a69..ef3863225d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsPlugin.java @@ -28,8 +28,8 @@ import com.google.inject.Provides; import java.awt.Color; import javax.inject.Inject; import lombok.Value; -import net.runelite.api.ClanMemberRank; -import static net.runelite.api.ClanMemberRank.UNRANKED; +import net.runelite.api.FriendsChatRank; +import static net.runelite.api.FriendsChatRank.UNRANKED; import net.runelite.api.Client; import static net.runelite.api.MenuAction.*; import net.runelite.api.MenuEntry; @@ -37,7 +37,7 @@ import net.runelite.api.Player; import net.runelite.api.events.ClientTick; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.Subscribe; -import net.runelite.client.game.ClanManager; +import net.runelite.client.game.FriendChatManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.ui.overlay.OverlayManager; @@ -69,7 +69,7 @@ public class PlayerIndicatorsPlugin extends Plugin private Client client; @Inject - private ClanManager clanManager; + private FriendChatManager friendChatManager; @Provides PlayerIndicatorsConfig provideConfig(ConfigManager configManager) @@ -178,14 +178,14 @@ public class PlayerIndicatorsPlugin extends Plugin { color = config.getFriendColor(); } - else if (config.drawClanMemberNames() && player.isClanMember()) + else if (config.drawFriendsChatMemberNames() && player.isFriendsChatMember()) { - color = config.getClanMemberColor(); + color = config.getFriendsChatMemberColor(); - ClanMemberRank rank = clanManager.getRank(player.getName()); + FriendsChatRank rank = friendChatManager.getRank(player.getName()); if (rank != UNRANKED) { - image = clanManager.getIconNumber(rank); + image = friendChatManager.getIconNumber(rank); } } else if (config.highlightTeamMembers() @@ -193,9 +193,9 @@ public class PlayerIndicatorsPlugin extends Plugin { color = config.getTeamMemberColor(); } - else if (config.highlightNonClanMembers() && !player.isClanMember()) + else if (config.highlightOthers() && !player.isFriendsChatMember()) { - color = config.getNonClanMemberColor(); + color = config.getOthersColor(); } if (image == -1 && color == null) @@ -222,7 +222,7 @@ public class PlayerIndicatorsPlugin extends Plugin newTarget = ColorUtil.prependColorTag(newTarget, decorations.getColor()); } - if (decorations.getImage() != -1 && config.showClanRanks()) + if (decorations.getImage() != -1 && config.showFriendsChatRanks()) { newTarget = "" + newTarget; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsService.java b/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsService.java index 769c7e3aed..8c9823f5c3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsService.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/playerindicators/PlayerIndicatorsService.java @@ -46,8 +46,8 @@ public class PlayerIndicatorsService public void forEachPlayer(final BiConsumer consumer) { - if (!config.highlightOwnPlayer() && !config.drawClanMemberNames() - && !config.highlightFriends() && !config.highlightNonClanMembers()) + if (!config.highlightOwnPlayer() && !config.drawFriendsChatMemberNames() + && !config.highlightFriends() && !config.highlightOthers()) { return; } @@ -61,7 +61,7 @@ public class PlayerIndicatorsService continue; } - boolean isClanMember = player.isClanMember(); + boolean isFriendsChatMember = player.isFriendsChatMember(); if (player == localPlayer) { @@ -74,17 +74,17 @@ public class PlayerIndicatorsService { consumer.accept(player, config.getFriendColor()); } - else if (config.drawClanMemberNames() && isClanMember) + else if (config.drawFriendsChatMemberNames() && isFriendsChatMember) { - consumer.accept(player, config.getClanMemberColor()); + consumer.accept(player, config.getFriendsChatMemberColor()); } else if (config.highlightTeamMembers() && localPlayer.getTeam() > 0 && localPlayer.getTeam() == player.getTeam()) { consumer.accept(player, config.getTeamMemberColor()); } - else if (config.highlightNonClanMembers() && !isClanMember) + else if (config.highlightOthers() && !isFriendsChatMember) { - consumer.accept(player, config.getNonClanMemberColor()); + consumer.accept(player, config.getOthersColor()); } } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsConfig.java index ee124e3520..25f8062fd8 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsConfig.java @@ -91,10 +91,10 @@ public interface RaidsConfig extends Config @ConfigItem( position = 5, keyName = "ccDisplay", - name = "CC and World in scout overlay", - description = "Display current Clan Chat and World in scouting overlay" + name = "FC and World in scout overlay", + description = "Display current Friends Chat and World in scouting overlay" ) - default boolean ccDisplay() + default boolean fcDisplay() { return false; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsOverlay.java index 605b504356..ea7fc0ea3c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsOverlay.java @@ -30,7 +30,7 @@ import java.awt.FontMetrics; import java.awt.Graphics2D; import javax.inject.Inject; import lombok.Getter; -import net.runelite.api.ClanMemberManager; +import net.runelite.api.FriendsChatManager; import net.runelite.api.Client; import static net.runelite.api.MenuAction.RUNELITE_OVERLAY; import static net.runelite.api.MenuAction.RUNELITE_OVERLAY_CONFIG; @@ -101,10 +101,10 @@ public class RaidsOverlay extends OverlayPanel .color(color) .build()); - if (config.ccDisplay()) + if (config.fcDisplay()) { color = Color.RED; - ClanMemberManager clanMemberManager = client.getClanMemberManager(); + FriendsChatManager friendsChatManager = client.getFriendsChatManager(); FontMetrics metrics = graphics.getFontMetrics(); String worldString = "W" + client.getWorld(); @@ -120,17 +120,17 @@ public class RaidsOverlay extends OverlayPanel } } - String clanOwner = "Join a CC"; - if (clanMemberManager != null) + String owner = "Join a FC"; + if (friendsChatManager != null) { - clanOwner = clanMemberManager.getClanOwner(); + owner = friendsChatManager.getOwner(); color = Color.ORANGE; } - panelComponent.setPreferredSize(new Dimension(Math.max(ComponentConstants.STANDARD_WIDTH, metrics.stringWidth(worldString) + metrics.stringWidth(clanOwner) + 14), 0)); + panelComponent.setPreferredSize(new Dimension(Math.max(ComponentConstants.STANDARD_WIDTH, metrics.stringWidth(worldString) + metrics.stringWidth(owner) + 14), 0)); panelComponent.getChildren().add(LineComponent.builder() .left(worldString) - .right(clanOwner) + .right(owner) .leftColor(Color.ORANGE) .rightColor(color) .build()); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java index 3325308c8a..fb6b67450c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java @@ -201,8 +201,8 @@ public class RaidsPlugin extends Plugin /* * if the player is in a raid party or not - * This will be set when someone in the clan chat clicks the "make party" button on the raids widget - * It will change again when someone from your clan enters the raid to generate it + * This will be set when someone in the friends chat clicks the "make party" button on the raids widget + * It will change again when someone from your friends chat enters the raid to generate it * It will be reset when the raid starts but not if they leave the raid while it has not started yet */ @Getter diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/ScreenshotConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/ScreenshotConfig.java index 62cc1a2ed6..9753e6da5b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/ScreenshotConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/ScreenshotConfig.java @@ -172,7 +172,7 @@ public interface ScreenshotConfig extends Config @ConfigItem( keyName = "friendDeath", name = "Screenshot Friend Deaths", - description = "Configures whether or not screenshots are automatically taken when friends or clan members die.", + description = "Configures whether or not screenshots are automatically taken when friends or friends chat members die.", position = 11, section = whatSection ) @@ -219,12 +219,12 @@ public interface ScreenshotConfig extends Config @ConfigItem( keyName = "ccKick", - name = "Screenshot Kicks from CC", - description = "Take a screenshot when you kick a user from a clan chat.", + name = "Screenshot Kicks from FC", + description = "Take a screenshot when you kick a user from a friends chat.", position = 15, section = whatSection ) - default boolean screenshotCcKick() + default boolean screenshotKick() { return false; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/ScreenshotPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/ScreenshotPlugin.java index 0dd69bffd6..8ce1ec7839 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/ScreenshotPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/ScreenshotPlugin.java @@ -261,7 +261,7 @@ public class ScreenshotPlugin extends Plugin { takeScreenshot("Death", "Deaths"); } - else if (player != client.getLocalPlayer() && (player.isClanMember() || player.isFriend()) && config.screenshotFriendDeath() && player.getCanvasTilePoly() != null) + else if (player != client.getLocalPlayer() && (player.isFriendsChatMember() || player.isFriend()) && config.screenshotFriendDeath() && player.getCanvasTilePoly() != null) { takeScreenshot("Death " + player.getName(), "Deaths"); } @@ -282,7 +282,7 @@ public class ScreenshotPlugin extends Plugin @Subscribe public void onScriptCallbackEvent(ScriptCallbackEvent e) { - if (!"confirmClanKick".equals(e.getEventName())) + if (!"confirmFriendsChatKick".equals(e.getEventName())) { return; } @@ -356,14 +356,14 @@ public class ScreenshotPlugin extends Plugin } } - if (config.screenshotCcKick() && chatMessage.equals("Your request to kick/ban this user was successful.")) + if (config.screenshotKick() && chatMessage.equals("Your request to kick/ban this user was successful.")) { if (kickPlayerName == null) { return; } - takeScreenshot("Kick " + kickPlayerName, "Clan Chat Kicks"); + takeScreenshot("Kick " + kickPlayerName, "Friends Chat Kicks"); kickPlayerName = null; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperConfig.java index a02253a411..d1135ffe34 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperConfig.java @@ -117,7 +117,7 @@ public interface WorldHopperConfig extends Config @ConfigItem( keyName = "menuOption", name = "Show Hop-to menu option", - description = "Adds Hop-to menu option to the friends list and clan members list", + description = "Adds Hop-to menu option to the friends list and friends chat members list", position = 7 ) default boolean menuOption() diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPlugin.java index 1bf97a8f2e..f91e490f3e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPlugin.java @@ -48,8 +48,8 @@ import lombok.Getter; import lombok.extern.slf4j.Slf4j; import net.runelite.api.ChatMessageType; import net.runelite.api.ChatPlayer; -import net.runelite.api.ClanMember; -import net.runelite.api.ClanMemberManager; +import net.runelite.api.FriendsChatMember; +import net.runelite.api.FriendsChatManager; import net.runelite.api.Client; import net.runelite.api.Friend; import net.runelite.api.GameState; @@ -356,7 +356,7 @@ public class WorldHopperPlugin extends Plugin int groupId = WidgetInfo.TO_GROUP(event.getActionParam1()); String option = event.getOption(); - if (groupId == WidgetInfo.FRIENDS_LIST.getGroupId() || groupId == WidgetInfo.CLAN_CHAT.getGroupId()) + if (groupId == WidgetInfo.FRIENDS_LIST.getGroupId() || groupId == WidgetInfo.FRIENDS_CHAT.getGroupId()) { boolean after; @@ -730,15 +730,15 @@ public class WorldHopperPlugin extends Plugin { String cleanName = Text.removeTags(name); - // Search clan members first, because if a friend is in the clan chat but their private - // chat is 'off', then the hop-to option will not get shown in the menu (issue #5679). - ClanMemberManager clanMemberManager = client.getClanMemberManager(); - if (clanMemberManager != null) + // Search friends chat members first, because we can always get their world; + // friends worlds may be hidden if they have private off. (#5679) + FriendsChatManager friendsChatManager = client.getFriendsChatManager(); + if (friendsChatManager != null) { - ClanMember clanMember = clanMemberManager.findByName(cleanName); - if (clanMember != null) + FriendsChatMember member = friendsChatManager.findByName(cleanName); + if (member != null) { - return clanMember; + return member; } } diff --git a/runelite-client/src/main/java/net/runelite/client/ui/JagexColors.java b/runelite-client/src/main/java/net/runelite/client/ui/JagexColors.java index 38b1ea657f..f236c431aa 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/JagexColors.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/JagexColors.java @@ -36,8 +36,8 @@ public class JagexColors */ public static final Color CHAT_PUBLIC_TEXT_OPAQUE_BACKGROUND = Color.BLUE; public static final Color CHAT_PRIVATE_MESSAGE_TEXT_OPAQUE_BACKGROUND = Color.CYAN; - public static final Color CHAT_CLAN_TEXT_OPAQUE_BACKGROUND = new Color(127, 0, 0); - public static final Color CHAT_CLAN_NAME_OPAQUE_BACKGROUND = Color.BLUE; + public static final Color CHAT_FC_TEXT_OPAQUE_BACKGROUND = new Color(127, 0, 0); + public static final Color CHAT_FC_NAME_OPAQUE_BACKGROUND = Color.BLUE; public static final Color CHAT_GAME_EXAMINE_TEXT_OPAQUE_BACKGROUND = Color.BLACK; public static final Color CHAT_TYPED_TEXT_OPAQUE_BACKGROUND = Color.BLUE; @@ -46,8 +46,8 @@ public class JagexColors */ public static final Color CHAT_PUBLIC_TEXT_TRANSPARENT_BACKGROUND = new Color(144, 144, 255); public static final Color CHAT_PRIVATE_MESSAGE_TEXT_TRANSPARENT_BACKGROUND = Color.CYAN; - public static final Color CHAT_CLAN_TEXT_TRANSPARENT_BACKGROUND = new Color(239, 80, 80); - public static final Color CHAT_CLAN_NAME_TRANSPARENT_BACKGROUND = new Color(144, 112, 255); + public static final Color CHAT_FC_TEXT_TRANSPARENT_BACKGROUND = new Color(239, 80, 80); + public static final Color CHAT_FC_NAME_TRANSPARENT_BACKGROUND = new Color(144, 112, 255); public static final Color CHAT_GAME_EXAMINE_TEXT_TRANSPARENT_BACKGROUND = Color.WHITE; public static final Color CHAT_TYPED_TEXT_TRANSPARENT_BACKGROUND = new Color(144, 144, 255); diff --git a/runelite-client/src/main/scripts/CommandScript.rs2asm b/runelite-client/src/main/scripts/CommandScript.rs2asm index 891283dc61..3e568fe0a2 100644 --- a/runelite-client/src/main/scripts/CommandScript.rs2asm +++ b/runelite-client/src/main/scripts/CommandScript.rs2asm @@ -38,7 +38,7 @@ LABEL20: iconst 1 if_icmpeq LABEL31 iconst 0 ; Modified to enable clanchat input - sconst "clanchatInput" + sconst "friendsChatInput" runelite_callback iconst 1 if_icmpeq LABEL31 ; Compare to 1 diff --git a/runelite-client/src/main/scripts/ClanSendKick.hash b/runelite-client/src/main/scripts/FriendsChatSendKick.hash similarity index 100% rename from runelite-client/src/main/scripts/ClanSendKick.hash rename to runelite-client/src/main/scripts/FriendsChatSendKick.hash diff --git a/runelite-client/src/main/scripts/ClanSendKick.rs2asm b/runelite-client/src/main/scripts/FriendsChatSendKick.rs2asm similarity index 80% rename from runelite-client/src/main/scripts/ClanSendKick.rs2asm rename to runelite-client/src/main/scripts/FriendsChatSendKick.rs2asm index 1da495029f..f94d189442 100644 --- a/runelite-client/src/main/scripts/ClanSendKick.rs2asm +++ b/runelite-client/src/main/scripts/FriendsChatSendKick.rs2asm @@ -3,9 +3,9 @@ .string_stack_count 1 .int_var_count 0 .string_var_count 1 -; callback "confirmClanKick" -; Used by the ClanChat plugin to show a chatbox panel confirming the requested kick -; Also requires the "confirmKicks" option of ClanChatConfig to be enabled +; callback "confirmFriendsChatKick" +; Used by the friends chat plugin to show a chatbox panel confirming the requested kick +; Also requires the "confirmKicks" option of FriendsChatConfig to be enabled invoke 1942 iconst 1 if_icmpeq LABEL4 @@ -26,7 +26,7 @@ LABEL73: CONFIRM_KICK: sload 0 ; Username we are trying to kick iconst 0 ; Modified if we are confirming the kick inside the plugin - sconst "confirmClanKick" + sconst "confirmFriendsChatKick" runelite_callback pop_string ; Pop username iconst 0 ; Compare against zero diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/chatfilter/ChatFilterPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/chatfilter/ChatFilterPluginTest.java index cbfe2f3110..547e468c87 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/chatfilter/ChatFilterPluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/chatfilter/ChatFilterPluginTest.java @@ -36,7 +36,7 @@ import net.runelite.api.MessageNode; import net.runelite.api.Player; import net.runelite.api.events.ChatMessage; import net.runelite.api.events.ScriptCallbackEvent; -import net.runelite.client.game.ClanManager; +import net.runelite.client.game.FriendChatManager; import static net.runelite.client.plugins.chatfilter.ChatFilterPlugin.CENSOR_MESSAGE; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -63,7 +63,7 @@ public class ChatFilterPluginTest @Mock @Bind - private ClanManager clanManager; + private FriendChatManager friendChatManager; @Mock private Player localPlayer; @@ -186,7 +186,7 @@ public class ChatFilterPluginTest @Test public void testMessageFromFriendIsFiltered() { - when(clanManager.isClanMember("Iron Mammal")).thenReturn(false); + when(friendChatManager.isMember("Iron Mammal")).thenReturn(false); when(chatFilterConfig.filterFriends()).thenReturn(true); assertTrue(chatFilterPlugin.shouldFilterPlayerMessage("Iron Mammal")); } @@ -200,18 +200,18 @@ public class ChatFilterPluginTest } @Test - public void testMessageFromClanIsFiltered() + public void testMessageFromFriendsChatIsFiltered() { when(client.isFriended("B0aty", false)).thenReturn(false); - when(chatFilterConfig.filterClan()).thenReturn(true); + when(chatFilterConfig.filterFriendsChat()).thenReturn(true); assertTrue(chatFilterPlugin.shouldFilterPlayerMessage("B0aty")); } @Test - public void testMessageFromClanIsNotFiltered() + public void testMessageFromFriendsChatIsNotFiltered() { - when(clanManager.isClanMember("B0aty")).thenReturn(true); - when(chatFilterConfig.filterClan()).thenReturn(false); + when(friendChatManager.isMember("B0aty")).thenReturn(true); + when(chatFilterConfig.filterFriendsChat()).thenReturn(false); assertFalse(chatFilterPlugin.shouldFilterPlayerMessage("B0aty")); } @@ -223,10 +223,10 @@ public class ChatFilterPluginTest } @Test - public void testMessageFromNonFriendNonClanIsFiltered() + public void testMessageFromNonFriendNonFCIsFiltered() { when(client.isFriended("Woox", false)).thenReturn(false); - when(clanManager.isClanMember("Woox")).thenReturn(false); + when(friendChatManager.isMember("Woox")).thenReturn(false); assertTrue(chatFilterPlugin.shouldFilterPlayerMessage("Woox")); } From 2c9e8ab222b811f6e69963c56548b934ad22a6d9 Mon Sep 17 00:00:00 2001 From: Adam Date: Sun, 14 Jun 2020 10:39:58 -0400 Subject: [PATCH 14/31] chat commands: add hallowed sepulchre pb --- .../chatcommands/ChatCommandsPlugin.java | 42 ++++++++++++++ .../chatcommands/ChatCommandsPluginTest.java | 58 +++++++++++++++++++ 2 files changed, 100 insertions(+) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java index 2bc4aad635..93daedf8be 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java @@ -26,6 +26,7 @@ package net.runelite.client.plugins.chatcommands; import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.MoreObjects; import com.google.inject.Provides; import java.io.IOException; import java.util.EnumSet; @@ -105,6 +106,8 @@ public class ChatCommandsPlugin extends Plugin private static final Pattern ADVENTURE_LOG_COX_PB_PATTERN = Pattern.compile("Fastest (?:kill|run)(?: - \\(Team size: (?:[0-9]+ players|Solo)\\))?: ([0-9:]+)"); private static final Pattern ADVENTURE_LOG_BOSS_PB_PATTERN = Pattern.compile("[a-zA-Z]+(?: [a-zA-Z]+)*"); private static final Pattern ADVENTURE_LOG_PB_PATTERN = Pattern.compile("(" + ADVENTURE_LOG_BOSS_PB_PATTERN + "(?: - " + ADVENTURE_LOG_BOSS_PB_PATTERN + ")*) (?:" + ADVENTURE_LOG_COX_PB_PATTERN + "( )*)+"); + private static final Pattern HS_PB_PATTERN = Pattern.compile("Floor (?\\d) time: (?[0-9:]+)(?: \\(new personal best\\)|. Personal best: (?[0-9:]+))" + + "(?:
Overall time: (?[0-9:]+)(?: \\(new personal best\\)|. Personal best: (?[0-9:]+)))?"); private static final String TOTAL_LEVEL_COMMAND_STRING = "!total"; private static final String PRICE_COMMAND_STRING = "!price"; @@ -372,6 +375,25 @@ public class ChatCommandsPlugin extends Plugin matchPb(matcher); } + matcher = HS_PB_PATTERN.matcher(message); + if (matcher.find()) + { + int floor = Integer.parseInt(matcher.group("floor")); + String floortime = matcher.group("floortime"); + String floorpb = matcher.group("floorpb"); + String otime = matcher.group("otime"); + String opb = matcher.group("opb"); + + String pb = MoreObjects.firstNonNull(floorpb, floortime); + setPb("Hallowed Sepulchre Floor " + floor, timeStringToSeconds(pb)); + + if (otime != null) + { + pb = MoreObjects.firstNonNull(opb, otime); + setPb("Hallowed Sepulchre", timeStringToSeconds(pb)); + } + } + lastBossKill = null; } @@ -1622,6 +1644,26 @@ public class ChatCommandsPlugin extends Plugin case "the nightmare": return "Nightmare"; + // Hallowed Sepulchre + case "hs": + case "sepulchre": + return "Hallowed Sepulchre"; + case "hs1": + case "hs 1": + return "Hallowed Sepulchre Floor 1"; + case "hs2": + case "hs 2": + return "Hallowed Sepulchre Floor 2"; + case "hs3": + case "hs 3": + return "Hallowed Sepulchre Floor 3"; + case "hs4": + case "hs 4": + return "Hallowed Sepulchre Floor 4"; + case "hs5": + case "hs 5": + return "Hallowed Sepulchre Floor 5"; + default: return WordUtils.capitalize(boss); } diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/chatcommands/ChatCommandsPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/chatcommands/ChatCommandsPluginTest.java index 2f64ca267e..0ecf43b2d3 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/chatcommands/ChatCommandsPluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/chatcommands/ChatCommandsPluginTest.java @@ -590,4 +590,62 @@ public class ChatCommandsPluginTest verify(messageNode).setRuneLiteFormatMessage("Level Zulrah: 1000 Rank: 10"); } + + @Test + public void testHsFloorNoPb() + { + ChatMessage chatMessage = new ChatMessage(null, GAMEMESSAGE, "", "Floor 1 time: 1:19. Personal best: 0:28", null, 0); + chatCommandsPlugin.onChatMessage(chatMessage); + + verify(configManager).setConfiguration("personalbest.adam", "hallowed sepulchre floor 1", 28); + } + + @Test + public void testHsFloorPb() + { + ChatMessage chatMessage = new ChatMessage(null, GAMEMESSAGE, "", "Floor 2 time: 0:47 (new personal best)", null, 0); + chatCommandsPlugin.onChatMessage(chatMessage); + + verify(configManager).setConfiguration("personalbest.adam", "hallowed sepulchre floor 2", 47); + } + + @Test + public void testHsOverallPb_Pb() + { + ChatMessage chatMessage = new ChatMessage(null, GAMEMESSAGE, "", "Floor 5 time: 4:46 (new personal best)
Overall time: 9:53 (new personal best)
", null, 0); + chatCommandsPlugin.onChatMessage(chatMessage); + + verify(configManager).setConfiguration("personalbest.adam", "hallowed sepulchre floor 5", 4 * 60 + 46); + verify(configManager).setConfiguration("personalbest.adam", "hallowed sepulchre", 9 * 60 + 53); + } + + @Test + public void testHsOverallPb_NoPb() + { + ChatMessage chatMessage = new ChatMessage(null, GAMEMESSAGE, "", "Floor 5 time: 3:26 (new personal best)
Overall time: 9:17. Personal best: 9:15
", null, 0); + chatCommandsPlugin.onChatMessage(chatMessage); + + verify(configManager).setConfiguration("personalbest.adam", "hallowed sepulchre floor 5", 3 * 60 + 26); + verify(configManager).setConfiguration("personalbest.adam", "hallowed sepulchre", 9 * 60 + 15); + } + + @Test + public void testHsOverallNoPb_NoPb() + { + ChatMessage chatMessage = new ChatMessage(null, GAMEMESSAGE, "", "Floor 5 time: 3:56. Personal best: 3:05
Overall time: 9:14. Personal best: 7:49
", null, 0); + chatCommandsPlugin.onChatMessage(chatMessage); + + verify(configManager).setConfiguration("personalbest.adam", "hallowed sepulchre floor 5", 3 * 60 + 5); + verify(configManager).setConfiguration("personalbest.adam", "hallowed sepulchre", 7 * 60 + 49); + } + + @Test + public void testHsOverallNoPb_Pb() + { + ChatMessage chatMessage = new ChatMessage(null, GAMEMESSAGE, "", "Floor 5 time: 3:10. Personal best: 3:04
Overall time: 7:47 (new personal best)
", null, 0); + chatCommandsPlugin.onChatMessage(chatMessage); + + verify(configManager).setConfiguration("personalbest.adam", "hallowed sepulchre floor 5", 3 * 60 + 4); + verify(configManager).setConfiguration("personalbest.adam", "hallowed sepulchre", 7 * 60 + 47); + } } From cc8b8c9bcfbd52b0e20237e768d042fd120a5176 Mon Sep 17 00:00:00 2001 From: Adam Date: Sun, 14 Jun 2020 11:25:07 -0400 Subject: [PATCH 15/31] chat commands: add hallowed sepulchre kc --- .../chatcommands/ChatCommandsPlugin.java | 18 ++++++++++++++++++ .../chatcommands/ChatCommandsPluginTest.java | 18 ++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java index 93daedf8be..0b129164af 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java @@ -108,6 +108,8 @@ public class ChatCommandsPlugin extends Plugin private static final Pattern ADVENTURE_LOG_PB_PATTERN = Pattern.compile("(" + ADVENTURE_LOG_BOSS_PB_PATTERN + "(?: - " + ADVENTURE_LOG_BOSS_PB_PATTERN + ")*) (?:" + ADVENTURE_LOG_COX_PB_PATTERN + "( )*)+"); private static final Pattern HS_PB_PATTERN = Pattern.compile("Floor (?\\d) time: (?[0-9:]+)(?: \\(new personal best\\)|. Personal best: (?[0-9:]+))" + "(?:
Overall time: (?[0-9:]+)(?: \\(new personal best\\)|. Personal best: (?[0-9:]+)))?"); + private static final Pattern HS_KC_FLOOR_PATTERN = Pattern.compile("You have completed Floor (\\d) of the Hallowed Sepulchre! Total completions: (\\d+)\\."); + private static final Pattern HS_KC_GHC_PATTERN = Pattern.compile("You have opened the Grand Hallowed Coffin (\\d+) times?!"); private static final String TOTAL_LEVEL_COMMAND_STRING = "!total"; private static final String PRICE_COMMAND_STRING = "!price"; @@ -394,6 +396,21 @@ public class ChatCommandsPlugin extends Plugin } } + matcher = HS_KC_FLOOR_PATTERN.matcher(message); + if (matcher.find()) + { + int floor = Integer.parseInt(matcher.group(1)); + int kc = Integer.parseInt(matcher.group(2)); + setKc("Hallowed Sepulchre Floor " + floor, kc); + } + + matcher = HS_KC_GHC_PATTERN.matcher(message); + if (matcher.find()) + { + int kc = Integer.parseInt(matcher.group(1)); + setKc("Hallowed Sepulchre", kc); + } + lastBossKill = null; } @@ -1647,6 +1664,7 @@ public class ChatCommandsPlugin extends Plugin // Hallowed Sepulchre case "hs": case "sepulchre": + case "ghc": return "Hallowed Sepulchre"; case "hs1": case "hs 1": diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/chatcommands/ChatCommandsPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/chatcommands/ChatCommandsPluginTest.java index 0ecf43b2d3..5de68a0cb7 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/chatcommands/ChatCommandsPluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/chatcommands/ChatCommandsPluginTest.java @@ -648,4 +648,22 @@ public class ChatCommandsPluginTest verify(configManager).setConfiguration("personalbest.adam", "hallowed sepulchre floor 5", 3 * 60 + 4); verify(configManager).setConfiguration("personalbest.adam", "hallowed sepulchre", 7 * 60 + 47); } + + @Test + public void testHsFloorKc() + { + ChatMessage chatMessage = new ChatMessage(null, GAMEMESSAGE, "", "You have completed Floor 5 of the Hallowed Sepulchre! Total completions: 81.", null, 0); + chatCommandsPlugin.onChatMessage(chatMessage); + + verify(configManager).setConfiguration("killcount.adam", "hallowed sepulchre floor 5", 81); + } + + @Test + public void testHsGhcKc() + { + ChatMessage chatMessage = new ChatMessage(null, GAMEMESSAGE, "", "You have opened the Grand Hallowed Coffin 36 times!", null, 0); + chatCommandsPlugin.onChatMessage(chatMessage); + + verify(configManager).setConfiguration("killcount.adam", "hallowed sepulchre", 36); + } } From 74cc0486a9f2be5292c82b7408baf3c05bf683b4 Mon Sep 17 00:00:00 2001 From: plondrein Date: Sun, 31 May 2020 14:31:43 +0200 Subject: [PATCH 16/31] skillcalculator: Add sq'irk fruits to farming calculator --- .../skillcalculator/skill_farming.json | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_farming.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_farming.json index 805b2b365c..90410950e8 100644 --- a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_farming.json +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_farming.json @@ -6,6 +6,30 @@ } ], "actions": [ + { + "level": 1, + "icon": 10847, + "name": "Winter Sq'irk", + "xp": 30 + }, + { + "level": 1, + "icon": 10844, + "name": "Spring Sq'irk", + "xp": 40 + }, + { + "level": 1, + "icon": 10846, + "name": "Autumn Sq'irk", + "xp": 50 + }, + { + "level": 1, + "icon": 10845, + "name": "Summer Sq'irk", + "xp": 60 + }, { "level": 1, "icon": 1942, From 3c4d7aa01e170ec6377a4f66708c7ad03bb6a85f Mon Sep 17 00:00:00 2001 From: plondrein Date: Sun, 31 May 2020 15:12:47 +0200 Subject: [PATCH 17/31] skillcalculator: Add POH garden plants to farming calculator * Differentiate big plant and small plant ferns * Fix xp rate & icon for Fern (small plant) --- .../skillcalculator/skill_construction.json | 10 +-- .../skillcalculator/skill_farming.json | 72 +++++++++++++++++++ 2 files changed, 77 insertions(+), 5 deletions(-) diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_construction.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_construction.json index 495881c66e..39a098677f 100644 --- a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_construction.json +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_construction.json @@ -39,7 +39,7 @@ { "level": 1, "icon": 8186, - "name": "Fern", + "name": "Fern (big plant)", "xp": 31 }, { @@ -128,7 +128,7 @@ }, { "level": 6, - "icon": 8187, + "icon": 8190, "name": "Large Leaf Bush", "xp": 70 }, @@ -200,9 +200,9 @@ }, { "level": 12, - "icon": 8186, - "name": "Fern", - "xp": 70 + "icon": 8182, + "name": "Fern (small plant)", + "xp": 100 }, { "level": 12, diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_farming.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_farming.json index 90410950e8..70ac3b3444 100644 --- a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_farming.json +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_farming.json @@ -6,6 +6,78 @@ } ], "actions": [ + { + "level": 1, + "icon": 8180, + "name": "Plant", + "xp": 31 + }, + { + "level": 1, + "icon": 8186, + "name": "Fern (big plant)", + "xp": 31 + }, + { + "level": 1, + "icon": 8189, + "name": "Short Plant", + "xp": 31 + }, + { + "level": 1, + "icon": 8183, + "name": "Dock Leaf", + "xp": 31 + }, + { + "level": 1, + "icon": 8181, + "name": "Small Fern", + "xp": 70 + }, + { + "level": 1, + "icon": 8184, + "name": "Thistle", + "xp": 70 + }, + { + "level": 1, + "icon": 8187, + "name": "Bush", + "xp": 70 + }, + { + "level": 1, + "icon": 8190, + "name": "Large Leaf Bush", + "xp": 70 + }, + { + "level": 1, + "icon": 8191, + "name": "Huge Plant", + "xp": 100 + }, + { + "level": 1, + "icon": 8188, + "name": "Tall Plant", + "xp": 100 + }, + { + "level": 1, + "icon": 8185, + "name": "Reeds", + "xp": 100 + }, + { + "level": 1, + "icon": 8182, + "name": "Fern (small plant)", + "xp": 100 + }, { "level": 1, "icon": 10847, From 51f0b7752dac968d19dddd37081e62c9e5b5d546 Mon Sep 17 00:00:00 2001 From: Adam Date: Thu, 11 Jun 2020 23:02:03 -0400 Subject: [PATCH 18/31] timers plugin: add support for ring of endurance to stam timer --- .../client/plugins/timers/GameTimer.java | 10 +-- .../client/plugins/timers/TimersPlugin.java | 82 +++++++++++++------ .../client/ui/overlay/infobox/Timer.java | 9 +- .../plugins/timers/TimersPluginTest.java | 44 ++++++++++ 4 files changed, 114 insertions(+), 31 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timers/GameTimer.java b/runelite-client/src/main/java/net/runelite/client/plugins/timers/GameTimer.java index 98701e880c..bc751e4178 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timers/GameTimer.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timers/GameTimer.java @@ -40,7 +40,7 @@ import static net.runelite.client.util.RSTimeUnit.GAME_TICKS; @Getter(AccessLevel.PACKAGE) enum GameTimer { - STAMINA(ItemID.STAMINA_POTION4, GameTimerImageType.ITEM, "Stamina", 2, ChronoUnit.MINUTES, true), + STAMINA(ItemID.STAMINA_POTION4, GameTimerImageType.ITEM, "Stamina", true), ANTIFIRE(ItemID.ANTIFIRE_POTION4, GameTimerImageType.ITEM, "Antifire", 6, ChronoUnit.MINUTES), EXANTIFIRE(ItemID.EXTENDED_ANTIFIRE4, GameTimerImageType.ITEM, "Extended antifire", 12, ChronoUnit.MINUTES), OVERLOAD(ItemID.OVERLOAD_4, GameTimerImageType.ITEM, "Overload", 5, ChronoUnit.MINUTES, true), @@ -78,8 +78,8 @@ enum GameTimer DIVINE_MAGIC(ItemID.DIVINE_MAGIC_POTION4, GameTimerImageType.ITEM, "Divine Magic", 5, ChronoUnit.MINUTES), DIVINE_BASTION(ItemID.DIVINE_BASTION_POTION4, GameTimerImageType.ITEM, "Divine Bastion", 5, ChronoUnit.MINUTES), DIVINE_BATTLEMAGE(ItemID.DIVINE_BATTLEMAGE_POTION4, GameTimerImageType.ITEM, "Divine Battlemage", 5, ChronoUnit.MINUTES), - ANTIPOISON(ItemID.ANTIPOISON4, GameTimerImageType.ITEM, "Antipoison"), - ANTIVENOM(ItemID.ANTIVENOM4, GameTimerImageType.ITEM, "Anti-venom"); + ANTIPOISON(ItemID.ANTIPOISON4, GameTimerImageType.ITEM, "Antipoison", false), + ANTIVENOM(ItemID.ANTIVENOM4, GameTimerImageType.ITEM, "Anti-venom", false); @Nullable private final Duration duration; @@ -110,12 +110,12 @@ enum GameTimer this(imageId, idType, description, null, time, unit, false); } - GameTimer(int imageId, GameTimerImageType idType, String description) + GameTimer(int imageId, GameTimerImageType idType, String description, boolean removedOnDeath) { this.duration = null; this.graphicId = null; this.description = description; - this.removedOnDeath = false; + this.removedOnDeath = removedOnDeath; this.imageId = imageId; this.imageType = idType; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timers/TimersPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/timers/TimersPlugin.java index 6376b329ed..24f9d5297c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timers/TimersPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timers/TimersPlugin.java @@ -27,6 +27,7 @@ package net.runelite.client.plugins.timers; import com.google.inject.Provides; import java.time.Duration; +import java.time.Instant; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.inject.Inject; @@ -107,6 +108,7 @@ public class TimersPlugin extends Plugin private static final String SUPER_ANTIFIRE_EXPIRED_MESSAGE = "Your super antifire potion has expired."; private static final String KILLED_TELEBLOCK_OPPONENT_TEXT = "Your Tele Block has been removed because you killed "; private static final String PRAYER_ENHANCE_EXPIRED = "Your prayer enhance effect has worn off."; + private static final String ENDURANCE_EFFECT_MESSAGE = "Your Ring of endurance doubles the duration of your stamina potion's effect."; private static final Pattern DEADMAN_HALF_TELEBLOCK_PATTERN = Pattern.compile("A Tele Block spell has been cast on you by (.+)\\. It will expire in 1 minute, 15 seconds\\."); private static final Pattern FULL_TELEBLOCK_PATTERN = Pattern.compile("A Tele Block spell has been cast on you by (.+)\\. It will expire in 5 minutes\\."); @@ -118,6 +120,9 @@ public class TimersPlugin extends Plugin private TimerTimer freezeTimer; private int freezeTime = -1; // time frozen, in game ticks + private TimerTimer staminaTimer; + private boolean wasWearingEndurance; + private int lastRaidVarb; private int lastWildernessVarb; private int lastVengCooldownVarb; @@ -163,6 +168,7 @@ public class TimersPlugin extends Plugin widgetHiddenChangedOnPvpWorld = false; lastPoisonVarp = 0; nextPoisonTick = 0; + staminaTimer = null; } @Subscribe @@ -379,7 +385,7 @@ public class TimersPlugin extends Plugin || event.getId() == ItemID.EGNIOL_POTION_4)) { // Needs menu option hook because mixes use a common drink message, distinct from their standard potion messages - createGameTimer(STAMINA); + createStaminaTimer(); return; } @@ -438,14 +444,20 @@ public class TimersPlugin extends Plugin return; } - if (config.showStamina() && (event.getMessage().equals(STAMINA_DRINK_MESSAGE) || event.getMessage().equals(STAMINA_SHARED_DRINK_MESSAGE))) + if (event.getMessage().equals(ENDURANCE_EFFECT_MESSAGE)) { - createGameTimer(STAMINA); + wasWearingEndurance = true; } - if (config.showStamina() && (event.getMessage().equals(STAMINA_EXPIRED_MESSAGE) || event.getMessage().equals(GAUNTLET_ENTER_MESSAGE))) + if (config.showStamina() && (event.getMessage().equals(STAMINA_DRINK_MESSAGE) || event.getMessage().equals(STAMINA_SHARED_DRINK_MESSAGE))) + { + createStaminaTimer(); + } + + if (event.getMessage().equals(STAMINA_EXPIRED_MESSAGE) || event.getMessage().equals(GAUNTLET_ENTER_MESSAGE)) { removeGameTimer(STAMINA); + staminaTimer = null; } if (config.showAntiFire() && event.getMessage().equals(ANTIFIRE_DRINK_MESSAGE)) @@ -797,34 +809,50 @@ public class TimersPlugin extends Plugin } /** - * remove SOTD timer when weapon is changed - * - * @param itemContainerChanged + * Remove SOTD timer and update stamina timer when equipment is changed. */ @Subscribe public void onItemContainerChanged(ItemContainerChanged itemContainerChanged) { - ItemContainer container = itemContainerChanged.getItemContainer(); - if (container == client.getItemContainer(InventoryID.EQUIPMENT)) + if (itemContainerChanged.getContainerId() != InventoryID.EQUIPMENT.getId()) { - Item weapon = container.getItem(EquipmentInventorySlot.WEAPON.getSlotIdx()); + return; + } - if (weapon == null) - { - removeGameTimer(STAFF_OF_THE_DEAD); - return; - } + ItemContainer container = itemContainerChanged.getItemContainer(); - switch (weapon.getId()) + Item weapon = container.getItem(EquipmentInventorySlot.WEAPON.getSlotIdx()); + if (weapon == null || + (weapon.getId() != ItemID.STAFF_OF_THE_DEAD && + weapon.getId() != ItemID.TOXIC_STAFF_OF_THE_DEAD && + weapon.getId() != ItemID.STAFF_OF_LIGHT && + weapon.getId() != ItemID.TOXIC_STAFF_UNCHARGED)) + { + // remove sotd timer if the staff has been unwielded + removeGameTimer(STAFF_OF_THE_DEAD); + } + + if (wasWearingEndurance) + { + Item ring = container.getItem(EquipmentInventorySlot.RING.getSlotIdx()); + + // when using the last ring charge the ring changes to the uncharged version, ignore that and don't + // halve the timer + if (ring == null || (ring.getId() != ItemID.RING_OF_ENDURANCE && ring.getId() != ItemID.RING_OF_ENDURANCE_UNCHARGED_24844)) { - case ItemID.STAFF_OF_THE_DEAD: - case ItemID.TOXIC_STAFF_OF_THE_DEAD: - case ItemID.STAFF_OF_LIGHT: - case ItemID.TOXIC_STAFF_UNCHARGED: - // don't reset timer if still wielding staff - return; - default: - removeGameTimer(STAFF_OF_THE_DEAD); + wasWearingEndurance = false; + if (staminaTimer != null) + { + // Remaining duration gets divided by 2 + Duration remainingDuration = Duration.between(Instant.now(), staminaTimer.getEndTime()).dividedBy(2); + // This relies on the chat message to be removed, which could be after the timer has been culled; + // so check there is still remaining time + if (!remainingDuration.isNegative() && !remainingDuration.isZero()) + { + log.debug("Halving stamina timer"); + staminaTimer.setDuration(remainingDuration); + } + } } } } @@ -856,6 +884,12 @@ public class TimersPlugin extends Plugin } } + private void createStaminaTimer() + { + Duration duration = Duration.ofMinutes(wasWearingEndurance ? 4 : 2); + staminaTimer = createGameTimer(STAMINA, duration); + } + private TimerTimer createGameTimer(final GameTimer timer) { if (timer.getDuration() == null) diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/infobox/Timer.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/infobox/Timer.java index 4d6c2b7be4..c9a3664222 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/infobox/Timer.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/infobox/Timer.java @@ -39,8 +39,8 @@ import net.runelite.client.plugins.Plugin; public class Timer extends InfoBox { private final Instant startTime; - private final Instant endTime; - private final Duration duration; + private Instant endTime; + private Duration duration; public Timer(long period, ChronoUnit unit, BufferedImage image, Plugin plugin) { @@ -94,4 +94,9 @@ public class Timer extends InfoBox return timeLeft.isZero() || timeLeft.isNegative(); } + public void setDuration(Duration duration) + { + this.duration = duration; + endTime = startTime.plus(duration); + } } diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/timers/TimersPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/timers/TimersPluginTest.java index ea51b20747..9ef79a29a3 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/timers/TimersPluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/timers/TimersPluginTest.java @@ -28,16 +28,21 @@ import com.google.inject.Guice; import com.google.inject.Inject; import com.google.inject.testing.fieldbinder.Bind; import com.google.inject.testing.fieldbinder.BoundFieldModule; +import java.time.Duration; import java.util.EnumSet; import net.runelite.api.ChatMessageType; import net.runelite.api.Client; +import net.runelite.api.InventoryID; +import net.runelite.api.ItemContainer; import net.runelite.api.WorldType; import net.runelite.api.events.ChatMessage; +import net.runelite.api.events.ItemContainerChanged; import net.runelite.client.game.ItemManager; import net.runelite.client.game.SpriteManager; import net.runelite.client.ui.overlay.infobox.InfoBox; import net.runelite.client.ui.overlay.infobox.InfoBoxManager; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -45,6 +50,7 @@ import org.mockito.ArgumentCaptor; import static org.mockito.ArgumentMatchers.any; import org.mockito.Mock; import static org.mockito.Mockito.atLeastOnce; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import org.mockito.junit.MockitoJUnitRunner; @@ -189,4 +195,42 @@ public class TimersPluginTest verify(infoBoxManager, atLeastOnce()).removeIf(any()); } + + @Test + public void testStamina() + { + when(timersConfig.showStamina()).thenReturn(true); + ChatMessage chatMessage = new ChatMessage(null, ChatMessageType.SPAM, "", "You drink some of your stamina potion.", "", 0); + timersPlugin.onChatMessage(chatMessage); + + ArgumentCaptor captor = ArgumentCaptor.forClass(InfoBox.class); + verify(infoBoxManager).addInfoBox(captor.capture()); + TimerTimer infoBox = (TimerTimer) captor.getValue(); + assertEquals(GameTimer.STAMINA, infoBox.getTimer()); + assertEquals(Duration.ofMinutes(2), infoBox.getDuration()); + } + + @Test + public void testEndurance() + { + when(timersConfig.showStamina()).thenReturn(true); + + ChatMessage chatMessage = new ChatMessage(null, ChatMessageType.SPAM, "", "Your Ring of endurance doubles the duration of your stamina potion's effect.", "", 0); + timersPlugin.onChatMessage(chatMessage); + + chatMessage = new ChatMessage(null, ChatMessageType.SPAM, "", "You drink some of your stamina potion.", "", 0); + timersPlugin.onChatMessage(chatMessage); + + ArgumentCaptor captor = ArgumentCaptor.forClass(InfoBox.class); + verify(infoBoxManager).addInfoBox(captor.capture()); + TimerTimer infoBox = (TimerTimer) captor.getValue(); + assertEquals(GameTimer.STAMINA, infoBox.getTimer()); + assertEquals(Duration.ofMinutes(4), infoBox.getDuration()); + + // unwield ring + timersPlugin.onItemContainerChanged(new ItemContainerChanged(InventoryID.EQUIPMENT.getId(), mock(ItemContainer.class))); + // some time has elapsed in the test; this should be just under 2 mins + int mins = (int) infoBox.getDuration().toMinutes(); + assertTrue(mins == 1 || mins == 2); + } } \ No newline at end of file From b2aa2537bfddbd6c22cb885866663f4965855018 Mon Sep 17 00:00:00 2001 From: Spedwards Date: Tue, 16 Jun 2020 09:28:23 +1000 Subject: [PATCH 19/31] clientui: respect multiple displays when saving/loading client position --- .../java/net/runelite/client/ui/ClientUI.java | 65 ++++++++++++++----- 1 file changed, 49 insertions(+), 16 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java b/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java index 78fffa2128..9fdd9d60ae 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java @@ -35,6 +35,8 @@ import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.GraphicsConfiguration; +import java.awt.GraphicsDevice; +import java.awt.GraphicsEnvironment; import java.awt.LayoutManager; import java.awt.Rectangle; import java.awt.Toolkit; @@ -510,7 +512,32 @@ public class ClientUI if (clientBounds != null) { frame.setBounds(clientBounds); - frame.revalidateMinimumSize(); + + // frame.getGraphicsConfiguration().getBounds() returns the bounds for the primary display. + // We have to find the correct graphics configuration by using the intersection of the client boundaries. + GraphicsConfiguration gc = getIntersectingDisplay(clientBounds); + if (gc != null) + { + double scale = gc.getDefaultTransform().getScaleX(); + + // When Windows screen scaling is on, the position/bounds will be wrong when they are set. + // The bounds saved in shutdown are the full, non-scaled co-ordinates. + if (scale != 1) + { + clientBounds.setRect( + clientBounds.getX() / scale, + clientBounds.getY() / scale, + clientBounds.getWidth() / scale, + clientBounds.getHeight() / scale); + + frame.setMinimumSize(clientBounds.getSize()); + frame.setBounds(clientBounds); + } + } + else + { + frame.setLocationRelativeTo(frame.getOwner()); + } } else { @@ -533,25 +560,13 @@ public class ClientUI frame.setLocationRelativeTo(frame.getOwner()); } - // If the frame is well hidden (e.g. unplugged 2nd screen), - // we want to move it back to default position as it can be - // hard for the user to reposition it themselves otherwise. - Rectangle clientBounds = frame.getBounds(); - Rectangle screenBounds = frame.getGraphicsConfiguration().getBounds(); - if (clientBounds.x + clientBounds.width - CLIENT_WELL_HIDDEN_MARGIN < screenBounds.getX() || - clientBounds.x + CLIENT_WELL_HIDDEN_MARGIN > screenBounds.getX() + screenBounds.getWidth() || - clientBounds.y + CLIENT_WELL_HIDDEN_MARGIN_TOP < screenBounds.getY() || - clientBounds.y + CLIENT_WELL_HIDDEN_MARGIN > screenBounds.getY() + screenBounds.getHeight()) - { - frame.setLocationRelativeTo(frame.getOwner()); - } - // Show frame frame.setVisible(true); frame.toFront(); requestFocus(); giveClientFocus(); log.info("Showing frame {}", frame); + frame.revalidateMinimumSize(); }); // Show out of date dialog if needed @@ -564,6 +579,24 @@ public class ClientUI } } + private GraphicsConfiguration getIntersectingDisplay(final Rectangle bounds) + { + GraphicsDevice[] gds = GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices(); + + for (GraphicsDevice gd : gds) + { + GraphicsConfiguration gc = gd.getDefaultConfiguration(); + + final Rectangle displayBounds = gc.getBounds(); + if (displayBounds.intersects(bounds)) + { + return gc; + } + } + + return null; + } + private boolean showWarningOnExit() { if (config.warningOnExit() == WarningOnExit.ALWAYS) @@ -1056,14 +1089,14 @@ public class ClientUI private void saveClientBoundsConfig() { + final Rectangle bounds = frame.getBounds(); if ((frame.getExtendedState() & JFrame.MAXIMIZED_BOTH) != 0) { + configManager.setConfiguration(CONFIG_GROUP, CONFIG_CLIENT_BOUNDS, bounds); configManager.setConfiguration(CONFIG_GROUP, CONFIG_CLIENT_MAXIMIZED, true); } else { - final Rectangle bounds = frame.getBounds(); - // Try to expand sidebar if (!sidebarOpen) { From 93c1e36bea5164204de01ae5e90cc069791c3630 Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 15 Jun 2020 21:19:55 -0400 Subject: [PATCH 20/31] config: increase config cache to 256 This regularly fills up currently when idling ingame with my normal config --- .../net/runelite/client/config/ConfigInvocationHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runelite-client/src/main/java/net/runelite/client/config/ConfigInvocationHandler.java b/runelite-client/src/main/java/net/runelite/client/config/ConfigInvocationHandler.java index b78117b8ce..30087bb33a 100644 --- a/runelite-client/src/main/java/net/runelite/client/config/ConfigInvocationHandler.java +++ b/runelite-client/src/main/java/net/runelite/client/config/ConfigInvocationHandler.java @@ -40,7 +40,7 @@ class ConfigInvocationHandler implements InvocationHandler private final ConfigManager manager; private final Cache cache = CacheBuilder.newBuilder() - .maximumSize(128) + .maximumSize(256) .build(); ConfigInvocationHandler(ConfigManager manager) From 2dd9bbbf5eb68aa88e234b1f22ef95356d939d06 Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 15 Jun 2020 21:44:09 -0400 Subject: [PATCH 21/31] cannon plugin: move spot scene check to game state change event --- .../client/plugins/cannon/CannonCounter.java | 2 +- .../client/plugins/cannon/CannonPlugin.java | 21 +++++++------------ .../plugins/cannon/CannonSpotOverlay.java | 9 +++++--- .../client/plugins/cannon/CannonSpots.java | 2 +- 4 files changed, 16 insertions(+), 18 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonCounter.java b/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonCounter.java index bd13e194be..a4b8028e47 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonCounter.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonCounter.java @@ -28,7 +28,7 @@ import java.awt.Color; import java.awt.image.BufferedImage; import net.runelite.client.ui.overlay.infobox.InfoBox; -public class CannonCounter extends InfoBox +class CannonCounter extends InfoBox { private final CannonPlugin plugin; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonPlugin.java index 39bcc3b01c..7492978edf 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonPlugin.java @@ -26,7 +26,6 @@ package net.runelite.client.plugins.cannon; import com.google.inject.Provides; import java.awt.Color; -import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; @@ -37,6 +36,7 @@ import net.runelite.api.AnimationID; import net.runelite.api.ChatMessageType; import net.runelite.api.Client; import net.runelite.api.GameObject; +import net.runelite.api.GameState; import net.runelite.api.InventoryID; import net.runelite.api.Item; import net.runelite.api.ItemID; @@ -47,8 +47,8 @@ import static net.runelite.api.ProjectileID.CANNONBALL; import static net.runelite.api.ProjectileID.GRANITE_CANNONBALL; import net.runelite.api.coords.WorldPoint; import net.runelite.api.events.ChatMessage; -import net.runelite.client.events.ConfigChanged; import net.runelite.api.events.GameObjectSpawned; +import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameTick; import net.runelite.api.events.ItemContainerChanged; import net.runelite.api.events.ProjectileMoved; @@ -56,10 +56,10 @@ import net.runelite.client.Notifier; import net.runelite.client.callback.ClientThread; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; -import net.runelite.client.task.Schedule; import net.runelite.client.ui.overlay.OverlayManager; import net.runelite.client.ui.overlay.infobox.InfoBoxManager; @@ -217,13 +217,10 @@ public class CannonPlugin extends Plugin } - @Schedule( - period = 1, - unit = ChronoUnit.SECONDS - ) - public void checkSpots() + @Subscribe + public void onGameStateChanged(GameStateChanged gameStateChanged) { - if (!config.showCannonSpots()) + if (gameStateChanged.getGameState() != GameState.LOGGED_IN) { return; } @@ -231,12 +228,10 @@ public class CannonPlugin extends Plugin spotPoints.clear(); for (WorldPoint spot : CannonSpots.getCannonSpots()) { - if (spot.getPlane() != client.getPlane() || !spot.isInScene(client)) + if (WorldPoint.isInScene(client, spot.getX(), spot.getY())) { - continue; + spotPoints.add(spot); } - - spotPoints.add(spot); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonSpotOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonSpotOverlay.java index 01c3eff871..b7774855b5 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonSpotOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonSpotOverlay.java @@ -29,6 +29,7 @@ import java.awt.Dimension; import java.awt.Graphics2D; import java.awt.Polygon; import java.awt.image.BufferedImage; +import java.util.List; import javax.inject.Inject; import lombok.AccessLevel; import lombok.Setter; @@ -43,7 +44,7 @@ import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayPosition; import net.runelite.client.ui.overlay.OverlayUtil; -public class CannonSpotOverlay extends Overlay +class CannonSpotOverlay extends Overlay { private static final int MAX_DISTANCE = 2350; @@ -69,12 +70,14 @@ public class CannonSpotOverlay extends Overlay @Override public Dimension render(Graphics2D graphics) { - if (hidden || !config.showCannonSpots() || plugin.isCannonPlaced()) + List spotPoints = plugin.getSpotPoints(); + + if (hidden || spotPoints.isEmpty() || !config.showCannonSpots() || plugin.isCannonPlaced()) { return null; } - for (WorldPoint spot : plugin.getSpotPoints()) + for (WorldPoint spot : spotPoints) { if (spot.getPlane() != client.getPlane()) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonSpots.java b/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonSpots.java index 85bc05f217..764a149520 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonSpots.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cannon/CannonSpots.java @@ -30,7 +30,7 @@ import java.util.List; import lombok.Getter; import net.runelite.api.coords.WorldPoint; -public enum CannonSpots +enum CannonSpots { BLOODVELDS(new WorldPoint(2439, 9821, 0), new WorldPoint(2448, 9821, 0), new WorldPoint(2472, 9832, 0), new WorldPoint(2453, 9817, 0)), From 2ce229f528ca7ae64af9e2395405f523dc23f113 Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 16 Jun 2020 14:45:26 -0400 Subject: [PATCH 22/31] timetracking: add option to hide farm contract infobox This also cleans up the existing infobox add/removal code --- .../plugins/timetracking/TimeTrackingConfig.java | 15 +++++++++++++-- .../farming/FarmingContractInfoBox.java | 6 ++++++ .../farming/FarmingContractManager.java | 12 +++--------- 3 files changed, 22 insertions(+), 11 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/TimeTrackingConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/TimeTrackingConfig.java index 0f7598e4ca..0815ae161c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/TimeTrackingConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/TimeTrackingConfig.java @@ -71,11 +71,22 @@ public interface TimeTrackingConfig extends Config return false; } + @ConfigItem( + keyName = "farmingContractInfoBox", + name = "Show farming contract infobox", + description = "Show an infobox of your current farming contract when inside the farming guild", + position = 4 + ) + default boolean farmingContractInfoBox() + { + return true; + } + @ConfigItem( keyName = "defaultTimerMinutes", name = "Default Time", description = "The default time for the timer in minutes", - position = 4 + position = 5 ) @Units(Units.MINUTES) default int defaultTimerMinutes() @@ -87,7 +98,7 @@ public interface TimeTrackingConfig extends Config keyName = "sortOrder", name = "Sort Order", description = "The order in which to sort the timers", - position = 5 + position = 6 ) default SortOrder sortOrder() { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingContractInfoBox.java b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingContractInfoBox.java index 1c6fb1a19d..eab628c2c4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingContractInfoBox.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingContractInfoBox.java @@ -107,4 +107,10 @@ class FarmingContractInfoBox extends InfoBox return sb.toString(); } + + @Override + public boolean render() + { + return config.farmingContractInfoBox(); + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingContractManager.java b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingContractManager.java index 77ab730ef8..e1684097f6 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingContractManager.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingContractManager.java @@ -161,25 +161,19 @@ public class FarmingContractManager private void handleInfoBox() { - if (infoBox != null) + if (contract != (infoBox == null ? null : infoBox.getContract())) { - if (contract == null) + if (infoBox != null) { infoBoxManager.removeInfoBox(infoBox); infoBox = null; } - else if (infoBox.getContract() != contract) + if (contract != null) { - infoBoxManager.removeInfoBox(infoBox); infoBox = new FarmingContractInfoBox(itemManager.getImage(contract.getItemID()), plugin, contract, config, this); infoBoxManager.addInfoBox(infoBox); } } - else if (contract != null) - { - infoBox = new FarmingContractInfoBox(itemManager.getImage(contract.getItemID()), plugin, contract, config, this); - infoBoxManager.addInfoBox(infoBox); - } } private void handleGuildmasterJaneWidgetDialog() From c720cda68d1902caeff9f5d564515dca092104c7 Mon Sep 17 00:00:00 2001 From: JorgeVidal29 <55999117+JorgeVidal29@users.noreply.github.com> Date: Wed, 17 Jun 2020 03:13:37 -0400 Subject: [PATCH 23/31] CoordinateClue: Note 76 Agility requirement for BJS fairy ring (#11899) --- .../client/plugins/cluescrolls/clues/CoordinateClue.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CoordinateClue.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CoordinateClue.java index d0f481da1f..cdf5b1a300 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CoordinateClue.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CoordinateClue.java @@ -119,7 +119,7 @@ public class CoordinateClue extends ClueScroll implements TextClueScroll, Locati .put(new WorldPoint(1247, 3726, 0), new CoordinateClueInfo("Just inside the Farming Guild")) .put(new WorldPoint(3770, 3898, 0), new CoordinateClueInfo("On the small island north-east of Fossil Island's mushroom forest.")) // Hard - .put(new WorldPoint(2209, 3161, 0), new CoordinateClueInfo("North-east of Tyras Camp (BJS).", SARADOMIN_WIZARD)) + .put(new WorldPoint(2209, 3161, 0), new CoordinateClueInfo("North-east of Tyras Camp (BJS if 76 Agility).", SARADOMIN_WIZARD)) .put(new WorldPoint(2181, 3206, 0), new CoordinateClueInfo("South of Iorwerth Camp.", SARADOMIN_WIZARD)) .put(new WorldPoint(3081, 3209, 0), new CoordinateClueInfo("Small Island (CLP).", SARADOMIN_WIZARD)) .put(new WorldPoint(3399, 3246, 0), new CoordinateClueInfo("Behind the Duel Arena.")) @@ -207,7 +207,7 @@ public class CoordinateClue extends ClueScroll implements TextClueScroll, Locati .put(new WorldPoint(3560, 3987, 0), new CoordinateClueInfo("Lithkren. Digsite pendant teleport if unlocked, otherwise take rowboat from west of Mushroom Meadow Mushtree.", ARMADYLIAN_OR_BANDOSIAN_GUARD)) // Master .put(new WorldPoint(2178, 3209, 0), new CoordinateClueInfo("South of Iorwerth Camp.", BRASSICAN_MAGE)) - .put(new WorldPoint(2155, 3100, 0), new CoordinateClueInfo("South of Port Tyras (BJS).", BRASSICAN_MAGE)) + .put(new WorldPoint(2155, 3100, 0), new CoordinateClueInfo("South of Port Tyras (BJS if 76 Agility).", BRASSICAN_MAGE)) .put(new WorldPoint(2217, 3092, 0), new CoordinateClueInfo("Poison Waste island (DLR).", BRASSICAN_MAGE)) .put(new WorldPoint(3830, 3060, 0), new CoordinateClueInfo("Small island located north-east of Mos Le'Harmless.", BRASSICAN_MAGE, true, Varbits.FIRE_PIT_MOS_LE_HARMLESS)) .put(new WorldPoint(2834, 3271, 0), new CoordinateClueInfo("Crandor island.", BRASSICAN_MAGE)) From 5ab4c76c8cad198d89141ebe8ec0b5fb0e157ff0 Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 16 Jun 2020 13:52:01 -0400 Subject: [PATCH 24/31] runelite: add startup log with versions and arguments --- .../src/main/java/net/runelite/client/RuneLite.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/runelite-client/src/main/java/net/runelite/client/RuneLite.java b/runelite-client/src/main/java/net/runelite/client/RuneLite.java index ef6d299ea4..3e39149043 100644 --- a/runelite-client/src/main/java/net/runelite/client/RuneLite.java +++ b/runelite-client/src/main/java/net/runelite/client/RuneLite.java @@ -257,6 +257,10 @@ public class RuneLite PROFILES_DIR.mkdirs(); + log.info("RuneLite {} (launcher version {}) starting up, args: {}", + RuneLiteProperties.getVersion(), RuneLiteProperties.getLauncherVersion() == null ? "unknown" : RuneLiteProperties.getLauncherVersion(), + args.length == 0 ? "none" : String.join(" ", args)); + final long start = System.currentTimeMillis(); injector = Guice.createInjector(new RuneLiteModule( From bf49da90b4913f38bd96dec40569d968031b4e0d Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 16 Jun 2020 13:52:38 -0400 Subject: [PATCH 25/31] client: add safemode flag to disable gpu plugin and externals --- .../src/main/java/net/runelite/client/RuneLite.java | 2 ++ .../java/net/runelite/client/RuneLiteModule.java | 12 ++++-------- .../externalplugins/ExternalPluginManager.java | 11 +++++++++++ .../runelite/client/plugins/PluginDescriptor.java | 2 ++ .../net/runelite/client/plugins/PluginManager.java | 11 +++++++++++ .../net/runelite/client/plugins/gpu/GpuPlugin.java | 3 ++- .../runelite/client/plugins/PluginManagerTest.java | 10 +++++----- 7 files changed, 37 insertions(+), 14 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/RuneLite.java b/runelite-client/src/main/java/net/runelite/client/RuneLite.java index 3e39149043..843fc579ac 100644 --- a/runelite-client/src/main/java/net/runelite/client/RuneLite.java +++ b/runelite-client/src/main/java/net/runelite/client/RuneLite.java @@ -177,6 +177,7 @@ public class RuneLite final OptionParser parser = new OptionParser(); parser.accepts("developer-mode", "Enable developer tools"); parser.accepts("debug", "Show extra debugging output"); + parser.accepts("safe-mode", "Disables external plugins and the GPU plugin"); final ArgumentAcceptingOptionSpec sessionfile = parser.accepts("sessionfile", "Use a specified session file") .withRequiredArg() @@ -266,6 +267,7 @@ public class RuneLite injector = Guice.createInjector(new RuneLiteModule( clientLoader, developerMode, + options.has("safe-mode"), options.valueOf(sessionfile), options.valueOf(configfile))); diff --git a/runelite-client/src/main/java/net/runelite/client/RuneLiteModule.java b/runelite-client/src/main/java/net/runelite/client/RuneLiteModule.java index 7f8dd55ddb..c1489de882 100644 --- a/runelite-client/src/main/java/net/runelite/client/RuneLiteModule.java +++ b/runelite-client/src/main/java/net/runelite/client/RuneLiteModule.java @@ -34,6 +34,7 @@ import java.util.concurrent.ScheduledExecutorService; import java.util.function.Supplier; import javax.annotation.Nullable; import javax.inject.Singleton; +import lombok.AllArgsConstructor; import net.runelite.api.Client; import net.runelite.api.hooks.Callbacks; import net.runelite.client.account.SessionManager; @@ -53,27 +54,22 @@ import net.runelite.http.api.RuneLiteAPI; import okhttp3.Cache; import okhttp3.OkHttpClient; +@AllArgsConstructor public class RuneLiteModule extends AbstractModule { private static final int MAX_OKHTTP_CACHE_SIZE = 20 * 1024 * 1024; // 20mb private final Supplier clientLoader; private final boolean developerMode; + private final boolean safeMode; private final File sessionfile; private final File config; - public RuneLiteModule(Supplier clientLoader, boolean developerMode, File sessionfile, File config) - { - this.clientLoader = clientLoader; - this.developerMode = developerMode; - this.sessionfile = sessionfile; - this.config = config; - } - @Override protected void configure() { bindConstant().annotatedWith(Names.named("developerMode")).to(developerMode); + bindConstant().annotatedWith(Names.named("safeMode")).to(safeMode); bind(File.class).annotatedWith(Names.named("sessionfile")).toInstance(sessionfile); bind(File.class).annotatedWith(Names.named("config")).toInstance(config); bind(ScheduledExecutorService.class).toInstance(new ExecutorServiceExceptionLogger(Executors.newSingleThreadScheduledExecutor())); diff --git a/runelite-client/src/main/java/net/runelite/client/externalplugins/ExternalPluginManager.java b/runelite-client/src/main/java/net/runelite/client/externalplugins/ExternalPluginManager.java index 197eb31a53..b2175f3973 100644 --- a/runelite-client/src/main/java/net/runelite/client/externalplugins/ExternalPluginManager.java +++ b/runelite-client/src/main/java/net/runelite/client/externalplugins/ExternalPluginManager.java @@ -44,6 +44,7 @@ import java.util.Set; import java.util.concurrent.ScheduledExecutorService; import java.util.function.Function; import javax.inject.Inject; +import javax.inject.Named; import javax.inject.Singleton; import javax.swing.SwingUtilities; import lombok.extern.slf4j.Slf4j; @@ -75,6 +76,10 @@ public class ExternalPluginManager private static final String PLUGIN_LIST_KEY = "externalPlugins"; private static Class[] builtinExternals = null; + @Inject + @Named("safeMode") + private boolean safeMode; + @Inject private ConfigManager configManager; @@ -115,6 +120,12 @@ public class ExternalPluginManager private void refreshPlugins() { + if (safeMode) + { + log.debug("External plugins are disabled in safe mode!"); + return; + } + Multimap loadedExternalPlugins = HashMultimap.create(); for (Plugin p : pluginManager.getPlugins()) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/PluginDescriptor.java b/runelite-client/src/main/java/net/runelite/client/plugins/PluginDescriptor.java index 540adecc24..57a7a4718f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/PluginDescriptor.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/PluginDescriptor.java @@ -58,4 +58,6 @@ public @interface PluginDescriptor boolean developerPlugin() default false; boolean loadWhenOutdated() default false; + + boolean loadInSafeMode() default true; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/PluginManager.java b/runelite-client/src/main/java/net/runelite/client/plugins/PluginManager.java index f48da0de17..d3f430259b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/PluginManager.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/PluginManager.java @@ -88,6 +88,7 @@ public class PluginManager private static final String PLUGIN_PACKAGE = "net.runelite.client.plugins"; private final boolean developerMode; + private final boolean safeMode; private final EventBus eventBus; private final Scheduler scheduler; private final ConfigManager configManager; @@ -103,6 +104,7 @@ public class PluginManager @VisibleForTesting PluginManager( @Named("developerMode") final boolean developerMode, + @Named("safeMode") final boolean safeMode, final EventBus eventBus, final Scheduler scheduler, final ConfigManager configManager, @@ -110,6 +112,7 @@ public class PluginManager final Provider sceneTileManager) { this.developerMode = developerMode; + this.safeMode = safeMode; this.eventBus = eventBus; this.scheduler = scheduler; this.configManager = configManager; @@ -309,6 +312,14 @@ public class PluginManager continue; } + if (safeMode && !pluginDescriptor.loadInSafeMode()) + { + log.debug("Disabling {} due to safe mode", clazz); + // also disable the plugin from autostarting later + configManager.unsetConfiguration(RuneLiteConfig.GROUP_NAME, clazz.getSimpleName().toLowerCase()); + continue; + } + Class pluginClass = (Class) clazz; graph.addNode(pluginClass); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuPlugin.java index 4e16ffd2e0..e728c7dfb4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/gpu/GpuPlugin.java @@ -98,7 +98,8 @@ import net.runelite.client.util.OSType; name = "GPU", description = "Utilizes the GPU", enabledByDefault = false, - tags = {"fog", "draw distance"} + tags = {"fog", "draw distance"}, + loadInSafeMode = false ) @Slf4j public class GpuPlugin extends Plugin implements DrawCallbacks diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/PluginManagerTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/PluginManagerTest.java index 929d83bbd4..003e43361d 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/PluginManagerTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/PluginManagerTest.java @@ -83,7 +83,7 @@ public class PluginManagerTest public void before() throws IOException { Injector injector = Guice.createInjector(Modules - .override(new RuneLiteModule(() -> null, true, + .override(new RuneLiteModule(() -> null, true, false, RuneLite.DEFAULT_SESSION_FILE, RuneLite.DEFAULT_CONFIG_FILE)) .with(BoundFieldModule.of(this))); @@ -114,7 +114,7 @@ public class PluginManagerTest @Test public void testLoadPlugins() throws Exception { - PluginManager pluginManager = new PluginManager(false, null, null, null, null, null); + PluginManager pluginManager = new PluginManager(false, false, null, null, null, null, null); pluginManager.setOutdated(true); pluginManager.loadCorePlugins(); Collection plugins = pluginManager.getPlugins(); @@ -125,7 +125,7 @@ public class PluginManagerTest .count(); assertEquals(expected, plugins.size()); - pluginManager = new PluginManager(false, null, null, null, null, null); + pluginManager = new PluginManager(false, false, null, null, null, null, null); pluginManager.loadCorePlugins(); plugins = pluginManager.getPlugins(); @@ -146,11 +146,11 @@ public class PluginManagerTest { List modules = new ArrayList<>(); modules.add(new GraphvizModule()); - modules.add(new RuneLiteModule(() -> null, true, + modules.add(new RuneLiteModule(() -> null, true, false, RuneLite.DEFAULT_SESSION_FILE, RuneLite.DEFAULT_CONFIG_FILE)); - PluginManager pluginManager = new PluginManager(true, null, null, null, null, null); + PluginManager pluginManager = new PluginManager(true, false, null, null, null, null, null); pluginManager.loadCorePlugins(); for (Plugin p : pluginManager.getPlugins()) { From 1b7dadeb68033c5eeed780762f75e99dd3aaa9d4 Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 16 Jun 2020 17:21:39 -0400 Subject: [PATCH 26/31] overlay: optimize some menu handling code --- .../java/net/runelite/client/events/OverlayMenuClicked.java | 6 ++---- .../java/net/runelite/client/ui/overlay/OverlayManager.java | 5 ++--- .../net/runelite/client/ui/overlay/OverlayRenderer.java | 5 +++++ 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/events/OverlayMenuClicked.java b/runelite-client/src/main/java/net/runelite/client/events/OverlayMenuClicked.java index 6394e7c799..8b02c808f1 100644 --- a/runelite-client/src/main/java/net/runelite/client/events/OverlayMenuClicked.java +++ b/runelite-client/src/main/java/net/runelite/client/events/OverlayMenuClicked.java @@ -24,16 +24,14 @@ */ package net.runelite.client.events; -import lombok.AllArgsConstructor; -import lombok.Data; +import lombok.Value; import net.runelite.client.ui.overlay.Overlay; import net.runelite.client.ui.overlay.OverlayMenuEntry; /** * Event fired when an overlay menu entry is clicked. */ -@Data -@AllArgsConstructor +@Value public class OverlayMenuClicked { private OverlayMenuEntry entry; diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayManager.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayManager.java index e5f52668e0..183f92a5c7 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayManager.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayManager.java @@ -143,10 +143,9 @@ public class OverlayManager event.consume(); - Optional optionalOverlay = overlays.stream().filter(o -> overlays.indexOf(o) == event.getId()).findAny(); - if (optionalOverlay.isPresent()) + Overlay overlay = overlays.get(event.getId()); + if (overlay != null) { - Overlay overlay = optionalOverlay.get(); List menuEntries = overlay.getMenuEntries(); Optional optionalOverlayMenuEntry = menuEntries.stream() .filter(me -> me.getOption().equals(event.getMenuOption())) diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java index ddf0a44bd4..0a903d5e3e 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java @@ -792,6 +792,11 @@ public class OverlayRenderer extends MouseAdapter implements KeyListener private MenuEntry[] createRightClickMenuEntries(Overlay overlay) { List menuEntries = overlay.getMenuEntries(); + if (menuEntries.isEmpty()) + { + return null; + } + final MenuEntry[] entries = new MenuEntry[menuEntries.size()]; // Add in reverse order so they display correctly in the right-click menu From 48357f9329fb1f7bea046411b354e21f1e04eb14 Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 16 Jun 2020 21:06:53 -0400 Subject: [PATCH 27/31] client: add support for menu options on infoboxes --- .../java/net/runelite/api/MenuAction.java | 4 + .../java/net/runelite/client/RuneLite.java | 1 + .../client/events/InfoBoxMenuClicked.java | 36 +++++++++ .../plugins/devtools/DevToolsPanel.java | 9 ++- .../client/ui/overlay/OverlayManager.java | 13 ++-- .../client/ui/overlay/OverlayRenderer.java | 3 +- .../overlay/components/InfoBoxComponent.java | 3 + .../client/ui/overlay/infobox/InfoBox.java | 7 ++ .../ui/overlay/infobox/InfoBoxOverlay.java | 75 +++++++++++++++---- 9 files changed, 129 insertions(+), 22 deletions(-) create mode 100644 runelite-client/src/main/java/net/runelite/client/events/InfoBoxMenuClicked.java diff --git a/runelite-api/src/main/java/net/runelite/api/MenuAction.java b/runelite-api/src/main/java/net/runelite/api/MenuAction.java index a00a1ce2f0..8f8033ad8c 100644 --- a/runelite-api/src/main/java/net/runelite/api/MenuAction.java +++ b/runelite-api/src/main/java/net/runelite/api/MenuAction.java @@ -277,6 +277,10 @@ public enum MenuAction * a player and have its identifier set to a player index. */ RUNELITE_PLAYER(1503), + /** + * Menu action for InfoBox menu entries + */ + RUNELITE_INFOBOX(1504), /** * Menu action triggered when the id is not defined in this class. diff --git a/runelite-client/src/main/java/net/runelite/client/RuneLite.java b/runelite-client/src/main/java/net/runelite/client/RuneLite.java index 843fc579ac..c8cd6f352f 100644 --- a/runelite-client/src/main/java/net/runelite/client/RuneLite.java +++ b/runelite-client/src/main/java/net/runelite/client/RuneLite.java @@ -361,6 +361,7 @@ public class RuneLite eventBus.register(lootManager.get()); eventBus.register(chatboxPanelManager.get()); eventBus.register(hooks.get()); + eventBus.register(infoBoxOverlay.get()); // Add core overlays WidgetOverlay.createOverlays(client).forEach(overlayManager::add); diff --git a/runelite-client/src/main/java/net/runelite/client/events/InfoBoxMenuClicked.java b/runelite-client/src/main/java/net/runelite/client/events/InfoBoxMenuClicked.java new file mode 100644 index 0000000000..c23b26a75b --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/events/InfoBoxMenuClicked.java @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2020, 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.events; + +import lombok.Value; +import net.runelite.client.ui.overlay.OverlayMenuEntry; +import net.runelite.client.ui.overlay.infobox.InfoBox; + +@Value +public class InfoBoxMenuClicked +{ + private OverlayMenuEntry entry; + private InfoBox infoBox; +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsPanel.java b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsPanel.java index 257c231077..3f8ee667ff 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsPanel.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsPanel.java @@ -33,9 +33,11 @@ import javax.inject.Inject; import javax.swing.JButton; import javax.swing.JPanel; import net.runelite.api.Client; +import net.runelite.api.MenuAction; import net.runelite.client.Notifier; import net.runelite.client.ui.ColorScheme; import net.runelite.client.ui.PluginPanel; +import net.runelite.client.ui.overlay.OverlayMenuEntry; import net.runelite.client.ui.overlay.infobox.Counter; import net.runelite.client.ui.overlay.infobox.InfoBoxManager; import net.runelite.client.util.ImageUtil; @@ -166,7 +168,12 @@ class DevToolsPanel extends PluginPanel }); final JButton newInfoboxBtn = new JButton("Infobox"); - newInfoboxBtn.addActionListener(e -> infoBoxManager.addInfoBox(new Counter(ImageUtil.getResourceStreamFromClass(getClass(), "devtools_icon.png"), plugin, 42))); + newInfoboxBtn.addActionListener(e -> + { + Counter counter = new Counter(ImageUtil.getResourceStreamFromClass(getClass(), "devtools_icon.png"), plugin, 42); + counter.getMenuEntries().add(new OverlayMenuEntry(MenuAction.RUNELITE_INFOBOX, "Test", "DevTools")); + infoBoxManager.addInfoBox(counter); + }); container.add(newInfoboxBtn); final JButton clearInfoboxBtn = new JButton("Clear Infobox"); diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayManager.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayManager.java index 183f92a5c7..b64f845695 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayManager.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayManager.java @@ -33,7 +33,6 @@ import java.util.Comparator; import java.util.EnumMap; import java.util.List; import java.util.Map; -import java.util.Optional; import java.util.function.Predicate; import javax.inject.Inject; import javax.inject.Singleton; @@ -136,7 +135,8 @@ public class OverlayManager @Subscribe public void onMenuOptionClicked(MenuOptionClicked event) { - if (event.getMenuAction() != MenuAction.RUNELITE_OVERLAY) + MenuAction menuAction = event.getMenuAction(); + if (menuAction != MenuAction.RUNELITE_OVERLAY && menuAction != MenuAction.RUNELITE_OVERLAY_CONFIG) { return; } @@ -147,12 +147,13 @@ public class OverlayManager if (overlay != null) { List menuEntries = overlay.getMenuEntries(); - Optional optionalOverlayMenuEntry = menuEntries.stream() + OverlayMenuEntry overlayMenuEntry = menuEntries.stream() .filter(me -> me.getOption().equals(event.getMenuOption())) - .findAny(); - if (optionalOverlayMenuEntry.isPresent()) + .findAny() + .orElse(null); + if (overlayMenuEntry != null) { - eventBus.post(new OverlayMenuClicked(optionalOverlayMenuEntry.get(), overlay)); + eventBus.post(new OverlayMenuClicked(overlayMenuEntry, overlay)); } } } diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java index 0a903d5e3e..a2419df6a8 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java @@ -46,7 +46,6 @@ import javax.swing.SwingUtilities; import lombok.extern.slf4j.Slf4j; import net.runelite.api.Client; import net.runelite.api.GameState; -import net.runelite.api.MenuAction; import net.runelite.api.MenuEntry; import net.runelite.api.events.BeforeRender; import net.runelite.api.events.ClientTick; @@ -807,7 +806,7 @@ public class OverlayRenderer extends MouseAdapter implements KeyListener final MenuEntry entry = new MenuEntry(); entry.setOption(overlayMenuEntry.getOption()); entry.setTarget(ColorUtil.wrapWithColorTag(overlayMenuEntry.getTarget(), JagexColors.MENU_TARGET)); - entry.setType(MenuAction.RUNELITE_OVERLAY.getId()); + entry.setType(overlayMenuEntry.getMenuAction().getId()); entry.setIdentifier(overlayManager.getOverlays().indexOf(overlay)); // overlay id entries[i] = entry; diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/InfoBoxComponent.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/InfoBoxComponent.java index a72d13f73d..cb02a50672 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/InfoBoxComponent.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/components/InfoBoxComponent.java @@ -35,6 +35,7 @@ import java.awt.image.BufferedImage; import lombok.Getter; import lombok.Setter; import net.runelite.client.ui.FontManager; +import net.runelite.client.ui.overlay.infobox.InfoBox; @Setter public class InfoBoxComponent implements LayoutableRenderableEntity @@ -54,6 +55,8 @@ public class InfoBoxComponent implements LayoutableRenderableEntity private Color color = Color.WHITE; private Color backgroundColor = ComponentConstants.STANDARD_BACKGROUND_COLOR; private BufferedImage image; + @Getter + private InfoBox infoBox; @Override public Dimension render(Graphics2D graphics) diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/infobox/InfoBox.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/infobox/InfoBox.java index 777bb9d634..364979cf36 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/infobox/InfoBox.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/infobox/InfoBox.java @@ -26,11 +26,14 @@ package net.runelite.client.ui.overlay.infobox; import java.awt.Color; import java.awt.image.BufferedImage; +import java.util.ArrayList; +import java.util.List; import javax.annotation.Nonnull; import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; import net.runelite.client.plugins.Plugin; +import net.runelite.client.ui.overlay.OverlayMenuEntry; public abstract class InfoBox { @@ -54,6 +57,10 @@ public abstract class InfoBox @Setter private String tooltip; + @Getter + @Setter + private List menuEntries = new ArrayList<>(); + public InfoBox(BufferedImage image, @Nonnull Plugin plugin) { this.plugin = plugin; diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/infobox/InfoBoxOverlay.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/infobox/InfoBoxOverlay.java index c04da4b6ee..387eda76ab 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/infobox/InfoBoxOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/infobox/InfoBoxOverlay.java @@ -31,11 +31,18 @@ import java.awt.Dimension; import java.awt.Graphics2D; import java.awt.Point; import java.awt.Rectangle; +import java.util.Collections; import java.util.List; import javax.inject.Inject; import javax.inject.Singleton; import net.runelite.api.Client; +import net.runelite.api.MenuAction; +import net.runelite.api.events.MenuOptionClicked; import net.runelite.client.config.RuneLiteConfig; +import net.runelite.client.eventbus.EventBus; +import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.InfoBoxMenuClicked; +import net.runelite.client.ui.overlay.OverlayMenuEntry; import net.runelite.client.ui.overlay.OverlayPanel; import net.runelite.client.ui.overlay.OverlayPosition; import net.runelite.client.ui.overlay.components.ComponentOrientation; @@ -54,18 +61,23 @@ public class InfoBoxOverlay extends OverlayPanel private final TooltipManager tooltipManager; private final Client client; private final RuneLiteConfig config; + private final EventBus eventBus; + + private InfoBoxComponent hoveredComponent; @Inject private InfoBoxOverlay( InfoBoxManager infoboxManager, TooltipManager tooltipManager, Client client, - RuneLiteConfig config) + RuneLiteConfig config, + EventBus eventBus) { this.tooltipManager = tooltipManager; this.infoboxManager = infoboxManager; this.client = client; this.config = config; + this.eventBus = eventBus; setPosition(OverlayPosition.TOP_LEFT); setClearChildren(false); @@ -80,6 +92,12 @@ public class InfoBoxOverlay extends OverlayPanel { final List infoBoxes = infoboxManager.getInfoBoxes(); + final boolean menuOpen = client.isMenuOpen(); + if (!menuOpen) + { + hoveredComponent = null; + } + if (infoBoxes.isEmpty()) { return null; @@ -112,6 +130,7 @@ public class InfoBoxOverlay extends OverlayPanel infoBoxComponent.setTooltip(box.getTooltip()); infoBoxComponent.setPreferredSize(new Dimension(config.infoBoxSize(), config.infoBoxSize())); infoBoxComponent.setBackgroundColor(config.overlayBackgroundColor()); + infoBoxComponent.setInfoBox(box); panelComponent.getChildren().add(infoBoxComponent); } @@ -122,25 +141,55 @@ public class InfoBoxOverlay extends OverlayPanel for (final LayoutableRenderableEntity child : panelComponent.getChildren()) { - if (child instanceof InfoBoxComponent) + final InfoBoxComponent component = (InfoBoxComponent) child; + + // Create intersection rectangle + final Rectangle intersectionRectangle = new Rectangle(component.getBounds()); + intersectionRectangle.translate(getBounds().x, getBounds().y); + + if (intersectionRectangle.contains(mouse)) { - final InfoBoxComponent component = (InfoBoxComponent) child; - - if (!Strings.isNullOrEmpty(component.getTooltip())) + final String tooltip = component.getTooltip(); + if (!Strings.isNullOrEmpty(tooltip)) { - // Create intersection rectangle - final Rectangle intersectionRectangle = new Rectangle(component.getBounds()); - intersectionRectangle.translate(getBounds().x, getBounds().y); - - if (intersectionRectangle.contains(mouse)) - { - tooltipManager.add(new Tooltip(component.getTooltip())); - } + tooltipManager.add(new Tooltip(tooltip)); } + + if (!menuOpen) + { + hoveredComponent = component; + } + break; } } panelComponent.getChildren().clear(); return dimension; } + + @Override + public List getMenuEntries() + { + // we dynamically build the menu options based on which infobox is hovered + return hoveredComponent == null ? Collections.emptyList() : hoveredComponent.getInfoBox().getMenuEntries(); + } + + @Subscribe + public void onMenuOptionClicked(MenuOptionClicked menuOptionClicked) + { + if (menuOptionClicked.getMenuAction() != MenuAction.RUNELITE_INFOBOX) + { + return; + } + + InfoBox infoBox = hoveredComponent.getInfoBox(); + OverlayMenuEntry overlayMenuEntry = infoBox.getMenuEntries().stream() + .filter(me -> me.getOption().equals(menuOptionClicked.getMenuOption())) + .findAny() + .orElse(null); + if (overlayMenuEntry != null) + { + eventBus.post(new InfoBoxMenuClicked(overlayMenuEntry, infoBox)); + } + } } From 111f099654b080fe83b07a86ee013db0219c1f6c Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 16 Jun 2020 21:14:39 -0400 Subject: [PATCH 28/31] death indicator: add clear option to infobox Co-authored-by: ThatGamerBlue --- .../deathindicator/DeathIndicatorPlugin.java | 101 ++++++++++++------ 1 file changed, 70 insertions(+), 31 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/deathindicator/DeathIndicatorPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/deathindicator/DeathIndicatorPlugin.java index 4a425a1334..72608ec7a9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/deathindicator/DeathIndicatorPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/deathindicator/DeathIndicatorPlugin.java @@ -32,20 +32,25 @@ import java.time.Instant; import java.time.temporal.ChronoUnit; import java.util.Set; import javax.inject.Inject; +import javax.inject.Named; import lombok.extern.slf4j.Slf4j; import net.runelite.api.Client; import net.runelite.api.GameState; import net.runelite.api.ItemID; +import net.runelite.api.MenuAction; import net.runelite.api.coords.WorldPoint; -import net.runelite.client.events.ConfigChanged; +import net.runelite.api.events.CommandExecuted; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameTick; import net.runelite.api.events.PlayerDeath; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; +import net.runelite.client.events.InfoBoxMenuClicked; import net.runelite.client.game.ItemManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; +import net.runelite.client.ui.overlay.OverlayMenuEntry; import net.runelite.client.ui.overlay.infobox.InfoBoxManager; import net.runelite.client.ui.overlay.infobox.Timer; import net.runelite.client.ui.overlay.worldmap.WorldMapPointManager; @@ -59,6 +64,7 @@ import net.runelite.client.util.ImageUtil; @Slf4j public class DeathIndicatorPlugin extends Plugin { + private static final String DEATH_TIMER_CLEAR = "Clear"; private static final Set RESPAWN_REGIONS = ImmutableSet.of( 6457, // Kourend 12850, // Lumbridge @@ -84,6 +90,10 @@ public class DeathIndicatorPlugin extends Plugin @Inject private ItemManager itemManager; + @Inject + @Named("developerMode") + boolean developerMode; + private BufferedImage mapArrow; private Timer deathTimer; @@ -176,25 +186,7 @@ public class DeathIndicatorPlugin extends Plugin log.debug("Died! Grave at {}", lastDeath); - // Save death to config - config.deathLocationX(lastDeath.getX()); - config.deathLocationY(lastDeath.getY()); - config.deathLocationPlane(lastDeath.getPlane()); - config.timeOfDeath(lastDeathTime); - config.deathWorld(lastDeathWorld); - - if (config.showDeathHintArrow()) - { - client.setHintArrow(lastDeath); - } - - if (config.showDeathOnWorldMap()) - { - worldMapPointManager.removeIf(DeathWorldMapPoint.class::isInstance); - worldMapPointManager.add(new DeathWorldMapPoint(lastDeath, this)); - } - - resetInfobox(); + die(lastDeath, lastDeathTime, lastDeathWorld); lastDeath = null; lastDeathTime = null; @@ -209,20 +201,44 @@ public class DeathIndicatorPlugin extends Plugin WorldPoint deathPoint = new WorldPoint(config.deathLocationX(), config.deathLocationY(), config.deathLocationPlane()); if (deathPoint.equals(client.getLocalPlayer().getWorldLocation()) || (deathTimer != null && deathTimer.cull())) { - client.clearHintArrow(); + reset(); - if (deathTimer != null) - { - infoBoxManager.removeInfoBox(deathTimer); - deathTimer = null; - } - - worldMapPointManager.removeIf(DeathWorldMapPoint.class::isInstance); - - resetDeath(); + resetDeathConfig(); } } + @Subscribe + public void onCommandExecuted(CommandExecuted commandExecuted) + { + if (developerMode && commandExecuted.getCommand().equals("die")) + { + die(client.getLocalPlayer().getWorldLocation(), Instant.now(), client.getWorld()); + } + } + + private void die(WorldPoint location, Instant time, int world) + { + // Save death to config + config.deathLocationX(location.getX()); + config.deathLocationY(location.getY()); + config.deathLocationPlane(location.getPlane()); + config.timeOfDeath(time); + config.deathWorld(world); + + if (config.showDeathHintArrow()) + { + client.setHintArrow(location); + } + + if (config.showDeathOnWorldMap()) + { + worldMapPointManager.removeIf(DeathWorldMapPoint.class::isInstance); + worldMapPointManager.add(new DeathWorldMapPoint(location, this)); + } + + resetInfobox(); + } + @Subscribe public void onConfigChanged(ConfigChanged event) { @@ -287,12 +303,34 @@ public class DeathIndicatorPlugin extends Plugin } } + @Subscribe + public void onInfoBoxMenuClicked(InfoBoxMenuClicked infoBoxMenuClicked) + { + if (infoBoxMenuClicked.getInfoBox() == deathTimer) + { + reset(); + } + } + private boolean hasDied() { return config.timeOfDeath() != null; } - private void resetDeath() + private void reset() + { + client.clearHintArrow(); + + if (deathTimer != null) + { + infoBoxManager.removeInfoBox(deathTimer); + deathTimer = null; + } + + worldMapPointManager.removeIf(DeathWorldMapPoint.class::isInstance); + } + + private void resetDeathConfig() { config.deathLocationX(0); config.deathLocationY(0); @@ -317,6 +355,7 @@ public class DeathIndicatorPlugin extends Plugin { deathTimer = new Timer(timeLeft.getSeconds(), ChronoUnit.SECONDS, getBonesImage(), this); deathTimer.setTooltip("Died on world: " + config.deathWorld()); + deathTimer.getMenuEntries().add(new OverlayMenuEntry(MenuAction.RUNELITE_INFOBOX, DEATH_TIMER_CLEAR, "Death Timer")); infoBoxManager.addInfoBox(deathTimer); } } From b0cb875c629f3676c738b1995238feb1776542da Mon Sep 17 00:00:00 2001 From: Max Weber Date: Wed, 17 Jun 2020 11:09:11 -0600 Subject: [PATCH 29/31] rl-api: import (idle)?PoseAnimation --- .../src/main/java/net/runelite/api/Actor.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/runelite-api/src/main/java/net/runelite/api/Actor.java b/runelite-api/src/main/java/net/runelite/api/Actor.java index c469343004..7f649ad15d 100644 --- a/runelite-api/src/main/java/net/runelite/api/Actor.java +++ b/runelite-api/src/main/java/net/runelite/api/Actor.java @@ -125,6 +125,23 @@ public interface Actor extends Renderable */ int getAnimation(); + /** + * Gets the secondary animation the actor is performing. + * + * @return the animation ID + * @see AnimationID + */ + int getPoseAnimation(); + + /** + * If this is equal to the pose animation, the pose animation is ignored when + * you are doing another action. + * + * @return the animation ID + * @see AnimationID + */ + int getIdlePoseAnimation(); + /** * Sets an animation for the actor to perform. * From bab6fce9d519cdb5b8045f850b0d79894ecea74d Mon Sep 17 00:00:00 2001 From: Max Weber Date: Wed, 17 Jun 2020 11:15:03 -0600 Subject: [PATCH 30/31] devtools: Show actor pose animation --- .../client/plugins/devtools/DevToolsOverlay.java | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) 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 aa2f55bd27..3119af3feb 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 @@ -146,12 +146,12 @@ class DevToolsOverlay extends Overlay { if (p != local) { - String text = p.getName() + " (A: " + p.getAnimation() + ") (G: " + p.getGraphic() + ")"; + String text = p.getName() + " (A: " + p.getAnimation() + ") (P: " + p.getPoseAnimation() + ") (G: " + p.getGraphic() + ")"; OverlayUtil.renderActorOverlay(graphics, p, text, BLUE); } } - String text = local.getName() + " (A: " + local.getAnimation() + ") (G: " + local.getGraphic() + ")"; + String text = local.getName() + " (A: " + local.getAnimation() + ") (P: " + local.getPoseAnimation() + ") (G: " + local.getGraphic() + ")"; OverlayUtil.renderActorOverlay(graphics, local, text, CYAN); renderPlayerWireframe(graphics, local, CYAN); } @@ -176,12 +176,8 @@ class DevToolsOverlay extends Overlay } } - String text = String.format("%s (ID: %d) (A: %d) (G: %d)", - composition.getName(), - composition.getId(), - npc.getAnimation(), - npc.getGraphic()); - + String text = composition.getName() + " (ID:" + composition.getId() + ")" + + " (A: " + npc.getAnimation() + ") (P: " + npc.getPoseAnimation() + ") (G: " + npc.getGraphic() + ")"; OverlayUtil.renderActorOverlay(graphics, npc, text, color); } } From 1fbb9058c0c600d3ae0be1cf56cbb030a4e2910f Mon Sep 17 00:00:00 2001 From: whaevr Date: Wed, 17 Jun 2020 14:06:43 -0400 Subject: [PATCH 31/31] loot tracker: add coffins from Hallowed Sepulchre --- .../loottracker/LootTrackerPlugin.java | 26 ++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java index c2dd8508cf..807e96172d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java @@ -112,7 +112,6 @@ import net.runelite.http.api.loottracker.LootAggregate; import net.runelite.http.api.loottracker.LootRecord; import net.runelite.http.api.loottracker.LootRecordType; import net.runelite.http.api.loottracker.LootTrackerClient; -import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.text.WordUtils; @PluginDescriptor( @@ -179,6 +178,11 @@ public class LootTrackerPlugin extends Plugin put(ObjectID.SILVER_CHEST_4130, "Silver key purple"). build(); + // Hallow Sepulchre Coffin handling + private static final String COFFIN_LOOTED_MESSAGE = "You push the coffin lid aside."; + private static final String HALLOWED_SEPULCHRE_COFFIN_EVENT = "Coffin (Hallowed Sepulchre)"; + private static final Set HALLOWED_SEPULCHRE_MAP_REGIONS = ImmutableSet.of(8797, 10077, 9308, 10074, 9050); // one map region per floor + // Last man standing map regions private static final Set LAST_MAN_STANDING_REGIONS = ImmutableSet.of(13658, 13659, 13914, 13915, 13916); @@ -447,7 +451,7 @@ public class LootTrackerPlugin extends Plugin public void onPlayerLootReceived(final PlayerLootReceived playerLootReceived) { // Ignore Last Man Standing player loots - if (isAtLMS()) + if (isPlayerWithinMapRegion(LAST_MAN_STANDING_REGIONS)) { return; } @@ -572,6 +576,15 @@ public class LootTrackerPlugin extends Plugin return; } + if (message.equals(COFFIN_LOOTED_MESSAGE) && + isPlayerWithinMapRegion(HALLOWED_SEPULCHRE_MAP_REGIONS)) + { + eventType = HALLOWED_SEPULCHRE_COFFIN_EVENT; + lootRecordType = LootRecordType.EVENT; + takeInventorySnapshot(); + return; + } + if (message.equals(HERBIBOAR_LOOTED_MESSAGE)) { if (processHerbiboarHerbSackLoot(event.getTimestamp())) @@ -668,6 +681,7 @@ public class LootTrackerPlugin extends Plugin if (CHEST_EVENT_TYPES.containsValue(eventType) || SHADE_CHEST_OBJECTS.containsValue(eventType) + || HALLOWED_SEPULCHRE_COFFIN_EVENT.equals(eventType) || HERBIBOAR_EVENT.equals(eventType) || HESPORI_EVENT.equals(eventType) || SEEDPACK_EVENT.equals(eventType) @@ -895,15 +909,15 @@ public class LootTrackerPlugin extends Plugin } /** - * Is player at the Last Man Standing minigame + * Is player currently within the provided map regions */ - private boolean isAtLMS() + private boolean isPlayerWithinMapRegion(Set definedMapRegions) { final int[] mapRegions = client.getMapRegions(); - for (int region : LAST_MAN_STANDING_REGIONS) + for (int region : mapRegions) { - if (ArrayUtils.contains(mapRegions, region)) + if (definedMapRegions.contains(region)) { return true; }