From b51b07e0d308289a050356e0106055eed38656b3 Mon Sep 17 00:00:00 2001 From: Empa <42304516+ItsEmpa@users.noreply.github.com> Date: Wed, 3 Apr 2024 21:25:54 +0200 Subject: Backend: KuudraAPI (#1209) Co-authored-by: Cal Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com> --- src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt | 4 +- .../skyhanni/events/KuudraCompleteEvent.kt | 3 + .../hannibal2/skyhanni/events/KuudraEnterEvent.kt | 3 + .../skyhanni/features/nether/KuudraAPI.kt | 67 +++++++++++ .../CrimsonIsleReputationHelper.kt | 2 +- .../dailykuudra/DailyKuudraBossHelper.kt | 133 --------------------- .../reputationhelper/dailykuudra/KuudraTier.kt | 15 --- .../dailyquest/DailyQuestHelper.kt | 4 +- .../dailyquest/quest/KuudraQuest.kt | 4 +- .../kuudra/DailyKuudraBossHelper.kt | 117 ++++++++++++++++++ .../at/hannibal2/skyhanni/utils/LorenzUtils.kt | 3 +- 11 files changed, 200 insertions(+), 155 deletions(-) create mode 100644 src/main/java/at/hannibal2/skyhanni/events/KuudraCompleteEvent.kt create mode 100644 src/main/java/at/hannibal2/skyhanni/events/KuudraEnterEvent.kt create mode 100644 src/main/java/at/hannibal2/skyhanni/features/nether/KuudraAPI.kt delete mode 100644 src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/dailykuudra/DailyKuudraBossHelper.kt delete mode 100644 src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/dailykuudra/KuudraTier.kt create mode 100644 src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/kuudra/DailyKuudraBossHelper.kt (limited to 'src') diff --git a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt index b98feae29..4a02294ca 100644 --- a/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt +++ b/src/main/java/at/hannibal2/skyhanni/SkyHanniMod.kt @@ -322,6 +322,7 @@ import at.hannibal2.skyhanni.features.misc.trevor.TrevorSolver import at.hannibal2.skyhanni.features.misc.trevor.TrevorTracker import at.hannibal2.skyhanni.features.misc.update.UpdateManager import at.hannibal2.skyhanni.features.misc.visualwords.ModifyVisualWords +import at.hannibal2.skyhanni.features.nether.KuudraAPI import at.hannibal2.skyhanni.features.nether.PabloHelper import at.hannibal2.skyhanni.features.nether.SulphurSkitterBox import at.hannibal2.skyhanni.features.nether.VolcanoExplosivityDisplay @@ -490,7 +491,6 @@ class SkyHanniMod { loadModule(TrackerManager) loadModule(ScoreboardPattern) loadModule(UtilsPatterns) - loadModule(PetAPI) loadModule(BossbarData) loadModule(EntityUtils) loadModule(ChatUtils) @@ -520,6 +520,8 @@ class SkyHanniMod { loadModule(MayorAPI) loadModule(SkillAPI) loadModule(VisitorAPI) + loadModule(KuudraAPI) + loadModule(PetAPI) loadModule(IsFishingDetection) loadModule(LorenzUtils) loadModule(NEUItems) diff --git a/src/main/java/at/hannibal2/skyhanni/events/KuudraCompleteEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/KuudraCompleteEvent.kt new file mode 100644 index 000000000..98b207f49 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/events/KuudraCompleteEvent.kt @@ -0,0 +1,3 @@ +package at.hannibal2.skyhanni.events + +class KuudraCompleteEvent(val kuudraTier: Int) : LorenzEvent() diff --git a/src/main/java/at/hannibal2/skyhanni/events/KuudraEnterEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/KuudraEnterEvent.kt new file mode 100644 index 000000000..8482058a7 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/events/KuudraEnterEvent.kt @@ -0,0 +1,3 @@ +package at.hannibal2.skyhanni.events + +class KuudraEnterEvent(val kuudraTier: Int) : LorenzEvent() diff --git a/src/main/java/at/hannibal2/skyhanni/features/nether/KuudraAPI.kt b/src/main/java/at/hannibal2/skyhanni/features/nether/KuudraAPI.kt new file mode 100644 index 000000000..8bbaa35c9 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/features/nether/KuudraAPI.kt @@ -0,0 +1,67 @@ +package at.hannibal2.skyhanni.features.nether + +import at.hannibal2.skyhanni.data.ScoreboardData +import at.hannibal2.skyhanni.events.KuudraCompleteEvent +import at.hannibal2.skyhanni.events.KuudraEnterEvent +import at.hannibal2.skyhanni.events.LorenzChatEvent +import at.hannibal2.skyhanni.events.LorenzTickEvent +import at.hannibal2.skyhanni.events.LorenzWorldChangeEvent +import at.hannibal2.skyhanni.utils.LorenzVec +import at.hannibal2.skyhanni.utils.NEUInternalName +import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher +import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent + +object KuudraAPI { + + private val patternGroup = RepoPattern.group("data.kuudra") + + private val tierPattern by patternGroup.pattern( + "scoreboard.tier", + " §7⏣ §cKuudra's Hollow §8\\(T(?.*)\\)" + ) + private val completePattern by patternGroup.pattern( + "chat.complete", + "§.\\s*(?:§.)*KUUDRA DOWN!" + ) + + var kuudraTier: Int? = null + fun inKuudra() = kuudraTier != null + + @SubscribeEvent + fun onTick(event: LorenzTickEvent) { + if (kuudraTier == null) { + for (line in ScoreboardData.sidebarLinesFormatted) { + tierPattern.matchMatcher(line) { + val tier = group("tier").toInt() + kuudraTier = tier + KuudraEnterEvent(tier).postAndCatch() + } + } + } + } + + @SubscribeEvent + fun onWorldChange(event: LorenzWorldChangeEvent) { + kuudraTier = null + } + + @SubscribeEvent + fun onChat(event: LorenzChatEvent) { + val message = event.message + completePattern.matchMatcher(message) { + val tier = kuudraTier ?: return + KuudraCompleteEvent(tier).postAndCatch() + } + } + + class KuudraTier( + val name: String, + val displayItem: NEUInternalName, + val location: LorenzVec?, + val tierNumber: Int, + var doneToday: Boolean = false, + ) { + fun getDisplayName() = "Tier $tierNumber ($name)" + } +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/CrimsonIsleReputationHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/CrimsonIsleReputationHelper.kt index 9d969fae2..73b45aa94 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/CrimsonIsleReputationHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/CrimsonIsleReputationHelper.kt @@ -10,9 +10,9 @@ import at.hannibal2.skyhanni.events.ConfigLoadEvent import at.hannibal2.skyhanni.events.GuiRenderEvent import at.hannibal2.skyhanni.events.LorenzTickEvent import at.hannibal2.skyhanni.events.RepositoryReloadEvent -import at.hannibal2.skyhanni.features.nether.reputationhelper.dailykuudra.DailyKuudraBossHelper import at.hannibal2.skyhanni.features.nether.reputationhelper.dailyquest.DailyQuestHelper import at.hannibal2.skyhanni.features.nether.reputationhelper.dailyquest.QuestLoader +import at.hannibal2.skyhanni.features.nether.reputationhelper.kuudra.DailyKuudraBossHelper import at.hannibal2.skyhanni.features.nether.reputationhelper.miniboss.DailyMiniBossHelper import at.hannibal2.skyhanni.utils.ChatUtils import at.hannibal2.skyhanni.utils.CollectionUtils.addAsSingletonList diff --git a/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/dailykuudra/DailyKuudraBossHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/dailykuudra/DailyKuudraBossHelper.kt deleted file mode 100644 index 5c7208c62..000000000 --- a/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/dailykuudra/DailyKuudraBossHelper.kt +++ /dev/null @@ -1,133 +0,0 @@ -package at.hannibal2.skyhanni.features.nether.reputationhelper.dailykuudra - -import at.hannibal2.skyhanni.SkyHanniMod -import at.hannibal2.skyhanni.config.storage.ProfileSpecificStorage -import at.hannibal2.skyhanni.data.IslandType -import at.hannibal2.skyhanni.data.ScoreboardData -import at.hannibal2.skyhanni.data.jsonobjects.repo.CrimsonIsleReputationJson.ReputationQuest -import at.hannibal2.skyhanni.events.LorenzChatEvent -import at.hannibal2.skyhanni.events.LorenzRenderWorldEvent -import at.hannibal2.skyhanni.features.nether.reputationhelper.CrimsonIsleReputationHelper -import at.hannibal2.skyhanni.test.GriffinUtils.drawWaypointFilled -import at.hannibal2.skyhanni.utils.ChatUtils -import at.hannibal2.skyhanni.utils.CollectionUtils.addAsSingletonList -import at.hannibal2.skyhanni.utils.LorenzColor -import at.hannibal2.skyhanni.utils.LorenzUtils -import at.hannibal2.skyhanni.utils.LorenzUtils.isInIsland -import at.hannibal2.skyhanni.utils.LorenzVec -import at.hannibal2.skyhanni.utils.NEUItems.getItemStack -import at.hannibal2.skyhanni.utils.RenderUtils.drawDynamicText -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent - -class DailyKuudraBossHelper(private val reputationHelper: CrimsonIsleReputationHelper) { - - val kuudraTiers = mutableListOf() - - private var kuudraLocation: LorenzVec? = null - private var allKuudraDone = true - - private val config get() = SkyHanniMod.feature.crimsonIsle.reputationHelper - - @SubscribeEvent - fun onRenderWorld(event: LorenzRenderWorldEvent) { - if (!IslandType.CRIMSON_ISLE.isInIsland()) return - if (!config.enabled) return - if (!reputationHelper.showLocations()) return - if (allKuudraDone) return - - kuudraLocation?.let { - event.drawWaypointFilled(it, LorenzColor.WHITE.toColor()) - event.drawDynamicText(it, "Kuudra", 1.5) - } - } - - @SubscribeEvent - fun onChat(event: LorenzChatEvent) { - if (!LorenzUtils.inKuudraFight) return - if (!config.enabled) return - - val message = event.message - if (!message.contains("KUUDRA DOWN!") || message.contains(":")) return - - for (line in ScoreboardData.sidebarLines) { - if (line.contains("Kuudra's") && line.contains("Hollow") && line.contains("(")) { - val tier = line.substringAfter("(T").substring(0, 1).toInt() - val kuudraTier = getByTier(tier)!! - finished(kuudraTier) - return - } - } - } - - private fun finished(kuudraTier: KuudraTier) { - ChatUtils.debug("Detected kuudra tier done: $kuudraTier") - reputationHelper.questHelper.finishKuudra(kuudraTier) - kuudraTier.doneToday = true - updateAllKuudraDone() - reputationHelper.update() - } - - fun render(display: MutableList>) { - val done = kuudraTiers.count { it.doneToday } - display.addAsSingletonList("") - display.addAsSingletonList("§7Daily Kuudra (§e$done§8/§e5 killed§7)") - if (done < 5) { - for (tier in kuudraTiers) { - if (config.hideComplete.get() && tier.doneToday) continue - val result = if (tier.doneToday) "§aDone" else "§bTodo" - val displayName = tier.getDisplayName() - val displayItem = tier.displayItem - val lineList = mutableListOf() - lineList.add(" ") - lineList.add(displayItem.getItemStack()) - lineList.add("$displayName: $result") - display.add(lineList) - } - } - } - - fun reset() { - for (miniBoss in kuudraTiers) { - miniBoss.doneToday = false - } - updateAllKuudraDone() - } - - fun saveConfig(storage: ProfileSpecificStorage.CrimsonIsleStorage) { - storage.kuudraTiersDone.clear() - - kuudraTiers.filter { it.doneToday } - .forEach { storage.kuudraTiersDone.add(it.name) } - } - - fun onRepoReload(data: Map) { - kuudraTiers.clear() - var tier = 1 - for ((displayName, kuudraTier) in data) { - val displayItem = kuudraTier.item - val location = reputationHelper.readLocationData(kuudraTier.location) - if (location != null) { - kuudraLocation = location - } - kuudraTiers.add(KuudraTier(displayName, displayItem, location, tier)) - - tier++ - } - } - - fun loadData(storage: ProfileSpecificStorage.CrimsonIsleStorage) { - if (kuudraTiers.isEmpty()) return - for (name in storage.kuudraTiersDone) { - getByDisplayName(name)!!.doneToday = true - } - updateAllKuudraDone() - } - - private fun updateAllKuudraDone() { - allKuudraDone = !kuudraTiers.any { !it.doneToday } - } - - private fun getByDisplayName(name: String) = kuudraTiers.firstOrNull { it.name == name } - - private fun getByTier(number: Int) = kuudraTiers.firstOrNull { it.tierNumber == number } -} diff --git a/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/dailykuudra/KuudraTier.kt b/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/dailykuudra/KuudraTier.kt deleted file mode 100644 index 85889f94b..000000000 --- a/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/dailykuudra/KuudraTier.kt +++ /dev/null @@ -1,15 +0,0 @@ -package at.hannibal2.skyhanni.features.nether.reputationhelper.dailykuudra - -import at.hannibal2.skyhanni.utils.LorenzVec -import at.hannibal2.skyhanni.utils.NEUInternalName - -class KuudraTier( - val name: String, - val displayItem: NEUInternalName, - val location: LorenzVec?, - val tierNumber: Int, - var doneToday: Boolean = false, -) { - - fun getDisplayName() = "Tier $tierNumber ($name)" -} diff --git a/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/dailyquest/DailyQuestHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/dailyquest/DailyQuestHelper.kt index 580fdbc56..ae6850e78 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/dailyquest/DailyQuestHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/dailyquest/DailyQuestHelper.kt @@ -10,9 +10,9 @@ import at.hannibal2.skyhanni.events.LorenzChatEvent import at.hannibal2.skyhanni.events.LorenzRenderWorldEvent import at.hannibal2.skyhanni.events.LorenzTickEvent import at.hannibal2.skyhanni.events.TabListUpdateEvent +import at.hannibal2.skyhanni.features.nether.KuudraAPI import at.hannibal2.skyhanni.features.nether.reputationhelper.CrimsonIsleReputationHelper import at.hannibal2.skyhanni.features.nether.reputationhelper.FactionType -import at.hannibal2.skyhanni.features.nether.reputationhelper.dailykuudra.KuudraTier import at.hannibal2.skyhanni.features.nether.reputationhelper.dailyquest.quest.DojoQuest import at.hannibal2.skyhanni.features.nether.reputationhelper.dailyquest.quest.FetchQuest import at.hannibal2.skyhanni.features.nether.reputationhelper.dailyquest.quest.KuudraQuest @@ -263,7 +263,7 @@ class DailyQuestHelper(val reputationHelper: CrimsonIsleReputationHelper) { } } - fun finishKuudra(kuudraTier: KuudraTier) { + fun finishKuudra(kuudraTier: KuudraAPI.KuudraTier) { val kuudraQuest = getQuest() ?: return // TODO make inline method for this two lines if (kuudraQuest.kuudraTier == kuudraTier && kuudraQuest.state == QuestState.ACCEPTED) { diff --git a/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/dailyquest/quest/KuudraQuest.kt b/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/dailyquest/quest/KuudraQuest.kt index 096b46267..aadb9f110 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/dailyquest/quest/KuudraQuest.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/dailyquest/quest/KuudraQuest.kt @@ -1,6 +1,6 @@ package at.hannibal2.skyhanni.features.nether.reputationhelper.dailyquest.quest -import at.hannibal2.skyhanni.features.nether.reputationhelper.dailykuudra.KuudraTier +import at.hannibal2.skyhanni.features.nether.KuudraAPI.KuudraTier class KuudraQuest(val kuudraTier: KuudraTier, state: QuestState) : Quest( @@ -10,4 +10,4 @@ class KuudraQuest(val kuudraTier: KuudraTier, state: QuestState) : "Kill Kuudra ${kuudraTier.name} Tier", state, displayName = kuudraTier.getDisplayName() - ) \ No newline at end of file + ) diff --git a/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/kuudra/DailyKuudraBossHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/kuudra/DailyKuudraBossHelper.kt new file mode 100644 index 000000000..265f59471 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/kuudra/DailyKuudraBossHelper.kt @@ -0,0 +1,117 @@ +package at.hannibal2.skyhanni.features.nether.reputationhelper.kuudra + +import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.config.storage.ProfileSpecificStorage +import at.hannibal2.skyhanni.data.IslandType +import at.hannibal2.skyhanni.data.jsonobjects.repo.CrimsonIsleReputationJson.ReputationQuest +import at.hannibal2.skyhanni.events.KuudraCompleteEvent +import at.hannibal2.skyhanni.events.LorenzRenderWorldEvent +import at.hannibal2.skyhanni.features.nether.KuudraAPI +import at.hannibal2.skyhanni.features.nether.reputationhelper.CrimsonIsleReputationHelper +import at.hannibal2.skyhanni.test.GriffinUtils.drawWaypointFilled +import at.hannibal2.skyhanni.utils.ChatUtils +import at.hannibal2.skyhanni.utils.CollectionUtils.addAsSingletonList +import at.hannibal2.skyhanni.utils.LorenzColor +import at.hannibal2.skyhanni.utils.LorenzUtils.isInIsland +import at.hannibal2.skyhanni.utils.LorenzVec +import at.hannibal2.skyhanni.utils.NEUItems.getItemStack +import at.hannibal2.skyhanni.utils.RenderUtils.drawDynamicText +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent + +class DailyKuudraBossHelper(private val reputationHelper: CrimsonIsleReputationHelper) { + + val kuudraTiers = mutableListOf() + + private var kuudraLocation: LorenzVec? = null + private var allKuudraDone = true + + private val config get() = SkyHanniMod.feature.crimsonIsle.reputationHelper + + @SubscribeEvent + fun onRenderWorld(event: LorenzRenderWorldEvent) { + if (!IslandType.CRIMSON_ISLE.isInIsland()) return + if (!config.enabled) return + if (!reputationHelper.showLocations()) return + if (allKuudraDone) return + + kuudraLocation?.let { + event.drawWaypointFilled(it, LorenzColor.WHITE.toColor()) + event.drawDynamicText(it, "Kuudra", 1.5) + } + } + + @SubscribeEvent + fun onKuudraDone(event: KuudraCompleteEvent) { + val tier = event.kuudraTier + val kuudraTier = getByTier(tier) ?: return + ChatUtils.debug("Detected kuudra tier done: ${kuudraTier.getDisplayName()}") + reputationHelper.questHelper.finishKuudra(kuudraTier) + kuudraTier.doneToday = true + updateAllKuudraDone() + reputationHelper.update() + } + + fun render(display: MutableList>) { + val done = kuudraTiers.count { it.doneToday } + display.addAsSingletonList("") + display.addAsSingletonList("§7Daily Kuudra (§e$done§8/§e5 killed§7)") + if (done < 5) { + for (tier in kuudraTiers) { + if (config.hideComplete.get() && tier.doneToday) continue + val result = if (tier.doneToday) "§aDone" else "§bTodo" + val displayName = tier.getDisplayName() + val displayItem = tier.displayItem + val lineList = mutableListOf() + lineList.add(" ") + lineList.add(displayItem.getItemStack()) + lineList.add("$displayName: $result") + display.add(lineList) + } + } + } + + fun reset() { + for (miniBoss in kuudraTiers) { + miniBoss.doneToday = false + } + updateAllKuudraDone() + } + + fun saveConfig(storage: ProfileSpecificStorage.CrimsonIsleStorage) { + storage.kuudraTiersDone.clear() + + kuudraTiers.filter { it.doneToday } + .forEach { storage.kuudraTiersDone.add(it.name) } + } + + fun onRepoReload(data: Map) { + kuudraTiers.clear() + var tier = 1 + for ((displayName, kuudraTier) in data) { + val displayItem = kuudraTier.item + val location = reputationHelper.readLocationData(kuudraTier.location) + if (location != null) { + kuudraLocation = location + } + kuudraTiers.add(KuudraAPI.KuudraTier(displayName, displayItem, location, tier)) + + tier++ + } + } + + fun loadData(storage: ProfileSpecificStorage.CrimsonIsleStorage) { + if (kuudraTiers.isEmpty()) return + for (name in storage.kuudraTiersDone) { + getByDisplayName(name)?.doneToday = true + } + updateAllKuudraDone() + } + + private fun updateAllKuudraDone() { + allKuudraDone = !kuudraTiers.any { !it.doneToday } + } + + private fun getByDisplayName(name: String) = kuudraTiers.firstOrNull { it.name == name } + + private fun getByTier(number: Int) = kuudraTiers.firstOrNull { it.tierNumber == number } +} diff --git a/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt index 048100f71..a9b72f72c 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/LorenzUtils.kt @@ -8,6 +8,7 @@ import at.hannibal2.skyhanni.data.TitleManager import at.hannibal2.skyhanni.events.GuiContainerEvent import at.hannibal2.skyhanni.features.dungeon.DungeonAPI import at.hannibal2.skyhanni.features.misc.visualwords.ModifyVisualWords +import at.hannibal2.skyhanni.features.nether.KuudraAPI import at.hannibal2.skyhanni.mixins.transformers.AccessorGuiEditSign import at.hannibal2.skyhanni.test.TestBingo import at.hannibal2.skyhanni.utils.ChatUtils.lastButtonClicked @@ -58,7 +59,7 @@ object LorenzUtils { val skyBlockArea get() = if (inSkyBlock) HypixelData.skyBlockArea else "?" - val inKuudraFight get() = IslandType.KUUDRA_ARENA.isInIsland() + val inKuudraFight get() = inSkyBlock && KuudraAPI.inKuudra() val noTradeMode get() = HypixelData.noTrade -- cgit