aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/features/mining
diff options
context:
space:
mode:
authorCalMWolfs <94038482+CalMWolfs@users.noreply.github.com>2024-02-06 09:01:12 +1100
committerGitHub <noreply@github.com>2024-02-05 23:01:12 +0100
commit6ed818521cd2c9e97743881966632488e598c20e (patch)
tree1a1f92cc4feeff03bbc82240c4b86ae610a17842 /src/main/java/at/hannibal2/skyhanni/features/mining
parentab43b1989ebb75d5ca3ddd59a71e6a8879f040b0 (diff)
downloadskyhanni-6ed818521cd2c9e97743881966632488e598c20e.tar.gz
skyhanni-6ed818521cd2c9e97743881966632488e598c20e.tar.bz2
skyhanni-6ed818521cd2c9e97743881966632488e598c20e.zip
Send Mining Island Events (#969)
Added sending mining events to Soopy's API to test for new Mining Event feature. #969
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/features/mining')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/mining/eventtracker/MiningEvent.kt26
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/mining/eventtracker/MiningEventData.kt13
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/mining/eventtracker/MiningEventTracker.kt156
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt6
4 files changed, 198 insertions, 3 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/features/mining/eventtracker/MiningEvent.kt b/src/main/java/at/hannibal2/skyhanni/features/mining/eventtracker/MiningEvent.kt
new file mode 100644
index 000000000..f5d8e26d8
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/features/mining/eventtracker/MiningEvent.kt
@@ -0,0 +1,26 @@
+package at.hannibal2.skyhanni.features.mining.eventtracker
+
+import at.hannibal2.skyhanni.utils.StringUtils.removeColor
+import kotlin.time.Duration
+import kotlin.time.Duration.Companion.minutes
+import kotlin.time.Duration.Companion.seconds
+
+enum class MiningEvent(val eventName: String, val defaultLength: Duration, private val colourCode: Char) {
+ GONE_WITH_THE_WIND("GONE WITH THE WIND", 18.minutes, '9'),
+ DOUBLE_POWDER("2X POWDER", 15.minutes, 'b'),
+ GOBLIN_RAID("GOBLIN RAID", 5.minutes, 'c'),
+ BETTER_TOGETHER("BETTER TOGETHER", 18.minutes, 'd'),
+ RAFFLE("RAFFLE", 160.seconds, '6'),
+ MITHRIL_GOURMAND("MITHRIL GOURMAND", 10.minutes, 'b'),
+ ;
+
+ override fun toString(): String {
+ return "§$colourCode$eventName"
+ }
+
+ companion object {
+ fun fromBossbarName(bossbarName: String): MiningEvent? {
+ return MiningEvent.entries.find { it.eventName == bossbarName.removeColor() }
+ }
+ }
+}
diff --git a/src/main/java/at/hannibal2/skyhanni/features/mining/eventtracker/MiningEventData.kt b/src/main/java/at/hannibal2/skyhanni/features/mining/eventtracker/MiningEventData.kt
new file mode 100644
index 000000000..ee2033ed4
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/features/mining/eventtracker/MiningEventData.kt
@@ -0,0 +1,13 @@
+package at.hannibal2.skyhanni.features.mining.eventtracker
+
+import at.hannibal2.skyhanni.data.IslandType
+import com.google.gson.annotations.Expose
+import com.google.gson.annotations.SerializedName
+
+data class MiningEventData(
+ @Expose @SerializedName("server_type") val serverType: IslandType,
+ @Expose @SerializedName("server_id") val serverId: String,
+ @Expose val event: MiningEvent,
+ @Expose @SerializedName("time_left") val timeRemaining: Long,
+ @Expose @SerializedName("reporter_uuid") val uuid: String
+)
diff --git a/src/main/java/at/hannibal2/skyhanni/features/mining/eventtracker/MiningEventTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/mining/eventtracker/MiningEventTracker.kt
new file mode 100644
index 000000000..1fef5b2ee
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/features/mining/eventtracker/MiningEventTracker.kt
@@ -0,0 +1,156 @@
+package at.hannibal2.skyhanni.features.mining.eventtracker
+
+import at.hannibal2.skyhanni.SkyHanniMod
+import at.hannibal2.skyhanni.config.ConfigManager
+import at.hannibal2.skyhanni.data.BossbarData
+import at.hannibal2.skyhanni.data.HypixelData
+import at.hannibal2.skyhanni.data.IslandType
+import at.hannibal2.skyhanni.data.ScoreboardData
+import at.hannibal2.skyhanni.events.BossbarUpdateEvent
+import at.hannibal2.skyhanni.events.LorenzChatEvent
+import at.hannibal2.skyhanni.events.LorenzWorldChangeEvent
+import at.hannibal2.skyhanni.test.command.ErrorManager
+import at.hannibal2.skyhanni.utils.APIUtil
+import at.hannibal2.skyhanni.utils.LorenzUtils
+import at.hannibal2.skyhanni.utils.LorenzUtils.isInIsland
+import at.hannibal2.skyhanni.utils.SimpleTimeMark
+import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher
+import at.hannibal2.skyhanni.utils.TabListData
+import at.hannibal2.skyhanni.utils.TimeUtils
+import at.hannibal2.skyhanni.utils.getBoolean
+import at.hannibal2.skyhanni.utils.getStringOrValue
+import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern
+import kotlinx.coroutines.launch
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
+import kotlin.time.Duration.Companion.seconds
+
+class MiningEventTracker {
+ private val config get() = SkyHanniMod.feature.mining.miningEvent
+
+ private val patternGroup = RepoPattern.group("mining.eventtracker")
+ private val bossbarPassivePattern by patternGroup.pattern(
+ "bossbar.passive",
+ "§e§lPASSIVE EVENT (?<event>.+) §e§lRUNNING FOR §a§l(?<time>\\S+)§r"
+ )
+ private val bossbarActivePattern by patternGroup.pattern(
+ "bossbar.active",
+ "§e§lEVENT (?<event>.+) §e§lACTIVE IN (?<area>.+) §e§lfor §a§l(?<time>\\S+)§r"
+ )
+ private val eventStartedPattern by patternGroup.pattern(
+ "started",
+ "(?:§.)*\\s+(?:§.)+§l(?<event>.+) STARTED!"
+ )
+ private val eventEndedPattern by patternGroup.pattern(
+ "ended",
+ "(?:§.)*\\s+(?:§.)+§l(?<event>.+) ENDED!"
+ )
+
+ private var lastRequestSent = SimpleTimeMark.farPast()
+ private var lastWorldSwitch = SimpleTimeMark.farPast()
+ private var eventEndTime = SimpleTimeMark.farPast()
+
+ private var lastSentEvent: MiningEvent? = null
+
+ @SubscribeEvent
+ fun onWorldChange(event: LorenzWorldChangeEvent) {
+ lastRequestSent = SimpleTimeMark.now()
+ lastWorldSwitch = SimpleTimeMark.farPast()
+ eventEndTime = SimpleTimeMark.farPast()
+
+ lastSentEvent = null
+ }
+
+ @SubscribeEvent
+ fun onBossbarChange(event: BossbarUpdateEvent) {
+ if (!isEnabled()) return
+ if (lastWorldSwitch.passedSince() < 2.seconds) return
+ if (!eventEndTime.isInPast()) {
+ return
+ }
+
+ bossbarPassivePattern.matchMatcher(event.bossbar) {
+ sendData(group("event"), group("time"))
+ }
+ bossbarActivePattern.matchMatcher(event.bossbar) {
+ sendData(group("event"), group("time"))
+ }
+ }
+
+ @SubscribeEvent
+ fun onChat(event: LorenzChatEvent) {
+ if (!isEnabled()) return
+
+ eventStartedPattern.matchMatcher(event.message) {
+ sendData(group("event"), null)
+ }
+ eventEndedPattern.matchMatcher(event.message) {
+ lastSentEvent = null
+ }
+ }
+
+ private fun sendData(eventName: String, time: String?) {
+ val eventType = MiningEvent.fromBossbarName(eventName)
+ if (lastSentEvent == eventType) return
+ if (eventType == null) {
+ ErrorManager.logErrorWithData(
+ Exception("UnknownMiningEvent"), "Unknown mining event detected from string $eventName",
+ "eventName" to eventName,
+ "bossbar" to BossbarData.getBossbar(),
+ "serverType" to LorenzUtils.skyBlockIsland,
+ "fromChat" to (time == null)
+ )
+ return
+ }
+ lastSentEvent = eventType
+
+ val timeRemaining = if (time == null) {
+ eventType.defaultLength
+ } else {
+ TimeUtils.getDuration(time)
+ }
+ eventEndTime = SimpleTimeMark.now() + timeRemaining
+
+ val serverId = HypixelData.getCurrentServerId()
+ if (serverId == null) {
+ ErrorManager.logErrorWithData(
+ Exception("NoServerId"), "Could not find server id",
+ "islandType" to LorenzUtils.skyBlockIsland,
+ "tablist" to TabListData.getTabList(),
+ "scoreboard" to ScoreboardData.sidebarLinesFormatted
+ )
+ return
+ }
+
+ val miningEventData = MiningEventData(
+ LorenzUtils.skyBlockIsland,
+ serverId,
+ eventType,
+ timeRemaining.inWholeMilliseconds,
+ LorenzUtils.getPlayerUuid()
+ )
+ val miningEventJson = ConfigManager.gson.toJson(miningEventData)
+// //todo remove
+// println("\n```json$miningEventJson```")
+ SkyHanniMod.coroutineScope.launch {
+ sendData(miningEventJson)
+ }
+ }
+
+ private fun isEnabled() = (IslandType.DWARVEN_MINES.isInIsland() || IslandType.CRYSTAL_HOLLOWS.isInIsland()) && config.sendData
+// && config.enabled
+
+
+ private fun sendData(json: String) {
+ val response = APIUtil.postJSON("https://api.soopy.dev/skyblock/chevents/set", json)
+ if (!response.success) return
+ val success = response.data.getBoolean("success")
+ if (!success) {
+ val cause = response.data.getStringOrValue("cause", "unknown")
+ ErrorManager.logErrorWithData(
+ Exception("PostFailure"), "Sending mining event data was unsuccessful",
+ "cause" to cause,
+ "sentData" to json
+ )
+ }
+ }
+}
diff --git a/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt
index a328d12ce..3c3b0dfd3 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/mining/powdertracker/PowderTracker.kt
@@ -3,6 +3,7 @@ package at.hannibal2.skyhanni.features.mining.powdertracker
import at.hannibal2.skyhanni.SkyHanniMod
import at.hannibal2.skyhanni.config.ConfigUpdaterMigrator
import at.hannibal2.skyhanni.config.features.mining.PowderTrackerConfig.PowderDisplayEntry
+import at.hannibal2.skyhanni.data.BossbarData
import at.hannibal2.skyhanni.data.IslandType
import at.hannibal2.skyhanni.events.ConfigLoadEvent
import at.hannibal2.skyhanni.events.GuiRenderEvent
@@ -23,7 +24,6 @@ import at.hannibal2.skyhanni.utils.tracker.TrackerData
import com.google.gson.JsonArray
import com.google.gson.JsonNull
import com.google.gson.annotations.Expose
-import net.minecraft.entity.boss.BossStatus
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
import kotlin.concurrent.fixedRateTimer
@@ -153,8 +153,8 @@ object PowderTracker {
fun onTick(event: LorenzTickEvent) {
if (!isEnabled()) return
if (event.repeatSeconds(1)) {
- doublePowder = powderBossBarPattern.matcher(BossStatus.bossName).find()
- powderBossBarPattern.matchMatcher(BossStatus.bossName) {
+ doublePowder = powderBossBarPattern.matcher(BossbarData.getBossbar()).find()
+ powderBossBarPattern.matchMatcher(BossbarData.getBossbar()) {
powderTimer = group("time")
doublePowder = powderTimer != "00:00"