From 45d20d1b77e0f5c5cdcab0687dc590b726fa913d Mon Sep 17 00:00:00 2001 From: J10a1n15 <45315647+j10a1n15@users.noreply.github.com> Date: Sun, 27 Oct 2024 23:17:18 +0100 Subject: Backend + Fix: Improve active Perks Handling (#2838) Co-authored-by: Cal Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com> --- detekt/baseline.xml | 2 +- .../skyhanni/config/features/dev/DebugConfig.java | 4 +- .../java/at/hannibal2/skyhanni/data/ElectionAPI.kt | 274 +++++++++++++++++++++ .../java/at/hannibal2/skyhanni/data/MayorAPI.kt | 271 -------------------- .../java/at/hannibal2/skyhanni/data/MayorData.kt | 238 ++++++++++++++++++ src/main/java/at/hannibal2/skyhanni/data/Mayors.kt | 244 ------------------ .../features/event/diana/DianaProfitTracker.kt | 2 +- .../features/event/diana/GriffinBurrowHelper.kt | 5 +- .../event/diana/MythologicalCreatureTracker.kt | 2 +- .../elements/ScoreboardElementMayor.kt | 20 +- .../features/inventory/MinisterInCalendar.kt | 16 +- versions/1.8.9/detekt/baseline.xml | 2 +- 12 files changed, 540 insertions(+), 540 deletions(-) create mode 100644 src/main/java/at/hannibal2/skyhanni/data/ElectionAPI.kt delete mode 100644 src/main/java/at/hannibal2/skyhanni/data/MayorAPI.kt create mode 100644 src/main/java/at/hannibal2/skyhanni/data/MayorData.kt delete mode 100644 src/main/java/at/hannibal2/skyhanni/data/Mayors.kt diff --git a/detekt/baseline.xml b/detekt/baseline.xml index 6665e0399..fb620c666 100644 --- a/detekt/baseline.xml +++ b/detekt/baseline.xml @@ -30,9 +30,9 @@ CyclomaticComplexMethod:VampireSlayerFeatures.kt$VampireSlayerFeatures$private fun EntityOtherPlayerMP.process() CyclomaticComplexMethod:VisualWordGui.kt$VisualWordGui$override fun drawScreen(unusedX: Int, unusedY: Int, partialTicks: Float) InjectDispatcher:ClipboardUtils.kt$ClipboardUtils$IO + InjectDispatcher:ElectionAPI.kt$ElectionAPI$IO InjectDispatcher:GardenNextJacobContest.kt$GardenNextJacobContest$IO InjectDispatcher:HypixelBazaarFetcher.kt$HypixelBazaarFetcher$IO - InjectDispatcher:MayorAPI.kt$MayorAPI$IO LongMethod:CopyNearbyEntitiesCommand.kt$CopyNearbyEntitiesCommand$fun command(args: Array<String>) LongMethod:CropMoneyDisplay.kt$CropMoneyDisplay$private fun drawDisplay(): List<List<Any>> LongMethod:GhostCounter.kt$GhostCounter$private fun drawDisplay() diff --git a/src/main/java/at/hannibal2/skyhanni/config/features/dev/DebugConfig.java b/src/main/java/at/hannibal2/skyhanni/config/features/dev/DebugConfig.java index 9f92436cf..4607ab8df 100644 --- a/src/main/java/at/hannibal2/skyhanni/config/features/dev/DebugConfig.java +++ b/src/main/java/at/hannibal2/skyhanni/config/features/dev/DebugConfig.java @@ -1,7 +1,7 @@ package at.hannibal2.skyhanni.config.features.dev; import at.hannibal2.skyhanni.config.core.config.Position; -import at.hannibal2.skyhanni.data.Mayor; +import at.hannibal2.skyhanni.data.ElectionCandidate; import com.google.gson.annotations.Expose; import io.github.notenoughupdates.moulconfig.annotations.ConfigEditorBoolean; import io.github.notenoughupdates.moulconfig.annotations.ConfigEditorDropdown; @@ -145,7 +145,7 @@ public class DebugConfig { @Expose @ConfigOption(name = "Assume Mayor", desc = "Select a mayor to assume.") @ConfigEditorDropdown - public Property assumeMayor = Property.of(Mayor.DISABLED); + public Property assumeMayor = Property.of(ElectionCandidate.DISABLED); @Expose @ConfigOption(name = "Always April Fools", desc = "Always show April fools jokes.") diff --git a/src/main/java/at/hannibal2/skyhanni/data/ElectionAPI.kt b/src/main/java/at/hannibal2/skyhanni/data/ElectionAPI.kt new file mode 100644 index 000000000..03a6a2e9c --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/data/ElectionAPI.kt @@ -0,0 +1,274 @@ +package at.hannibal2.skyhanni.data + +import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.config.ConfigManager +import at.hannibal2.skyhanni.data.ElectionCandidate.Companion.getMayorFromPerk +import at.hannibal2.skyhanni.data.ElectionCandidate.Companion.setAssumeMayorJson +import at.hannibal2.skyhanni.data.Perk.Companion.getPerkFromName +import at.hannibal2.skyhanni.data.jsonobjects.other.MayorCandidate +import at.hannibal2.skyhanni.data.jsonobjects.other.MayorElection +import at.hannibal2.skyhanni.data.jsonobjects.other.MayorJson +import at.hannibal2.skyhanni.events.ConfigLoadEvent +import at.hannibal2.skyhanni.events.DebugDataCollectEvent +import at.hannibal2.skyhanni.events.InventoryFullyOpenedEvent +import at.hannibal2.skyhanni.events.LorenzChatEvent +import at.hannibal2.skyhanni.events.SecondPassedEvent +import at.hannibal2.skyhanni.features.fame.ReminderUtils +import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule +import at.hannibal2.skyhanni.utils.APIUtils +import at.hannibal2.skyhanni.utils.ChatUtils +import at.hannibal2.skyhanni.utils.CollectionUtils.nextAfter +import at.hannibal2.skyhanni.utils.CollectionUtils.put +import at.hannibal2.skyhanni.utils.ConditionalUtils.onToggle +import at.hannibal2.skyhanni.utils.HypixelCommands +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.SimpleTimeMark +import at.hannibal2.skyhanni.utils.SimpleTimeMark.Companion.asTimeMark +import at.hannibal2.skyhanni.utils.SkyBlockTime +import at.hannibal2.skyhanni.utils.SkyBlockTime.Companion.SKYBLOCK_YEAR_MILLIS +import at.hannibal2.skyhanni.utils.StringUtils.removeColor +import at.hannibal2.skyhanni.utils.json.fromJson +import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import net.minecraft.item.ItemStack +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent +import kotlin.time.Duration.Companion.hours +import kotlin.time.Duration.Companion.milliseconds +import kotlin.time.Duration.Companion.minutes + +@SkyHanniModule +object ElectionAPI { + + private val group = RepoPattern.group("mayorapi") + + /** + * REGEX-TEST: Schedules an extra §bFishing Festival §7event during the year. + */ + val foxyExtraEventPattern by group.pattern( + "foxy.extraevent", + "Schedules an extra §.(?.*) §.event during the year\\.", + ) + + /** + * REGEX-TEST: The election room is now closed. Clerk Seraphine is doing a final count of the votes... + */ + private val electionOverPattern by group.pattern( + "election.over", + "§eThe election room is now closed\\. Clerk Seraphine is doing a final count of the votes\\.\\.\\.", + ) + + /** + * REGEX-TEST: Calendar and Events + */ + val calendarGuiPattern by group.pattern( + "calendar.gui", + "Calendar and Events", + ) + + /** + * REGEX-TEST: §dMayor Jerry + * REGEX-TEST: §cMayor Aatrox + */ + private val mayorHeadPattern by group.pattern( + "mayor.head", + "§.Mayor (?.*)", + ) + + /** + * REGEX-TEST: §9Perkpocalypse Perks: + */ + private val perkpocalypsePerksPattern by group.pattern( + "perkpocalypse", + "§9Perkpocalypse Perks:", + ) + + var currentMayor: ElectionCandidate? = null + private set + var currentMinister: ElectionCandidate? = null + private set + private var lastMayor: ElectionCandidate? = null + var jerryExtraMayor: Pair = null to SimpleTimeMark.farPast() + private set + private var lastJerryExtraMayorReminder = SimpleTimeMark.farPast() + + private var lastUpdate = SimpleTimeMark.farPast() + private val dispatcher = Dispatchers.IO + + private var rawMayorData: MayorJson? = null + private var candidates = mapOf() + + var nextMayorTimestamp = SimpleTimeMark.farPast() + private set + + private const val ELECTION_END_MONTH = 3 // Late Spring + private const val ELECTION_END_DAY = 27 + + /** + * @param input: The name of the mayor + * @return: The NotEnoughUpdates color of the mayor; If no mayor was found, it will return "§c" + */ + fun mayorNameToColorCode(input: String): String = ElectionCandidate.getMayorFromName(input)?.color ?: "§c" + + /** + * @param input: The name of the mayor + * @return: The NotEnoughUpdates color of the mayor with the name of the mayor; If no mayor was found, it will return "§c[input]" + */ + fun mayorNameWithColorCode(input: String) = mayorNameToColorCode(input) + input + + @SubscribeEvent + fun onSecondPassed(event: SecondPassedEvent) { + if (!LorenzUtils.onHypixel) return + if (event.repeatSeconds(2)) { + checkHypixelAPI() + getTimeTillNextMayor() + } + + if (!LorenzUtils.inSkyBlock) return + if (!ElectionCandidate.JERRY.isActive()) return + if (jerryExtraMayor.first != null && jerryExtraMayor.second.isInPast()) { + jerryExtraMayor = null to SimpleTimeMark.farPast() + ChatUtils.clickableChat( + "The Perkpocalypse Mayor has expired! Click here to update the new temporary Mayor.", + onClick = { HypixelCommands.calendar() }, + ) + } + val misc = SkyHanniMod.feature.misc + if (jerryExtraMayor.first == null && misc.unknownPerkpocalypseMayorWarning) { + if (lastJerryExtraMayorReminder.passedSince() < 5.minutes) return + if (ReminderUtils.isBusy()) return + lastJerryExtraMayorReminder = SimpleTimeMark.now() + ChatUtils.clickableChat( + "The Perkpocalypse Mayor is not known! Click here to update the temporary Mayor.", + onClick = { HypixelCommands.calendar() }, + replaceSameMessage = true, + ) + } + } + + @SubscribeEvent + fun onChat(event: LorenzChatEvent) { + if (!LorenzUtils.inSkyBlock) return + + if (electionOverPattern.matches(event.message)) { + lastMayor = currentMayor + currentMayor = ElectionCandidate.UNKNOWN + currentMinister = null + } + } + + @SubscribeEvent + fun onInventory(event: InventoryFullyOpenedEvent) { + if (!LorenzUtils.inSkyBlock) return + + if (!calendarGuiPattern.matches(event.inventoryName)) return + + val stack: ItemStack = event.inventoryItems.values.firstOrNull { + mayorHeadPattern.matchMatcher(it.displayName) { + group("name") == "Jerry" + } ?: false + } ?: return + + val perk = stack.getLore().nextAfter({ perkpocalypsePerksPattern.matches(it) }, 2) ?: return + // This is the first Perk of the Perkpocalypse Mayor + val jerryMayor = getMayorFromPerk(getPerkFromName(perk.removeColor()) ?: return)?.addAllPerks() ?: return + + val lastMayorTimestamp = nextMayorTimestamp - SKYBLOCK_YEAR_MILLIS.milliseconds + + val expireTime = (1..21) + .map { lastMayorTimestamp + (6.hours * it) } + .firstOrNull { it.isInFuture() } + ?.coerceAtMost(nextMayorTimestamp) ?: return + + ChatUtils.debug("Jerry Mayor found: ${jerryMayor.name} expiring at: ${expireTime.timeUntil()}") + + jerryExtraMayor = jerryMayor to expireTime + } + + fun SkyBlockTime.getElectionYear(): Int { + var mayorYear = year + + // Check if this year's election has not happened yet + if (month < ELECTION_END_MONTH || (day < ELECTION_END_DAY && month == ELECTION_END_MONTH)) { + // If so, the current mayor is still from last year's election + mayorYear-- + } + return mayorYear + } + + private fun calculateNextMayorTime(): SimpleTimeMark { + val now = SkyBlockTime.now() + + return SkyBlockTime(now.getElectionYear() + 1, ELECTION_END_MONTH, day = ELECTION_END_DAY).asTimeMark() + } + + private fun getTimeTillNextMayor() { + nextMayorTimestamp = calculateNextMayorTime() + } + + private fun checkHypixelAPI(forceReload: Boolean = false) { + if (!forceReload) { + if (lastUpdate.passedSince() < 20.minutes) return + if (currentMayor == ElectionCandidate.UNKNOWN && lastUpdate.passedSince() < 1.minutes) return + } + lastUpdate = SimpleTimeMark.now() + + SkyHanniMod.coroutineScope.launch { + val url = "https://api.hypixel.net/v2/resources/skyblock/election" + val jsonObject = withContext(dispatcher) { APIUtils.getJSONResponse(url) } + rawMayorData = ConfigManager.gson.fromJson(jsonObject) + val data = rawMayorData ?: return@launch + val map = mutableMapOf() + map put data.mayor.election.getPairs() + data.current?.let { + map put data.current.getPairs() + } + candidates = map + + val currentMayorName = data.mayor.name + if (lastMayor?.name != currentMayorName) { + currentMayor = setAssumeMayorJson(currentMayorName, data.mayor.perks) + currentMinister = data.mayor.minister?.let { setAssumeMayorJson(it.name, listOf(it.perk)) } + } + } + } + + private fun MayorElection.getPairs() = year + 1 to candidates.bestCandidate() + + private fun List.bestCandidate() = maxBy { it.votes } + + @SubscribeEvent + fun onConfigReload(event: ConfigLoadEvent) { + val config = SkyHanniMod.feature.dev.debug.assumeMayor + config.onToggle { + val mayor = config.get() + + if (mayor == ElectionCandidate.DISABLED) { + checkHypixelAPI(forceReload = true) + } else { + mayor.addPerks(mayor.perks.toList()) + currentMayor = mayor + } + } + } + + @SubscribeEvent + fun onDebugDataCollect(event: DebugDataCollectEvent) { + event.title("Mayor") + event.addIrrelevant { + add("Current Mayor: ${currentMayor?.name ?: "Unknown"}") + add("Active Perks: ${currentMayor?.activePerks}") + add("Last Update: ${lastUpdate.formattedDate("EEEE, MMM d h:mm a")} (${lastUpdate.passedSince()} ago)") + add("Time Till Next Mayor: ${nextMayorTimestamp.timeUntil()}") + add("Current Minister: ${currentMinister?.name ?: "Unknown"}") + add("Current Minister Perk: ${currentMinister?.activePerks}") + if (jerryExtraMayor.first != null) { + add("Jerry Mayor: ${jerryExtraMayor.first?.name} expiring at: ${jerryExtraMayor.second.timeUntil()}") + } + } + } +} diff --git a/src/main/java/at/hannibal2/skyhanni/data/MayorAPI.kt b/src/main/java/at/hannibal2/skyhanni/data/MayorAPI.kt deleted file mode 100644 index 1cb023ecd..000000000 --- a/src/main/java/at/hannibal2/skyhanni/data/MayorAPI.kt +++ /dev/null @@ -1,271 +0,0 @@ -package at.hannibal2.skyhanni.data - -import at.hannibal2.skyhanni.SkyHanniMod -import at.hannibal2.skyhanni.config.ConfigManager -import at.hannibal2.skyhanni.data.Mayor.Companion.addPerks -import at.hannibal2.skyhanni.data.Mayor.Companion.getMayorFromPerk -import at.hannibal2.skyhanni.data.Mayor.Companion.setAssumeMayorJson -import at.hannibal2.skyhanni.data.Perk.Companion.getPerkFromName -import at.hannibal2.skyhanni.data.jsonobjects.other.MayorCandidate -import at.hannibal2.skyhanni.data.jsonobjects.other.MayorElection -import at.hannibal2.skyhanni.data.jsonobjects.other.MayorJson -import at.hannibal2.skyhanni.events.ConfigLoadEvent -import at.hannibal2.skyhanni.events.DebugDataCollectEvent -import at.hannibal2.skyhanni.events.InventoryFullyOpenedEvent -import at.hannibal2.skyhanni.events.LorenzChatEvent -import at.hannibal2.skyhanni.events.SecondPassedEvent -import at.hannibal2.skyhanni.features.fame.ReminderUtils -import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule -import at.hannibal2.skyhanni.utils.APIUtils -import at.hannibal2.skyhanni.utils.ChatUtils -import at.hannibal2.skyhanni.utils.CollectionUtils.nextAfter -import at.hannibal2.skyhanni.utils.CollectionUtils.put -import at.hannibal2.skyhanni.utils.ConditionalUtils.onToggle -import at.hannibal2.skyhanni.utils.HypixelCommands -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.SimpleTimeMark -import at.hannibal2.skyhanni.utils.SimpleTimeMark.Companion.asTimeMark -import at.hannibal2.skyhanni.utils.SkyBlockTime -import at.hannibal2.skyhanni.utils.SkyBlockTime.Companion.SKYBLOCK_YEAR_MILLIS -import at.hannibal2.skyhanni.utils.StringUtils.removeColor -import at.hannibal2.skyhanni.utils.json.fromJson -import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext -import net.minecraft.item.ItemStack -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent -import kotlin.time.Duration.Companion.hours -import kotlin.time.Duration.Companion.milliseconds -import kotlin.time.Duration.Companion.minutes - -@SkyHanniModule -object MayorAPI { - - private val group = RepoPattern.group("mayorapi") - - // TODO: Add Regex-test - val foxyExtraEventPattern by group.pattern( - "foxy.extraevent", - "Schedules an extra §.(?.*) §.event during the year\\.", - ) - - /** - * REGEX-TEST: The election room is now closed. Clerk Seraphine is doing a final count of the votes... - */ - private val electionOverPattern by group.pattern( - "election.over", - "§eThe election room is now closed\\. Clerk Seraphine is doing a final count of the votes\\.\\.\\.", - ) - - /** - * REGEX-TEST: Calendar and Events - */ - val calendarGuiPattern by group.pattern( - "calendar.gui", - "Calendar and Events", - ) - - /** - * REGEX-TEST: §dMayor Jerry - * REGEX-TEST: §cMayor Aatrox - */ - private val mayorHeadPattern by group.pattern( - "mayor.head", - "§.Mayor (?.*)", - ) - - /** - * REGEX-TEST: §9Perkpocalypse Perks: - */ - private val perkpocalypsePerksPattern by group.pattern( - "perkpocalypse", - "§9Perkpocalypse Perks:", - ) - - var currentMayor: Mayor? = null - private set - var currentMinister: Mayor? = null - private set - private var lastMayor: Mayor? = null - var jerryExtraMayor: Pair = null to SimpleTimeMark.farPast() - private set - private var lastJerryExtraMayorReminder = SimpleTimeMark.farPast() - - private var lastUpdate = SimpleTimeMark.farPast() - private val dispatcher = Dispatchers.IO - - private var rawMayorData: MayorJson? = null - private var candidates = mapOf() - - var nextMayorTimestamp = SimpleTimeMark.farPast() - private set - - private const val ELECTION_END_MONTH = 3 // Late Spring - private const val ELECTION_END_DAY = 27 - - /** - * @param input: The name of the mayor - * @return: The NotEnoughUpdates color of the mayor; If no mayor was found, it will return "§c" - */ - fun mayorNameToColorCode(input: String): String = Mayor.getMayorFromName(input)?.color ?: "§c" - - /** - * @param input: The name of the mayor - * @return: The NotEnoughUpdates color of the mayor + the name of the mayor; If no mayor was found, it will return "§c[input]" - */ - fun mayorNameWithColorCode(input: String) = mayorNameToColorCode(input) + input - - @SubscribeEvent - fun onSecondPassed(event: SecondPassedEvent) { - if (!LorenzUtils.onHypixel) return - if (event.repeatSeconds(2)) { - checkHypixelAPI() - getTimeTillNextMayor() - } - - if (!LorenzUtils.inSkyBlock) return - if (jerryExtraMayor.first != null && jerryExtraMayor.second.isInPast() && Mayor.JERRY.isActive()) { - jerryExtraMayor = null to SimpleTimeMark.farPast() - ChatUtils.clickableChat( - "The Perkpocalypse Mayor has expired! Click here to update the new temporary Mayor.", - onClick = { HypixelCommands.calendar() }, - ) - } - val misc = SkyHanniMod.feature.misc - if (Mayor.JERRY.isActive() && jerryExtraMayor.first == null && misc.unknownPerkpocalypseMayorWarning) { - if (lastJerryExtraMayorReminder.passedSince() < 5.minutes) return - if (ReminderUtils.isBusy()) return - lastJerryExtraMayorReminder = SimpleTimeMark.now() - ChatUtils.clickableChat( - "The Perkpocalypse Mayor is not known! Click here to update the temporary Mayor.", - onClick = { HypixelCommands.calendar() }, - replaceSameMessage = true, - ) - } - } - - @SubscribeEvent - fun onChat(event: LorenzChatEvent) { - if (!LorenzUtils.inSkyBlock) return - - if (electionOverPattern.matches(event.message)) { - lastMayor = currentMayor - currentMayor = Mayor.UNKNOWN - currentMinister = null - } - } - - @SubscribeEvent - fun onInventory(event: InventoryFullyOpenedEvent) { - if (!LorenzUtils.inSkyBlock) return - - if (!calendarGuiPattern.matches(event.inventoryName)) return - - val stack: ItemStack = event.inventoryItems.values.firstOrNull { - mayorHeadPattern.matchMatcher(it.displayName) { - group("name") == "Jerry" - } ?: false - } ?: return - - val perk = stack.getLore().nextAfter({ perkpocalypsePerksPattern.matches(it) }, 2) ?: return - // This is the first Perk of the Perkpocalypse Mayor - val jerryMayor = getMayorFromPerk(getPerkFromName(perk.removeColor()) ?: return)?.addAllPerks() ?: return - - val lastMayorTimestamp = nextMayorTimestamp - SKYBLOCK_YEAR_MILLIS.milliseconds - - val expireTime = (1..21) - .map { lastMayorTimestamp + (6.hours * it) } - .firstOrNull { it.isInFuture() } - ?.coerceAtMost(nextMayorTimestamp) ?: return - - ChatUtils.debug("Jerry Mayor found: ${jerryMayor.name} expiring at: ${expireTime.timeUntil()}") - - jerryExtraMayor = jerryMayor to expireTime - } - - fun SkyBlockTime.getElectionYear(): Int { - var mayorYear = year - - // Check if this year's election has not happened yet - if (month < ELECTION_END_MONTH || (day < ELECTION_END_DAY && month == ELECTION_END_MONTH)) { - // If so, the current mayor is still from last year's election - mayorYear-- - } - return mayorYear - } - - private fun calculateNextMayorTime(): SimpleTimeMark { - val now = SkyBlockTime.now() - - return SkyBlockTime(now.getElectionYear() + 1, ELECTION_END_MONTH, day = ELECTION_END_DAY).asTimeMark() - } - - private fun getTimeTillNextMayor() { - nextMayorTimestamp = calculateNextMayorTime() - } - - private fun checkHypixelAPI(forceReload: Boolean = false) { - if (!forceReload) { - if (lastUpdate.passedSince() < 20.minutes) return - if (currentMayor == Mayor.UNKNOWN && lastUpdate.passedSince() < 1.minutes) return - } - lastUpdate = SimpleTimeMark.now() - - SkyHanniMod.coroutineScope.launch { - val url = "https://api.hypixel.net/v2/resources/skyblock/election" - val jsonObject = withContext(dispatcher) { APIUtils.getJSONResponse(url) } - rawMayorData = ConfigManager.gson.fromJson(jsonObject) - val data = rawMayorData ?: return@launch - val map = mutableMapOf() - map put data.mayor.election.getPairs() - data.current?.let { - map put data.current.getPairs() - } - candidates = map - - val currentMayorName = data.mayor.name - if (lastMayor?.name != currentMayorName) { - currentMayor = setAssumeMayorJson(currentMayorName, data.mayor.perks) - currentMinister = data.mayor.minister?.let { setAssumeMayorJson(it.name, listOf(it.perk)) } - } - } - } - - private fun MayorElection.getPairs() = year + 1 to candidates.bestCandidate() - - private fun List.bestCandidate() = maxBy { it.votes } - - @SubscribeEvent - fun onConfigReload(event: ConfigLoadEvent) { - SkyHanniMod.feature.dev.debug.assumeMayor.onToggle { - val mayor = SkyHanniMod.feature.dev.debug.assumeMayor.get() - - if (mayor == Mayor.DISABLED) { - checkHypixelAPI(forceReload = true) - } else { - mayor.addPerks(mayor.perks.toList()) - currentMayor = mayor - } - } - } - - @SubscribeEvent - fun onDebugDataCollect(event: DebugDataCollectEvent) { - event.title("Mayor") - event.addIrrelevant { - add("Current Mayor: ${currentMayor?.name ?: "Unknown"}") - add("Active Perks: ${currentMayor?.activePerks}") - add("Last Update: ${lastUpdate.formattedDate("EEEE, MMM d h:mm a")} (${lastUpdate.passedSince()} ago)") - add("Time Till Next Mayor: ${nextMayorTimestamp.timeUntil()}") - add("Current Minister: ${currentMinister?.name ?: "Unknown"}") - add("Current Minister Perk: ${currentMinister?.activePerks}") - if (jerryExtraMayor.first != null) { - add("Jerry Mayor: ${jerryExtraMayor.first?.name} expiring at: ${jerryExtraMayor.second.timeUntil()}") - } - } - } -} diff --git a/src/main/java/at/hannibal2/skyhanni/data/MayorData.kt b/src/main/java/at/hannibal2/skyhanni/data/MayorData.kt new file mode 100644 index 000000000..3d1558987 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/data/MayorData.kt @@ -0,0 +1,238 @@ +package at.hannibal2.skyhanni.data + +import at.hannibal2.skyhanni.data.ElectionAPI.currentMayor +import at.hannibal2.skyhanni.data.ElectionAPI.foxyExtraEventPattern +import at.hannibal2.skyhanni.data.Perk.Companion.toPerk +import at.hannibal2.skyhanni.data.jsonobjects.other.MayorPerk +import at.hannibal2.skyhanni.test.command.ErrorManager +import at.hannibal2.skyhanni.utils.RegexUtils.matchMatcher + +enum class ElectionCandidate( + val mayorName: String, + val color: String, + vararg val perks: Perk, +) { + AATROX( + "Aatrox", + "§3", + Perk.SLASHED_PRICING, + Perk.SLAYER_XP_BUFF, + Perk.PATHFINDER, + ), + COLE( + "Cole", + "§e", + Perk.PROSPECTION, + Perk.MINING_XP_BUFF, + Perk.MINING_FIESTA, + Perk.MOLTEN_FORGE, + ), + DIANA( + "Diana", + "§2", + Perk.LUCKY, + Perk.MYTHOLOGICAL_RITUAL, + Perk.PET_XP_BUFF, + Perk.SHARING_IS_CARING, + ), + DIAZ( + "Diaz", + "§6", + Perk.VOLUME_TRADING, + Perk.SHOPPING_SPREE, + Perk.STOCK_EXCHANGE, + Perk.LONG_TERM_INVESTMENT, + ), + FINNEGAN( + "Finnegan", + "§c", + Perk.PELT_POCALYPSE, + Perk.GOATED, + Perk.BLOOMING_BUSINESS, + Perk.PEST_ERADICATOR, + ), + FOXY( + "Foxy", + "§d", + Perk.SWEET_BENEVOLENCE, + Perk.A_TIME_FOR_GIVING, + Perk.CHIVALROUS_CARNIVAL, + Perk.EXTRA_EVENT_MINING, + Perk.EXTRA_EVENT_FISHING, + Perk.EXTRA_EVENT_SPOOKY, + ), + MARINA( + "Marina", + "§b", + Perk.FISHING_XP_BUFF, + Perk.LUCK_OF_THE_SEA, + Perk.FISHING_FESTIVAL, + Perk.DOUBLE_TROUBLE, + ), + PAUL( + "Paul", + "§c", + Perk.MARAUDER, + Perk.EZPZ, + Perk.BENEDICTION, + ), + + SCORPIUS( + "Scorpius", + "§d", + Perk.BRIBE, + Perk.DARKER_AUCTIONS, + ), + JERRY( + "Jerry", + "§d", + Perk.PERKPOCALYPSE, + Perk.STATSPOCALYPSE, + Perk.JERRYPOCALYPSE, + ), + DERPY( + "Derpy", + "§d", + Perk.TURBO_MINIONS, + Perk.QUAD_TAXES, + Perk.DOUBLE_MOBS_HP, + Perk.MOAR_SKILLZ, + ), + + UNKNOWN("Unknown", "§c"), + DISABLED("§cDisabled", "§7"), + ; + + val activePerks get() = this.perks.filter { it.isActive } + + override fun toString() = mayorName + + fun addPerks(perks: List) { + this.perks.forEach { it.isActive = false } + perks.forEach { it.isActive = true } + } + + fun addAllPerks(): ElectionCandidate { + this.perks.forEach { it.isActive = true } + return this + } + + fun isActive() = this == currentMayor + + companion object { + + fun getMayorFromName(name: String): ElectionCandidate? = entries.firstOrNull { it.mayorName == name } + + fun getMayorFromPerk(perk: Perk): ElectionCandidate? = entries.firstOrNull { it.perks.contains(perk) } + + fun setAssumeMayorJson(name: String, perksJson: List): ElectionCandidate? { + val mayor = getMayorFromName(name) ?: run { + ErrorManager.logErrorStateWithData( + "Unknown mayor found", + "mayor name not in Mayor enum", + "name" to name, + "perksJson" to perksJson, + betaOnly = true, + ) + return null + } + + mayor.addPerks(perksJson.mapNotNull { it.toPerk() }) + return mayor + } + } +} + +enum class Perk(val perkName: String) { + // Aatrox + SLASHED_PRICING("SLASHED Pricing"), + SLAYER_XP_BUFF("Slayer XP Buff"), + PATHFINDER("Pathfinder"), + + // Cole + PROSPECTION("Prospection"), + MINING_XP_BUFF("Mining XP Buff"), + MINING_FIESTA("Mining Fiesta"), + MOLTEN_FORGE("Molten Forge"), + + // Diana + LUCKY("Lucky!"), + MYTHOLOGICAL_RITUAL("Mythological Ritual"), + PET_XP_BUFF("Pet XP Buff"), + SHARING_IS_CARING("Sharing is Caring"), + + // Diaz + SHOPPING_SPREE("Shopping Spree"), + VOLUME_TRADING("Volume Trading"), + STOCK_EXCHANGE("Stock Exchange"), + LONG_TERM_INVESTMENT("Long Term Investment"), + + // Finnegan + PELT_POCALYPSE("Pelt-pocalypse"), + GOATED("GOATed"), + BLOOMING_BUSINESS("Blooming Business"), + PEST_ERADICATOR("Pest Eradicator"), + + // Foxy + SWEET_BENEVOLENCE("Sweet Benevolence"), + A_TIME_FOR_GIVING("A Time for Giving"), + CHIVALROUS_CARNIVAL("Chivalrous Carnival"), + EXTRA_EVENT_MINING("Extra Event (Mining)"), + EXTRA_EVENT_FISHING("Extra Event (Fishing)"), + EXTRA_EVENT_SPOOKY("Extra Event (Spooky)"), + + // Marina + FISHING_XP_BUFF("Fishing XP Buff"), + LUCK_OF_THE_SEA("Luck of the Sea 2.0"), + FISHING_FESTIVAL("Fishing Festival"), + DOUBLE_TROUBLE("Double Trouble"), + + // Paul + MARAUDER("Marauder"), + EZPZ("EZPZ"), + BENEDICTION("Benediction"), + + // Scorpius + BRIBE("Bribe"), + DARKER_AUCTIONS("Darker Auctions"), + + // Jerry + PERKPOCALYPSE("Perkpocalypse"), + STATSPOCALYPSE("Statspocalypse"), + JERRYPOCALYPSE("Jerrypocalypse"), + + // Derpy + TURBO_MINIONS("TURBO MINIONS!!!"), + QUAD_TAXES("QUAD TAXES!!!"), + DOUBLE_MOBS_HP("DOUBLE MOBS HP!!!"), + MOAR_SKILLZ("MOAR SKILLZ!!!"), + ; + + var isActive = false + var description = "§cDescription failed to load from the API." + var minister = false + + override fun toString(): String = "$perkName: $description" + + companion object { + fun getPerkFromName(name: String): Perk? = entries.firstOrNull { it.perkName == name } + + fun MayorPerk.toPerk(): Perk? = getPerkFromName(this.renameIfFoxyExtraEventPerkFound())?.let { + it.description = this.description + it.minister = this.minister + it + } + + private fun MayorPerk.renameIfFoxyExtraEventPerkFound(): String { + val foxyExtraEventPairs = mapOf( + "Spooky Festival" to "Extra Event (Spooky)", + "Mining Fiesta" to "Extra Event (Mining)", + "Fishing Festival" to "Extra Event (Fishing)", + ) + + return foxyExtraEventPattern.matchMatcher(this.description) { + foxyExtraEventPairs.entries.firstOrNull { it.key == group("event") }?.value + } ?: this.name + } + } +} diff --git a/src/main/java/at/hannibal2/skyhanni/data/Mayors.kt b/src/main/java/at/hannibal2/skyhanni/data/Mayors.kt deleted file mode 100644 index 335648dc5..000000000 --- a/src/main/java/at/hannibal2/skyhanni/data/Mayors.kt +++ /dev/null @@ -1,244 +0,0 @@ -package at.hannibal2.skyhanni.data - -import at.hannibal2.skyhanni.data.MayorAPI.currentMayor -import at.hannibal2.skyhanni.data.MayorAPI.foxyExtraEventPattern -import at.hannibal2.skyhanni.data.jsonobjects.other.MayorPerk -import at.hannibal2.skyhanni.test.command.ErrorManager -import at.hannibal2.skyhanni.utils.RegexUtils.matchMatcher - -enum class Mayor( - val mayorName: String, - val color: String, - vararg val perks: Perk, -) { - AATROX( - "Aatrox", - "§3", - Perk.SLASHED_PRICING, - Perk.SLAYER_XP_BUFF, - Perk.PATHFINDER, - ), - COLE( - "Cole", - "§e", - Perk.PROSPECTION, - Perk.MINING_XP_BUFF, - Perk.MINING_FIESTA, - Perk.MOLTEN_FORGE, - ), - DIANA( - "Diana", - "§2", - Perk.LUCKY, - Perk.MYTHOLOGICAL_RITUAL, - Perk.PET_XP_BUFF, - Perk.SHARING_IS_CARING, - ), - DIAZ( - "Diaz", - "§6", - Perk.VOLUME_TRADING, - Perk.SHOPPING_SPREE, - Perk.STOCK_EXCHANGE, - Perk.LONG_TERM_INVESTMENT, - ), - FINNEGAN( - "Finnegan", - "§c", - Perk.PELT_POCALYPSE, - Perk.GOATED, - Perk.BLOOMING_BUSINESS, - Perk.PEST_ERADICATOR, - ), - FOXY( - "Foxy", - "§d", - Perk.SWEET_BENEVOLENCE, - Perk.A_TIME_FOR_GIVING, - Perk.CHIVALROUS_CARNIVAL, - Perk.EXTRA_EVENT_MINING, - Perk.EXTRA_EVENT_FISHING, - Perk.EXTRA_EVENT_SPOOKY, - ), - MARINA( - "Marina", - "§b", - Perk.FISHING_XP_BUFF, - Perk.LUCK_OF_THE_SEA, - Perk.FISHING_FESTIVAL, - Perk.DOUBLE_TROUBLE, - ), - PAUL( - "Paul", - "§c", - Perk.MARAUDER, - Perk.EZPZ, - Perk.BENEDICTION, - ), - - SCORPIUS( - "Scorpius", - "§d", - Perk.BRIBE, - Perk.DARKER_AUCTIONS, - ), - JERRY( - "Jerry", - "§d", - Perk.PERKPOCALYPSE, - Perk.STATSPOCALYPSE, - Perk.JERRYPOCALYPSE, - ), - DERPY( - "Derpy", - "§d", - Perk.TURBO_MINIONS, - Perk.QUAD_TAXES, - Perk.DOUBLE_MOBS_HP, - Perk.MOAR_SKILLZ, - ), - - UNKNOWN("Unknown", "§c"), - DISABLED("§cDisabled", "§7"), - ; - - val activePerks: MutableList = mutableListOf() - - override fun toString() = mayorName - - fun addAllPerks(): Mayor { - activePerks.addAll(perks) - perks.forEach { it.isActive = true } - return this - } - - fun isActive() = this == currentMayor - - companion object { - - fun getMayorFromName(name: String): Mayor? = entries.firstOrNull { it.mayorName == name } - - fun getMayorFromPerk(perk: Perk): Mayor? = entries.firstOrNull { it.perks.contains(perk) } - - fun setAssumeMayorJson(name: String, perksJson: List): Mayor? { - val mayor = getMayorFromName(name) - if (mayor == null) { - ErrorManager.logErrorStateWithData( - "Unknown mayor found", - "mayor name not in Mayor enum", - "name" to name, - "perksJson" to perksJson, - betaOnly = true, - ) - return null - } - - val perks = perksJson.mapNotNull { perkJson -> - val perk = Perk.entries.firstOrNull { it.perkName == perkJson.renameIfFoxyExtraEventPerkFound() } - perk?.also { - it.description = perkJson.description - } - } - - mayor.addPerks(perks) - return mayor - } - - fun Mayor.addPerks(perks: List) { - perks.forEach { it.isActive = false } - activePerks.forEach { it.isActive = false } - activePerks.clear() - for (perk in perks.filter { perks.contains(it) }) { - perk.isActive = true - activePerks.add(perk) - } - } - - private fun MayorPerk.renameIfFoxyExtraEventPerkFound(): String { - val foxyExtraEventPairs = mapOf( - "Spooky Festival" to "Extra Event (Spooky)", - "Mining Fiesta" to "Extra Event (Mining)", - "Fishing Festival" to "Extra Event (Fishing)", - ) - - return foxyExtraEventPattern.matchMatcher(this.description) { - foxyExtraEventPairs.entries.firstOrNull { it.key == group("event") }?.value - } ?: this.name - } - } -} - -enum class Perk(val perkName: String) { - // Aatrox - SLASHED_PRICING("SLASHED Pricing"), - SLAYER_XP_BUFF("Slayer XP Buff"), - PATHFINDER("Pathfinder"), - - // Cole - PROSPECTION("Prospection"), - MINING_XP_BUFF("Mining XP Buff"), - MINING_FIESTA("Mining Fiesta"), - MOLTEN_FORGE("Molten Forge"), - - // Diana - LUCKY("Lucky!"), - MYTHOLOGICAL_RITUAL("Mythological Ritual"), - PET_XP_BUFF("Pet XP Buff"), - SHARING_IS_CARING("Sharing is Caring"), - - // Diaz - SHOPPING_SPREE("Shopping Spree"), - VOLUME_TRADING("Volume Trading"), - STOCK_EXCHANGE("Stock Exchange"), - LONG_TERM_INVESTMENT("Long Term Investment"), - - // Finnegan - PELT_POCALYPSE("Pelt-pocalypse"), - GOATED("GOATed"), - BLOOMING_BUSINESS("Blooming Business"), - PEST_ERADICATOR("Pest Eradicator"), - - // Foxy - SWEET_BENEVOLENCE("Sweet Benevolence"), - A_TIME_FOR_GIVING("A Time for Giving"), - CHIVALROUS_CARNIVAL("Chivalrous Carnival"), - EXTRA_EVENT_MINING("Extra Event (Mining)"), - EXTRA_EVENT_FISHING("Extra Event (Fishing)"), - EXTRA_EVENT_SPOOKY("Extra Event (Spooky)"), - - // Marina - FISHING_XP_BUFF("Fishing XP Buff"), - LUCK_OF_THE_SEA("Luck of the Sea 2.0"), - FISHING_FESTIVAL("Fishing Festival"), - DOUBLE_TROUBLE("Double Trouble"), - - // Paul - MARAUDER("Marauder"), - EZPZ("EZPZ"), - BENEDICTION("Benediction"), - - // Scorpius - BRIBE("Bribe"), - DARKER_AUCTIONS("Darker Auctions"), - - // Jerry - PERKPOCALYPSE("Perkpocalypse"), - STATSPOCALYPSE("Statspocalypse"), - JERRYPOCALYPSE("Jerrypocalypse"), - - // Derpy - TURBO_MINIONS("TURBO MINIONS!!!"), - QUAD_TAXES("QUAD TAXES!!!"), - DOUBLE_MOBS_HP("DOUBLE MOBS HP!!!"), - MOAR_SKILLZ("MOAR SKILLZ!!!"), - ; - - var isActive = false - var description = "§cDescription failed to load from the API." - - override fun toString(): String = "$perkName: $description" - - companion object { - fun getPerkFromName(name: String): Perk? = entries.firstOrNull { it.perkName == name } - } -} diff --git a/src/main/java/at/hannibal2/skyhanni/features/event/diana/DianaProfitTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/event/diana/DianaProfitTracker.kt index cd9f48b62..c115f00db 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/event/diana/DianaProfitTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/event/diana/DianaProfitTracker.kt @@ -1,8 +1,8 @@ package at.hannibal2.skyhanni.features.event.diana import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.data.ElectionAPI.getElectionYear import at.hannibal2.skyhanni.data.ItemAddManager -import at.hannibal2.skyhanni.data.MayorAPI.getElectionYear import at.hannibal2.skyhanni.data.jsonobjects.repo.DianaDropsJson import at.hannibal2.skyhanni.events.GuiRenderEvent import at.hannibal2.skyhanni.events.ItemAddEvent diff --git a/src/main/java/at/hannibal2/skyhanni/features/event/diana/GriffinBurrowHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/event/diana/GriffinBurrowHelper.kt index 64b33c934..997ff7fd7 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/event/diana/GriffinBurrowHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/event/diana/GriffinBurrowHelper.kt @@ -3,10 +3,9 @@ package at.hannibal2.skyhanni.features.event.diana import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.api.event.HandleEvent import at.hannibal2.skyhanni.config.ConfigUpdaterMigrator +import at.hannibal2.skyhanni.data.ElectionCandidate import at.hannibal2.skyhanni.data.EntityMovementData import at.hannibal2.skyhanni.data.IslandType -import at.hannibal2.skyhanni.data.Mayor -import at.hannibal2.skyhanni.data.MayorAPI.currentMayor import at.hannibal2.skyhanni.events.BlockClickEvent import at.hannibal2.skyhanni.events.BurrowDetectEvent import at.hannibal2.skyhanni.events.BurrowDugEvent @@ -402,7 +401,7 @@ object GriffinBurrowHelper { } if (!isEnabled()) { - if (currentMayor != Mayor.DIANA) { + if (!ElectionCandidate.DIANA.isActive()) { ChatUtils.chatAndOpenConfig( "§cSelect Diana as mayor overwrite!", SkyHanniMod.feature.dev.debug::assumeMayor, diff --git a/src/main/java/at/hannibal2/skyhanni/features/event/diana/MythologicalCreatureTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/event/diana/MythologicalCreatureTracker.kt index 55e422cab..dbd46cd34 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/event/diana/MythologicalCreatureTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/event/diana/MythologicalCreatureTracker.kt @@ -1,7 +1,7 @@ package at.hannibal2.skyhanni.features.event.diana import at.hannibal2.skyhanni.SkyHanniMod -import at.hannibal2.skyhanni.data.MayorAPI.getElectionYear +import at.hannibal2.skyhanni.data.ElectionAPI.getElectionYear import at.hannibal2.skyhanni.events.ConfigLoadEvent import at.hannibal2.skyhanni.events.GuiRenderEvent import at.hannibal2.skyhanni.events.LorenzChatEvent diff --git a/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/elements/ScoreboardElementMayor.kt b/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/elements/ScoreboardElementMayor.kt index 2d5deaaa4..46f3bb48f 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/elements/ScoreboardElementMayor.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/gui/customscoreboard/elements/ScoreboardElementMayor.kt @@ -1,6 +1,6 @@ package at.hannibal2.skyhanni.features.gui.customscoreboard.elements -import at.hannibal2.skyhanni.data.MayorAPI +import at.hannibal2.skyhanni.data.ElectionAPI import at.hannibal2.skyhanni.features.gui.customscoreboard.CustomScoreboard.mayorConfig import at.hannibal2.skyhanni.features.rift.RiftAPI import at.hannibal2.skyhanni.utils.TimeUtils.format @@ -9,15 +9,17 @@ import at.hannibal2.skyhanni.utils.TimeUtils.format // set 1s timer object ScoreboardElementMayor : ScoreboardElement() { override fun getDisplay() = buildList { - val currentMayorName = MayorAPI.currentMayor?.mayorName?.let { MayorAPI.mayorNameWithColorCode(it) } ?: return@buildList + val currentMayorName = ElectionAPI.currentMayor?.mayorName?.let { + ElectionAPI.mayorNameWithColorCode(it) + } ?: return@buildList val timeTillNextMayor = if (mayorConfig.showTimeTillNextMayor) { - "§7 (§e${MayorAPI.nextMayorTimestamp.timeUntil().format(maxUnits = 2)}§7)" + "§7 (§e${ElectionAPI.nextMayorTimestamp.timeUntil().format(maxUnits = 2)}§7)" } else "" add(currentMayorName + timeTillNextMayor) if (mayorConfig.showMayorPerks) { - MayorAPI.currentMayor?.activePerks?.forEach { perk -> + ElectionAPI.currentMayor?.activePerks?.forEach { perk -> add(" §7- §e${perk.perkName}") } } @@ -32,21 +34,23 @@ object ScoreboardElementMayor : ScoreboardElement() { override fun showIsland() = !RiftAPI.inRift() private fun addMinister() = buildList { - val ministerName = MayorAPI.currentMinister?.mayorName?.let { MayorAPI.mayorNameWithColorCode(it) } ?: return@buildList + val ministerName = ElectionAPI.currentMinister?.mayorName?.let { + ElectionAPI.mayorNameWithColorCode(it) + } ?: return@buildList add(ministerName) if (mayorConfig.showMayorPerks) { - MayorAPI.currentMinister?.activePerks?.forEach { perk -> + ElectionAPI.currentMinister?.activePerks?.forEach { perk -> add(" §7- §e${perk.perkName}") } } } private fun addJerryMayor() = buildList { - val jerryExtraMayor = MayorAPI.jerryExtraMayor + val jerryExtraMayor = ElectionAPI.jerryExtraMayor val extraMayor = jerryExtraMayor.first ?: return@buildList - val extraMayorName = MayorAPI.mayorNameWithColorCode(extraMayor.mayorName) + val extraMayorName = ElectionAPI.mayorNameWithColorCode(extraMayor.mayorName) val extraTimeTillNextMayor = if (mayorConfig.showTimeTillNextMayor) { " §7(§6${jerryExtraMayor.second.timeUntil().format(maxUnits = 2)}§7)" } else "" diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/MinisterInCalendar.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/MinisterInCalendar.kt index 892951c0f..054fed433 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/MinisterInCalendar.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/MinisterInCalendar.kt @@ -1,8 +1,8 @@ package at.hannibal2.skyhanni.features.inventory import at.hannibal2.skyhanni.SkyHanniMod -import at.hannibal2.skyhanni.data.Mayor -import at.hannibal2.skyhanni.data.MayorAPI +import at.hannibal2.skyhanni.data.ElectionAPI +import at.hannibal2.skyhanni.data.ElectionCandidate import at.hannibal2.skyhanni.events.InventoryCloseEvent import at.hannibal2.skyhanni.events.InventoryOpenEvent import at.hannibal2.skyhanni.events.render.gui.ReplaceItemEvent @@ -41,11 +41,11 @@ object MinisterInCalendar { @SubscribeEvent fun onInventoryOpen(event: InventoryOpenEvent) { if (!isEnabled()) return - if (!MayorAPI.calendarGuiPattern.matches(InventoryUtils.openInventoryName())) return - val minister = MayorAPI.currentMinister ?: return + if (!ElectionAPI.calendarGuiPattern.matches(InventoryUtils.openInventoryName())) return + val minister = ElectionAPI.currentMinister ?: return val itemStack = "${minister.name}_MAYOR_MONSTER".asInternalName().getItemStack() - val ministerColor = MayorAPI.mayorNameToColorCode(minister.mayorName) + val ministerColor = ElectionAPI.mayorNameToColorCode(minister.mayorName) ministerItemStack = changeItem(ministerColor, minister, itemStack) } @@ -53,7 +53,7 @@ object MinisterInCalendar { @SubscribeEvent fun onInventoryClose(event: InventoryCloseEvent) { if (!isEnabled()) return - if (!MayorAPI.calendarGuiPattern.matches(InventoryUtils.openInventoryName())) return + if (!ElectionAPI.calendarGuiPattern.matches(InventoryUtils.openInventoryName())) return ministerItemStack = null } @@ -61,13 +61,13 @@ object MinisterInCalendar { fun replaceItem(event: ReplaceItemEvent) { if (!isEnabled()) return if (event.inventory !is ContainerLocalMenu || event.slot != MINISTER_SLOT) return - if (!MayorAPI.calendarGuiPattern.matches(InventoryUtils.openInventoryName())) return + if (!ElectionAPI.calendarGuiPattern.matches(InventoryUtils.openInventoryName())) return event.replace(ministerItemStack ?: return) } private fun changeItem( ministerColor: String, - minister: Mayor, + minister: ElectionCandidate, item: ItemStack, ): ItemStack? { val ministerDisplayName = "${ministerColor}Minister ${minister.mayorName}" diff --git a/versions/1.8.9/detekt/baseline.xml b/versions/1.8.9/detekt/baseline.xml index 6665e0399..fb620c666 100644 --- a/versions/1.8.9/detekt/baseline.xml +++ b/versions/1.8.9/detekt/baseline.xml @@ -30,9 +30,9 @@ CyclomaticComplexMethod:VampireSlayerFeatures.kt$VampireSlayerFeatures$private fun EntityOtherPlayerMP.process() CyclomaticComplexMethod:VisualWordGui.kt$VisualWordGui$override fun drawScreen(unusedX: Int, unusedY: Int, partialTicks: Float) InjectDispatcher:ClipboardUtils.kt$ClipboardUtils$IO + InjectDispatcher:ElectionAPI.kt$ElectionAPI$IO InjectDispatcher:GardenNextJacobContest.kt$GardenNextJacobContest$IO InjectDispatcher:HypixelBazaarFetcher.kt$HypixelBazaarFetcher$IO - InjectDispatcher:MayorAPI.kt$MayorAPI$IO LongMethod:CopyNearbyEntitiesCommand.kt$CopyNearbyEntitiesCommand$fun command(args: Array<String>) LongMethod:CropMoneyDisplay.kt$CropMoneyDisplay$private fun drawDisplay(): List<List<Any>> LongMethod:GhostCounter.kt$GhostCounter$private fun drawDisplay() -- cgit