diff --git a/runelite-api/src/main/java/net/runelite/api/events/BoostedLevelChanged.java b/runelite-api/src/main/java/net/runelite/api/events/BoostedLevelChanged.java deleted file mode 100644 index b40b450ab9..0000000000 --- a/runelite-api/src/main/java/net/runelite/api/events/BoostedLevelChanged.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (c) 2018, Adam - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package net.runelite.api.events; - -import net.runelite.api.Skill; -import lombok.Data; - -/** - * An event where a players skill level has been temporarily modified. - *

- * Examples of when this event may trigger include: - *

- *

- * Use {@link net.runelite.api.Client#getBoostedSkillLevel(Skill)} in order to - * retrieve the newly boosted skill level. - */ -@Data -public class BoostedLevelChanged implements Event -{ - /** - * The skill that has had its level modified. - */ - private Skill skill; -} diff --git a/runelite-api/src/main/java/net/runelite/api/events/ExperienceChanged.java b/runelite-api/src/main/java/net/runelite/api/events/StatChanged.java similarity index 81% rename from runelite-api/src/main/java/net/runelite/api/events/ExperienceChanged.java rename to runelite-api/src/main/java/net/runelite/api/events/StatChanged.java index c2b1515027..afdd562f64 100644 --- a/runelite-api/src/main/java/net/runelite/api/events/ExperienceChanged.java +++ b/runelite-api/src/main/java/net/runelite/api/events/StatChanged.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, Adam + * Copyright (c) 2017-2019, Adam * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -22,20 +22,19 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - package net.runelite.api.events; +import lombok.Value; import net.runelite.api.Skill; -import lombok.Data; /** - * An event where the experience level of a {@link Skill} has been modified. + * An event where the experience, level, or boosted level of a {@link Skill} has been modified. */ -@Data -public class ExperienceChanged implements Event +@Value +public class StatChanged implements Event { - /** - * The modified skill. - */ - private Skill skill; + private final Skill skill; + private final int xp; + private final int level; + private final int boostedLevel; } diff --git a/runelite-client/src/main/java/net/runelite/client/game/UntradeableItemMapping.java b/runelite-client/src/main/java/net/runelite/client/game/UntradeableItemMapping.java index 2fd63f1fc0..5dd393acb1 100644 --- a/runelite-client/src/main/java/net/runelite/client/game/UntradeableItemMapping.java +++ b/runelite-client/src/main/java/net/runelite/client/game/UntradeableItemMapping.java @@ -53,7 +53,18 @@ public enum UntradeableItemMapping CRYSTAL_LEGS(ItemID.CRYSTAL_LEGS, 2, ItemID.CRYSTAL_ARMOUR_SEED), CRYSTAL_LEGS_INACTIVE(ItemID.CRYSTAL_LEGS_INACTIVE, 2, ItemID.CRYSTAL_ARMOUR_SEED), CRYSTAL_BODY(ItemID.CRYSTAL_BODY, 3, ItemID.CRYSTAL_ARMOUR_SEED), - CRYSTAL_BODY_INACTIVE(ItemID.CRYSTAL_BODY_INACTIVE, 3, ItemID.CRYSTAL_ARMOUR_SEED); + CRYSTAL_BODY_INACTIVE(ItemID.CRYSTAL_BODY_INACTIVE, 3, ItemID.CRYSTAL_ARMOUR_SEED), + + TATTERED_MOON_PAGE(ItemID.TATTERED_MOON_PAGE, 1000, ItemID.COINS_995), + TATTERED_SUN_PAGE(ItemID.TATTERED_SUN_PAGE, 1000, ItemID.COINS_995), + TATTERED_TEMPLE_PAGE(ItemID.TATTERED_TEMPLE_PAGE, 1000, ItemID.COINS_995), + + LONG_BONE(ItemID.LONG_BONE, 1000, ItemID.COINS_995), + CURVED_BONE(ItemID.CURVED_BONE, 2000, ItemID.COINS_995), + PERFECT_SHELL(ItemID.PERFECT_SHELL, 600, ItemID.COINS_995), + PERFECT_SNAIL_SHELL(ItemID.PERFECT_SNAIL_SHELL, 600, ItemID.COINS_995), + SNAIL_SHELL(ItemID.SNAIL_SHELL, 600, ItemID.COINS_995), + TORTOISE_SHELL(ItemID.TORTOISE_SHELL, 250, ItemID.COINS_995); private static final ImmutableMap UNTRADEABLE_RECLAIM_MAP; diff --git a/runelite-client/src/main/java/net/runelite/client/game/XpDropManager.java b/runelite-client/src/main/java/net/runelite/client/game/XpDropManager.java index b42cbdc99f..614437b2a1 100644 --- a/runelite-client/src/main/java/net/runelite/client/game/XpDropManager.java +++ b/runelite-client/src/main/java/net/runelite/client/game/XpDropManager.java @@ -8,8 +8,8 @@ import lombok.AccessLevel; import lombok.Getter; import net.runelite.api.Client; import net.runelite.api.Skill; -import net.runelite.api.events.ExperienceChanged; import net.runelite.api.events.GameStateChanged; +import net.runelite.api.events.StatChanged; import net.runelite.client.eventbus.EventBus; @Singleton @@ -34,7 +34,7 @@ public class XpDropManager this.client = client; this.eventBus = eventBus; eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(ExperienceChanged.class, this, this::onExperienceChanged); + eventBus.subscribe(StatChanged.class, this, this::onStatChanged); } private void onGameStateChanged(GameStateChanged event) @@ -43,7 +43,7 @@ public class XpDropManager tickShow = 0; } - private void onExperienceChanged(ExperienceChanged event) + private void onStatChanged(StatChanged event) { final Skill skill = event.getSkill(); final int xp = client.getSkillExperience(skill); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/agility/AgilityPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/agility/AgilityPlugin.java index 4edaf9e0b1..3f49d5c1de 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/agility/AgilityPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/agility/AgilityPlugin.java @@ -50,12 +50,10 @@ import net.runelite.api.TileItem; import net.runelite.api.TileObject; import net.runelite.api.coords.WorldPoint; import net.runelite.api.events.BeforeRender; -import net.runelite.api.events.BoostedLevelChanged; import net.runelite.api.events.ConfigChanged; import net.runelite.api.events.DecorativeObjectChanged; import net.runelite.api.events.DecorativeObjectDespawned; import net.runelite.api.events.DecorativeObjectSpawned; -import net.runelite.api.events.ExperienceChanged; import net.runelite.api.events.GameObjectChanged; import net.runelite.api.events.GameObjectDespawned; import net.runelite.api.events.GameObjectSpawned; @@ -67,6 +65,7 @@ import net.runelite.api.events.GroundObjectSpawned; import net.runelite.api.events.ItemDespawned; import net.runelite.api.events.ItemSpawned; import net.runelite.api.events.MenuOpened; +import net.runelite.api.events.StatChanged; import net.runelite.api.events.WallObjectChanged; import net.runelite.api.events.WallObjectDespawned; import net.runelite.api.events.WallObjectSpawned; @@ -201,8 +200,7 @@ public class AgilityPlugin extends Plugin { eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(ExperienceChanged.class, this, this::onExperienceChanged); - eventBus.subscribe(BoostedLevelChanged.class, this, this::onBoostedLevelChanged); + eventBus.subscribe(StatChanged .class, this, this::onStatChanged); eventBus.subscribe(ItemSpawned.class, this, this::onItemSpawned); eventBus.subscribe(ItemDespawned.class, this, this::onItemDespawned); eventBus.subscribe(GameTick.class, this, this::onGameTick); @@ -295,9 +293,16 @@ public class AgilityPlugin extends Plugin this.showAgilityArenaTimer = config.showAgilityArenaTimer(); } - private void onExperienceChanged(ExperienceChanged event) + public void onStatChanged(StatChanged statChanged) { - if (event.getSkill() != AGILITY || !this.showLapCount) + if (statChanged.getSkill() != AGILITY) + { + return; + } + + agilityLevel = statChanged.getBoostedLevel(); + + if (!this.showLapCount) { return; } @@ -330,15 +335,6 @@ public class AgilityPlugin extends Plugin } } - private void onBoostedLevelChanged(BoostedLevelChanged boostedLevelChanged) - { - Skill skill = boostedLevelChanged.getSkill(); - if (skill == AGILITY) - { - agilityLevel = client.getBoostedSkillLevel(skill); - } - } - private void onItemSpawned(ItemSpawned itemSpawned) { if (obstacles.isEmpty()) diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/boosts/BoostsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/boosts/BoostsPlugin.java index 7f80f37327..6f0dabe58b 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/boosts/BoostsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/boosts/BoostsPlugin.java @@ -39,10 +39,10 @@ import net.runelite.api.Client; import net.runelite.api.Constants; import net.runelite.api.Prayer; import net.runelite.api.Skill; -import net.runelite.api.events.BoostedLevelChanged; import net.runelite.api.events.ConfigChanged; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameTick; +import net.runelite.api.events.StatChanged; import net.runelite.client.Notifier; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.EventBus; @@ -174,7 +174,7 @@ public class BoostsPlugin extends Plugin { eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(BoostedLevelChanged.class, this, this::onBoostedLevelChanged); + eventBus.subscribe(StatChanged.class, this, this::onStatChanged); eventBus.subscribe(GameTick.class, this, this::onGameTick); } @@ -211,9 +211,9 @@ public class BoostsPlugin extends Plugin } } - private void onBoostedLevelChanged(BoostedLevelChanged boostedLevelChanged) + private void onStatChanged(StatChanged statChanged) { - Skill skill = boostedLevelChanged.getSkill(); + Skill skill = statChanged.getSkill(); if (!BOOSTABLE_COMBAT_SKILLS.contains(skill) && !BOOSTABLE_NON_COMBAT_SKILLS.contains(skill)) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CoordinateClue.java b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CoordinateClue.java index 3d833104d7..43965ade9d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CoordinateClue.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/cluescrolls/clues/CoordinateClue.java @@ -63,7 +63,7 @@ public class CoordinateClue extends ClueScroll implements TextClueScroll, Locati .put(new WorldPoint(2383, 3370, 0), "West of the outpost") .put(new WorldPoint(3312, 3375, 0), "North-west of Exam Centre, on the hill.") .put(new WorldPoint(3121, 3384, 0), "North-east of Draynor Manor, near River Lum.") - .put(new WorldPoint(3430, 3388, 0), "West of Mort Myre Swamp.") + .put(new WorldPoint(3430, 3388, 0), "West of Mort Myre Swamp (BKR).") .put(new WorldPoint(2920, 3403, 0), "South-east of Taverley, near Lady of the Lake.") .put(new WorldPoint(2594, 2899, 0), "South-east of Feldip Hills, by the crimson swifts (AKS).") .put(new WorldPoint(2387, 3435, 0), "West of Tree Gnome Stronghold, near the pen containing terrorbirds.") @@ -71,21 +71,21 @@ public class CoordinateClue extends ClueScroll implements TextClueScroll, Locati .put(new WorldPoint(2381, 3468, 0), "West of Tree Gnome Stronghold, north of the pen with terrorbirds.") .put(new WorldPoint(3005, 3475, 0), "Ice Mountain, west of Edgeville.") .put(new WorldPoint(2585, 3505, 0), "By the shore line north of the Coal Trucks.") - .put(new WorldPoint(3443, 3515, 0), "South of Slayer Tower.") + .put(new WorldPoint(3443, 3515, 0), "South of Slayer Tower (CKS).") .put(new WorldPoint(2416, 3516, 0), "Tree Gnome Stronghold, west of Grand Tree, near swamp.") - .put(new WorldPoint(3429, 3523, 0), "South of Slayer Tower.") - .put(new WorldPoint(2363, 3531, 0), "North-east of Eagles' Peak.") + .put(new WorldPoint(3429, 3523, 0), "South of Slayer Tower (CKS).") + .put(new WorldPoint(2363, 3531, 0), "North-east of Eagles' Peak (AKQ).") .put(new WorldPoint(2919, 3535, 0), "East of Burthorpe pub.") .put(new WorldPoint(3548, 3560, 0), "Inside Fenkenstrain's Castle.") .put(new WorldPoint(1456, 3620, 0), "Graveyard west of Shayzien (DJR).") .put(new WorldPoint(2735, 3638, 0), "East of Rellekka, north-west of Golden Apple Tree (AJR).") .put(new WorldPoint(2681, 3653, 0), "Rellekka, in the garden of the south-east house.") - .put(new WorldPoint(2537, 3881, 0), "Miscellania.") + .put(new WorldPoint(2537, 3881, 0), "Miscellania (CIP).") .put(new WorldPoint(2828, 3234, 0), "Southern coast of Crandor.") .put(new WorldPoint(1247, 3726, 0), "Just inside the Farming Guild") .put(new WorldPoint(3770, 3898, 0), "On the small island north-east of Fossil Island's mushroom forest.") // Hard - .put(new WorldPoint(2209, 3161, 0), "North-east of Tyras Camp.") + .put(new WorldPoint(2209, 3161, 0), "North-east of Tyras Camp (BJS).") .put(new WorldPoint(2181, 3206, 0), "South of Elf Camp.") .put(new WorldPoint(3081, 3209, 0), "Small Island (CLP).") .put(new WorldPoint(3374, 3250, 0), "Duel Arena combat area.") @@ -98,12 +98,12 @@ public class CoordinateClue extends ClueScroll implements TextClueScroll, Locati .put(new WorldPoint(2581, 3030, 0), "Gu'Tanoth island, enter cave north-west of Feldip Hills (AKS).") .put(new WorldPoint(2961, 3024, 0), "Ship yard (DKP).") .put(new WorldPoint(2339, 3311, 0), "East of Prifddinas on Arandar mountain pass.") - .put(new WorldPoint(3440, 3341, 0), "Nature Spirit's grotto.") - .put(new WorldPoint(2763, 2974, 0), "Cairn Isle, west of Shilo Village.") + .put(new WorldPoint(3440, 3341, 0), "Nature Spirit's grotto (BIP).") + .put(new WorldPoint(2763, 2974, 0), "Cairn Isle, west of Shilo Village (CKR).") .put(new WorldPoint(3138, 2969, 0), "West of Bandit Camp in Kharidian Desert.") .put(new WorldPoint(2924, 2963, 0), "On the southern part of eastern Karamja.") - .put(new WorldPoint(2838, 2914, 0), "Kharazi Jungle, near water pool.") - .put(new WorldPoint(3441, 3419, 0), "Mort Myre Swamp.") + .put(new WorldPoint(2838, 2914, 0), "Kharazi Jungle, near water pool (CKR).") + .put(new WorldPoint(3441, 3419, 0), "Mort Myre Swamp (BKR).") .put(new WorldPoint(2950, 2902, 0), "South-east of Kharazi Jungle.") .put(new WorldPoint(2775, 2891, 0), "South-west of Kharazi Jungle.") .put(new WorldPoint(3113, 3602, 0), "Wilderness. North of Edgeville (level 11).") @@ -113,8 +113,8 @@ public class CoordinateClue extends ClueScroll implements TextClueScroll, Locati .put(new WorldPoint(3305, 3692, 0), "Wilderness. West of eastern green dragon.") .put(new WorldPoint(3055, 3696, 0), "Wilderness. Bandit Camp.") .put(new WorldPoint(3302, 3696, 0), "Wilderness. West of eastern green dragon.") - .put(new WorldPoint(1479, 3696, 0), "Lizardman Canyon.") - .put(new WorldPoint(2712, 3732, 0), "North-east of Rellekka.") + .put(new WorldPoint(1479, 3696, 0), "Lizardman Canyon (DJR).") + .put(new WorldPoint(2712, 3732, 0), "North-east of Rellekka (DKS).") .put(new WorldPoint(2970, 3749, 0), "Wilderness. Forgotten Cemetery.") .put(new WorldPoint(3094, 3764, 0), "Wilderness. Mining site north of Bandit Camp.") .put(new WorldPoint(3311, 3769, 0), "Wilderness. North of Venenatis.") @@ -188,7 +188,7 @@ public class CoordinateClue extends ClueScroll implements TextClueScroll, Locati .put(new WorldPoint(1698, 3792, 0), "Arceuus church.") .put(new WorldPoint(2951, 3820, 0), "Wilderness. Chaos Temple (level 38).") .put(new WorldPoint(2202, 3825, 0), "Pirates' Cove, between Lunar Isle and Rellekka.") - .put(new WorldPoint(1761, 3853, 0), "Arceuus essence mine.") + .put(new WorldPoint(1761, 3853, 0), "Arceuus essence mine (CIS).") .put(new WorldPoint(2090, 3863, 0), "South of Lunar Isle, west of Astral altar.") .put(new WorldPoint(1442, 3878, 0), "Sulphur Mine.") .put(new WorldPoint(3380, 3929, 0), "Wilderness. Near Volcano.") diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsPlugin.java index bfe3140920..dc39eb00f3 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/devtools/DevToolsPlugin.java @@ -42,11 +42,10 @@ import net.runelite.api.Player; import net.runelite.api.Skill; import net.runelite.api.coords.WorldPoint; import net.runelite.api.events.AreaSoundEffectPlayed; -import net.runelite.api.events.BoostedLevelChanged; import net.runelite.api.events.CommandExecuted; -import net.runelite.api.events.ExperienceChanged; import net.runelite.api.events.MenuEntryAdded; import net.runelite.api.events.SoundEffectPlayed; +import net.runelite.api.events.StatChanged; import net.runelite.api.events.VarbitChanged; import net.runelite.api.kit.KitType; import net.runelite.client.config.ConfigManager; @@ -301,9 +300,13 @@ public class DevToolsPlugin extends Plugin client.queueChangedSkill(skill); - ExperienceChanged experienceChanged = new ExperienceChanged(); - experienceChanged.setSkill(skill); - eventBus.post(ExperienceChanged.class, experienceChanged); + StatChanged statChanged = new StatChanged( + skill, + totalXp, + level, + level + ); + eventBus.post(StatChanged.class, statChanged); break; } case "setstat": @@ -320,13 +323,13 @@ public class DevToolsPlugin extends Plugin client.queueChangedSkill(skill); - ExperienceChanged experienceChanged = new ExperienceChanged(); - experienceChanged.setSkill(skill); - eventBus.post(ExperienceChanged.class, experienceChanged); - - BoostedLevelChanged boostedLevelChanged = new BoostedLevelChanged(); - boostedLevelChanged.setSkill(skill); - eventBus.post(BoostedLevelChanged.class, boostedLevelChanged); + StatChanged statChanged = new StatChanged( + skill, + xp, + level, + level + ); + eventBus.post(StatChanged.class, statChanged); break; } case "anim": diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordPlugin.java index b4a4192ad0..0a6a97daf4 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/discord/DiscordPlugin.java @@ -47,8 +47,8 @@ import net.runelite.api.Skill; import net.runelite.api.WorldType; import net.runelite.api.coords.WorldPoint; import net.runelite.api.events.ConfigChanged; -import net.runelite.api.events.ExperienceChanged; import net.runelite.api.events.GameStateChanged; +import net.runelite.api.events.StatChanged; import net.runelite.api.events.VarbitChanged; import net.runelite.client.RuneLiteProperties; import net.runelite.client.config.ConfigManager; @@ -175,7 +175,7 @@ public class DiscordPlugin extends Plugin { eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(ExperienceChanged.class, this, this::onExperienceChanged); + eventBus.subscribe(StatChanged.class, this, this::onStatChanged); eventBus.subscribe(VarbitChanged.class, this, this::onVarbitChanged); eventBus.subscribe(DiscordReady.class, this, this::onDiscordReady); eventBus.subscribe(DiscordJoinRequest.class, this, this::onDiscordJoinRequest); @@ -222,17 +222,18 @@ public class DiscordPlugin extends Plugin } } - private void onExperienceChanged(ExperienceChanged event) + private void onStatChanged(StatChanged statChanged) { - final int exp = client.getSkillExperience(event.getSkill()); - final Integer previous = skillExp.put(event.getSkill(), exp); + final Skill skill = statChanged.getSkill(); + final int exp = statChanged.getXp(); + final Integer previous = skillExp.put(skill, exp); if (previous == null || previous >= exp) { return; } - final DiscordGameEventType discordGameEventType = DiscordGameEventType.fromSkill(event.getSkill()); + final DiscordGameEventType discordGameEventType = DiscordGameEventType.fromSkill(skill); if (discordGameEventType != null && this.showSkillingActivity) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/music/MusicPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/music/MusicPlugin.java index b21e29bfd6..3c563aedee 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/music/MusicPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/music/MusicPlugin.java @@ -67,7 +67,8 @@ import net.runelite.client.plugins.PluginDescriptor; @PluginDescriptor( name = "Music", - description = "Adds search and filter for the music list, and additional volume control" + description = "Adds search and filter for the music list, and additional volume control", + tags = {"sound", "volume"} ) public class MusicPlugin extends Plugin { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/performancestats/PerformanceStatsPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/performancestats/PerformanceStatsPlugin.java index 9398c5e884..70f74bbe4c 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/performancestats/PerformanceStatsPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/performancestats/PerformanceStatsPlugin.java @@ -42,11 +42,11 @@ import net.runelite.api.NPC; import net.runelite.api.Skill; import net.runelite.api.WorldType; import net.runelite.api.events.ConfigChanged; -import net.runelite.api.events.ExperienceChanged; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameTick; import net.runelite.api.events.HitsplatApplied; import net.runelite.api.events.ScriptCallbackEvent; +import net.runelite.api.events.StatChanged; import net.runelite.client.chat.ChatColorType; import net.runelite.client.chat.ChatMessageBuilder; import net.runelite.client.chat.ChatMessageManager; @@ -165,7 +165,7 @@ public class PerformanceStatsPlugin extends Plugin eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); eventBus.subscribe(HitsplatApplied.class, this, this::onHitsplatApplied); - eventBus.subscribe(ExperienceChanged.class, this, this::onExperienceChanged); + eventBus.subscribe(StatChanged.class, this, this::onStatChanged); eventBus.subscribe(ScriptCallbackEvent.class, this, this::onScriptCallbackEvent); eventBus.subscribe(GameTick.class, this, this::onGameTick); eventBus.subscribe(OverlayMenuClicked.class, this, this::onOverlayMenuClicked); @@ -207,7 +207,7 @@ public class PerformanceStatsPlugin extends Plugin } } - private void onExperienceChanged(ExperienceChanged c) + private void onStatChanged(StatChanged c) { if (isPaused() || hopping) { 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 dff42a493d..e8e03b6569 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 @@ -66,7 +66,6 @@ import net.runelite.api.WorldType; import net.runelite.api.coords.WorldPoint; import net.runelite.api.events.ChatMessage; import net.runelite.api.events.ConfigChanged; -import net.runelite.api.events.ExperienceChanged; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameTick; import net.runelite.api.events.InteractingChanged; @@ -74,6 +73,7 @@ import net.runelite.api.events.NpcDefinitionChanged; import net.runelite.api.events.NpcDespawned; import net.runelite.api.events.NpcSpawned; import net.runelite.api.events.VarbitChanged; +import net.runelite.api.events.StatChanged; import net.runelite.api.vars.SlayerUnlock; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; @@ -368,7 +368,7 @@ public class SlayerPlugin extends Plugin eventBus.subscribe(VarbitChanged.class, this, this::onVarbitChanged); eventBus.subscribe(GameTick.class, this, this::onGameTick); eventBus.subscribe(ChatMessage.class, this, this::onChatMessage); - eventBus.subscribe(ExperienceChanged.class, this, this::onExperienceChanged); + eventBus.subscribe(StatChanged.class, this, this::onStatChanged); eventBus.subscribe(InteractingChanged.class, this, this::onInteractingChanged); } @@ -730,14 +730,14 @@ public class SlayerPlugin extends Plugin } } - public void onExperienceChanged(ExperienceChanged event) + public void onStatChanged(StatChanged statChanged) { - if (event.getSkill() != SLAYER) + if (statChanged.getSkill() != SLAYER) { return; } - int slayerExp = client.getSkillExperience(SLAYER); + int slayerExp = statChanged.getXp(); if (slayerExp <= cachedXp) { diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/timers/TimersPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/timers/TimersPlugin.java index 7df7b00989..de2d73c5d1 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/timers/TimersPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/timers/TimersPlugin.java @@ -54,7 +54,6 @@ import net.runelite.api.Varbits; import net.runelite.api.WorldType; import net.runelite.api.coords.WorldPoint; import net.runelite.api.events.AnimationChanged; -import net.runelite.api.events.BoostedLevelChanged; import net.runelite.api.events.ChatMessage; import net.runelite.api.events.ConfigChanged; import net.runelite.api.events.GameStateChanged; @@ -64,6 +63,7 @@ import net.runelite.api.events.LocalPlayerDeath; import net.runelite.api.events.MenuOptionClicked; import net.runelite.api.events.NpcDespawned; import net.runelite.api.events.SpotAnimationChanged; +import net.runelite.api.events.StatChanged; import net.runelite.api.events.VarbitChanged; import net.runelite.api.events.WidgetHiddenChanged; import net.runelite.api.widgets.Widget; @@ -221,7 +221,7 @@ public class TimersPlugin extends Plugin eventBus.subscribe(ItemContainerChanged.class, this, this::onItemContainerChanged); eventBus.subscribe(NpcDespawned.class, this, this::onNpcDespawned); eventBus.subscribe(LocalPlayerDeath.class, this, this::onLocalPlayerDeath); - eventBus.subscribe(BoostedLevelChanged.class, this, this::onBoostedLevelChanged); + eventBus.subscribe(StatChanged.class, this, this::onStatChanged); } private void onVarbitChanged(VarbitChanged event) @@ -942,7 +942,7 @@ public class TimersPlugin extends Plugin infoBoxManager.removeIf(t -> t instanceof TimerTimer && ((TimerTimer) t).getTimer().isRemovedOnDeath()); } - private void onBoostedLevelChanged(BoostedLevelChanged event) + private void onStatChanged(StatChanged event) { Skill skill = event.getSkill(); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/WorldMapPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/WorldMapPlugin.java index dbbe3c2a3c..18c1cd666f 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/WorldMapPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/worldmap/WorldMapPlugin.java @@ -31,13 +31,12 @@ import java.awt.image.BufferedImage; import java.util.Arrays; import java.util.concurrent.ScheduledExecutorService; import net.runelite.api.Client; -import net.runelite.api.Experience; import net.runelite.api.GameState; -import net.runelite.api.Skill; import net.runelite.api.Quest; import net.runelite.api.QuestState; +import net.runelite.api.Skill; import net.runelite.api.events.ConfigChanged; -import net.runelite.api.events.ExperienceChanged; +import net.runelite.api.events.StatChanged; import net.runelite.api.events.WidgetLoaded; import net.runelite.api.widgets.WidgetID; import net.runelite.client.callback.ClientThread; @@ -189,7 +188,7 @@ public class WorldMapPlugin extends Plugin private void addSubscriptions() { eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(ExperienceChanged.class, this, this::onExperienceChanged); + eventBus.subscribe(StatChanged.class, this, this::onStatChanged); eventBus.subscribe(WidgetLoaded.class, this, this::onWidgetLoaded); } @@ -204,25 +203,29 @@ public class WorldMapPlugin extends Plugin updateShownIcons(); } - private void onExperienceChanged(ExperienceChanged event) + private void onStatChanged(StatChanged statChanged) { - if (event.getSkill() == Skill.AGILITY) + switch (statChanged.getSkill()) { - int newAgilityLevel = Experience.getLevelForXp(client.getSkillExperience(Skill.AGILITY)); - if (newAgilityLevel != agilityLevel) + case AGILITY: { - agilityLevel = newAgilityLevel; - updateAgilityIcons(); + int newAgilityLevel = statChanged.getLevel(); + if (newAgilityLevel != agilityLevel) + { + agilityLevel = newAgilityLevel; + updateAgilityIcons(); + } + break; } - } - - if (event.getSkill() == Skill.WOODCUTTING) - { - int newWoodcutLevel = Experience.getLevelForXp(client.getSkillExperience(Skill.WOODCUTTING)); - if (newWoodcutLevel != woodcuttingLevel) + case WOODCUTTING: { - woodcuttingLevel = newWoodcutLevel; - updateRareTreeIcons(); + int newWoodcutLevel = statChanged.getLevel(); + if (newWoodcutLevel != woodcuttingLevel) + { + woodcuttingLevel = newWoodcutLevel; + updateRareTreeIcons(); + } + break; } } } diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesPlugin.java index 78b4ed1a79..89f99eee94 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xpglobes/XpGlobesPlugin.java @@ -39,8 +39,8 @@ 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.ExperienceChanged; import net.runelite.api.events.GameStateChanged; +import net.runelite.api.events.StatChanged; import net.runelite.client.config.ConfigManager; import net.runelite.client.eventbus.EventBus; import net.runelite.client.plugins.Plugin; @@ -133,15 +133,15 @@ public class XpGlobesPlugin extends Plugin private void addSubscriptions() { eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); - eventBus.subscribe(ExperienceChanged.class, this, this::onExperienceChanged); + eventBus.subscribe(StatChanged.class, this, this::onStatChanged); eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); } - private void onExperienceChanged(ExperienceChanged event) + private void onStatChanged(StatChanged statChanged) { - Skill skill = event.getSkill(); - int currentXp = client.getSkillExperience(skill); - int currentLevel = Experience.getLevelForXp(currentXp); + Skill skill = statChanged.getSkill(); + int currentXp = statChanged.getXp(); + int currentLevel = statChanged.getLevel(); int skillIdx = skill.ordinal(); XpGlobe cachedGlobe = globeCache[skillIdx]; diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerPlugin.java index 6a43768bff..4c8c448c44 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/xptracker/XpTrackerPlugin.java @@ -53,12 +53,12 @@ import net.runelite.api.Skill; import net.runelite.api.VarPlayer; import net.runelite.api.WorldType; import net.runelite.api.events.ConfigChanged; -import net.runelite.api.events.ExperienceChanged; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameTick; import net.runelite.api.events.MenuEntryAdded; import net.runelite.api.events.MenuOptionClicked; import net.runelite.api.events.NpcDespawned; +import net.runelite.api.events.StatChanged; import net.runelite.api.widgets.WidgetID; import static net.runelite.api.widgets.WidgetInfo.TO_GROUP; import net.runelite.client.config.ConfigManager; @@ -195,7 +195,7 @@ public class XpTrackerPlugin extends Plugin { eventBus.subscribe(ConfigChanged.class, this, this::onConfigChanged); eventBus.subscribe(GameStateChanged.class, this, this::onGameStateChanged); - eventBus.subscribe(ExperienceChanged.class, this, this::onExperienceChanged); + eventBus.subscribe(StatChanged.class, this, this::onStatChanged); eventBus.subscribe(NpcDespawned.class, this, this::onNpcDespawned); eventBus.subscribe(GameTick.class, this, this::onGameTick); eventBus.subscribe(MenuEntryAdded.class, this, this::onMenuEntryAdded); @@ -371,11 +371,11 @@ public class XpTrackerPlugin extends Plugin } } - void onExperienceChanged(ExperienceChanged event) + void onStatChanged(StatChanged statChanged) { - final Skill skill = event.getSkill(); - final int currentXp = client.getSkillExperience(skill); - final int currentLevel = Experience.getLevelForXp(currentXp); + final Skill skill = statChanged.getSkill(); + final int currentXp = statChanged.getXp(); + final int currentLevel = statChanged.getLevel(); final VarPlayer startGoal = startGoalVarpForSkill(skill); final VarPlayer endGoal = endGoalVarpForSkill(skill); final int startGoalXp = startGoal != null ? client.getVar(startGoal) : -1; diff --git a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java index ac4d58fa13..42156c3105 100644 --- a/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java +++ b/runelite-client/src/main/java/net/runelite/client/ui/overlay/OverlayRenderer.java @@ -502,6 +502,7 @@ public class OverlayRenderer extends MouseAdapter implements KeyListener } graphics.translate(point.x, point.y); + overlay.getBounds().setLocation(point); final Dimension overlayDimension; try @@ -515,7 +516,7 @@ public class OverlayRenderer extends MouseAdapter implements KeyListener } final Dimension dimension = MoreObjects.firstNonNull(overlayDimension, new Dimension()); - overlay.setBounds(new Rectangle(point, dimension)); + overlay.getBounds().setSize(dimension); } private boolean shouldInvalidateBounds() 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 735a193710..2264531825 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 @@ -40,10 +40,10 @@ import net.runelite.api.Skill; import net.runelite.api.Varbits; import net.runelite.api.coords.LocalPoint; import net.runelite.api.events.ChatMessage; -import net.runelite.api.events.ExperienceChanged; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameTick; import net.runelite.api.events.VarbitChanged; +import net.runelite.api.events.StatChanged; import net.runelite.api.widgets.Widget; import net.runelite.api.widgets.WidgetInfo; import net.runelite.client.Notifier; @@ -368,9 +368,6 @@ public class SlayerPluginTest slayerPlugin.getCurrentTask().setTaskName("cows"); slayerPlugin.getCurrentTask().setAmount(42); - final ExperienceChanged experienceChanged = new ExperienceChanged(); - experienceChanged.setSkill(Skill.SLAYER); - ChatMessage chatMessageEvent = new ChatMessage(null, GAMEMESSAGE, "Perterter", TASK_COMPLETE, null, 0); slayerPlugin.onChatMessage(chatMessageEvent); @@ -462,16 +459,23 @@ public class SlayerPluginTest when(player.getLocalLocation()).thenReturn(new LocalPoint(0, 0)); when(client.getLocalPlayer()).thenReturn(player); - final ExperienceChanged experienceChanged = new ExperienceChanged(); - experienceChanged.setSkill(Skill.SLAYER); - - when(client.getSkillExperience(Skill.SLAYER)).thenReturn(100); - slayerPlugin.onExperienceChanged(experienceChanged); + StatChanged statChanged = new StatChanged( + Skill.SLAYER, + 100, + 2, + 2 + ); + slayerPlugin.onStatChanged(statChanged); slayerPlugin.setTask("Dagannoth", 143, 143, true, 0); - when(client.getSkillExperience(Skill.SLAYER)).thenReturn(110); - slayerPlugin.onExperienceChanged(experienceChanged); + statChanged = new StatChanged( + Skill.SLAYER, + 110, + 2, + 2 + ); + slayerPlugin.onStatChanged(statChanged); assertEquals(142, slayerPlugin.getCurrentTask().getAmount()); } @@ -483,17 +487,24 @@ public class SlayerPluginTest when(player.getLocalLocation()).thenReturn(new LocalPoint(0, 0)); when(client.getLocalPlayer()).thenReturn(player); - final ExperienceChanged experienceChanged = new ExperienceChanged(); - experienceChanged.setSkill(Skill.SLAYER); - - when(client.getSkillExperience(Skill.SLAYER)).thenReturn(100); - slayerPlugin.onExperienceChanged(experienceChanged); + StatChanged statChanged = new StatChanged( + Skill.SLAYER, + 100, + 2, + 2 + ); + slayerPlugin.onStatChanged(statChanged); slayerPlugin.setTask("Monster", 98, 98, true, 0); assert Task.getTask("Monster") == null; - when(client.getSkillExperience(Skill.SLAYER)).thenReturn(110); - slayerPlugin.onExperienceChanged(experienceChanged); + statChanged = new StatChanged( + Skill.SLAYER, + 110, + 2, + 2 + ); + slayerPlugin.onStatChanged(statChanged); assertEquals(97, slayerPlugin.getCurrentTask().getAmount()); } @@ -505,23 +516,35 @@ public class SlayerPluginTest when(player.getLocalLocation()).thenReturn(new LocalPoint(0, 0)); when(client.getLocalPlayer()).thenReturn(player); - final ExperienceChanged experienceChanged = new ExperienceChanged(); - experienceChanged.setSkill(Skill.SLAYER); - - when(client.getSkillExperience(Skill.SLAYER)).thenReturn(100); - slayerPlugin.onExperienceChanged(experienceChanged); + StatChanged statChanged = new StatChanged( + Skill.SLAYER, + 100, + 2, + 2 + ); + slayerPlugin.onStatChanged(statChanged); slayerPlugin.setTask("TzTok-Jad", 1, 1, true, 0); // One bat kill - when(client.getSkillExperience(Skill.SLAYER)).thenReturn(110); - slayerPlugin.onExperienceChanged(experienceChanged); + statChanged = new StatChanged( + Skill.SLAYER, + 110, + 2, + 2 + ); + slayerPlugin.onStatChanged(statChanged); assertEquals(1, slayerPlugin.getCurrentTask().getAmount()); // One Jad kill - when(client.getSkillExperience(Skill.SLAYER)).thenReturn(25_360); - slayerPlugin.onExperienceChanged(experienceChanged); + statChanged = new StatChanged( + Skill.SLAYER, + 25360, + -1, + -1 + ); + slayerPlugin.onStatChanged(statChanged); assertEquals(0, slayerPlugin.getCurrentTask().getAmount()); } @@ -533,23 +556,35 @@ public class SlayerPluginTest when(player.getLocalLocation()).thenReturn(new LocalPoint(0, 0)); when(client.getLocalPlayer()).thenReturn(player); - final ExperienceChanged experienceChanged = new ExperienceChanged(); - experienceChanged.setSkill(Skill.SLAYER); - - when(client.getSkillExperience(Skill.SLAYER)).thenReturn(100); - slayerPlugin.onExperienceChanged(experienceChanged); + StatChanged statChanged = new StatChanged( + Skill.SLAYER, + 110, + 2, + 2 + ); + slayerPlugin.onStatChanged(statChanged); slayerPlugin.setTask("TzKal-Zuk", 1, 1, true, 0); // One bat kill - when(client.getSkillExperience(Skill.SLAYER)).thenReturn(125); - slayerPlugin.onExperienceChanged(experienceChanged); + statChanged = new StatChanged( + Skill.SLAYER, + 125, + 2, + 2 + ); + slayerPlugin.onStatChanged(statChanged); assertEquals(1, slayerPlugin.getCurrentTask().getAmount()); // One Zuk kill - when(client.getSkillExperience(Skill.SLAYER)).thenReturn(102_015); - slayerPlugin.onExperienceChanged(experienceChanged); + statChanged = new StatChanged( + Skill.SLAYER, + 102_015, + -1, + -1 + ); + slayerPlugin.onStatChanged(statChanged); assertEquals(0, slayerPlugin.getCurrentTask().getAmount()); } @@ -561,16 +596,23 @@ public class SlayerPluginTest when(player.getLocalLocation()).thenReturn(new LocalPoint(0, 0)); when(client.getLocalPlayer()).thenReturn(player); - final ExperienceChanged experienceChanged = new ExperienceChanged(); - experienceChanged.setSkill(Skill.SLAYER); - slayerPlugin.setTask("Bears", 35, 35, true, 0); - when(client.getSkillExperience(Skill.SLAYER)).thenReturn(0); - slayerPlugin.onExperienceChanged(experienceChanged); + StatChanged statChanged = new StatChanged( + Skill.SLAYER, + 0, + 1, + 1 + ); + slayerPlugin.onStatChanged(statChanged); - when(client.getSkillExperience(Skill.SLAYER)).thenReturn(27); - slayerPlugin.onExperienceChanged(experienceChanged); + statChanged = new StatChanged( + Skill.SLAYER, + 27, + 1, + 1 + ); + slayerPlugin.onStatChanged(statChanged); assertEquals(34, slayerPlugin.getCurrentTask().getAmount()); } diff --git a/runelite-client/src/test/java/net/runelite/client/plugins/xptracker/XpTrackerPluginTest.java b/runelite-client/src/test/java/net/runelite/client/plugins/xptracker/XpTrackerPluginTest.java index 166435e911..97994295d0 100644 --- a/runelite-client/src/test/java/net/runelite/client/plugins/xptracker/XpTrackerPluginTest.java +++ b/runelite-client/src/test/java/net/runelite/client/plugins/xptracker/XpTrackerPluginTest.java @@ -32,9 +32,9 @@ import net.runelite.api.Client; import net.runelite.api.GameState; import net.runelite.api.Player; import net.runelite.api.Skill; -import net.runelite.api.events.ExperienceChanged; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GameTick; +import net.runelite.api.events.StatChanged; import net.runelite.client.game.NPCManager; import net.runelite.client.game.SkillIconManager; import net.runelite.client.ui.ClientToolbar; @@ -101,10 +101,13 @@ public class XpTrackerPluginTest xpTrackerPlugin.onGameTick(GameTick.INSTANCE); // Gain attack xp - when(client.getSkillExperience(Skill.ATTACK)).thenReturn(100); - ExperienceChanged experienceChanged = new ExperienceChanged(); - experienceChanged.setSkill(Skill.ATTACK); - xpTrackerPlugin.onExperienceChanged(experienceChanged); + StatChanged statChanged = new StatChanged( + Skill.ATTACK, + 100, + 2, + 2 + ); + xpTrackerPlugin.onStatChanged(statChanged); // Offline gain when(client.getSkillExperience(Skill.ATTACK)).thenReturn(42000); diff --git a/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java b/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java index 16602cb4ea..1ea35c1cc5 100644 --- a/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java +++ b/runelite-mixins/src/main/java/net/runelite/mixins/RSClientMixin.java @@ -77,13 +77,11 @@ import net.runelite.api.WidgetNode; import net.runelite.api.WorldType; import net.runelite.api.coords.LocalPoint; import net.runelite.api.coords.WorldPoint; -import net.runelite.api.events.BoostedLevelChanged; import net.runelite.api.events.CanvasSizeChanged; import net.runelite.api.events.ChatMessage; import net.runelite.api.events.ClanChanged; import net.runelite.api.events.ClientTick; import net.runelite.api.events.DraggingWidgetChanged; -import net.runelite.api.events.ExperienceChanged; import net.runelite.api.events.GameStateChanged; import net.runelite.api.events.GrandExchangeOfferChanged; import net.runelite.api.events.Menu; @@ -96,6 +94,7 @@ import net.runelite.api.events.PlayerDespawned; import net.runelite.api.events.PlayerMenuOptionsChanged; import net.runelite.api.events.PlayerSpawned; import net.runelite.api.events.ResizeableChanged; +import net.runelite.api.events.StatChanged; import net.runelite.api.events.UsernameChanged; import net.runelite.api.events.VarbitChanged; import net.runelite.api.events.VolumeChanged; @@ -1039,15 +1038,19 @@ public abstract class RSClientMixin implements RSClient @Inject public static void experiencedChanged(int idx) { - ExperienceChanged experienceChanged = new ExperienceChanged(); Skill[] possibleSkills = Skill.values(); // We subtract one here because 'Overall' isn't considered a skill that's updated. if (idx < possibleSkills.length - 1) { Skill updatedSkill = possibleSkills[idx]; - experienceChanged.setSkill(updatedSkill); - client.getCallbacks().post(ExperienceChanged.class, experienceChanged); + StatChanged statChanged = new StatChanged( + updatedSkill, + client.getSkillExperience(updatedSkill), + client.getRealSkillLevel(updatedSkill), + client.getBoostedSkillLevel(updatedSkill) + ); + client.getCallbacks().post(StatChanged.class, statChanged); } } @@ -1060,9 +1063,13 @@ public abstract class RSClientMixin implements RSClient if (idx >= 0 && idx < skills.length - 1) { Skill updatedSkill = skills[idx]; - BoostedLevelChanged boostedLevelChanged = new BoostedLevelChanged(); - boostedLevelChanged.setSkill(updatedSkill); - client.getCallbacks().post(BoostedLevelChanged.class, boostedLevelChanged); + StatChanged statChanged = new StatChanged( + updatedSkill, + client.getSkillExperience(updatedSkill), + client.getRealSkillLevel(updatedSkill), + client.getBoostedSkillLevel(updatedSkill) + ); + client.getCallbacks().post(StatChanged.class, statChanged); } }