From ee84a09894c450c35ac619cd3870b3887059985d Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal002@users.noreply.github.com> Date: Wed, 19 Apr 2023 15:34:43 +0200 Subject: composter fix (#50) Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com> --- .../at/hannibal2/skyhanni/data/MayorElection.kt | 90 +++++++++++++++++++++ .../hannibal2/skyhanni/data/MayorElectionData.kt | 91 ---------------------- .../at/hannibal2/skyhanni/data/repo/RepoUtils.kt | 7 +- 3 files changed, 91 insertions(+), 97 deletions(-) create mode 100644 src/main/java/at/hannibal2/skyhanni/data/MayorElection.kt delete mode 100644 src/main/java/at/hannibal2/skyhanni/data/MayorElectionData.kt (limited to 'src/main/java/at/hannibal2/skyhanni/data') diff --git a/src/main/java/at/hannibal2/skyhanni/data/MayorElection.kt b/src/main/java/at/hannibal2/skyhanni/data/MayorElection.kt new file mode 100644 index 000000000..04da1e777 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/data/MayorElection.kt @@ -0,0 +1,90 @@ +package at.hannibal2.skyhanni.data + +import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.utils.APIUtil +import at.hannibal2.skyhanni.utils.LorenzUtils +import at.hannibal2.skyhanni.utils.jsonobjects.MayorJson +import com.google.gson.GsonBuilder +import io.github.moulberry.moulconfig.observer.PropertyTypeAdapterFactory +import io.github.moulberry.notenoughupdates.util.SkyBlockTime +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent +import net.minecraftforge.fml.common.gameevent.TickEvent + +class MayorElection { + private var tick = 0 + private var lastUpdate = 0L + + private val gson = GsonBuilder().setPrettyPrinting() + .registerTypeAdapterFactory(PropertyTypeAdapterFactory()) + .create() + + companion object { + var rawMayorData: MayorJson? = null + var candidates = mapOf() + var currentCandidate: MayorJson.Candidate? = null + + fun isPerkActive(mayor: String, perk: String): Boolean { + return currentCandidate?.let { currentCandidate -> + currentCandidate.name == mayor && currentCandidate.perks.any { it.name == perk } + } ?: false + } + + } + + @SubscribeEvent + fun onTick(event: TickEvent.ClientTickEvent) { + if (event.phase != TickEvent.Phase.START) return + if (!LorenzUtils.onHypixel) return + + tick++ + + if (tick % 60 == 0) { + check() + } + } + + private fun check() { + if (System.currentTimeMillis() > lastUpdate + 60_000 * 5) { + lastUpdate = System.currentTimeMillis() + SkyHanniMod.coroutineScope.launch { + val url = "https://api.hypixel.net/resources/skyblock/election" + val jsonObject = withContext(Dispatchers.IO) { APIUtil.getJSONResponse(url) } + rawMayorData = gson.fromJson(jsonObject, MayorJson::class.java) + val data = rawMayorData ?: return@launch + val map = mutableMapOf() + map put data.mayor.election.getPairs() + data.current?.let { + map put data.current.getPairs() + } + candidates = map + } + } + + checkCurrentMayor() + } + + private fun checkCurrentMayor() { + var currentYear = SkyBlockTime.now().year + + // The time in the current skyblock year when the election circle will restart + val month = 3 // Late Spring + val nextMayorTime = SkyBlockTime(currentYear, month, day = 27).toMillis() + + // Is it still the major from old sb year? + if (nextMayorTime > System.currentTimeMillis()) { + currentYear-- + } + currentCandidate = candidates[currentYear] + } + + private fun MayorJson.Election.getPairs() = year + 1 to candidates.bestCandidate() + + private fun List.bestCandidate() = maxBy { it.votes } + + private infix fun MutableMap.put(pairs: Pair) { + this[pairs.first] = pairs.second + } +} \ No newline at end of file diff --git a/src/main/java/at/hannibal2/skyhanni/data/MayorElectionData.kt b/src/main/java/at/hannibal2/skyhanni/data/MayorElectionData.kt deleted file mode 100644 index 70f30a021..000000000 --- a/src/main/java/at/hannibal2/skyhanni/data/MayorElectionData.kt +++ /dev/null @@ -1,91 +0,0 @@ -package at.hannibal2.skyhanni.data - -import at.hannibal2.skyhanni.SkyHanniMod -import at.hannibal2.skyhanni.utils.APIUtil -import at.hannibal2.skyhanni.utils.LorenzUtils -import at.hannibal2.skyhanni.utils.MayorData -import at.hannibal2.skyhanni.utils.MayorData.Candidate -import com.google.gson.GsonBuilder -import io.github.moulberry.moulconfig.observer.PropertyTypeAdapterFactory -import io.github.moulberry.notenoughupdates.util.SkyBlockTime -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent -import net.minecraftforge.fml.common.gameevent.TickEvent - -class MayorElectionData { - private var tick = 0 - private var lastUpdate = 0L - - private val gson = GsonBuilder().setPrettyPrinting() - .registerTypeAdapterFactory(PropertyTypeAdapterFactory()) - .create() - - companion object { - var rawMayorData: MayorData? = null - var candidates = mapOf() - var currentCandidate: Candidate? = null - - fun isPerkActive(mayor: String, perk: String): Boolean { - return currentCandidate?.let { currentCandidate -> - currentCandidate.name == mayor && currentCandidate.perks.any { it.name == perk } - } ?: false - } - - } - - @SubscribeEvent - fun onTick(event: TickEvent.ClientTickEvent) { - if (event.phase != TickEvent.Phase.START) return - if (!LorenzUtils.onHypixel) return - - tick++ - - if (tick % 60 == 0) { - check() - } - } - - private fun check() { - if (System.currentTimeMillis() > lastUpdate + 60_000 * 5) { - lastUpdate = System.currentTimeMillis() - SkyHanniMod.coroutineScope.launch { - val url = "https://api.hypixel.net/resources/skyblock/election" - val jsonObject = withContext(Dispatchers.IO) { APIUtil.getJSONResponse(url) } - rawMayorData = gson.fromJson(jsonObject, MayorData::class.java) - val data = rawMayorData ?: return@launch - val map = mutableMapOf() - map put data.mayor.election.getPairs() - data.current?.let { - map put data.current.getPairs() - } - candidates = map - } - } - - checkCurrentMayor() - } - - private fun checkCurrentMayor() { - var currentYear = SkyBlockTime.now().year - - // The time in the current skyblock year when the election circle will restart - val month = 3 // Late Spring - val nextMayorTime = SkyBlockTime(currentYear, month, day = 27).toMillis() - - // Is it still the major from old sb year? - if (nextMayorTime > System.currentTimeMillis()) { - currentYear-- - } - currentCandidate = candidates[currentYear] - } - - private fun MayorData.Election.getPairs() = year + 1 to candidates.bestCandidate() - - private fun List.bestCandidate() = maxBy { it.votes } - - private infix fun MutableMap.put(pairs: Pair) { - this[pairs.first] = pairs.second - } -} \ No newline at end of file diff --git a/src/main/java/at/hannibal2/skyhanni/data/repo/RepoUtils.kt b/src/main/java/at/hannibal2/skyhanni/data/repo/RepoUtils.kt index 969b526cc..3e67adcac 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/repo/RepoUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/repo/RepoUtils.kt @@ -1,7 +1,6 @@ package at.hannibal2.skyhanni.data.repo import com.google.gson.Gson -import com.google.gson.JsonObject import java.io.* import java.nio.charset.StandardCharsets import java.nio.file.Files @@ -77,11 +76,7 @@ object RepoUtils { return false } - fun getConstant(repoLocation: File, constant: String, gson: Gson): JsonObject? { - return getConstant(repoLocation, constant, gson, JsonObject::class.java) - } - - private fun getConstant(repo: File, constant: String, gson: Gson, clazz: Class?): T? { + fun getConstant(repo: File, constant: String, gson: Gson, clazz: Class?): T? { if (repo.exists()) { val jsonFile = File(repo, "constants/$constant.json") try { -- cgit