diff options
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/features')
24 files changed, 238 insertions, 273 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/features/chat/playerchat/PlayerChatFilter.kt b/src/main/java/at/hannibal2/skyhanni/features/chat/playerchat/PlayerChatFilter.kt index 6de251af5..e4db8ee3b 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/chat/playerchat/PlayerChatFilter.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/chat/playerchat/PlayerChatFilter.kt @@ -3,6 +3,7 @@ package at.hannibal2.skyhanni.features.chat.playerchat import at.hannibal2.skyhanni.events.RepositoryReloadEvent import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.MultiFilter +import at.hannibal2.skyhanni.utils.jsonobjects.PlayerChatFilterJson import net.minecraftforge.fml.common.eventhandler.SubscribeEvent class PlayerChatFilter { @@ -29,18 +30,16 @@ class PlayerChatFilter { var countCategories = 0 var countFilters = 0 - val data = event.getConstant("PlayerChatFilter") - for (category in data["filters"].asJsonArray) { - val jsonObject = category.asJsonObject - val description = jsonObject["description"].asString + val data = event.getConstant<PlayerChatFilterJson>("PlayerChatFilter") + for (category in data.filters) { + val description = category.description val filter = MultiFilter() - filter.load(jsonObject) + filter.load(category) filters[description] = filter countCategories++ countFilters += filter.count() } - LorenzUtils.debug("Loaded $countFilters filters in $countCategories categories from repo") } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/commands/tabcomplete/GetFromSacksTabComplete.kt b/src/main/java/at/hannibal2/skyhanni/features/commands/tabcomplete/GetFromSacksTabComplete.kt index 2c1c339dc..97a110508 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/commands/tabcomplete/GetFromSacksTabComplete.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/commands/tabcomplete/GetFromSacksTabComplete.kt @@ -4,7 +4,7 @@ import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.events.PacketEvent import at.hannibal2.skyhanni.events.RepositoryReloadEvent import at.hannibal2.skyhanni.utils.LorenzUtils -import at.hannibal2.skyhanni.utils.jsonobjects.SackListJson +import at.hannibal2.skyhanni.utils.jsonobjects.SacksJson import net.minecraft.network.play.client.C01PacketChatMessage import net.minecraftforge.fml.common.eventhandler.SubscribeEvent @@ -15,7 +15,7 @@ object GetFromSacksTabComplete { @SubscribeEvent fun onRepoReload(event: RepositoryReloadEvent) { - sackList = event.getConstant<SackListJson>("Sacks").sackList + sackList = event.getConstant<SacksJson>("Sacks").sackList } fun handleTabComplete(command: String): List<String>? { diff --git a/src/main/java/at/hannibal2/skyhanni/features/commands/tabcomplete/PlayerTabComplete.kt b/src/main/java/at/hannibal2/skyhanni/features/commands/tabcomplete/PlayerTabComplete.kt index 96bfeb83a..688d6f6b3 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/commands/tabcomplete/PlayerTabComplete.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/commands/tabcomplete/PlayerTabComplete.kt @@ -13,11 +13,12 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent object PlayerTabComplete { private val config get() = SkyHanniMod.feature.commands.tabComplete - private var vipVisitsJson: VipVisitsJson? = null + private var vipVisits = listOf<String>() @SubscribeEvent fun onRepoReload(event: RepositoryReloadEvent) { - vipVisitsJson = event.getConstant<VipVisitsJson>("VipVisits") + val data = event.getConstant<VipVisitsJson>("VipVisits") + vipVisits = data.vipVisits } @SubscribeEvent @@ -75,12 +76,10 @@ object PlayerTabComplete { } if (config.vipVisits && command == "visit") { - vipVisitsJson?.let { - for (visit in it.vipVisits) { - add(visit) - } + for (visit in vipVisits) { + add(visit) } } } } -}
\ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/commands/tabcomplete/WarpTabComplete.kt b/src/main/java/at/hannibal2/skyhanni/features/commands/tabcomplete/WarpTabComplete.kt index 4120ebd9d..ea76e03ea 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/commands/tabcomplete/WarpTabComplete.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/commands/tabcomplete/WarpTabComplete.kt @@ -8,19 +8,20 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent object WarpTabComplete { private val config get() = SkyHanniMod.feature.commands.tabComplete - private var warpsJson: WarpsJson? = null + private var warps = listOf<String>() @SubscribeEvent fun onRepoReload(event: RepositoryReloadEvent) { - warpsJson = event.getConstant<WarpsJson>("Warps") + val data = event.getConstant<WarpsJson>("Warps") + warps = data.warpCommands } fun handleTabComplete(command: String): List<String>? { if (!isEnabled()) return null if (command != "warp") return null - return warpsJson?.warpCommands + return warps } fun isEnabled() = LorenzUtils.inSkyBlock && config.warps -}
\ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/fishing/trophy/TrophyFishFillet.kt b/src/main/java/at/hannibal2/skyhanni/features/fishing/trophy/TrophyFishFillet.kt index 0ae437db7..2775becc7 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/fishing/trophy/TrophyFishFillet.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/fishing/trophy/TrophyFishFillet.kt @@ -3,6 +3,7 @@ package at.hannibal2.skyhanni.features.fishing.trophy import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.config.ConfigUpdaterMigrator import at.hannibal2.skyhanni.events.LorenzToolTipEvent +import at.hannibal2.skyhanni.features.fishing.trophy.TrophyFishManager.getFilletValue import at.hannibal2.skyhanni.utils.ItemUtils.getInternalName import at.hannibal2.skyhanni.utils.KeyboardManager.isKeyHeld import at.hannibal2.skyhanni.utils.LorenzUtils @@ -13,7 +14,6 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import org.lwjgl.input.Keyboard class TrophyFishFillet { - @SubscribeEvent fun onTooltip(event: LorenzToolTipEvent) { if (!isEnabled()) return @@ -36,5 +36,4 @@ class TrophyFishFillet { } private fun isEnabled() = LorenzUtils.inSkyBlock && SkyHanniMod.feature.fishing.trophyFishing.filletTooltip - -}
\ No newline at end of file +} diff --git a/src/main/java/at/hannibal2/skyhanni/features/fishing/trophy/TrophyFishInfo.kt b/src/main/java/at/hannibal2/skyhanni/features/fishing/trophy/TrophyFishInfo.kt deleted file mode 100644 index aba9f5c5f..000000000 --- a/src/main/java/at/hannibal2/skyhanni/features/fishing/trophy/TrophyFishInfo.kt +++ /dev/null @@ -1,54 +0,0 @@ -package at.hannibal2.skyhanni.features.fishing.trophy - -import at.hannibal2.skyhanni.test.command.ErrorManager -import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators -import at.hannibal2.skyhanni.utils.StringUtils.splitLines -import com.google.gson.annotations.Expose -import net.minecraft.event.HoverEvent -import net.minecraft.util.ChatComponentText -import net.minecraft.util.ChatStyle - -data class TrophyFishInfo( - @Expose - val displayName: String, - @Expose - private val description: String, - @Expose - private val rate: Int?, - @Expose - private val fillet: Map<TrophyRarity, Int> -) { - - // Credit to NotEnoughUpdates (Trophy Fish profile viewer page) for the format. - fun getTooltip(counts: Map<TrophyRarity, Int>): ChatStyle { - val bestFishObtained = counts.keys.maxOrNull() ?: TrophyRarity.BRONZE - val rateString = if (rate != null) "§8[§7$rate%§8]" else "" - val display = """ - |$displayName $rateString - |${description.splitLines(150)} - | - |${TrophyRarity.DIAMOND.formattedString}: ${formatCount(counts, TrophyRarity.DIAMOND)} - |${TrophyRarity.GOLD.formattedString}: ${formatCount(counts, TrophyRarity.GOLD)} - |${TrophyRarity.SILVER.formattedString}: ${formatCount(counts, TrophyRarity.SILVER)} - |${TrophyRarity.BRONZE.formattedString}: ${formatCount(counts, TrophyRarity.BRONZE)} - | - |§7Total: ${bestFishObtained.formatCode}${counts.values.sum().addSeparators()} - """.trimMargin() - return ChatStyle().setChatHoverEvent( - HoverEvent(HoverEvent.Action.SHOW_TEXT, ChatComponentText(display)) - ) - } - - fun getFilletValue(rarity: TrophyRarity): Int { - if (fillet == null) { - ErrorManager.logError(Error("fillet is null for '$displayName'"), "Error trying to read trophy fish info") - return -1 - } - return fillet.getOrDefault(rarity, -1) - } - - private fun formatCount(counts: Map<TrophyRarity, Int>, rarity: TrophyRarity): String { - val count = counts.getOrDefault(rarity, 0) - return if (count > 0) "§6${count.addSeparators()}" else "§c✖" - } -}
\ No newline at end of file diff --git a/src/main/java/at/hannibal2/skyhanni/features/fishing/trophy/TrophyFishManager.kt b/src/main/java/at/hannibal2/skyhanni/features/fishing/trophy/TrophyFishManager.kt index 4d8b547a4..6617b31b2 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/fishing/trophy/TrophyFishManager.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/fishing/trophy/TrophyFishManager.kt @@ -2,27 +2,62 @@ package at.hannibal2.skyhanni.features.fishing.trophy import at.hannibal2.skyhanni.data.ProfileStorageData import at.hannibal2.skyhanni.events.RepositoryReloadEvent -import at.hannibal2.skyhanni.utils.LorenzUtils +import at.hannibal2.skyhanni.test.command.ErrorManager +import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators +import at.hannibal2.skyhanni.utils.StringUtils.splitLines import at.hannibal2.skyhanni.utils.jsonobjects.TrophyFishJson +import at.hannibal2.skyhanni.utils.jsonobjects.TrophyFishJson.TrophyFishInfo +import net.minecraft.event.HoverEvent +import net.minecraft.util.ChatComponentText +import net.minecraft.util.ChatStyle import net.minecraftforge.fml.common.eventhandler.SubscribeEvent -class TrophyFishManager { +object TrophyFishManager { @SubscribeEvent fun onRepoReload(event: RepositoryReloadEvent) { - val json = event.getConstant<TrophyFishJson>("TrophyFish") - trophyFishInfo = json.trophy_fish - LorenzUtils.debug("Loaded trophy fish from repo") + val data = event.getConstant<TrophyFishJson>("TrophyFish") + trophyFishInfo = data.trophy_fish } - companion object { - val fishes: MutableMap<String, MutableMap<TrophyRarity, Int>>? - get() = ProfileStorageData.profileSpecific?.crimsonIsle?.trophyFishes + val fishes: MutableMap<String, MutableMap<TrophyRarity, Int>>? + get() = ProfileStorageData.profileSpecific?.crimsonIsle?.trophyFishes - private var trophyFishInfo = mapOf<String, TrophyFishInfo>() + private var trophyFishInfo = mapOf<String, TrophyFishInfo>() - fun getInfo(internalName: String) = trophyFishInfo[internalName] + fun getInfo(internalName: String) = trophyFishInfo[internalName] - fun getInfoByName(name: String) = trophyFishInfo.values.find { it.displayName == name } + fun getInfoByName(name: String) = trophyFishInfo.values.find { it.displayName == name } + + private fun formatCount(counts: Map<TrophyRarity, Int>, rarity: TrophyRarity): String { + val count = counts.getOrDefault(rarity, 0) + return if (count > 0) "§6${count.addSeparators()}" else "§c✖" + } + + fun TrophyFishInfo.getFilletValue(rarity: TrophyRarity): Int { + if (fillet == null) { + ErrorManager.logError(Error("fillet is null for '$displayName'"), "Error trying to read trophy fish info") + return -1 + } + return fillet.getOrDefault(rarity, -1) + } + + fun TrophyFishInfo.getTooltip(counts: Map<TrophyRarity, Int>): ChatStyle { + val bestFishObtained = counts.keys.maxOrNull() ?: TrophyRarity.BRONZE + val rateString = if (rate != null) "§8[§7$rate%§8]" else "" + val display = """ + |$displayName $rateString + |${description.splitLines(150)} + | + |${TrophyRarity.DIAMOND.formattedString}: ${formatCount(counts, TrophyRarity.DIAMOND)} + |${TrophyRarity.GOLD.formattedString}: ${formatCount(counts, TrophyRarity.GOLD)} + |${TrophyRarity.SILVER.formattedString}: ${formatCount(counts, TrophyRarity.SILVER)} + |${TrophyRarity.BRONZE.formattedString}: ${formatCount(counts, TrophyRarity.BRONZE)} + | + |§7Total: ${bestFishObtained.formatCode}${counts.values.sum().addSeparators()} + """.trimMargin() + return ChatStyle().setChatHoverEvent( + HoverEvent(HoverEvent.Action.SHOW_TEXT, ChatComponentText(display)) + ) } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/fishing/trophy/TrophyFishMessages.kt b/src/main/java/at/hannibal2/skyhanni/features/fishing/trophy/TrophyFishMessages.kt index e6087a5b5..7723617a9 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/fishing/trophy/TrophyFishMessages.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/fishing/trophy/TrophyFishMessages.kt @@ -3,12 +3,14 @@ package at.hannibal2.skyhanni.features.fishing.trophy import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.config.ConfigUpdaterMigrator import at.hannibal2.skyhanni.events.LorenzChatEvent -import at.hannibal2.skyhanni.features.fishing.trophy.TrophyFishManager.Companion.fishes +import at.hannibal2.skyhanni.features.fishing.trophy.TrophyFishManager.fishes +import at.hannibal2.skyhanni.features.fishing.trophy.TrophyFishManager.getTooltip import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.LorenzUtils.addOrPut import at.hannibal2.skyhanni.utils.LorenzUtils.sumAllValues import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators import at.hannibal2.skyhanni.utils.NumberUtil.ordinal +import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher import at.hannibal2.skyhanni.utils.StringUtils.removeColor import net.minecraft.client.Minecraft import net.minecraft.util.ChatComponentText @@ -16,16 +18,19 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent class TrophyFishMessages { private val trophyFishPattern = - Regex("§6§lTROPHY FISH! §r§bYou caught an? §r(?<displayName>§[0-9a-f](?:§k)?[\\w -]+)§r§r§r §r§l§r(?<displayRarity>§[0-9a-f]§l\\w+)§r§b\\.") + "§6§lTROPHY FISH! §r§bYou caught an? §r(?<displayName>§[0-9a-f](?:§k)?[\\w -]+)§r§r§r §r§l§r(?<displayRarity>§[0-9a-f]§l\\w+)§r§b\\.".toPattern() private val config get() = SkyHanniMod.feature.fishing.trophyFishing.chatMessages @SubscribeEvent fun onStatusBar(event: LorenzChatEvent) { if (!LorenzUtils.inSkyBlock) return + var displayName = "" + var displayRarity = "" - val match = trophyFishPattern.matchEntire(event.message)?.groups ?: return - val displayName = match["displayName"]!!.value.replace("§k", "") - val displayRarity = match["displayRarity"]!!.value + trophyFishPattern.matchMatcher(event.message) { + displayName = group("displayName").replace("§k", "") + displayRarity = group("displayRarity") + } ?: return val internalName = displayName.replace("Obfuscated", "Obfuscated Fish") .replace("[- ]".toRegex(), "").lowercase().removeColor() diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenAPI.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenAPI.kt index 05b78d047..d114d2455 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenAPI.kt @@ -1,6 +1,7 @@ package at.hannibal2.skyhanni.features.garden import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.data.GardenCropMilestones import at.hannibal2.skyhanni.data.IslandType import at.hannibal2.skyhanni.data.ProfileStorageData import at.hannibal2.skyhanni.events.BlockClickEvent @@ -20,6 +21,7 @@ import at.hannibal2.skyhanni.features.garden.farming.GardenBestCropTime import at.hannibal2.skyhanni.features.garden.farming.GardenCropSpeed import at.hannibal2.skyhanni.features.garden.fortuneguide.FFGuideGUI import at.hannibal2.skyhanni.features.garden.inventory.SkyMartCopperPrice +import at.hannibal2.skyhanni.features.garden.visitor.GardenVisitorColorNames import at.hannibal2.skyhanni.features.garden.visitor.VisitorAPI import at.hannibal2.skyhanni.utils.BlockUtils.isBabyCrop import at.hannibal2.skyhanni.utils.InventoryUtils @@ -248,5 +250,5 @@ object GardenAPI { } private var gardenExperience = listOf<Int>() - private const val gardenOverflowExp = 10000 // can be changed I guess + private const val gardenOverflowExp = 10000 } diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/composter/ComposterOverlay.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/composter/ComposterOverlay.kt index 8b0b3d70d..88695da9a 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/composter/ComposterOverlay.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/composter/ComposterOverlay.kt @@ -47,9 +47,10 @@ import kotlin.time.Duration import kotlin.time.Duration.Companion.milliseconds import kotlin.time.DurationUnit -class ComposterOverlay { +object ComposterOverlay { private var organicMatterFactors: Map<String, Double> = emptyMap() private var fuelFactors: Map<String, Double> = emptyMap() + private var organicMatter: Map<String, Double> = emptyMap() private val config get() = SkyHanniMod.feature.garden.composters private var organicMatterDisplay = emptyList<List<Any>>() @@ -68,34 +69,31 @@ class ComposterOverlay { private var lastHovered = 0L private var lastAttemptTime = SimpleTimeMark.farPast() - companion object { - var currentOrganicMatterItem: String? - get() = GardenAPI.config?.composterCurrentOrganicMatterItem - private set(value) { - GardenAPI.config?.composterCurrentOrganicMatterItem = value - } + var inInventory = false - var currentFuelItem: String? - get() = GardenAPI.config?.composterCurrentFuelItem - private set(value) { - GardenAPI.config?.composterCurrentFuelItem = value - } + private var testOffset = 0 - var testOffset = 0 + var currentOrganicMatterItem: String? + get() = GardenAPI.config?.composterCurrentOrganicMatterItem + private set(value) { + GardenAPI.config?.composterCurrentOrganicMatterItem = value + } - fun onCommand(args: Array<String>) { - if (args.size != 1) { - LorenzUtils.chat("§cUsage: /shtestcomposter <offset>") - return - } - testOffset = args[0].toInt() - LorenzUtils.chat("§e[SkyHanni] Composter test offset set to $testOffset.") + var currentFuelItem: String? + get() = GardenAPI.config?.composterCurrentFuelItem + private set(value) { + GardenAPI.config?.composterCurrentFuelItem = value } - var inInventory = false + fun onCommand(args: Array<String>) { + if (args.size != 1) { + LorenzUtils.chat("§cUsage: /shtestcomposter <offset>") + return + } + testOffset = args[0].toInt() + LorenzUtils.chat("§e[SkyHanni] Composter test offset set to $testOffset.") } - var garden: GardenJson? = null @SubscribeEvent fun onInventoryClose(event: InventoryCloseEvent) { @@ -331,6 +329,7 @@ class ComposterOverlay { if (currentTimeType == TimeType.COMPOST) "Compost multiplier" else "Composts per $timeText" newList.addAsSingletonList(" §7$compostPerTitle: §e${multiplier.round(2)}$compostPerTitlePreview") + val organicMatterPrice = getPrice(organicMatterItem) val organicMatterFactor = organicMatterFactors[organicMatterItem]!! @@ -358,6 +357,7 @@ class ComposterOverlay { " §7Material costs per $timeText: §6${NumberUtil.format(totalCost)}$materialCostFormatPreview" newList.addAsSingletonList(materialCostFormat) + val priceCompost = getPrice("COMPOST") val profit = ((priceCompost * multiDropFactor) - (fuelPricePer + organicMatterPricePer)) * timeMultiplier val profitPreview = @@ -460,8 +460,7 @@ class ComposterOverlay { if (sackStatus == SackStatus.MISSING || sackStatus == SackStatus.OUTDATED) { if (sackStatus == SackStatus.OUTDATED) LorenzUtils.sendCommandToServer("gfs $internalName ${itemsNeeded - having}") - val sackType = - if (internalName == "VOLTA" || internalName == "OIL_BARREL") "Mining" else "Enchanted Agronomy" // TODO Add sack type repo data + val sackType = if (internalName == "VOLTA" || internalName == "OIL_BARREL") "Mining" else "Enchanted Agronomy" // TODO Add sack type repo data LorenzUtils.clickableChat( "§e[SkyHanni] Sacks could not be loaded. Click here and open your §9$sackType Sack §eto update the data!", "sax" @@ -506,14 +505,19 @@ class ComposterOverlay { @SubscribeEvent fun onRepoReload(event: RepositoryReloadEvent) { - garden = event.getConstant<GardenJson>("Garden") + val data = event.getConstant<GardenJson>("Garden") + organicMatter = data.organic_matter + fuelFactors = data.fuel updateOrganicMatterFactors() } private fun updateOrganicMatterFactors() { - val garden = this.garden ?: return - organicMatterFactors = updateOrganicMatterFactors(garden.organic_matter) - fuelFactors = garden.fuel + try { + organicMatterFactors = updateOrganicMatterFactors(organicMatter) + } catch (e: Exception) { + e.printStackTrace() + LorenzUtils.error("error in RepositoryReloadEvent") + } } private fun updateOrganicMatterFactors(baseValues: Map<String, Double>): Map<String, Double> { diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/FarmingArmorDrops.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/FarmingArmorDrops.kt index fc68546e8..8092ff476 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/FarmingArmorDrops.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/FarmingArmorDrops.kt @@ -17,6 +17,7 @@ import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators import at.hannibal2.skyhanni.utils.RenderUtils.renderStrings import at.hannibal2.skyhanni.utils.SimpleTimeMark import at.hannibal2.skyhanni.utils.jsonobjects.ArmorDropsJson +import at.hannibal2.skyhanni.utils.jsonobjects.ArmorDropsJson.DropInfo import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import kotlin.time.Duration.Companion.seconds @@ -111,7 +112,7 @@ class FarmingArmorDrops { } companion object { - var armorDropInfo = mapOf<String, ArmorDropsJson.DropInfo>() + var armorDropInfo = mapOf<String, DropInfo>() private var currentArmorDropChance = 0.0 private var lastCalculationTime = SimpleTimeMark.farPast() diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/GardenCropSpeed.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/GardenCropSpeed.kt index 0d9e4409f..a9a2066bd 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/farming/GardenCropSpeed.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/farming/GardenCropSpeed.kt @@ -15,7 +15,8 @@ import at.hannibal2.skyhanni.features.garden.GardenAPI import at.hannibal2.skyhanni.utils.InventoryUtils import at.hannibal2.skyhanni.utils.ItemUtils.getInternalName import at.hannibal2.skyhanni.utils.LorenzUtils.editCopy -import com.google.gson.JsonObject +import at.hannibal2.skyhanni.utils.jsonobjects.DicerDropsJson +import at.hannibal2.skyhanni.utils.jsonobjects.DicerDropsJson.DicerType import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import kotlin.concurrent.fixedRateTimer @@ -129,31 +130,28 @@ object GardenCropSpeed { } } - private fun calculateAverageDicer(dicerList: MutableList<Double>, dropsJson: JsonObject) { + @SubscribeEvent + fun onRepoReload(event: RepositoryReloadEvent) { + val data = event.getConstant<DicerDropsJson>("DicerDrops") + calculateAverageDicer(melonDicer, data.MELON) + calculateAverageDicer(pumpkinDicer, data.PUMPKIN) + } + + private fun calculateAverageDicer(dicerList: MutableList<Double>, data: DicerType) { dicerList.clear() - val totalChance = dropsJson["total chance"].asDouble - val dropTypes = dropsJson["drops"].asJsonArray - for (dropType in dropTypes) { - val dropJson = dropType.asJsonObject - val chance = (dropJson["chance"].asDouble / totalChance) - dropJson["amount"].asJsonArray.forEachIndexed { index, element -> - val amount = element.asInt * chance + for (dropType in data.drops) { + val chance = dropType.chance / data.totalChance.toDouble() + for ((index, amount) in dropType.amount.withIndex()) { + val dropAmount = amount * chance if (index < dicerList.size) { - dicerList[index] += amount + dicerList[index] += dropAmount } else { - dicerList.add(amount) + dicerList.add(dropAmount) } } } } - @SubscribeEvent - fun onRepoReload(event: RepositoryReloadEvent) { - val dicerJson = event.getConstant("DicerDrops") - calculateAverageDicer(melonDicer, dicerJson["MELON"].asJsonObject) - calculateAverageDicer(pumpkinDicer, dicerJson["PUMPKIN"].asJsonObject) - } - fun getRecentBPS(): Double { val size = blocksSpeedList.size return if (size <= 1) { @@ -192,6 +190,5 @@ object GardenCropSpeed { @SubscribeEvent fun onConfigFix(event: ConfigUpdaterMigrator.ConfigFixEvent) { event.move(3, "garden.blocksBrokenResetTime", "garden.cropMilestones.blocksBrokenResetTime") - } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/inventory/AnitaExtraFarmingFortune.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/inventory/AnitaExtraFarmingFortune.kt index 0a3eabf86..904ec9bb4 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/inventory/AnitaExtraFarmingFortune.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/inventory/AnitaExtraFarmingFortune.kt @@ -13,12 +13,13 @@ import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators import at.hannibal2.skyhanni.utils.NumberUtil.formatNumber import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher import at.hannibal2.skyhanni.utils.jsonobjects.AnitaUpgradeCostsJson +import at.hannibal2.skyhanni.utils.jsonobjects.AnitaUpgradeCostsJson.Price import net.minecraftforge.event.entity.player.ItemTooltipEvent import net.minecraftforge.fml.common.eventhandler.SubscribeEvent class AnitaExtraFarmingFortune { private val config get() = SkyHanniMod.feature.garden.anitaShop - private var levelPrice = emptyMap<Int, AnitaUpgradeCostsJson.Price>() + private var levelPrice = mapOf<Int, Price>() @SubscribeEvent fun onItemTooltipLow(event: ItemTooltipEvent) { @@ -71,12 +72,8 @@ class AnitaExtraFarmingFortune { @SubscribeEvent fun onRepoReload(event: RepositoryReloadEvent) { - val upgradeCosts = event.getConstant<AnitaUpgradeCostsJson>("AnitaUpgradeCosts") - val map = mutableMapOf<Int, AnitaUpgradeCostsJson.Price>() - for ((rawNumber, price) in upgradeCosts.level_price) { - map[rawNumber.toInt()] = price - } - levelPrice = map + val data = event.getConstant<AnitaUpgradeCostsJson>("AnitaUpgradeCosts") + levelPrice = data.level_price } @SubscribeEvent diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorColorNames.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorColorNames.kt index 84e8f17d3..16efb90b1 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorColorNames.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorColorNames.kt @@ -3,36 +3,30 @@ package at.hannibal2.skyhanni.features.garden.visitor import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.events.RepositoryReloadEvent import at.hannibal2.skyhanni.utils.StringUtils.removeColor +import at.hannibal2.skyhanni.utils.jsonobjects.GardenJson import net.minecraftforge.fml.common.eventhandler.SubscribeEvent -class GardenVisitorColorNames { +object GardenVisitorColorNames { + private var visitorColours = mutableMapOf<String, String>() + var visitorItems = mutableMapOf<String, List<String>>() @SubscribeEvent fun onRepoReload(event: RepositoryReloadEvent) { - val mapColor = mutableMapOf<String, String>() - val mapItems = mutableMapOf<String, List<String>>() - val garden = event.getConstant("Garden") - for ((name, element) in garden["visitors"].asJsonObject.entrySet()) { - val jsonObject = element.asJsonObject - val rarity = jsonObject["rarity"].asString - mapColor[name] = getColor(rarity) - mapItems[name] = jsonObject["need_items"].asJsonArray.map { it.asString } + val data = event.getConstant<GardenJson>("Garden") + visitorColours.clear() + visitorItems.clear() + for ((visitor, visitorData) in data.visitors) { + visitorColours[visitor] = getColor(visitorData.rarity) + visitorItems[visitor] = visitorData.need_items } - visitorColor = mapColor - visitorItems = mapItems } - companion object { - private var visitorColor = mapOf<String, String>() // name -> color code - var visitorItems = mapOf<String, List<String>>() + fun getColoredName(name: String): String { + if (!SkyHanniMod.feature.garden.visitors.coloredName) return name - fun getColoredName(name: String): String { - if (!SkyHanniMod.feature.garden.visitors.coloredName) return name - - val cleanName = name.removeColor() - val color = visitorColor[cleanName] ?: return name - return color + cleanName - } + val cleanName = name.removeColor() + val color = visitorColours[cleanName] ?: return name + return color + cleanName } private fun getColor(rarity: String) = when (rarity) { diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorFeatures.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorFeatures.kt index 37a1ff142..f77a27107 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorFeatures.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/visitor/GardenVisitorFeatures.kt @@ -7,7 +7,6 @@ import at.hannibal2.skyhanni.events.LorenzChatEvent import at.hannibal2.skyhanni.events.LorenzTickEvent import at.hannibal2.skyhanni.events.OwnInventoryItemUpdateEvent import at.hannibal2.skyhanni.events.PreProfileSwitchEvent -import at.hannibal2.skyhanni.events.TabListLineRenderEvent import at.hannibal2.skyhanni.events.garden.visitor.VisitorAcceptEvent import at.hannibal2.skyhanni.events.garden.visitor.VisitorAcceptedEvent import at.hannibal2.skyhanni.events.garden.visitor.VisitorArrivalEvent @@ -404,18 +403,6 @@ class GardenVisitorFeatures { } @SubscribeEvent - fun onTabListText(event: TabListLineRenderEvent) { - if (!GardenAPI.inGarden()) return - if (!config.coloredName) return - val text = event.text - val replace = VisitorAPI.fromHypixelName(text) - val visitor = VisitorAPI.getVisitor(replace) - visitor?.let { - event.text = " " + GardenVisitorColorNames.getColoredName(it.visitorName) - } - } - - @SubscribeEvent fun onChatMessage(event: LorenzChatEvent) { if (config.hypixelArrivedMessage && newVisitorArrivedMessage.matcher(event.message).matches()) { event.blockedReason = "new_visitor_arrived" diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/HideNotClickableItems.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/HideNotClickableItems.kt index 0e8a9fe0b..ddb4645d6 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/HideNotClickableItems.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/HideNotClickableItems.kt @@ -27,7 +27,9 @@ import at.hannibal2.skyhanni.utils.MultiFilter import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.isRiftExportable import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.isRiftTransferable import at.hannibal2.skyhanni.utils.StringUtils.removeColor -import com.google.gson.JsonObject +import at.hannibal2.skyhanni.utils.jsonobjects.HideNotClickableItemsJson +import at.hannibal2.skyhanni.utils.jsonobjects.HideNotClickableItemsJson.SalvageFilter +import at.hannibal2.skyhanni.utils.jsonobjects.MultiFilterJson import net.minecraft.client.Minecraft import net.minecraft.client.gui.inventory.GuiChest import net.minecraft.inventory.ContainerChest @@ -54,21 +56,22 @@ class HideNotClickableItems { @SubscribeEvent fun onRepoReload(event: RepositoryReloadEvent) { - tradeNpcFilter.load(event.getConstant("TradeNpcs")) - - val hideNotClickableItems = event.getConstant("HideNotClickableItems") ?: return - hideNpcSellFilter.load(hideNotClickableItems["hide_npc_sell"].asJsonObject) - hideInStorageFilter.load(hideNotClickableItems["hide_in_storage"].asJsonObject) - updateSalvageList(hideNotClickableItems) - hidePlayerTradeFilter.load(hideNotClickableItems["hide_player_trade"].asJsonObject) - notAuctionableFilter.load(hideNotClickableItems["not_auctionable"].asJsonObject) + val data = event.getConstant<MultiFilterJson>("TradeNpcs") + tradeNpcFilter.load(data) + + val hideNotClickable = event.getConstant<HideNotClickableItemsJson>("HideNotClickableItems") + hideNpcSellFilter.load(hideNotClickable.hide_npc_sell) + hideInStorageFilter.load(hideNotClickable.hide_in_storage) + hidePlayerTradeFilter.load(hideNotClickable.hide_player_trade) + notAuctionableFilter.load(hideNotClickable.not_auctionable) + updateSalvageList(hideNotClickable.salvage) } - private fun updateSalvageList(hideNotClickableItems: JsonObject) { + private fun updateSalvageList(data: SalvageFilter) { itemsToSalvage.clear() - val salvage = hideNotClickableItems["salvage"].asJsonObject - itemsToSalvage.addAll(salvage.asJsonObject["items"].asJsonArray.map { it.asString }) - for (armor in salvage.asJsonObject["armor"].asJsonArray.map { it.asString }) { + + itemsToSalvage.addAll(data.items) + for (armor in data.armor) { itemsToSalvage.add("$armor Helmet") itemsToSalvage.add("$armor Chestplate") itemsToSalvage.add("$armor Leggings") @@ -128,7 +131,7 @@ class HideNotClickableItems { } else { event.toolTip.add("§c$hideReason") if (config.itemsBypass) { - event.toolTip.add(" §7(Disable with holding the control key)") + event.toolTip.add(" §7(Bypass by holding the control key)") } } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/ItemStars.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/ItemStars.kt index 1e43944f3..f8dd111b2 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/ItemStars.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/ItemStars.kt @@ -5,6 +5,7 @@ import at.hannibal2.skyhanni.events.RenderItemTipEvent import at.hannibal2.skyhanni.events.RepositoryReloadEvent import at.hannibal2.skyhanni.utils.ItemUtils.name import at.hannibal2.skyhanni.utils.LorenzUtils +import at.hannibal2.skyhanni.utils.jsonobjects.ItemsJson import net.minecraftforge.event.entity.player.ItemTooltipEvent import net.minecraftforge.fml.common.eventhandler.EventPriority import net.minecraftforge.fml.common.eventhandler.SubscribeEvent @@ -39,17 +40,12 @@ class ItemStars { @SubscribeEvent fun onRepoReload(event: RepositoryReloadEvent) { - val items = event.getConstant("Items") - if (items.has("crimson_armors")) { - armorNames.clear() - armorNames.addAll(items.getAsJsonArray("crimson_armors").map { it.asString }) - } - + val data = event.getConstant<ItemsJson>("Items") + armorNames.clear() tiers.clear() - if (items.has("crimson_tiers")) { - items.getAsJsonObject("crimson_tiers").entrySet().forEach { - tiers[it.key] = it.value.asInt - } + armorNames.addAll(data.crimson_armors) + for (tier in data.crimson_tiers) { + tiers[tier.key] = tier.value } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/QuickModMenuSwitch.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/QuickModMenuSwitch.kt index 69991dc76..2890e8593 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/QuickModMenuSwitch.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/QuickModMenuSwitch.kt @@ -8,7 +8,7 @@ import at.hannibal2.skyhanni.test.command.ErrorManager import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.LorenzUtils.makeAccessible import at.hannibal2.skyhanni.utils.RenderUtils.renderStringsAndItems -import at.hannibal2.skyhanni.utils.jsonobjects.ModsJson +import at.hannibal2.skyhanni.utils.jsonobjects.ModGuiSwitcherJson import at.hannibal2.skyhanni.utils.renderables.Renderable import net.minecraft.client.Minecraft import net.minecraft.client.renderer.GlStateManager @@ -28,7 +28,7 @@ object QuickModMenuSwitch { @SubscribeEvent fun onRepoReload(event: RepositoryReloadEvent) { - val modsJar = event.getConstant<ModsJson>("ModGuiSwitcher") + val modsJar = event.getConstant<ModGuiSwitcherJson>("ModGuiSwitcher") mods = buildList { out@ for ((name, mod) in modsJar.mods) { for (path in mod.guiPath) { 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 } diff --git a/src/main/java/at/hannibal2/skyhanni/features/rift/area/stillgorechateau/RiftBloodEffigies.kt b/src/main/java/at/hannibal2/skyhanni/features/rift/area/stillgorechateau/RiftBloodEffigies.kt index b2691210e..90e6c32ba 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/rift/area/stillgorechateau/RiftBloodEffigies.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/rift/area/stillgorechateau/RiftBloodEffigies.kt @@ -1,5 +1,6 @@ package at.hannibal2.skyhanni.features.rift.area.stillgorechateau +import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.events.LorenzRenderWorldEvent import at.hannibal2.skyhanni.events.LorenzTickEvent import at.hannibal2.skyhanni.events.LorenzWorldChangeEvent @@ -94,7 +95,7 @@ class RiftBloodEffigies { for (entity in EntityUtils.getEntitiesNearby<EntityArmorStand>(LocationUtils.playerLocation(), 6.0)) { effigiesTimerPattern.matchMatcher(entity.name) { - val nearest = locations.sortedBy { it.distanceSq(entity.getLorenzVec()) }.firstOrNull() ?: return + val nearest = locations.minByOrNull { it.distanceSq(entity.getLorenzVec()) } ?: return val index = locations.indexOf(nearest) val string = group("time") |