diff options
| author | CalMWolfs <94038482+CalMWolfs@users.noreply.github.com> | 2023-10-21 22:56:53 +1100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-10-21 13:56:53 +0200 |
| commit | 526365859a27d54b7ea5c07c08b301650c15ea0e (patch) | |
| tree | ddf772f564d85caf3dbe73c66c032affdf69281f /src/main/java/at/hannibal2/skyhanni/features/nether | |
| parent | a98927303854058ad2d7a0d8bb88265c54139614 (diff) | |
| download | skyhanni-526365859a27d54b7ea5c07c08b301650c15ea0e.tar.gz skyhanni-526365859a27d54b7ea5c07c08b301650c15ea0e.tar.bz2 skyhanni-526365859a27d54b7ea5c07c08b301650c15ea0e.zip | |
Backend: Serialise all constants and add repo error messages and status (#605)
Backend: Serialise all constants and add repo error messages and status #605
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/features/nether')
5 files changed, 63 insertions, 64 deletions
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 9202be686..7e9690a2e 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,6 +10,7 @@ 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.miniboss.DailyMiniBossHelper import at.hannibal2.skyhanni.utils.KeyboardManager.isKeyHeld import at.hannibal2.skyhanni.utils.LorenzUtils @@ -17,7 +18,7 @@ import at.hannibal2.skyhanni.utils.LorenzUtils.addAsSingletonList import at.hannibal2.skyhanni.utils.LorenzVec import at.hannibal2.skyhanni.utils.RenderUtils.renderStringsAndItems import at.hannibal2.skyhanni.utils.TabListData -import com.google.gson.JsonObject +import at.hannibal2.skyhanni.utils.jsonobjects.CrimsonIsleReputationJson import net.minecraftforge.fml.common.eventhandler.EventPriority import net.minecraftforge.fml.common.eventhandler.SubscribeEvent @@ -28,7 +29,6 @@ class CrimsonIsleReputationHelper(skyHanniMod: SkyHanniMod) { val miniBossHelper = DailyMiniBossHelper(this) val kuudraBossHelper = DailyKuudraBossHelper(this) - var repoData: JsonObject? = null var factionType = FactionType.NONE private var display = emptyList<List<Any>>() @@ -42,21 +42,24 @@ class CrimsonIsleReputationHelper(skyHanniMod: SkyHanniMod) { @SubscribeEvent fun onRepoReload(event: RepositoryReloadEvent) { - repoData = event.getConstant("CrimsonIsleReputation") + val data = event.getConstant<CrimsonIsleReputationJson>("CrimsonIsleReputation") + miniBossHelper.onRepoReload(data.MINIBOSS) + kuudraBossHelper.onRepoReload(data.KUUDRA) + + QuestLoader.quests.clear() + QuestLoader.loadQuests(data.FISHING, "FISHING") + QuestLoader.loadQuests(data.RESCUE, "RESCUE") + QuestLoader.loadQuests(data.FETCH, "FETCH") + QuestLoader.loadQuests(data.DOJO, "DOJO") - tryLoadConfig() update() } @SubscribeEvent fun onConfigLoad(event: ConfigLoadEvent) { - tryLoadConfig() - } - - private fun tryLoadConfig() { ProfileStorageData.profileSpecific?.crimsonIsle?.let { - miniBossHelper.load(it) - kuudraBossHelper.load(it) + miniBossHelper.loadData(it) + kuudraBossHelper.loadData(it) questHelper.load(it) } } @@ -150,14 +153,9 @@ class CrimsonIsleReputationHelper(skyHanniMod: SkyHanniMod) { update() } - fun readLocationData(data: JsonObject): LorenzVec? { - val locationData = data["location"]?.asJsonArray ?: return null - if (locationData.size() == 0) return null - - val x = locationData[0].asDouble - 1 - val y = locationData[1].asDouble - val z = locationData[2].asDouble - 1 - return LorenzVec(x, y, z) + fun readLocationData(locations: List<Double>): LorenzVec? { + if (locations.isEmpty()) return null + return LorenzVec(locations[0] - 1, locations[1], locations[2] - 1) } fun showLocations() = when (config.showLocation) { 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 index 34ba68f38..39e888ade 100644 --- 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 @@ -13,6 +13,7 @@ import at.hannibal2.skyhanni.utils.LorenzUtils.addAsSingletonList import at.hannibal2.skyhanni.utils.LorenzVec import at.hannibal2.skyhanni.utils.NEUItems import at.hannibal2.skyhanni.utils.RenderUtils.drawDynamicText +import at.hannibal2.skyhanni.utils.jsonobjects.CrimsonIsleReputationJson.ReputationQuest import net.minecraftforge.fml.common.eventhandler.SubscribeEvent class DailyKuudraBossHelper(private val reputationHelper: CrimsonIsleReputationHelper) { @@ -98,26 +99,23 @@ class DailyKuudraBossHelper(private val reputationHelper: CrimsonIsleReputationH .forEach { storage.kuudraTiersDone.add(it.name) } } - fun load(storage: Storage.ProfileSpecific.CrimsonIsleStorage) { + fun onRepoReload(data: Map<String, ReputationQuest>) { kuudraTiers.clear() - - //Repo - val repoData = reputationHelper.repoData ?: return - val jsonElement = repoData["KUUDRA"] var tier = 1 - for ((displayName, extraData) in jsonElement.asJsonObject.entrySet()) { - val data = extraData.asJsonObject - val displayItem = data["item"]?.asString - val location = reputationHelper.readLocationData(data) - kuudraTiers.add(KuudraTier(displayName, displayItem, location, tier)) + 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++ } + } - //Config + fun loadData(storage: Storage.ProfileSpecific.CrimsonIsleStorage) { + if (kuudraTiers.isEmpty()) return for (name in storage.kuudraTiersDone) { getByDisplayName(name)!!.doneToday = true } 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 846cc12e1..37b26dce3 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 @@ -312,9 +312,7 @@ class DailyQuestHelper(val reputationHelper: CrimsonIsleReputationHelper) { fun load(storage: Storage.ProfileSpecific.CrimsonIsleStorage) { reset() - questLoader.loadConfig(storage) - } fun saveConfig(storage: Storage.ProfileSpecific.CrimsonIsleStorage) { diff --git a/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/dailyquest/QuestLoader.kt b/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/dailyquest/QuestLoader.kt index b7c4c2cbf..a35510196 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/dailyquest/QuestLoader.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/dailyquest/QuestLoader.kt @@ -15,9 +15,19 @@ import at.hannibal2.skyhanni.features.nether.reputationhelper.dailyquest.quest.U import at.hannibal2.skyhanni.utils.ItemUtils.getLore import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.TabListData +import at.hannibal2.skyhanni.utils.jsonobjects.CrimsonIsleReputationJson.ReputationQuest class QuestLoader(private val dailyQuestHelper: DailyQuestHelper) { + companion object { + val quests = mutableMapOf<String, Pair<String,ReputationQuest>>() + fun loadQuests(data: Map<String, ReputationQuest>, questType: String) { + for ((questName, questInfo) in data) { + quests[questName] = Pair(questType, questInfo) + } + } + } + fun loadFromTabList() { var i = -1 for (line in TabListData.getTabList()) { @@ -83,29 +93,26 @@ class QuestLoader(private val dailyQuestHelper: DailyQuestHelper) { return KuudraQuest(kuudraTier, state) } } + var questName = name + var dojoGoal = "" - val repoData = dailyQuestHelper.reputationHelper.repoData ?: return UnknownQuest(name) - for (entry in repoData.entrySet()) { - val categoryName = entry.key - val category = entry.value.asJsonObject - for ((entryName, extraData) in category.entrySet()) { - val data = extraData.asJsonObject - val displayItem = data["item"]?.asString - val location = dailyQuestHelper.reputationHelper.readLocationData(data) - if (name.startsWith("$entryName Rank ")) { - val split = name.split(" Rank ") - val dojoName = split[0] - val dojoRankGoal = split[1] - return DojoQuest(dojoName, location, displayItem, dojoRankGoal, state) - } + if (name.contains(" Rank ")) { + val split = name.split(" Rank ") + questName = split[0] + dojoGoal = split[1] + } - if (name == entryName) { - when (categoryName) { - "FISHING" -> return TrophyFishQuest(name, location, displayItem, state, needAmount) - "RESCUE" -> return RescueMissionQuest(displayItem, location, state) - "FETCH" -> return FetchQuest(name, location, displayItem, state, needAmount) - } - } + if (questName in quests) { + val questInfo = quests[questName] ?: return UnknownQuest(name) + val locationInfo = questInfo.second.location + val location = dailyQuestHelper.reputationHelper.readLocationData(locationInfo) + val displayItem = questInfo.second.item + + when (questInfo.first) { + "FISHING" -> return TrophyFishQuest(name, location, displayItem, state, needAmount) + "RESCUE" -> return RescueMissionQuest(displayItem, location, state) + "FETCH" -> return FetchQuest(name, location, displayItem, state, needAmount) + "DOJO" -> return DojoQuest(questName, location, displayItem, dojoGoal, state) } } LorenzUtils.chat("§c[SkyHanni] Unknown Crimson Isle quest: '$name'") diff --git a/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/miniboss/DailyMiniBossHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/miniboss/DailyMiniBossHelper.kt index 1e1bf98e7..10eae5816 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/miniboss/DailyMiniBossHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/nether/reputationhelper/miniboss/DailyMiniBossHelper.kt @@ -16,6 +16,7 @@ import at.hannibal2.skyhanni.utils.LorenzUtils.addAsSingletonList import at.hannibal2.skyhanni.utils.NEUItems import at.hannibal2.skyhanni.utils.RenderUtils.drawDynamicText import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher +import at.hannibal2.skyhanni.utils.jsonobjects.CrimsonIsleReputationJson.ReputationQuest import net.minecraftforge.fml.common.eventhandler.SubscribeEvent class DailyMiniBossHelper(private val reputationHelper: CrimsonIsleReputationHelper) { @@ -104,21 +105,18 @@ class DailyMiniBossHelper(private val reputationHelper: CrimsonIsleReputationHel .forEach { storage.miniBossesDoneToday.add(it.displayName) } } - fun load(storage: Storage.ProfileSpecific.CrimsonIsleStorage) { + fun onRepoReload(data: Map<String, ReputationQuest>) { miniBosses.clear() - - //Repo - val repoData = reputationHelper.repoData ?: return - val jsonElement = repoData["MINIBOSS"] - for ((displayName, extraData) in jsonElement.asJsonObject.entrySet()) { - val data = extraData.asJsonObject - val displayItem = data["item"]?.asString - val patterns = " *§r§6§l${displayName.uppercase()} DOWN!".toPattern() - val location = reputationHelper.readLocationData(data) - miniBosses.add(CrimsonMiniBoss(displayName, displayItem, location, patterns)) + for ((displayName, quest) in data) { + val displayItem = quest.item + val pattern = " *§r§6§l${displayName.uppercase()} DOWN!".toPattern() + val location = reputationHelper.readLocationData(quest.location) + miniBosses.add(CrimsonMiniBoss(displayName, displayItem, location, pattern)) } + } - //Config + fun loadData(storage: Storage.ProfileSpecific.CrimsonIsleStorage) { + if (miniBosses.isEmpty()) return for (name in storage.miniBossesDoneToday) { getByDisplayName(name)!!.doneToday = true } |
