diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordAreaType.java b/runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordAreaType.java index 7beb6810aa..b18169f88e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordAreaType.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordAreaType.java @@ -29,5 +29,6 @@ enum DiscordAreaType BOSSES, CITIES, DUNGEONS, - MINIGAMES; + MINIGAMES, + RAIDS } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordConfig.java index f0ae61cd88..de79193a43 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordConfig.java @@ -107,4 +107,15 @@ public interface DiscordConfig extends Config { return true; } + + @ConfigItem( + keyName = "showRaidingActivity", + name = "Show activity at raids", + description = "Configures if your activity at raids should be shown.", + position = 8 + ) + default boolean showRaidingActivity() + { + return true; + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordGameEventType.java b/runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordGameEventType.java index e2100b638a..a2c81c3f70 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordGameEventType.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordGameEventType.java @@ -25,11 +25,15 @@ */ package net.runelite.client.plugins.discord; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; import lombok.AllArgsConstructor; import lombok.Getter; +import net.runelite.api.Client; import net.runelite.api.Skill; +import net.runelite.api.Varbits; @AllArgsConstructor @Getter @@ -237,14 +241,25 @@ enum DiscordGameEventType MG_TROUBLE_BREWING("Trouble Brewing", DiscordAreaType.MINIGAMES, 15150), MG_TZHAAR_FIGHT_CAVES("Tzhaar Fight Caves", DiscordAreaType.MINIGAMES, 9551), MG_TZHAAR_FIGHT_PITS("Tzhaar Fight Pits", DiscordAreaType.MINIGAMES, 9552), - MG_VOLCANIC_MINE("Volcanic Mine", DiscordAreaType.MINIGAMES, 15263, 15262); + MG_VOLCANIC_MINE("Volcanic Mine", DiscordAreaType.MINIGAMES, 15263, 15262), + + // Raids + RAIDS_CHAMBERS_OF_XERIC("Chambers of Xeric", DiscordAreaType.RAIDS, Varbits.IN_RAID), + RAIDS_THEATRE_OF_BLOOD("Theatre of Blood", DiscordAreaType.RAIDS, Varbits.THEATRE_OF_BLOOD); private static final Map FROM_REGION = new HashMap<>(); + private static final List FROM_VARBITS = new ArrayList<>(); static { for (DiscordGameEventType discordGameEventType : DiscordGameEventType.values()) { + if (discordGameEventType.getVarbits() != null) + { + FROM_VARBITS.add(discordGameEventType); + continue; + } + if (discordGameEventType.getRegionIds() == null) { continue; @@ -266,6 +281,7 @@ enum DiscordGameEventType private boolean shouldTimeout; private DiscordAreaType discordAreaType; + private Varbits varbits; private int[] regionIds; DiscordGameEventType(Skill skill) @@ -298,6 +314,15 @@ enum DiscordGameEventType this.shouldClear = true; } + DiscordGameEventType(String areaName, DiscordAreaType areaType, Varbits varbits) + { + this.details = exploring(areaType, areaName); + this.priority = -2; + this.discordAreaType = areaType; + this.varbits = varbits; + this.shouldClear = true; + } + private static String training(final Skill skill) { return training(skill.getName()); @@ -330,6 +355,8 @@ enum DiscordGameEventType return "Location: " + areaName; case MINIGAMES: return "Playing: " + areaName; + case RAIDS: + return "Raiding: " + areaName; } return ""; @@ -369,4 +396,17 @@ enum DiscordGameEventType { return FROM_REGION.get(regionId); } + + public static DiscordGameEventType fromVarbit(final Client client) + { + for (DiscordGameEventType fromVarbit : FROM_VARBITS) + { + if (client.getVar(fromVarbit.getVarbits()) != 0) + { + return fromVarbit; + } + } + + return null; + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordPlugin.java index f5e382ea95..9a46befd64 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordPlugin.java @@ -41,6 +41,7 @@ import net.runelite.api.coords.WorldPoint; import net.runelite.api.events.ConfigChanged; import net.runelite.api.events.ExperienceChanged; import net.runelite.api.events.GameStateChanged; +import net.runelite.api.events.VarbitChanged; import net.runelite.client.RuneLiteProperties; import net.runelite.client.config.ConfigManager; import net.runelite.client.plugins.Plugin; @@ -159,6 +160,22 @@ public class DiscordPlugin extends Plugin } } + @Subscribe + public void onVarbitChanged(VarbitChanged event) + { + if (!config.showRaidingActivity()) + { + return; + } + + final DiscordGameEventType discordGameEventType = DiscordGameEventType.fromVarbit(client); + + if (discordGameEventType != null) + { + discordState.triggerEvent(discordGameEventType); + } + } + @Schedule( period = 1, unit = ChronoUnit.MINUTES