client: refactor for nameable api changes

This commit is contained in:
Adam
2019-11-21 20:01:17 -05:00
parent 6a209b860c
commit 0b90fcde22
7 changed files with 81 additions and 58 deletions

View File

@@ -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);

View File

@@ -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)

View File

@@ -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<Player> 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<ClanMemberActivity> 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);
}

View File

@@ -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<Friend> 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<Ignore> ignoreContainer = client.getIgnoreContainer();
final int ignoreCount = ignoreContainer.getCount();
if (ignoreCount >= 0)
{
final int limit = isMember ? MAX_IGNORES_P2P : MAX_IGNORES_F2P;

View File

@@ -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<Friend> 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();
}

View File

@@ -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<Friend> 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;

View File

@@ -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"));
}
}