diff options
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/data')
| -rw-r--r-- | src/main/java/at/hannibal2/skyhanni/data/ActionBarStatsData.kt | 70 |
1 files changed, 51 insertions, 19 deletions
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](?<health>[\\d,]+)/[\\d,]+❤.*".toPattern(), - "defense" to ".*§a(?<defense>[\\d,]+)§a❈.*".toPattern(), - "mana" to ".*§b(?<mana>[\\d,]+)/[\\d,]+✎.*".toPattern(), - "riftTime" to "§[a7](?<riftTime>[\\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](?<health>[\\d,]+)/[\\d,]+❤.*" + ), + DEFENSE( + // language=RegExp + ".*§a(?<defense>[\\d,]+)§a❈.*" + ), + MANA( + // language=RegExp + ".*§b(?<mana>[\\d,]+)/[\\d,]+✎.*" + ), + RIFT_TIME( + // language=RegExp + "§[a7](?<riftTime>[\\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() } } } } |
