summaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/features/event
diff options
context:
space:
mode:
authorhannibal2 <24389977+hannibal002@users.noreply.github.com>2024-05-24 10:46:29 +0200
committerGitHub <noreply@github.com>2024-05-24 10:46:29 +0200
commit623a9d213df3b1983a6dae416209518dd6904e2b (patch)
tree222b098e4826dbc009df29896592e74690b61870 /src/main/java/at/hannibal2/skyhanni/features/event
parent17ac70d7cd8416324acfffcde656930b4e9ae612 (diff)
downloadskyhanni-623a9d213df3b1983a6dae416209518dd6904e2b.tar.gz
skyhanni-623a9d213df3b1983a6dae416209518dd6904e2b.tar.bz2
skyhanni-623a9d213df3b1983a6dae416209518dd6904e2b.zip
Improvement: Compact Hoppity Chat (#1748)
Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com>
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/features/event')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggType.kt1
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggsCompactChat.kt101
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggsManager.kt36
3 files changed, 131 insertions, 7 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggType.kt b/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggType.kt
index fcc647809..d67e9550a 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggType.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggType.kt
@@ -35,6 +35,7 @@ enum class HoppityEggType(
fun isClaimed() = claimed
val formattedName get() = "${if (isClaimed()) "§7§m" else mealColour}$mealName:$mealColour"
+ val coloredName get() = "$mealColour$mealName"
companion object {
fun allFound() = entries.forEach { it.markClaimed() }
diff --git a/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggsCompactChat.kt b/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggsCompactChat.kt
new file mode 100644
index 000000000..21a2e4f7a
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggsCompactChat.kt
@@ -0,0 +1,101 @@
+package at.hannibal2.skyhanni.features.event.hoppity
+
+import at.hannibal2.skyhanni.events.LorenzChatEvent
+import at.hannibal2.skyhanni.features.event.hoppity.HoppityEggsManager.getEggType
+import at.hannibal2.skyhanni.utils.ChatUtils
+import at.hannibal2.skyhanni.utils.DelayedRun
+import at.hannibal2.skyhanni.utils.NumberUtil
+import at.hannibal2.skyhanni.utils.SimpleTimeMark.Companion.fromNow
+import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher
+import kotlin.time.Duration.Companion.milliseconds
+import kotlin.time.Duration.Companion.seconds
+
+object HoppityEggsCompactChat {
+
+ private var hoppityEggChat = mutableListOf<String>()
+ private var duplicate = false
+ private var lastRarity = ""
+ private var lastName = ""
+ private var lastProfit = ""
+ private var newRabbit = false
+ private var lastChatMeal: HoppityEggType? = null
+ private var lastDuplicateAmount: Long? = null
+
+ fun compactChat(event: LorenzChatEvent, lastDuplicateAmount: Long? = null) {
+ lastDuplicateAmount?.let {
+ this.lastDuplicateAmount = it
+ }
+ if (!HoppityEggsManager.config.compactChat) return
+ event.blockedReason = "compact_hoppity"
+ hoppityEggChat.add(event.message)
+ if (lastDuplicateAmount != null) {
+ this.duplicate = true
+ }
+ if (hoppityEggChat.size == 3) {
+ DelayedRun.runDelayed(200.milliseconds) {
+ sendCompact()
+ }
+ }
+ }
+
+ private fun sendCompact() {
+ if (hoppityEggChat.isNotEmpty()) {
+ ChatUtils.hoverableChat(createCompactMessage(), hover = hoppityEggChat, prefix = false)
+ }
+
+ this.duplicate = false
+ this.newRabbit = false
+ lastRarity = ""
+ lastName = ""
+ lastProfit = ""
+ lastChatMeal = null
+ lastDuplicateAmount = null
+ }
+
+ private fun createCompactMessage(): String {
+ val mealName = lastChatMeal?.coloredName ?: ""
+
+ return if (duplicate) {
+ val format = lastDuplicateAmount?.let { NumberUtil.format(it) } ?: "?"
+ "$mealName Egg! §7Duplicate $lastName §7(§6+$format Chocolate§7)"
+ } else if (newRabbit) {
+ "$mealName Egg! §d§lNEW $lastName §7(${lastProfit}§7)"
+ } else "?"
+ }
+
+ fun handleChat(event: LorenzChatEvent) {
+ HoppityEggsManager.eggFoundPattern.matchMatcher(event.message) {
+ hoppityEggChat = mutableListOf()
+ lastChatMeal = getEggType(event)
+ compactChat(event)
+ }
+
+ HoppityEggsManager.rabbitFoundPatttern.matchMatcher(event.message) {
+ lastName = group("name")
+ lastRarity = group("rarity")
+ compactChat(event)
+ }
+ HoppityEggsManager.newRabbitFound.matchMatcher(event.message) {
+ val chocolate = group("chocolate")
+ val perSecond = group("perSecond")
+ newRabbit = true
+ lastProfit = "§6+$chocolate §7and §6+${perSecond}x c/s!"
+ compactChat(event)
+ }
+ }
+
+ fun clickableCompact(onClick: () -> Unit): Boolean = if (hoppityEggChat.size > 0) {
+ val hover = hoppityEggChat.joinToString("\n") +
+ " \n§eClick here to share the location of this chocolate egg with the server!"
+ hoppityEggChat.clear()
+ ChatUtils.clickableChat(
+ createCompactMessage(),
+ hover = hover,
+ onClick = onClick,
+ expireAt = 30.seconds.fromNow(),
+ oneTimeClick = true,
+ prefix = false
+ )
+ true
+ } else false
+}
diff --git a/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggsManager.kt b/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggsManager.kt
index 8ee19dda8..e96b2a829 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggsManager.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/event/hoppity/HoppityEggsManager.kt
@@ -37,10 +37,27 @@ object HoppityEggsManager {
* REGEX-TEST: §d§lHOPPITY'S HUNT §r§dYou found a §r§aChocolate Dinner Egg §r§dbehind Emissary Sisko§r§d!
* REGEX-TEST: §d§lHOPPITY'S HUNT §r§dYou found a §r§9Chocolate Lunch Egg §r§dnear the Diamond Essence Shop§r§d!
*/
- private val eggFoundPattern by ChocolateFactoryAPI.patternGroup.pattern(
+ val eggFoundPattern by ChocolateFactoryAPI.patternGroup.pattern(
"egg.found",
"§d§lHOPPITY'S HUNT §r§dYou found a §r§.Chocolate (?<meal>\\w+) Egg §r§d(?<note>.*)§r§d!"
)
+
+ /**
+ * REGEX-TEST: §D§LHOPPITY'S HUNT §7You found §fArnie §7(§F§LCOMMON§7)!
+ * REGEX-TEST: §D§LHOPPITY'S HUNT §7You found §aPenelope §7(§A§LUNCOMMON§7)!
+ */
+ val rabbitFoundPatttern by ChocolateFactoryAPI.patternGroup.pattern(
+ "rabbit.found",
+ "§D§LHOPPITY'S HUNT §7You found (?<name>.*) §7\\((?<rarity>.*)§7\\)!"
+ )
+
+ /**
+ * REGEX-TEST: §d§lNEW RABBIT! §6+2 Chocolate §7and §6+0.003x Chocolate §7per second!
+ */
+ val newRabbitFound by ChocolateFactoryAPI.patternGroup.pattern(
+ "rabbit.found.new",
+ "§d§lNEW RABBIT! §6\\+(?<chocolate>.*) Chocolate §7and §6\\+(?<perSecond>.*)x Chocolate §7per second!"
+ )
private val noEggsLeftPattern by ChocolateFactoryAPI.patternGroup.pattern(
"egg.noneleft",
"§cThere are no hidden Chocolate Rabbit Eggs nearby! Try again later!"
@@ -88,6 +105,8 @@ object HoppityEggsManager {
if (!ChocolateFactoryAPI.isHoppityEvent()) return
+ HoppityEggsCompactChat.handleChat(event)
+
eggFoundPattern.matchMatcher(event.message) {
HoppityEggLocator.eggFound()
val meal = getEggType(event)
@@ -142,12 +161,15 @@ object HoppityEggsManager {
val currentLocation = LocationUtils.playerLocation()
DelayedRun.runNextTick {
- ChatUtils.clickableChat(
- "Click here to share the location of this chocolate egg with the server!",
- onClick = { HoppityEggsShared.shareNearbyEggLocation(currentLocation, meal, note) },
- expireAt = 30.seconds.fromNow(),
- oneTimeClick = true
- )
+ val onClick = { HoppityEggsShared.shareNearbyEggLocation(currentLocation, meal, note) }
+ if (!HoppityEggsCompactChat.clickableCompact(onClick)) {
+ ChatUtils.clickableChat(
+ "Click here to share the location of this chocolate egg with the server!",
+ onClick = onClick,
+ expireAt = 30.seconds.fromNow(),
+ oneTimeClick = true
+ )
+ }
}
}