diff --git a/runelite-api/src/main/java/net/runelite/api/events/ClanMemberJoined.java b/runelite-api/src/main/java/net/runelite/api/events/ClanMemberJoined.java index b8e50c6296..ff2a373c4b 100644 --- a/runelite-api/src/main/java/net/runelite/api/events/ClanMemberJoined.java +++ b/runelite-api/src/main/java/net/runelite/api/events/ClanMemberJoined.java @@ -25,12 +25,13 @@ package net.runelite.api.events; import lombok.Value; +import net.runelite.api.ClanMember; @Value public class ClanMemberJoined { /** - * Name of the player who joined + * The ClanMember that joined */ - private String name; + private ClanMember 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/ClanMemberLeft.java index 6eb269dd6d..24bc58f960 100644 --- a/runelite-api/src/main/java/net/runelite/api/events/ClanMemberLeft.java +++ b/runelite-api/src/main/java/net/runelite/api/events/ClanMemberLeft.java @@ -25,12 +25,13 @@ package net.runelite.api.events; import lombok.Value; +import net.runelite.api.ClanMember; @Value public class ClanMemberLeft { /** - * Name of the player who left + * The ClanMember that left */ - private String name; + private ClanMember member; } 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 ef1f27e3cf..4621a90e1c 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 @@ -41,6 +41,7 @@ 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.ClanMemberRank; import net.runelite.api.Client; import net.runelite.api.GameState; @@ -170,38 +171,40 @@ public class ClanChatPlugin extends Plugin return; } + ClanMember member = event.getMember(); if (!config.showJoinLeave() || - clanManager.getRank(event.getName()).getValue() < config.joinLeaveRank().getValue()) + member.getRank().getValue() < config.joinLeaveRank().getValue()) { return; } // attempt to filter out world hopping joins - if (!activityBuffer.containsKey(event.getName())) + if (!activityBuffer.containsKey(member.getUsername())) { ClanMemberActivity joinActivity = new ClanMemberActivity(ClanActivityType.JOINED, - event.getName(), client.getTickCount()); - activityBuffer.put(event.getName(), joinActivity); + member, client.getTickCount()); + activityBuffer.put(member.getUsername(), joinActivity); } else { - activityBuffer.remove(event.getName()); + activityBuffer.remove(member.getUsername()); } } @Subscribe public void onClanMemberLeft(ClanMemberLeft event) { + ClanMember member = event.getMember(); if (!config.showJoinLeave() || - clanManager.getRank(event.getName()).getValue() < config.joinLeaveRank().getValue()) + member.getRank().getValue() < config.joinLeaveRank().getValue()) { return; } ClanMemberActivity leaveActivity = new ClanMemberActivity(ClanActivityType.LEFT, - event.getName(), client.getTickCount()); + member, client.getTickCount()); - activityBuffer.put(event.getName(), leaveActivity); + activityBuffer.put(member.getUsername(), leaveActivity); } @Subscribe @@ -298,10 +301,10 @@ public class ClanChatPlugin extends Plugin } } - private void addActivityMessage(String memberName, ClanActivityType activityType) + private void addActivityMessage(ClanMember member, ClanActivityType activityType) { final String activityMessage = activityType == ClanActivityType.JOINED ? " has joined." : " has left."; - final ClanMemberRank rank = clanManager.getRank(memberName); + final ClanMemberRank rank = member.getRank(); String rankTag = ""; Color textColor = CHAT_CLAN_TEXT_OPAQUE_BACKGROUND; Color channelColor = CHAT_CLAN_NAME_OPAQUE_BACKGROUND; @@ -323,7 +326,7 @@ public class ClanChatPlugin extends Plugin .append("[") .append(ColorUtil.wrapWithColorTag(client.getClanChatName(), channelColor) + rankTag) .append("] ") - .append(ColorUtil.wrapWithColorTag(memberName + activityMessage, textColor)) + .append(ColorUtil.wrapWithColorTag(member.getUsername() + activityMessage, textColor)) .build(); client.addChatMessage(ChatMessageType.CLANCHAT_INFO, "", messageString, ""); 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/clanchat/ClanMemberActivity.java index f739437b15..1cea036a95 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanMemberActivity.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanMemberActivity.java @@ -26,12 +26,13 @@ package net.runelite.client.plugins.clanchat; import lombok.AllArgsConstructor; import lombok.Value; +import net.runelite.api.ClanMember; @Value @AllArgsConstructor class ClanMemberActivity { private ClanActivityType activityType; - private String member; + private ClanMember member; private Integer tick; } diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSClanMemberManagerMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSClanMemberManagerMixin.java index b4c71dec2a..25e01ce1ca 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSClanMemberManagerMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSClanMemberManagerMixin.java @@ -24,6 +24,7 @@ */ package net.runelite.mixins; +import net.runelite.api.ClanMember; import net.runelite.api.events.ClanMemberJoined; import net.runelite.api.events.ClanMemberLeft; import net.runelite.api.mixins.Inject; @@ -44,15 +45,27 @@ public abstract class RSClanMemberManagerMixin implements RSClanMemberManager @Override public void rl$add(RSName name, RSName prevName) { - ClanMemberJoined event = new ClanMemberJoined(name.getName()); - client.getCallbacks().post(event); + ClanMember member = findByName(name); + if (member == null) + { + return; + } + + ClanMemberJoined event = new ClanMemberJoined(member); + client.getCallbacks().postDeferred(event); } @Inject @Override public void rl$remove(RSNameable nameable) { - ClanMemberLeft event = new ClanMemberLeft(nameable.getRsName().getName()); - client.getCallbacks().post(event); + ClanMember member = findByName(nameable.getRsName()); + if (member == null) + { + return; + } + + ClanMemberLeft event = new ClanMemberLeft(member); + client.getCallbacks().postDeferred(event); } } diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSNameableContainer.java b/runescape-api/src/main/java/net/runelite/rs/api/RSNameableContainer.java index 82fb52d9d4..33f2070048 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSNameableContainer.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSNameableContainer.java @@ -37,6 +37,9 @@ public interface RSNameableContainer @Import("isMember") boolean isMember(RSName var1); + @Import("findByName") + T findByName(RSName name); + /** * Method called by the container when an element is added * @param name