diff options
| author | hannibal2 <24389977+hannibal00212@users.noreply.github.com> | 2023-11-25 02:41:24 +0100 |
|---|---|---|
| committer | hannibal2 <24389977+hannibal00212@users.noreply.github.com> | 2023-11-25 02:41:24 +0100 |
| commit | 861f3bece9ee7e48c26392443f44aa75afba21c0 (patch) | |
| tree | d70e37d68cc242526facf3938def7e019a000622 /src/main/java/at/hannibal2/skyhanni/features/slayer | |
| parent | b32344991743f53c94a48f8a0054d0126b15bbfd (diff) | |
| download | skyhanni-861f3bece9ee7e48c26392443f44aa75afba21c0.tar.gz skyhanni-861f3bece9ee7e48c26392443f44aa75afba21c0.tar.bz2 skyhanni-861f3bece9ee7e48c26392443f44aa75afba21c0.zip | |
migrating backend and much of rendering from slayer profit tracker and fishing tracker into SkyHanni item tracker
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/features/slayer')
| -rw-r--r-- | src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerProfitTracker.kt | 191 |
1 files changed, 65 insertions, 126 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerProfitTracker.kt b/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerProfitTracker.kt index 2f101524a..d71172eb3 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerProfitTracker.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/slayer/SlayerProfitTracker.kt @@ -1,6 +1,7 @@ package at.hannibal2.skyhanni.features.slayer import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.config.ConfigUpdaterMigrator import at.hannibal2.skyhanni.config.Storage import at.hannibal2.skyhanni.data.SlayerAPI import at.hannibal2.skyhanni.events.GuiRenderEvent @@ -10,24 +11,20 @@ import at.hannibal2.skyhanni.events.PurseChangeEvent import at.hannibal2.skyhanni.events.RepositoryReloadEvent import at.hannibal2.skyhanni.events.SlayerChangeEvent import at.hannibal2.skyhanni.events.SlayerQuestCompleteEvent -import at.hannibal2.skyhanni.features.bazaar.BazaarApi.Companion.getBazaarData -import at.hannibal2.skyhanni.test.PriceSource -import at.hannibal2.skyhanni.utils.KeyboardManager import at.hannibal2.skyhanni.utils.LorenzLogger import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.LorenzUtils.addAsSingletonList -import at.hannibal2.skyhanni.utils.LorenzUtils.addSelector import at.hannibal2.skyhanni.utils.LorenzUtils.sortedDesc import at.hannibal2.skyhanni.utils.NEUInternalName -import at.hannibal2.skyhanni.utils.NEUItems.getNpcPriceOrNull -import at.hannibal2.skyhanni.utils.NEUItems.getPriceOrNull import at.hannibal2.skyhanni.utils.NumberUtil import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators import at.hannibal2.skyhanni.utils.StringUtils.removeColor import at.hannibal2.skyhanni.utils.jsonobjects.SlayerProfitTrackerItemsJson import at.hannibal2.skyhanni.utils.renderables.Renderable -import at.hannibal2.skyhanni.utils.tracker.SkyHanniTracker -import at.hannibal2.skyhanni.utils.tracker.TrackerData +import at.hannibal2.skyhanni.utils.tracker.ItemTrackerData +import at.hannibal2.skyhanni.utils.tracker.SkyHanniItemTracker +import com.google.gson.JsonObject +import com.google.gson.JsonPrimitive import com.google.gson.annotations.Expose import net.minecraftforge.fml.common.eventhandler.SubscribeEvent import kotlin.time.Duration.Companion.seconds @@ -38,58 +35,44 @@ object SlayerProfitTracker { private var itemLogCategory = "" private var baseSlayerType = "" private val logger = LorenzLogger("slayer/profit_tracker") - private var lastClickDelay = 0L - private val trackers = mutableMapOf<String, SkyHanniTracker<Data>>() + private val trackers = mutableMapOf<String, SkyHanniItemTracker<Data>>() - class Data : TrackerData() { - override fun reset() { - items.clear() - mobKillCoins = 0 + class Data : ItemTrackerData() { + override fun resetItems() { slayerSpawnCost = 0 slayerCompletedCount = 0 } @Expose - var items: MutableMap<NEUInternalName, SlayerItem> = HashMap() - - @Expose - var mobKillCoins: Long = 0 - - @Expose var slayerSpawnCost: Long = 0 @Expose var slayerCompletedCount = 0 - class SlayerItem { - @Expose - var internalName: NEUInternalName? = null - - @Expose - var timesDropped: Long = 0 - - @Expose - var totalAmount: Long = 0 - - @Expose - var hidden = false + override fun getDescription(timesDropped: Long): List<String> { + val percentage = timesDropped.toDouble() / slayerCompletedCount + val perBoss = LorenzUtils.formatPercentage(percentage.coerceAtMost(1.0)) - override fun toString() = "SlayerItem{" + - "internalName='" + internalName + '\'' + - ", timesDropped=" + timesDropped + - ", totalAmount=" + totalAmount + - ", hidden=" + hidden + - '}' + return listOf( + "§7Dropped §e${timesDropped.addSeparators()} §7times.", + "§7Your drop rate: §c$perBoss", + ) } - override fun toString() = "SlayerProfitTracker.Data{" + - "items=" + items + - ", mobKillCoins=" + mobKillCoins + - ", slayerSpawnCost=" + slayerSpawnCost + - ", slayerCompletedCount=" + slayerCompletedCount + - '}' + override fun getCoinFormat(item: TrackedItem, numberColor: String): Pair<String, List<String>> { + val mobKillCoinsFormat = NumberUtil.format(item.totalAmount) + val gained = item.timesGained + val text = "$numberColor${gained}x §6Mob Kill Coins§7: §6$mobKillCoinsFormat" + val lore = listOf( + "§7Killing mobs gives you coins (more with scavenger)", + "§7You got §6$mobKillCoinsFormat coins §7in total this way" + ) + return text to lore + } } + private val ItemTrackerData.TrackedItem.timesDropped get() = timesGained + private fun addSlayerCosts(price: Int) { getTracker()?.modify { it.slayerSpawnCost += price @@ -126,21 +109,14 @@ object SlayerProfitTracker { } private fun addMobKillCoins(coins: Int) { - getTracker()?.modify { - it.mobKillCoins += coins - } + getTracker()?.addCoins(coins) } private fun addItemPickup(internalName: NEUInternalName, stackSize: Int) { - getTracker()?.modify { - val slayerItem = it.items.getOrPut(internalName) { Data.SlayerItem() } - - slayerItem.timesDropped++ - slayerItem.totalAmount += stackSize - } + getTracker()?.addItem(internalName, stackSize) } - private fun getTracker(): SkyHanniTracker<Data>? { + private fun getTracker(): SkyHanniItemTracker<Data>? { if (itemLogCategory == "") return null return trackers.getOrPut(itemLogCategory) { @@ -149,7 +125,7 @@ object SlayerProfitTracker { itemLogCategory ) { Data() } } - SkyHanniTracker("$itemLogCategory Profit Tracker", { Data() }, getStorage) { drawDisplay(it) } + SkyHanniItemTracker("$itemLogCategory Profit Tracker", { Data() }, getStorage) { drawDisplay(it) } } } @@ -197,61 +173,7 @@ object SlayerProfitTracker { var profit = 0.0 val map = mutableMapOf<Renderable, Long>() for ((internalName, itemProfit) in itemLog.items) { - val amount = itemProfit.totalAmount - - val price = (getPrice(internalName) * amount).toLong() - - val cleanName = SlayerAPI.getNameWithEnchantmentFor(internalName) - var name = cleanName - val priceFormat = NumberUtil.format(price) - val hidden = itemProfit.hidden - if (hidden) { - name = "§8§m" + name.removeColor(keepFormatting = true).replace("§r", "") - } - val text = " §7${amount.addSeparators()}x $name§7: §6$priceFormat" - - val timesDropped = itemProfit.timesDropped - val percentage = timesDropped.toDouble() / itemLog.slayerCompletedCount - val perBoss = LorenzUtils.formatPercentage(percentage.coerceAtMost(1.0)) - - val renderable = if (tracker.isInventoryOpen()) Renderable.clickAndHover( - text, listOf( - "§7Dropped §e${timesDropped.addSeparators()} §7times.", - "§7Your drop rate: §c$perBoss", - "", - "§eClick to " + (if (hidden) "show" else "hide") + "!", - "§eControl + Click to remove this item!", - ) - ) { - if (System.currentTimeMillis() > lastClickDelay + 150) { - - if (KeyboardManager.isControlKeyDown()) { - itemLog.items.remove(internalName) - LorenzUtils.chat("Removed $cleanName §efrom slayer profit display.") - lastClickDelay = System.currentTimeMillis() + 500 - } else { - itemProfit.hidden = !hidden - lastClickDelay = System.currentTimeMillis() - } - tracker.update() - } - } else Renderable.string(text) - if (tracker.isInventoryOpen() || !hidden) { - map[renderable] = price - } - profit += price - } - val mobKillCoins = itemLog.mobKillCoins - if (mobKillCoins != 0L) { - val mobKillCoinsFormat = NumberUtil.format(mobKillCoins) - map[Renderable.hoverTips( - " §7Mob kill coins: §6$mobKillCoinsFormat", - listOf( - "§7Killing mobs gives you coins (more with scavenger)", - "§7You got §e$mobKillCoinsFormat §7coins in total this way" - ) - )] = mobKillCoins - profit += mobKillCoins + profit += itemLog.drawItem(tracker, itemProfit, internalName, map) } val slayerSpawnCost = itemLog.slayerSpawnCost if (slayerSpawnCost != 0L) { @@ -284,24 +206,18 @@ object SlayerProfitTracker { val text = "§eTotal Profit: $profitPrefix$profitFormat" addAsSingletonList(Renderable.hoverTips(text, listOf("§7Profit per boss: $profitPrefix$profitPerBossFormat"))) - if (tracker.isInventoryOpen()) { - addSelector<PriceSource>( - "", - getName = { type -> type.displayName }, - isCurrent = { it.ordinal == config.priceFrom }, - onChange = { - config.priceFrom = it.ordinal - tracker.update() - } - ) - } + tracker.addPriceFromButton(this) } - private fun getPrice(internalName: NEUInternalName) = when (config.priceFrom) { - 0 -> internalName.getBazaarData()?.sellPrice ?: internalName.getPriceOrNull() ?: 0.0 - 1 -> internalName.getBazaarData()?.buyPrice ?: internalName.getPriceOrNull() ?: 0.0 + val coinFormat: (ItemTrackerData.TrackedItem) -> Pair<String, List<String>> = { item -> + val mobKillCoinsFormat = NumberUtil.format(item.totalAmount) + val text = " §6Mob kill coins§7: §6$mobKillCoinsFormat" + val lore = listOf( + "§7Killing mobs gives you coins (more with scavenger)", + "§7You got §e$mobKillCoinsFormat §7coins in total this way" + ) - else -> internalName.getNpcPriceOrNull() ?: 0.0 + text to lore } @SubscribeEvent @@ -312,13 +228,36 @@ object SlayerProfitTracker { getTracker()?.renderDisplay(config.pos) } + @SubscribeEvent + fun onConfigFix(event: ConfigUpdaterMigrator.ConfigFixEvent) { + event.move(10, "#profile.slayerProfitData", "#profile.slayerProfitData") { old -> + for (data in old.asJsonObject.entrySet().map { it.value.asJsonObject }) { + val items = data.get("items").asJsonObject + for (item in items.entrySet().map { it.value.asJsonObject }) { + val oldValue = item.get("timesDropped") + item.add("timesGained", oldValue) + } + + val coinAmount = data.get("mobKillCoins") + val coins = JsonObject() + coins.add("internalName", JsonPrimitive("SKYBLOCK_COIN")) + coins.add("timesDropped", JsonPrimitive(1)) + coins.add("totalAmount", coinAmount) + items.add("SKYBLOCK_COIN", coins) + } + + old + } + + } + fun isEnabled() = LorenzUtils.inSkyBlock && config.enabled fun clearProfitCommand(args: Array<String>) { if (itemLogCategory == "") { LorenzUtils.userError( "No current slayer data found! " + - "§eGo to a slayer area and start the specific slayer type you want to reset the data of.", + "§eGo to a slayer area and start the specific slayer type you want to reset the data of.", ) return } |
