From 0b90fcde2293ec82b971bc998e877353b0797df7 Mon Sep 17 00:00:00 2001 From: Adam Date: Thu, 21 Nov 2019 20:01:17 -0500 Subject: [PATCH] client: refactor for nameable api changes --- .../net/runelite/client/game/ClanManager.java | 17 ++++--- .../plugins/chatfilter/ChatFilterPlugin.java | 6 ++- .../plugins/clanchat/ClanChatPlugin.java | 44 ++++++++++++------- .../plugins/friendlist/FriendListPlugin.java | 9 +++- .../plugins/hiscore/NameAutocompleter.java | 22 +++++----- .../worldhopper/WorldHopperPlugin.java | 30 +++++-------- .../chatfilter/ChatFilterPluginTest.java | 11 +++-- 7 files changed, 81 insertions(+), 58 deletions(-) diff --git a/runelite-client/src/main/java/net/runelite/client/game/ClanManager.java b/runelite-client/src/main/java/net/runelite/client/game/ClanManager.java index 2a88aab050..c71c4a205d 100644 --- a/runelite-client/src/main/java/net/runelite/client/game/ClanManager.java +++ b/runelite-client/src/main/java/net/runelite/client/game/ClanManager.java @@ -38,6 +38,7 @@ 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.Client; import net.runelite.api.GameState; @@ -79,16 +80,16 @@ public class ClanManager @Override public ClanMemberRank load(@Nonnull String key) { - final ClanMember[] clanMembersArr = client.getClanMembers(); - - if (clanMembersArr == null || clanMembersArr.length == 0) + final ClanMemberManager clanMemberManager = client.getClanMemberManager(); + if (clanMemberManager == null) { return ClanMemberRank.UNRANKED; } - return Arrays.stream(clanMembersArr) + final ClanMember[] clanMembers = clanMemberManager.getMembers(); + return Arrays.stream(clanMembers) .filter(Objects::nonNull) - .filter(clanMember -> sanitize(clanMember.getUsername()).equals(sanitize(key))) + .filter(clanMember -> sanitize(clanMember.getName()).equals(sanitize(key))) .map(ClanMember::getRank) .findAny() .orElse(ClanMemberRank.UNRANKED); @@ -104,6 +105,12 @@ public class ClanManager this.spriteManager = spriteManager; } + public boolean isClanMember(String name) + { + ClanMemberManager clanMemberManager = client.getClanMemberManager(); + return clanMemberManager != null && clanMemberManager.findByName(name) != null; + } + public ClanMemberRank getRank(String playerName) { return clanRanksCache.getUnchecked(playerName); 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 1e7666ba00..fe8fdb18f4 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 @@ -44,6 +44,7 @@ import net.runelite.api.events.OverheadTextChanged; import net.runelite.api.events.ScriptCallbackEvent; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.game.ClanManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; import net.runelite.client.util.Text; @@ -72,6 +73,9 @@ public class ChatFilterPlugin extends Plugin @Inject private ChatFilterConfig config; + @Inject + private ClanManager clanManager; + @Provides ChatFilterConfig provideConfig(ConfigManager configManager) { @@ -176,7 +180,7 @@ public class ChatFilterPlugin extends Plugin boolean isMessageFromSelf = playerName.equals(client.getLocalPlayer().getName()); return !isMessageFromSelf && (config.filterFriends() || !client.isFriended(playerName, false)) && - (config.filterClan() || !client.isClanMember(playerName)); + (config.filterClan() || !clanManager.isClanMember(playerName)); } String censorMessage(final String message) 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/clanchat/ClanChatPlugin.java index 095295d819..00779cb51c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanChatPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanChatPlugin.java @@ -42,6 +42,7 @@ 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.Client; import net.runelite.api.GameState; @@ -55,7 +56,6 @@ 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.client.events.ConfigChanged; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameTick; import net.runelite.api.events.PlayerDespawned; @@ -69,6 +69,7 @@ import net.runelite.client.callback.ClientThread; 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.SpriteManager; import net.runelite.client.plugins.Plugin; @@ -170,7 +171,7 @@ public class ClanChatPlugin extends Plugin if (member.getWorld() == client.getWorld()) { final Player local = client.getLocalPlayer(); - final String memberName = Text.toJagexName(member.getUsername()); + final String memberName = Text.toJagexName(member.getName()); for (final Player player : client.getPlayers()) { @@ -196,15 +197,15 @@ public class ClanChatPlugin extends Plugin } // attempt to filter out world hopping joins - if (!activityBuffer.containsKey(member.getUsername())) + if (!activityBuffer.containsKey(member.getName())) { ClanMemberActivity joinActivity = new ClanMemberActivity(ClanActivityType.JOINED, member, client.getTickCount()); - activityBuffer.put(member.getUsername(), joinActivity); + activityBuffer.put(member.getName(), joinActivity); } else { - activityBuffer.remove(member.getUsername()); + activityBuffer.remove(member.getName()); } } @@ -215,7 +216,7 @@ public class ClanChatPlugin extends Plugin if (member.getWorld() == client.getWorld()) { - final String memberName = Text.toJagexName(member.getUsername()); + final String memberName = Text.toJagexName(member.getName()); final Iterator each = clanMembers.iterator(); while (each.hasNext()) @@ -240,15 +241,15 @@ public class ClanChatPlugin extends Plugin return; } - if (!activityBuffer.containsKey(member.getUsername())) + if (!activityBuffer.containsKey(member.getName())) { ClanMemberActivity leaveActivity = new ClanMemberActivity(ClanActivityType.LEFT, member, client.getTickCount()); - activityBuffer.put(member.getUsername(), leaveActivity); + activityBuffer.put(member.getName(), leaveActivity); } else { - activityBuffer.remove(member.getUsername()); + activityBuffer.remove(member.getName()); } } @@ -265,9 +266,10 @@ public class ClanChatPlugin extends Plugin { Widget clanChatList = client.getWidget(WidgetInfo.CLAN_CHAT_LIST); Widget owner = client.getWidget(WidgetInfo.CLAN_CHAT_OWNER); - if (client.getClanChatCount() > 0) + ClanMemberManager clanMemberManager = client.getClanMemberManager(); + if (clanMemberManager != null && clanMemberManager.getCount() > 0) { - clanChatTitleWidget.setText(CLAN_CHAT_TITLE + " (" + client.getClanChatCount() + "/100)"); + clanChatTitleWidget.setText(CLAN_CHAT_TITLE + " (" + clanMemberManager.getCount() + "/100)"); } else if (config.recentChats() && clanChatList.getChildren() == null && !Strings.isNullOrEmpty(owner.getText())) { @@ -332,6 +334,12 @@ public class ClanChatPlugin extends Plugin private void addClanActivityMessages() { + ClanMemberManager clanMemberManager = client.getClanMemberManager(); + if (clanMemberManager == null || activityBuffer.isEmpty()) + { + return; + } + Iterator activityIt = activityBuffer.values().iterator(); while (activityIt.hasNext()) @@ -341,12 +349,12 @@ public class ClanChatPlugin extends Plugin if (activity.getTick() < client.getTickCount() - MESSAGE_DELAY) { activityIt.remove(); - addActivityMessage(activity.getMember(), activity.getActivityType()); + addActivityMessage(clanMemberManager, activity.getMember(), activity.getActivityType()); } } } - private void addActivityMessage(ClanMember member, ClanActivityType activityType) + private void addActivityMessage(ClanMemberManager clanMemberManager, ClanMember member, ClanActivityType activityType) { final String activityMessage = activityType == ClanActivityType.JOINED ? " has joined." : " has left."; final ClanMemberRank rank = member.getRank(); @@ -367,7 +375,7 @@ public class ClanChatPlugin extends Plugin ChatMessageBuilder message = new ChatMessageBuilder() .append("[") - .append(channelColor, client.getClanChatName()); + .append(channelColor, clanMemberManager.getClanChatName()); if (rankIcon > -1) { message @@ -376,7 +384,7 @@ public class ClanChatPlugin extends Plugin } message .append("] ") - .append(textColor, member.getUsername() + activityMessage); + .append(textColor, member.getName() + activityMessage); final String messageString = message.build(); client.addChatMessage(ChatMessageType.FRIENDSCHATNOTIFICATION, "", messageString, ""); @@ -406,7 +414,8 @@ public class ClanChatPlugin extends Plugin return; } - if (client.getClanChatCount() <= 0) + ClanMemberManager clanMemberManager = client.getClanMemberManager(); + if (clanMemberManager == null || clanMemberManager.getCount() == 0) { return; } @@ -542,7 +551,8 @@ public class ClanChatPlugin extends Plugin return; } - if (client.getClanChatCount() == 0) + ClanMemberManager clanMemberManager = client.getClanMemberManager(); + if (clanMemberManager == null || clanMemberManager.getCount() == 0) { clanChatList.setChildren(null); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/friendlist/FriendListPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/friendlist/FriendListPlugin.java index 355d9db46a..cbe43c0aea 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/friendlist/FriendListPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/friendlist/FriendListPlugin.java @@ -27,6 +27,9 @@ package net.runelite.client.plugins.friendlist; import javax.inject.Inject; import net.runelite.api.Client; +import net.runelite.api.Friend; +import net.runelite.api.Ignore; +import net.runelite.api.NameableContainer; import net.runelite.api.VarPlayer; import net.runelite.api.events.GameTick; import net.runelite.api.widgets.Widget; @@ -64,7 +67,8 @@ public class FriendListPlugin extends Plugin final int world = client.getWorld(); final boolean isMember = client.getVar(VarPlayer.MEMBERSHIP_DAYS) > 0; - final int friendCount = client.getFriendsCount(); + final NameableContainer friendContainer = client.getFriendContainer(); + final int friendCount = friendContainer.getCount(); if (friendCount >= 0) { final int limit = isMember ? MAX_FRIENDS_P2P : MAX_FRIENDS_F2P; @@ -80,7 +84,8 @@ public class FriendListPlugin extends Plugin setFriendsListTitle(title); } - final int ignoreCount = client.getIgnoreCount(); + final NameableContainer ignoreContainer = client.getIgnoreContainer(); + final int ignoreCount = ignoreContainer.getCount(); if (ignoreCount >= 0) { final int limit = isMember ? MAX_IGNORES_P2P : MAX_IGNORES_F2P; 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 6dcaaecf83..e89cbb2a8d 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 @@ -37,9 +37,11 @@ import javax.swing.text.BadLocationException; import javax.swing.text.Document; import javax.swing.text.JTextComponent; import lombok.extern.slf4j.Slf4j; -import net.runelite.api.ClanMember; +import net.runelite.api.ClanMemberManager; import net.runelite.api.Client; import net.runelite.api.Friend; +import net.runelite.api.Nameable; +import net.runelite.api.NameableContainer; import net.runelite.api.Player; @Slf4j @@ -191,12 +193,11 @@ class NameAutocompleter implements KeyListener // TODO: Search lookup history - Friend[] friends = client.getFriends(); - if (friends != null) + NameableContainer friendContainer = client.getFriendContainer(); + if (friendContainer != null) { - autocompleteName = Arrays.stream(friends) - .filter(Objects::nonNull) - .map(Friend::getName) + autocompleteName = Arrays.stream(friendContainer.getMembers()) + .map(Nameable::getName) .filter(n -> pattern.matcher(n).matches()) .findFirst(); } @@ -204,12 +205,11 @@ class NameAutocompleter implements KeyListener // Search clan if a friend wasn't found if (!autocompleteName.isPresent()) { - final ClanMember[] clannies = client.getClanMembers(); - if (clannies != null) + final ClanMemberManager clanMemberManager = client.getClanMemberManager(); + if (clanMemberManager != null) { - autocompleteName = Arrays.stream(clannies) - .filter(Objects::nonNull) - .map(ClanMember::getUsername) + autocompleteName = Arrays.stream(clanMemberManager.getMembers()) + .map(Nameable::getName) .filter(n -> pattern.matcher(n).matches()) .findFirst(); } 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 22d063c537..5e397a23f8 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 @@ -52,14 +52,15 @@ 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.Client; import net.runelite.api.Friend; import net.runelite.api.GameState; import net.runelite.api.MenuAction; import net.runelite.api.MenuEntry; +import net.runelite.api.NameableContainer; import net.runelite.api.Varbits; import net.runelite.api.events.ChatMessage; -import net.runelite.client.events.ConfigChanged; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameTick; import net.runelite.api.events.MenuEntryAdded; @@ -74,6 +75,7 @@ import net.runelite.client.chat.ChatMessageManager; import net.runelite.client.chat.QueuedMessage; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.Subscribe; +import net.runelite.client.events.ConfigChanged; import net.runelite.client.input.KeyManager; import net.runelite.client.plugins.Plugin; import net.runelite.client.plugins.PluginDescriptor; @@ -756,30 +758,20 @@ public class WorldHopperPlugin extends Plugin // 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). - ClanMember[] clanMembers = client.getClanMembers(); - - if (clanMembers != null) + ClanMemberManager clanMemberManager = client.getClanMemberManager(); + if (clanMemberManager != null) { - for (ClanMember clanMember : clanMembers) + ClanMember clanMember = clanMemberManager.findByName(cleanName); + if (clanMember != null) { - if (clanMember != null && clanMember.getUsername().equals(cleanName)) - { - return clanMember; - } + return clanMember; } } - Friend[] friends = client.getFriends(); - - if (friends != null) + NameableContainer friendContainer = client.getFriendContainer(); + if (friendContainer != null) { - for (Friend friend : friends) - { - if (friend != null && friend.getName().equals(cleanName)) - { - return friend; - } - } + return friendContainer.findByName(cleanName); } return null; 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 9af09b1d63..949bac892d 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 @@ -31,6 +31,7 @@ import com.google.inject.testing.fieldbinder.BoundFieldModule; import javax.inject.Inject; import net.runelite.api.Client; import net.runelite.api.Player; +import net.runelite.client.game.ClanManager; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; @@ -53,6 +54,10 @@ public class ChatFilterPluginTest @Bind private ChatFilterConfig chatFilterConfig; + @Mock + @Bind + private ClanManager clanManager; + @Mock private Player localPlayer; @@ -132,7 +137,7 @@ public class ChatFilterPluginTest @Test public void testMessageFromFriendIsFiltered() { - when(client.isClanMember("Iron Mammal")).thenReturn(false); + when(clanManager.isClanMember("Iron Mammal")).thenReturn(false); when(chatFilterConfig.filterFriends()).thenReturn(true); assertTrue(chatFilterPlugin.shouldFilterPlayerMessage("Iron Mammal")); } @@ -156,7 +161,7 @@ public class ChatFilterPluginTest @Test public void testMessageFromClanIsNotFiltered() { - when(client.isClanMember("B0aty")).thenReturn(true); + when(clanManager.isClanMember("B0aty")).thenReturn(true); when(chatFilterConfig.filterClan()).thenReturn(false); assertFalse(chatFilterPlugin.shouldFilterPlayerMessage("B0aty")); } @@ -172,7 +177,7 @@ public class ChatFilterPluginTest public void testMessageFromNonFriendNonClanIsFiltered() { when(client.isFriended("Woox", false)).thenReturn(false); - when(client.isClanMember("Woox")).thenReturn(false); + when(clanManager.isClanMember("Woox")).thenReturn(false); assertTrue(chatFilterPlugin.shouldFilterPlayerMessage("Woox")); } } \ No newline at end of file