diff options
| author | Empa <42304516+ItsEmpa@users.noreply.github.com> | 2024-06-01 13:13:37 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-06-01 13:13:37 +0200 |
| commit | 4a6e2b16fc0171124c2a900751a34f71c5e470cd (patch) | |
| tree | 588f9dea97b70c00900d54130568a11084c5b07b /src/main/java/at/hannibal2/skyhanni/features/gui | |
| parent | a20da5a79b5b05839862c8e8fd165b18368729c1 (diff) | |
| download | skyhanni-4a6e2b16fc0171124c2a900751a34f71c5e470cd.tar.gz skyhanni-4a6e2b16fc0171124c2a900751a34f71c5e470cd.tar.bz2 skyhanni-4a6e2b16fc0171124c2a900751a34f71c5e470cd.zip | |
Feature: Beacon Power Display (#1901)
Co-authored-by: CalMWolfs <94038482+CalMWolfs@users.noreply.github.com>
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/features/gui')
| -rw-r--r-- | src/main/java/at/hannibal2/skyhanni/features/gui/BeaconPower.kt | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/features/gui/BeaconPower.kt b/src/main/java/at/hannibal2/skyhanni/features/gui/BeaconPower.kt new file mode 100644 index 000000000..04ab13333 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/features/gui/BeaconPower.kt @@ -0,0 +1,119 @@ +package at.hannibal2.skyhanni.features.gui + +import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.data.ProfileStorageData +import at.hannibal2.skyhanni.events.GuiRenderEvent +import at.hannibal2.skyhanni.events.InventoryUpdatedEvent +import at.hannibal2.skyhanni.events.SecondPassedEvent +import at.hannibal2.skyhanni.utils.ItemUtils.getLore +import at.hannibal2.skyhanni.utils.LorenzUtils +import at.hannibal2.skyhanni.utils.RegexUtils.matchMatcher +import at.hannibal2.skyhanni.utils.RegexUtils.matches +import at.hannibal2.skyhanni.utils.RenderUtils.renderString +import at.hannibal2.skyhanni.utils.SimpleTimeMark +import at.hannibal2.skyhanni.utils.SimpleTimeMark.Companion.asTimeMark +import at.hannibal2.skyhanni.utils.TimeUtils +import at.hannibal2.skyhanni.utils.TimeUtils.format +import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent + +class BeaconPower { + + private val storage get() = ProfileStorageData.profileSpecific?.beaconPower + private val config get() = SkyHanniMod.feature.gui + + private val group = RepoPattern.group("gui.beaconpower") + + private val deactivatedPattern by group.pattern( + "deactivated", + "§7Beacon Deactivated §8- §cNo Power Remaining" + ) + private val timeRemainingPattern by group.pattern( + "time", + "§7Power Remaining: §e(?<time>.+)" + ) + private val boostedStatPattern by group.pattern( + "stat", + "§7Current Stat: (?<stat>.+)" + ) + private val noBoostedStatPattern by group.pattern( + "nostat", + "TODO" + ) + + private var expiryTime: SimpleTimeMark + get() = storage?.beaconPowerExpiryTime?.asTimeMark() ?: SimpleTimeMark.farPast() + set(value) { + storage?.beaconPowerExpiryTime = value.toMillis() + } + + private var stat: String? + get() = storage?.boostedStat + set(value) { + storage?.boostedStat = value + } + + private var display: String? = null + + private val BEACON_POWER_SLOT = 22 + private val STATS_SLOT = 23 + + @SubscribeEvent + fun onInventoryUpdate(event: InventoryUpdatedEvent) { + if (!LorenzUtils.inSkyBlock) return + if (event.inventoryName != "Beacon") return + val items = event.inventoryItems + + items[BEACON_POWER_SLOT]?.let { item -> + item.getLore().forEach { + if (deactivatedPattern.matches(it)) { + expiryTime = SimpleTimeMark.farPast() + return@let + } + timeRemainingPattern.matchMatcher(it) { + val duration = TimeUtils.getDuration(group("time")) + expiryTime = SimpleTimeMark.now() + duration + return@let + } + } + } + + items[STATS_SLOT]?.let { item -> + item.getLore().forEach { + if (noBoostedStatPattern.matches(it)) { + stat = null + return@let + } + boostedStatPattern.matchMatcher(it) { + stat = group("stat") + return@let + } + } + } + } + + @SubscribeEvent + fun onRenderOverlay(event: GuiRenderEvent.GuiOverlayRenderEvent) { + if (!isEnabled()) return + val string = display ?: return + config.beaconPowerPosition.renderString(string, posLabel = "Beacon Power") + } + + @SubscribeEvent + fun onSecond(event: SecondPassedEvent) { + if (!isEnabled()) return + display = drawDisplay() + } + + private fun drawDisplay(): String { + var text = "§eBeacon: " + if (expiryTime.isInPast()) text += "§cNot active" + else { + text += "§b${expiryTime.timeUntil().format(maxUnits = 2)}" + if (config.beaconPowerStat) text += " §7(" + (stat ?: "§cNo stat") + "§7)" + } + return text + } + + private fun isEnabled() = LorenzUtils.inSkyBlock && config.beaconPower +} |
