summaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/data
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/data')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/data/ActionBarStatsData.kt70
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() }
}
}
}