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 0a8aefef12..b86203a0f6 100644 --- a/runelite-api/src/main/java/net/runelite/api/Client.java +++ b/runelite-api/src/main/java/net/runelite/api/Client.java @@ -303,6 +303,8 @@ public interface Client extends GameEngine ClanMember[] getClanMembers(); + Friend[] getFriends(); + boolean isClanMember(String name); Preferences getPreferences(); diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java index 91f3a51c7e..625a2eafcf 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java @@ -29,6 +29,7 @@ import java.util.List; import javax.annotation.Nullable; import net.runelite.api.ChatMessageType; import net.runelite.api.ClanMember; +import net.runelite.api.Friend; import net.runelite.api.GameState; import net.runelite.api.GrandExchangeOffer; import net.runelite.api.GraphicsObject; @@ -91,11 +92,14 @@ import static net.runelite.client.callback.Hooks.eventBus; import net.runelite.rs.api.RSClanMemberManager; import net.runelite.rs.api.RSClient; import net.runelite.rs.api.RSDeque; +import net.runelite.rs.api.RSFriendContainer; +import net.runelite.rs.api.RSFriendManager; import net.runelite.rs.api.RSHashTable; import net.runelite.rs.api.RSIndexedSprite; import net.runelite.rs.api.RSItemContainer; import net.runelite.rs.api.RSNPC; import net.runelite.rs.api.RSName; +import net.runelite.rs.api.RSNameable; import net.runelite.rs.api.RSPlayer; import net.runelite.rs.api.RSWidget; @@ -576,6 +580,26 @@ public abstract class RSClientMixin implements RSClient return clanMemberManager != null ? (ClanMember[]) getClanMemberManager().getNameables() : null; } + @Inject + @Override + public Friend[] getFriends() + { + final RSFriendManager friendManager = getFriendManager(); + if (friendManager == null) + { + return null; + } + + final RSFriendContainer friendContainer = friendManager.getFriendContainer(); + if (friendContainer == null) + { + return null; + } + + RSNameable[] nameables = friendContainer.getNameables(); + return (Friend[]) nameables; + } + @Inject @Override public boolean isClanMember(String name) diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSFriendContainer.java b/runescape-api/src/main/java/net/runelite/rs/api/RSFriendContainer.java new file mode 100644 index 0000000000..165730c323 --- /dev/null +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSFriendContainer.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2018, 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.rs.api; + +public interface RSFriendContainer extends RSNameableContainer +{ +} diff --git a/runescape-api/src/main/java/net/runelite/rs/api/RSFriendManager.java b/runescape-api/src/main/java/net/runelite/rs/api/RSFriendManager.java index 2538d02d10..f066564128 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/RSFriendManager.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/RSFriendManager.java @@ -29,6 +29,9 @@ import net.runelite.mapping.Import; public interface RSFriendManager extends FriendManager { + @Import("friendContainer") + RSFriendContainer getFriendContainer(); + @Import("isFriended") boolean isFriended(RSName var1, boolean var2); }