Add Diary Progress Indicator plugin (#429)

This commit is contained in:
oplosthee
2018-01-26 20:24:17 +01:00
committed by Alexander
parent e1f84a87ae
commit e88735201c
6 changed files with 274 additions and 0 deletions

View File

@@ -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
*/

View File

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

View File

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

View File

@@ -0,0 +1,68 @@
/*
* Copyright (c) 2018, oplosthee <https://github.com/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;
}
}

View File

@@ -0,0 +1,47 @@
/*
* Copyright (c) 2018, oplosthee <https://github.com/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;
}
}

View File

@@ -0,0 +1,98 @@
/*
* Copyright (c) 2018, oplosthee <https://github.com/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 = "<col=00ff00>X</col>";
private static final String STAGE_UNFINISHED_STRING = "<col=ffff00>_</col>";
@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("<col=ffff00> ").append(entry.getName());
}
else
{
progress.append(entry.getName());
}
child.setText(progress.toString());
}
}
}