From 2d11b0cfe4adf7b6535d91cbdf339e47898d925e Mon Sep 17 00:00:00 2001 From: Thunderblade73 <85900443+Thunderblade73@users.noreply.github.com> Date: Sat, 20 Jan 2024 10:06:38 +0100 Subject: Feature: SkyblockXPInChat (#919) Added Skyblock XP Chat. #919 --- .../hannibal2/skyhanni/data/ActionBarStatsData.kt | 70 ++++++++++++++++------ 1 file changed, 51 insertions(+), 19 deletions(-) (limited to 'src/main/java/at/hannibal2/skyhanni/data') diff --git a/src/main/java/at/hannibal2/skyhanni/data/ActionBarStatsData.kt b/src/main/java/at/hannibal2/skyhanni/data/ActionBarStatsData.kt index cddf83d0b..e4f78142f 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/ActionBarStatsData.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/ActionBarStatsData.kt @@ -1,29 +1,61 @@ package at.hannibal2.skyhanni.data +import at.hannibal2.skyhanni.events.ActionBarValueUpdate import at.hannibal2.skyhanni.events.LorenzActionBarEvent import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher +import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern import net.minecraftforge.fml.common.eventhandler.SubscribeEvent +import org.intellij.lang.annotations.Language -object ActionBarStatsData { - // TODO USE SH-REPO - private val patterns = mapOf( - "health" to "§[c6](?[\\d,]+)/[\\d,]+❤.*".toPattern(), - "defense" to ".*§a(?[\\d,]+)§a❈.*".toPattern(), - "mana" to ".*§b(?[\\d,]+)/[\\d,]+✎.*".toPattern(), - "riftTime" to "§[a7](?[\\dms ]+)ф.*".toPattern(), - ) - - var groups = mutableMapOf("health" to "", "riftTime" to "", "defense" to "", "mana" to "") - - @SubscribeEvent - fun onActionBar(event: LorenzActionBarEvent) { - if (!LorenzUtils.inSkyBlock) return - - for ((groupName, pattern) in patterns) { - pattern.matchMatcher(event.message) { - groups[groupName] = group(groupName) - } +enum class ActionBarStatsData(@Language("RegExp") rawPattern: String) { + HEALTH( + // language=RegExp + "§[c6](?[\\d,]+)/[\\d,]+❤.*" + ), + DEFENSE( + // language=RegExp + ".*§a(?[\\d,]+)§a❈.*" + ), + MANA( + // language=RegExp + ".*§b(?[\\d,]+)/[\\d,]+✎.*" + ), + RIFT_TIME( + // language=RegExp + "§[a7](?[\\dms ]+)ф.*" + ), + SKYBLOCK_XP( + // language=RegExp + ".*(§b\\+\\d+ SkyBlock XP §.\\([^()]+\\)§b \\(\\d+/\\d+\\)).*" + ), + ; + + private val repoKey = name.replace("_", ".").lowercase() + + internal val pattern by RepoPattern.pattern("actionbar.$repoKey", rawPattern) + var value: String = "" + private set + + companion object { + + init { + entries.forEach { it.pattern } + } + + @SubscribeEvent + fun onActionBar(event: LorenzActionBarEvent) { + if (!LorenzUtils.inSkyBlock) return + + entries.mapNotNull { data -> + data.pattern.matchMatcher(event.message) { + val newValue = group(1) + if (data.value != newValue) { + data.value = newValue + ActionBarValueUpdate(data) + } else null + } + }.forEach { it.postAndCatch() } } } } -- cgit