diff options
author | Empa <42304516+ItsEmpa@users.noreply.github.com> | 2024-04-03 21:25:54 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-03 21:25:54 +0200 |
commit | b51b07e0d308289a050356e0106055eed38656b3 (patch) | |
tree | 74eba9e116824f56482ac890494d81b954f0c69b /src/main/java | |
parent | ad5879d319b236ddec744978dfaebebf91135209 (diff) | |
download | skyhanni-b51b07e0d308289a050356e0106055eed38656b3.tar.gz skyhanni-b51b07e0d308289a050356e0106055eed38656b3.tar.bz2 skyhanni-b51b07e0d308289a050356e0106055eed38656b3.zip |
Backend: KuudraAPI (#1209)
Co-authored-by: Cal <cwolfson58@gmail.com>
Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com>
Diffstat (limited to 'src/main/java')
10 files changed, 93 insertions, 48 deletions
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(?<tier>.*)\\)" + ) + 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/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<KuudraQuest>() ?: 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/dailykuudra/DailyKuudraBossHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/kuudra/DailyKuudraBossHelper.kt index 5c7208c62..265f59471 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/dailykuudra/DailyKuudraBossHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/kuudra/DailyKuudraBossHelper.kt @@ -1,18 +1,17 @@ -package at.hannibal2.skyhanni.features.nether.reputationhelper.dailykuudra +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.ScoreboardData import at.hannibal2.skyhanni.data.jsonobjects.repo.CrimsonIsleReputationJson.ReputationQuest -import at.hannibal2.skyhanni.events.LorenzChatEvent +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 import at.hannibal2.skyhanni.utils.LorenzUtils.isInIsland import at.hannibal2.skyhanni.utils.LorenzVec import at.hannibal2.skyhanni.utils.NEUItems.getItemStack @@ -21,7 +20,7 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent class DailyKuudraBossHelper(private val reputationHelper: CrimsonIsleReputationHelper) { - val kuudraTiers = mutableListOf<KuudraTier>() + val kuudraTiers = mutableListOf<KuudraAPI.KuudraTier>() private var kuudraLocation: LorenzVec? = null private var allKuudraDone = true @@ -42,25 +41,10 @@ class DailyKuudraBossHelper(private val reputationHelper: CrimsonIsleReputationH } @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") + 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() @@ -109,7 +93,7 @@ class DailyKuudraBossHelper(private val reputationHelper: CrimsonIsleReputationH if (location != null) { kuudraLocation = location } - kuudraTiers.add(KuudraTier(displayName, displayItem, location, tier)) + kuudraTiers.add(KuudraAPI.KuudraTier(displayName, displayItem, location, tier)) tier++ } @@ -118,7 +102,7 @@ class DailyKuudraBossHelper(private val reputationHelper: CrimsonIsleReputationH fun loadData(storage: ProfileSpecificStorage.CrimsonIsleStorage) { if (kuudraTiers.isEmpty()) return for (name in storage.kuudraTiersDone) { - getByDisplayName(name)!!.doneToday = true + getByDisplayName(name)?.doneToday = true } updateAllKuudraDone() } 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 |