diff options
author | hannibal2 <24389977+hannibal002@users.noreply.github.com> | 2024-03-11 17:54:47 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-11 17:54:47 +0100 |
commit | 25f3a0fb99e3adee364f34cb2580440025417768 (patch) | |
tree | baa3ee51ce15e1f5dfa571d0a332b257371a0e01 /src/main/java/at/hannibal2/skyhanni/features/garden | |
parent | 1ec9aef89d420a1be55871e774fb9aea8384297a (diff) | |
download | skyhanni-25f3a0fb99e3adee364f34cb2580440025417768.tar.gz skyhanni-25f3a0fb99e3adee364f34cb2580440025417768.tar.bz2 skyhanni-25f3a0fb99e3adee364f34cb2580440025417768.zip |
improvement: Anita and SkyMart calculation breakdowns (#1116)
Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com>
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/features/garden')
-rw-r--r-- | src/main/java/at/hannibal2/skyhanni/features/garden/AnitaMedalProfit.kt | 22 | ||||
-rw-r--r-- | src/main/java/at/hannibal2/skyhanni/features/garden/inventory/SkyMartCopperPrice.kt | 45 |
2 files changed, 43 insertions, 24 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/AnitaMedalProfit.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/AnitaMedalProfit.kt index c1df32a98..298717720 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/AnitaMedalProfit.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/AnitaMedalProfit.kt @@ -7,13 +7,14 @@ import at.hannibal2.skyhanni.events.InventoryFullyOpenedEvent import at.hannibal2.skyhanni.features.garden.visitor.VisitorAPI import at.hannibal2.skyhanni.test.command.ErrorManager import at.hannibal2.skyhanni.utils.CollectionUtils.addAsSingletonList +import at.hannibal2.skyhanni.utils.DisplayTableEntry import at.hannibal2.skyhanni.utils.InventoryUtils import at.hannibal2.skyhanni.utils.ItemUtils import at.hannibal2.skyhanni.utils.ItemUtils.getInternalName import at.hannibal2.skyhanni.utils.ItemUtils.getLore import at.hannibal2.skyhanni.utils.ItemUtils.itemName import at.hannibal2.skyhanni.utils.ItemUtils.name -import at.hannibal2.skyhanni.utils.LorenzUtils +import at.hannibal2.skyhanni.utils.LorenzUtils.fillTable import at.hannibal2.skyhanni.utils.NEUInternalName import at.hannibal2.skyhanni.utils.NEUInternalName.Companion.asInternalName import at.hannibal2.skyhanni.utils.NEUItems.getPrice @@ -55,7 +56,7 @@ class AnitaMedalProfit { inInventory = true - val table = mutableMapOf<Pair<String, String>, Pair<Double, NEUInternalName>>() + val table = mutableListOf<DisplayTableEntry>() for ((_, item) in event.inventoryItems) { try { readItem(item, table) @@ -71,11 +72,11 @@ class AnitaMedalProfit { val newList = mutableListOf<List<Any>>() newList.addAsSingletonList("§eMedal Profit") - LorenzUtils.fillTable(newList, table) + newList.fillTable(table) display = newList } - private fun readItem(item: ItemStack, table: MutableMap<Pair<String, String>, Pair<Double, NEUInternalName>>) { + private fun readItem(item: ItemStack, table: MutableList<DisplayTableEntry>) { val itemName = getItemName(item) ?: return if (itemName == " ") return if (itemName == "§cClose") return @@ -96,9 +97,18 @@ class AnitaMedalProfit { if (itemPrice < 0) return val profit = itemPrice - fullCost - val format = NumberUtil.format(profit) + val profitFormat = NumberUtil.format(profit) val color = if (profit > 0) "§6" else "§c" - table[Pair(itemName, "$color$format")] = Pair(profit, internalName) + + val hover = listOf( + itemName, + "", + "§7Item price: §6${NumberUtil.format(itemPrice)} ", + // TODO add more exact material cost breakdown + "§7Material cost: §6${NumberUtil.format(fullCost)} ", + "§7Final profit: §6${profitFormat} ", + ) + table.add(DisplayTableEntry(itemName, "$color$profitFormat", profit, internalName, hover)) } private fun getItemName(item: ItemStack): String? { diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/inventory/SkyMartCopperPrice.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/inventory/SkyMartCopperPrice.kt index d27401e44..f9dd5b8a7 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/inventory/SkyMartCopperPrice.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/inventory/SkyMartCopperPrice.kt @@ -6,14 +6,16 @@ import at.hannibal2.skyhanni.events.InventoryCloseEvent import at.hannibal2.skyhanni.events.InventoryFullyOpenedEvent import at.hannibal2.skyhanni.features.garden.GardenAPI import at.hannibal2.skyhanni.utils.CollectionUtils.addAsSingletonList +import at.hannibal2.skyhanni.utils.DisplayTableEntry import at.hannibal2.skyhanni.utils.ItemUtils.getInternalName import at.hannibal2.skyhanni.utils.ItemUtils.getLore import at.hannibal2.skyhanni.utils.ItemUtils.itemName -import at.hannibal2.skyhanni.utils.LorenzUtils +import at.hannibal2.skyhanni.utils.LorenzUtils.fillTable import at.hannibal2.skyhanni.utils.NEUInternalName import at.hannibal2.skyhanni.utils.NEUItems.getPrice 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.NumberUtil.formatInt import at.hannibal2.skyhanni.utils.RenderUtils.renderStringsAndItems import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher @@ -61,36 +63,43 @@ class SkyMartCopperPrice { if (event.inventoryName != "SkyMart") return inInventory = true - val table = mutableMapOf<Pair<String, String>, Pair<Double, NEUInternalName>>() + val table = mutableListOf<DisplayTableEntry>() for (stack in event.inventoryItems.values) { val lore = stack.getLore() - val otherItemsPrice = stack.loreCosts().sumOf { it.getPrice() } + val otherItemsPrice = stack.loreCosts().sumOf { it.getPrice() }.takeIf { it != -1.0 } for (line in lore) { + val copper = copperPattern.matchMatcher(line) { + group("amount").formatInt() + } ?: continue + val internalName = stack.getInternalName() val lowestBin = internalName.getPriceOrNull() ?: continue - val profit = lowestBin - otherItemsPrice + val profit = lowestBin - (otherItemsPrice ?: 0.0) - val amount = copperPattern.matchMatcher(line) { - group("amount").formatInt() - } ?: continue - val factor = profit / amount + val factor = profit / copper val perFormat = NumberUtil.format(factor) - val priceFormat = NumberUtil.format(profit) - val amountFormat = NumberUtil.format(amount) - - val name = stack.itemName - val advancedStats = if (config.copperPriceAdvancedStats) { - " §7(§6$priceFormat §7/ §c$amountFormat Copper§7)" - } else "" - val pair = Pair("$name§f:", "§6§l$perFormat$advancedStats") - table[pair] = Pair(factor, internalName) + + val itemName = stack.itemName + val hover = buildList { + add(itemName) + add("") + add("§7Item price: §6${NumberUtil.format(lowestBin)} ") + otherItemsPrice?.let { + add("§7Additional cost: §6${NumberUtil.format(it)} ") + } + add("§7Profit per purchase: §6${NumberUtil.format(profit)} ") + add("") + add("§7Copper amount: §c${copper.addSeparators()} ") + add("§7Profit per copper: §6${perFormat} ") + } + table.add(DisplayTableEntry("$itemName§f:", "§6§l$perFormat", factor, internalName, hover)) } } val newList = mutableListOf<List<Any>>() newList.addAsSingletonList("§eCoins per Copper§f:") - LorenzUtils.fillTable(newList, table) + newList.fillTable(table) display = newList } |