diff --git a/runelite-api/src/main/java/net/runelite/api/Varbits.java b/runelite-api/src/main/java/net/runelite/api/Varbits.java index ee34bcd75d..8fa7a5243f 100644 --- a/runelite-api/src/main/java/net/runelite/api/Varbits.java +++ b/runelite-api/src/main/java/net/runelite/api/Varbits.java @@ -81,6 +81,64 @@ public enum Varbits PRAYER_PIETY(4129, 83, 26, 26), PRAYER_PRESERVE(5466, 83, 28, 28), + /** + * Diary Entries + */ + DIARY_ARDOUGNE_EASY(4458, 1188, 10, 10), + DIARY_ARDOUGNE_MEDIUM(4459, 1188, 11, 11), + DIARY_ARDOUGNE_HARD(4460, 1188, 12, 12), + DIARY_ARDOUGNE_ELITE(4461, 1188, 13, 13), + + DIARY_DESERT_EASY(4483, 1189, 2, 2), + DIARY_DESERT_MEDIUM(4484, 1189, 3, 3), + DIARY_DESERT_HARD(4485, 1189, 4, 4), + DIARY_DESERT_ELITE(4486, 1189, 5, 5), + + DIARY_FALADOR_EASY(4462, 1188, 14, 14), + DIARY_FALADOR_MEDIUM(4463, 1188, 15, 15), + DIARY_FALADOR_HARD(4464, 1188, 16, 16), + DIARY_FALADOR_ELITE(4465, 1188, 17, 17), + + DIARY_FREMENNIK_EASY(4491, 1189, 10, 10), + DIARY_FREMENNIK_MEDIUM(4492, 1189, 11, 11), + DIARY_FREMENNIK_HARD(4493, 1189, 12, 12), + DIARY_FREMENNIK_ELITE(4494, 1189, 13, 13), + + DIARY_KANDARIN_EASY(4475, 1188, 26, 26), + DIARY_KANDARIN_MEDIUM(4476, 1188, 27, 27), + DIARY_KANDARIN_HARD(4477, 1188, 28, 28), + DIARY_KANDARIN_ELITE(4478, 1188, 29, 29), + + DIARY_KARAMJA_EASY(3578, 1000, 30, 31), + DIARY_KARAMJA_MEDIUM(3578, 1000, 30, 31), + DIARY_KARAMJA_HARD(3611, 1002, 29, 30), + DIARY_KARAMJA_ELITE(4566, 1200, 7, 7), + + DIARY_LUMBRIDGE_EASY(4495, 1189, 14, 14), + DIARY_LUMBRIDGE_MEDIUM(4496, 1189, 15, 15), + DIARY_LUMBRIDGE_HARD(4497, 1189, 16, 16), + DIARY_LUMBRIDGE_ELITE(4498, 1189, 17, 17), + + DIARY_MORYTANIA_EASY(4487, 1189, 6, 6), + DIARY_MORYTANIA_MEDIUM(4488, 1189, 7, 7), + DIARY_MORYTANIA_HARD(4489, 1189, 8, 8), + DIARY_MORYTANIA_ELITE(4490, 1189, 9, 9), + + DIARY_VARROCK_EASY(4479, 1188, 30, 30), + DIARY_VARROCK_MEDIUM(4480, 1188, 31, 31), + DIARY_VARROCK_HARD(4481, 1189, 0, 0), + DIARY_VARROCK_ELITE(4482, 1189, 1, 1), + + DIARY_WESTERN_EASY(4471, 1188, 22, 22), + DIARY_WESTERN_MEDIUM(4472, 1188, 23, 23), + DIARY_WESTERN_HARD(4473, 1188, 24, 24), + DIARY_WESTERN_ELITE(4474, 1188, 25, 25), + + DIARY_WILDERNESS_EASY(4466, 1188, 18, 18), + DIARY_WILDERNESS_MEDIUM(4467, 1188, 19, 19), + DIARY_WILDERNESS_HARD(4468, 1188, 20, 20), + DIARY_WILDERNESS_ELITE(4469, 1188, 21, 21), + /** * Special Attack */ 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 a6cee1c2b6..86455127d6 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 @@ -32,6 +32,7 @@ public class WidgetID public static final int DEPOSIT_BOX_GROUP_ID = 192; public static final int INVENTORY_GROUP_ID = 149; public static final int EQUIPMENT_GROUP_ID = 387; + public static final int DIARY_GROUP_ID = 259; public static final int PESTRCONTROL_GROUP_ID = 408; public static final int CLAN_CHAT_GROUP_ID = 7; public static final int MINIMAP_GROUP_ID = 160; 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 7995627c8f..b18b4b06a2 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 @@ -50,6 +50,8 @@ public enum WidgetInfo EQUIPMENT_RING(WidgetID.EQUIPMENT_GROUP_ID, WidgetID.Equipment.RING), EQUIPMENT_AMMO(WidgetID.EQUIPMENT_GROUP_ID, WidgetID.Equipment.AMMO), + DIARY_LIST(WidgetID.DIARY_GROUP_ID, 4), + PESTCONTROL_PURPLE_SHIELD(WidgetID.PESTRCONTROL_GROUP_ID, WidgetID.PestControl.PURPLE_SHIELD), PESTCONTROL_BLUE_SHIELD(WidgetID.PESTRCONTROL_GROUP_ID, WidgetID.PestControl.BLUE_SHIELD), PESTCONTROL_YELLOW_SHIELD(WidgetID.PESTRCONTROL_GROUP_ID, WidgetID.PestControl.YELLOW_SHIELD), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/diaryprogress/DiaryEntry.java b/runelite-client/src/main/java/net/runelite/client/plugins/diaryprogress/DiaryEntry.java new file mode 100644 index 0000000000..5331c58c53 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/diaryprogress/DiaryEntry.java @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2018, oplosthee + * 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.diaryprogress; + +import net.runelite.api.Varbits; + +public enum DiaryEntry +{ + ARDOUGNE(1, "Ardougne", Varbits.DIARY_ARDOUGNE_EASY, Varbits.DIARY_ARDOUGNE_MEDIUM, Varbits.DIARY_ARDOUGNE_HARD, Varbits.DIARY_ARDOUGNE_ELITE), + DESERT(5, "Desert", Varbits.DIARY_DESERT_EASY, Varbits.DIARY_DESERT_MEDIUM, Varbits.DIARY_DESERT_HARD, Varbits.DIARY_DESERT_ELITE), + FALADOR(2, "Falador", Varbits.DIARY_FALADOR_EASY, Varbits.DIARY_FALADOR_MEDIUM, Varbits.DIARY_FALADOR_HARD, Varbits.DIARY_FALADOR_ELITE), + FREMENNIK(3, "Fremennik", Varbits.DIARY_FREMENNIK_EASY, Varbits.DIARY_FREMENNIK_MEDIUM, Varbits.DIARY_FREMENNIK_HARD, Varbits.DIARY_FREMENNIK_ELITE), + KANDARIN(4, "Kandarin", Varbits.DIARY_KANDARIN_EASY, Varbits.DIARY_KANDARIN_MEDIUM, Varbits.DIARY_KANDARIN_HARD, Varbits.DIARY_KANDARIN_ELITE), + KARAMJA(0, "Karamja", Varbits.DIARY_KARAMJA_EASY, Varbits.DIARY_KARAMJA_MEDIUM, Varbits.DIARY_KARAMJA_HARD, Varbits.DIARY_KARAMJA_ELITE), + LUMBRIDGE(6, "Lumbridge & Draynor", Varbits.DIARY_LUMBRIDGE_EASY, Varbits.DIARY_LUMBRIDGE_MEDIUM, Varbits.DIARY_LUMBRIDGE_HARD, Varbits.DIARY_LUMBRIDGE_ELITE), + MORYTANIA(7, "Morytania", Varbits.DIARY_MORYTANIA_EASY, Varbits.DIARY_MORYTANIA_MEDIUM, Varbits.DIARY_MORYTANIA_HARD, Varbits.DIARY_MORYTANIA_ELITE), + VARROCK(8, "Varrock", Varbits.DIARY_VARROCK_EASY, Varbits.DIARY_VARROCK_MEDIUM, Varbits.DIARY_VARROCK_HARD, Varbits.DIARY_VARROCK_ELITE), + WESTERN(10, "Western Provinces", Varbits.DIARY_WESTERN_EASY, Varbits.DIARY_WESTERN_MEDIUM, Varbits.DIARY_WESTERN_HARD, Varbits.DIARY_WESTERN_ELITE), + WILDERNESS(9, "Wilderness", Varbits.DIARY_WILDERNESS_EASY, Varbits.DIARY_WILDERNESS_MEDIUM, Varbits.DIARY_WILDERNESS_HARD, Varbits.DIARY_WILDERNESS_ELITE); + + private final int index; + private final String name; + private final Varbits[] varbits; + + DiaryEntry(int index, String name, Varbits... varbits) + { + this.index = index; + this.name = name; + this.varbits = varbits; + } + + public int getIndex() + { + return index; + } + + public String getName() + { + return name; + } + + public Varbits[] getVarbits() + { + return varbits; + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/diaryprogress/DiaryProgressConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/diaryprogress/DiaryProgressConfig.java new file mode 100644 index 0000000000..f0be2b9b77 --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/diaryprogress/DiaryProgressConfig.java @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2018, oplosthee + * 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.diaryprogress; + +import net.runelite.client.config.Config; +import net.runelite.client.config.ConfigGroup; +import net.runelite.client.config.ConfigItem; + +@ConfigGroup( + keyName = "diaryprogress", + name = "Diary Progress", + description = "Configuration for the plugin for enabling and disabling diary progress indicators" +) +public interface DiaryProgressConfig extends Config +{ + @ConfigItem( + keyName = "enabled", + name = "Enabled", + description = "Configures whether or not to display diary progress indicators" + ) + default boolean enabled() + { + return false; + } +} diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/diaryprogress/DiaryProgressPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/diaryprogress/DiaryProgressPlugin.java new file mode 100644 index 0000000000..c5e65854de --- /dev/null +++ b/runelite-client/src/main/java/net/runelite/client/plugins/diaryprogress/DiaryProgressPlugin.java @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2018, oplosthee + * 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.diaryprogress; + +import com.google.common.eventbus.Subscribe; +import com.google.inject.Inject; +import com.google.inject.Provides; +import net.runelite.api.Client; +import net.runelite.api.Varbits; +import net.runelite.api.events.GameTick; +import net.runelite.api.widgets.Widget; +import net.runelite.api.widgets.WidgetInfo; +import net.runelite.client.config.ConfigManager; +import net.runelite.client.plugins.Plugin; +import net.runelite.client.plugins.PluginDescriptor; + +@PluginDescriptor( + name = "Diary Progress plugin" +) +public class DiaryProgressPlugin extends Plugin +{ + private static final String STAGE_FINISHED_STRING = "X"; + private static final String STAGE_UNFINISHED_STRING = "_"; + + @Inject + Client client; + + @Inject + DiaryProgressConfig config; + + @Provides + DiaryProgressConfig provideConfig(ConfigManager configManager) + { + return configManager.getConfig(DiaryProgressConfig.class); + } + + @Subscribe + public void updateDiaryStatus(GameTick event) + { + Widget diaryWidget = client.getWidget(WidgetInfo.DIARY_LIST); + + if (diaryWidget == null) + { + return; + } + + for (DiaryEntry entry : DiaryEntry.values()) + { + Widget child = diaryWidget.getChild(entry.getIndex()); + StringBuilder progress = new StringBuilder(); + + if (config.enabled()) + { + for (Varbits varbits : entry.getVarbits()) + { + if (client.getSetting(varbits) == 1) + { + progress.append(STAGE_FINISHED_STRING); + } + else + { + progress.append(STAGE_UNFINISHED_STRING); + } + } + + progress.append(" ").append(entry.getName()); + } + else + { + progress.append(entry.getName()); + } + + child.setText(progress.toString()); + } + } +}