summaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/features/slayer
diff options
context:
space:
mode:
authorhannibal2 <24389977+hannibal00212@users.noreply.github.com>2023-11-25 02:41:24 +0100
committerhannibal2 <24389977+hannibal00212@users.noreply.github.com>2023-11-25 02:41:24 +0100
commit861f3bece9ee7e48c26392443f44aa75afba21c0 (patch)
treed70e37d68cc242526facf3938def7e019a000622 /src/main/java/at/hannibal2/skyhanni/features/slayer
parentb32344991743f53c94a48f8a0054d0126b15bbfd (diff)
downloadskyhanni-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.kt191
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
}