From 4750db953c4bec0b3fb22b1f57633a7cf3f1dc71 Mon Sep 17 00:00:00 2001 From: Empa <42304516+ItsEmpa@users.noreply.github.com> Date: Sun, 27 Oct 2024 10:25:30 +0100 Subject: Improvement: ScoreboardUpdateEvent (#2765) Co-authored-by: Empa Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com> --- src/main/java/at/hannibal2/skyhanni/data/BitsAPI.kt | 2 +- src/main/java/at/hannibal2/skyhanni/data/HotmData.kt | 2 +- src/main/java/at/hannibal2/skyhanni/data/MiningAPI.kt | 2 +- src/main/java/at/hannibal2/skyhanni/data/PurseAPI.kt | 8 ++++---- src/main/java/at/hannibal2/skyhanni/data/ScoreboardData.kt | 5 +++-- src/main/java/at/hannibal2/skyhanni/events/PurseChangeEvent.kt | 2 +- .../java/at/hannibal2/skyhanni/events/ScoreboardUpdateEvent.kt | 9 ++++++++- .../java/at/hannibal2/skyhanni/features/garden/pests/PestAPI.kt | 2 +- 8 files changed, 20 insertions(+), 12 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/data/BitsAPI.kt b/src/main/java/at/hannibal2/skyhanni/data/BitsAPI.kt index 022a18d92..a501ba25f 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/BitsAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/BitsAPI.kt @@ -146,7 +146,7 @@ object BitsAPI { @SubscribeEvent fun onScoreboardChange(event: ScoreboardUpdateEvent) { if (!isEnabled()) return - for (line in event.scoreboard) { + for (line in event.added) { val message = line.trimWhiteSpace().removeResets() bitsScoreboardPattern.matchMatcher(message) { diff --git a/src/main/java/at/hannibal2/skyhanni/data/HotmData.kt b/src/main/java/at/hannibal2/skyhanni/data/HotmData.kt index beb7581b0..614772b19 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/HotmData.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/HotmData.kt @@ -680,7 +680,7 @@ enum class HotmData( fun onScoreboardUpdate(event: ScoreboardUpdateEvent) { if (!LorenzUtils.inSkyBlock) return - ScoreboardPattern.powderPattern.firstMatcher(event.scoreboard) { + ScoreboardPattern.powderPattern.firstMatcher(event.added) { val type = HotmAPI.PowderType.entries.firstOrNull { it.displayName == group("type") } ?: return val amount = group("amount").formatLong() val difference = amount - type.getCurrent() diff --git a/src/main/java/at/hannibal2/skyhanni/data/MiningAPI.kt b/src/main/java/at/hannibal2/skyhanni/data/MiningAPI.kt index fbe304098..0289d5e0e 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/MiningAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/MiningAPI.kt @@ -165,7 +165,7 @@ object MiningAPI { @SubscribeEvent fun onScoreboardChange(event: ScoreboardUpdateEvent) { - val newCold = coldPattern.firstMatcher(event.scoreboard) { + val newCold = coldPattern.firstMatcher(event.added) { group("cold").toInt().absoluteValue } ?: return diff --git a/src/main/java/at/hannibal2/skyhanni/data/PurseAPI.kt b/src/main/java/at/hannibal2/skyhanni/data/PurseAPI.kt index 0f029a1f2..6b080c394 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/PurseAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/PurseAPI.kt @@ -7,7 +7,7 @@ import at.hannibal2.skyhanni.events.ScoreboardUpdateEvent import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule import at.hannibal2.skyhanni.utils.NumberUtil.formatDouble import at.hannibal2.skyhanni.utils.NumberUtil.million -import at.hannibal2.skyhanni.utils.RegexUtils.matchFirst +import at.hannibal2.skyhanni.utils.RegexUtils.firstMatcher import at.hannibal2.skyhanni.utils.SimpleTimeMark import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern import net.minecraft.client.Minecraft @@ -19,7 +19,7 @@ object PurseAPI { private val patternGroup = RepoPattern.group("data.purse") val coinsPattern by patternGroup.pattern( "coins", - "(§.)*(Piggy|Purse): §6(?[\\d,.]+)( ?(§.)*\\([+-](?[\\d,.]+)\\)?|.*)?$", + "(?:§.)*(?:Piggy|Purse): §6(?[\\d,.]+)(?: ?(?:§.)*\\([+-](?[\\d,.]+)\\)?|.*)?$", ) val piggyPattern by patternGroup.pattern( "piggy", @@ -37,13 +37,13 @@ object PurseAPI { @SubscribeEvent fun onScoreboardChange(event: ScoreboardUpdateEvent) { - event.scoreboard.matchFirst(coinsPattern) { + coinsPattern.firstMatcher(event.added) { val newPurse = group("coins").formatDouble() val diff = newPurse - currentPurse if (diff == 0.0) return currentPurse = newPurse - PurseChangeEvent(diff, getCause(diff)).postAndCatch() + PurseChangeEvent(diff, currentPurse, getCause(diff)).postAndCatch() } } diff --git a/src/main/java/at/hannibal2/skyhanni/data/ScoreboardData.kt b/src/main/java/at/hannibal2/skyhanni/data/ScoreboardData.kt index 42de7a75b..7b40e6d6b 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/ScoreboardData.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/ScoreboardData.kt @@ -110,15 +110,16 @@ object ScoreboardData { val list = fetchScoreboardLines().reversed() val semiFormatted = list.map { cleanSB(it) } if (semiFormatted != sidebarLines) { - RawScoreboardUpdateEvent(semiFormatted).postAndCatch() sidebarLines = semiFormatted + RawScoreboardUpdateEvent(semiFormatted).postAndCatch() } sidebarLinesRaw = list val new = formatLines(list) if (new != sidebarLinesFormatted) { - ScoreboardUpdateEvent(new).postAndCatch() + val old = sidebarLinesFormatted sidebarLinesFormatted = new + ScoreboardUpdateEvent(old, new).postAndCatch() } } diff --git a/src/main/java/at/hannibal2/skyhanni/events/PurseChangeEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/PurseChangeEvent.kt index d776fe32b..776a226d6 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/PurseChangeEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/PurseChangeEvent.kt @@ -1,6 +1,6 @@ package at.hannibal2.skyhanni.events -class PurseChangeEvent(val coins: Double, val reason: PurseChangeCause) : LorenzEvent() +class PurseChangeEvent(val coins: Double, val purse: Double, val reason: PurseChangeCause) : LorenzEvent() enum class PurseChangeCause { GAIN_MOB_KILL, diff --git a/src/main/java/at/hannibal2/skyhanni/events/ScoreboardUpdateEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/ScoreboardUpdateEvent.kt index 9480e8061..59fb9493c 100644 --- a/src/main/java/at/hannibal2/skyhanni/events/ScoreboardUpdateEvent.kt +++ b/src/main/java/at/hannibal2/skyhanni/events/ScoreboardUpdateEvent.kt @@ -1,3 +1,10 @@ package at.hannibal2.skyhanni.events -class ScoreboardUpdateEvent(val scoreboard: List) : LorenzEvent() +class ScoreboardUpdateEvent( + val old: List, + val scoreboard: List, +) : LorenzEvent() { + + val added by lazy { scoreboard - old.toSet() } + val removed by lazy { old - scoreboard.toSet() } +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/pests/PestAPI.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/pests/PestAPI.kt index e239caeab..d6ab8873c 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/pests/PestAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/pests/PestAPI.kt @@ -223,7 +223,7 @@ object PestAPI { fun onScoreboardChange(event: ScoreboardUpdateEvent) { if (!GardenAPI.inGarden()) return if (!firstScoreboardCheck) return - checkScoreboardLines(event.scoreboard) + checkScoreboardLines(event.added) } @SubscribeEvent -- cgit