diff --git a/cache-client/pom.xml b/cache-client/pom.xml
index 1daaf23e24..691bb1d95c 100644
--- a/cache-client/pom.xml
+++ b/cache-client/pom.xml
@@ -29,7 +29,7 @@
net.runelite
runelite-parent
- 1.5.22-SNAPSHOT
+ 1.5.23-SNAPSHOT
cache-client
diff --git a/cache-updater/pom.xml b/cache-updater/pom.xml
index fb3edeb171..9c925c8cb4 100644
--- a/cache-updater/pom.xml
+++ b/cache-updater/pom.xml
@@ -28,7 +28,7 @@
net.runelite
runelite-parent
- 1.5.22-SNAPSHOT
+ 1.5.23-SNAPSHOT
Cache Updater
diff --git a/cache/pom.xml b/cache/pom.xml
index 051e0bbcfc..efb80c0240 100644
--- a/cache/pom.xml
+++ b/cache/pom.xml
@@ -29,7 +29,7 @@
net.runelite
runelite-parent
- 1.5.22-SNAPSHOT
+ 1.5.23-SNAPSHOT
cache
diff --git a/http-api/pom.xml b/http-api/pom.xml
index bdebfd7020..abe47d6a61 100644
--- a/http-api/pom.xml
+++ b/http-api/pom.xml
@@ -28,7 +28,7 @@
net.runelite
runelite-parent
- 1.5.22-SNAPSHOT
+ 1.5.23-SNAPSHOT
Web API
diff --git a/http-service/pom.xml b/http-service/pom.xml
index c12a91fa11..81d8de533c 100644
--- a/http-service/pom.xml
+++ b/http-service/pom.xml
@@ -28,7 +28,7 @@
net.runelite
runelite-parent
- 1.5.22-SNAPSHOT
+ 1.5.23-SNAPSHOT
Web Service
diff --git a/pom.xml b/pom.xml
index 74d390ba97..b661e0729e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -28,7 +28,7 @@
net.runelite
runelite-parent
- 1.5.22-SNAPSHOT
+ 1.5.23-SNAPSHOT
pom
RuneLite
diff --git a/protocol-api/pom.xml b/protocol-api/pom.xml
index 09b1d2c28c..fae727ac70 100644
--- a/protocol-api/pom.xml
+++ b/protocol-api/pom.xml
@@ -29,7 +29,7 @@
net.runelite
runelite-parent
- 1.5.22-SNAPSHOT
+ 1.5.23-SNAPSHOT
protocol-api
diff --git a/protocol/pom.xml b/protocol/pom.xml
index 8416894b5e..814c33de88 100644
--- a/protocol/pom.xml
+++ b/protocol/pom.xml
@@ -29,7 +29,7 @@
net.runelite
runelite-parent
- 1.5.22-SNAPSHOT
+ 1.5.23-SNAPSHOT
protocol
diff --git a/runelite-api/pom.xml b/runelite-api/pom.xml
index 00117b581e..38f6ace8a7 100644
--- a/runelite-api/pom.xml
+++ b/runelite-api/pom.xml
@@ -29,7 +29,7 @@
net.runelite
runelite-parent
- 1.5.22-SNAPSHOT
+ 1.5.23-SNAPSHOT
runelite-api
diff --git a/runelite-api/src/main/java/net/runelite/api/AnimationID.java b/runelite-api/src/main/java/net/runelite/api/AnimationID.java
index 0a6060953a..ea8f955a9c 100644
--- a/runelite-api/src/main/java/net/runelite/api/AnimationID.java
+++ b/runelite-api/src/main/java/net/runelite/api/AnimationID.java
@@ -81,6 +81,8 @@ public final class AnimationID
public static final int CRAFTING_LEATHER = 1249;
public static final int CRAFTING_GLASSBLOWING = 884;
public static final int CRAFTING_SPINNING = 894;
+ public static final int CRAFTING_POTTERS_WHEEL = 883;
+ public static final int CRAFTING_POTTERY_OVEN = 24975;
public static final int SMITHING_SMELTING = 899;
public static final int SMITHING_CANNONBALL = 827; //cball smithing uses this and SMITHING_SMELTING
public static final int SMITHING_ANVIL = 898;
diff --git a/runelite-api/src/main/java/net/runelite/api/ObjectID.java b/runelite-api/src/main/java/net/runelite/api/ObjectID.java
index 5ceb5ee8bc..82bfa6b5d2 100644
--- a/runelite-api/src/main/java/net/runelite/api/ObjectID.java
+++ b/runelite-api/src/main/java/net/runelite/api/ObjectID.java
@@ -18575,5 +18575,6 @@ public final class ObjectID
public static final int STRANGE_CASKET = 34733;
public static final int INCONSPICUOUS_BUSH_BEGINNER = 34734;
public static final int STASH_BEGINNER = 34735;
+ public static final int ROCKS_34741 = 34741;
/* This file is automatically generated. Do not edit. */
}
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 7ef58aaf4e..8d33776269 100644
--- a/runelite-api/src/main/java/net/runelite/api/Varbits.java
+++ b/runelite-api/src/main/java/net/runelite/api/Varbits.java
@@ -34,583 +34,590 @@ import lombok.Getter;
@Getter
public enum Varbits
{
- /*
- * If chatbox is transparent or not
- */
- TRANSPARENT_CHATBOX(4608),
+ /*
+ * If chatbox is transparent or not
+ */
+ TRANSPARENT_CHATBOX(4608),
- /*
- * If the player has an active stamina potion effect or not
- */
- RUN_SLOWED_DEPLETION_ACTIVE(25),
+ /*
+ * If the player has an active stamina potion effect or not
+ */
+ RUN_SLOWED_DEPLETION_ACTIVE(25),
- /**
- * If scrollbar in resizable mode chat is on the left
- */
- CHAT_SCROLLBAR_ON_LEFT(6374),
+ /**
+ * If scrollbar in resizable mode chat is on the left
+ */
+ 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),
+ /**
+ * 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),
- /**
- * 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),
+ /**
+ * 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),
- /**
- * Diary Entries
- */
- DIARY_ARDOUGNE_EASY(4458),
- DIARY_ARDOUGNE_MEDIUM(4459),
- DIARY_ARDOUGNE_HARD(4460),
- DIARY_ARDOUGNE_ELITE(4461),
+ /**
+ * Diary Entries
+ */
+ DIARY_ARDOUGNE_EASY(4458),
+ DIARY_ARDOUGNE_MEDIUM(4459),
+ DIARY_ARDOUGNE_HARD(4460),
+ DIARY_ARDOUGNE_ELITE(4461),
- DIARY_DESERT_EASY(4483),
- DIARY_DESERT_MEDIUM(4484),
- DIARY_DESERT_HARD(4485),
- DIARY_DESERT_ELITE(4486),
+ DIARY_DESERT_EASY(4483),
+ DIARY_DESERT_MEDIUM(4484),
+ DIARY_DESERT_HARD(4485),
+ DIARY_DESERT_ELITE(4486),
- DIARY_FALADOR_EASY(4462),
- DIARY_FALADOR_MEDIUM(4463),
- DIARY_FALADOR_HARD(4464),
- DIARY_FALADOR_ELITE(4465),
+ DIARY_FALADOR_EASY(4462),
+ DIARY_FALADOR_MEDIUM(4463),
+ DIARY_FALADOR_HARD(4464),
+ DIARY_FALADOR_ELITE(4465),
- DIARY_FREMENNIK_EASY(4491),
- DIARY_FREMENNIK_MEDIUM(4492),
- DIARY_FREMENNIK_HARD(4493),
- DIARY_FREMENNIK_ELITE(4494),
+ DIARY_FREMENNIK_EASY(4491),
+ DIARY_FREMENNIK_MEDIUM(4492),
+ DIARY_FREMENNIK_HARD(4493),
+ DIARY_FREMENNIK_ELITE(4494),
- DIARY_KANDARIN_EASY(4475),
- DIARY_KANDARIN_MEDIUM(4476),
- DIARY_KANDARIN_HARD(4477),
- DIARY_KANDARIN_ELITE(4478),
+ DIARY_KANDARIN_EASY(4475),
+ DIARY_KANDARIN_MEDIUM(4476),
+ DIARY_KANDARIN_HARD(4477),
+ DIARY_KANDARIN_ELITE(4478),
- DIARY_KARAMJA_EASY(3578),
- DIARY_KARAMJA_MEDIUM(3599),
- DIARY_KARAMJA_HARD(3611),
- DIARY_KARAMJA_ELITE(4566),
+ DIARY_KARAMJA_EASY(3578),
+ DIARY_KARAMJA_MEDIUM(3599),
+ DIARY_KARAMJA_HARD(3611),
+ DIARY_KARAMJA_ELITE(4566),
- DIARY_LUMBRIDGE_EASY(4495),
- DIARY_LUMBRIDGE_MEDIUM(4496),
- DIARY_LUMBRIDGE_HARD(4497),
- DIARY_LUMBRIDGE_ELITE(4498),
+ DIARY_KOUREND_EASY(7925),
+ DIARY_KOUREND_MEDIUM(7926),
+ DIARY_KOUREND_HARD(7927),
+ DIARY_KOUREND_ELITE(7928),
- DIARY_MORYTANIA_EASY(4487),
- DIARY_MORYTANIA_MEDIUM(4488),
- DIARY_MORYTANIA_HARD(4489),
- DIARY_MORYTANIA_ELITE(4490),
+ DIARY_LUMBRIDGE_EASY(4495),
+ DIARY_LUMBRIDGE_MEDIUM(4496),
+ DIARY_LUMBRIDGE_HARD(4497),
+ DIARY_LUMBRIDGE_ELITE(4498),
- DIARY_VARROCK_EASY(4479),
- DIARY_VARROCK_MEDIUM(4480),
- DIARY_VARROCK_HARD(4481),
- DIARY_VARROCK_ELITE(4482),
+ DIARY_MORYTANIA_EASY(4487),
+ DIARY_MORYTANIA_MEDIUM(4488),
+ DIARY_MORYTANIA_HARD(4489),
+ DIARY_MORYTANIA_ELITE(4490),
- DIARY_WESTERN_EASY(4471),
- DIARY_WESTERN_MEDIUM(4472),
- DIARY_WESTERN_HARD(4473),
- DIARY_WESTERN_ELITE(4474),
+ DIARY_VARROCK_EASY(4479),
+ DIARY_VARROCK_MEDIUM(4480),
+ DIARY_VARROCK_HARD(4481),
+ DIARY_VARROCK_ELITE(4482),
- DIARY_WILDERNESS_EASY(4466),
- DIARY_WILDERNESS_MEDIUM(4467),
- DIARY_WILDERNESS_HARD(4468),
- DIARY_WILDERNESS_ELITE(4469),
+ DIARY_WESTERN_EASY(4471),
+ DIARY_WESTERN_MEDIUM(4472),
+ DIARY_WESTERN_HARD(4473),
+ DIARY_WESTERN_ELITE(4474),
- /**
- * Kourend house favours
- */
- KOUREND_FAVOR_ARCEUUS(4896),
- KOUREND_FAVOR_HOSIDIUS(4895),
- KOUREND_FAVOR_LOVAKENGJ(4898),
- KOUREND_FAVOR_PISCARILIUS(4899),
- KOUREND_FAVOR_SHAYZIEN(4894),
+ DIARY_WILDERNESS_EASY(4466),
+ DIARY_WILDERNESS_MEDIUM(4467),
+ DIARY_WILDERNESS_HARD(4468),
+ DIARY_WILDERNESS_ELITE(4469),
- /**
- * Equipped weapon type
- */
- EQUIPPED_WEAPON_TYPE(357),
+ /**
+ * Kourend house favours
+ */
+ KOUREND_FAVOR_ARCEUUS(4896),
+ KOUREND_FAVOR_HOSIDIUS(4895),
+ KOUREND_FAVOR_LOVAKENGJ(4898),
+ KOUREND_FAVOR_PISCARILIUS(4899),
+ KOUREND_FAVOR_SHAYZIEN(4894),
- /**
- * Defensive casting mode
- */
- DEFENSIVE_CASTING_MODE(2668),
+ /**
+ * Equipped weapon type
+ */
+ EQUIPPED_WEAPON_TYPE(357),
- /**
- * Options
- */
- SIDE_PANELS(4607),
+ /**
+ * Defensive casting mode
+ */
+ DEFENSIVE_CASTING_MODE(2668),
- /**
- * 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),
+ /**
+ * Options
+ */
+ SIDE_PANELS(4607),
- 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),
+ /**
+ * 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),
- HB_TRAIL_31363(5747),
- HB_TRAIL_31366(5748),
- HB_TRAIL_31369(5749),
- HB_TRAIL_31372(5750),
+ 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),
- HB_FINISH(5766),
- HB_STARTED(5767), //not working
+ HB_TRAIL_31363(5747),
+ HB_TRAIL_31366(5748),
+ HB_TRAIL_31369(5749),
+ HB_TRAIL_31372(5750),
- /**
- * Barbarian Assault
- */
- IN_GAME_BA(3923),
+ HB_FINISH(5766),
+ HB_STARTED(5767), //not working
- /**
- * 0 = Outside wilderness
- * 1 = In wilderness
- */
- IN_WILDERNESS(5963),
+ /**
+ * Barbarian Assault
+ */
+ IN_GAME_BA(3923),
- /**
- * Fishing Trawler
- * FISHING_TRAWLER_ACTIVITY Expected values: 0-255
- */
- FISHING_TRAWLER_ACTIVITY(3377),
+ /**
+ * 0 = Outside wilderness
+ * 1 = In wilderness
+ */
+ IN_WILDERNESS(5963),
- /**
- * 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
- */
- BAR_DISPENSER(936),
+ /**
+ * Fishing Trawler
+ * FISHING_TRAWLER_ACTIVITY Expected values: 0-255
+ */
+ FISHING_TRAWLER_ACTIVITY(3377),
- /**
- * Motherlode mine sack
- */
- SACK_NUMBER(5558),
- SACK_UPGRADED(5556),
+ /**
+ * 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
+ */
+ BAR_DISPENSER(936),
- /**
- * Experience tracker
- *
- * EXPERIENCE_TRACKER_POSITION expected values:
- * 0 = Right
- * 1 = Middle
- * 2 = Left
- */
- EXPERIENCE_TRACKER_POSITION(4692),
- EXPERIENCE_TRACKER_COUNTER(4697),
- EXPERIENCE_TRACKER_PROGRESS_BAR(4698),
+ /**
+ * Motherlode mine sack
+ */
+ SACK_NUMBER(5558),
+ SACK_UPGRADED(5556),
- /**
- * Experience drop color
- */
- EXPERIENCE_DROP_COLOR(4695),
+ /**
+ * Experience tracker
+ *
+ * EXPERIENCE_TRACKER_POSITION expected values:
+ * 0 = Right
+ * 1 = Middle
+ * 2 = Left
+ */
+ EXPERIENCE_TRACKER_POSITION(4692),
+ EXPERIENCE_TRACKER_COUNTER(4697),
+ EXPERIENCE_TRACKER_PROGRESS_BAR(4698),
- /**
- * Tithe Farm
- */
- TITHE_FARM_SACK_AMOUNT(4900),
- TITHE_FARM_SACK_ICON(5370),
- TITHE_FARM_POINTS(4893),
+ /**
+ * Experience drop color
+ */
+ EXPERIENCE_DROP_COLOR(4695),
- /**
- * Blast Mine
- */
- BLAST_MINE_COAL(4924),
- BLAST_MINE_GOLD(4925),
- BLAST_MINE_MITHRIL(4926),
- BLAST_MINE_ADAMANTITE(4921),
- BLAST_MINE_RUNITE(4922),
+ /**
+ * Tithe Farm
+ */
+ TITHE_FARM_SACK_AMOUNT(4900),
+ TITHE_FARM_SACK_ICON(5370),
+ TITHE_FARM_POINTS(4893),
- /**
- * Raids
- */
- IN_RAID(5432),
- TOTAL_POINTS(5431),
- PERSONAL_POINTS(5422),
- RAID_PARTY_SIZE(5424),
+ /**
+ * Blast Mine
+ */
+ BLAST_MINE_COAL(4924),
+ BLAST_MINE_GOLD(4925),
+ BLAST_MINE_MITHRIL(4926),
+ BLAST_MINE_ADAMANTITE(4921),
+ BLAST_MINE_RUNITE(4922),
- /**
- * Theatre of Blood 1=In Party, 2=Inside/Spectator, 3=Dead Spectating
- */
- THEATRE_OF_BLOOD(6440),
+ /**
+ * Raids
+ */
+ IN_RAID(5432),
+ TOTAL_POINTS(5431),
+ PERSONAL_POINTS(5422),
+ RAID_PARTY_SIZE(5424),
- /**
- * Nightmare Zone
- */
- NMZ_ABSORPTION(3956),
- NMZ_POINTS(3949),
- NMZ_OVERLOAD(3955),
+ /**
+ * Theatre of Blood 1=In Party, 2=Inside/Spectator, 3=Dead Spectating
+ */
+ THEATRE_OF_BLOOD(6440),
- /**
- * 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),
+ /**
+ * Nightmare Zone
+ */
+ NMZ_ABSORPTION(3956),
+ NMZ_POINTS(3949),
+ NMZ_OVERLOAD(3955),
- 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),
+ /**
+ * 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),
- BLAST_FURNACE_COFFER(5357),
+ 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),
- /**
- * Pyramid plunder
- */
- PYRAMID_PLUNDER_TIMER(2375),
- PYRAMID_PLUNDER_ROOM(2377),
+ BLAST_FURNACE_COFFER(5357),
- /**
- * 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),
+ /**
+ * Pyramid plunder
+ */
+ PYRAMID_PLUNDER_TIMER(2375),
+ PYRAMID_PLUNDER_ROOM(2377),
- /**
- * Spicy stew ingredients
- */
- SPICY_STEW_RED_SPICES(1879),
- SPICY_STEW_YELLOW_SPICES(1880),
- SPICY_STEW_BROWN_SPICES(1881),
- SPICY_STEW_ORANGE_SPICES(1882),
+ /**
+ * 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),
- /**
- * Multicombat area
- */
- MULTICOMBAT_AREA(4605),
+ /**
+ * Spicy stew ingredients
+ */
+ SPICY_STEW_RED_SPICES(1879),
+ SPICY_STEW_YELLOW_SPICES(1880),
+ SPICY_STEW_BROWN_SPICES(1881),
+ SPICY_STEW_ORANGE_SPICES(1882),
- /**
- * In the Wilderness
- */
- IN_THE_WILDERNESS(5963),
+ /**
+ * Multicombat area
+ */
+ MULTICOMBAT_AREA(4605),
- /**
- * Kingdom Management
- */
- KINGDOM_FAVOR(72),
- KINGDOM_COFFER(74),
+ /**
+ * In the Wilderness
+ */
+ IN_THE_WILDERNESS(5963),
- /**
- * The Hand in the Sand quest status
- */
- QUEST_THE_HAND_IN_THE_SAND(1527),
+ /**
+ * Kingdom Management
+ */
+ KINGDOM_FAVOR(72),
+ KINGDOM_COFFER(74),
- /**
- * 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_ARROWS_STATE(4563),
- DAILY_FLAX_STATE(4559),
- /**
- * 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),
+ /**
+ * The Hand in the Sand quest status
+ */
+ QUEST_THE_HAND_IN_THE_SAND(1527),
- /**
- * 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
+ /**
+ * 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_ARROWS_STATE(4563),
+ DAILY_FLAX_STATE(4559),
+ /**
+ * 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),
- /**
- * 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),
+ DAILY_DYNAMITE_COLLECTED(7939),
- /**
- * 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),
+ /**
+ * 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
- /**
- * Automatically weed farming patches
- */
- AUTOWEED(5557),
+ /**
+ * 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),
- /**
- * The varbit that stores the players {@code AccountType}.
- */
- ACCOUNT_TYPE(1777),
+ /**
+ * 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),
+
+ /**
+ * Automatically weed farming patches
+ */
+ AUTOWEED(5557),
+
+ /**
+ * The varbit that stores the players {@code AccountType}.
+ */
+ ACCOUNT_TYPE(1777),
/**
* Varbit used for Slayer reward points
*/
SLAYER_REWARD_POINTS(4068),
- /**
- * The varbit that stores the oxygen percentage for player
- */
- OXYGEN_LEVEL(5811),
-
- /**
- * Corp beast damage
- */
- CORP_DAMAGE(999),
-
- /**
- * Toggleable slayer unlocks
- */
- SUPERIOR_ENABLED(5362),
- FOSSIL_ISLAND_WYVERN_DISABLE(6251),
-
- CURRENT_BANK_TAB(4150),
-
- WORLDHOPPER_FAVROITE_1(4597),
- WORLDHOPPER_FAVROITE_2(4598),
-
- /**
- * Vengeance is active
- */
- VENGEANCE_ACTIVE(2450),
-
- /**
- * Spell cooldowns
- */
- VENGEANCE_COOLDOWN(2451),
-
/**
- * 0 = standard
- * 1 = ancients
- * 2 = lunars
- * 3 = arrceus
- **/
- SPELLBOOK_ID(4070),
-
+ * The varbit that stores the oxygen percentage for player
+ */
+ OXYGEN_LEVEL(5811),
+
/**
- * 0 = no
- * 1 = yes
- **/
+ * Corp beast damage
+ */
+ CORP_DAMAGE(999),
+
+ /**
+ * Toggleable slayer unlocks
+ */
+ SUPERIOR_ENABLED(5362),
+ FOSSIL_ISLAND_WYVERN_DISABLE(6251),
+
+ CURRENT_BANK_TAB(4150),
+
+ WORLDHOPPER_FAVROITE_1(4597),
+ WORLDHOPPER_FAVROITE_2(4598),
+
+ /**
+ * Vengeance is active
+ */
+ VENGEANCE_ACTIVE(2450),
+
+ /**
+ * Spell cooldowns
+ */
+ VENGEANCE_COOLDOWN(2451),
+
+ /**
+ * 0 = standard
+ * 1 = ancients
+ * 2 = lunars
+ * 3 = arrceus
+ **/
+ SPELLBOOK_ID(4070),
+
+ /**
+ * 0 = no
+ * 1 = yes
+ **/
SPELLBOOK_HIDDEN(6718),
- /**
- * 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),
+ /**
+ * 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),
- /**
- * Type of GE offer currently being created
- * 0 = buy
- * 1 = sell
- */
- GE_OFFER_CREATION_TYPE(4397),
+ /**
+ * Type of GE offer currently being created
+ * 0 = buy
+ * 1 = sell
+ */
+ GE_OFFER_CREATION_TYPE(4397),
- /**
- * Spells being auto-casted
- */
- AUTO_CAST_SPELL(276),
+ /**
+ * Spells being auto-casted
+ */
+ AUTO_CAST_SPELL(276),
- /**
- * The active tab within the quest interface
- */
- QUEST_TAB(8168),
+ /**
+ * The active tab within the quest interface
+ */
+ QUEST_TAB(8168),
- /**
- * Temple Trekking
- */
- TREK_POINTS(1955),
- TREK_STARTED(1956),
- TREK_EVENT(1958),
- TREK_STATUS(6719),
- BLOAT_ENTERED_ROOM(6447),
+ /**
+ * Temple Trekking
+ */
+ TREK_POINTS(1955),
+ TREK_STARTED(1956),
+ TREK_EVENT(1958),
+ TREK_STATUS(6719),
+ BLOAT_ENTERED_ROOM(6447),
- /**
- * f2p Quest varbits, these don't hold the completion value.
- */
- QUEST_DEMON_SLAYER(2561),
- QUEST_GOBLIN_DIPLOMACY(2378),
- QUEST_MISTHALIN_MYSTERY(3468),
- QUEST_THE_CORSAIR_CURSE(6071),
- QUEST_X_MARKS_THE_SPOT(8063),
+ /**
+ * f2p Quest varbits, these don't hold the completion value.
+ */
+ QUEST_DEMON_SLAYER(2561),
+ QUEST_GOBLIN_DIPLOMACY(2378),
+ QUEST_MISTHALIN_MYSTERY(3468),
+ QUEST_THE_CORSAIR_CURSE(6071),
+ QUEST_X_MARKS_THE_SPOT(8063),
- /**
- * member Quest varbits, these don't hold the completion value.
- */
- QUEST_ANIMAL_MAGNETISM(3185),
- QUEST_BETWEEN_A_ROCK(299),
- QUEST_CONTACT(3274),
- QUEST_ZOGRE_FLESH_EATERS(487),
- QUEST_DARKNESS_OF_HALLOWVALE(2573),
- QUEST_DEATH_TO_THE_DORGESHUUN(2258),
- QUEST_DESERT_TREASURE(358),
- QUEST_DEVIOUS_MINDS(1465),
- QUEST_EAGLES_PEAK(2780),
- QUEST_ELEMENTAL_WORKSHOP_II(2639),
- QUEST_ENAKHRAS_LAMENT(1560),
- QUEST_ENLIGHTENED_JOURNEY(2866),
- QUEST_THE_EYES_OF_GLOUPHRIE(2497),
- QUEST_FAIRYTALE_I_GROWING_PAINS(1803),
- QUEST_FAIRYTALE_II_CURE_A_QUEEN(2326),
- QUEST_THE_FEUD(334),
- QUEST_FORGETTABLE_TALE(822),
- QUEST_GARDEN_OF_TRANQUILLITY(961),
- QUEST_GHOSTS_AHOY(217),
- QUEST_THE_GIANT_DWARF(571),
- QUEST_THE_GOLEM(346),
- QUEST_HORROR_FROM_THE_DEEP(34),
- QUEST_ICTHLARINS_LITTLE_HELPER(418),
- QUEST_IN_AID_OF_THE_MYREQUE(1990),
- QUEST_THE_LOST_TRIBE(532),
- QUEST_LUNAR_DIPLOMACY(2448),
- QUEST_MAKING_HISTORY(1383),
- QUEST_MOUNTAIN_DAUGHTER(260),
- QUEST_MOURNINGS_ENDS_PART_II(1103),
- QUEST_MY_ARMS_BIG_ADVENTURE(2790),
- QUEST_RATCATCHERS(1404),
- QUEST_RECIPE_FOR_DISASTER(1850),
- QUEST_RECRUITMENT_DRIVE(657),
- QUEST_ROYAL_TROUBLE(2140),
- QUEST_THE_SLUG_MENACE(2610),
- QUEST_SHADOW_OF_THE_STORM(1372),
- QUEST_A_SOULS_BANE(2011),
- QUEST_SPIRITS_OF_THE_ELID(1444),
- QUEST_SWAN_SONG(2098),
- QUEST_A_TAIL_OF_TWO_CATS(1028),
- QUEST_TEARS_OF_GUTHIX(451),
- QUEST_WANTED(1051),
- QUEST_COLD_WAR(3293),
- QUEST_THE_FREMENNIK_ISLES(3311),
- QUEST_TOWER_OF_LIFE(3337),
- QUEST_WHAT_LIES_BELOW(3523),
- QUEST_OLAFS_QUEST(3534),
- QUEST_ANOTHER_SLICE_OF_HAM(3550),
- QUEST_DREAM_MENTOR(3618),
- QUEST_GRIM_TALES(2783),
- QUEST_KINGS_RANSOM(3888),
- QUEST_MONKEY_MADNESS_II(5027),
- QUEST_CLIENT_OF_KOUREND(5619),
- QUEST_BONE_VOYAGE(5795),
- QUEST_THE_QUEEN_OF_THIEVES(6037),
- QUEST_THE_DEPTHS_OF_DESPAIR(6027),
- QUEST_DRAGON_SLAYER_II(6104),
- QUEST_TALE_OF_THE_RIGHTEOUS(6358),
- QUEST_A_TASTE_OF_HOPE(6396),
- QUEST_MAKING_FRIENDS_WITH_MY_ARM(6528),
- QUEST_THE_ASCENT_OF_ARCEUUS(7856),
- QUEST_THE_FORSAKEN_TOWER(7796),
+ /**
+ * member Quest varbits, these don't hold the completion value.
+ */
+ QUEST_ANIMAL_MAGNETISM(3185),
+ QUEST_BETWEEN_A_ROCK(299),
+ QUEST_CONTACT(3274),
+ QUEST_ZOGRE_FLESH_EATERS(487),
+ QUEST_DARKNESS_OF_HALLOWVALE(2573),
+ QUEST_DEATH_TO_THE_DORGESHUUN(2258),
+ QUEST_DESERT_TREASURE(358),
+ QUEST_DEVIOUS_MINDS(1465),
+ QUEST_EAGLES_PEAK(2780),
+ QUEST_ELEMENTAL_WORKSHOP_II(2639),
+ QUEST_ENAKHRAS_LAMENT(1560),
+ QUEST_ENLIGHTENED_JOURNEY(2866),
+ QUEST_THE_EYES_OF_GLOUPHRIE(2497),
+ QUEST_FAIRYTALE_I_GROWING_PAINS(1803),
+ QUEST_FAIRYTALE_II_CURE_A_QUEEN(2326),
+ QUEST_THE_FEUD(334),
+ QUEST_FORGETTABLE_TALE(822),
+ QUEST_GARDEN_OF_TRANQUILLITY(961),
+ QUEST_GHOSTS_AHOY(217),
+ QUEST_THE_GIANT_DWARF(571),
+ QUEST_THE_GOLEM(346),
+ QUEST_HORROR_FROM_THE_DEEP(34),
+ QUEST_ICTHLARINS_LITTLE_HELPER(418),
+ QUEST_IN_AID_OF_THE_MYREQUE(1990),
+ QUEST_THE_LOST_TRIBE(532),
+ QUEST_LUNAR_DIPLOMACY(2448),
+ QUEST_MAKING_HISTORY(1383),
+ QUEST_MOUNTAIN_DAUGHTER(260),
+ QUEST_MOURNINGS_ENDS_PART_II(1103),
+ QUEST_MY_ARMS_BIG_ADVENTURE(2790),
+ QUEST_RATCATCHERS(1404),
+ QUEST_RECIPE_FOR_DISASTER(1850),
+ QUEST_RECRUITMENT_DRIVE(657),
+ QUEST_ROYAL_TROUBLE(2140),
+ QUEST_THE_SLUG_MENACE(2610),
+ QUEST_SHADOW_OF_THE_STORM(1372),
+ QUEST_A_SOULS_BANE(2011),
+ QUEST_SPIRITS_OF_THE_ELID(1444),
+ QUEST_SWAN_SONG(2098),
+ QUEST_A_TAIL_OF_TWO_CATS(1028),
+ QUEST_TEARS_OF_GUTHIX(451),
+ QUEST_WANTED(1051),
+ QUEST_COLD_WAR(3293),
+ QUEST_THE_FREMENNIK_ISLES(3311),
+ QUEST_TOWER_OF_LIFE(3337),
+ QUEST_WHAT_LIES_BELOW(3523),
+ QUEST_OLAFS_QUEST(3534),
+ QUEST_ANOTHER_SLICE_OF_HAM(3550),
+ QUEST_DREAM_MENTOR(3618),
+ QUEST_GRIM_TALES(2783),
+ QUEST_KINGS_RANSOM(3888),
+ QUEST_MONKEY_MADNESS_II(5027),
+ QUEST_CLIENT_OF_KOUREND(5619),
+ QUEST_BONE_VOYAGE(5795),
+ QUEST_THE_QUEEN_OF_THIEVES(6037),
+ QUEST_THE_DEPTHS_OF_DESPAIR(6027),
+ QUEST_DRAGON_SLAYER_II(6104),
+ QUEST_TALE_OF_THE_RIGHTEOUS(6358),
+ QUEST_A_TASTE_OF_HOPE(6396),
+ QUEST_MAKING_FRIENDS_WITH_MY_ARM(6528),
+ QUEST_THE_ASCENT_OF_ARCEUUS(7856),
+ QUEST_THE_FORSAKEN_TOWER(7796),
- /**
- * mini-quest varbits, these don't hold the completion value.
- */
- QUEST_ARCHITECTURAL_ALLIANCE(4982),
- QUEST_BEAR_YOUR_SOUL(5078),
- QUEST_CURSE_OF_THE_EMPTY_LORD(821),
- QUEST_ENCHANTED_KEY(1391),
- QUEST_THE_GENERALS_SHADOW(3330),
- QUEST_SKIPPY_AND_THE_MOGRES(1344),
- QUEST_LAIR_OF_TARN_RAZORLOR(3290),
- QUEST_FAMILY_PEST(5347),
- QUEST_THE_MAGE_ARENA_II(6067),
+ /**
+ * mini-quest varbits, these don't hold the completion value.
+ */
+ QUEST_ARCHITECTURAL_ALLIANCE(4982),
+ QUEST_BEAR_YOUR_SOUL(5078),
+ QUEST_CURSE_OF_THE_EMPTY_LORD(821),
+ QUEST_ENCHANTED_KEY(1391),
+ QUEST_THE_GENERALS_SHADOW(3330),
+ QUEST_SKIPPY_AND_THE_MOGRES(1344),
+ QUEST_LAIR_OF_TARN_RAZORLOR(3290),
+ QUEST_FAMILY_PEST(5347),
+ QUEST_THE_MAGE_ARENA_II(6067),
/**
* Active spellbook (see enumID)
@@ -622,8 +629,8 @@ public enum Varbits
*/
FILTER_SPELLBOOK(6718);
- /**
- * The raw varbit ID.
- */
- private final int id;
-}
+ /**
+ * The raw varbit ID.
+ */
+ private final int id;
+}
\ No newline at end of file
diff --git a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java
index 3f43b97ee8..68ae8c1b85 100644
--- a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java
+++ b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetID.java
@@ -136,7 +136,8 @@ public class WidgetID
public static final int MUSIC_GROUP_ID = 239;
public static final int MUSICTAB_GROUP_ID = 239;
public static final int BARROWS_PUZZLE_GROUP_ID = 25;
- public static final int ITEMS_KEPT_ON_DEATH_GROUP_ID = 4;
+ public static final int KEPT_ON_DEATH_GROUP_ID = 4;
+ public static final int GUIDE_PRICE_GROUP_ID = 464;
static class WorldMap
{
@@ -228,9 +229,9 @@ public class WidgetID
static class ClanChat
{
static final int TITLE = 1;
- static final int NAME = 3;
- static final int OWNER = 5;
- static final int LIST = 15;
+ static final int NAME = 4;
+ static final int OWNER = 6;
+ static final int LIST = 16;
}
static class Bank
@@ -306,6 +307,7 @@ public class WidgetID
{
static final int EMOTE_WINDOW = 0;
static final int EMOTE_CONTAINER = 1;
+ static final int EMOTE_SCROLLBAR = 2;
}
static class Cluescroll
@@ -981,6 +983,7 @@ public class WidgetID
{
static final int CONTAINER = 0;
static final int LIST = 3;
+ static final int SCROLLBAR = 4;
}
static class Barrows_Puzzle
diff --git a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java
index 895de6f1de..1bd7cfa25a 100644
--- a/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java
+++ b/runelite-api/src/main/java/net/runelite/api/widgets/WidgetInfo.java
@@ -76,9 +76,11 @@ public enum WidgetInfo
EMOTE_WINDOW(WidgetID.EMOTES_GROUP_ID, WidgetID.Emotes.EMOTE_WINDOW),
EMOTE_CONTAINER(WidgetID.EMOTES_GROUP_ID, WidgetID.Emotes.EMOTE_CONTAINER),
+ EMOTE_SCROLLBAR(WidgetID.EMOTES_GROUP_ID, WidgetID.Emotes.EMOTE_SCROLLBAR),
MUSIC_WINDOW(WidgetID.MUSIC_GROUP_ID, WidgetID.Music.CONTAINER),
MUSIC_TRACK_LIST(WidgetID.MUSIC_GROUP_ID, WidgetID.Music.LIST),
+ MUSIC_TRACK_SCROLLBAR(WidgetID.MUSIC_GROUP_ID, WidgetID.Music.SCROLLBAR),
DIARY_QUEST_WIDGET_TITLE(WidgetID.DIARY_QUEST_GROUP_ID, WidgetID.Diary.DIARY_TITLE),
DIARY_QUEST_WIDGET_TEXT(WidgetID.DIARY_QUEST_GROUP_ID, WidgetID.Diary.DIARY_TEXT),
@@ -684,13 +686,13 @@ public enum WidgetInfo
EQUIPMENT_MAGIC_DAMAGE(WidgetID.EQUIPMENT_PAGE_GROUP_ID, WidgetID.EquipmentWidgetIdentifiers.MAGIC_DAMAGE),
EQUIP_YOUR_CHARACTER(WidgetID.EQUIPMENT_PAGE_GROUP_ID, WidgetID.EquipmentWidgetIdentifiers.EQUIP_YOUR_CHARACTER),
- ITEMS_KEPT_ON_DEATH_CONTAINER(WidgetID.ITEMS_KEPT_ON_DEATH_GROUP_ID, WidgetID.KeptOnDeath.KEPT_ITEMS_CONTAINER),
- ITEMS_LOST_ON_DEATH_CONTAINER(WidgetID.ITEMS_KEPT_ON_DEATH_GROUP_ID, WidgetID.KeptOnDeath.LOST_ITEMS_CONTAINER),
- ITEMS_KEPT_INFORMATION_CONTAINER(WidgetID.ITEMS_KEPT_ON_DEATH_GROUP_ID, WidgetID.KeptOnDeath.INFORMATION_CONTAINER),
- ITEMS_KEPT_SAFE_ZONE_CONTAINER(WidgetID.ITEMS_KEPT_ON_DEATH_GROUP_ID, WidgetID.KeptOnDeath.SAFE_ZONE_CONTAINER),
- ITEMS_KEPT_CUSTOM_TEXT_CONTAINER(WidgetID.ITEMS_KEPT_ON_DEATH_GROUP_ID, WidgetID.KeptOnDeath.CUSTOM_TEXT_CONTAINER),
- ITEMS_LOST_VALUE(WidgetID.ITEMS_KEPT_ON_DEATH_GROUP_ID, WidgetID.KeptOnDeath.LOST_ITEMS_VALUE),
- ITEMS_KEPT_MAX(WidgetID.ITEMS_KEPT_ON_DEATH_GROUP_ID, WidgetID.KeptOnDeath.MAX_ITEMS_KEPT_ON_DEATH);
+ ITEMS_KEPT_ON_DEATH_CONTAINER(WidgetID.KEPT_ON_DEATH_GROUP_ID, WidgetID.KeptOnDeath.KEPT_ITEMS_CONTAINER),
+ ITEMS_LOST_ON_DEATH_CONTAINER(WidgetID.KEPT_ON_DEATH_GROUP_ID, WidgetID.KeptOnDeath.LOST_ITEMS_CONTAINER),
+ ITEMS_KEPT_INFORMATION_CONTAINER(WidgetID.KEPT_ON_DEATH_GROUP_ID, WidgetID.KeptOnDeath.INFORMATION_CONTAINER),
+ ITEMS_KEPT_SAFE_ZONE_CONTAINER(WidgetID.KEPT_ON_DEATH_GROUP_ID, WidgetID.KeptOnDeath.SAFE_ZONE_CONTAINER),
+ ITEMS_KEPT_CUSTOM_TEXT_CONTAINER(WidgetID.KEPT_ON_DEATH_GROUP_ID, WidgetID.KeptOnDeath.CUSTOM_TEXT_CONTAINER),
+ ITEMS_LOST_VALUE(WidgetID.KEPT_ON_DEATH_GROUP_ID, WidgetID.KeptOnDeath.LOST_ITEMS_VALUE),
+ ITEMS_KEPT_MAX(WidgetID.KEPT_ON_DEATH_GROUP_ID, WidgetID.KeptOnDeath.MAX_ITEMS_KEPT_ON_DEATH);
private final int groupId;
private final int childId;
diff --git a/runelite-client/pom.xml b/runelite-client/pom.xml
index 3a595bbaae..ddd164c7f0 100644
--- a/runelite-client/pom.xml
+++ b/runelite-client/pom.xml
@@ -29,7 +29,7 @@
net.runelite
runelite-parent
- 1.5.22-SNAPSHOT
+ 1.5.23-SNAPSHOT
client
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanChatPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanChatPlugin.java
index 3217d70a91..1ec94fad94 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanChatPlugin.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/clanchat/ClanChatPlugin.java
@@ -28,8 +28,8 @@ import java.awt.image.*;
public class ClanChatPlugin extends Plugin
{
private static final int MAX_CHATS = 10;
- private static final String CLAN_CHAT_TITLE = "Clan Chat";
- private static final String RECENT_TITLE = "Recent Clan Chats";
+ private static final String CLAN_CHAT_TITLE = "CC";
+ private static final String RECENT_TITLE = "Recent CCs";
private static final int JOIN_LEAVE_DURATION = 20;
private static final int MESSAGE_DELAY = 10;
@Inject
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollEmoteOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollEmoteOverlay.java
index 4528b0a7be..ecaa85b8ba 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollEmoteOverlay.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollEmoteOverlay.java
@@ -41,6 +41,8 @@ class ClueScrollEmoteOverlay extends Overlay
private final ClueScrollPlugin plugin;
private final Client client;
+ private boolean hasScrolled;
+
@Inject
private ClueScrollEmoteOverlay(ClueScrollPlugin plugin, Client client)
{
@@ -57,6 +59,7 @@ class ClueScrollEmoteOverlay extends Overlay
if (!(clue instanceof EmoteClue))
{
+ hasScrolled = false;
return null;
}
@@ -81,19 +84,29 @@ class ClueScrollEmoteOverlay extends Overlay
return null;
}
+ Widget firstEmoteWidget = null;
+ Widget secondEmoteWidget = null;
+
for (Widget emoteWidget : emoteContainer.getDynamicChildren())
{
if (emoteWidget.getSpriteId() == emoteClue.getFirstEmote().getSpriteId())
{
+ firstEmoteWidget = emoteWidget;
plugin.highlightWidget(graphics, emoteWidget, emoteWindow, null,
emoteClue.getSecondEmote() != null ? "1st" : null);
}
else if (emoteClue.getSecondEmote() != null
&& emoteWidget.getSpriteId() == emoteClue.getSecondEmote().getSpriteId())
{
+ secondEmoteWidget = emoteWidget;
plugin.highlightWidget(graphics, emoteWidget, emoteWindow, null, "2nd");
}
}
+ if (!hasScrolled)
+ {
+ hasScrolled = true;
+ plugin.scrollToWidget(WidgetInfo.EMOTE_CONTAINER, WidgetInfo.EMOTE_SCROLLBAR, firstEmoteWidget, secondEmoteWidget);
+ }
return null;
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollMusicOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollMusicOverlay.java
index f220399f72..2b44290fb5 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollMusicOverlay.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollMusicOverlay.java
@@ -44,6 +44,8 @@ class ClueScrollMusicOverlay extends Overlay
private final ClueScrollPlugin plugin;
private final Client client;
+ private boolean hasScrolled;
+
@Inject
private ClueScrollMusicOverlay(ClueScrollPlugin plugin, Client client)
{
@@ -60,6 +62,7 @@ class ClueScrollMusicOverlay extends Overlay
if (!(clue instanceof MusicClue))
{
+ hasScrolled = false;
return null;
}
@@ -95,6 +98,11 @@ class ClueScrollMusicOverlay extends Overlay
return null;
}
+ if (!hasScrolled)
+ {
+ hasScrolled = true;
+ plugin.scrollToWidget(WidgetInfo.MUSIC_TRACK_LIST, WidgetInfo.MUSIC_TRACK_SCROLLBAR, found);
+ }
plugin.highlightWidget(graphics, found, trackList, PADDING, null);
return null;
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java
index 4cd33c3b06..d060f1a3e4 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/ClueScrollPlugin.java
@@ -55,6 +55,7 @@ import net.runelite.api.NPC;
import net.runelite.api.ObjectComposition;
import net.runelite.api.Point;
import net.runelite.api.Scene;
+import net.runelite.api.ScriptID;
import net.runelite.api.Tile;
import net.runelite.api.TileObject;
import net.runelite.api.coords.LocalPoint;
@@ -81,6 +82,7 @@ import net.runelite.client.plugins.cluescrolls.clues.CoordinateClue;
import net.runelite.client.plugins.cluescrolls.clues.CrypticClue;
import net.runelite.client.plugins.cluescrolls.clues.EmoteClue;
import net.runelite.client.plugins.cluescrolls.clues.FairyRingClue;
+import net.runelite.client.plugins.cluescrolls.clues.FaloTheBardClue;
import net.runelite.client.plugins.cluescrolls.clues.HotColdClue;
import net.runelite.client.plugins.cluescrolls.clues.LocationClueScroll;
import net.runelite.client.plugins.cluescrolls.clues.LocationsClueScroll;
@@ -507,6 +509,13 @@ public class ClueScrollPlugin extends Plugin
return fairyRingClue;
}
+ final FaloTheBardClue faloTheBardClue = FaloTheBardClue.forText(text);
+
+ if (faloTheBardClue != null)
+ {
+ return faloTheBardClue;
+ }
+
final HotColdClue hotColdClue = HotColdClue.forText(text);
if (hotColdClue != null)
@@ -739,4 +748,33 @@ public class ClueScrollPlugin extends Plugin
textComponent.setText(text);
textComponent.render(graphics);
}
+
+ void scrollToWidget(WidgetInfo list, WidgetInfo scrollbar, Widget ... toHighlight)
+ {
+ final Widget parent = client.getWidget(list);
+ int averageCentralY = 0;
+ int nonnullCount = 0;
+ for (Widget widget : toHighlight)
+ {
+ if (widget != null)
+ {
+ averageCentralY += widget.getRelativeY() + widget.getHeight() / 2;
+ nonnullCount += 1;
+ }
+ }
+ if (nonnullCount == 0)
+ {
+ return;
+ }
+ averageCentralY /= nonnullCount;
+ final int newScroll = Math.max(0, Math.min(parent.getScrollHeight(),
+ averageCentralY - parent.getHeight() / 2));
+
+ client.runScript(
+ ScriptID.UPDATE_SCROLLBAR,
+ scrollbar.getId(),
+ list.getId(),
+ newScroll
+ );
+ }
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/FaloTheBardClue.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/FaloTheBardClue.java
new file mode 100644
index 0000000000..68ad2e0af8
--- /dev/null
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/FaloTheBardClue.java
@@ -0,0 +1,202 @@
+/*
+ * Copyright (c) 2019, Twiglet1022
+ * 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.cluescrolls.clues;
+
+import com.google.common.collect.ImmutableList;
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.util.List;
+import javax.annotation.Nonnull;
+import lombok.Getter;
+import net.runelite.api.Item;
+import static net.runelite.api.ItemID.ARMADYL_HELMET;
+import static net.runelite.api.ItemID.BARRELCHEST_ANCHOR;
+import static net.runelite.api.ItemID.BARROWS_GLOVES;
+import static net.runelite.api.ItemID.BASALT;
+import static net.runelite.api.ItemID.BOOK_OF_BALANCE;
+import static net.runelite.api.ItemID.BOOK_OF_DARKNESS;
+import static net.runelite.api.ItemID.BOOK_OF_LAW;
+import static net.runelite.api.ItemID.BOOK_OF_WAR;
+import static net.runelite.api.ItemID.COOKING_GAUNTLETS;
+import static net.runelite.api.ItemID.CRYSTAL_BOW_110;
+import static net.runelite.api.ItemID.CRYSTAL_BOW_110_I;
+import static net.runelite.api.ItemID.DRAGON_DEFENDER;
+import static net.runelite.api.ItemID.DRAGON_SCIMITAR;
+import static net.runelite.api.ItemID.FIGHTER_TORSO;
+import static net.runelite.api.ItemID.GREENMANS_ALEM;
+import static net.runelite.api.ItemID.HOLY_BOOK;
+import static net.runelite.api.ItemID.INFERNAL_AXE;
+import static net.runelite.api.ItemID.IVANDIS_FLAIL;
+import static net.runelite.api.ItemID.LAVA_DRAGON_BONES;
+import static net.runelite.api.ItemID.MARK_OF_GRACE;
+import static net.runelite.api.ItemID.NEW_CRYSTAL_BOW;
+import static net.runelite.api.ItemID.NEW_CRYSTAL_BOW_I;
+import static net.runelite.api.ItemID.NUMULITE;
+import static net.runelite.api.ItemID.ROD_OF_IVANDIS_1;
+import static net.runelite.api.ItemID.ROD_OF_IVANDIS_10;
+import static net.runelite.api.ItemID.RUNE_PLATEBODY;
+import static net.runelite.api.ItemID.TZHAARKETOM;
+import static net.runelite.api.ItemID.UNHOLY_BOOK;
+import static net.runelite.api.ItemID.WARRIOR_GUILD_TOKEN;
+import net.runelite.api.NPC;
+import net.runelite.api.coords.WorldPoint;
+import static net.runelite.client.plugins.cluescrolls.ClueScrollOverlay.TITLED_CONTENT_COLOR;
+import net.runelite.client.plugins.cluescrolls.ClueScrollPlugin;
+import static net.runelite.client.plugins.cluescrolls.ClueScrollWorldOverlay.IMAGE_Z_OFFSET;
+import net.runelite.client.plugins.cluescrolls.clues.emote.AnyRequirementCollection;
+import net.runelite.client.plugins.cluescrolls.clues.emote.ItemRequirement;
+import net.runelite.client.plugins.cluescrolls.clues.emote.RangeItemRequirement;
+import net.runelite.client.plugins.cluescrolls.clues.emote.SingleItemRequirement;
+import net.runelite.client.ui.overlay.OverlayUtil;
+import net.runelite.client.ui.overlay.components.LineComponent;
+import net.runelite.client.ui.overlay.components.PanelComponent;
+import net.runelite.client.ui.overlay.components.TitleComponent;
+
+@Getter
+public class FaloTheBardClue extends ClueScroll implements TextClueScroll, NpcClueScroll
+{
+ private static final List CLUES = ImmutableList.of(
+ new FaloTheBardClue("A blood red weapon, a strong curved sword, found on the island of primate lords.", item(DRAGON_SCIMITAR)),
+ new FaloTheBardClue("A book that preaches of some great figure, lending strength, might, and vigour.", any("Any god book (must be complete)", item(HOLY_BOOK), item(BOOK_OF_BALANCE), item(UNHOLY_BOOK), item(BOOK_OF_LAW), item(BOOK_OF_WAR), item(BOOK_OF_DARKNESS))),
+ new FaloTheBardClue("A bow of elven craft was made, it shimmers bright, but will soon fade.", any("Crystal Bow", range(NEW_CRYSTAL_BOW, CRYSTAL_BOW_110), range(NEW_CRYSTAL_BOW_I, CRYSTAL_BOW_110_I))),
+ new FaloTheBardClue("A fiery axe of great inferno, when you use it, you'll wonder where the logs go.", item(INFERNAL_AXE)),
+ new FaloTheBardClue("A mark used to increase one's grace, found atop a seer's place.", item(MARK_OF_GRACE)),
+ new FaloTheBardClue("A molten beast with fiery breath, you acquire these with its death.", item(LAVA_DRAGON_BONES)),
+ new FaloTheBardClue("A shiny helmet of flight, to obtain this with melee, struggle you might.", item(ARMADYL_HELMET)),
+ // The wiki doesn't specify whether the trimmed dragon defender will work so I've assumed that it doesn't
+ new FaloTheBardClue("A sword held in the other hand, red its colour, Cyclops strength you must withstand.", item(DRAGON_DEFENDER)),
+ new FaloTheBardClue("A token used to kill mythical beasts, in hope of a blade or just for an xp feast.", item(WARRIOR_GUILD_TOKEN)),
+ new FaloTheBardClue("Green is my favorite, mature ale I do love, this takes your herblore above.", item(GREENMANS_ALEM)),
+ new FaloTheBardClue("It can hold down a boat or crush a goat, this object, you see, is quite heavy.", item(BARRELCHEST_ANCHOR)),
+ new FaloTheBardClue("It comes from the ground, underneath the snowy plain. Trolls aplenty, with what looks like a mane.", item(BASALT)),
+ new FaloTheBardClue("No attack to wield, only strength is required, made of obsidian but with no room for a shield.", item(TZHAARKETOM)),
+ new FaloTheBardClue("Penance healers runners and more, obtaining this body often gives much deplore.", item(FIGHTER_TORSO)),
+ new FaloTheBardClue("Strangely found in a chest, many believe these gloves are the best.", item(BARROWS_GLOVES)),
+ new FaloTheBardClue("These gloves of white won't help you fight, but aid in cooking, they just might.", item(COOKING_GAUNTLETS)),
+ new FaloTheBardClue("They come from some time ago, from a land unto the east. Fossilised they have become, this small and gentle beast.", item(NUMULITE)),
+ new FaloTheBardClue("To slay a dragon you must first do, before this chest piece can be put on you.", item(RUNE_PLATEBODY)),
+ new FaloTheBardClue("Vampyres are agile opponents, damaged best with a weapon of many components.", any("Rod of Ivandis or Ivandis flail", range(ROD_OF_IVANDIS_10, ROD_OF_IVANDIS_1), item(IVANDIS_FLAIL)))
+ );
+
+ private static final WorldPoint LOCATION = new WorldPoint(2689, 3550, 0);
+ private static final String FALO_THE_BARD = "Falo the Bard";
+
+ private static SingleItemRequirement item(int itemId)
+ {
+ return new SingleItemRequirement(itemId);
+ }
+
+ private static AnyRequirementCollection any(String name, ItemRequirement... requirements)
+ {
+ return new AnyRequirementCollection(name, requirements);
+ }
+
+ private static RangeItemRequirement range(int startItemId, int endItemId)
+ {
+ return range(null, startItemId, endItemId);
+ }
+
+ private static RangeItemRequirement range(String name, int startItemId, int endItemId)
+ {
+ return new RangeItemRequirement(name, startItemId, endItemId);
+ }
+
+ private final String text;
+ @Nonnull
+ private final ItemRequirement[] itemRequirements;
+
+ private FaloTheBardClue(String text, @Nonnull ItemRequirement... itemRequirements)
+ {
+ this.text = text;
+ this.itemRequirements = itemRequirements;
+ }
+
+ @Override
+ public void makeOverlayHint(PanelComponent panelComponent, ClueScrollPlugin plugin)
+ {
+ panelComponent.getChildren().add(TitleComponent.builder().text("Falo the Bard Clue").build());
+
+ panelComponent.getChildren().add(LineComponent.builder().left("NPC:").build());
+ panelComponent.getChildren().add(LineComponent.builder()
+ .left(FALO_THE_BARD)
+ .leftColor(TITLED_CONTENT_COLOR)
+ .build());
+
+ panelComponent.getChildren().add(LineComponent.builder().left("Item:").build());
+
+ Item[] inventory = plugin.getInventoryItems();
+
+ // If inventory is null, the player has nothing in their inventory
+ if (inventory == null)
+ {
+ inventory = new Item[0];
+ }
+
+ for (ItemRequirement requirement : itemRequirements)
+ {
+ boolean inventoryFulfilled = requirement.fulfilledBy(inventory);
+
+ panelComponent.getChildren().add(LineComponent.builder()
+ .left(requirement.getCollectiveName(plugin.getClient()))
+ .leftColor(TITLED_CONTENT_COLOR)
+ .right(inventoryFulfilled ? "\u2713" : "\u2717")
+ .rightColor(inventoryFulfilled ? Color.GREEN : Color.RED)
+ .build());
+ }
+ }
+
+ @Override
+ public void makeWorldOverlayHint(Graphics2D graphics, ClueScrollPlugin plugin)
+ {
+ if (!LOCATION.isInScene(plugin.getClient()))
+ {
+ return;
+ }
+
+ for (NPC npc : plugin.getNpcsToMark())
+ {
+ OverlayUtil.renderActorOverlayImage(graphics, npc, plugin.getClueScrollImage(), Color.ORANGE, IMAGE_Z_OFFSET);
+ }
+ }
+
+ @Override
+ public String[] getNpcs()
+ {
+ return new String[] {FALO_THE_BARD};
+ }
+
+ public static FaloTheBardClue forText(String text)
+ {
+ for (FaloTheBardClue clue : CLUES)
+ {
+ if (clue.text.equalsIgnoreCase(text))
+ {
+ return clue;
+ }
+ }
+
+ return null;
+ }
+}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/customcursor/CustomCursor.java b/runelite-client/src/main/java/net/runelite/client/plugins/customcursor/CustomCursor.java
new file mode 100644
index 0000000000..1116ab10c2
--- /dev/null
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/customcursor/CustomCursor.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2018, Kruithne
+ * 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.customcursor;
+
+import java.awt.image.BufferedImage;
+import lombok.Getter;
+import net.runelite.client.util.ImageUtil;
+
+public enum CustomCursor
+{
+ RS3_GOLD("RS3 Gold", "cursor-rs3-gold.png"),
+ RS3_SILVER("RS3 Silver", "cursor-rs3-silver.png"),
+ DRAGON_DAGGER("Dragon Dagger", "cursor-dragon-dagger.png"),
+ TROUT("Trout", "cursor-trout.png"),
+ DRAGON_SCIMITAR("Dragon Scimitar", "cursor-dragon-scimitar.png");
+
+ private final String name;
+ @Getter
+ private final BufferedImage cursorImage;
+
+ CustomCursor(String name, String icon)
+ {
+ this.name = name;
+ this.cursorImage = ImageUtil.getResourceStreamFromClass(CustomCursorPlugin.class, icon);
+ }
+
+ @Override
+ public String toString()
+ {
+ return name;
+ }
+}
\ No newline at end of file
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/customcursor/CustomCursorConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/customcursor/CustomCursorConfig.java
new file mode 100644
index 0000000000..cf7075a393
--- /dev/null
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/customcursor/CustomCursorConfig.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright (c) 2018, Kruithne
+ * 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.customcursor;
+
+import net.runelite.client.config.Config;
+import net.runelite.client.config.ConfigGroup;
+import net.runelite.client.config.ConfigItem;
+
+@ConfigGroup("customcursor")
+public interface CustomCursorConfig extends Config
+{
+ @ConfigItem(
+ keyName = "cursorStyle",
+ name = "Cursor",
+ description = "Select which cursor you wish to use"
+ )
+ default CustomCursor selectedCursor()
+ {
+ return CustomCursor.RS3_GOLD;
+ }
+}
\ No newline at end of file
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/customcursor/CustomCursorPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/customcursor/CustomCursorPlugin.java
new file mode 100644
index 0000000000..7e0fc4c18e
--- /dev/null
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/customcursor/CustomCursorPlugin.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) 2018, Kruithne
+ * 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.customcursor;
+
+import com.google.inject.Provides;
+import javax.inject.Inject;
+import net.runelite.api.events.ConfigChanged;
+import net.runelite.client.config.ConfigManager;
+import net.runelite.client.eventbus.Subscribe;
+import net.runelite.client.plugins.Plugin;
+import net.runelite.client.plugins.PluginDescriptor;
+import net.runelite.client.ui.ClientUI;
+
+@PluginDescriptor(
+ name = "Custom Cursor",
+ description = "Replaces your mouse cursor image",
+ enabledByDefault = false
+)
+public class CustomCursorPlugin extends Plugin
+{
+ @Inject
+ private ClientUI clientUI;
+
+ @Inject
+ private CustomCursorConfig config;
+
+ @Provides
+ CustomCursorConfig provideConfig(ConfigManager configManager)
+ {
+ return configManager.getConfig(CustomCursorConfig.class);
+ }
+
+ @Override
+ protected void startUp()
+ {
+ updateCursor();
+ }
+
+ @Override
+ protected void shutDown()
+ {
+ clientUI.resetCursor();
+ }
+
+ @Subscribe
+ public void onConfigChanged(ConfigChanged event)
+ {
+ if (event.getGroup().equals("customcursor") && event.getKey().equals("cursorStyle"))
+ {
+ updateCursor();
+ }
+ }
+
+ private void updateCursor()
+ {
+ CustomCursor selectedCursor = config.selectedCursor();
+ clientUI.setCursor(selectedCursor.getCursorImage(), selectedCursor.toString());
+ }
+}
\ No newline at end of file
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/dailytaskindicators/DailyTasksConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/dailytaskindicators/DailyTasksConfig.java
index a1bd666f93..f461f06680 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/dailytaskindicators/DailyTasksConfig.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/dailytaskindicators/DailyTasksConfig.java
@@ -111,13 +111,24 @@ public interface DailyTasksConfig extends Config
}
@ConfigItem(
- position = 8,
- keyName = "showArrows",
- name = "Show Claimable Ogre Arrows",
- description = "Show a message when you can collect ogre arrows from Rantz."
+ position = 8,
+ keyName = "showArrows",
+ name = "Show Claimable Ogre Arrows",
+ description = "Show a message when you can collect ogre arrows from Rantz."
)
default boolean showArrows()
{
return true;
}
+
+ @ConfigItem(
+ position = 9,
+ keyName = "showDynamite",
+ name = "Show Claimable Dynamite",
+ description = "Show a message when you can collect Dynamite from Thirus."
+ )
+ default boolean showDynamite()
+ {
+ return false;
+ }
}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/dailytaskindicators/DailyTasksPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/dailytaskindicators/DailyTasksPlugin.java
index 97404aacd6..e3bece82ac 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/dailytaskindicators/DailyTasksPlugin.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/dailytaskindicators/DailyTasksPlugin.java
@@ -66,6 +66,7 @@ public class DailyTasksPlugin extends Plugin
private static final String ARROWS_MESSAGE = "You have ogre arrows waiting to be collected from Rantz.";
private static final String BONEMEAL_MESSAGE = "You have bonemeal and slime waiting to be collected from Robin.";
private static final int BONEMEAL_PER_DIARY = 13;
+ private static final String DYNAMITE_MESSAGE = "You have dynamite waiting to be collected from Thirus.";
private static final String RELOG_MESSAGE = " (May require a relog)";
@Inject
@@ -159,6 +160,11 @@ public class DailyTasksPlugin extends Plugin
{
checkArrows(dailyReset);
}
+
+ if (config.showDynamite())
+ {
+ checkDynamite(dailyReset);
+ }
}
}
@@ -253,6 +259,21 @@ public class DailyTasksPlugin extends Plugin
}
}
+ private void checkDynamite(boolean dailyReset)
+ {
+ if (client.getVar(Varbits.DIARY_KOUREND_MEDIUM) == 1)
+ {
+ if (client.getVar(Varbits.DAILY_DYNAMITE_COLLECTED) == 0)
+ {
+ sendChatMessage(DYNAMITE_MESSAGE);
+ }
+ else if (dailyReset)
+ {
+ sendChatMessage(DYNAMITE_MESSAGE);
+ }
+ }
+ }
+
private void sendChatMessage(String chatMessage)
{
final String message = new ChatMessageBuilder()
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 94495ab434..0d57f682ac 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
@@ -145,7 +145,7 @@ public class IdleNotifierPlugin extends Plugin
case COOKING_FIRE:
case COOKING_RANGE:
case COOKING_WINE:
- /* Crafting(Gem Cutting, Glassblowing, Spinning, Battlestaves) */
+ /* Crafting(Gem Cutting, Glassblowing, Spinning, Battlestaves, Pottery) */
case GEM_CUTTING_OPAL:
case GEM_CUTTING_JADE:
case GEM_CUTTING_REDTOPAZ:
@@ -158,6 +158,8 @@ public class IdleNotifierPlugin extends Plugin
case CRAFTING_SPINNING:
case CRAFTING_BATTLESTAVES:
case CRAFTING_LEATHER:
+ case CRAFTING_POTTERS_WHEEL:
+ case CRAFTING_POTTERY_OVEN:
/* Fletching(Cutting, Stringing) */
case FLETCHING_BOW_CUTTING:
case FLETCHING_STRING_NORMAL_SHORTBOW:
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentification.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentification.java
new file mode 100644
index 0000000000..8ef3efcf8b
--- /dev/null
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentification.java
@@ -0,0 +1,127 @@
+/*
+ * Copyright (c) 2019, Hydrox6
+ * 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.itemidentification;
+
+import java.util.HashMap;
+import java.util.Map;
+import net.runelite.api.ItemID;
+
+enum ItemIdentification
+{
+ //Seeds
+ GUAM_SEED(Type.SEED, "Guam", "G", ItemID.GUAM_SEED),
+ MARRENTILL_SEED(Type.SEED, "Marren", "M", ItemID.MARRENTILL_SEED),
+ TARROMIN_SEED(Type.SEED, "Tarro", "TAR", ItemID.TARROMIN_SEED),
+ HARRALANDER_SEED(Type.SEED, "Harra", "H", ItemID.HARRALANDER_SEED),
+ RANARR_SEED(Type.SEED, "Ranarr", "R", ItemID.RANARR_SEED),
+ TOADFLAX_SEED(Type.SEED, "Toad", "TOA", ItemID.TOADFLAX_SEED),
+ IRIT_SEED(Type.SEED, "Irit", "I", ItemID.IRIT_SEED),
+ AVANTOE_SEED(Type.SEED, "Avantoe", "A", ItemID.AVANTOE_SEED),
+ KWUARM_SEED(Type.SEED, "Kwuarm", "K", ItemID.KWUARM_SEED),
+ SNAPDRAGON_SEED(Type.SEED, "Snap", "S", ItemID.SNAPDRAGON_SEED),
+ CADANTINE_SEED(Type.SEED, "Cadan", "C", ItemID.CADANTINE_SEED),
+ LANTADYME_SEED(Type.SEED, "Lanta", "L", ItemID.LANTADYME_SEED),
+ DWARF_WEED_SEED(Type.SEED, "Dwarf", "D", ItemID.DWARF_WEED_SEED),
+ TORSTOL_SEED(Type.SEED, "Torstol", "TOR", ItemID.TORSTOL_SEED),
+ POISON_IVY_SEED(Type.SEED, "Ivy", "I", ItemID.POISON_IVY_SEED),
+ WHITEBERRY_SEED( Type.SEED, "White", "W", ItemID.WHITEBERRY_SEED),
+
+ //Herbs
+ GUAM(Type.HERB, "Guam", "G", ItemID.GUAM_LEAF, ItemID.GRIMY_GUAM_LEAF),
+ MARRENTILL(Type.HERB, "Marren", "M", ItemID.MARRENTILL, ItemID.GRIMY_MARRENTILL),
+ TARROMIN(Type.HERB, "Tarro", "TAR", ItemID.TARROMIN, ItemID.GRIMY_TARROMIN),
+ HARRALANDER(Type.HERB, "Harra", "H", ItemID.HARRALANDER, ItemID.GRIMY_HARRALANDER),
+ RANARR(Type.HERB, "Ranarr", "R", ItemID.RANARR_WEED, ItemID.GRIMY_RANARR_WEED),
+ TOADFLAX(Type.HERB, "Toad", "TOA", ItemID.TOADFLAX, ItemID.GRIMY_TOADFLAX),
+ IRIT(Type.HERB, "Irit", "I", ItemID.IRIT_LEAF, ItemID.GRIMY_IRIT_LEAF),
+ AVANTOE(Type.HERB, "Avantoe", "A", ItemID.AVANTOE, ItemID.GRIMY_AVANTOE),
+ KWUARM(Type.HERB, "Kwuarm", "K", ItemID.KWUARM, ItemID.GRIMY_KWUARM),
+ SNAPDRAGON(Type.HERB, "Snap", "S", ItemID.SNAPDRAGON, ItemID.GRIMY_SNAPDRAGON),
+ CADANTINE(Type.HERB, "Cadan", "C", ItemID.CADANTINE, ItemID.GRIMY_CADANTINE),
+ LANTADYME(Type.HERB, "Lanta", "L", ItemID.LANTADYME, ItemID.GRIMY_LANTADYME),
+ DWARF_WEED(Type.HERB, "Dwarf", "D", ItemID.DWARF_WEED, ItemID.GRIMY_DWARF_WEED),
+ TORSTOL(Type.HERB, "Torstol", "TOR", ItemID.TORSTOL, ItemID.GRIMY_TORSTOL),
+
+ //Saplings
+ OAK_SAPLING(Type.SAPLING, "Oak", "OAK", ItemID.OAK_SAPLING, ItemID.OAK_SEEDLING, ItemID.OAK_SEEDLING_W),
+ WILLOW_SAPLING(Type.SAPLING, "Willow", "WIL", ItemID.WILLOW_SAPLING, ItemID.WILLOW_SEEDLING, ItemID.WILLOW_SEEDLING_W),
+ MAPLE_SAPLING(Type.SAPLING, "Maple", "MAP", ItemID.MAPLE_SAPLING, ItemID.MAPLE_SEEDLING, ItemID.MAPLE_SEEDLING_W),
+ YEW_SAPLING(Type.SAPLING, "Yew", "YEW", ItemID.YEW_SAPLING, ItemID.YEW_SEEDLING, ItemID.YEW_SEEDLING_W),
+ MAGIC_SAPLING(Type.SAPLING, "Magic", "MAG", ItemID.MAGIC_SAPLING, ItemID.MAGIC_SEEDLING, ItemID.MAGIC_SEEDLING_W),
+ REDWOOD_SAPLING(Type.SAPLING, "Red", "RED", ItemID.REDWOOD_SAPLING, ItemID.REDWOOD_SEEDLING, ItemID.REDWOOD_SEEDLING_W),
+ SPIRIT_SAPLING(Type.SAPLING, "Spirit", "SPI", ItemID.SPIRIT_SAPLING, ItemID.SPIRIT_SEEDLING, ItemID.SPIRIT_SEEDLING_W),
+
+ APPLE_SAPLING(Type.SAPLING, "Apple", "APP", ItemID.APPLE_SAPLING, ItemID.APPLE_SEEDLING, ItemID.APPLE_SEEDLING_W),
+ BANANA_SAPLING(Type.SAPLING, "Banana", "BAN", ItemID.BANANA_SAPLING, ItemID.BANANA_SEEDLING, ItemID.BANANA_SEEDLING_W),
+ ORANGE_SAPLING(Type.SAPLING, "Orange", "ORA", ItemID.ORANGE_SAPLING, ItemID.ORANGE_SEEDLING, ItemID.ORANGE_SEEDLING_W),
+ CURRY_SAPLING(Type.SAPLING, "Curry", "CUR", ItemID.CURRY_SAPLING, ItemID.CURRY_SEEDLING, ItemID.CURRY_SEEDLING_W),
+ PINEAPPLE_SAPLING(Type.SAPLING, "Pine", "PINE", ItemID.PINEAPPLE_SAPLING, ItemID.PINEAPPLE_SEEDLING, ItemID.PINEAPPLE_SEEDLING_W),
+ PAPAYA_SAPLING(Type.SAPLING, "Papaya", "PAP", ItemID.PAPAYA_SAPLING, ItemID.PAPAYA_SEEDLING, ItemID.PAPAYA_SEEDLING_W),
+ PALM_SAPLING(Type.SAPLING, "Palm", "PALM", ItemID.PALM_SAPLING, ItemID.PALM_SEEDLING, ItemID.PALM_SEEDLING_W),
+ DRAGONFRUIT_SAPLING(Type.SAPLING, "Dragon", "DRAG", ItemID.DRAGONFRUIT_SAPLING, ItemID.DRAGONFRUIT_SEEDLING, ItemID.DRAGONFRUIT_SEEDLING_W),
+
+ TEAK_SAPLING(Type.SAPLING, "Teak", "TEAK", ItemID.TEAK_SAPLING, ItemID.TEAK_SEEDLING, ItemID.TEAK_SEEDLING_W),
+ MAHOGANY_SAPLING(Type.SAPLING, "Mahog", "MAHOG", ItemID.MAHOGANY_SAPLING, ItemID.MAHOGANY_SEEDLING, ItemID.MAHOGANY_SEEDLING_W),
+ CALQUAT_SAPLING(Type.SAPLING, "Calquat", "CALQ", ItemID.CALQUAT_SAPLING, ItemID.CALQUAT_SEEDLING, ItemID.CALQUAT_SEEDLING_W),
+ CELASTRUS_SAPLING(Type.SAPLING, "Celas", "CEL", ItemID.CELASTRUS_SAPLING, ItemID.CELASTRUS_SEEDLING, ItemID.CELASTRUS_SEEDLING_W);
+
+ final Type type;
+ final String medName;
+ final String shortName;
+ final int[] itemIDs;
+
+ ItemIdentification(Type type, String medName, String shortName, int ... ids)
+ {
+ this.type = type;
+ this.medName = medName;
+ this.shortName = shortName;
+ this.itemIDs = ids;
+ }
+
+ private static final Map itemIdentifications = new HashMap<>();
+
+ static
+ {
+ for (ItemIdentification i : values())
+ {
+ for (int id : i.itemIDs)
+ {
+ itemIdentifications.put(id, i);
+ }
+ }
+ }
+
+ static ItemIdentification get(int id)
+ {
+ return itemIdentifications.get(id);
+ }
+
+ enum Type
+ {
+ SEED,
+ HERB,
+ SAPLING
+ }
+}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentificationConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentificationConfig.java
new file mode 100644
index 0000000000..12009a284f
--- /dev/null
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentificationConfig.java
@@ -0,0 +1,86 @@
+/*
+ * Copyright (c) 2019, Hydrox6
+ * 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.itemidentification;
+
+import java.awt.Color;
+import net.runelite.client.config.Config;
+import net.runelite.client.config.ConfigGroup;
+import net.runelite.client.config.ConfigItem;
+
+@ConfigGroup("itemidentification")
+public interface ItemIdentificationConfig extends Config
+{
+ @ConfigItem(
+ keyName = "identificationType",
+ name = "Identification Type",
+ position = -4,
+ description = "How much to show of the item name"
+ )
+ default ItemIdentificationMode identificationType()
+ {
+ return ItemIdentificationMode.SHORT;
+ }
+
+ @ConfigItem(
+ keyName = "textColor",
+ name = "Color",
+ position = -3,
+ description = "The colour of the identification text"
+ )
+ default Color textColor()
+ {
+ return Color.WHITE;
+ }
+
+ @ConfigItem(
+ keyName = "showSeeds",
+ name = "Seeds",
+ description = "Show identification on Seeds"
+ )
+ default boolean showSeeds()
+ {
+ return true;
+ }
+
+ @ConfigItem(
+ keyName = "showHerbs",
+ name = "Herbs",
+ description = "Show identification on Herbs"
+ )
+ default boolean showHerbs()
+ {
+ return false;
+ }
+
+ @ConfigItem(
+ keyName = "showSaplings",
+ name = "Saplings",
+ description = "Show identification on Saplings and Seedlings"
+ )
+ default boolean showSaplings()
+ {
+ return true;
+ }
+}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentificationMode.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentificationMode.java
new file mode 100644
index 0000000000..7b9f11217c
--- /dev/null
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentificationMode.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2019, Hydrox6
+ * 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.itemidentification;
+
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+
+@Getter
+@RequiredArgsConstructor
+public enum ItemIdentificationMode
+{
+ SHORT("Short"),
+ MEDIUM("Medium");
+
+ private final String type;
+
+ @Override
+ public String toString()
+ {
+ return type;
+ }
+}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentificationOverlay.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentificationOverlay.java
new file mode 100644
index 0000000000..badd46bdd3
--- /dev/null
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentificationOverlay.java
@@ -0,0 +1,103 @@
+/*
+ * Copyright (c) 2019, Hydrox6
+ * 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.itemidentification;
+
+import com.google.inject.Inject;
+import java.awt.Graphics2D;
+import java.awt.Point;
+import java.awt.Rectangle;
+import static net.runelite.api.widgets.WidgetID.GUIDE_PRICE_GROUP_ID;
+import static net.runelite.api.widgets.WidgetID.KEPT_ON_DEATH_GROUP_ID;
+import net.runelite.api.widgets.WidgetItem;
+import net.runelite.client.ui.FontManager;
+import net.runelite.client.ui.overlay.WidgetItemOverlay;
+import net.runelite.client.ui.overlay.components.TextComponent;
+
+class ItemIdentificationOverlay extends WidgetItemOverlay
+{
+ private final ItemIdentificationConfig config;
+
+ @Inject
+ ItemIdentificationOverlay(ItemIdentificationConfig config)
+ {
+ this.config = config;
+ showOnInventory();
+ showOnBank();
+ showOnInterfaces(KEPT_ON_DEATH_GROUP_ID, GUIDE_PRICE_GROUP_ID);
+ }
+
+ @Override
+ public void renderItemOverlay(Graphics2D graphics, int itemId, WidgetItem itemWidget)
+ {
+ ItemIdentification iden = ItemIdentification.get(itemId);
+ if (iden == null)
+ {
+ return;
+ }
+
+ switch (iden.type)
+ {
+ case SEED:
+ if (!config.showSeeds())
+ {
+ return;
+ }
+ break;
+ case HERB:
+ if (!config.showHerbs())
+ {
+ return;
+ }
+ break;
+ case SAPLING:
+ if (!config.showSaplings())
+ {
+ return;
+ }
+ break;
+ }
+
+ graphics.setFont(FontManager.getRunescapeSmallFont());
+ renderText(graphics, itemWidget.getCanvasBounds(), iden);
+
+ }
+
+ private void renderText(Graphics2D graphics, Rectangle bounds, ItemIdentification iden)
+ {
+ final TextComponent textComponent = new TextComponent();
+ textComponent.setPosition(new Point(bounds.x, bounds.y + bounds.height));
+ textComponent.setColor(config.textColor());
+ switch (config.identificationType())
+ {
+ case SHORT:
+ textComponent.setText(iden.shortName);
+ break;
+ case MEDIUM:
+ textComponent.setText(iden.medName);
+ break;
+ }
+ textComponent.render(graphics);
+ }
+}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentificationPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentificationPlugin.java
new file mode 100644
index 0000000000..6e4f331765
--- /dev/null
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/itemidentification/ItemIdentificationPlugin.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2019, Hydrox6
+ * 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.itemidentification;
+
+import com.google.inject.Provides;
+import javax.inject.Inject;
+import net.runelite.client.config.ConfigManager;
+import net.runelite.client.plugins.Plugin;
+import net.runelite.client.plugins.PluginDescriptor;
+import net.runelite.client.ui.overlay.OverlayManager;
+
+@PluginDescriptor(
+ name = "Item Identification",
+ description = "Show identifying text over items with difficult to distinguish sprites",
+ enabledByDefault = false
+)
+public class ItemIdentificationPlugin extends Plugin
+{
+ @Inject
+ private OverlayManager overlayManager;
+
+ @Inject
+ private ItemIdentificationOverlay overlay;
+
+ @Provides
+ ItemIdentificationConfig getConfig(ConfigManager configManager)
+ {
+ return configManager.getConfig(ItemIdentificationConfig.class);
+ }
+
+ @Override
+ protected void startUp()
+ {
+ overlayManager.add(overlay);
+ }
+
+ @Override
+ protected void shutDown()
+ {
+ overlayManager.remove(overlay);
+ }
+}
\ No newline at end of file
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java
index 50b6c4bb68..5429ec5941 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/loottracker/LootTrackerPlugin.java
@@ -99,6 +99,10 @@ public class LootTrackerPlugin extends Plugin
private static final Pattern CLUE_SCROLL_PATTERN = Pattern.compile("You have completed [0-9]+ ([a-z]+) Treasure Trails.");
private static final int THEATRE_OF_BLOOD_REGION = 12867;
+ // Herbiboar loot handling
+ private static final String HERBIBOAR_LOOTED_MESSAGE = "You harvest herbs from the herbiboar, whereupon it escapes.";
+ private static final String HERBIBOR_EVENT = "Herbiboar";
+
// Chest loot handling
private static final String CHEST_LOOTED_MESSAGE = "You find some treasure in the chest!";
private static final Map CHEST_EVENT_TYPES = ImmutableMap.of(
@@ -389,14 +393,15 @@ public class LootTrackerPlugin extends Plugin
}
eventType = CHEST_EVENT_TYPES.get(regionID);
+ takeInventorySnapshot();
- final ItemContainer itemContainer = client.getItemContainer(InventoryID.INVENTORY);
- if (itemContainer != null)
- {
- inventorySnapshot = HashMultiset.create();
- Arrays.stream(itemContainer.getItems())
- .forEach(item -> inventorySnapshot.add(item.getId(), item.getQuantity()));
- }
+ return;
+ }
+
+ if (message.equals(HERBIBOAR_LOOTED_MESSAGE))
+ {
+ eventType = HERBIBOR_EVENT;
+ takeInventorySnapshot();
return;
}
@@ -433,7 +438,7 @@ public class LootTrackerPlugin extends Plugin
@Subscribe
public void onItemContainerChanged(ItemContainerChanged event)
{
- if (eventType != null && CHEST_EVENT_TYPES.containsValue(eventType))
+ if (eventType != null && (CHEST_EVENT_TYPES.containsValue(eventType) || HERBIBOR_EVENT.equals(eventType)))
{
if (event.getItemContainer() != client.getItemContainer(InventoryID.INVENTORY))
{
@@ -445,6 +450,17 @@ public class LootTrackerPlugin extends Plugin
}
}
+ private void takeInventorySnapshot()
+ {
+ final ItemContainer itemContainer = client.getItemContainer(InventoryID.INVENTORY);
+ if (itemContainer != null)
+ {
+ inventorySnapshot = HashMultiset.create();
+ Arrays.stream(itemContainer.getItems())
+ .forEach(item -> inventorySnapshot.add(item.getId(), item.getQuantity()));
+ }
+ }
+
private void processChestLoot(String chestType, ItemContainer inventoryContainer)
{
if (inventorySnapshot != null)
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 1ae0dc2fa4..a5d859ed7e 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
@@ -109,7 +109,7 @@ import net.runelite.http.api.chat.ChatClient;
public class SlayerPlugin extends Plugin
{
//Chat messages
- private static final Pattern CHAT_GEM_PROGRESS_MESSAGE = Pattern.compile("^(?:You're assigned to kill|You have received a new Slayer assignment from .*:) (?:[Tt]he )?(?.+?)(?: (?:in|on) (?:the )?(?[^;]+))?(?:; only | \\()(?\\d+)(?: more to go\\.|\\))$");
+ private static final Pattern CHAT_GEM_PROGRESS_MESSAGE = Pattern.compile("^(?:You're assigned to kill|You have received a new Slayer assignment from .*:) (?:[Tt]he )?(?.+?)(?: (?:in|on|south of) (?:the )?(?[^;]+))?(?:; only | \\()(?\\d+)(?: more to go\\.|\\))$");
private static final String CHAT_GEM_COMPLETE_MESSAGE = "You need something new to hunt.";
private static final Pattern CHAT_COMPLETE_MESSAGE = Pattern.compile("(?:\\d+,)*\\d+");
private static final String CHAT_CANCEL_MESSAGE = "Your task has been cancelled.";
@@ -118,10 +118,10 @@ public class SlayerPlugin extends Plugin
private static final Pattern COMBAT_BRACELET_TASK_UPDATE_MESSAGE = Pattern.compile("^You still need to kill (\\d+) monsters to complete your current Slayer assignment");
//NPC messages
- private static final Pattern NPC_ASSIGN_MESSAGE = Pattern.compile(".*(?:Your new task is to kill|You are to bring balance to)\\s*(?\\d+) (?.+?)(?: (?:in|on) (?:the )?(?.+))?\\.");
+ private static final Pattern NPC_ASSIGN_MESSAGE = Pattern.compile(".*(?:Your new task is to kill|You are to bring balance to)\\s*(?\\d+) (?.+?)(?: (?:in|on|south of) (?:the )?(?.+))?\\.");
private static final Pattern NPC_ASSIGN_BOSS_MESSAGE = Pattern.compile("^Excellent. You're now assigned to kill (?:the )?(.*) (\\d+) times.*Your reward point tally is (.*)\\.$");
private static final Pattern NPC_ASSIGN_FIRST_MESSAGE = Pattern.compile("^We'll start you off hunting (.*), you'll need to kill (\\d*) of them.");
- private static final Pattern NPC_CURRENT_MESSAGE = Pattern.compile("^You're still (?:hunting|bringing balance to) (?.+)(?: (?:in|on) (?:the )?(?.+), with|; you have) (?\\d+) to go\\..*");
+ private static final Pattern NPC_CURRENT_MESSAGE = Pattern.compile("^You're still (?:hunting|bringing balance to) (?.+)(?: (?:in|on|south of) (?:the )?(?.+), with|; you have) (?\\d+) to go\\..*");
private static final int GROTESQUE_GUARDIANS_REGION = 6727;
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/virtuallevels/VirtualLevelsConfig.java b/runelite-client/src/main/java/net/runelite/client/plugins/virtuallevels/VirtualLevelsConfig.java
new file mode 100644
index 0000000000..83bacd8b8f
--- /dev/null
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/virtuallevels/VirtualLevelsConfig.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2019, Beau Mitchell
+ * 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.virtuallevels;
+
+import net.runelite.client.config.Config;
+import net.runelite.client.config.ConfigGroup;
+import net.runelite.client.config.ConfigItem;
+
+@ConfigGroup("virtuallevels")
+public interface VirtualLevelsConfig extends Config
+{
+ @ConfigItem(
+ keyName = "virtualTotalLevel",
+ name = "Virtual Total Level",
+ description = "Count virtual levels towards total level",
+ position = 0
+ )
+ default boolean virtualTotalLevel()
+ {
+ return true;
+ }
+}
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/virtuallevels/VirtualLevelsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/virtuallevels/VirtualLevelsPlugin.java
index 879110bb2b..7be76a31b4 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/virtuallevels/VirtualLevelsPlugin.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/virtuallevels/VirtualLevelsPlugin.java
@@ -25,12 +25,15 @@
*/
package net.runelite.client.plugins.virtuallevels;
+import com.google.inject.Provides;
import javax.inject.Inject;
import net.runelite.api.Client;
import net.runelite.api.Experience;
import net.runelite.api.Skill;
+import net.runelite.api.events.ConfigChanged;
import net.runelite.api.events.ScriptCallbackEvent;
import net.runelite.client.callback.ClientThread;
+import net.runelite.client.config.ConfigManager;
import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.events.PluginChanged;
import net.runelite.client.plugins.Plugin;
@@ -38,7 +41,7 @@ import net.runelite.client.plugins.PluginDescriptor;
@PluginDescriptor(
name = "Virtual Levels",
- description = "Configuration for the virtual levels plugin.",
+ description = "Shows virtual levels (beyond 99) and virtual skill total on the skills tab.",
tags = {"skill", "total", "max"},
enabledByDefault = false
)
@@ -46,12 +49,21 @@ public class VirtualLevelsPlugin extends Plugin
{
private static final String TOTAL_LEVEL_TEXT_PREFIX = "Total level:
";
+ @Inject
+ private VirtualLevelsConfig config;
+
@Inject
private Client client;
@Inject
private ClientThread clientThread;
+ @Provides
+ VirtualLevelsConfig provideConfig(ConfigManager configManager)
+ {
+ return configManager.getConfig(VirtualLevelsConfig.class);
+ }
+
@Override
protected void shutDown()
{
@@ -68,6 +80,17 @@ public class VirtualLevelsPlugin extends Plugin
}
}
+ @Subscribe
+ public void onConfigChanged(ConfigChanged configChanged)
+ {
+ if (!configChanged.getGroup().equals("virtuallevels"))
+ {
+ return;
+ }
+
+ clientThread.invoke(this::simulateSkillChange);
+ }
+
@Subscribe
public void onScriptCallbackEvent(ScriptCallbackEvent e)
{
@@ -93,6 +116,10 @@ public class VirtualLevelsPlugin extends Plugin
intStack[intStackSize - 1] = Experience.MAX_VIRT_LEVEL;
break;
case "skillTabTotalLevel":
+ if (!config.virtualTotalLevel())
+ {
+ break;
+ }
int level = 0;
for (Skill s : Skill.values())
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 9a56f6eeab..64a7806666 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
@@ -389,11 +389,21 @@ public class WorldHopperPlugin extends Plugin
// Don't add entry if user is offline
ChatPlayer player = getChatPlayerFromName(event.getTarget());
- if (player == null || player.getWorld() == 0 || player.getWorld() == client.getWorld())
+ if (player == null || player.getWorld() == 0 || player.getWorld() == client.getWorld()
+ || worldResult == null)
{
return;
}
+ World currentWorld = worldResult.findWorld(client.getWorld());
+ World targetWorld = worldResult.findWorld(player.getWorld());
+ if (targetWorld == null || currentWorld == null
+ || (!currentWorld.getTypes().contains(WorldType.PVP) && targetWorld.getTypes().contains(WorldType.PVP)))
+ {
+ // Disable Hop-to a PVP world from a regular world
+ return;
+ }
+
final MenuEntry hopTo = new MenuEntry();
hopTo.setOption(HOP_TO);
hopTo.setTarget(event.getTarget());
diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/TeleportLocationData.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/TeleportLocationData.java
index 4430e218cb..b877be8810 100644
--- a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/TeleportLocationData.java
+++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/TeleportLocationData.java
@@ -61,6 +61,7 @@ enum TeleportLocationData
ICE_PLATEAU(TeleportType.LUNAR_MAGIC, "Ice Plateau", 89, new WorldPoint(2973, 3939, 0), "ice_plateau_teleport_icon.png"),
LUMBRIDGE_GRAVEYARD(TeleportType.ARCEUUS_MAGIC, "Lumbridge Graveyard", 6, new WorldPoint(3241, 3194, 0), "lumbridge_graveyard_teleport_icon.png"),
DRAYNOR_MANOR(TeleportType.ARCEUUS_MAGIC, "Draynor Manor", 17, new WorldPoint(3108, 3352, 0), "draynor_manor_teleport_icon.png"),
+ BATTLEFRONT(TeleportType.ARCEUUS_MAGIC, "Battlefront", 23, new WorldPoint(1349, 3739, 0), "battlefront_teleport_icon.png"),
MIND_ALTAR(TeleportType.ARCEUUS_MAGIC, "Mind Altar", 28, new WorldPoint(2979, 3509, 0), "mind_altar_teleport_icon.png"),
SALVE_GRAVEYARD(TeleportType.ARCEUUS_MAGIC, "Salve Graveyard", 40, new WorldPoint(3433, 3461, 0), "salve_graveyard_teleport_icon.png"),
FENKENSTRAINS_CASTLE(TeleportType.ARCEUUS_MAGIC, "Fenkenstrain's Castle", 48, new WorldPoint(3548, 3528, 0), "fenkenstrains_castle_teleport_icon.png"),
diff --git a/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java b/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java
index d1588f2d4e..66653e63cb 100644
--- a/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java
+++ b/runelite-client/src/main/java/net/runelite/client/ui/ClientUI.java
@@ -37,6 +37,7 @@ import java.awt.Graphics2D;
import java.awt.GraphicsConfiguration;
import java.awt.LayoutManager;
import java.awt.Rectangle;
+import java.awt.Toolkit;
import java.awt.TrayIcon;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
@@ -594,6 +595,38 @@ public class ClientUI
giveClientFocus();
}
+ /**
+ * Changes cursor for client window. Requires ${@link ClientUI#open(RuneLite)} to be called first.
+ * FIXME: This is working properly only on Windows, Linux and Mac are displaying cursor incorrectly
+ * @param image cursor image
+ * @param name cursor name
+ */
+ public void setCursor(final BufferedImage image, final String name)
+ {
+ if (container == null)
+ {
+ return;
+ }
+
+ final java.awt.Point hotspot = new java.awt.Point(container.getX(), container.getY());
+ final Cursor cursorAwt = Toolkit.getDefaultToolkit().createCustomCursor(image, hotspot, name);
+ container.setCursor(cursorAwt);
+ }
+
+ /**
+ * Resets client window cursor to default one.
+ * @see ClientUI#setCursor(BufferedImage, String)
+ */
+ public void resetCursor()
+ {
+ if (container == null)
+ {
+ return;
+ }
+
+ container.setCursor(Cursor.getDefaultCursor());
+ }
+
/**
* Get offset of game canvas in game window
*
diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/customcursor/cursor-dragon-dagger.png b/runelite-client/src/main/resources/net/runelite/client/plugins/customcursor/cursor-dragon-dagger.png
new file mode 100644
index 0000000000..9a59c1753c
Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/customcursor/cursor-dragon-dagger.png differ
diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/customcursor/cursor-dragon-scimitar.png b/runelite-client/src/main/resources/net/runelite/client/plugins/customcursor/cursor-dragon-scimitar.png
new file mode 100644
index 0000000000..1db7d1a0bc
Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/customcursor/cursor-dragon-scimitar.png differ
diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/customcursor/cursor-rs3-gold.png b/runelite-client/src/main/resources/net/runelite/client/plugins/customcursor/cursor-rs3-gold.png
new file mode 100644
index 0000000000..ee89a5b05a
Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/customcursor/cursor-rs3-gold.png differ
diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/customcursor/cursor-rs3-silver.png b/runelite-client/src/main/resources/net/runelite/client/plugins/customcursor/cursor-rs3-silver.png
new file mode 100644
index 0000000000..7415625a2f
Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/customcursor/cursor-rs3-silver.png differ
diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/customcursor/cursor-trout.png b/runelite-client/src/main/resources/net/runelite/client/plugins/customcursor/cursor-trout.png
new file mode 100644
index 0000000000..b32ddf0ea1
Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/customcursor/cursor-trout.png differ
diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_fletching.json b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_fletching.json
index 23f057a59b..5a6f05161d 100644
--- a/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_fletching.json
+++ b/runelite-client/src/main/resources/net/runelite/client/plugins/skillcalculator/skill_fletching.json
@@ -18,12 +18,6 @@
"name": "Bronze Arrow",
"xp": 1.3
},
- {
- "level": 1,
- "icon": 806,
- "name": "Bronze Dart",
- "xp": 1.8
- },
{
"level": 5,
"icon": 2866,
@@ -66,6 +60,12 @@
"name": "Bronze Crossbow",
"xp": 6
},
+ {
+ "level": 10,
+ "icon": 806,
+ "name": "Bronze Dart",
+ "xp": 1.8
+ },
{
"level": 10,
"icon": 839,
@@ -553,4 +553,4 @@
"xp": 25
}
]
-}
\ No newline at end of file
+}
diff --git a/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/battlefront_teleport_icon.png b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/battlefront_teleport_icon.png
new file mode 100644
index 0000000000..696c1a0cf6
Binary files /dev/null and b/runelite-client/src/main/resources/net/runelite/client/plugins/worldmap/battlefront_teleport_icon.png differ
diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/slayer/SlayerPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/slayer/SlayerPluginTest.java
index c8234a7dc6..e7e5d914f2 100644
--- a/runelite-client/src/test/java/net/runelite/client/plugins/slayer/SlayerPluginTest.java
+++ b/runelite-client/src/test/java/net/runelite/client/plugins/slayer/SlayerPluginTest.java
@@ -69,6 +69,7 @@ public class SlayerPluginTest
private static final String TASK_NEW = "Your new task is to kill 231 Suqahs.";
private static final String TASK_NEW_KONAR = "You are to bring balance to 147 Wyrms in the Karuulm Slayer Dungeon.";
private static final String TASK_NEW_KONAR_2 = "You are to bring balance to 142 Hellhounds in Witchhaven Dungeon.";
+ private static final String TASK_NEW_KONAR_3 = "You are to bring balance to 135 Trolls south of Mount Quidamortem.";
private static final String TASK_NEW_FIRST = "We'll start you off hunting goblins, you'll need to kill 17 of them.";
private static final String TASK_NEW_NPC_CONTACT = "Excellent, you're doing great. Your new task is to kill
211 Suqahs.";
private static final String TASK_NEW_FROM_PARTNER = "You have received a new Slayer assignment from breaklulz: Dust Devils (377)";
@@ -188,6 +189,19 @@ public class SlayerPluginTest
assertEquals("Witchhaven Dungeon", slayerPlugin.getCurrentTask().getTaskLocation());
}
+ @Test
+ public void testNewKonarTask3()
+ {
+ Widget npcDialog = mock(Widget.class);
+ when(npcDialog.getText()).thenReturn(TASK_NEW_KONAR_3);
+ when(client.getWidget(WidgetInfo.DIALOG_NPC_TEXT)).thenReturn(npcDialog);
+ slayerPlugin.onGameTick(new GameTick());
+
+ assertEquals("Trolls", slayerPlugin.getCurrentTask().getTaskName());
+ assertEquals(135, slayerPlugin.getCurrentTask().getAmount());
+ assertEquals("Mount Quidamortem", slayerPlugin.getCurrentTask().getTaskLocation());
+ }
+
@Test
public void testFirstTask()
{
diff --git a/runelite-mixins/pom.xml b/runelite-mixins/pom.xml
index 60644a4b7b..867d1543a3 100644
--- a/runelite-mixins/pom.xml
+++ b/runelite-mixins/pom.xml
@@ -29,7 +29,7 @@
net.runelite
runelite-parent
- 1.5.22-SNAPSHOT
+ 1.5.23-SNAPSHOT
mixins
diff --git a/runelite-plugin-archetype/pom.xml b/runelite-plugin-archetype/pom.xml
index a5b8832120..3a7fe3b36b 100644
--- a/runelite-plugin-archetype/pom.xml
+++ b/runelite-plugin-archetype/pom.xml
@@ -29,7 +29,7 @@
net.runelite
runelite-parent
- 1.5.22-SNAPSHOT
+ 1.5.23-SNAPSHOT
runelite-plugin-archetype
diff --git a/runelite-script-assembler-plugin/pom.xml b/runelite-script-assembler-plugin/pom.xml
index 2ee5a13a39..5302a199d1 100644
--- a/runelite-script-assembler-plugin/pom.xml
+++ b/runelite-script-assembler-plugin/pom.xml
@@ -29,7 +29,7 @@
net.runelite
runelite-parent
- 1.5.22-SNAPSHOT
+ 1.5.23-SNAPSHOT
script-assembler-plugin
diff --git a/runescape-api/pom.xml b/runescape-api/pom.xml
index 8bdcfa8ed2..cc70e2bdd1 100644
--- a/runescape-api/pom.xml
+++ b/runescape-api/pom.xml
@@ -29,7 +29,7 @@
net.runelite
runelite-parent
- 1.5.22-SNAPSHOT
+ 1.5.23-SNAPSHOT
net.runelite.rs