summaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/features
diff options
context:
space:
mode:
authorhannibal2 <24389977+hannibal00212@users.noreply.github.com>2023-12-05 15:47:21 +0100
committerhannibal2 <24389977+hannibal00212@users.noreply.github.com>2023-12-05 15:47:21 +0100
commitc4dfb229e7eaaffefe053afc90ac1371db24936e (patch)
treed32ea7501e2ecd0e62b9923aef3a4fa0d380e248 /src/main/java/at/hannibal2/skyhanni/features
parent4750fec1fe3a3cb2a748df627c8d2343b6fd969d (diff)
downloadskyhanni-c4dfb229e7eaaffefe053afc90ac1371db24936e.tar.gz
skyhanni-c4dfb229e7eaaffefe053afc90ac1371db24936e.tar.bz2
skyhanni-c4dfb229e7eaaffefe053afc90ac1371db24936e.zip
GardenNextJacobContest now uses SimpleTimeMark. SimpleTimeMark is storable in the config and compareable
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/features')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/garden/GardenNextJacobContest.kt42
1 files changed, 22 insertions, 20 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenNextJacobContest.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenNextJacobContest.kt
index 2531c7cb1..f6da72d88 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenNextJacobContest.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenNextJacobContest.kt
@@ -16,6 +16,8 @@ import at.hannibal2.skyhanni.utils.ItemUtils.name
import at.hannibal2.skyhanni.utils.LorenzUtils
import at.hannibal2.skyhanni.utils.RenderUtils.renderSingleLineWithItems
import at.hannibal2.skyhanni.utils.RenderUtils.renderStrings
+import at.hannibal2.skyhanni.utils.SimpleTimeMark
+import at.hannibal2.skyhanni.utils.SimpleTimeMark.Companion.asTimeMark
import at.hannibal2.skyhanni.utils.SoundUtils
import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher
import at.hannibal2.skyhanni.utils.StringUtils.removeColor
@@ -31,28 +33,27 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
import org.lwjgl.opengl.Display
import java.awt.event.MouseAdapter
import java.awt.event.MouseEvent
-import java.time.Instant
import javax.swing.JButton
import javax.swing.JFrame
import javax.swing.JOptionPane
import javax.swing.UIManager
+import kotlin.time.Duration
import kotlin.time.Duration.Companion.days
+import kotlin.time.Duration.Companion.minutes
import kotlin.time.Duration.Companion.seconds
-import kotlin.time.DurationUnit
-import kotlin.time.toDuration
object GardenNextJacobContest {
private var dispatcher = Dispatchers.IO
private var display = emptyList<Any>()
private var simpleDisplay = emptyList<String>()
- private var contests = mutableMapOf<Long, FarmingContest>()
+ private var contests = mutableMapOf<SimpleTimeMark, FarmingContest>()
private var inCalendar = false
private val patternDay = "§aDay (?<day>.*)".toPattern()
private val patternMonth = "(?<month>.*), Year (?<year>.*)".toPattern()
private val patternCrop = "§(e○|6☘) §7(?<crop>.*)".toPattern()
private const val maxContestsPerYear = 124
- private const val contestDuration = 1_000 * 60 * 20
+ private val contestDuration = 20.minutes
private var lastWarningTime = 0L
private var loadedContestsYear = -1
private var nextContestsAvailableAt = -1L
@@ -127,7 +128,7 @@ object GardenNextJacobContest {
private fun readCalendar(items: Collection<ItemStack>, year: Int, month: Int) {
if (contests.isNotEmpty() && loadedContestsYear != year) {
val endTime = contests.values.first().endTime
- val lastYear = SkyBlockTime.fromInstant(Instant.ofEpochMilli(endTime)).year
+ val lastYear = endTime.toSkyBlockTime().year
if (year != lastYear) {
contests.clear()
}
@@ -153,7 +154,7 @@ object GardenNextJacobContest {
val name = item.name ?: continue
val day = patternDay.matchMatcher(name) { group("day").toInt() } ?: continue
- val startTime = SkyBlockTime(year, month, day).toMillis()
+ val startTime = SkyBlockTime(year, month, day).asTimeMark()
val crops = mutableListOf<CropType>()
for (line in lore) {
@@ -188,7 +189,7 @@ object GardenNextJacobContest {
val currentYear = SkyBlockTime.now().year
for (contest in contests.values) {
- val contestYear = (SkyBlockTime.fromInstant(Instant.ofEpochMilli(contest.endTime))).year
+ val contestYear = (contest.endTime.toSkyBlockTime()).year
// Ensure all stored contests are really from the current year
if (contestYear != currentYear) continue
@@ -203,7 +204,7 @@ object GardenNextJacobContest {
val year = savedContests.firstNotNullOfOrNull {
val endTime = it.key
- SkyBlockTime.fromInstant(Instant.ofEpochMilli(endTime)).year
+ endTime.toSkyBlockTime().year
}
// Clear contests if from previous year
@@ -236,7 +237,7 @@ object GardenNextJacobContest {
}
}
- class FarmingContest(val endTime: Long, val crops: List<CropType>)
+ class FarmingContest(val endTime: SimpleTimeMark, val crops: List<CropType>)
private fun update() {
nextContestCrops.clear()
@@ -274,7 +275,7 @@ object GardenNextJacobContest {
}
val nextContest =
- contests.filter { it.value.endTime > System.currentTimeMillis() }.toSortedMap()
+ contests.filter { !it.value.endTime.isInPast() }.toSortedMap()
.firstNotNullOfOrNull { it.value }
// Show next contest
if (nextContest != null) return drawNextContest(nextContest, list)
@@ -295,9 +296,8 @@ object GardenNextJacobContest {
nextContest: FarmingContest,
list: MutableList<Any>,
): MutableList<Any> {
- var duration = nextContest.endTime - System.currentTimeMillis()
- val durationObj = duration.toDuration(DurationUnit.MILLISECONDS)
- if (durationObj > 4.days) {
+ var duration = nextContest.endTime.timeUntil()
+ if (duration > 4.days) {
list.add("§New SB Year, wait a bit.")
return list
}
@@ -336,9 +336,9 @@ object GardenNextJacobContest {
return null
}
- private fun warn(timeInMillis: Long, crops: List<CropType>, boostedCrop: CropType?) {
+ private fun warn(duration: Duration, crops: List<CropType>, boostedCrop: CropType?) {
if (!config.warn) return
- if (config.warnTime <= timeInMillis / 1000) return
+ if (config.warnTime.seconds <= duration) return
if (System.currentTimeMillis() < lastWarningTime) return
lastWarningTime = System.currentTimeMillis() + 60_000 * 40
@@ -348,7 +348,8 @@ object GardenNextJacobContest {
LorenzUtils.sendTitle("§eFarming Contest!", 5.seconds)
SoundUtils.playBeepSound()
- val cropTextNoColor = crops.joinToString(", ") { if (it == boostedCrop) "<b>${it.cropName}</b>" else it.cropName }
+ val cropTextNoColor =
+ crops.joinToString(", ") { if (it == boostedCrop) "<b>${it.cropName}</b>" else it.cropName }
if (config.warnPopup && !Display.isActive()) {
SkyHanniMod.coroutineScope.launch {
openPopupWindow(
@@ -449,12 +450,13 @@ object GardenNextJacobContest {
val url = "https://api.elitebot.dev/contests/at/now"
val result = withContext(dispatcher) { APIUtil.getJSONResponse(url) }.asJsonObject
- val newContests = mutableMapOf<Long, FarmingContest>()
+ val newContests = mutableMapOf<SimpleTimeMark, FarmingContest>()
val complete = result["complete"].asBoolean
if (complete) {
for (entry in result["contests"].asJsonObject.entrySet()) {
var timestamp = entry.key.toLongOrNull() ?: continue
+ val timeMark = (timestamp * 1000).asTimeMark()
timestamp *= 1_000 // Seconds to milliseconds
val crops = entry.value.asJsonArray.map {
@@ -463,7 +465,7 @@ object GardenNextJacobContest {
if (crops.size != 3) continue
- newContests[timestamp + contestDuration] = FarmingContest(timestamp + contestDuration, crops)
+ newContests[timeMark + contestDuration] = FarmingContest(timeMark + contestDuration, crops)
}
} else {
LorenzUtils.chat("This years contests aren't available to fetch automatically yet, please load them from your calender or wait 10 minutes!")
@@ -500,7 +502,7 @@ object GardenNextJacobContest {
val formatted = mutableMapOf<Long, List<String>>()
for ((endTime, contest) in contests) {
- formatted[endTime / 1000] = contest.crops.map {
+ formatted[endTime.toMillis() / 1000] = contest.crops.map {
it.cropName
}
}