aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/features/rift
diff options
context:
space:
mode:
authorCalMWolfs <94038482+CalMWolfs@users.noreply.github.com>2023-06-22 23:29:04 +1000
committerGitHub <noreply@github.com>2023-06-22 23:29:04 +1000
commit72aad9e2b79fbe3ffdb4a0dc950ed5aebdf5166f (patch)
tree59c57d34ea16df02bd07c37d9aa4e54b0749133f /src/main/java/at/hannibal2/skyhanni/features/rift
parenta9fdc5c1cced1faa54c04cad93fe35249583fe89 (diff)
parentb3e289dbec40cdd0632bac41f510d94af545983c (diff)
downloadskyhanni-72aad9e2b79fbe3ffdb4a0dc950ed5aebdf5166f.tar.gz
skyhanni-72aad9e2b79fbe3ffdb4a0dc950ed5aebdf5166f.tar.bz2
skyhanni-72aad9e2b79fbe3ffdb4a0dc950ed5aebdf5166f.zip
Merge branch 'beta' into frozen_treasure_tracker
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/features/rift')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/rift/HighlightRiftGuide.kt63
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/rift/RiftAPI.kt8
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/rift/RiftTimer.kt98
3 files changed, 169 insertions, 0 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/features/rift/HighlightRiftGuide.kt b/src/main/java/at/hannibal2/skyhanni/features/rift/HighlightRiftGuide.kt
new file mode 100644
index 000000000..a8bf69fba
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/features/rift/HighlightRiftGuide.kt
@@ -0,0 +1,63 @@
+package at.hannibal2.skyhanni.features.rift
+
+import at.hannibal2.skyhanni.SkyHanniMod
+import at.hannibal2.skyhanni.events.GuiContainerEvent
+import at.hannibal2.skyhanni.events.InventoryCloseEvent
+import at.hannibal2.skyhanni.events.InventoryOpenEvent
+import at.hannibal2.skyhanni.utils.InventoryUtils
+import at.hannibal2.skyhanni.utils.ItemUtils.getLore
+import at.hannibal2.skyhanni.utils.LorenzColor
+import at.hannibal2.skyhanni.utils.RenderUtils.highlight
+import net.minecraftforge.fml.common.eventhandler.EventPriority
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
+
+class HighlightRiftGuide {
+ private val config get() = SkyHanniMod.feature.rift
+ private var inInventory = false
+ private var highlightedItems = listOf<Int>()
+
+ @SubscribeEvent
+ fun onInventoryOpen(event: InventoryOpenEvent) {
+ inInventory = false
+
+ if (!isEnabled()) return
+
+ val inGuide = event.inventoryItems[40]?.getLore()?.let {
+ if (it.size == 1) {
+ it[0] == "§7To Rift Guide"
+ } else false
+ } ?: false
+ if (!inGuide) return
+
+ val highlightedItems = mutableListOf<Int>()
+ for ((slot, stack) in event.inventoryItems) {
+ val lore = stack.getLore()
+ if (lore.isNotEmpty()) {
+ if (lore.last() == "§8✖ Not completed yet!") {
+ highlightedItems.add(slot)
+ }
+ }
+ }
+ inInventory = true
+ this.highlightedItems = highlightedItems
+ }
+
+ @SubscribeEvent
+ fun onInventoryClose(event: InventoryCloseEvent) {
+ inInventory = false
+ }
+
+ @SubscribeEvent(priority = EventPriority.LOW)
+ fun onBackgroundDrawn(event: GuiContainerEvent.BackgroundDrawnEvent) {
+ if (!isEnabled()) return
+ if (!inInventory) return
+
+ for (slot in InventoryUtils.getItemsInOpenChest()) {
+ if (slot.slotIndex in highlightedItems) {
+ slot highlight LorenzColor.YELLOW
+ }
+ }
+ }
+
+ fun isEnabled() = RiftAPI.inRift() && config.highlightGuide
+} \ No newline at end of file
diff --git a/src/main/java/at/hannibal2/skyhanni/features/rift/RiftAPI.kt b/src/main/java/at/hannibal2/skyhanni/features/rift/RiftAPI.kt
new file mode 100644
index 000000000..ea2f929e6
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/features/rift/RiftAPI.kt
@@ -0,0 +1,8 @@
+package at.hannibal2.skyhanni.features.rift
+
+import at.hannibal2.skyhanni.data.IslandType
+import at.hannibal2.skyhanni.utils.LorenzUtils
+
+object RiftAPI {
+ fun inRift() = LorenzUtils.inIsland(IslandType.THE_RIFT)
+} \ No newline at end of file
diff --git a/src/main/java/at/hannibal2/skyhanni/features/rift/RiftTimer.kt b/src/main/java/at/hannibal2/skyhanni/features/rift/RiftTimer.kt
new file mode 100644
index 000000000..6fe16c981
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/features/rift/RiftTimer.kt
@@ -0,0 +1,98 @@
+package at.hannibal2.skyhanni.features.rift
+
+import at.hannibal2.skyhanni.SkyHanniMod
+import at.hannibal2.skyhanni.events.GuiRenderEvent
+import at.hannibal2.skyhanni.events.LorenzActionBarEvent
+import at.hannibal2.skyhanni.events.LorenzChatEvent
+import at.hannibal2.skyhanni.utils.LorenzUtils
+import at.hannibal2.skyhanni.utils.RenderUtils.renderStrings
+import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher
+import at.hannibal2.skyhanni.utils.TimeUtils
+import net.minecraftforge.event.world.WorldEvent
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
+
+class RiftTimer {
+ private val config get() = SkyHanniMod.feature.rift.timer
+ private var display = listOf<String>()
+ private var maxTime = 0L
+ private var latestTime = 0L
+ private val changes = mutableMapOf<Long, String>()
+
+ @SubscribeEvent
+ fun onJoinWorld(ignored: WorldEvent.Load) {
+ display = emptyList()
+ }
+
+ @SubscribeEvent
+ fun onChatMessage(event: LorenzChatEvent) {
+ if (!isEnabled()) return
+
+ val message = event.message
+ " §r§7You have §r§a(?<time>.*)ф §r§7left before the rift collapses!".toPattern().matchMatcher(message) {
+ val time = group("time")
+ maxTime = formatTime(time)
+ }
+ }
+
+ @SubscribeEvent
+ fun onActionBar(event: LorenzActionBarEvent) {
+ if (!isEnabled()) return
+
+ val message = event.message
+ for (entry in message.split(" ")) {
+ "§(?<color>[a7])(?<time>.*)ф Left.*".toPattern().matchMatcher(entry) {
+ val color = group("color")
+ if (color == "7") {
+ display = emptyList()
+ return
+ }
+ val time = group("time")
+ val currentTime = formatTime(time)
+ update(currentTime)
+ }
+ }
+ }
+
+ private fun formatTime(time: String) = TimeUtils.getMillis(time.replace("m", "m "))
+
+ private fun update(currentTime: Long) {
+ if (currentTime == latestTime) return
+ val diff = (currentTime - latestTime) + 1000
+ latestTime = currentTime
+ addDiff(diff)
+
+ val currentFormat = TimeUtils.formatDuration(currentTime)
+ val percentage = LorenzUtils.formatPercentage(currentTime.toDouble() / maxTime)
+ val percentageFormat = if (config.percentage) " §7($percentage)" else ""
+ val maxTimeFormat = if (config.maxTime) "§7/§b" + TimeUtils.formatDuration(maxTime) else ""
+ val color = if (currentTime <= 60_000) "§c" else if (currentTime <= 60_000 * 5) "§e" else "§b"
+ val firstLine = "§eRift Timer: $color$currentFormat$maxTimeFormat$percentageFormat"
+
+ display = buildList {
+ add(firstLine)
+ changes.keys.removeIf { System.currentTimeMillis() > it + 4_000 }
+ for (entry in changes.values) {
+ add(entry)
+ }
+ }
+ }
+
+ private fun addDiff(diff: Long) {
+ val diffFormat = if (diff > 0) {
+ "§a+${TimeUtils.formatDuration(diff)}"
+ } else if (diff < 0) {
+ "§c-${TimeUtils.formatDuration(-diff)}"
+ } else return
+
+ changes[System.currentTimeMillis()] = diffFormat
+ }
+
+ @SubscribeEvent
+ fun onRenderOverlay(event: GuiRenderEvent.GameOverlayRenderEvent) {
+ if (!isEnabled()) return
+
+ config.timerPosition.renderStrings(display, posLabel = "Rift Timer")
+ }
+
+ fun isEnabled() = RiftAPI.inRift() && config.enabled
+}