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 a982820e0b..c004f2e58b 100644 --- a/runelite-api/src/main/java/net/runelite/api/Client.java +++ b/runelite-api/src/main/java/net/runelite/api/Client.java @@ -34,6 +34,7 @@ import java.util.Map; import java.util.Set; import javax.annotation.Nonnull; import javax.annotation.Nullable; +import net.runelite.api.annotations.Varbit; import net.runelite.api.annotations.VisibleForExternalPlugins; import net.runelite.api.clan.ClanChannel; import net.runelite.api.clan.ClanID; @@ -854,12 +855,22 @@ public interface Client extends OAuthApi, GameEngine int getVar(VarPlayer varPlayer); /** - * Gets a value corresponding to the passed variable. + * Gets a value corresponding to the passed varbit. * - * @param varbit the variable + * @param varbit the varbit id + * @return the value + * @see Client#getVarbitValue(int) + */ + @Deprecated + int getVar(@Varbit int varbit); + + /** + * Gets a value corresponding to the passed varbit. + * + * @param varbit the varbit id * @return the value */ - int getVar(Varbits varbit); + int getVarbitValue(@Varbit int varbit); /** * Gets an int value corresponding to the passed variable. @@ -877,15 +888,6 @@ public interface Client extends OAuthApi, GameEngine */ String getVar(VarClientStr varClientStr); - /** - * Gets the value of a given Varbit. - * - * @param varbitId the varbit id - * @return the value - */ - @VisibleForExternalPlugins - int getVarbitValue(int varbitId); - /** * Gets the value of a given VarClientInt * @@ -915,12 +917,12 @@ public interface Client extends OAuthApi, GameEngine void setVar(VarClientInt varClientStr, int value); /** - * Sets the value of a given variable. + * Sets the value of a varbit * - * @param varbit the variable + * @param varbit the varbit id * @param value the new value */ - void setVarbit(Varbits varbit, int value); + void setVarbit(@Varbit int varbit, int value); /** * Gets the varbit composition for a given varbit id @@ -939,7 +941,7 @@ public interface Client extends OAuthApi, GameEngine * @return the value * @see Varbits */ - int getVarbitValue(int[] varps, int varbitId); + int getVarbitValue(int[] varps, @Varbit int varbitId); /** * Gets the value of a given VarPlayer. @@ -961,7 +963,7 @@ public interface Client extends OAuthApi, GameEngine * @param value the value * @see Varbits */ - void setVarbitValue(int[] varps, int varbit, int value); + void setVarbitValue(int[] varps, @Varbit int varbit, int value); /** * Mark the given varp as changed, causing var listeners to be diff --git a/runelite-api/src/main/java/net/runelite/api/FriendsChatManager.java b/runelite-api/src/main/java/net/runelite/api/FriendsChatManager.java index 62ca061b3c..2e51b4b01b 100644 --- a/runelite-api/src/main/java/net/runelite/api/FriendsChatManager.java +++ b/runelite-api/src/main/java/net/runelite/api/FriendsChatManager.java @@ -40,4 +40,18 @@ public interface FriendsChatManager extends NameableContainer * @return */ String getName(); + + /** + * Get the local player's rank in the friend chat + * + * @return + */ + FriendsChatRank getMyRank(); + + /** + * Get the rank required to kick members from the friends chat + * + * @return + */ + FriendsChatRank getKickRank(); } diff --git a/runelite-api/src/main/java/net/runelite/api/Perspective.java b/runelite-api/src/main/java/net/runelite/api/Perspective.java index 1035b5d511..876f8141c4 100644 --- a/runelite-api/src/main/java/net/runelite/api/Perspective.java +++ b/runelite-api/src/main/java/net/runelite/api/Perspective.java @@ -337,7 +337,7 @@ public class Perspective Widget minimapDrawWidget; if (client.isResized()) { - if (client.getVar(Varbits.SIDE_PANELS) == 1) + if (client.getVarbitValue(Varbits.SIDE_PANELS) == 1) { minimapDrawWidget = client.getWidget(WidgetInfo.RESIZABLE_MINIMAP_DRAW_AREA); } diff --git a/runelite-api/src/main/java/net/runelite/api/Prayer.java b/runelite-api/src/main/java/net/runelite/api/Prayer.java index 6b4ea06e2b..d44831b0a0 100644 --- a/runelite-api/src/main/java/net/runelite/api/Prayer.java +++ b/runelite-api/src/main/java/net/runelite/api/Prayer.java @@ -24,15 +24,12 @@ */ package net.runelite.api; -import lombok.AllArgsConstructor; -import lombok.Getter; import net.runelite.api.widgets.WidgetInfo; +import net.runelite.api.annotations.Varbit; /** * An enumeration of different prayer spells. */ -@Getter -@AllArgsConstructor public enum Prayer { /** @@ -152,19 +149,40 @@ public enum Prayer */ AUGURY(Varbits.PRAYER_AUGURY, 40.0, WidgetInfo.PRAYER_AUGURY); + private final int varbit; + private final double drainRate; + private final WidgetInfo widgetInfo; + + Prayer(@Varbit int varbit, double drainRate, WidgetInfo widgetInfo) + { + this.varbit = varbit; + this.drainRate = drainRate; + this.widgetInfo = widgetInfo; + } + /** * Gets the varbit that stores whether the prayer is active or not. + * + * @return the prayer active varbit */ - private final Varbits varbit; + @Varbit + public int getVarbit() + { + return varbit; + } /** * Gets the prayer drain rate (measured in pray points/minute) + * + * @return the prayer drain rate */ - private final double drainRate; - - /** - * Gets the widget info for prayer - */ - private final WidgetInfo widgetInfo; + public double getDrainRate() + { + return drainRate; + } + public WidgetInfo getWidgetInfo() + { + return widgetInfo; + } } \ No newline at end of file diff --git a/runelite-api/src/main/java/net/runelite/api/ScriptID.java b/runelite-api/src/main/java/net/runelite/api/ScriptID.java index 2e3a31ebe7..4ef61b6d70 100644 --- a/runelite-api/src/main/java/net/runelite/api/ScriptID.java +++ b/runelite-api/src/main/java/net/runelite/api/ScriptID.java @@ -447,6 +447,6 @@ public final class ScriptID @ScriptArguments(integer = 4) public static final int QUEST_FILTER = 3238; - @ScriptArguments(integer = 18, string = 1) + @ScriptArguments(integer = 7) public static final int GROUP_IRONMAN_STORAGE_BUILD = 5269; } \ No newline at end of file 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 625bf5ebfd..4b548d1a53 100644 --- a/runelite-api/src/main/java/net/runelite/api/Varbits.java +++ b/runelite-api/src/main/java/net/runelite/api/Varbits.java @@ -24,209 +24,204 @@ */ package net.runelite.api; -import lombok.AllArgsConstructor; -import lombok.Getter; - /** * Server controlled "content-developer" integers. * * @see VarPlayer - * + *

* These differ from a {@link VarPlayer} in that VarBits can be * less than 32 bits. One or more VarBits can be assigned to a * backing VarPlayer, each with a static range of bits that it is * allowed to access. This allows a more compact representation * of small values, like booleans */ -@AllArgsConstructor -@Getter -public enum Varbits +public final class Varbits { /* * If chatbox is transparent or not */ - TRANSPARENT_CHATBOX(4608), + public static final int TRANSPARENT_CHATBOX = 4608; /* * If the player has an active stamina potion effect or not */ - RUN_SLOWED_DEPLETION_ACTIVE(25), + public static final int RUN_SLOWED_DEPLETION_ACTIVE = 25; /** * If scrollbar in resizable mode chat is on the left */ - CHAT_SCROLLBAR_ON_LEFT(6374), + public static final int CHAT_SCROLLBAR_ON_LEFT = 6374; /** * Runepouch */ - RUNE_POUCH_RUNE1(29), - RUNE_POUCH_RUNE2(1622), - RUNE_POUCH_RUNE3(1623), - RUNE_POUCH_AMOUNT1(1624), - RUNE_POUCH_AMOUNT2(1625), - RUNE_POUCH_AMOUNT3(1626), + public static final int RUNE_POUCH_RUNE1 = 29; + public static final int RUNE_POUCH_RUNE2 = 1622; + public static final int RUNE_POUCH_RUNE3 = 1623; + public static final int RUNE_POUCH_AMOUNT1 = 1624; + public static final int RUNE_POUCH_AMOUNT2 = 1625; + public static final int RUNE_POUCH_AMOUNT3 = 1626; /** * Prayers */ - QUICK_PRAYER(4103), - PRAYER_THICK_SKIN(4104), - PRAYER_BURST_OF_STRENGTH(4105), - PRAYER_CLARITY_OF_THOUGHT(4106), - PRAYER_SHARP_EYE(4122), - PRAYER_MYSTIC_WILL(4123), - PRAYER_ROCK_SKIN(4107), - PRAYER_SUPERHUMAN_STRENGTH(4108), - PRAYER_IMPROVED_REFLEXES(4109), - PRAYER_RAPID_RESTORE(4110), - PRAYER_RAPID_HEAL(4111), - PRAYER_PROTECT_ITEM(4112), - PRAYER_HAWK_EYE(4124), - PRAYER_MYSTIC_LORE(4125), - PRAYER_STEEL_SKIN(4113), - PRAYER_ULTIMATE_STRENGTH(4114), - PRAYER_INCREDIBLE_REFLEXES(4115), - PRAYER_PROTECT_FROM_MAGIC(4116), - PRAYER_PROTECT_FROM_MISSILES(4117), - PRAYER_PROTECT_FROM_MELEE(4118), - PRAYER_EAGLE_EYE(4126), - PRAYER_MYSTIC_MIGHT(4127), - PRAYER_RETRIBUTION(4119), - PRAYER_REDEMPTION(4120), - PRAYER_SMITE(4121), - PRAYER_CHIVALRY(4128), - PRAYER_PIETY(4129), - PRAYER_PRESERVE(5466), - PRAYER_RIGOUR(5464), - PRAYER_AUGURY(5465), + public static final int QUICK_PRAYER = 4103; + public static final int PRAYER_THICK_SKIN = 4104; + public static final int PRAYER_BURST_OF_STRENGTH = 4105; + public static final int PRAYER_CLARITY_OF_THOUGHT = 4106; + public static final int PRAYER_SHARP_EYE = 4122; + public static final int PRAYER_MYSTIC_WILL = 4123; + public static final int PRAYER_ROCK_SKIN = 4107; + public static final int PRAYER_SUPERHUMAN_STRENGTH = 4108; + public static final int PRAYER_IMPROVED_REFLEXES = 4109; + public static final int PRAYER_RAPID_RESTORE = 4110; + public static final int PRAYER_RAPID_HEAL = 4111; + public static final int PRAYER_PROTECT_ITEM = 4112; + public static final int PRAYER_HAWK_EYE = 4124; + public static final int PRAYER_MYSTIC_LORE = 4125; + public static final int PRAYER_STEEL_SKIN = 4113; + public static final int PRAYER_ULTIMATE_STRENGTH = 4114; + public static final int PRAYER_INCREDIBLE_REFLEXES = 4115; + public static final int PRAYER_PROTECT_FROM_MAGIC = 4116; + public static final int PRAYER_PROTECT_FROM_MISSILES = 4117; + public static final int PRAYER_PROTECT_FROM_MELEE = 4118; + public static final int PRAYER_EAGLE_EYE = 4126; + public static final int PRAYER_MYSTIC_MIGHT = 4127; + public static final int PRAYER_RETRIBUTION = 4119; + public static final int PRAYER_REDEMPTION = 4120; + public static final int PRAYER_SMITE = 4121; + public static final int PRAYER_CHIVALRY = 4128; + public static final int PRAYER_PIETY = 4129; + public static final int PRAYER_PRESERVE = 5466; + public static final int PRAYER_RIGOUR = 5464; + public static final int PRAYER_AUGURY = 5465; - RIGOUR_UNLOCKED(5451), - AUGURY_UNLOCKED(5452), - PRESERVE_UNLOCKED(5453), + public static final int RIGOUR_UNLOCKED = 5451; + public static final int AUGURY_UNLOCKED = 5452; + public static final int PRESERVE_UNLOCKED = 5453; /** * Diary Entries */ - DIARY_ARDOUGNE_EASY(4458), - DIARY_ARDOUGNE_MEDIUM(4459), - DIARY_ARDOUGNE_HARD(4460), - DIARY_ARDOUGNE_ELITE(4461), + public static final int DIARY_ARDOUGNE_EASY = 4458; + public static final int DIARY_ARDOUGNE_MEDIUM = 4459; + public static final int DIARY_ARDOUGNE_HARD = 4460; + public static final int DIARY_ARDOUGNE_ELITE = 4461; - DIARY_DESERT_EASY(4483), - DIARY_DESERT_MEDIUM(4484), - DIARY_DESERT_HARD(4485), - DIARY_DESERT_ELITE(4486), + public static final int DIARY_DESERT_EASY = 4483; + public static final int DIARY_DESERT_MEDIUM = 4484; + public static final int DIARY_DESERT_HARD = 4485; + public static final int DIARY_DESERT_ELITE = 4486; - DIARY_FALADOR_EASY(4462), - DIARY_FALADOR_MEDIUM(4463), - DIARY_FALADOR_HARD(4464), - DIARY_FALADOR_ELITE(4465), + public static final int DIARY_FALADOR_EASY = 4462; + public static final int DIARY_FALADOR_MEDIUM = 4463; + public static final int DIARY_FALADOR_HARD = 4464; + public static final int DIARY_FALADOR_ELITE = 4465; - DIARY_FREMENNIK_EASY(4491), - DIARY_FREMENNIK_MEDIUM(4492), - DIARY_FREMENNIK_HARD(4493), - DIARY_FREMENNIK_ELITE(4494), + public static final int DIARY_FREMENNIK_EASY = 4491; + public static final int DIARY_FREMENNIK_MEDIUM = 4492; + public static final int DIARY_FREMENNIK_HARD = 4493; + public static final int DIARY_FREMENNIK_ELITE = 4494; - DIARY_KANDARIN_EASY(4475), - DIARY_KANDARIN_MEDIUM(4476), - DIARY_KANDARIN_HARD(4477), - DIARY_KANDARIN_ELITE(4478), + public static final int DIARY_KANDARIN_EASY = 4475; + public static final int DIARY_KANDARIN_MEDIUM = 4476; + public static final int DIARY_KANDARIN_HARD = 4477; + public static final int DIARY_KANDARIN_ELITE = 4478; - DIARY_KARAMJA_EASY(3578), - DIARY_KARAMJA_MEDIUM(3599), - DIARY_KARAMJA_HARD(3611), - DIARY_KARAMJA_ELITE(4566), + public static final int DIARY_KARAMJA_EASY = 3578; + public static final int DIARY_KARAMJA_MEDIUM = 3599; + public static final int DIARY_KARAMJA_HARD = 3611; + public static final int DIARY_KARAMJA_ELITE = 4566; - DIARY_KOUREND_EASY(7925), - DIARY_KOUREND_MEDIUM(7926), - DIARY_KOUREND_HARD(7927), - DIARY_KOUREND_ELITE(7928), + public static final int DIARY_KOUREND_EASY = 7925; + public static final int DIARY_KOUREND_MEDIUM = 7926; + public static final int DIARY_KOUREND_HARD = 7927; + public static final int DIARY_KOUREND_ELITE = 7928; - DIARY_LUMBRIDGE_EASY(4495), - DIARY_LUMBRIDGE_MEDIUM(4496), - DIARY_LUMBRIDGE_HARD(4497), - DIARY_LUMBRIDGE_ELITE(4498), + public static final int DIARY_LUMBRIDGE_EASY = 4495; + public static final int DIARY_LUMBRIDGE_MEDIUM = 4496; + public static final int DIARY_LUMBRIDGE_HARD = 4497; + public static final int DIARY_LUMBRIDGE_ELITE = 4498; - DIARY_MORYTANIA_EASY(4487), - DIARY_MORYTANIA_MEDIUM(4488), - DIARY_MORYTANIA_HARD(4489), - DIARY_MORYTANIA_ELITE(4490), + public static final int DIARY_MORYTANIA_EASY = 4487; + public static final int DIARY_MORYTANIA_MEDIUM = 4488; + public static final int DIARY_MORYTANIA_HARD = 4489; + public static final int DIARY_MORYTANIA_ELITE = 4490; - DIARY_VARROCK_EASY(4479), - DIARY_VARROCK_MEDIUM(4480), - DIARY_VARROCK_HARD(4481), - DIARY_VARROCK_ELITE(4482), + public static final int DIARY_VARROCK_EASY = 4479; + public static final int DIARY_VARROCK_MEDIUM = 4480; + public static final int DIARY_VARROCK_HARD = 4481; + public static final int DIARY_VARROCK_ELITE = 4482; - DIARY_WESTERN_EASY(4471), - DIARY_WESTERN_MEDIUM(4472), - DIARY_WESTERN_HARD(4473), - DIARY_WESTERN_ELITE(4474), + public static final int DIARY_WESTERN_EASY = 4471; + public static final int DIARY_WESTERN_MEDIUM = 4472; + public static final int DIARY_WESTERN_HARD = 4473; + public static final int DIARY_WESTERN_ELITE = 4474; - DIARY_WILDERNESS_EASY(4466), - DIARY_WILDERNESS_MEDIUM(4467), - DIARY_WILDERNESS_HARD(4468), - DIARY_WILDERNESS_ELITE(4469), + public static final int DIARY_WILDERNESS_EASY = 4466; + public static final int DIARY_WILDERNESS_MEDIUM = 4467; + public static final int DIARY_WILDERNESS_HARD = 4468; + public static final int DIARY_WILDERNESS_ELITE = 4469; /** * Kourend house favours */ - KOUREND_FAVOR_ARCEUUS(4896), - KOUREND_FAVOR_HOSIDIUS(4895), - KOUREND_FAVOR_LOVAKENGJ(4898), - KOUREND_FAVOR_PISCARILIUS(4899), - KOUREND_FAVOR_SHAYZIEN(4894), + public static final int KOUREND_FAVOR_ARCEUUS = 4896; + public static final int KOUREND_FAVOR_HOSIDIUS = 4895; + public static final int KOUREND_FAVOR_LOVAKENGJ = 4898; + public static final int KOUREND_FAVOR_PISCARILIUS = 4899; + public static final int KOUREND_FAVOR_SHAYZIEN = 4894; /** * Equipped weapon type */ - EQUIPPED_WEAPON_TYPE(357), + public static final int EQUIPPED_WEAPON_TYPE = 357; /** * Defensive casting mode */ - DEFENSIVE_CASTING_MODE(2668), + public static final int DEFENSIVE_CASTING_MODE = 2668; /** * Spells being auto-casted */ - AUTO_CAST_SPELL(276), + public static final int AUTO_CAST_SPELL = 276; /** * Options */ - SIDE_PANELS(4607), + public static final int SIDE_PANELS = 4607; /** * Herbiboar Trails */ - HB_TRAIL_31303(5737), - HB_TRAIL_31306(5738), - HB_TRAIL_31309(5739), - HB_TRAIL_31312(5740), - HB_TRAIL_31315(5741), - HB_TRAIL_31318(5742), - HB_TRAIL_31321(5743), - HB_TRAIL_31324(5744), - HB_TRAIL_31327(5745), - HB_TRAIL_31330(5746), + public static final int HB_TRAIL_31303 = 5737; + public static final int HB_TRAIL_31306 = 5738; + public static final int HB_TRAIL_31309 = 5739; + public static final int HB_TRAIL_31312 = 5740; + public static final int HB_TRAIL_31315 = 5741; + public static final int HB_TRAIL_31318 = 5742; + public static final int HB_TRAIL_31321 = 5743; + public static final int HB_TRAIL_31324 = 5744; + public static final int HB_TRAIL_31327 = 5745; + public static final int HB_TRAIL_31330 = 5746; - HB_TRAIL_31333(5768), - HB_TRAIL_31336(5769), - HB_TRAIL_31339(5770), - HB_TRAIL_31342(5771), - HB_TRAIL_31345(5772), - HB_TRAIL_31348(5773), - HB_TRAIL_31351(5774), - HB_TRAIL_31354(5775), - HB_TRAIL_31357(5776), - HB_TRAIL_31360(5777), + public static final int HB_TRAIL_31333 = 5768; + public static final int HB_TRAIL_31336 = 5769; + public static final int HB_TRAIL_31339 = 5770; + public static final int HB_TRAIL_31342 = 5771; + public static final int HB_TRAIL_31345 = 5772; + public static final int HB_TRAIL_31348 = 5773; + public static final int HB_TRAIL_31351 = 5774; + public static final int HB_TRAIL_31354 = 5775; + public static final int HB_TRAIL_31357 = 5776; + public static final int HB_TRAIL_31360 = 5777; - HB_TRAIL_31363(5747), - HB_TRAIL_31366(5748), - HB_TRAIL_31369(5749), - HB_TRAIL_31372(5750), + public static final int HB_TRAIL_31363 = 5747; + public static final int HB_TRAIL_31366 = 5748; + public static final int HB_TRAIL_31369 = 5749; + public static final int HB_TRAIL_31372 = 5750; - HB_FINISH(5766), + public static final int HB_FINISH = 5766; /** * Started hunting Herbiboar. @@ -234,181 +229,186 @@ public enum Varbits * NOTE: This value remains at 0 even after starting a Herbiboar trail up until searching the first object along the * hunting path. */ - HB_STARTED(5767), + public static final int HB_STARTED = 5767; /** * Barbarian Assault */ - IN_GAME_BA(3923), - BA_GC(4768), + public static final int IN_GAME_BA = 3923; + public static final int BA_GC = 4768; /** * 0 = Outside wilderness * 1 = In wilderness */ - IN_WILDERNESS(5963), + public static final int IN_WILDERNESS = 5963; /** * Fishing Trawler * FISHING_TRAWLER_ACTIVITY Expected values: 0-255 */ - FISHING_TRAWLER_ACTIVITY(3377), + public static final int FISHING_TRAWLER_ACTIVITY = 3377; /** * Blast Furnace Bar Dispenser - * + *

* These are the expected values: - * 0 = No bars being processed - * 1 = Ores are being processed on the conveyor belt, bar dispenser cannot be checked - * 2 = Bars are cooling down - * 3 = Bars can be collected + * 0 = No bars being processed + * 1 = Ores are being processed on the conveyor belt, bar dispenser cannot be checked + * 2 = Bars are cooling down + * 3 = Bars can be collected */ - BAR_DISPENSER(936), + public static final int BAR_DISPENSER = 936; /** * Motherlode mine sack */ - SACK_NUMBER(5558), - SACK_UPGRADED(5556), + public static final int SACK_NUMBER = 5558; + public static final int SACK_UPGRADED = 5556; /** * Experience tracker - * + *

* EXPERIENCE_TRACKER_POSITION expected values: - * 0 = Right - * 1 = Middle - * 2 = Left + * 0 = Right + * 1 = Middle + * 2 = Left */ - EXPERIENCE_TRACKER_POSITION(4692), - EXPERIENCE_TRACKER_COUNTER(4697), - EXPERIENCE_TRACKER_PROGRESS_BAR(4698), + public static final int EXPERIENCE_TRACKER_POSITION = 4692; + public static final int EXPERIENCE_TRACKER_COUNTER = 4697; + public static final int EXPERIENCE_TRACKER_PROGRESS_BAR = 4698; /** * Experience drop color */ - EXPERIENCE_DROP_COLOR(4695), + public static final int EXPERIENCE_DROP_COLOR = 4695; /** * Tithe Farm */ - TITHE_FARM_SACK_AMOUNT(4900), - TITHE_FARM_SACK_ICON(5370), - TITHE_FARM_POINTS(4893), + public static final int TITHE_FARM_SACK_AMOUNT = 4900; + public static final int TITHE_FARM_SACK_ICON = 5370; + public static final int TITHE_FARM_POINTS = 4893; /** * Blast Mine */ - BLAST_MINE_COAL(4924), - BLAST_MINE_GOLD(4925), - BLAST_MINE_MITHRIL(4926), - BLAST_MINE_ADAMANTITE(4921), - BLAST_MINE_RUNITE(4922), + public static final int BLAST_MINE_COAL = 4924; + public static final int BLAST_MINE_GOLD = 4925; + public static final int BLAST_MINE_MITHRIL = 4926; + public static final int BLAST_MINE_ADAMANTITE = 4921; + public static final int BLAST_MINE_RUNITE = 4922; /** * Raids */ - IN_RAID(5432), - TOTAL_POINTS(5431), - PERSONAL_POINTS(5422), - RAID_PARTY_SIZE(5424), + public static final int IN_RAID = 5432; + public static final int TOTAL_POINTS = 5431; + public static final int PERSONAL_POINTS = 5422; + public static final int RAID_PARTY_SIZE = 5424; // 0 = raid not started, >0 = raid started - RAID_STATE(5425), + public static final int RAID_STATE = 5425; /** * Making Friends with My Arm fire pits - * + *

* Expected values: - * 0 = Not built - * 1 = Built + * 0 = Not built + * 1 = Built */ - FIRE_PIT_GIANT_MOLE(6532), - FIRE_PIT_LUMBRIDGE_SWAMP(6533), - FIRE_PIT_MOS_LE_HARMLESS(6534), + public static final int FIRE_PIT_GIANT_MOLE = 6532; + public static final int FIRE_PIT_LUMBRIDGE_SWAMP = 6533; + public static final int FIRE_PIT_MOS_LE_HARMLESS = 6534; /** * Theatre of Blood 1=In Party, 2=Inside/Spectator, 3=Dead Spectating */ - THEATRE_OF_BLOOD(6440), + public static final int THEATRE_OF_BLOOD = 6440; + /** + * Theatre of Blood orb healths + * 0=hide 1-27=% of health - 27 is 100% health and 1 is 0% health, 30=dead + */ + public static final int THEATRE_OF_BLOOD_ORB1 = 6442; + public static final int THEATRE_OF_BLOOD_ORB2 = 6443; + public static final int THEATRE_OF_BLOOD_ORB3 = 6444; + public static final int THEATRE_OF_BLOOD_ORB4 = 6445; + public static final int THEATRE_OF_BLOOD_ORB5 = 6446; /** * Nightmare Zone */ - NMZ_ABSORPTION(3956), - NMZ_POINTS(3949), + public static final int NMZ_ABSORPTION = 3956; + public static final int NMZ_POINTS = 3949; /** * Blast Furnace */ - BLAST_FURNACE_COPPER_ORE(959), - BLAST_FURNACE_TIN_ORE(950), - BLAST_FURNACE_IRON_ORE(951), - BLAST_FURNACE_COAL(949), - BLAST_FURNACE_MITHRIL_ORE(952), - BLAST_FURNACE_ADAMANTITE_ORE(953), - BLAST_FURNACE_RUNITE_ORE(954), - BLAST_FURNACE_SILVER_ORE(956), - BLAST_FURNACE_GOLD_ORE(955), + public static final int BLAST_FURNACE_COPPER_ORE = 959; + public static final int BLAST_FURNACE_TIN_ORE = 950; + public static final int BLAST_FURNACE_IRON_ORE = 951; + public static final int BLAST_FURNACE_COAL = 949; + public static final int BLAST_FURNACE_MITHRIL_ORE = 952; + public static final int BLAST_FURNACE_ADAMANTITE_ORE = 953; + public static final int BLAST_FURNACE_RUNITE_ORE = 954; + public static final int BLAST_FURNACE_SILVER_ORE = 956; + public static final int BLAST_FURNACE_GOLD_ORE = 955; - BLAST_FURNACE_BRONZE_BAR(941), - BLAST_FURNACE_IRON_BAR(942), - BLAST_FURNACE_STEEL_BAR(943), - BLAST_FURNACE_MITHRIL_BAR(944), - BLAST_FURNACE_ADAMANTITE_BAR(945), - BLAST_FURNACE_RUNITE_BAR(946), - BLAST_FURNACE_SILVER_BAR(948), - BLAST_FURNACE_GOLD_BAR(947), + public static final int BLAST_FURNACE_BRONZE_BAR = 941; + public static final int BLAST_FURNACE_IRON_BAR = 942; + public static final int BLAST_FURNACE_STEEL_BAR = 943; + public static final int BLAST_FURNACE_MITHRIL_BAR = 944; + public static final int BLAST_FURNACE_ADAMANTITE_BAR = 945; + public static final int BLAST_FURNACE_RUNITE_BAR = 946; + public static final int BLAST_FURNACE_SILVER_BAR = 948; + public static final int BLAST_FURNACE_GOLD_BAR = 947; - BLAST_FURNACE_COFFER(5357), + public static final int BLAST_FURNACE_COFFER = 5357; /** * Pyramid plunder */ - PYRAMID_PLUNDER_ROOM_LOCATION(2365), - PYRAMID_PLUNDER_TIMER(2375), - PYRAMID_PLUNDER_THIEVING_LEVEL(2376), - PYRAMID_PLUNDER_ROOM(2377), + public static final int PYRAMID_PLUNDER_ROOM_LOCATION = 2365; + public static final int PYRAMID_PLUNDER_TIMER = 2375; + public static final int PYRAMID_PLUNDER_THIEVING_LEVEL = 2376; + public static final int PYRAMID_PLUNDER_ROOM = 2377; /** * Barrows */ - BARROWS_KILLED_AHRIM(457), - BARROWS_KILLED_DHAROK(458), - BARROWS_KILLED_GUTHAN(459), - BARROWS_KILLED_KARIL(460), - BARROWS_KILLED_TORAG(461), - BARROWS_KILLED_VERAC(462), - BARROWS_REWARD_POTENTIAL(463), - BARROWS_NPCS_SLAIN(464), + public static final int BARROWS_KILLED_AHRIM = 457; + public static final int BARROWS_KILLED_DHAROK = 458; + public static final int BARROWS_KILLED_GUTHAN = 459; + public static final int BARROWS_KILLED_KARIL = 460; + public static final int BARROWS_KILLED_TORAG = 461; + public static final int BARROWS_KILLED_VERAC = 462; + public static final int BARROWS_REWARD_POTENTIAL = 463; + public static final int BARROWS_NPCS_SLAIN = 464; /** * Spicy stew ingredients */ - SPICY_STEW_RED_SPICES(1879), - SPICY_STEW_YELLOW_SPICES(1880), - SPICY_STEW_BROWN_SPICES(1881), - SPICY_STEW_ORANGE_SPICES(1882), + public static final int SPICY_STEW_RED_SPICES = 1879; + public static final int SPICY_STEW_YELLOW_SPICES = 1880; + public static final int SPICY_STEW_BROWN_SPICES = 1881; + public static final int SPICY_STEW_ORANGE_SPICES = 1882; /** * Multicombat area */ - MULTICOMBAT_AREA(4605), + public static final int MULTICOMBAT_AREA = 4605; /** * Kingdom of Miscellania Management * Kingdom Approval is represented as a 7-bit unsigned integer; 127 corresponds to 100% approval */ - KINGDOM_APPROVAL(72), - KINGDOM_COFFER(74), - - // TODO: Remove next major - @Deprecated - KINGDOM_FAVOR(72), + public static final int KINGDOM_APPROVAL = 72; + public static final int KINGDOM_COFFER = 74; /** * The Hand in the Sand quest status */ - QUEST_THE_HAND_IN_THE_SAND(1527), + public static final int QUEST_THE_HAND_IN_THE_SAND = 1527; /** * 0 = Sir Bedivere @@ -421,263 +421,255 @@ public enum Varbits * 7 = Sir Lancelot * 8 = Completed (Chivalry and Piety are unlocked) */ - CAMELOT_TRAINING_ROOM_STATUS(3909), + public static final int CAMELOT_TRAINING_ROOM_STATUS = 3909; /** - * Daily Tasks (Collection availability) + * Daily Tasks =Collection availability) */ - DAILY_HERB_BOXES_COLLECTED(3961), - DAILY_STAVES_COLLECTED(4539), - DAILY_ESSENCE_COLLECTED(4547), - DAILY_RUNES_COLLECTED(4540), - DAILY_SAND_COLLECTED(4549), - DAILY_FLAX_STATE(4559), - DAILY_ARROWS_STATE(4563), + public static final int DAILY_HERB_BOXES_COLLECTED = 3961; + public static final int DAILY_STAVES_COLLECTED = 4539; + public static final int DAILY_ESSENCE_COLLECTED = 4547; + public static final int DAILY_RUNES_COLLECTED = 4540; + public static final int DAILY_SAND_COLLECTED = 4549; + public static final int DAILY_FLAX_STATE = 4559; + public static final int DAILY_ARROWS_STATE = 4563; /** * This varbit tracks how much bonemeal has been redeemed from Robin * The player gets 13 for each diary completed above and including Medium, for a maxiumum of 39 */ - DAILY_BONEMEAL_STATE(4543), + public static final int DAILY_BONEMEAL_STATE = 4543; - DAILY_DYNAMITE_COLLECTED(7939), + public static final int DAILY_DYNAMITE_COLLECTED = 7939; /** * Fairy Ring */ - FAIR_RING_LAST_DESTINATION(5374), - FAIRY_RING_DIAL_ADCB(3985), //Left dial - FAIRY_RIGH_DIAL_ILJK(3986), //Middle dial - FAIRY_RING_DIAL_PSRQ(3987), //Right dial + public static final int FAIR_RING_LAST_DESTINATION = 5374; + public static final int FAIRY_RING_DIAL_ADCB = 3985; //Left dial + public static final int FAIRY_RIGH_DIAL_ILJK = 3986; //Middle dial + public static final int FAIRY_RING_DIAL_PSRQ = 3987; //Right dial /** * Transmog controllers for farming */ - FARMING_4771(4771), - FARMING_4772(4772), - FARMING_4773(4773), - FARMING_4774(4774), - FARMING_4775(4775), - FARMING_7904(7904), - FARMING_7905(7905), - FARMING_7906(7906), - FARMING_7907(7907), - FARMING_7908(7908), - FARMING_7909(7909), - FARMING_7910(7910), - FARMING_7911(7911), - FARMING_7912(7912), + public static final int FARMING_4771 = 4771; + public static final int FARMING_4772 = 4772; + public static final int FARMING_4773 = 4773; + public static final int FARMING_4774 = 4774; + public static final int FARMING_4775 = 4775; + public static final int FARMING_7904 = 7904; + public static final int FARMING_7905 = 7905; + public static final int FARMING_7906 = 7906; + public static final int FARMING_7907 = 7907; + public static final int FARMING_7908 = 7908; + public static final int FARMING_7909 = 7909; + public static final int FARMING_7910 = 7910; + public static final int FARMING_7911 = 7911; + public static final int FARMING_7912 = 7912; /** * Transmog controllers for grapes */ - GRAPES_4953(4953), - GRAPES_4954(4954), - GRAPES_4955(4955), - GRAPES_4956(4956), - GRAPES_4957(4957), - GRAPES_4958(4958), - GRAPES_4959(4959), - GRAPES_4960(4960), - GRAPES_4961(4961), - GRAPES_4962(4962), - GRAPES_4963(4963), - GRAPES_4964(4964), + public static final int GRAPES_4953 = 4953; + public static final int GRAPES_4954 = 4954; + public static final int GRAPES_4955 = 4955; + public static final int GRAPES_4956 = 4956; + public static final int GRAPES_4957 = 4957; + public static final int GRAPES_4958 = 4958; + public static final int GRAPES_4959 = 4959; + public static final int GRAPES_4960 = 4960; + public static final int GRAPES_4961 = 4961; + public static final int GRAPES_4962 = 4962; + public static final int GRAPES_4963 = 4963; + public static final int GRAPES_4964 = 4964; /** * Automatically weed farming patches */ - AUTOWEED(5557), + public static final int AUTOWEED = 5557; /** * The varbit that stores the players {@code AccountType}. */ - ACCOUNT_TYPE(1777), + public static final int ACCOUNT_TYPE = 1777; /** * The varbit that stores the oxygen percentage for player */ - OXYGEN_LEVEL(5811), + public static final int OXYGEN_LEVEL = 5811; /** * Drift net status - * + *

* Expected values - * 0 = Unset - * 1 = Set up - * 2 = Caught some fish - * 3 = Full + * 0 = Unset + * 1 = Set up + * 2 = Caught some fish + * 3 = Full */ - NORTH_NET_STATUS(5812), - SOUTH_NET_STATUS(5814), + public static final int NORTH_NET_STATUS = 5812; + public static final int SOUTH_NET_STATUS = 5814; /** * Drift net catch count */ - NORTH_NET_CATCH_COUNT(5813), - SOUTH_NET_CATCH_COUNT(5815), + public static final int NORTH_NET_CATCH_COUNT = 5813; + public static final int SOUTH_NET_CATCH_COUNT = 5815; /** * Drift net collect interface - * + *

* Expected values: - * 0 = Not open - * 1 = North interface open - * 2 = South interface open + * 0 = Not open + * 1 = North interface open + * 2 = South interface open */ - DRIFT_NET_COLLECT(5933), + public static final int DRIFT_NET_COLLECT = 5933; /** * Corp beast damage */ - CORP_DAMAGE(999), + public static final int CORP_DAMAGE = 999; /** * Toggleable slayer unlocks */ - SUPERIOR_ENABLED(5362), - FOSSIL_ISLAND_WYVERN_DISABLE(6251), + public static final int SUPERIOR_ENABLED = 5362; + public static final int FOSSIL_ISLAND_WYVERN_DISABLE = 6251; - BANK_REARRANGE_MODE(3959), - CURRENT_BANK_TAB(4150), + public static final int BANK_REARRANGE_MODE = 3959; + public static final int CURRENT_BANK_TAB = 4150; - WORLDHOPPER_FAVROITE_1(4597), - WORLDHOPPER_FAVROITE_2(4598), + public static final int WORLDHOPPER_FAVROITE_1 = 4597; + public static final int WORLDHOPPER_FAVROITE_2 = 4598; /** * Vengeance is active */ - VENGEANCE_ACTIVE(2450), + public static final int VENGEANCE_ACTIVE = 2450; /** * Spell cooldowns */ - VENGEANCE_COOLDOWN(2451), - CORRUPTION_COOLDOWN(12288), + public static final int VENGEANCE_COOLDOWN = 2451; + public static final int CORRUPTION_COOLDOWN = 12288; /** * Imbued Heart cooldown * Number of game tick remaining on cooldown in intervals of 10; for a value X there are 10 * X game ticks remaining. * The heart regains its power once this reaches 0. */ - IMBUED_HEART_COOLDOWN(5361), + public static final int IMBUED_HEART_COOLDOWN = 5361; /** * Amount of items in each bank tab */ - BANK_TAB_ONE_COUNT(4171), - BANK_TAB_TWO_COUNT(4172), - BANK_TAB_THREE_COUNT(4173), - BANK_TAB_FOUR_COUNT(4174), - BANK_TAB_FIVE_COUNT(4175), - BANK_TAB_SIX_COUNT(4176), - BANK_TAB_SEVEN_COUNT(4177), - BANK_TAB_EIGHT_COUNT(4178), - BANK_TAB_NINE_COUNT(4179), + public static final int BANK_TAB_ONE_COUNT = 4171; + public static final int BANK_TAB_TWO_COUNT = 4172; + public static final int BANK_TAB_THREE_COUNT = 4173; + public static final int BANK_TAB_FOUR_COUNT = 4174; + public static final int BANK_TAB_FIVE_COUNT = 4175; + public static final int BANK_TAB_SIX_COUNT = 4176; + public static final int BANK_TAB_SEVEN_COUNT = 4177; + public static final int BANK_TAB_EIGHT_COUNT = 4178; + public static final int BANK_TAB_NINE_COUNT = 4179; /** * Type of GE offer currently being created * 0 = buy * 1 = sell */ - GE_OFFER_CREATION_TYPE(4397), - GE_OFFER_PRICE_PER_ITEM(4398), + public static final int GE_OFFER_CREATION_TYPE = 4397; + public static final int GE_OFFER_PRICE_PER_ITEM = 4398; /** * The active tab within the quest interface */ - QUEST_TAB(8168), + public static final int QUEST_TAB = 8168; /** * Explorer ring */ - EXPLORER_RING_ALCHTYPE(5398), - EXPLORER_RING_TELEPORTS(4552), - EXPLORER_RING_ALCHS(4554), - EXPLORER_RING_RUNENERGY(4553), + public static final int EXPLORER_RING_ALCHTYPE = 5398; + public static final int EXPLORER_RING_TELEPORTS = 4552; + public static final int EXPLORER_RING_ALCHS = 4554; + public static final int EXPLORER_RING_RUNENERGY = 4553; - WINTERTODT_TIMER(7980), + public static final int WINTERTODT_TIMER = 7980; /** * League relics */ - LEAGUE_RELIC_1(10049), - LEAGUE_RELIC_2(10050), - LEAGUE_RELIC_3(10051), - LEAGUE_RELIC_4(10052), - LEAGUE_RELIC_5(10053), - LEAGUE_RELIC_6(11696), + public static final int LEAGUE_RELIC_1 = 10049; + public static final int LEAGUE_RELIC_2 = 10050; + public static final int LEAGUE_RELIC_3 = 10051; + public static final int LEAGUE_RELIC_4 = 10052; + public static final int LEAGUE_RELIC_5 = 10053; + public static final int LEAGUE_RELIC_6 = 11696; /** * Muted volume restore values */ - MUTED_MUSIC_VOLUME(9666), - MUTED_SOUND_EFFECT_VOLUME(9674), - MUTED_AREA_EFFECT_VOLUME(9675), + public static final int MUTED_MUSIC_VOLUME = 9666; + public static final int MUTED_SOUND_EFFECT_VOLUME = 9674; + public static final int MUTED_AREA_EFFECT_VOLUME = 9675; /** * Parasite infection status during nightmare of ashihama bossfight - * + *

* 0 = not infected * 1 = infected - * */ - PARASITE(10151), + public static final int PARASITE = 10151; /** * Whether the vanilla wiki entity lookup is displayed under the minimap - * + *

* 0 = Enabled * 1 = Disabled - * */ - WIKI_ENTITY_LOOKUP(10113), + public static final int WIKI_ENTITY_LOOKUP = 10113; /** * Whether the Special Attack orb is disabled due to being in a PvP area - * - * 0 = Enabled (player is not in PvP) - * 1 = Disabled (player in in PvP) + *

+ * 0 = Enabled =player is not in PvP) + * 1 = Disabled =player in in PvP) * * @see The OSRS Wiki's Minimap page */ - PVP_SPEC_ORB(8121), + public static final int PVP_SPEC_ORB = 8121; /** * Collection Log notification settings whenever a new item is added - * + *

* 0 = no notification * 1 = chat notification only * 2 = popup notification only * 3 = chat and popup */ - COLLECTION_LOG_NOTIFICATION(11959), + public static final int COLLECTION_LOG_NOTIFICATION = 11959; /** * Combat Achievements popup settings whenever a new task is completed - * + *

* 0 = popup notification enabled * 1 = popup notification disabled */ - COMBAT_ACHIEVEMENTS_POPUP(12455), + public static final int COMBAT_ACHIEVEMENTS_POPUP = 12455; /** * Show boss health overlay setting * 0 = on * 1 = off */ - BOSS_HEALTH_OVERLAY(12389), + public static final int BOSS_HEALTH_OVERLAY = 12389; /** * Whether the PVP kill-death stats widget should be drawn while in the wilderness or in PVP worlds. - * + *

* 0 = Disabled * 1 = Enabled */ - SHOW_PVP_KDR_STATS(4143), - ; - - /** - * The raw varbit ID. - */ - private final int id; + public static final int SHOW_PVP_KDR_STATS = 4143; } diff --git a/runelite-api/src/main/java/net/runelite/api/annotations/Varbit.java b/runelite-api/src/main/java/net/runelite/api/annotations/Varbit.java new file mode 100644 index 0000000000..a348f7af57 --- /dev/null +++ b/runelite-api/src/main/java/net/runelite/api/annotations/Varbit.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2022, 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.api.annotations; + +import java.lang.annotation.Documented; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import net.runelite.api.Varbits; +import org.intellij.lang.annotations.MagicConstant; + +@MagicConstant(valuesFromClass = Varbits.class) +@Documented +@Retention(RetentionPolicy.SOURCE) +public @interface Varbit +{ +} diff --git a/runelite-client/src/main/java/net/runelite/client/ClientSessionManager.java b/runelite-client/src/main/java/net/runelite/client/ClientSessionManager.java index 4f3ef00b79..572b3f3142 100644 --- a/runelite-client/src/main/java/net/runelite/client/ClientSessionManager.java +++ b/runelite-client/src/main/java/net/runelite/client/ClientSessionManager.java @@ -62,15 +62,18 @@ public class ClientSessionManager public void start() { - try + executorService.execute(() -> { - sessionId = sessionClient.open(); - log.debug("Opened session {}", sessionId); - } - catch (IOException ex) - { - log.warn("error opening session", ex); - } + try + { + sessionId = sessionClient.open(); + log.debug("Opened session {}", sessionId); + } + catch (IOException ex) + { + log.warn("error opening session", ex); + } + }); scheduledFuture = executorService.scheduleWithFixedDelay(RunnableExceptionLogger.wrap(this::ping), 1, 10, TimeUnit.MINUTES); } diff --git a/runelite-client/src/main/java/net/runelite/client/chat/ChatMessageManager.java b/runelite-client/src/main/java/net/runelite/client/chat/ChatMessageManager.java index c212b8fee5..341ae0e047 100644 --- a/runelite-client/src/main/java/net/runelite/client/chat/ChatMessageManager.java +++ b/runelite-client/src/main/java/net/runelite/client/chat/ChatMessageManager.java @@ -106,7 +106,7 @@ public class ChatMessageManager final String channel = stringStack[size - 4]; final ChatMessageType chatMessageType = messageNode.getType(); - final boolean isChatboxTransparent = client.isResized() && client.getVar(Varbits.TRANSPARENT_CHATBOX) == 1; + final boolean isChatboxTransparent = client.isResized() && client.getVarbitValue(Varbits.TRANSPARENT_CHATBOX) == 1; Color usernameColor = null; Color channelColor = null; @@ -217,7 +217,7 @@ public class ChatMessageManager return; } - boolean isChatboxTransparent = client.isResized() && client.getVar(Varbits.TRANSPARENT_CHATBOX) == 1; + boolean isChatboxTransparent = client.isResized() && client.getVarbitValue(Varbits.TRANSPARENT_CHATBOX) == 1; Color usernameColor = isChatboxTransparent ? chatColorConfig.transparentPrivateUsernames() : chatColorConfig.opaquePrivateUsernames(); if (usernameColor == null) { @@ -842,7 +842,7 @@ public class ChatMessageManager @VisibleForTesting String formatRuneLiteMessage(String runeLiteFormatMessage, ChatMessageType type, boolean pmbox) { - final boolean transparentChatbox = client.getVar(Varbits.TRANSPARENT_CHATBOX) != 0; + final boolean transparentChatbox = client.getVarbitValue(Varbits.TRANSPARENT_CHATBOX) != 0; final boolean transparent = client.isResized() && transparentChatbox; final Collection chatColors = colorCache.get(type); for (ChatColor chatColor : chatColors) diff --git a/runelite-client/src/main/java/net/runelite/client/hiscore/HiscoreResult.java b/runelite-client/src/main/java/net/runelite/client/hiscore/HiscoreResult.java index bfc6d46b6e..86cb2db8c4 100644 --- a/runelite-client/src/main/java/net/runelite/client/hiscore/HiscoreResult.java +++ b/runelite-client/src/main/java/net/runelite/client/hiscore/HiscoreResult.java @@ -66,6 +66,7 @@ public class HiscoreResult private Skill clueScrollMaster; private Skill lastManStanding; private Skill soulWarsZeal; + private Skill riftsClosed; private Skill abyssalSire; private Skill alchemicalHydra; private Skill barrowsChests; @@ -191,6 +192,8 @@ public class HiscoreResult return lastManStanding; case SOUL_WARS_ZEAL: return soulWarsZeal; + case RIFTS_CLOSED: + return riftsClosed; case ABYSSAL_SIRE: return abyssalSire; case ALCHEMICAL_HYDRA: diff --git a/runelite-client/src/main/java/net/runelite/client/hiscore/HiscoreResultBuilder.java b/runelite-client/src/main/java/net/runelite/client/hiscore/HiscoreResultBuilder.java index e5a7ec20eb..0eb88c8f54 100644 --- a/runelite-client/src/main/java/net/runelite/client/hiscore/HiscoreResultBuilder.java +++ b/runelite-client/src/main/java/net/runelite/client/hiscore/HiscoreResultBuilder.java @@ -85,6 +85,10 @@ class HiscoreResultBuilder hiscoreResult.setClueScrollMaster(skills.get(index++)); hiscoreResult.setLastManStanding(skills.get(index++)); hiscoreResult.setSoulWarsZeal(skills.get(index++)); + if (skills.size() > 84) + { + hiscoreResult.setRiftsClosed(skills.get(index++)); + } // seasonal doesn't have boss hiscores if (index < skills.size()) { @@ -115,10 +119,7 @@ class HiscoreResultBuilder hiscoreResult.setKreearra(skills.get(index++)); hiscoreResult.setKrilTsutsaroth(skills.get(index++)); hiscoreResult.setMimic(skills.get(index++)); - if (skills.size() > 83) - { - hiscoreResult.setNex(skills.get(index++)); - } + hiscoreResult.setNex(skills.get(index++)); hiscoreResult.setNightmare(skills.get(index++)); hiscoreResult.setPhosanisNightmare(skills.get(index++)); hiscoreResult.setObor(skills.get(index++)); diff --git a/runelite-client/src/main/java/net/runelite/client/hiscore/HiscoreSkill.java b/runelite-client/src/main/java/net/runelite/client/hiscore/HiscoreSkill.java index 69b0f11b67..48e1f12abb 100644 --- a/runelite-client/src/main/java/net/runelite/client/hiscore/HiscoreSkill.java +++ b/runelite-client/src/main/java/net/runelite/client/hiscore/HiscoreSkill.java @@ -70,6 +70,7 @@ public enum HiscoreSkill CLUE_SCROLL_MASTER("Clue Scrolls (master)", ACTIVITY), LAST_MAN_STANDING("Last Man Standing", ACTIVITY), SOUL_WARS_ZEAL("Soul Wars Zeal", ACTIVITY), + RIFTS_CLOSED("Rifts closed", ACTIVITY), ABYSSAL_SIRE("Abyssal Sire", BOSS), ALCHEMICAL_HYDRA("Alchemical Hydra", BOSS), BARROWS_CHESTS("Barrows Chests", BOSS), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/FavourRequirement.java b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/FavourRequirement.java index ef608a2be5..7e1b74994f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/FavourRequirement.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/achievementdiary/FavourRequirement.java @@ -28,6 +28,7 @@ import lombok.Getter; import lombok.RequiredArgsConstructor; import net.runelite.api.Client; import net.runelite.api.Varbits; +import net.runelite.api.annotations.Varbit; @RequiredArgsConstructor @Getter @@ -37,7 +38,6 @@ public class FavourRequirement implements Requirement * An enumeration of Kourend house favour the player can earn. */ @RequiredArgsConstructor - @Getter public enum Favour { ARCEUUS("Arceuus", Varbits.KOUREND_FAVOR_ARCEUUS), @@ -46,8 +46,10 @@ public class FavourRequirement implements Requirement PISCARILIUS("Piscarilius", Varbits.KOUREND_FAVOR_PISCARILIUS), SHAYZIEN("Shayzien", Varbits.KOUREND_FAVOR_SHAYZIEN); + @Getter private final String name; - private final Varbits varbit; + @Getter(onMethod_ = {@Varbit}) + private final int varbit; } private final Favour house; @@ -62,7 +64,7 @@ public class FavourRequirement implements Requirement @Override public boolean satisfiesRequirement(Client client) { - int realFavour = client.getVar(house.getVarbit()); + int realFavour = client.getVarbitValue(house.getVarbit()); return (realFavour / 10) >= percent; } } \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/attackstyles/AttackStylesPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/attackstyles/AttackStylesPlugin.java index eecaa99843..d268bc16c7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/attackstyles/AttackStylesPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/attackstyles/AttackStylesPlugin.java @@ -105,8 +105,8 @@ public class AttackStylesPlugin extends Plugin { resetWarnings(); attackStyleVarbit = client.getVar(VarPlayer.ATTACK_STYLE); - equippedWeaponTypeVarbit = client.getVar(Varbits.EQUIPPED_WEAPON_TYPE); - castingModeVarbit = client.getVar(Varbits.DEFENSIVE_CASTING_MODE); + equippedWeaponTypeVarbit = client.getVarbitValue(Varbits.EQUIPPED_WEAPON_TYPE); + castingModeVarbit = client.getVarbitValue(Varbits.DEFENSIVE_CASTING_MODE); updateAttackStyle( equippedWeaponTypeVarbit, attackStyleVarbit, @@ -174,8 +174,8 @@ public class AttackStylesPlugin extends Plugin public void onVarbitChanged(VarbitChanged event) { int currentAttackStyleVarbit = client.getVar(VarPlayer.ATTACK_STYLE); - int currentEquippedWeaponTypeVarbit = client.getVar(Varbits.EQUIPPED_WEAPON_TYPE); - int currentCastingModeVarbit = client.getVar(Varbits.DEFENSIVE_CASTING_MODE); + int currentEquippedWeaponTypeVarbit = client.getVarbitValue(Varbits.EQUIPPED_WEAPON_TYPE); + int currentCastingModeVarbit = client.getVarbitValue(Varbits.DEFENSIVE_CASTING_MODE); if (attackStyleVarbit != currentAttackStyleVarbit || equippedWeaponTypeVarbit != currentEquippedWeaponTypeVarbit || castingModeVarbit != currentCastingModeVarbit) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/TabInterface.java b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/TabInterface.java index 7a1954e656..22c2f8a5f3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/TabInterface.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/banktags/tabs/TabInterface.java @@ -788,7 +788,7 @@ public class TabInterface return; } - if (client.getVar(Varbits.BANK_REARRANGE_MODE) == 0) + if (client.getVarbitValue(Varbits.BANK_REARRANGE_MODE) == 0) { tabManager.swap(source.getName(), dest.getName()); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/BarbarianAssaultPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/BarbarianAssaultPlugin.java index 61db1d7cf9..8a60a4f48a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/BarbarianAssaultPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/barbarianassault/BarbarianAssaultPlugin.java @@ -177,7 +177,7 @@ public class BarbarianAssaultPlugin extends Plugin @Subscribe public void onVarbitChanged(VarbitChanged event) { - int inGame = client.getVar(Varbits.IN_GAME_BA); + int inGame = client.getVarbitValue(Varbits.IN_GAME_BA); if (inGameBit != inGame) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsBrotherSlainOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsBrotherSlainOverlay.java index 42aabfcef3..0280aa8e5e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsBrotherSlainOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsBrotherSlainOverlay.java @@ -70,7 +70,7 @@ class BarrowsBrotherSlainOverlay extends OverlayPanel for (BarrowsBrothers brother : BarrowsBrothers.values()) { - final boolean brotherSlain = client.getVar(brother.getKilledVarbit()) > 0; + final boolean brotherSlain = client.getVarbitValue(brother.getKilledVarbit()) > 0; String slain = brotherSlain ? "\u2713" : "\u2717"; panelComponent.getChildren().add(LineComponent.builder() .left(brother.getName()) @@ -109,12 +109,12 @@ class BarrowsBrotherSlainOverlay extends OverlayPanel private int rewardPotential() { // this is from [proc,barrows_overlay_reward] - int brothers = client.getVar(Varbits.BARROWS_KILLED_AHRIM) - + client.getVar(Varbits.BARROWS_KILLED_DHAROK) - + client.getVar(Varbits.BARROWS_KILLED_GUTHAN) - + client.getVar(Varbits.BARROWS_KILLED_KARIL) - + client.getVar(Varbits.BARROWS_KILLED_TORAG) - + client.getVar(Varbits.BARROWS_KILLED_VERAC); - return client.getVar(Varbits.BARROWS_REWARD_POTENTIAL) + brothers * 2; + int brothers = client.getVarbitValue(Varbits.BARROWS_KILLED_AHRIM) + + client.getVarbitValue(Varbits.BARROWS_KILLED_DHAROK) + + client.getVarbitValue(Varbits.BARROWS_KILLED_GUTHAN) + + client.getVarbitValue(Varbits.BARROWS_KILLED_KARIL) + + client.getVarbitValue(Varbits.BARROWS_KILLED_TORAG) + + client.getVarbitValue(Varbits.BARROWS_KILLED_VERAC); + return client.getVarbitValue(Varbits.BARROWS_REWARD_POTENTIAL) + brothers * 2; } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsBrothers.java b/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsBrothers.java index ed180fe59e..74dcdd7984 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsBrothers.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsBrothers.java @@ -27,6 +27,7 @@ package net.runelite.client.plugins.barrows; import lombok.Getter; import lombok.RequiredArgsConstructor; import net.runelite.api.Varbits; +import net.runelite.api.annotations.Varbit; import net.runelite.api.coords.WorldPoint; @RequiredArgsConstructor @@ -42,5 +43,6 @@ enum BarrowsBrothers private final String name; private final WorldPoint location; - private final Varbits killedVarbit; + @Getter(onMethod_ = {@Varbit}) + private final int killedVarbit; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsOverlay.java index b3d4d1c801..15df59b115 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/barrows/BarrowsOverlay.java @@ -92,7 +92,7 @@ class BarrowsOverlay extends Overlay graphics.setColor(Color.black); graphics.drawString(brotherLetter, miniMapLocation.getX() + 1, miniMapLocation.getY() + 1); - if (client.getVar(brother.getKilledVarbit()) > 0) + if (client.getVarbitValue(brother.getKilledVarbit()) > 0) { graphics.setColor(config.deadBrotherLocColor()); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BarsOres.java b/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BarsOres.java index 52a295afd3..796014af66 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BarsOres.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BarsOres.java @@ -24,13 +24,15 @@ */ package net.runelite.client.plugins.blastfurnace; -import com.google.common.collect.ImmutableMap; -import java.util.Map; +import lombok.AllArgsConstructor; import lombok.Getter; import net.runelite.api.ItemID; import net.runelite.api.Varbits; +import net.runelite.api.annotations.Varbit; -public enum BarsOres +@AllArgsConstructor +@Getter +enum BarsOres { COPPER_ORE(Varbits.BLAST_FURNACE_COPPER_ORE, ItemID.COPPER_ORE), TIN_ORE(Varbits.BLAST_FURNACE_TIN_ORE, ItemID.TIN_ORE), @@ -50,33 +52,7 @@ public enum BarsOres SILVER_BAR(Varbits.BLAST_FURNACE_SILVER_BAR, ItemID.SILVER_BAR), GOLD_BAR(Varbits.BLAST_FURNACE_GOLD_BAR, ItemID.GOLD_BAR); - private static final Map VARBIT; - - static - { - ImmutableMap.Builder builder = new ImmutableMap.Builder<>(); - - for (BarsOres s : values()) - { - builder.put(s.getVarbit(), s); - } - - VARBIT = builder.build(); - } - - @Getter - private final Varbits varbit; - @Getter + @Getter(onMethod_ = {@Varbit}) + private final int varbit; private final int itemID; - - BarsOres(Varbits varbit, int itemID) - { - this.varbit = varbit; - this.itemID = itemID; - } - - public static BarsOres getVarbit(Varbits varbit) - { - return VARBIT.get(varbit); - } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BlastFurnaceClickBoxOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BlastFurnaceClickBoxOverlay.java index 01c00107a0..be81fab7b0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BlastFurnaceClickBoxOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BlastFurnaceClickBoxOverlay.java @@ -60,7 +60,7 @@ class BlastFurnaceClickBoxOverlay extends Overlay @Override public Dimension render(Graphics2D graphics) { - int dispenserState = client.getVar(Varbits.BAR_DISPENSER); + int dispenserState = client.getVarbitValue(Varbits.BAR_DISPENSER); if (config.showConveyorBelt() && plugin.getConveyorBelt() != null) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BlastFurnaceCofferOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BlastFurnaceCofferOverlay.java index 1b93f8f640..37d08313e6 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BlastFurnaceCofferOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BlastFurnaceCofferOverlay.java @@ -71,7 +71,7 @@ class BlastFurnaceCofferOverlay extends OverlayPanel if (sack != null) { - final int coffer = client.getVar(BLAST_FURNACE_COFFER); + final int coffer = client.getVarbitValue(BLAST_FURNACE_COFFER); sack.setHidden(true); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BlastFurnaceOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BlastFurnaceOverlay.java index d24c8b4d4a..2f2205c80a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BlastFurnaceOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/blastfurnace/BlastFurnaceOverlay.java @@ -67,7 +67,7 @@ class BlastFurnaceOverlay extends OverlayPanel for (BarsOres varbit : BarsOres.values()) { - int amount = client.getVar(varbit.getVarbit()); + int amount = client.getVarbitValue(varbit.getVarbit()); if (amount == 0) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/blastmine/BlastMineOreCountOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/blastmine/BlastMineOreCountOverlay.java index ef9336bbee..6db7c1cfe2 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/blastmine/BlastMineOreCountOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/blastmine/BlastMineOreCountOverlay.java @@ -73,11 +73,11 @@ class BlastMineOreCountOverlay extends OverlayPanel if (config.showOreOverlay()) { blastMineWidget.setHidden(true); - panelComponent.getChildren().add(new ImageComponent(getImage(ItemID.COAL, client.getVar(Varbits.BLAST_MINE_COAL)))); - panelComponent.getChildren().add(new ImageComponent(getImage(ItemID.GOLD_ORE, client.getVar(Varbits.BLAST_MINE_GOLD)))); - panelComponent.getChildren().add(new ImageComponent(getImage(ItemID.MITHRIL_ORE, client.getVar(Varbits.BLAST_MINE_MITHRIL)))); - panelComponent.getChildren().add(new ImageComponent(getImage(ItemID.ADAMANTITE_ORE, client.getVar(Varbits.BLAST_MINE_ADAMANTITE)))); - panelComponent.getChildren().add(new ImageComponent(getImage(ItemID.RUNITE_ORE, client.getVar(Varbits.BLAST_MINE_RUNITE)))); + panelComponent.getChildren().add(new ImageComponent(getImage(ItemID.COAL, client.getVarbitValue(Varbits.BLAST_MINE_COAL)))); + panelComponent.getChildren().add(new ImageComponent(getImage(ItemID.GOLD_ORE, client.getVarbitValue(Varbits.BLAST_MINE_GOLD)))); + panelComponent.getChildren().add(new ImageComponent(getImage(ItemID.MITHRIL_ORE, client.getVarbitValue(Varbits.BLAST_MINE_MITHRIL)))); + panelComponent.getChildren().add(new ImageComponent(getImage(ItemID.ADAMANTITE_ORE, client.getVarbitValue(Varbits.BLAST_MINE_ADAMANTITE)))); + panelComponent.getChildren().add(new ImageComponent(getImage(ItemID.RUNITE_ORE, client.getVarbitValue(Varbits.BLAST_MINE_RUNITE)))); } else { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatchannel/ChatChannelPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/chatchannel/ChatChannelPlugin.java index 7268e6aaf8..32dd1709d9 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chatchannel/ChatChannelPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chatchannel/ChatChannelPlugin.java @@ -406,7 +406,7 @@ public class ChatChannelPlugin extends Plugin int rankIcon = -1; // Use configured friends chat info colors if set, otherwise default to the jagex text and fc name colors - if (client.isResized() && client.getVar(Varbits.TRANSPARENT_CHATBOX) == 1) + if (client.isResized() && client.getVarbitValue(Varbits.TRANSPARENT_CHATBOX) == 1) { textColor = MoreObjects.firstNonNull(chatColorConfig.transparentFriendsChatInfo(), CHAT_FC_TEXT_TRANSPARENT_BACKGROUND); channelColor = MoreObjects.firstNonNull(chatColorConfig.transparentFriendsChatChannelName(), CHAT_FC_NAME_TRANSPARENT_BACKGROUND); @@ -462,7 +462,7 @@ public class ChatChannelPlugin extends Plugin final Color textColor; // Use configured clan chat info colors if set, otherwise default to the jagex text and fc name colors - if (client.isResized() && client.getVar(Varbits.TRANSPARENT_CHATBOX) == 1) + if (client.isResized() && client.getVarbitValue(Varbits.TRANSPARENT_CHATBOX) == 1) { textColor = MoreObjects.firstNonNull( chatType == MemberActivity.ChatType.CLAN_CHAT ? chatColorConfig.transparentClanChatInfo() : chatColorConfig.transparentClanChatGuestInfo(), diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java index ec92e92d39..5bf8595d08 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chatcommands/ChatCommandsPlugin.java @@ -107,7 +107,7 @@ import org.apache.commons.text.WordUtils; public class ChatCommandsPlugin extends Plugin { private static final Pattern KILLCOUNT_PATTERN = Pattern.compile("Your (?:completion count for |subdued |completed )?(.+?) (?:(?:kill|harvest|lap|completion) )?(?:count )?is: (\\d+)"); - private static final String TEAM_SIZES = "(?:\\d+(?:\\+|-\\d+)? players|Solo)"; + private static final String TEAM_SIZES = "(?\\d+(?:\\+|-\\d+)? players|Solo)"; private static final Pattern RAIDS_PB_PATTERN = Pattern.compile("Congratulations - your raid is complete!
Team size: " + TEAM_SIZES + " Duration: (?[0-9:]+(?:\\.[0-9]+)?) \\(new personal best\\)"); private static final Pattern RAIDS_DURATION_PATTERN = Pattern.compile("Congratulations - your raid is complete!
Team size: " + TEAM_SIZES + " Duration: [0-9:.]+ Personal best: (?[0-9:]+(?:\\.[0-9]+)?)"); private static final Pattern KILL_DURATION_PATTERN = Pattern.compile("(?i)(?:(?:Fight |Lap |Challenge |Corrupted challenge )?duration:|Subdued in|(?[0-9:.]+\\. Personal best: (?:)?(?[0-9:]+(?:\\.[0-9]+)?)"); @@ -115,7 +115,7 @@ public class ChatCommandsPlugin extends Plugin private static final Pattern DUEL_ARENA_WINS_PATTERN = Pattern.compile("You (were defeated|won)! You have(?: now)? won ([\\d,]+|one) duels?"); private static final Pattern DUEL_ARENA_LOSSES_PATTERN = Pattern.compile("You have(?: now)? lost ([\\d,]+|one) duels?"); private static final Pattern ADVENTURE_LOG_TITLE_PATTERN = Pattern.compile("The Exploits of (.+)"); - private static final Pattern ADVENTURE_LOG_PB_PATTERN = Pattern.compile("Fastest (?:kill|run)(?: - \\(Team size: " + TEAM_SIZES + "\\))?: ([0-9:]+(?:\\.[0-9]+)?)"); + private static final Pattern ADVENTURE_LOG_PB_PATTERN = Pattern.compile("Fastest (?:kill|run)(?: - \\(Team size: " + TEAM_SIZES + "\\))?: (?

Rifts closed

"; + content += "

Rank: " + rank + "

"; + if (riftsClosed.getLevel() > -1) + { + content += "

Rifts: " + QuantityFormatter.formatNumber(riftsClosed.getLevel()) + "

"; + } + break; + } case LEAGUE_POINTS: { Skill leaguePoints = result.getLeaguePoints(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/idlenotifier/IdleNotifierPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/idlenotifier/IdleNotifierPlugin.java index 5cae67799b..5cf97febe5 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/idlenotifier/IdleNotifierPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/idlenotifier/IdleNotifierPlugin.java @@ -534,7 +534,7 @@ public class IdleNotifierPlugin extends Plugin { return false; } - if (config.getOxygenThreshold() >= client.getVar(Varbits.OXYGEN_LEVEL) * 0.1) + if (config.getOxygenThreshold() >= client.getVarbitValue(Varbits.OXYGEN_LEVEL) * 0.1) { if (!notifyOxygen) { @@ -557,7 +557,7 @@ public class IdleNotifierPlugin extends Plugin } if (client.getRealSkillLevel(Skill.HITPOINTS) > config.getHitpointsThreshold()) { - if (client.getBoostedSkillLevel(Skill.HITPOINTS) + client.getVar(Varbits.NMZ_ABSORPTION) <= config.getHitpointsThreshold()) + if (client.getBoostedSkillLevel(Skill.HITPOINTS) + client.getVarbitValue(Varbits.NMZ_ABSORPTION) <= config.getHitpointsThreshold()) { if (!notifyHitpoints) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargePlugin.java index 600b493fa8..89ec2dff05 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemcharges/ItemChargePlugin.java @@ -471,7 +471,7 @@ public class ItemChargePlugin extends Plugin @Subscribe private void onVarbitChanged(VarbitChanged event) { - int explorerRingCharge = client.getVar(Varbits.EXPLORER_RING_ALCHS); + int explorerRingCharge = client.getVarbitValue(Varbits.EXPLORER_RING_ALCHS); if (lastExplorerRingCharge != explorerRingCharge) { lastExplorerRingCharge = explorerRingCharge; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/ItemStatPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/ItemStatPlugin.java index 62271135d9..e96ded89b2 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/ItemStatPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/ItemStatPlugin.java @@ -157,7 +157,7 @@ public class ItemStatPlugin extends Plugin if (event.getScriptId() == ScriptID.GE_OFFERS_SETUP_BUILD && config.geStats()) { int currentGeItem = client.getVar(VarPlayer.CURRENT_GE_ITEM); - if (currentGeItem != -1 && client.getVar(Varbits.GE_OFFER_CREATION_TYPE) == 0) + if (currentGeItem != -1 && client.getVarbitValue(Varbits.GE_OFFER_CREATION_TYPE) == 0) { createItemInformation(currentGeItem); } @@ -413,7 +413,7 @@ public class ItemStatPlugin extends Plugin { if (client.isResized()) { - if (client.getVar(Varbits.SIDE_PANELS) == 1) + if (client.getVarbitValue(Varbits.SIDE_PANELS) == 1) { return client.getWidget(WidgetInfo.RESIZABLE_VIEWPORT_BOTTOM_LINE_INVENTORY_CONTAINER); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/special/SpicyStew.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/special/SpicyStew.java index 7eee548751..6533b6ac15 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/special/SpicyStew.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemstats/special/SpicyStew.java @@ -41,10 +41,10 @@ public class SpicyStew implements Effect /* * Spice boosts listed in the colour order of [Spicy stew -> Smell] */ - int redBoost = spiceBoostOf(client.getVar(Varbits.SPICY_STEW_RED_SPICES)); - int yellowBoost = spiceBoostOf(client.getVar(Varbits.SPICY_STEW_YELLOW_SPICES)); - int orangeBoost = spiceBoostOf(client.getVar(Varbits.SPICY_STEW_ORANGE_SPICES)); - int brownBoost = spiceBoostOf(client.getVar(Varbits.SPICY_STEW_BROWN_SPICES)); + int redBoost = spiceBoostOf(client.getVarbitValue(Varbits.SPICY_STEW_RED_SPICES)); + int yellowBoost = spiceBoostOf(client.getVarbitValue(Varbits.SPICY_STEW_YELLOW_SPICES)); + int orangeBoost = spiceBoostOf(client.getVarbitValue(Varbits.SPICY_STEW_ORANGE_SPICES)); + int brownBoost = spiceBoostOf(client.getVarbitValue(Varbits.SPICY_STEW_BROWN_SPICES)); List changes = new ArrayList<>(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/keyremapping/KeyRemappingPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/keyremapping/KeyRemappingPlugin.java index 5e9628f726..4259220768 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/keyremapping/KeyRemappingPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/keyremapping/KeyRemappingPlugin.java @@ -192,7 +192,7 @@ public class KeyRemappingPlugin extends Plugin { if (client.getGameState() == GameState.LOGGED_IN) { - final boolean isChatboxTransparent = client.isResized() && client.getVar(Varbits.TRANSPARENT_CHATBOX) == 1; + final boolean isChatboxTransparent = client.isResized() && client.getVarbitValue(Varbits.TRANSPARENT_CHATBOX) == 1; final Color textColor = isChatboxTransparent ? JagexColors.CHAT_TYPED_TEXT_TRANSPARENT_BACKGROUND : JagexColors.CHAT_TYPED_TEXT_OPAQUE_BACKGROUND; setChatboxWidgetInput(chatboxInput, ColorUtil.wrapWithColorTag(client.getVar(VarClientStr.CHATBOX_TYPED_TEXT) + "*", textColor)); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/kingdomofmiscellania/KingdomPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/kingdomofmiscellania/KingdomPlugin.java index bae9b177bf..957805e2fb 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/kingdomofmiscellania/KingdomPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/kingdomofmiscellania/KingdomPlugin.java @@ -110,8 +110,8 @@ public class KingdomPlugin extends Plugin @Subscribe public void onVarbitChanged(VarbitChanged event) { - final int coffer = client.getVar(Varbits.KINGDOM_COFFER); - final int approval = client.getVar(Varbits.KINGDOM_APPROVAL); + final int coffer = client.getVarbitValue(Varbits.KINGDOM_COFFER); + final int approval = client.getVarbitValue(Varbits.KINGDOM_APPROVAL); if (client.getGameState() == GameState.LOGGED_IN && isThroneOfMiscellaniaCompleted() diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperConfig.java index 64eb37734b..a2876384c0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperConfig.java @@ -149,6 +149,18 @@ public interface MenuEntrySwapperConfig extends Config return true; } + @ConfigItem( + position = -2, + keyName = "npcLeftClickCustomization", + name = "Customizable left-click", + description = "Allows customization of left-clicks on NPCs", + section = npcSection + ) + default boolean npcLeftClickCustomization() + { + return true; + } + @ConfigItem( keyName = "swapAdmire", name = "Admire", @@ -838,15 +850,4 @@ public interface MenuEntrySwapperConfig extends Config { return false; } - - @ConfigItem( - keyName = "swapDepositPool", - name = "Deposit Pool - Only Runes", - description = "Swap Deposit with Deposit Runes on the Deposit Pool in Guardians of the Rift.", - section = objectSection - ) - default boolean swapDepositPool() - { - return false; - } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java index 4ea328b280..4e5ed31422 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPlugin.java @@ -54,6 +54,7 @@ import net.runelite.api.KeyCode; import net.runelite.api.MenuAction; import net.runelite.api.MenuEntry; import net.runelite.api.NPC; +import net.runelite.api.NPCComposition; import net.runelite.api.ObjectComposition; import net.runelite.api.events.ClientTick; import net.runelite.api.events.MenuEntryAdded; @@ -99,6 +100,7 @@ public class MenuEntrySwapperPlugin extends Plugin private static final String SHIFTCLICK_CONFIG_GROUP = "shiftclick"; private static final String ITEM_KEY_PREFIX = "item_"; private static final String OBJECT_KEY_PREFIX = "object_"; + private static final String NPC_KEY_PREFIX = "npc_"; // Shift click private static final WidgetMenuOption FIXED_INVENTORY_TAB_CONFIGURE_SC = new WidgetMenuOption(CONFIGURE, @@ -141,13 +143,13 @@ public class MenuEntrySwapperPlugin extends Plugin MenuAction.ITEM_USE ); - private static final Set NPC_MENU_TYPES = ImmutableSet.of( + private static final List NPC_MENU_TYPES = ImmutableList.of( MenuAction.NPC_FIRST_OPTION, MenuAction.NPC_SECOND_OPTION, MenuAction.NPC_THIRD_OPTION, MenuAction.NPC_FOURTH_OPTION, - MenuAction.NPC_FIFTH_OPTION, - MenuAction.EXAMINE_NPC); + MenuAction.NPC_FIFTH_OPTION + ); private static final List OBJECT_MENU_TYPES = ImmutableList.of( MenuAction.GAME_OBJECT_FIRST_OPTION, @@ -159,7 +161,7 @@ public class MenuEntrySwapperPlugin extends Plugin private static final Set ESSENCE_MINE_NPCS = ImmutableSet.of( "aubury", - "sedridor", + "archmage sedridor", "wizard distentor", "wizard cromperty", "brimstail" @@ -440,8 +442,6 @@ public class MenuEntrySwapperPlugin extends Plugin swap("climb", "climb-up", () -> (shiftModifier() ? config.swapStairsShiftClick() : config.swapStairsLeftClick()) == MenuEntrySwapperConfig.StairsMode.CLIMB_UP); swap("climb", "climb-down", () -> (shiftModifier() ? config.swapStairsShiftClick() : config.swapStairsLeftClick()) == MenuEntrySwapperConfig.StairsMode.CLIMB_DOWN); - - swap("deposit", "deposit-runes", config::swapDepositPool); } public Swap swap(String option, String swappedOption, Supplier enabled) @@ -543,6 +543,7 @@ public class MenuEntrySwapperPlugin extends Plugin if (!configuringShiftClick && !configuringLeftClick) { configureObjectClick(event); + configureNpcClick(event); return; } @@ -646,16 +647,9 @@ public class MenuEntrySwapperPlugin extends Plugin final ObjectComposition composition = client.getObjectDefinition(entry.getIdentifier()); final String[] actions = composition.getActions(); - final MenuAction currentAction; - Integer swapConfig = getObjectSwapConfig(composition.getId()); - if (swapConfig != null) - { - currentAction = OBJECT_MENU_TYPES.get(swapConfig); - } - else - { - currentAction = defaultAction(composition); - } + final Integer swapConfig = getObjectSwapConfig(composition.getId()); + final MenuAction currentAction = swapConfig != null ? OBJECT_MENU_TYPES.get(swapConfig) : + defaultAction(composition); for (int actionIdx = 0; actionIdx < OBJECT_MENU_TYPES.size(); ++actionIdx) { @@ -704,6 +698,111 @@ public class MenuEntrySwapperPlugin extends Plugin } } + private void configureNpcClick(MenuOpened event) + { + if (!shiftModifier() || !config.npcLeftClickCustomization()) + { + return; + } + + MenuEntry[] entries = event.getMenuEntries(); + for (int idx = entries.length - 1; idx >= 0; --idx) + { + final MenuEntry entry = entries[idx]; + final MenuAction type = entry.getType(); + final int id = entry.getIdentifier(); + + if (type == MenuAction.EXAMINE_NPC) + { + final NPC npc = client.getCachedNPCs()[id]; + final NPCComposition composition = npc.getTransformedComposition(); + final String[] actions = composition.getActions(); + + final Integer swapConfig = getNpcSwapConfig(composition.getId()); + final boolean hasAttack = Arrays.stream(composition.getActions()).anyMatch("Attack"::equalsIgnoreCase); + final MenuAction currentAction = swapConfig != null ? NPC_MENU_TYPES.get(swapConfig) : + // Attackable NPCs always have Attack as the first, last (deprioritized), or when hidden, no, option. + // Due to this the default action would be either Attack or the first non-Attack option, based on + // the game settings. Since it may be valid to swap an option up to override Attack, even when Attack + // is left-click, we cannot assume any default currentAction on attackable NPCs. + // Non-attackable NPCS have a predictable default action which we can prevent a swap to if no swap + // config is set, which just avoids showing a Swap option on a 1-op NPC, which looks odd. + (hasAttack ? null : defaultAction(composition)); + + for (int actionIdx = 0; actionIdx < NPC_MENU_TYPES.size(); ++actionIdx) + { + // Attack can be swapped with the in-game settings, and this becomes very confusing if we try + // to swap Attack and the game also tries to swap it (by deprioritizing), so just use the in-game + // setting. + if (Strings.isNullOrEmpty(actions[actionIdx]) || "Attack".equalsIgnoreCase(actions[actionIdx])) + { + continue; + } + + final int menuIdx = actionIdx; + final MenuAction menuAction = NPC_MENU_TYPES.get(actionIdx); + if (currentAction == menuAction) + { + continue; + } + + if ("Pickpocket".equals(actions[actionIdx]) + || "Knock-Out".equals(actions[actionIdx]) + || "Lure".equals(actions[actionIdx])) + { + // https://secure.runescape.com/m=news/another-message-about-unofficial-clients?oldschool=1 + continue; + } + + client.createMenuEntry(idx) + .setOption("Swap " + actions[actionIdx]) + .setTarget(entry.getTarget()) + .setType(MenuAction.RUNELITE) + .onClick(e -> + { + final String message = new ChatMessageBuilder() + .append("The default left click option for '").append(composition.getName()).append("' ") + .append("has been set to '").append(actions[menuIdx]).append("'.") + .build(); + + chatMessageManager.queue(QueuedMessage.builder() + .type(ChatMessageType.CONSOLE) + .runeLiteFormattedMessage(message) + .build()); + + log.debug("Set npc swap for {} to {}", composition.getId(), menuAction); + + setNpcSwapConfig(composition.getId(), menuIdx); + }); + } + + if (getNpcSwapConfig(composition.getId()) != null) + { + // Reset + client.createMenuEntry(idx) + .setOption("Reset swap") + .setTarget(entry.getTarget()) + .setType(MenuAction.RUNELITE) + .onClick(e -> + { + final String message = new ChatMessageBuilder() + .append("The default left click option for '").append(composition.getName()).append("' ") + .append("has been reset.") + .build(); + + chatMessageManager.queue(QueuedMessage.builder() + .type(ChatMessageType.CONSOLE) + .runeLiteFormattedMessage(message) + .build()); + + log.debug("Unset npc swap for {}", composition.getId()); + unsetNpcSwapConfig(composition.getId()); + }); + } + } + } + } + @Subscribe public void onMenuEntryAdded(MenuEntryAdded menuEntryAdded) { @@ -860,6 +959,33 @@ public class MenuEntrySwapperPlugin extends Plugin } } + if (NPC_MENU_TYPES.contains(menuAction)) + { + final NPC npc = client.getCachedNPCs()[eventId]; + final NPCComposition composition = npc.getTransformedComposition(); + + Integer customOption = getNpcSwapConfig(composition.getId()); + if (customOption != null) + { + MenuAction swapAction = NPC_MENU_TYPES.get(customOption); + if (swapAction == menuAction) + { + // Advance to the top-most op for this NPC. Normally menuEntries.length - 1 is examine, and swapping + // with that works due to it being sorted later, but if other plugins like NPC indicators add additional + // menus before examine that are also >1000, like RUNELITE menus, that would result in the >1000 menus being + // reordered relative to each other. + int i = index; + while (i < menuEntries.length - 1 && NPC_MENU_TYPES.contains(menuEntries[i + 1].getType())) + { + ++i; + } + + swap(optionIndexes, menuEntries, index, i); + return; + } + } + } + // Built-in swaps Collection swaps = this.swaps.get(option); for (Swap swap : swaps) @@ -979,6 +1105,11 @@ public class MenuEntrySwapperPlugin extends Plugin private void swap(ArrayListMultimap optionIndexes, MenuEntry[] entries, int index1, int index2) { + if (index1 == index2) + { + return; + } + MenuEntry entry1 = entries[index1], entry2 = entries[index2]; @@ -1112,4 +1243,38 @@ public class MenuEntrySwapperPlugin extends Plugin } return null; } + + private Integer getNpcSwapConfig(int npcId) + { + String config = configManager.getConfiguration(MenuEntrySwapperConfig.GROUP, NPC_KEY_PREFIX + npcId); + if (config == null || config.isEmpty()) + { + return null; + } + + return Integer.parseInt(config); + } + + private void setNpcSwapConfig(int npcId, int index) + { + configManager.setConfiguration(MenuEntrySwapperConfig.GROUP, NPC_KEY_PREFIX + npcId, index); + } + + private void unsetNpcSwapConfig(int npcId) + { + configManager.unsetConfiguration(MenuEntrySwapperConfig.GROUP, NPC_KEY_PREFIX + npcId); + } + + private static MenuAction defaultAction(NPCComposition composition) + { + String[] actions = composition.getActions(); + for (int i = 0; i < NPC_MENU_TYPES.size(); ++i) + { + if (!Strings.isNullOrEmpty(actions[i]) && !actions[i].equalsIgnoreCase("Attack")) + { + return NPC_MENU_TYPES.get(i); + } + } + return null; + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodePlugin.java index ffdb03717e..a40ba17880 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodePlugin.java @@ -490,8 +490,8 @@ public class MotherlodePlugin extends Plugin private void refreshSackValues() { - curSackSize = client.getVar(Varbits.SACK_NUMBER); - boolean sackUpgraded = client.getVar(Varbits.SACK_UPGRADED) == 1; + curSackSize = client.getVarbitValue(Varbits.SACK_NUMBER); + boolean sackUpgraded = client.getVarbitValue(Varbits.SACK_UPGRADED) == 1; maxSackSize = sackUpgraded ? SACK_LARGE_SIZE : SACK_SIZE; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodeSackOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodeSackOverlay.java index c69f09f6fe..3d7f91471a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodeSackOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/motherlode/MotherlodeSackOverlay.java @@ -85,7 +85,7 @@ class MotherlodeSackOverlay extends OverlayPanel panelComponent.getChildren().add(LineComponent.builder() .left("Pay-dirt in sack:") - .right(String.valueOf(client.getVar(Varbits.SACK_NUMBER))) + .right(String.valueOf(client.getVarbitValue(Varbits.SACK_NUMBER))) .build()); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/mta/MTAInventoryOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/mta/MTAItemOverlay.java similarity index 75% rename from runelite-client/src/main/java/net/runelite/client/plugins/mta/MTAInventoryOverlay.java rename to runelite-client/src/main/java/net/runelite/client/plugins/mta/MTAItemOverlay.java index 590b0ff65e..f20bf8ad64 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/mta/MTAInventoryOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/mta/MTAItemOverlay.java @@ -24,38 +24,31 @@ */ package net.runelite.client.plugins.mta; -import java.awt.Dimension; import java.awt.Graphics2D; import javax.inject.Inject; -import net.runelite.client.ui.FontManager; -import net.runelite.client.ui.overlay.Overlay; -import net.runelite.client.ui.overlay.OverlayLayer; -import net.runelite.client.ui.overlay.OverlayPosition; +import net.runelite.api.widgets.WidgetItem; +import net.runelite.client.ui.overlay.WidgetItemOverlay; -public class MTAInventoryOverlay extends Overlay +class MTAItemOverlay extends WidgetItemOverlay { private final MTAPlugin plugin; @Inject - public MTAInventoryOverlay(MTAPlugin plugin) + public MTAItemOverlay(MTAPlugin plugin) { this.plugin = plugin; - setPosition(OverlayPosition.DYNAMIC); - setLayer(OverlayLayer.ABOVE_WIDGETS); + showOnInventory(); } @Override - public Dimension render(Graphics2D graphics) + public void renderItemOverlay(Graphics2D graphics, int itemId, WidgetItem widgetItem) { for (MTARoom room : plugin.getRooms()) { if (room.inside()) { - graphics.setFont(FontManager.getRunescapeBoldFont()); - room.over(graphics); + room.renderItemOverlay(graphics, itemId, widgetItem); } } - - return null; } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/mta/MTAPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/mta/MTAPlugin.java index 3ed1da90dc..07e7882b07 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/mta/MTAPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/mta/MTAPlugin.java @@ -41,7 +41,8 @@ import net.runelite.client.ui.overlay.OverlayManager; @PluginDescriptor( name = "Mage Training Arena", description = "Show helpful information for the Mage Training Arena minigame", - tags = {"mta", "magic", "minigame", "overlay"} + tags = {"mta", "magic", "minigame", "overlay"}, + enabledByDefault = false ) public class MTAPlugin extends Plugin { @@ -62,7 +63,7 @@ public class MTAPlugin extends Plugin @Inject private MTASceneOverlay sceneOverlay; @Inject - private MTAInventoryOverlay inventoryOverlay; + private MTAItemOverlay itemOverlay; @Getter(AccessLevel.PROTECTED) private MTARoom[] rooms; @@ -77,7 +78,7 @@ public class MTAPlugin extends Plugin public void startUp() { overlayManager.add(sceneOverlay); - overlayManager.add(inventoryOverlay); + overlayManager.add(itemOverlay); this.rooms = new MTARoom[]{alchemyRoom, graveyardRoom, telekineticRoom, enchantmentRoom}; @@ -91,7 +92,7 @@ public class MTAPlugin extends Plugin public void shutDown() { overlayManager.remove(sceneOverlay); - overlayManager.remove(inventoryOverlay); + overlayManager.remove(itemOverlay); for (MTARoom room : rooms) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/mta/MTARoom.java b/runelite-client/src/main/java/net/runelite/client/plugins/mta/MTARoom.java index a77f8170d8..a4433cf397 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/mta/MTARoom.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/mta/MTARoom.java @@ -28,6 +28,7 @@ import java.awt.Graphics2D; import javax.inject.Inject; import lombok.AccessLevel; import lombok.Getter; +import net.runelite.api.widgets.WidgetItem; public abstract class MTARoom { @@ -46,7 +47,7 @@ public abstract class MTARoom { } - public void over(Graphics2D graphics2D) + public void renderItemOverlay(Graphics2D graphics, int itemId, WidgetItem widgetItem) { } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/mta/alchemy/AlchemyRoom.java b/runelite-client/src/main/java/net/runelite/client/plugins/mta/alchemy/AlchemyRoom.java index ef03367b0a..f3f1c3735a 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/mta/alchemy/AlchemyRoom.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/mta/alchemy/AlchemyRoom.java @@ -63,7 +63,6 @@ import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameTick; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetID; -import net.runelite.api.widgets.WidgetInfo; import net.runelite.api.widgets.WidgetItem; import net.runelite.client.eventbus.Subscribe; import net.runelite.client.game.ItemManager; @@ -448,28 +447,15 @@ public class AlchemyRoom extends MTARoom @Override - public void over(Graphics2D graphics) + public void renderItemOverlay(Graphics2D graphics, int itemId, WidgetItem widgetItem) { - if (!inside() || !config.alchemy() || best == null) + assert inside(); + if (best == null || best.getId() != itemId || !config.alchemy()) { return; } - Widget inventory = client.getWidget(WidgetInfo.INVENTORY); - if (inventory.isHidden()) - { - return; - } - - for (WidgetItem item : inventory.getWidgetItems()) - { - if (item.getId() != best.getId()) - { - continue; - } - - drawItem(graphics, item, Color.GREEN); - } + drawItem(graphics, widgetItem, Color.GREEN); } private void drawItem(Graphics2D graphics, WidgetItem item, Color border) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/music/MusicPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/music/MusicPlugin.java index f116825347..5e02dedc17 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/music/MusicPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/music/MusicPlugin.java @@ -59,6 +59,7 @@ import net.runelite.api.StructID; import net.runelite.api.VarClientInt; import net.runelite.api.VarPlayer; import net.runelite.api.Varbits; +import net.runelite.api.annotations.Varbit; import net.runelite.api.events.AreaSoundEffectPlayed; import net.runelite.api.events.BeforeRender; import net.runelite.api.events.ClientTick; @@ -783,7 +784,8 @@ public class MusicPlugin extends Plugin @Getter private final String name; private final VarPlayer var; - private final Varbits mutedVar; + @Varbit + private final int mutedVarbitId; private final IntSupplier getter; private final Consumer setter; private final IntConsumer volumeChanger; @@ -797,14 +799,14 @@ public class MusicPlugin extends Plugin private Slider windowSlider; Channel(String name, - VarPlayer var, Varbits mutedVar, + VarPlayer var, @Varbit int mutedVarbitId, IntSupplier getter, Consumer setter, IntConsumer volumeChanger, int max, WidgetInfo sideRoot) { this.name = name; this.var = var; - this.mutedVar = mutedVar; + this.mutedVarbitId = mutedVarbitId; this.getter = getter; this.setter = setter; this.volumeChanger = volumeChanger; @@ -824,7 +826,7 @@ public class MusicPlugin extends Plugin int raw = client.getVar(var); if (raw == 0) { - raw = -client.getVar(mutedVar); + raw = -client.getVarbitValue(mutedVarbitId); } value = raw * this.max / 100; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/nightmarezone/NightmareZoneOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/nightmarezone/NightmareZoneOverlay.java index 4ad21005b2..3d62afe194 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/nightmarezone/NightmareZoneOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/nightmarezone/NightmareZoneOverlay.java @@ -93,7 +93,7 @@ class NightmareZoneOverlay extends OverlayPanel renderAbsorptionCounter(); - final int currentPoints = client.getVar(Varbits.NMZ_POINTS); + final int currentPoints = client.getVarbitValue(Varbits.NMZ_POINTS); final int totalPoints = currentPoints + client.getVar(VarPlayer.NMZ_REWARD_POINTS); panelComponent.getChildren().add(LineComponent.builder() @@ -114,7 +114,7 @@ class NightmareZoneOverlay extends OverlayPanel private void renderAbsorptionCounter() { - int absorptionPoints = client.getVar(Varbits.NMZ_ABSORPTION); + int absorptionPoints = client.getVarbitValue(Varbits.NMZ_ABSORPTION); if (absorptionPoints == 0) { if (absorptionCounter != null) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/nightmarezone/NightmareZonePlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/nightmarezone/NightmareZonePlugin.java index f95e2ab8a6..6e2e361f12 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/nightmarezone/NightmareZonePlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/nightmarezone/NightmareZonePlugin.java @@ -244,7 +244,7 @@ public class NightmareZonePlugin extends Plugin private void checkAbsorption() { - int absorptionPoints = client.getVar(Varbits.NMZ_ABSORPTION); + int absorptionPoints = client.getVarbitValue(Varbits.NMZ_ABSORPTION); if (!absorptionNotificationSend) { @@ -266,7 +266,7 @@ public class NightmareZonePlugin extends Plugin private int calculatePointsPerHour() { Instant now = Instant.now(); - final int currentPoints = client.getVar(Varbits.NMZ_POINTS); + final int currentPoints = client.getVarbitValue(Varbits.NMZ_POINTS); if (nmzSessionStartTime == null) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoOverlay.java index 48989d2d29..7735a053cf 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/opponentinfo/OpponentInfoOverlay.java @@ -226,7 +226,7 @@ class OpponentInfoOverlay extends OverlayPanel */ private boolean hasHpHud(Actor opponent) { - boolean settingEnabled = client.getVar(Varbits.BOSS_HEALTH_OVERLAY) == 0; + boolean settingEnabled = client.getVarbitValue(Varbits.BOSS_HEALTH_OVERLAY) == 0; if (settingEnabled && opponent instanceof NPC) { int opponentId = client.getVar(VarPlayer.HP_HUD_NPC_ID); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/pyramidplunder/PyramidPlunderOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/pyramidplunder/PyramidPlunderOverlay.java index 6f11cde829..92bda8bf40 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/pyramidplunder/PyramidPlunderOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/pyramidplunder/PyramidPlunderOverlay.java @@ -85,7 +85,7 @@ class PyramidPlunderOverlay extends Overlay LocalPoint playerLocation = client.getLocalPlayer().getLocalLocation(); // Highlight convex hulls of urns, chests, and sarcophagus - int currentFloor = client.getVar(Varbits.PYRAMID_PLUNDER_ROOM); + int currentFloor = client.getVarbitValue(Varbits.PYRAMID_PLUNDER_ROOM); for (GameObject object : plugin.getObjectsToHighlight()) { if (config.highlightUrnsFloor() > currentFloor && URN_IDS.contains(object.getId()) @@ -127,7 +127,7 @@ class PyramidPlunderOverlay extends Overlay if (SPEARTRAP_ID == object.getId()) { // this varbit is set to 1 when you enter a room and 0 once you get passed the spike traps - if (client.getVar(Varbits.PYRAMID_PLUNDER_ROOM_LOCATION) != 1) + if (client.getVarbitValue(Varbits.PYRAMID_PLUNDER_ROOM_LOCATION) != 1) { return; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/pyramidplunder/PyramidPlunderPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/pyramidplunder/PyramidPlunderPlugin.java index ef8c04e481..97b3490d28 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/pyramidplunder/PyramidPlunderPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/pyramidplunder/PyramidPlunderPlugin.java @@ -171,7 +171,7 @@ public class PyramidPlunderPlugin extends Plugin { if (timer == null) { - int ppTimer = client.getVar(Varbits.PYRAMID_PLUNDER_TIMER); + int ppTimer = client.getVarbitValue(Varbits.PYRAMID_PLUNDER_TIMER); Duration remaining = PYRAMID_PLUNDER_DURATION.minus(ppTimer, RSTimeUnit.GAME_TICKS); timer = new PyramidPlunderTimer(remaining, itemManager.getImage(PHARAOHS_SCEPTRE), this, config, client); @@ -217,6 +217,6 @@ public class PyramidPlunderPlugin extends Plugin { return client.getLocalPlayer() != null && PYRAMID_PLUNDER_REGION == client.getLocalPlayer().getWorldLocation().getRegionID() - && client.getVar(Varbits.PYRAMID_PLUNDER_TIMER) > 0; + && client.getVarbitValue(Varbits.PYRAMID_PLUNDER_TIMER) > 0; } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/pyramidplunder/PyramidPlunderTimer.java b/runelite-client/src/main/java/net/runelite/client/plugins/pyramidplunder/PyramidPlunderTimer.java index b1b9e35493..2e8118be6e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/pyramidplunder/PyramidPlunderTimer.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/pyramidplunder/PyramidPlunderTimer.java @@ -61,8 +61,8 @@ class PyramidPlunderTimer extends Timer @Override public String getTooltip() { - int floor = client.getVar(Varbits.PYRAMID_PLUNDER_ROOM); - int thievingLevel = client.getVar(Varbits.PYRAMID_PLUNDER_THIEVING_LEVEL); + int floor = client.getVarbitValue(Varbits.PYRAMID_PLUNDER_ROOM); + int thievingLevel = client.getVarbitValue(Varbits.PYRAMID_PLUNDER_THIEVING_LEVEL); return String.format("Time remaining. Floor: %d. Thieving level: %d", floor, thievingLevel); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/questlist/QuestListPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/questlist/QuestListPlugin.java index 49bc77d81c..fa480da2db 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/questlist/QuestListPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/questlist/QuestListPlugin.java @@ -166,7 +166,7 @@ public class QuestListPlugin extends Plugin private boolean isOnQuestTab() { - return client.getVar(Varbits.QUEST_TAB) == 0 && client.getVar(VarClientInt.INVENTORY_TAB) == 2; + return client.getVarbitValue(Varbits.QUEST_TAB) == 0 && client.getVar(VarClientInt.INVENTORY_TAB) == 2; } private boolean isChatboxOpen() diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsOverlay.java index 7b750f1c63..4a7031a068 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsOverlay.java @@ -206,7 +206,7 @@ class RaidsOverlay extends OverlayPanel if (plugin.isInRaidChambers()) { // If the raid has started - if (client.getVar(Varbits.RAID_STATE) > 0) + if (client.getVarbitValue(Varbits.RAID_STATE) > 0) { if (client.getPlane() == OLM_PLANE) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java index dd1b96bd3f..382828dfcb 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/raids/RaidsPlugin.java @@ -264,7 +264,7 @@ public class RaidsPlugin extends Plugin public void onVarbitChanged(VarbitChanged event) { int tempPartyID = client.getVar(VarPlayer.IN_RAID_PARTY); - boolean tempInRaid = client.getVar(Varbits.IN_RAID) == 1; + boolean tempInRaid = client.getVarbitValue(Varbits.IN_RAID) == 1; // if the player's party state has changed if (tempPartyID != raidPartyID) @@ -321,8 +321,8 @@ public class RaidsPlugin extends Plugin if (config.pointsMessage()) { - int totalPoints = client.getVar(Varbits.TOTAL_POINTS); - int personalPoints = client.getVar(Varbits.PERSONAL_POINTS); + int totalPoints = client.getVarbitValue(Varbits.TOTAL_POINTS); + int personalPoints = client.getVarbitValue(Varbits.PERSONAL_POINTS); double percentage = personalPoints / (totalPoints / 100.0); @@ -425,7 +425,7 @@ public class RaidsPlugin extends Plugin return; } - inRaidChambers = client.getVar(Varbits.IN_RAID) == 1; + inRaidChambers = client.getVarbitValue(Varbits.IN_RAID) == 1; if (!inRaidChambers) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/regenmeter/RegenMeterPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/regenmeter/RegenMeterPlugin.java index 2160148401..a3ddc957b4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/regenmeter/RegenMeterPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/regenmeter/RegenMeterPlugin.java @@ -144,7 +144,7 @@ public class RegenMeterPlugin extends Plugin ticksPerHPRegen /= 2; } - if (client.getVar(Varbits.LEAGUE_RELIC_3) == TRAILBLAZER_LEAGUE_FLUID_STRIKES_RELIC) + if (client.getVarbitValue(Varbits.LEAGUE_RELIC_3) == TRAILBLAZER_LEAGUE_FLUID_STRIKES_RELIC) { ticksPerHPRegen /= 4; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/runenergy/RunEnergyPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/runenergy/RunEnergyPlugin.java index a331eb5efc..c14fd67d99 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/runenergy/RunEnergyPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/runenergy/RunEnergyPlugin.java @@ -215,7 +215,7 @@ public class RunEnergyPlugin extends Plugin final int effectiveWeight = Math.max(client.getWeight(), 0); double lossRate = (Math.min(effectiveWeight, 64) / 100.0) + 0.64; - if (client.getVar(Varbits.RUN_SLOWED_DEPLETION_ACTIVE) != 0) + if (client.getVarbitValue(Varbits.RUN_SLOWED_DEPLETION_ACTIVE) != 0) { lossRate *= 0.3; // Stamina effect reduces energy depletion to 30% } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/runepouch/RunepouchOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/runepouch/RunepouchOverlay.java index 962e47d413..65aef7813b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/runepouch/RunepouchOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/runepouch/RunepouchOverlay.java @@ -33,6 +33,7 @@ import net.runelite.api.Client; import net.runelite.api.ItemID; import net.runelite.api.Point; import net.runelite.api.Varbits; +import net.runelite.api.annotations.Varbit; import net.runelite.api.widgets.WidgetItem; import net.runelite.client.game.ItemManager; import net.runelite.client.game.RunepouchRune; @@ -47,12 +48,10 @@ import net.runelite.client.util.ColorUtil; public class RunepouchOverlay extends WidgetItemOverlay { - private static final Varbits[] AMOUNT_VARBITS = - { + private static final int[] AMOUNT_VARBITS = { Varbits.RUNE_POUCH_AMOUNT1, Varbits.RUNE_POUCH_AMOUNT2, Varbits.RUNE_POUCH_AMOUNT3 }; - private static final Varbits[] RUNE_VARBITS = - { + private static final int[] RUNE_VARBITS = { Varbits.RUNE_POUCH_RUNE1, Varbits.RUNE_POUCH_RUNE2, Varbits.RUNE_POUCH_RUNE3 }; private static final Dimension IMAGE_SIZE = new Dimension(11, 11); @@ -60,16 +59,15 @@ public class RunepouchOverlay extends WidgetItemOverlay private final Client client; private final RunepouchConfig config; private final TooltipManager tooltipManager; + private final ItemManager itemManager; @Inject - private ItemManager itemManager; - - @Inject - RunepouchOverlay(Client client, RunepouchConfig config, TooltipManager tooltipManager) + RunepouchOverlay(Client client, RunepouchConfig config, TooltipManager tooltipManager, ItemManager itemManager) { this.tooltipManager = tooltipManager; this.client = client; this.config = config; + this.itemManager = itemManager; showOnInventory(); showOnBank(); } @@ -91,16 +89,15 @@ public class RunepouchOverlay extends WidgetItemOverlay for (int i = 0; i < AMOUNT_VARBITS.length; i++) { - Varbits amountVarbit = AMOUNT_VARBITS[i]; - - int amount = client.getVar(amountVarbit); + @Varbit int amountVarbit = AMOUNT_VARBITS[i]; + int amount = client.getVarbitValue(amountVarbit); if (amount <= 0) { continue; } - Varbits runeVarbit = RUNE_VARBITS[i]; - int runeId = client.getVar(runeVarbit); + @Varbit int runeVarbit = RUNE_VARBITS[i]; + int runeId = client.getVarbitValue(runeVarbit); RunepouchRune rune = RunepouchRune.getRune(runeId); if (rune == null) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/ScreenshotPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/ScreenshotPlugin.java index f9ecc59d02..365be120f0 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/ScreenshotPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/screenshot/ScreenshotPlugin.java @@ -490,14 +490,14 @@ public class ScreenshotPlugin extends Plugin } } - if (config.screenshotCollectionLogEntries() && chatMessage.startsWith(COLLECTION_LOG_TEXT) && client.getVar(Varbits.COLLECTION_LOG_NOTIFICATION) == 1) + if (config.screenshotCollectionLogEntries() && chatMessage.startsWith(COLLECTION_LOG_TEXT) && client.getVarbitValue(Varbits.COLLECTION_LOG_NOTIFICATION) == 1) { String entry = Text.removeTags(chatMessage).substring(COLLECTION_LOG_TEXT.length()); String fileName = "Collection log (" + entry + ")"; takeScreenshot(fileName, SD_COLLECTION_LOG); } - if (chatMessage.contains("combat task") && config.screenshotCombatAchievements() && client.getVar(Varbits.COMBAT_ACHIEVEMENTS_POPUP) == 1) + if (chatMessage.contains("combat task") && config.screenshotCombatAchievements() && client.getVarbitValue(Varbits.COMBAT_ACHIEVEMENTS_POPUP) == 1) { String fileName = parseCombatAchievementWidget(chatMessage); if (!fileName.isEmpty()) @@ -663,7 +663,7 @@ public class ScreenshotPlugin extends Plugin String fileName = "Collection log (" + entry + ")"; takeScreenshot(fileName, SD_COLLECTION_LOG); } - if (topText.equalsIgnoreCase("Combat Task Completed!") && config.screenshotCombatAchievements() && client.getVar(Varbits.COMBAT_ACHIEVEMENTS_POPUP) == 0) + if (topText.equalsIgnoreCase("Combat Task Completed!") && config.screenshotCombatAchievements() && client.getVarbitValue(Varbits.COMBAT_ACHIEVEMENTS_POPUP) == 0) { String entry = Text.removeTags(bottomText).substring("Task Completed: ".length()); String fileName = "Combat task (" + entry.replaceAll("[:?]", "") + ")"; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java index 6c7b95ebd9..9e15b87626 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerPlugin.java @@ -70,7 +70,6 @@ import net.runelite.api.events.HitsplatApplied; import net.runelite.api.events.NpcDespawned; import net.runelite.api.events.NpcSpawned; import net.runelite.api.events.StatChanged; -import net.runelite.api.vars.SlayerUnlock; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.Notifier; diff --git a/runelite-api/src/main/java/net/runelite/api/vars/SlayerUnlock.java b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerUnlock.java similarity index 90% rename from runelite-api/src/main/java/net/runelite/api/vars/SlayerUnlock.java rename to runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerUnlock.java index 00b087e846..ac97567911 100644 --- a/runelite-api/src/main/java/net/runelite/api/vars/SlayerUnlock.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/slayer/SlayerUnlock.java @@ -22,16 +22,17 @@ * (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.api.vars; +package net.runelite.client.plugins.slayer; import net.runelite.api.Client; import net.runelite.api.VarPlayer; import net.runelite.api.Varbits; +import net.runelite.api.annotations.Varbit; /** * Unlockables in the slayer interface */ -public enum SlayerUnlock +enum SlayerUnlock { // Copied from enum 834 in the cache // enum 854 contains if you can disable the unlock @@ -87,17 +88,19 @@ public enum SlayerUnlock VAMPYRE_EXTEND(49), VAMPYRE_UNLOCK(50); - private Varbits toggleVarbit; + @Varbit + private final int toggleVarbit; SlayerUnlock(int index) { - this(index, null); + assert index == ordinal(); + this.toggleVarbit = -1; } - SlayerUnlock(int index, Varbits toggleVarbit) + SlayerUnlock(int index, @Varbit int varbit) { assert index == ordinal(); - this.toggleVarbit = toggleVarbit; + this.toggleVarbit = varbit; } /** @@ -116,11 +119,11 @@ public enum SlayerUnlock { if (isOwned(client)) { - if (toggleVarbit == null) + if (toggleVarbit == -1) { return true; } - return client.getVar(toggleVarbit) == 0; + return client.getVarbitValue(toggleVarbit) == 0; } return false; } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/statusbars/BarRenderer.java b/runelite-client/src/main/java/net/runelite/client/plugins/statusbars/BarRenderer.java index 84c9c8ab44..96cfbc4cf4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/statusbars/BarRenderer.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/statusbars/BarRenderer.java @@ -41,8 +41,11 @@ class BarRenderer private static final Color OVERHEAL_COLOR = new Color(216, 255, 139, 150); private static final int SKILL_ICON_HEIGHT = 35; private static final int COUNTER_ICON_HEIGHT = 18; - private static final int WIDTH = 20; private static final int BORDER_SIZE = 1; + private static final int MIN_ICON_AND_COUNTER_WIDTH = 16; + static final int DEFAULT_WIDTH = 20; + static final int MIN_WIDTH = 3; + static final int MAX_WIDTH = 40; private final Supplier maxValueSupplier; private final Supplier currentValueSupplier; private final Supplier healSupplier; @@ -67,42 +70,47 @@ class BarRenderer * @param y The location on the client where it will draw the bar on the y axis starting on the bottom side. * @param height The height of the bar. */ - void renderBar(StatusBarsConfig config, Graphics2D graphics, int x, int y, int height) + void renderBar(StatusBarsConfig config, Graphics2D graphics, int x, int y, int width, int height) { final int filledHeight = getBarHeight(maxValue, currentValue, height); final Color fill = colorSupplier.get(); - refreshSkills(); graphics.setColor(BACKGROUND); - graphics.drawRect(x, y, WIDTH - BORDER_SIZE, height - BORDER_SIZE); - graphics.fillRect(x, y, WIDTH, height); + graphics.drawRect(x, y, width - BORDER_SIZE, height - BORDER_SIZE); + graphics.fillRect(x, y, width, height); graphics.setColor(fill); graphics.fillRect(x + BORDER_SIZE, y + BORDER_SIZE + (height - filledHeight), - WIDTH - BORDER_SIZE * 2, + width - BORDER_SIZE * 2, filledHeight - BORDER_SIZE * 2); if (config.enableRestorationBars()) { - renderRestore(graphics, x, y, height); + renderRestore(graphics, x, y, width, height); } if (config.enableSkillIcon() || config.enableCounter()) { - renderIconsAndCounters(config, graphics, x, y); + renderIconsAndCounters(config, graphics, x, y, width); } } - private void renderIconsAndCounters(StatusBarsConfig config, Graphics2D graphics, int x, int y) + private void renderIconsAndCounters(StatusBarsConfig config, Graphics2D graphics, int x, int y, int width) { + // Icons and counters overlap the bar at small widths, so they are not drawn when the bars are too small + if (width < MIN_ICON_AND_COUNTER_WIDTH) + { + return; + } + final boolean skillIconEnabled = config.enableSkillIcon(); if (skillIconEnabled) { final Image icon = iconSupplier.get(); - final int xDraw = x + (WIDTH / 2) - (icon.getWidth(null) / 2); + final int xDraw = x + (width / 2) - (icon.getWidth(null) / 2); graphics.drawImage(icon, xDraw, y, null); } @@ -111,7 +119,7 @@ class BarRenderer graphics.setFont(FontManager.getRunescapeSmallFont()); final String counterText = Integer.toString(currentValue); final int widthOfCounter = graphics.getFontMetrics().stringWidth(counterText); - final int centerText = (WIDTH / 2) - (widthOfCounter / 2); + final int centerText = (width / 2) - (widthOfCounter / 2); final int yOffset = skillIconEnabled ? SKILL_ICON_HEIGHT : COUNTER_ICON_HEIGHT; final TextComponent textComponent = new TextComponent(); @@ -121,7 +129,7 @@ class BarRenderer } } - private void renderRestore(Graphics2D graphics, int x, int y, int height) + private void renderRestore(Graphics2D graphics, int x, int y, int width, int height) { final Color color = healColorSupplier.get(); final int heal = healSupplier.get(); @@ -150,7 +158,7 @@ class BarRenderer graphics.fillRect(x + BORDER_SIZE, fillY, - WIDTH - BORDER_SIZE * 2, + width - BORDER_SIZE * 2, fillHeight); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/statusbars/StatusBarsConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/statusbars/StatusBarsConfig.java index cbce85bab4..eacbb8cd37 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/statusbars/StatusBarsConfig.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/statusbars/StatusBarsConfig.java @@ -27,6 +27,7 @@ package net.runelite.client.plugins.statusbars; import net.runelite.client.config.Config; import net.runelite.client.config.ConfigGroup; import net.runelite.client.config.ConfigItem; +import net.runelite.client.config.Range; import net.runelite.client.config.Units; import net.runelite.client.plugins.statusbars.config.BarMode; @@ -95,4 +96,18 @@ public interface StatusBarsConfig extends Config { return 0; } + + @Range( + min = BarRenderer.MIN_WIDTH, + max = BarRenderer.MAX_WIDTH + ) + @ConfigItem( + keyName = "barWidth", + name = "Bar Width", + description = "The width of the status bars in the modern resizeable layout." + ) + default int barWidth() + { + return BarRenderer.DEFAULT_WIDTH; + } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/statusbars/StatusBarsOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/statusbars/StatusBarsOverlay.java index b08a1d5331..49d2811179 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/statusbars/StatusBarsOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/statusbars/StatusBarsOverlay.java @@ -135,7 +135,7 @@ class StatusBarsOverlay extends Overlay return DISEASE_COLOR; } - if (client.getVar(Varbits.PARASITE) >= 1) + if (client.getVarbitValue(Varbits.PARASITE) >= 1) { return PARASITE_COLOR; } @@ -193,7 +193,7 @@ class StatusBarsOverlay extends Overlay () -> getRestoreValue("Run Energy"), () -> { - if (client.getVar(Varbits.RUN_SLOWED_DEPLETION_ACTIVE) != 0) + if (client.getVarbitValue(Varbits.RUN_SLOWED_DEPLETION_ACTIVE) != 0) { return RUN_STAMINA_COLOR; } @@ -245,18 +245,21 @@ class StatusBarsOverlay extends Overlay final Point offsetLeft = curViewport.getOffsetLeft(); final Point offsetRight = curViewport.getOffsetRight(); final Point location = curWidget.getCanvasLocation(); - final int height, offsetLeftBarX, offsetLeftBarY, offsetRightBarX, offsetRightBarY; + final int width, height, offsetLeftBarX, offsetLeftBarY, offsetRightBarX, offsetRightBarY; if (curViewport == Viewport.RESIZED_BOTTOM) { + width = config.barWidth(); height = RESIZED_BOTTOM_HEIGHT; - offsetLeftBarX = (location.getX() + RESIZED_BOTTOM_OFFSET_X - offsetLeft.getX()); + final int barWidthOffset = width - BarRenderer.DEFAULT_WIDTH; + offsetLeftBarX = (location.getX() + RESIZED_BOTTOM_OFFSET_X - offsetLeft.getX() - 2 * barWidthOffset); offsetLeftBarY = (location.getY() - RESIZED_BOTTOM_OFFSET_Y - offsetLeft.getY()); - offsetRightBarX = (location.getX() + RESIZED_BOTTOM_OFFSET_X - offsetRight.getX()); + offsetRightBarX = (location.getX() + RESIZED_BOTTOM_OFFSET_X - offsetRight.getX() - barWidthOffset); offsetRightBarY = (location.getY() - RESIZED_BOTTOM_OFFSET_Y - offsetRight.getY()); } else { + width = BarRenderer.DEFAULT_WIDTH; height = HEIGHT; offsetLeftBarX = (location.getX() - offsetLeft.getX()); offsetLeftBarY = (location.getY() - offsetLeft.getY()); @@ -271,12 +274,12 @@ class StatusBarsOverlay extends Overlay if (left != null) { - left.renderBar(config, g, offsetLeftBarX, offsetLeftBarY, height); + left.renderBar(config, g, offsetLeftBarX, offsetLeftBarY, width, height); } if (right != null) { - right.renderBar(config, g, offsetRightBarX, offsetRightBarY, height); + right.renderBar(config, g, offsetRightBarX, offsetRightBarY, width, height); } return null; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/statusbars/StatusBarsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/statusbars/StatusBarsPlugin.java index 21e9553b5d..7659b01f20 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/statusbars/StatusBarsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/statusbars/StatusBarsPlugin.java @@ -123,7 +123,7 @@ public class StatusBarsPlugin extends Plugin barsDisplayed = true; } else if ((interacting instanceof NPC && ArrayUtils.contains(((NPC) interacting).getComposition().getActions(), "Attack")) - || (interacting instanceof Player && client.getVar(Varbits.PVP_SPEC_ORB) == 1)) + || (interacting instanceof Player && client.getVarbitValue(Varbits.PVP_SPEC_ORB) == 1)) { lastCombatActionTickCount = client.getTickCount(); barsDisplayed = true; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timers/TimersPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/timers/TimersPlugin.java index 6f9efd63c4..528aeadf6e 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timers/TimersPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timers/TimersPlugin.java @@ -206,13 +206,13 @@ public class TimersPlugin extends Plugin @Subscribe public void onVarbitChanged(VarbitChanged event) { - int raidVarb = client.getVar(Varbits.IN_RAID); - int vengCooldownVarb = client.getVar(Varbits.VENGEANCE_COOLDOWN); - int isVengeancedVarb = client.getVar(Varbits.VENGEANCE_ACTIVE); + int raidVarb = client.getVarbitValue(Varbits.IN_RAID); + int vengCooldownVarb = client.getVarbitValue(Varbits.VENGEANCE_COOLDOWN); + int isVengeancedVarb = client.getVarbitValue(Varbits.VENGEANCE_ACTIVE); int poisonVarp = client.getVar(VarPlayer.POISON); - int pvpVarb = client.getVar(Varbits.PVP_SPEC_ORB); - int corruptionCooldownVarb = client.getVar(Varbits.CORRUPTION_COOLDOWN); - int imbuedHeartCooldownVarb = client.getVar(Varbits.IMBUED_HEART_COOLDOWN); + int pvpVarb = client.getVarbitValue(Varbits.PVP_SPEC_ORB); + int corruptionCooldownVarb = client.getVarbitValue(Varbits.CORRUPTION_COOLDOWN); + int imbuedHeartCooldownVarb = client.getVarbitValue(Varbits.IMBUED_HEART_COOLDOWN); if (lastRaidVarb != raidVarb) { @@ -576,7 +576,7 @@ public class TimersPlugin extends Plugin if (config.showOverload() && message.startsWith("You drink some of your") && message.contains("overload")) { - if (client.getVar(Varbits.IN_RAID) == 1) + if (client.getVarbitValue(Varbits.IN_RAID) == 1) { createGameTimer(OVERLOAD_RAID); } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timestamp/TimestampPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/timestamp/TimestampPlugin.java index d65fe2e2e9..999d3146b7 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timestamp/TimestampPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timestamp/TimestampPlugin.java @@ -128,7 +128,7 @@ public class TimestampPlugin extends Plugin private Color getTimestampColour() { - boolean isChatboxTransparent = client.isResized() && client.getVar(Varbits.TRANSPARENT_CHATBOX) == 1; + boolean isChatboxTransparent = client.isResized() && client.getVarbitValue(Varbits.TRANSPARENT_CHATBOX) == 1; return isChatboxTransparent ? config.transparentTimestamp() : config.opaqueTimestamp(); } diff --git a/runelite-api/src/main/java/net/runelite/api/vars/Autoweed.java b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/Autoweed.java similarity index 95% rename from runelite-api/src/main/java/net/runelite/api/vars/Autoweed.java rename to runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/Autoweed.java index e4da031363..6811825936 100644 --- a/runelite-api/src/main/java/net/runelite/api/vars/Autoweed.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/Autoweed.java @@ -22,12 +22,12 @@ * (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.api.vars; +package net.runelite.client.plugins.timetracking.farming; /** * An enumeration of possible autoweed settings. */ -public enum Autoweed +enum Autoweed { /** * Access to autoweed has not been unlocked. diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingPatch.java b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingPatch.java index 25b29ba01f..835f17e463 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingPatch.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingPatch.java @@ -28,7 +28,7 @@ import lombok.AccessLevel; import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.Setter; -import net.runelite.api.Varbits; +import net.runelite.api.annotations.Varbit; import net.runelite.client.plugins.timetracking.TimeTrackingConfig; @RequiredArgsConstructor( @@ -40,16 +40,17 @@ class FarmingPatch @Setter(AccessLevel.PACKAGE) private FarmingRegion region; private final String name; - private final Varbits varbit; + @Getter(onMethod_ = {@Varbit}) + private final int varbit; private final PatchImplementation implementation; String configKey() { - return region.getRegionID() + "." + varbit.getId(); + return region.getRegionID() + "." + varbit; } String notifyConfigKey() { - return TimeTrackingConfig.NOTIFY + "." + region.getRegionID() + "." + varbit.getId(); + return TimeTrackingConfig.NOTIFY + "." + region.getRegionID() + "." + varbit; } } \ No newline at end of file diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingRegion.java b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingRegion.java index bb149af373..24b74bfe51 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingRegion.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingRegion.java @@ -25,7 +25,6 @@ package net.runelite.client.plugins.timetracking.farming; import lombok.Getter; -import net.runelite.api.Varbits; import net.runelite.api.coords.WorldPoint; @Getter @@ -35,7 +34,6 @@ public class FarmingRegion private final int regionID; private final boolean definite; private final FarmingPatch[] patches; - private final Varbits[] varbits; FarmingRegion(String name, int regionID, boolean definite, FarmingPatch... patches) { @@ -43,12 +41,9 @@ public class FarmingRegion this.regionID = regionID; this.definite = definite; this.patches = patches; - this.varbits = new Varbits[patches.length]; - for (int i = 0; i < patches.length; i++) + for (FarmingPatch p : patches) { - FarmingPatch p = patches[i]; p.setRegion(this); - varbits[i] = p.getVarbit(); } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingTracker.java b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingTracker.java index 965ad11b59..d3f2222b04 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingTracker.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timetracking/farming/FarmingTracker.java @@ -42,7 +42,6 @@ import net.runelite.api.GameState; import net.runelite.api.Varbits; import net.runelite.api.WidgetNode; import net.runelite.api.coords.WorldPoint; -import net.runelite.api.vars.Autoweed; import net.runelite.api.widgets.WidgetModalMode; import net.runelite.client.Notifier; import net.runelite.client.config.ConfigManager; @@ -111,7 +110,7 @@ public class FarmingTracker } { - String autoweed = Integer.toString(client.getVar(Varbits.AUTOWEED)); + String autoweed = Integer.toString(client.getVarbitValue(Varbits.AUTOWEED)); if (!autoweed.equals(configManager.getRSProfileConfiguration(TimeTrackingConfig.CONFIG_GROUP, TimeTrackingConfig.AUTOWEED))) { configManager.setRSProfileConfiguration(TimeTrackingConfig.CONFIG_GROUP, TimeTrackingConfig.AUTOWEED, autoweed); @@ -120,7 +119,7 @@ public class FarmingTracker } { - boolean botanist = client.getVar(Varbits.LEAGUE_RELIC_5) == 1; + boolean botanist = client.getVarbitValue(Varbits.LEAGUE_RELIC_5) == 1; if (!Boolean.valueOf(botanist).equals(configManager.getRSProfileConfiguration(TimeTrackingConfig.CONFIG_GROUP, TimeTrackingConfig.BOTANIST, Boolean.class))) { configManager.setRSProfileConfiguration(TimeTrackingConfig.CONFIG_GROUP, TimeTrackingConfig.BOTANIST, botanist); @@ -144,9 +143,9 @@ public class FarmingTracker for (FarmingPatch patch : region.getPatches()) { // Write the config value if it doesn't match what is current, or it is more than 5 minutes old - Varbits varbit = patch.getVarbit(); + int varbit = patch.getVarbit(); String key = patch.configKey(); - String strVarbit = Integer.toString(client.getVar(varbit)); + String strVarbit = Integer.toString(client.getVarbitValue(varbit)); String storedValue = configManager.getRSProfileConfiguration(TimeTrackingConfig.CONFIG_GROUP, key); if (storedValue != null) @@ -173,7 +172,7 @@ public class FarmingTracker else if (!newRegionLoaded && timeSinceModalClose > 1) { PatchState previousPatchState = patch.getImplementation().forVarbitValue(Integer.parseInt(parts[0])); - PatchState currentPatchState = patch.getImplementation().forVarbitValue(client.getVar(varbit)); + PatchState currentPatchState = patch.getImplementation().forVarbitValue(client.getVarbitValue(varbit)); if (previousPatchState == null || currentPatchState == null) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/wiki/WikiPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/wiki/WikiPlugin.java index 9ac225d4ba..c5d6442ab4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/wiki/WikiPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/wiki/WikiPlugin.java @@ -131,7 +131,7 @@ public class WikiPlugin extends Plugin children[0] = null; Widget vanilla = client.getWidget(WidgetInfo.MINIMAP_WIKI_BANNER); - if (vanilla != null && client.getVar(Varbits.WIKI_ENTITY_LOOKUP) == 0) + if (vanilla != null && client.getVarbitValue(Varbits.WIKI_ENTITY_LOOKUP) == 0) { vanilla.setHidden(false); } @@ -157,7 +157,7 @@ public class WikiPlugin extends Plugin return; } - if (client.getVar(Varbits.WIKI_ENTITY_LOOKUP) == 1) // disabled + if (client.getVarbitValue(Varbits.WIKI_ENTITY_LOOKUP) == 1) // disabled { // when the wiki entity lookup option is disabled the banner parent layer, // which is used for var transmit events, is not positioned. This is copied diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/wintertodt/WintertodtPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/wintertodt/WintertodtPlugin.java index bc7d374c60..2a82f5def2 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/wintertodt/WintertodtPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/wintertodt/WintertodtPlugin.java @@ -194,7 +194,7 @@ public class WintertodtPlugin extends Plugin @Subscribe public void onVarbitChanged(VarbitChanged varbitChanged) { - int timerValue = client.getVar(Varbits.WINTERTODT_TIMER); + int timerValue = client.getVarbitValue(Varbits.WINTERTODT_TIMER); if (timerValue != previousTimerValue) { int timeToNotify = config.roundNotification(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPlugin.java index 82d44972e2..15e1b77818 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldhopper/WorldHopperPlugin.java @@ -335,8 +335,8 @@ public class WorldHopperPlugin extends Plugin int old1 = favoriteWorld1; int old2 = favoriteWorld2; - favoriteWorld1 = client.getVar(Varbits.WORLDHOPPER_FAVROITE_1); - favoriteWorld2 = client.getVar(Varbits.WORLDHOPPER_FAVROITE_2); + favoriteWorld1 = client.getVarbitValue(Varbits.WORLDHOPPER_FAVROITE_1); + favoriteWorld2 = client.getVarbitValue(Varbits.WORLDHOPPER_FAVROITE_2); if (old1 != favoriteWorld1 || old2 != favoriteWorld2) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpWorldType.java b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpWorldType.java index 909a7de841..c1aa9d1325 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpWorldType.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpWorldType.java @@ -45,15 +45,15 @@ enum XpWorldType @Override int modifier(Client client) { - if (client.getVar(Varbits.LEAGUE_RELIC_6) != 0) + if (client.getVarbitValue(Varbits.LEAGUE_RELIC_6) != 0) { return 16; } - if (client.getVar(Varbits.LEAGUE_RELIC_4) != 0) + if (client.getVarbitValue(Varbits.LEAGUE_RELIC_4) != 0) { return 12; } - if (client.getVar(Varbits.LEAGUE_RELIC_2) != 0) + if (client.getVarbitValue(Varbits.LEAGUE_RELIC_2) != 0) { return 8; } diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/Overlay.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/Overlay.java index 3886855a53..d50a0b9c49 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/Overlay.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/Overlay.java @@ -24,6 +24,7 @@ */ package net.runelite.client.ui.overlay; +import com.google.common.base.Preconditions; import java.awt.Dimension; import java.awt.Point; import java.awt.Rectangle; @@ -83,11 +84,47 @@ public abstract class Overlay implements LayoutableRenderableEntity return this.getClass().getSimpleName(); } + /** + * Configure to draw this overlay after the given interface is drawn. Except + * in rare circumstances, you probably also want to {@link #setLayer(OverlayLayer)} to + * {@link OverlayLayer#MANUAL} to avoid the overlay being drawn a 2nd time during the + * default {@link OverlayLayer#UNDER_WIDGETS} pass. + * @param interfaceId The interface id + * @see net.runelite.api.widgets.WidgetID + */ protected void drawAfterInterface(int interfaceId) { drawHooks.add(interfaceId << 16 | 0xffff); } + /** + * Configure to draw this overlay after the given layer is drawn. Except + * in rare circumstances, you probably also want to {@link #setLayer(OverlayLayer)} to + * {@link OverlayLayer#MANUAL} to avoid the overlay being drawn a 2nd time during the + * default {@link OverlayLayer#UNDER_WIDGETS} pass. + * + * The layer must be a widget of {@link net.runelite.api.widgets.WidgetType} {@link net.runelite.api.widgets.WidgetType#LAYER} + * @param groupId The widget group id + * @param childId The widget child id + * @see net.runelite.api.widgets.WidgetID + */ + protected void drawAfterLayer(int groupId, int childId) + { + Preconditions.checkArgument(groupId >= 0 && groupId <= 0xffff, "groupId outside of valid range"); + Preconditions.checkArgument(childId >= 0 && childId <= 0xffff, "childId outside of valid range"); + drawHooks.add(groupId << 16 | childId); + } + + /** + * Configure to draw this overlay after the given layer is drawn. Except + * in rare circumstances, you probably also want to {@link #setLayer(OverlayLayer)} to + * {@link OverlayLayer#MANUAL} to avoid the overlay being drawn a 2nd time during the + * default {@link OverlayLayer#UNDER_WIDGETS} pass. + * + * The layer must be a widget of {@link net.runelite.api.widgets.WidgetType} {@link net.runelite.api.widgets.WidgetType#LAYER} + * @param layer The layer + * @see WidgetInfo + */ protected void drawAfterLayer(WidgetInfo layer) { drawHooks.add(layer.getId()); diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java index 7bd2d7cbad..0ff4120c48 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java @@ -886,7 +886,7 @@ public class OverlayRenderer extends MouseAdapter implements KeyListener { if (client.isResized()) { - if (client.getVar(Varbits.SIDE_PANELS) == 1) + if (client.getVarbitValue(Varbits.SIDE_PANELS) == 1) { return client.getWidget(WidgetInfo.RESIZABLE_VIEWPORT_BOTTOM_LINE); } diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/WidgetOverlay.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/WidgetOverlay.java index 0d854ab91d..7a4816a0f8 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/WidgetOverlay.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/WidgetOverlay.java @@ -209,8 +209,8 @@ public class WidgetOverlay extends Overlay { // The xptracker component layer isn't hidden if the counter and process bar are both configured "Off", // it just has its children hidden. - if (client.getVar(Varbits.EXPERIENCE_TRACKER_COUNTER) == 30 // Off - && client.getVar(Varbits.EXPERIENCE_TRACKER_PROGRESS_BAR) == 0) // Off + if (client.getVarbitValue(Varbits.EXPERIENCE_TRACKER_COUNTER) == 30 // Off + && client.getVarbitValue(Varbits.EXPERIENCE_TRACKER_PROGRESS_BAR) == 0) // Off { return null; } @@ -234,7 +234,7 @@ public class WidgetOverlay extends Overlay } OverlayPosition position; - switch (client.getVar(Varbits.EXPERIENCE_TRACKER_POSITION)) + switch (client.getVarbitValue(Varbits.EXPERIENCE_TRACKER_POSITION)) { case 0: default: @@ -269,7 +269,7 @@ public class WidgetOverlay extends Overlay public Dimension render(Graphics2D graphics) { // Don't draw widget overlay if the PVP KDR stats text will be empty - if (client.getVar(Varbits.SHOW_PVP_KDR_STATS) == 1) + if (client.getVarbitValue(Varbits.SHOW_PVP_KDR_STATS) == 1) { return super.render(graphics); } diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/roofremoval/overrides.jsonc b/runelite-client/src/main/resources/net/runelite/client/plugins/roofremoval/overrides.jsonc index b3fd2f2ae3..5d90fa439a 100644 --- a/runelite-client/src/main/resources/net/runelite/client/plugins/roofremoval/overrides.jsonc +++ b/runelite-client/src/main/resources/net/runelite/client/plugins/roofremoval/overrides.jsonc @@ -62,6 +62,14 @@ "z1": 0, "z2": 0 }, + { + "rx1": 23, + "ry1": 20, + "rx2": 31, + "ry2": 20, + "z1": 0, + "z2": 0 + }, { // Eastern part of the castle "rx1": 36, "ry1": 15, @@ -69,6 +77,14 @@ "ry2": 16, "z1": 0, "z2": 0 + }, + { // Rising Sun Inn + "rx1": 12, + "ry1": 51, + "rx2": 12, + "ry2": 51, + "z1": 0, + "z2": 0 } ], "12895":[ // Prif NW @@ -383,6 +399,34 @@ "z2": 2 } ], + "14386": [ // South Meiyerditch + { + "rx1": 21, + "ry1": 19, + "rx2": 22, + "ry2": 23, + "z1": 1, + "z2": 1 + }, + { + "rx1": 35, + "ry1": 43, + "rx2": 38, + "ry2": 43, + "z1": 1, + "z2": 1 + } + ], + "14387": [ // North Meiyerditch + { + "rx1": 50, + "ry1": 4, + "rx2": 50, + "ry2": 4, + "z1": 0, + "z2": 0 + } + ], "14388": [ // Darkmeyer { "rx1": 34, @@ -1910,6 +1954,22 @@ "ry2": 40, "z1": 0, "z2": 1 + }, + { + "rx1": 31, + "ry1": 34, + "rx2": 33, + "ry2": 36, + "z1": 2, + "z2": 2 + }, + { + "rx1": 37, + "ry1": 39, + "rx2": 39, + "ry2": 41, + "z1": 2, + "z2": 2 } ], "9531": [ // Jatiszo @@ -1960,7 +2020,23 @@ "z2": 0 } ], - "11061": [ // West Catherby + "11061": [ // West Catherby & Keep Le Faye + { + "rx1": 11, + "ry1": 6, + "rx2": 11, + "ry2": 13, + "z1": 0, + "z2": 0 + }, + { + "rx1": 14, + "ry1": 3, + "rx2": 22, + "ry2": 6, + "z1": 2, + "z2": 2 + }, { "rx1": 55, "ry1": 20, @@ -1978,6 +2054,14 @@ "ry2": 48, "z1": 0, "z2": 0 + }, + { + "rx1": 16, + "ry1": 47, + "rx2": 19, + "ry2": 47, + "z1": 0, + "z2": 0 } ], "5945": [ // West Shayzien Encampment @@ -2042,6 +2126,22 @@ "ry2": 54, "z1": 0, "z2": 1 + }, + { + "rx1": 48, + "ry1": 50, + "rx2": 51, + "ry2": 50, + "z1": 0, + "z2": 0 + }, + { + "rx1": 43, + "ry1": 55, + "rx2": 43, + "ry2": 59, + "z1": 0, + "z2": 0 } ], "11570": [ // Rimmington Dock @@ -2131,6 +2231,14 @@ } ], "14646": [ // Port Phasmatys + { + "rx1": 27, + "ry1": 25, + "rx2": 30, + "ry2": 26, + "z1": 0, + "z2": 0 + }, { "rx1": 46, "ry1": 47, @@ -2429,6 +2537,22 @@ "rx2": 23, "ry2": 37, "z1": 0, + "z2": 1 + }, + { + "rx1": 30, + "ry1": 32, + "rx2": 30, + "ry2": 32, + "z1": 0, + "z2": 0 + }, + { + "rx1": 30, + "ry1": 39, + "rx2": 30, + "ry2": 39, + "z1": 0, "z2": 0 } ], @@ -3420,5 +3544,215 @@ "z1": 2, "z2": 2 } + ], + "10292": [ // North & North of East Ardougne (south of Fishing Guild) + { + "rx1": 19, + "ry1": 16, + "rx2": 24, + "ry2": 20, + "z1": 0, + "z2": 0 + } + ], + "6475": [ // Misthalin Mystery manor + { + "rx1": 30, + "ry1": 23, + "rx2": 40, + "ry2": 23, + "z1": 0, + "z2": 0 + }, + { + "rx1": 25, + "ry1": 35, + "rx2": 29, + "ry2": 37, + "z1": 0, + "z2": 0 + } + ], + "9035": [ // Chaos runecrafting altar + { + "rx1": 0, + "ry1": 0, + "rx2": 63, + "ry2": 63, + "z1": 0, + "z2": 3 + } + ], + "14908": [ // Fossil Island House on the Hill + { + "rx1": 45, + "ry1": 23, + "rx2": 45, + "ry2": 23, + "z1": 0, + "z2": 0 + }, + { + "rx1": 48, + "ry1": 22, + "rx2": 48, + "ry2": 22, + "z1": 0, + "z2": 0 + }, + { + "rx1": 57, + "ry1": 22, + "rx2": 58, + "ry2": 24, + "z1": 0, + "z2": 0 + }, + { + "rx1": 60, + "ry1": 26, + "rx2": 60, + "ry2": 32, + "z1": 0, + "z2": 0 + }, + { + "rx1": 61, + "ry1": 27, + "rx2": 61, + "ry2": 31, + "z1": 0, + "z2": 0 + }, + { + "rx1": 58, + "ry1": 26, + "rx2": 58, + "ry2": 32, + "z1": 1, + "z2": 1 + } + ], + "10803": [ // Witchaven + { + "rx1": 15, + "ry1": 27, + "rx2": 16, + "ry2": 28, + "z1": 0, + "z2": 0 + } + ], + "11829": [ // North of Falador + { + "rx1": 59, + "ry1": 1, + "rx2": 59, + "ry2": 1, + "z1": 0, + "z2": 0 + }, + { + "rx1": 63, + "ry1": 1, + "rx2": 63, + "ry2": 1, + "z1": 0, + "z2": 0 + } + ], + "12084": [ // East Falador + { + "rx1": 11, + "ry1": 62, + "rx2": 11, + "ry2": 62, + "z1": 0, + "z2": 0 + }, + { + "rx1": 31, + "ry1": 60, + "rx2": 31, + "ry2": 60, + "z1": 0, + "z2": 0 + }, + { + "rx1": 40, + "ry1": 60, + "rx2": 40, + "ry2": 60, + "z1": 0, + "z2": 0 + }, + { + "rx1": 52, + "ry1": 60, + "rx2": 52, + "ry2": 60, + "z1": 0, + "z2": 0 + }, + { + "rx1": 53, + "ry1": 59, + "rx2": 53, + "ry2": 59, + "z1": 0, + "z2": 0 + }, + { + "rx1": 54, + "ry1": 58, + "rx2": 54, + "ry2": 58, + "z1": 0, + "z2": 0 + }, + { + "rx1": 55, + "ry1": 57, + "rx2": 55, + "ry2": 57, + "z1": 0, + "z2": 0 + }, + { + "rx1": 56, + "ry1": 56, + "rx2": 56, + "ry2": 56, + "z1": 0, + "z2": 0 + }, + { + "rx1": 50, + "ry1": 28, + "rx2": 50, + "ry2": 28, + "z1": 0, + "z2": 0 + } + ], + "12085": [ // North of East Falador + { + "rx1": 0, + "ry1": 0, + "rx2": 0, + "ry2": 0, + "z1": 0, + "z2": 0 + } + ], + "8527": [ // Braindeath Island distillery + { + "rx1": 26, + "ry1": 35, + "rx2": 52, + "ry2": 50, + "z1": 2, + "z2": 2 + } ] } diff --git a/runelite-client/src/main/resources/skill_icons_small/rifts_closed.png b/runelite-client/src/main/resources/skill_icons_small/rifts_closed.png new file mode 100644 index 0000000000..49a00cfe25 Binary files /dev/null and b/runelite-client/src/main/resources/skill_icons_small/rifts_closed.png differ diff --git a/runelite-client/src/test/java/net/runelite/client/hiscore/HiscoreClientTest.java b/runelite-client/src/test/java/net/runelite/client/hiscore/HiscoreClientTest.java index e0b079e6b8..fb26bc771e 100644 --- a/runelite-client/src/test/java/net/runelite/client/hiscore/HiscoreClientTest.java +++ b/runelite-client/src/test/java/net/runelite/client/hiscore/HiscoreClientTest.java @@ -71,6 +71,7 @@ public class HiscoreClientTest + "254,92\n" + "-1,-1\n" // lms + "1,241\n" // soul wars + + "1,2739\n" // gotr + "24870,37\n" + "15020,388\n" + "50463,147\n" @@ -148,6 +149,7 @@ public class HiscoreClientTest assertEquals(254, result.getClueScrollMaster().getRank()); assertEquals(-1, result.getLastManStanding().getLevel()); assertEquals(241, result.getSoulWarsZeal().getLevel()); + assertEquals(2739, result.getRiftsClosed().getLevel()); assertEquals(2460, result.getLeaguePoints().getLevel()); assertEquals(37, result.getAbyssalSire().getLevel()); assertEquals(92357, result.getCallisto().getRank()); diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/attackstyles/AttackStylesPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/attackstyles/AttackStylesPluginTest.java new file mode 100644 index 0000000000..a74a77c73e --- /dev/null +++ b/runelite-client/src/test/java/net/runelite/client/plugins/attackstyles/AttackStylesPluginTest.java @@ -0,0 +1,189 @@ +/* + * 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.client.plugins.attackstyles; + +import com.google.inject.Guice; +import com.google.inject.testing.fieldbinder.Bind; +import com.google.inject.testing.fieldbinder.BoundFieldModule; +import java.util.Set; +import javax.inject.Inject; +import net.runelite.api.Client; +import net.runelite.api.Skill; +import net.runelite.api.VarPlayer; +import net.runelite.api.Varbits; +import net.runelite.api.events.VarbitChanged; +import net.runelite.api.widgets.Widget; +import net.runelite.api.widgets.WidgetInfo; +import net.runelite.client.events.ConfigChanged; +import net.runelite.client.ui.overlay.OverlayManager; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +import org.mockito.junit.MockitoJUnitRunner; + +@RunWith(MockitoJUnitRunner.class) +public class AttackStylesPluginTest +{ + @Mock + @Bind + Client client; + + @Mock + @Bind + OverlayManager overlayManager; + + @Mock + @Bind + AttackStylesConfig attackConfig; + + @Inject + AttackStylesPlugin attackPlugin; + + @Before + public void before() + { + Guice.createInjector(BoundFieldModule.of(this)).injectMembers(this); + } + + /* + * Verify that red text is displayed when attacking with a style that gains experience + * in one of the unwanted skills. + */ + @Test + public void testWarning() + { + ConfigChanged warnForAttackEvent = new ConfigChanged(); + warnForAttackEvent.setGroup("attackIndicator"); + warnForAttackEvent.setKey("warnForAttack"); + warnForAttackEvent.setNewValue("true"); + attackPlugin.onConfigChanged(warnForAttackEvent); + + // Verify there is a warned skill + Set warnedSkills = attackPlugin.getWarnedSkills(); + assertTrue(warnedSkills.contains(Skill.ATTACK)); + + // Set mock client to attack in style that gives attack xp + when(client.getVar(VarPlayer.ATTACK_STYLE)).thenReturn(AttackStyle.ACCURATE.ordinal()); + + // verify that earning xp in a warned skill will display red text on the widget + attackPlugin.onVarbitChanged(new VarbitChanged()); + assertTrue(attackPlugin.isWarnedSkillSelected()); + + // Switch to attack style that doesn't give attack xp + when(client.getVar(VarPlayer.ATTACK_STYLE)).thenReturn(AttackStyle.AGGRESSIVE.ordinal()); + + // Verify the widget will now display white text + attackPlugin.onVarbitChanged(new VarbitChanged()); + warnedSkills = attackPlugin.getWarnedSkills(); + assertTrue(warnedSkills.contains(Skill.ATTACK)); + assertFalse(attackPlugin.isWarnedSkillSelected()); + } + + /* + * Verify that attack style widgets are hidden when filtered with the AttackStylesPlugin. + */ + @Test + public void testHiddenWidget() + { + ConfigChanged warnForAttackEvent = new ConfigChanged(); + warnForAttackEvent.setGroup("attackIndicator"); + warnForAttackEvent.setKey("warnForAttack"); + warnForAttackEvent.setNewValue("true"); + attackPlugin.onConfigChanged(warnForAttackEvent); + + // Set up mock widgets for atk and str attack styles + Widget atkWidget = mock(Widget.class); + Widget strWidget = mock(Widget.class); + when(client.getWidget(WidgetInfo.COMBAT_STYLE_ONE)).thenReturn(atkWidget); + when(client.getWidget(WidgetInfo.COMBAT_STYLE_TWO)).thenReturn(strWidget); + // Set widgets to return their hidden value in widgetsToHide when isHidden() is called + when(atkWidget.isHidden()).thenAnswer(x -> isAtkHidden()); + when(strWidget.isHidden()).thenAnswer(x -> isStrHidden()); + + // equip type_4 weapon type on player + when(client.getVarbitValue(Varbits.EQUIPPED_WEAPON_TYPE)).thenReturn(WeaponType.TYPE_4.ordinal()); + attackPlugin.onVarbitChanged(new VarbitChanged()); + + // Verify there is a warned skill + Set warnedSkills = attackPlugin.getWarnedSkills(); + assertTrue(warnedSkills.contains(Skill.ATTACK)); + + // Enable hiding widgets + ConfigChanged hideWidgetEvent = new ConfigChanged(); + hideWidgetEvent.setGroup("attackIndicator"); + hideWidgetEvent.setKey("removeWarnedStyles"); + hideWidgetEvent.setNewValue("true"); + attackPlugin.onConfigChanged(hideWidgetEvent); + when(attackConfig.removeWarnedStyles()).thenReturn(true); + + // verify that the accurate attack style widget is hidden + assertTrue(atkWidget.isHidden()); + + // add another warned skill + ConfigChanged warnForStrengthEvent = new ConfigChanged(); + warnForStrengthEvent.setGroup("attackIndicator"); + warnForStrengthEvent.setKey("warnForStrength"); + warnForStrengthEvent.setNewValue("true"); + attackPlugin.onConfigChanged(warnForStrengthEvent); + + // verify that the aggressive attack style widget is now hidden + assertTrue(strWidget.isHidden()); + + // disable hiding attack style widgets + hideWidgetEvent.setGroup("attackIndicator"); + hideWidgetEvent.setKey("removeWarnedStyles"); + hideWidgetEvent.setNewValue("false"); + attackPlugin.onConfigChanged(hideWidgetEvent); + + // verify that the aggressive and accurate attack style widgets are no longer hidden + assertFalse(attackPlugin.getHiddenWidgets().get(WeaponType.TYPE_4, + WidgetInfo.COMBAT_STYLE_ONE)); + assertFalse(attackPlugin.getHiddenWidgets().get(WeaponType.TYPE_4, + WidgetInfo.COMBAT_STYLE_THREE)); + } + + private boolean isAtkHidden() + { + if (attackPlugin.getHiddenWidgets().size() == 0) + { + return false; + } + return attackPlugin.getHiddenWidgets().get(WeaponType.TYPE_4, WidgetInfo.COMBAT_STYLE_ONE); + } + + private boolean isStrHidden() + { + if (attackPlugin.getHiddenWidgets().size() == 0) + { + return false; + } + return attackPlugin.getHiddenWidgets().get(WeaponType.TYPE_4, WidgetInfo.COMBAT_STYLE_TWO); + } +} \ No newline at end of file diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/chatcommands/ChatCommandsPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/chatcommands/ChatCommandsPluginTest.java index 843158dd32..e3967b88f2 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/chatcommands/ChatCommandsPluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/chatcommands/ChatCommandsPluginTest.java @@ -41,6 +41,7 @@ import net.runelite.api.Client; import net.runelite.api.MessageNode; import net.runelite.api.Player; import net.runelite.api.ScriptID; +import net.runelite.api.Varbits; import net.runelite.api.events.ChatMessage; import net.runelite.api.events.GameTick; import net.runelite.api.events.ScriptPostFired; @@ -164,6 +165,9 @@ public class ChatCommandsPluginTest @Test public void testTheatreOfBlood() { + when(client.getVarbitValue(Varbits.THEATRE_OF_BLOOD_ORB1)).thenReturn(1); + when(client.getVarbitValue(Varbits.THEATRE_OF_BLOOD_ORB2)).thenReturn(15); + ChatMessage chatMessage = new ChatMessage(null, GAMEMESSAGE, "", "Wave 'The Final Challenge' (Normal Mode) complete!
" + "Duration: 2:42.0
" + @@ -178,11 +182,14 @@ public class ChatCommandsPluginTest verify(configManager).setRSProfileConfiguration("killcount", "theatre of blood", 73); verify(configManager).setRSProfileConfiguration("personalbest", "theatre of blood", 17 * 60 + .2); + verify(configManager).setRSProfileConfiguration("personalbest", "theatre of blood 2 players", 17 * 60 + .2); } @Test public void testTheatreOfBloodNoPb() { + when(client.getVarbitValue(Varbits.THEATRE_OF_BLOOD_ORB1)).thenReturn(1); + ChatMessage chatMessage = new ChatMessage(null, GAMEMESSAGE, "", "Wave 'The Final Challenge' (Normal Mode) complete!
" + "Duration: 2:42
" + @@ -197,11 +204,14 @@ public class ChatCommandsPluginTest verify(configManager).setRSProfileConfiguration("killcount", "theatre of blood", 73); verify(configManager).setRSProfileConfiguration("personalbest", "theatre of blood", 13 * 60 + 52.8); + verify(configManager).setRSProfileConfiguration("personalbest", "theatre of blood solo", 13 * 60 + 52.8); } @Test public void testTheatreOfBloodEntryMode() { + when(client.getVarbitValue(Varbits.THEATRE_OF_BLOOD_ORB1)).thenReturn(1); + ChatMessage chatMessage = new ChatMessage(null, GAMEMESSAGE, "", "Wave 'The Final Challenge' (Entry Mode) complete!
" + "Duration: 2:42
" + @@ -216,6 +226,7 @@ public class ChatCommandsPluginTest verify(configManager).setRSProfileConfiguration("killcount", "theatre of blood entry mode", 73); verify(configManager).setRSProfileConfiguration("personalbest", "theatre of blood entry mode", 17 * 60.); + verify(configManager).setRSProfileConfiguration("personalbest", "theatre of blood entry mode solo", 17 * 60.); } @Test @@ -556,45 +567,45 @@ public class ChatCommandsPluginTest @Test public void testCoXKill() { - ChatMessage chatMessage = new ChatMessage(null, FRIENDSCHATNOTIFICATION, "", "Congratulations - your raid is complete!
Team size: 24+ players Duration: 37:04 (new personal best)>", null, 0); + ChatMessage chatMessage = new ChatMessage(null, FRIENDSCHATNOTIFICATION, "", "Congratulations - your raid is complete!
Team size: 24+ players Duration: 37:04.20 (new personal best)>", null, 0); chatCommandsPlugin.onChatMessage(chatMessage); chatMessage = new ChatMessage(null, GAMEMESSAGE, "", "Your completed Chambers of Xeric count is: 51.", null, 0); chatCommandsPlugin.onChatMessage(chatMessage); verify(configManager).setRSProfileConfiguration("killcount", "chambers of xeric", 51); - verify(configManager).setRSProfileConfiguration("personalbest", "chambers of xeric", 37 * 60 + 4.0); - - // Precise times - chatMessage = new ChatMessage(null, FRIENDSCHATNOTIFICATION, "", "Congratulations - your raid is complete!
Team size: 24+ players Duration: 37:04.20 (new personal best)>", null, 0); - chatCommandsPlugin.onChatMessage(chatMessage); - - chatMessage = new ChatMessage(null, GAMEMESSAGE, "", "Your completed Chambers of Xeric count is: 51.", null, 0); - chatCommandsPlugin.onChatMessage(chatMessage); - verify(configManager).setRSProfileConfiguration("personalbest", "chambers of xeric", 37 * 60 + 4.2); + verify(configManager).setRSProfileConfiguration("personalbest", "chambers of xeric 24+ players", 37 * 60 + 4.2); } @Test public void testCoXKillNoPb() { - ChatMessage chatMessage = new ChatMessage(null, FRIENDSCHATNOTIFICATION, "", "Congratulations - your raid is complete!
Team size: 11-15 players Duration: 23:25 Personal best: 20:19", null, 0); + ChatMessage chatMessage = new ChatMessage(null, FRIENDSCHATNOTIFICATION, "", "Congratulations - your raid is complete!
Team size: 11-15 players Duration: 23:25.40 Personal best: 20:19.20", null, 0); chatCommandsPlugin.onChatMessage(chatMessage); chatMessage = new ChatMessage(null, GAMEMESSAGE, "", "Your completed Chambers of Xeric count is: 52.", null, 0); chatCommandsPlugin.onChatMessage(chatMessage); verify(configManager).setRSProfileConfiguration("killcount", "chambers of xeric", 52); - verify(configManager).setRSProfileConfiguration("personalbest", "chambers of xeric", 20 * 60 + 19.0); - - // Precise times - chatMessage = new ChatMessage(null, FRIENDSCHATNOTIFICATION, "", "Congratulations - your raid is complete!
Team size: 11-15 players Duration: 23:25.40 Personal best: 20:19.20", null, 0); - chatCommandsPlugin.onChatMessage(chatMessage); - - chatMessage = new ChatMessage(null, GAMEMESSAGE, "", "Your completed Chambers of Xeric count is: 52.", null, 0); - chatCommandsPlugin.onChatMessage(chatMessage); - verify(configManager).setRSProfileConfiguration("personalbest", "chambers of xeric", 20 * 60 + 19.2); + verify(configManager).setRSProfileConfiguration("personalbest", "chambers of xeric 11-15 players", 20 * 60 + 19.2); + } + + @Test + public void testCoxCmNoPb() + { + ChatMessage chatMessage = new ChatMessage(null, FRIENDSCHATNOTIFICATION, "", + "Congratulations - your raid is complete!
Team size: 3 players Duration: 41:10 Personal best: 40:03", null, 0); + chatCommandsPlugin.onChatMessage(chatMessage); + + chatMessage = new ChatMessage(null, GAMEMESSAGE, "", + "Your completed Chambers of Xeric Challenge Mode count is: 13.", null, 0); + chatCommandsPlugin.onChatMessage(chatMessage); + + verify(configManager).setRSProfileConfiguration("killcount", "chambers of xeric challenge mode", 13); + verify(configManager).setRSProfileConfiguration("personalbest", "chambers of xeric challenge mode", 40 * 60 + 3.); + verify(configManager).setRSProfileConfiguration("personalbest", "chambers of xeric challenge mode 3 players", 40 * 60 + 3.); } @Test diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/cluescrolls/ClueScrollPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/cluescrolls/ClueScrollPluginTest.java index 7db5ce3f6e..b3ccabb37f 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/cluescrolls/ClueScrollPluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/cluescrolls/ClueScrollPluginTest.java @@ -216,10 +216,10 @@ public class ClueScrollPluginTest when(container.getItems()).thenReturn(inventory); when(container.contains(ItemID.RUNE_POUCH)).thenReturn(true); - when(client.getVar(Varbits.RUNE_POUCH_RUNE1)).thenReturn(9); // Cosmic Rune - when(client.getVar(Varbits.RUNE_POUCH_AMOUNT1)).thenReturn(20); - when(client.getVar(Varbits.RUNE_POUCH_RUNE3)).thenReturn(4); // Fire Rune - when(client.getVar(Varbits.RUNE_POUCH_AMOUNT3)).thenReturn(4000); + when(client.getVarbitValue(Varbits.RUNE_POUCH_RUNE1)).thenReturn(9); // Cosmic Rune + when(client.getVarbitValue(Varbits.RUNE_POUCH_AMOUNT1)).thenReturn(20); + when(client.getVarbitValue(Varbits.RUNE_POUCH_RUNE3)).thenReturn(4); // Fire Rune + when(client.getVarbitValue(Varbits.RUNE_POUCH_AMOUNT3)).thenReturn(4000); plugin.onItemContainerChanged(event); diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPluginTest.java index f051cfaa2d..478bf750d4 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/menuentryswapper/MenuEntrySwapperPluginTest.java @@ -34,6 +34,8 @@ import net.runelite.api.GameState; import net.runelite.api.KeyCode; import net.runelite.api.MenuAction; import net.runelite.api.MenuEntry; +import net.runelite.api.NPC; +import net.runelite.api.NPCComposition; import net.runelite.api.ObjectComposition; import net.runelite.api.events.ClientTick; import net.runelite.api.events.MenuEntryAdded; @@ -95,6 +97,11 @@ public class MenuEntrySwapperPluginTest when(client.getGameState()).thenReturn(GameState.LOGGED_IN); when(client.getObjectDefinition(anyInt())).thenReturn(mock(ObjectComposition.class)); + NPC npc = mock(NPC.class); + NPCComposition composition = mock(NPCComposition.class); + when(npc.getTransformedComposition()).thenReturn(composition); + when(client.getCachedNPCs()).thenReturn(new NPC[] { npc }); + when(client.getMenuEntries()).thenAnswer((Answer) invocationOnMock -> { // The menu implementation returns a copy of the array, which causes swap() to not diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/motherlode/MotherlodePluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/motherlode/MotherlodePluginTest.java new file mode 100644 index 0000000000..bf40320d10 --- /dev/null +++ b/runelite-client/src/test/java/net/runelite/client/plugins/motherlode/MotherlodePluginTest.java @@ -0,0 +1,168 @@ +/* + * Copyright (c) 2019, 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.client.plugins.motherlode; + +import com.google.inject.Guice; +import com.google.inject.testing.fieldbinder.Bind; +import com.google.inject.testing.fieldbinder.BoundFieldModule; +import java.util.concurrent.ScheduledExecutorService; +import javax.inject.Inject; +import net.runelite.api.Client; +import net.runelite.api.GameState; +import net.runelite.api.InventoryID; +import net.runelite.api.Item; +import net.runelite.api.ItemContainer; +import net.runelite.api.ItemID; +import net.runelite.api.Varbits; +import net.runelite.api.events.GameStateChanged; +import net.runelite.api.events.ItemContainerChanged; +import net.runelite.api.events.VarbitChanged; +import net.runelite.client.ui.overlay.OverlayManager; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoMoreInteractions; +import static org.mockito.Mockito.when; +import org.mockito.junit.MockitoJUnitRunner; + +@RunWith(MockitoJUnitRunner.class) +public class MotherlodePluginTest +{ + @Inject + private MotherlodePlugin motherlodePlugin; + + @Mock + @Bind + private Client client; + + @Mock + @Bind + MotherlodeSession motherlodeSession; + + @Mock + @Bind + private MotherlodeConfig motherlodeConfig; + + @Mock + @Bind + private MotherlodeGemOverlay motherlodeGemOverlay; + + @Mock + @Bind + private MotherlodeOreOverlay motherlodeOreOverlay; + + @Mock + @Bind + private MotherlodeSceneOverlay motherlodeSceneOverlay; + + @Mock + @Bind + private MotherlodeSackOverlay motherlodeSackOverlay; + + @Mock + @Bind + private ScheduledExecutorService scheduledExecutorService; + + @Mock + @Bind + private OverlayManager overlayManager; + + @Before + public void before() + { + Guice.createInjector(BoundFieldModule.of(this)).injectMembers(this); + + when(client.getGameState()).thenReturn(GameState.LOGGED_IN); + when(client.getMapRegions()).thenReturn(new int[]{14679}); + } + + @Test + public void testOreCounter() + { + // set inMlm + GameStateChanged gameStateChanged = new GameStateChanged(); + gameStateChanged.setGameState(GameState.LOADING); + motherlodePlugin.onGameStateChanged(gameStateChanged); + + // Initial sack count + when(client.getVarbitValue(Varbits.SACK_NUMBER)).thenReturn(42); + motherlodePlugin.onVarbitChanged(new VarbitChanged()); + + // Create before inventory + ItemContainer inventory = mock(ItemContainer.class); + Item[] items = new Item[]{ + item(ItemID.RUNITE_ORE, 1), + item(ItemID.GOLDEN_NUGGET, 4), + item(ItemID.COAL, 1), + item(ItemID.COAL, 1), + item(ItemID.COAL, 1), + item(ItemID.COAL, 1), + + }; + when(inventory.getItems()) + .thenReturn(items); + when(client.getItemContainer(InventoryID.INVENTORY)).thenReturn(inventory); + + // Withdraw 20 + when(client.getVarbitValue(Varbits.SACK_NUMBER)).thenReturn(22); + motherlodePlugin.onVarbitChanged(new VarbitChanged()); + + inventory = mock(ItemContainer.class); + // +1 rune, +4 nugget, +2 coal, +1 addy + items = new Item[]{ + item(ItemID.RUNITE_ORE, 1), + item(ItemID.RUNITE_ORE, 1), + item(ItemID.GOLDEN_NUGGET, 8), + item(ItemID.COAL, 1), + item(ItemID.COAL, 1), + item(ItemID.COAL, 1), + item(ItemID.COAL, 1), + item(ItemID.COAL, 1), + item(ItemID.COAL, 1), + item(ItemID.ADAMANTITE_ORE, 1), + + }; + when(inventory.getItems()) + .thenReturn(items); + when(client.getItemContainer(InventoryID.INVENTORY)).thenReturn(inventory); + + // Trigger comparison + motherlodePlugin.onItemContainerChanged(new ItemContainerChanged(InventoryID.INVENTORY.getId(), inventory)); + + verify(motherlodeSession).updateOreFound(ItemID.RUNITE_ORE, 1); + verify(motherlodeSession).updateOreFound(ItemID.GOLDEN_NUGGET, 4); + verify(motherlodeSession).updateOreFound(ItemID.COAL, 2); + verify(motherlodeSession).updateOreFound(ItemID.ADAMANTITE_ORE, 1); + verifyNoMoreInteractions(motherlodeSession); + } + + private static Item item(int itemId, int quantity) + { + return new Item(itemId, quantity); + } +} diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/screenshot/ScreenshotPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/screenshot/ScreenshotPluginTest.java index 655fe4d42e..f305bfe3e1 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/screenshot/ScreenshotPluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/screenshot/ScreenshotPluginTest.java @@ -427,13 +427,13 @@ public class ScreenshotPluginTest { ChatMessage chatMessageEvent = new ChatMessage(null, GAMEMESSAGE, "", COLLECTION_LOG_CHAT, null, 0); - when(client.getVar(Varbits.COLLECTION_LOG_NOTIFICATION)).thenReturn(1); + when(client.getVarbitValue(Varbits.COLLECTION_LOG_NOTIFICATION)).thenReturn(1); screenshotPlugin.onChatMessage(chatMessageEvent); verify(screenshotPlugin).takeScreenshot("Collection log (Chompy bird hat)", "Collection Log"); reset(screenshotPlugin); - when(client.getVar(Varbits.COLLECTION_LOG_NOTIFICATION)).thenReturn(3); + when(client.getVarbitValue(Varbits.COLLECTION_LOG_NOTIFICATION)).thenReturn(3); screenshotPlugin.onChatMessage(chatMessageEvent); verify(screenshotPlugin, never()).takeScreenshot(anyString(), anyString()); @@ -490,7 +490,7 @@ public class ScreenshotPluginTest { when(screenshotConfig.screenshotCombatAchievements()).thenReturn(true); - when(client.getVar(Varbits.COMBAT_ACHIEVEMENTS_POPUP)).thenReturn(1); + when(client.getVarbitValue(Varbits.COMBAT_ACHIEVEMENTS_POPUP)).thenReturn(1); ChatMessage chatMessageEvent = new ChatMessage(null, GAMEMESSAGE, "", "Congratulations, you've completed an easy combat task: Handyman.", null, 0); diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/timers/TimersPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/timers/TimersPluginTest.java index 62bd1d38ae..35a85c7034 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/timers/TimersPluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/timers/TimersPluginTest.java @@ -454,8 +454,7 @@ public class TimersPluginTest public void testCorruptionCooldown() { when(timersConfig.showArceuusCooldown()).thenReturn(true); - when(client.getVar(any(Varbits.class))).thenReturn(0); - when(client.getVar(Varbits.CORRUPTION_COOLDOWN)).thenReturn(1); + when(client.getVarbitValue(Varbits.CORRUPTION_COOLDOWN)).thenReturn(1); timersPlugin.onVarbitChanged(new VarbitChanged()); ArgumentCaptor captor = ArgumentCaptor.forClass(InfoBox.class); @@ -540,7 +539,7 @@ public class TimersPluginTest public void testImbuedHeartStart() { when(timersConfig.showImbuedHeart()).thenReturn(true); - when(client.getVar(Varbits.IMBUED_HEART_COOLDOWN)).thenReturn(70); + when(client.getVarbitValue(Varbits.IMBUED_HEART_COOLDOWN)).thenReturn(70); timersPlugin.onVarbitChanged(new VarbitChanged()); ArgumentCaptor captor = ArgumentCaptor.forClass(InfoBox.class); @@ -555,7 +554,7 @@ public class TimersPluginTest { when(timersConfig.showImbuedHeart()).thenReturn(true); - when(client.getVar(Varbits.IMBUED_HEART_COOLDOWN)).thenReturn(70); + when(client.getVarbitValue(Varbits.IMBUED_HEART_COOLDOWN)).thenReturn(70); timersPlugin.onVarbitChanged(new VarbitChanged()); // Calls removeIf once (on createGameTimer) ArgumentCaptor> prcaptor = ArgumentCaptor.forClass(Predicate.class); @@ -565,7 +564,7 @@ public class TimersPluginTest Predicate pred = prcaptor.getValue(); assertTrue(pred.test(imbuedHeartInfoBox)); - when(client.getVar(Varbits.IMBUED_HEART_COOLDOWN)).thenReturn(0); + when(client.getVarbitValue(Varbits.IMBUED_HEART_COOLDOWN)).thenReturn(0); timersPlugin.onVarbitChanged(new VarbitChanged()); // Calls removeIf once verify(infoBoxManager, times(1)).addInfoBox(any()); diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/timetracking/farming/FarmingContractManagerTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/timetracking/farming/FarmingContractManagerTest.java new file mode 100644 index 0000000000..4c405bd4de --- /dev/null +++ b/runelite-client/src/test/java/net/runelite/client/plugins/timetracking/farming/FarmingContractManagerTest.java @@ -0,0 +1,577 @@ +/* + * Copyright (c) 2020 Cyborger1 + * 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.timetracking.farming; + +import com.google.inject.Guice; +import com.google.inject.testing.fieldbinder.Bind; +import com.google.inject.testing.fieldbinder.BoundFieldModule; +import java.time.Instant; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ScheduledExecutorService; +import javax.inject.Inject; +import net.runelite.api.Client; +import net.runelite.api.Varbits; +import net.runelite.client.Notifier; +import net.runelite.client.config.ConfigManager; +import net.runelite.client.game.ItemManager; +import net.runelite.client.plugins.timetracking.SummaryState; +import net.runelite.client.plugins.timetracking.TimeTrackingConfig; +import net.runelite.client.ui.overlay.infobox.InfoBoxManager; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import static org.mockito.ArgumentMatchers.any; +import org.mockito.Mock; +import static org.mockito.Mockito.when; +import org.mockito.junit.MockitoJUnitRunner; + +@RunWith(MockitoJUnitRunner.class) +public class FarmingContractManagerTest +{ + private Map farmingGuildPatches = new HashMap<>(); + + @Inject + private FarmingContractManager farmingContractManager; + + @Inject + private FarmingWorld farmingWorld; + + @Mock + @Bind + private TimeTrackingConfig config; + + @Mock + @Bind + private Client client; + + @Mock + @Bind + private FarmingTracker farmingTracker; + + @Mock + @Bind + private ConfigManager configManager; + + @Mock + @Bind + private Notifier notifier; + + @Mock + @Bind + private ItemManager itemManager; + + @Mock + @Bind + private InfoBoxManager infoBoxManager; + + @Mock + @Bind + private ScheduledExecutorService executor; + + @Before + public void before() + { + Guice.createInjector(BoundFieldModule.of(this)).injectMembers(this); + + for (FarmingPatch p : farmingWorld.getFarmingGuildRegion().getPatches()) + { + farmingGuildPatches.put(p.getVarbit(), p); + } + + // Consider all patches to be empty by default + when(farmingTracker.predictPatch(any(FarmingPatch.class))) + .thenReturn(new PatchPrediction(null, null, 0, 0, 0)); + } + + @Test + public void cabbageContractOnionHarvestableAndCabbageHarvestable() + { + final long unixNow = Instant.now().getEpochSecond(); + + // Get the two allotment patches + final FarmingPatch patch1 = farmingGuildPatches.get(Varbits.FARMING_4773); + final FarmingPatch patch2 = farmingGuildPatches.get(Varbits.FARMING_4774); + + assertNotNull(patch1); + assertNotNull(patch2); + + // Specify the two allotment patches + when(farmingTracker.predictPatch(patch1)) + .thenReturn(new PatchPrediction(Produce.ONION, CropState.HARVESTABLE, unixNow, 3, 3)); + when(farmingTracker.predictPatch(patch2)) + .thenReturn(new PatchPrediction(Produce.CABBAGE, CropState.HARVESTABLE, unixNow, 3, 3)); + + farmingContractManager.setContract(Produce.CABBAGE); + + assertEquals(SummaryState.COMPLETED, farmingContractManager.getSummary()); + } + + @Test + public void cabbageContractOnionHarvestableAndPotatoHarvestable() + { + final long unixNow = Instant.now().getEpochSecond(); + + // Get the two allotment patches + final FarmingPatch patch1 = farmingGuildPatches.get(Varbits.FARMING_4773); + final FarmingPatch patch2 = farmingGuildPatches.get(Varbits.FARMING_4774); + + assertNotNull(patch1); + assertNotNull(patch2); + + // Specify the two allotment patches + when(farmingTracker.predictPatch(patch1)) + .thenReturn(new PatchPrediction(Produce.ONION, CropState.HARVESTABLE, unixNow, 3, 3)); + when(farmingTracker.predictPatch(patch2)) + .thenReturn(new PatchPrediction(Produce.POTATO, CropState.HARVESTABLE, unixNow, 3, 3)); + + farmingContractManager.setContract(Produce.CABBAGE); + + assertEquals(SummaryState.OCCUPIED, farmingContractManager.getSummary()); + } + + @Test + public void cabbageContractOnionHarvestableAndEmptyPatch() + { + final long unixNow = Instant.now().getEpochSecond(); + + // Get the two allotment patches + final FarmingPatch patch = farmingGuildPatches.get(Varbits.FARMING_4773); + + assertNotNull(patch); + + // Specify the two allotment patches + when(farmingTracker.predictPatch(patch)) + .thenReturn(new PatchPrediction(Produce.ONION, CropState.HARVESTABLE, unixNow, 3, 3)); + + farmingContractManager.setContract(Produce.CABBAGE); + + assertEquals(SummaryState.EMPTY, farmingContractManager.getSummary()); + } + + @Test + public void cabbageContractOnionHarvestableAndCabbageGrowing() + { + final long unixNow = Instant.now().getEpochSecond(); + final long expectedTime = unixNow + 60; + + // Get the two allotment patches + final FarmingPatch patch1 = farmingGuildPatches.get(Varbits.FARMING_4773); + final FarmingPatch patch2 = farmingGuildPatches.get(Varbits.FARMING_4774); + + assertNotNull(patch1); + assertNotNull(patch2); + + // Specify the two allotment patches + when(farmingTracker.predictPatch(patch1)) + .thenReturn(new PatchPrediction(Produce.ONION, CropState.HARVESTABLE, unixNow, 3, 3)); + when(farmingTracker.predictPatch(patch2)) + .thenReturn(new PatchPrediction( + Produce.CABBAGE, CropState.GROWING, expectedTime, 2, 3)); + + farmingContractManager.setContract(Produce.CABBAGE); + + assertEquals(SummaryState.IN_PROGRESS, farmingContractManager.getSummary()); + assertEquals(CropState.GROWING, farmingContractManager.getContractCropState()); + assertEquals(expectedTime, farmingContractManager.getCompletionTime()); + } + + @Test + public void cabbageContractOnionHarvestableAndCabbageDiseased() + { + final long unixNow = Instant.now().getEpochSecond(); + + // Get the two allotment patches + final FarmingPatch patch1 = farmingGuildPatches.get(Varbits.FARMING_4773); + final FarmingPatch patch2 = farmingGuildPatches.get(Varbits.FARMING_4774); + + assertNotNull(patch1); + assertNotNull(patch2); + + // Specify the two allotment patches + when(farmingTracker.predictPatch(patch1)) + .thenReturn(new PatchPrediction(Produce.ONION, CropState.HARVESTABLE, unixNow, 3, 3)); + when(farmingTracker.predictPatch(patch2)) + .thenReturn(new PatchPrediction(Produce.CABBAGE, CropState.DISEASED, 0, 2, 3)); + + farmingContractManager.setContract(Produce.CABBAGE); + + assertEquals(SummaryState.IN_PROGRESS, farmingContractManager.getSummary()); + assertEquals(CropState.DISEASED, farmingContractManager.getContractCropState()); + } + + @Test + public void cabbageContractOnionHarvestableAndCabbageDead() + { + final long unixNow = Instant.now().getEpochSecond(); + + // Get the two allotment patches + final FarmingPatch patch1 = farmingGuildPatches.get(Varbits.FARMING_4773); + final FarmingPatch patch2 = farmingGuildPatches.get(Varbits.FARMING_4774); + + assertNotNull(patch1); + assertNotNull(patch2); + + // Specify the two allotment patches + when(farmingTracker.predictPatch(patch1)) + .thenReturn(new PatchPrediction(Produce.ONION, CropState.HARVESTABLE, unixNow, 3, 3)); + when(farmingTracker.predictPatch(patch2)) + .thenReturn(new PatchPrediction(Produce.CABBAGE, CropState.DEAD, 0, 2, 3)); + + farmingContractManager.setContract(Produce.CABBAGE); + + assertEquals(SummaryState.IN_PROGRESS, farmingContractManager.getSummary()); + assertEquals(CropState.DEAD, farmingContractManager.getContractCropState()); + } + + @Test + public void cabbageContractCabbageGrowingAndCabbageDead() + { + final long unixNow = Instant.now().getEpochSecond(); + final long expected = unixNow + 60; + + // Get the two allotment patches + final FarmingPatch patch1 = farmingGuildPatches.get(Varbits.FARMING_4773); + final FarmingPatch patch2 = farmingGuildPatches.get(Varbits.FARMING_4774); + + assertNotNull(patch1); + assertNotNull(patch2); + + // Specify the two allotment patches + when(farmingTracker.predictPatch(patch1)) + .thenReturn(new PatchPrediction(Produce.CABBAGE, CropState.GROWING, expected, 2, 3)); + when(farmingTracker.predictPatch(patch2)) + .thenReturn(new PatchPrediction(Produce.CABBAGE, CropState.DEAD, 0, 2, 3)); + + farmingContractManager.setContract(Produce.CABBAGE); + + assertEquals(SummaryState.IN_PROGRESS, farmingContractManager.getSummary()); + } + + @Test + public void cabbageContractCabbageHarvestableAndCabbageDead() + { + final long unixNow = Instant.now().getEpochSecond(); + + // Get the two allotment patches + final FarmingPatch patch1 = farmingGuildPatches.get(Varbits.FARMING_4773); + final FarmingPatch patch2 = farmingGuildPatches.get(Varbits.FARMING_4774); + + assertNotNull(patch1); + assertNotNull(patch2); + + // Specify the two allotment patches + when(farmingTracker.predictPatch(patch1)) + .thenReturn(new PatchPrediction(Produce.CABBAGE, CropState.DEAD, 0, 2, 3)); + when(farmingTracker.predictPatch(patch2)) + .thenReturn(new PatchPrediction(Produce.CABBAGE, CropState.HARVESTABLE, unixNow, 3, 3)); + + farmingContractManager.setContract(Produce.CABBAGE); + + assertEquals(SummaryState.COMPLETED, farmingContractManager.getSummary()); + } + + @Test + public void cabbageContractTwoCabbagesGrowing() + { + final long unixNow = Instant.now().getEpochSecond(); + final long expected1 = unixNow + 60; + final long expected2 = unixNow + 120; + + // Get the two allotment patches + final FarmingPatch patch1 = farmingGuildPatches.get(Varbits.FARMING_4773); + final FarmingPatch patch2 = farmingGuildPatches.get(Varbits.FARMING_4774); + + assertNotNull(patch1); + assertNotNull(patch2); + + // Specify the two allotment patches + when(farmingTracker.predictPatch(patch1)) + .thenReturn(new PatchPrediction(Produce.CABBAGE, CropState.GROWING, expected1, 2, 3)); + when(farmingTracker.predictPatch(patch2)) + .thenReturn(new PatchPrediction(Produce.CABBAGE, CropState.GROWING, expected2, 1, 3)); + + farmingContractManager.setContract(Produce.CABBAGE); + + assertEquals(SummaryState.IN_PROGRESS, farmingContractManager.getSummary()); + assertEquals(CropState.GROWING, farmingContractManager.getContractCropState()); + // Prefer closest estimated time + assertEquals(expected1, farmingContractManager.getCompletionTime()); + } + + @Test + public void cabbageContractCabbageGrowingAndCabbageDiseased() + { + final long unixNow = Instant.now().getEpochSecond(); + final long expectedTime = unixNow + 60; + + // Get the two allotment patches + final FarmingPatch patch1 = farmingGuildPatches.get(Varbits.FARMING_4773); + final FarmingPatch patch2 = farmingGuildPatches.get(Varbits.FARMING_4774); + + assertNotNull(patch1); + assertNotNull(patch2); + + // Specify the two allotment patches + when(farmingTracker.predictPatch(patch1)) + .thenReturn(new PatchPrediction(Produce.CABBAGE, CropState.DISEASED, 0, 2, 3)); + when(farmingTracker.predictPatch(patch2)) + .thenReturn(new PatchPrediction(Produce.CABBAGE, CropState.GROWING, expectedTime, 2, 3)); + + farmingContractManager.setContract(Produce.CABBAGE); + + assertEquals(SummaryState.IN_PROGRESS, farmingContractManager.getSummary()); + // Prefer healthy cabbages + assertEquals(CropState.GROWING, farmingContractManager.getContractCropState()); + assertEquals(expectedTime, farmingContractManager.getCompletionTime()); + } + + @Test + public void cabbageContractCabbageDiseasedAndCabbageGrowing() + { + final long unixNow = Instant.now().getEpochSecond(); + final long expectedTime = unixNow + 60; + + // Get the two allotment patches + final FarmingPatch patch1 = farmingGuildPatches.get(Varbits.FARMING_4773); + final FarmingPatch patch2 = farmingGuildPatches.get(Varbits.FARMING_4774); + + assertNotNull(patch1); + assertNotNull(patch2); + + // Specify the two allotment patches + when(farmingTracker.predictPatch(patch1)) + .thenReturn(new PatchPrediction(Produce.CABBAGE, CropState.GROWING, expectedTime, 2, 3)); + when(farmingTracker.predictPatch(patch2)) + .thenReturn(new PatchPrediction(Produce.CABBAGE, CropState.DISEASED, 0, 2, 3)); + + farmingContractManager.setContract(Produce.CABBAGE); + + assertEquals(SummaryState.IN_PROGRESS, farmingContractManager.getSummary()); + // Prefer healthy cabbages + assertEquals(CropState.GROWING, farmingContractManager.getContractCropState()); + assertEquals(expectedTime, farmingContractManager.getCompletionTime()); + } + + @Test + public void cabbageContractCabbageDeadAndCabbageDiseased() + { + // Get the two allotment patches + final FarmingPatch patch1 = farmingGuildPatches.get(Varbits.FARMING_4773); + final FarmingPatch patch2 = farmingGuildPatches.get(Varbits.FARMING_4774); + + assertNotNull(patch1); + assertNotNull(patch2); + + // Specify the two allotment patches + when(farmingTracker.predictPatch(patch1)) + .thenReturn(new PatchPrediction(Produce.CABBAGE, CropState.DISEASED, 0, 2, 3)); + when(farmingTracker.predictPatch(patch2)) + .thenReturn(new PatchPrediction(Produce.CABBAGE, CropState.DEAD, 0, 2, 3)); + + farmingContractManager.setContract(Produce.CABBAGE); + + assertEquals(SummaryState.IN_PROGRESS, farmingContractManager.getSummary()); + // Prefer diseased cabbages + assertEquals(CropState.DISEASED, farmingContractManager.getContractCropState()); + } + + @Test + public void cabbageContractCabbageHarvestableAndEmptyPatch() + { + final long unixNow = Instant.now().getEpochSecond(); + + final FarmingPatch patch = farmingGuildPatches.get(Varbits.FARMING_4773); + + assertNotNull(patch); + + when(farmingTracker.predictPatch(patch)) + .thenReturn(new PatchPrediction(Produce.CABBAGE, CropState.HARVESTABLE, unixNow, 3, 3)); + + farmingContractManager.setContract(Produce.CABBAGE); + + assertEquals(SummaryState.COMPLETED, farmingContractManager.getSummary()); + } + + @Test + public void cabbageContractCabbageDiseasedAndEmptyPatch() + { + final FarmingPatch patch = farmingGuildPatches.get(Varbits.FARMING_4773); + + assertNotNull(patch); + + when(farmingTracker.predictPatch(patch)) + .thenReturn(new PatchPrediction(Produce.CABBAGE, CropState.DISEASED, 0, 2, 3)); + + farmingContractManager.setContract(Produce.CABBAGE); + + assertEquals(SummaryState.IN_PROGRESS, farmingContractManager.getSummary()); + assertEquals(CropState.DISEASED, farmingContractManager.getContractCropState()); + } + + @Test + public void cabbageContractCabbageDeadAndEmptyPatch() + { + final FarmingPatch patch = farmingGuildPatches.get(Varbits.FARMING_4773); + + assertNotNull(patch); + + when(farmingTracker.predictPatch(patch)) + .thenReturn(new PatchPrediction(Produce.CABBAGE, CropState.DEAD, 0, 2, 3)); + + farmingContractManager.setContract(Produce.CABBAGE); + + assertEquals(SummaryState.IN_PROGRESS, farmingContractManager.getSummary()); + assertEquals(CropState.DEAD, farmingContractManager.getContractCropState()); + } + + @Test + public void redberriesContractRedberriesHarvestable() + { + final long unixNow = Instant.now().getEpochSecond(); + + // Get the bush patch + final FarmingPatch patch = farmingGuildPatches.get(Varbits.FARMING_4772); + + assertNotNull(patch); + + // For berries, Harvestable means already checked + when(farmingTracker.predictPatch(patch)) + .thenReturn(new PatchPrediction(Produce.REDBERRIES, CropState.HARVESTABLE, unixNow, 3, 3)); + + farmingContractManager.setContract(Produce.REDBERRIES); + + assertEquals(SummaryState.OCCUPIED, farmingContractManager.getSummary()); + } + + @Test + public void redberriesContractRedberriesGrown() + { + final long unixNow = Instant.now().getEpochSecond(); + + // Get the bush patch + final FarmingPatch patch = farmingGuildPatches.get(Varbits.FARMING_4772); + + assertNotNull(patch); + + // For berries, Growing on the last stage is ready to be checked + when(farmingTracker.predictPatch(patch)) + .thenReturn(new PatchPrediction(Produce.REDBERRIES, CropState.GROWING, unixNow, 3, 3)); + + farmingContractManager.setContract(Produce.REDBERRIES); + + assertEquals(SummaryState.COMPLETED, farmingContractManager.getSummary()); + } + + @Test + public void redberriesContractRedberriesGrowing() + { + final long unixNow = Instant.now().getEpochSecond(); + final long expectedCompletion = unixNow + 60; + + // Get the bush patch + final FarmingPatch patch = farmingGuildPatches.get(Varbits.FARMING_4772); + + assertNotNull(patch); + + // Not ready to check + when(farmingTracker.predictPatch(patch)) + .thenReturn(new PatchPrediction(Produce.REDBERRIES, CropState.GROWING, expectedCompletion, 2, 3)); + + farmingContractManager.setContract(Produce.REDBERRIES); + + assertEquals(SummaryState.IN_PROGRESS, farmingContractManager.getSummary()); + assertEquals(CropState.GROWING, farmingContractManager.getContractCropState()); + assertEquals(expectedCompletion, farmingContractManager.getCompletionTime()); + } + + @Test + public void redberriesContractRedberriesDiseased() + { + // Get the bush patch + final FarmingPatch patch = farmingGuildPatches.get(Varbits.FARMING_4772); + + assertNotNull(patch); + + when(farmingTracker.predictPatch(patch)) + .thenReturn(new PatchPrediction(Produce.REDBERRIES, CropState.DISEASED, 0, 2, 3)); + + farmingContractManager.setContract(Produce.REDBERRIES); + + assertEquals(SummaryState.IN_PROGRESS, farmingContractManager.getSummary()); + assertEquals(CropState.DISEASED, farmingContractManager.getContractCropState()); + } + + @Test + public void redberriesContractRedberriesDead() + { + // Get the bush patch + final FarmingPatch patch = farmingGuildPatches.get(Varbits.FARMING_4772); + + assertNotNull(patch); + + when(farmingTracker.predictPatch(patch)) + .thenReturn(new PatchPrediction(Produce.REDBERRIES, CropState.DEAD, 0, 2, 3)); + + farmingContractManager.setContract(Produce.REDBERRIES); + + assertEquals(SummaryState.IN_PROGRESS, farmingContractManager.getSummary()); + assertEquals(CropState.DEAD, farmingContractManager.getContractCropState()); + } + + @Test + public void redberriesContractCadavaDead() + { + // Get the bush patch + final FarmingPatch patch = farmingGuildPatches.get(Varbits.FARMING_4772); + + assertNotNull(patch); + + when(farmingTracker.predictPatch(patch)) + .thenReturn(new PatchPrediction(Produce.CADAVABERRIES, CropState.DEAD, 0, 2, 3)); + + farmingContractManager.setContract(Produce.REDBERRIES); + assertEquals(SummaryState.OCCUPIED, farmingContractManager.getSummary()); + } + + @Test + public void guamContractGuamDead() + { + // Get the bush patch + final FarmingPatch patch = farmingGuildPatches.get(Varbits.FARMING_4775); + + assertNotNull(patch); + + when(farmingTracker.predictPatch(patch)) + .thenReturn(new PatchPrediction(Produce.GUAM, CropState.DEAD, 0, 2, 3)); + + farmingContractManager.setContract(Produce.GUAM); + + assertEquals(SummaryState.IN_PROGRESS, farmingContractManager.getSummary()); + assertEquals(CropState.DEAD, farmingContractManager.getContractCropState()); + } +} diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/wintertodt/WintertodtPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/wintertodt/WintertodtPluginTest.java index 3d57b80a3f..1568a4be1b 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/wintertodt/WintertodtPluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/wintertodt/WintertodtPluginTest.java @@ -80,10 +80,10 @@ public class WintertodtPluginTest { when(config.roundNotification()).thenReturn(15); - when(client.getVar(Varbits.WINTERTODT_TIMER)).thenReturn(35); + when(client.getVarbitValue(Varbits.WINTERTODT_TIMER)).thenReturn(35); wintertodtPlugin.onVarbitChanged(new VarbitChanged()); //(15 * 50) / 30 = ~25 - when(client.getVar(Varbits.WINTERTODT_TIMER)).thenReturn(25); + when(client.getVarbitValue(Varbits.WINTERTODT_TIMER)).thenReturn(25); wintertodtPlugin.onVarbitChanged(new VarbitChanged()); verify(notifier, times(1)).notify("Wintertodt round is about to start"); @@ -94,10 +94,10 @@ public class WintertodtPluginTest { when(config.roundNotification()).thenReturn(10); - when(client.getVar(Varbits.WINTERTODT_TIMER)).thenReturn(20); + when(client.getVarbitValue(Varbits.WINTERTODT_TIMER)).thenReturn(20); wintertodtPlugin.onVarbitChanged(new VarbitChanged()); //(10 * 50) / 30 = ~16 - when(client.getVar(Varbits.WINTERTODT_TIMER)).thenReturn(16); + when(client.getVarbitValue(Varbits.WINTERTODT_TIMER)).thenReturn(16); wintertodtPlugin.onVarbitChanged(new VarbitChanged()); verify(notifier, times(1)).notify("Wintertodt round is about to start"); @@ -108,10 +108,10 @@ public class WintertodtPluginTest { when(config.roundNotification()).thenReturn(5); - when(client.getVar(Varbits.WINTERTODT_TIMER)).thenReturn(10); + when(client.getVarbitValue(Varbits.WINTERTODT_TIMER)).thenReturn(10); wintertodtPlugin.onVarbitChanged(new VarbitChanged()); //(5 * 50) / 30 = ~8 - when(client.getVar(Varbits.WINTERTODT_TIMER)).thenReturn(8); + when(client.getVarbitValue(Varbits.WINTERTODT_TIMER)).thenReturn(8); wintertodtPlugin.onVarbitChanged(new VarbitChanged()); verify(notifier, times(1)).notify("Wintertodt round is about to start"); @@ -122,17 +122,17 @@ public class WintertodtPluginTest { when(config.roundNotification()).thenReturn(5); - when(client.getVar(Varbits.WINTERTODT_TIMER)).thenReturn(0); + when(client.getVarbitValue(Varbits.WINTERTODT_TIMER)).thenReturn(0); wintertodtPlugin.onVarbitChanged(new VarbitChanged()); - when(client.getVar(Varbits.WINTERTODT_TIMER)).thenReturn(10); + when(client.getVarbitValue(Varbits.WINTERTODT_TIMER)).thenReturn(10); wintertodtPlugin.onVarbitChanged(new VarbitChanged()); - when(client.getVar(Varbits.WINTERTODT_TIMER)).thenReturn(8); + when(client.getVarbitValue(Varbits.WINTERTODT_TIMER)).thenReturn(8); wintertodtPlugin.onVarbitChanged(new VarbitChanged()); - when(client.getVar(Varbits.WINTERTODT_TIMER)).thenReturn(6); + when(client.getVarbitValue(Varbits.WINTERTODT_TIMER)).thenReturn(6); wintertodtPlugin.onVarbitChanged(new VarbitChanged()); - when(client.getVar(Varbits.WINTERTODT_TIMER)).thenReturn(5); + when(client.getVarbitValue(Varbits.WINTERTODT_TIMER)).thenReturn(5); wintertodtPlugin.onVarbitChanged(new VarbitChanged()); - when(client.getVar(Varbits.WINTERTODT_TIMER)).thenReturn(4); + when(client.getVarbitValue(Varbits.WINTERTODT_TIMER)).thenReturn(4); wintertodtPlugin.onVarbitChanged(new VarbitChanged()); verify(notifier, times(1)).notify("Wintertodt round is about to start"); @@ -142,7 +142,7 @@ public class WintertodtPluginTest public void matchStartingNotification_shouldNotNotify_whenNoneOptionSelected() { when(config.roundNotification()).thenReturn(5); - when(client.getVar(Varbits.WINTERTODT_TIMER)).thenReturn(25); + when(client.getVarbitValue(Varbits.WINTERTODT_TIMER)).thenReturn(25); wintertodtPlugin.onVarbitChanged(new VarbitChanged()); verify(notifier, times(0)).notify("Wintertodt round is about to start");