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 51919cf067..11bed4ceea 100644 --- a/runelite-api/src/main/java/net/runelite/api/Client.java +++ b/runelite-api/src/main/java/net/runelite/api/Client.java @@ -325,4 +325,9 @@ public class Client { return getSetting(prayer.getVarbit()) == 1; } + + public int getClanChatCount() + { + return client.getClanChatCount(); + } } diff --git a/runelite-api/src/main/java/net/runelite/api/widgets/Widget.java b/runelite-api/src/main/java/net/runelite/api/widgets/Widget.java index f96554cefe..fac06fb052 100644 --- a/runelite-api/src/main/java/net/runelite/api/widgets/Widget.java +++ b/runelite-api/src/main/java/net/runelite/api/widgets/Widget.java @@ -112,6 +112,11 @@ public class Widget return widget.getText(); } + public void setText(String text) + { + widget.setText(text); + } + public int getTextColor() { return widget.getTextColor(); 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 8d239d1038..0b7ec01b9e 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 @@ -30,6 +30,8 @@ class WidgetID static final int PESTRCONTROL_GROUP_ID = 408; + static final int CLAN_CHAT_GROUP_ID = 7; + static class PestControl { static final int PURPLE_SHIELD = 18; @@ -47,4 +49,11 @@ class WidgetID static final int YELLOW_ICON = 12; static final int RED_ICON = 13; } + + static class ClanChat + { + static final int TITLE = 1; + static final int NAME = 3; + static final int OWNER = 5; + } } 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 5b7d538f2c..1366feeccd 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 @@ -39,7 +39,11 @@ public enum WidgetInfo PESTCONTROL_PURPLE_ICON(WidgetID.PESTRCONTROL_GROUP_ID, WidgetID.PestControl.PURPLE_ICON), PESTCONTROL_BLUE_ICON(WidgetID.PESTRCONTROL_GROUP_ID, WidgetID.PestControl.BLUE_ICON), PESTCONTROL_YELLOW_ICON(WidgetID.PESTRCONTROL_GROUP_ID, WidgetID.PestControl.YELLOW_ICON), - PESTCONTROL_RED_ICON(WidgetID.PESTRCONTROL_GROUP_ID, WidgetID.PestControl.RED_ICON); + PESTCONTROL_RED_ICON(WidgetID.PESTRCONTROL_GROUP_ID, WidgetID.PestControl.RED_ICON), + + 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); private final int groupId; private final int childId; 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 13f6096208..a7bf9055db 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 @@ -34,6 +34,7 @@ import java.util.stream.Collectors; import net.runelite.client.RuneLite; import net.runelite.client.plugins.boosts.Boosts; import net.runelite.client.plugins.bosstimer.BossTimers; +import net.runelite.client.plugins.clanchat.ClanChat; import net.runelite.client.plugins.devtools.DevTools; import net.runelite.client.plugins.fpsinfo.FPS; import net.runelite.client.plugins.hiscore.Hiscore; @@ -71,6 +72,7 @@ public class PluginManager plugins.add(new Runecraft()); plugins.add(new MouseHighlight()); plugins.add(new PestControl()); + plugins.add(new ClanChat()); if (RuneLite.getOptions().has("developer-mode")) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanChat.java b/runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanChat.java new file mode 100644 index 0000000000..96b3975e4b --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanChat.java @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2017, Devin French + * 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.plugins.clanchat; + +import net.runelite.api.GameState; +import net.runelite.api.widgets.Widget; +import net.runelite.api.widgets.WidgetInfo; +import net.runelite.client.RuneLite; +import net.runelite.client.plugins.Plugin; + +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; + +public class ClanChat extends Plugin +{ + + private final long INTERVAL = 600; + private ScheduledFuture future; + + @Override + protected void startUp() throws Exception + { + ScheduledExecutorService executor = RuneLite.getRunelite().getExecutor(); + future = executor.scheduleAtFixedRate(this::updateClanChatTitle, INTERVAL, INTERVAL, TimeUnit.MILLISECONDS); + } + + @Override + protected void shutDown() throws Exception + { + future.cancel(true); + } + + private void updateClanChatTitle() + { + if (RuneLite.getClient().getGameState() != GameState.LOGGED_IN) + return; + + Widget clanChatTitleWidget = RuneLite.getClient().getWidget(WidgetInfo.CLAN_CHAT_TITLE); + if (clanChatTitleWidget != null) + { + clanChatTitleWidget.setText("Clan Chat (" + RuneLite.getClient().getClanChatCount() + "/100)"); + } + } +} diff --git a/runescape-api/src/main/java/net/runelite/rs/api/Client.java b/runescape-api/src/main/java/net/runelite/rs/api/Client.java index 17328dd02b..4abbd180a2 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/Client.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/Client.java @@ -206,6 +206,9 @@ public interface Client extends GameEngine @Import("activeInterface") Widget getActiveInterface(); + @Import("clanChatCount") + int getClanChatCount(); + @Import("clanMembers") XClanMember[] getClanMembers(); diff --git a/runescape-api/src/main/java/net/runelite/rs/api/Widget.java b/runescape-api/src/main/java/net/runelite/rs/api/Widget.java index bb8adacc60..8a92b2f14b 100644 --- a/runescape-api/src/main/java/net/runelite/rs/api/Widget.java +++ b/runescape-api/src/main/java/net/runelite/rs/api/Widget.java @@ -64,6 +64,9 @@ public interface Widget @Import("name") String getName(); + @Import(value = "text", setter = true) + void setText(String text); + @Import("textColor") int getTextColor();