aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/features/inventory
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/features/inventory')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/inventory/HideNotClickableItems.kt3
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/inventory/SackDisplay.kt295
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/inventory/SkyBlockLevelGuideHelper.kt2
3 files changed, 44 insertions, 256 deletions
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 18147fb2f..d0e51d176 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/inventory/HideNotClickableItems.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/HideNotClickableItems.kt
@@ -17,6 +17,7 @@ import at.hannibal2.skyhanni.utils.ItemUtils.getInternalName_old
import at.hannibal2.skyhanni.utils.ItemUtils.getLore
import at.hannibal2.skyhanni.utils.ItemUtils.isEnchanted
import at.hannibal2.skyhanni.utils.ItemUtils.isVanilla
+import at.hannibal2.skyhanni.utils.LorenzUtils.equalsOneOf
import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.isRiftExportable
import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.isRiftTransferable
import at.hannibal2.skyhanni.utils.StringUtils.removeColor
@@ -419,7 +420,7 @@ class HideNotClickableItems {
}
private fun hideSalvage(chestName: String, stack: ItemStack): Boolean {
- if (chestName != "Salvage Item") return false
+ if (!chestName.equalsOneOf("Salvage Item", "Salvage Items")) return false
reverseColor = true
if (ItemUtils.isRecombobulated(stack)) {
diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/SackDisplay.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/SackDisplay.kt
index b9cd5fdeb..757d9e741 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/inventory/SackDisplay.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/SackDisplay.kt
@@ -1,186 +1,59 @@
package at.hannibal2.skyhanni.features.inventory
import at.hannibal2.skyhanni.SkyHanniMod
+import at.hannibal2.skyhanni.data.SackAPI
import at.hannibal2.skyhanni.events.GuiRenderEvent
-import at.hannibal2.skyhanni.events.InventoryCloseEvent
-import at.hannibal2.skyhanni.events.InventoryFullyOpenedEvent
import at.hannibal2.skyhanni.features.bazaar.BazaarApi
-import at.hannibal2.skyhanni.features.fishing.trophy.TrophyFishManager
-import at.hannibal2.skyhanni.features.fishing.trophy.TrophyRarity
-import at.hannibal2.skyhanni.utils.ItemUtils.getInternalName
-import at.hannibal2.skyhanni.utils.ItemUtils.getLore
-import at.hannibal2.skyhanni.utils.ItemUtils.name
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.NEUInternalName
-import at.hannibal2.skyhanni.utils.NEUInternalName.Companion.asInternalName
import at.hannibal2.skyhanni.utils.NEUItems
import at.hannibal2.skyhanni.utils.NEUItems.getItemStack
-import at.hannibal2.skyhanni.utils.NEUItems.getNpcPriceOrNull
-import at.hannibal2.skyhanni.utils.NEUItems.getPrice
import at.hannibal2.skyhanni.utils.NumberUtil
import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators
import at.hannibal2.skyhanni.utils.NumberUtil.formatNumber
import at.hannibal2.skyhanni.utils.RenderUtils.renderStringsAndItems
-import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher
-import at.hannibal2.skyhanni.utils.StringUtils.removeColor
import at.hannibal2.skyhanni.utils.renderables.Renderable
-import net.minecraft.item.ItemStack
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
-class SackDisplay {
-
- companion object {
- var inInventory = false
- var isRuneSack = false
- var isGemstoneSack = false
- var isTrophySack = false
- var sackRarity: TrophyRarity? = null
- }
-
- private val config get() = SkyHanniMod.feature.inventory.sackDisplay
+object SackDisplay {
private var display = emptyList<List<Any>>()
- private val sackItem = mutableMapOf<String, Item>()
- private val runeItem = mutableMapOf<String, Rune>()
- private val gemstoneItem = mutableMapOf<String, Gemstone>()
- private val sackPattern = "^(.* Sack|Enchanted .* Sack)$".toPattern()
- private val stackList = mutableMapOf<Int, ItemStack>()
- private val gemstoneMap = mapOf(
- "Jade Gemstones" to "ROUGH_JADE_GEM".asInternalName(),
- "Amber Gemstones" to "ROUGH_AMBER_GEM".asInternalName(),
- "Topaz Gemstones" to "ROUGH_TOPAZ_GEM".asInternalName(),
- "Sapphire Gemstones" to "ROUGH_SAPPHIRE_GEM".asInternalName(),
- "Amethyst Gemstones" to "ROUGH_AMETHYST_GEM".asInternalName(),
- "Jasper Gemstones" to "ROUGH_JASPER_GEM".asInternalName(),
- "Ruby Gemstones" to "ROUGH_RUBY_GEM".asInternalName(),
- "Opal Gemstones" to "ROUGH_OPAL_GEM".asInternalName(),
- )
- private val MAGMA_FISH = "MAGMA_FISH".asInternalName()
-
- private val numPattern =
- "(?:(?:§[0-9a-f](?<level>I{1,3})§7:)?|(?:§7Stored:)?) (?<color>§[0-9a-f])(?<stored>[0-9.,kKmMbB]+)§7/(?<total>\\d+(?:[0-9.,]+)?[kKmMbB]?)".toPattern()
- private val gemstonePattern =
- " §[0-9a-f](?<gemrarity>[A-z]*): §[0-9a-f](?<stored>\\d+(?:\\.\\d+)?(?:(?:,\\d+)?)+[kKmM]?)(?: §[0-9a-f]\\(\\d+(?:\\.\\d+)?(?:(?:,\\d+)?)+[kKmM]?\\))?".toPattern()
+ private val config get() = SkyHanniMod.feature.inventory.sackDisplay
@SubscribeEvent
fun onBackgroundDraw(event: GuiRenderEvent.ChestBackgroundRenderEvent) {
- if (inInventory) {
+ if (SackAPI.inSackInventory) {
+ if (!isEnabled()) return
config.position.renderStringsAndItems(
- display,
- extraSpace = config.extraSpace,
- itemScale = 1.3,
- posLabel = "Sacks Items"
+ display, extraSpace = config.extraSpace, itemScale = 1.3, posLabel = "Sacks Items"
)
}
}
- private fun update() {
- display = drawDisplay()
- }
-
- private fun init() {
- for ((_, stack) in stackList) {
- val name = stack.name ?: continue
- val lore = stack.getLore()
- val gem = Gemstone()
- val rune = Rune()
- val item = Item()
- loop@ for (line in lore) {
- if (isGemstoneSack) {
- gemstonePattern.matchMatcher(line) {
- val rarity = group("gemrarity")
- val stored = group("stored")
- gem.internalName = gemstoneMap[name.removeColor()] ?: NEUInternalName.NONE
- if (gemstoneMap.containsKey(name.removeColor())) {
- val internalName = "${rarity.uppercase()}_${
- name.uppercase().split(" ")[0].removeColor()
- }_GEM".asInternalName()
-
- when (rarity) {
- "Rough" -> {
- gem.rough = stored
- gem.roughPrice = internalName.sackPrice(stored)
- }
-
- "Flawed" -> {
- gem.flawed = stored
- gem.flawedPrice = internalName.sackPrice(stored)
- }
-
- "Fine" -> {
- gem.fine = stored
- gem.finePrice = internalName.sackPrice(stored)
- }
-
- "Flawless" -> {
- gem.flawless = stored
- gem.flawlessPrice = internalName.sackPrice(stored)
- }
- }
- gemstoneItem[name] = gem
- }
- }
- } else {
- numPattern.matchMatcher(line) {
- val stored = group("stored")
- val internalName = stack.getInternalName()
- item.internalName = internalName
- item.colorCode = group("color")
- item.stored = stored
- item.total = group("total")
- item.price = if (isTrophySack) {
- val trophyName =
- internalName.asString().lowercase().substringBeforeLast("_").replace("_", "")
- val filletValue =
- TrophyFishManager.getInfoByName(trophyName)?.getFilletValue(sackRarity!!) ?: 0
- val storedNumber = stored.formatNumber().toInt()
- MAGMA_FISH.sackPrice((filletValue * storedNumber).toString())
- } else internalName.sackPrice(stored).coerceAtLeast(0)
-
- if (isRuneSack) {
- val level = group("level")
- rune.stack = stack
- if (level == "I") {
- rune.lvl1 = stored
- continue@loop
- }
- if (level == "II") {
- rune.lvl2 = stored
- continue@loop
- }
- if (level == "III") {
- rune.lvl3 = stored
- }
- runeItem.put(name, rune)
- } else {
- sackItem.put(name, item)
- }
- }
- }
- }
- }
+ fun update(savingSacks: Boolean) {
+ display = drawDisplay(savingSacks)
}
- private fun drawDisplay(): List<List<Any>> {
+ private fun drawDisplay(savingSacks: Boolean): List<List<Any>> {
val newDisplay = mutableListOf<List<Any>>()
var totalPrice = 0
var rendered = 0
- init()
-
- if (sackItem.isNotEmpty()) {
- val sortedPairs: MutableMap<String, Item> = when (config.sortingType) {
- 0 -> sackItem.toList().sortedByDescending { it.second.stored.formatNumber() }.toMap().toMutableMap()
- 1 -> sackItem.toList().sortedBy { it.second.stored.formatNumber() }.toMap().toMutableMap()
- 2 -> sackItem.toList().sortedByDescending { it.second.price }.toMap().toMutableMap()
- 3 -> sackItem.toList().sortedBy { it.second.price }.toMap().toMutableMap()
- else -> sackItem.toList().sortedByDescending { it.second.stored.formatNumber() }.toMap().toMutableMap()
- }
-
- sortedPairs.toList().forEach {
- if (it.second.stored == "0" && !config.showEmpty) {
- sortedPairs.remove(it.first)
+ SackAPI.getSacksData(savingSacks)
+
+ val sackItems = SackAPI.sackItem.toList()
+ if (sackItems.isNotEmpty()) {
+ val sortedPairs: MutableMap<String, SackAPI.SackOtherItem> = when (config.sortingType) {
+ 0 -> sackItems.sortedByDescending { it.second.stored.formatNumber() }
+ 1 -> sackItems.sortedBy { it.second.stored.formatNumber() }
+ 2 -> sackItems.sortedByDescending { it.second.price }
+ 3 -> sackItems.sortedBy { it.second.price }
+ else -> sackItems.sortedByDescending { it.second.stored.formatNumber() }
+ }.toMap().toMutableMap()
+
+ sortedPairs.toList().forEach { (k, v) ->
+ if (v.stored == "0" && !config.showEmpty) {
+ sortedPairs.remove(k)
}
}
@@ -195,12 +68,10 @@ class SackDisplay {
newDisplay.add(buildList {
add(" §7- ")
add(itemStack)
- if (!isTrophySack)
- add(Renderable.optionalLink("${itemName.replace("§k", "")}: ", {
- BazaarApi.searchForBazaarItem(itemName)
- }) { !NEUItems.neuHasFocus() })
- else
- add("${itemName.replace("§k", "")}: ")
+ if (!SackAPI.isTrophySack) add(Renderable.optionalLink("${itemName.replace("§k", "")}: ", {
+ BazaarApi.searchForBazaarItem(itemName)
+ }) { !NEUItems.neuHasFocus() })
+ else add("${itemName.replace("§k", "")}: ")
add(
when (config.numberFormat) {
@@ -211,10 +82,8 @@ class SackDisplay {
}
)
- if (colorCode == "§a")
- add(" §c§l(Full!)")
- if (config.showPrice && price != 0)
- add(" §7(§6${format(price)}§7)")
+ if (colorCode == "§a") add(" §c§l(Full!)")
+ if (config.showPrice && price != 0) add(" §7(§6${format(price)}§7)")
})
rendered++
}
@@ -222,31 +91,29 @@ class SackDisplay {
val name = SortType.entries[config.sortingType].longName
newDisplay.addAsSingletonList("§7Sorted By: §c$name")
- newDisplay.addSelector<SortType>(
- " ",
+ newDisplay.addSelector<SortType>(" ",
getName = { type -> type.shortName },
isCurrent = { it.ordinal == config.sortingType },
onChange = {
config.sortingType = it.ordinal
- update()
+ update(false)
})
if (config.showPrice) {
newDisplay.addAsSingletonList("§cTotal price: §6${format(totalPrice)}")
- newDisplay.addSelector<PriceFrom>(
- " ",
+ newDisplay.addSelector<PriceFrom>(" ",
getName = { type -> type.displayName },
isCurrent = { it.ordinal == config.priceFrom },
onChange = {
config.priceFrom = it.ordinal
- update()
+ update(false)
})
}
}
- if (runeItem.isNotEmpty()) {
+ if (SackAPI.runeItem.isNotEmpty()) {
newDisplay.addAsSingletonList("§7Runes:")
- for ((name, rune) in runeItem) {
+ for ((name, rune) in SackAPI.runeItem) {
val list = mutableListOf<Any>()
val (stack, lv1, lv2, lv3) = rune
list.add(" §7- ")
@@ -257,9 +124,9 @@ class SackDisplay {
}
}
- if (gemstoneItem.isNotEmpty()) {
+ if (SackAPI.gemstoneItem.isNotEmpty()) {
newDisplay.addAsSingletonList("§7Gemstones:")
- for ((name, gem) in gemstoneItem) {
+ for ((name, gem) in SackAPI.gemstoneItem) {
val (internalName, rough, flawed, fine, flawless, roughprice, flawedprice, fineprice, flawlessprice) = gem
newDisplay.add(buildList {
add(" §7- ")
@@ -270,89 +137,18 @@ class SackDisplay {
add(" ($rough-§a$flawed-§9$fine-§5$flawless)")
val price = (roughprice + flawedprice + fineprice + flawlessprice)
totalPrice += price
- if (config.showPrice && price != 0)
- add(" §7(§6${format(price)}§7)")
+ if (config.showPrice && price != 0) add(" §7(§6${format(price)}§7)")
})
}
- if (config.showPrice)
- newDisplay.addAsSingletonList("§eTotal price: §6${format(totalPrice)}")
+ if (config.showPrice) newDisplay.addAsSingletonList("§eTotal price: §6${format(totalPrice)}")
}
return newDisplay
}
private fun format(price: Int) = if (config.priceFormat == 0) NumberUtil.format(price) else price.addSeparators()
- @SubscribeEvent
- fun onInventoryClose(event: InventoryCloseEvent) {
- inInventory = false
- isRuneSack = false
- isGemstoneSack = false
- isTrophySack = false
- runeItem.clear()
- gemstoneItem.clear()
- sackItem.clear()
- stackList.clear()
- }
-
- @SubscribeEvent
- fun onInventoryOpen(event: InventoryFullyOpenedEvent) {
- if (!isEnabled()) return
- val inventoryName = event.inventoryName
- val match = sackPattern.matcher(inventoryName).matches()
- if (!match) return
- val stacks = event.inventoryItems
- isRuneSack = inventoryName == "Runes Sack"
- isGemstoneSack = inventoryName == "Gemstones Sack"
- isTrophySack = inventoryName.contains("Trophy Fishing Sack")
- sackRarity = inventoryName.getTrophyRarity()
- inInventory = true
- stackList.putAll(stacks)
- update()
- }
-
-
- data class Gemstone(
- var internalName: NEUInternalName = NEUInternalName.NONE,
- var rough: String = "0",
- var flawed: String = "0",
- var fine: String = "0",
- var flawless: String = "0",
- var roughPrice: Int = 0,
- var flawedPrice: Int = 0,
- var finePrice: Int = 0,
- var flawlessPrice: Int = 0,
- )
-
- data class Rune(
- var stack: ItemStack? = null,
- var lvl1: String = "0",
- var lvl2: String = "0",
- var lvl3: String = "0",
- )
-
- data class Item(
- var internalName: NEUInternalName = NEUInternalName.NONE,
- var colorCode: String = "",
- var stored: String = "0",
- var total: String = "0",
- var price: Int = 0,
- )
-
private fun isEnabled() = LorenzUtils.inSkyBlock && config.enabled
- private fun NEUInternalName.sackPrice(stored: String) = when (config.priceFrom) {
- 0 -> (getPrice(true) * stored.formatNumber()).toInt().let { if (it < 0) 0 else it }
-
- 1 -> try {
- val npcPrice = getNpcPriceOrNull() ?: 0.0
- (npcPrice * stored.formatNumber()).toInt()
- } catch (e: Exception) {
- 0
- }
-
- else -> 0
- }
-
enum class SortType(val shortName: String, val longName: String) {
STORED_DESC("Stored D", "Stored Descending"),
STORED_ASC("Stored A", "Stored Ascending"),
@@ -366,13 +162,4 @@ class SackDisplay {
NPC("Npc Price"),
;
}
-
- private fun String.getTrophyRarity(): TrophyRarity? {
- return if (this.startsWith("Bronze"))
- TrophyRarity.BRONZE
- else
- if (this.startsWith("Silver"))
- TrophyRarity.SILVER
- else null
- }
-}
+} \ No newline at end of file
diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/SkyBlockLevelGuideHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/SkyBlockLevelGuideHelper.kt
index 16df062f8..60c1a28de 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/inventory/SkyBlockLevelGuideHelper.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/SkyBlockLevelGuideHelper.kt
@@ -11,7 +11,7 @@ import net.minecraft.client.gui.inventory.GuiChest
import net.minecraft.inventory.ContainerChest
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
-class SkyblockLevelGuideHelper {
+class SkyBlockLevelGuideHelper {
@SubscribeEvent
fun onBackgroundDrawn(event: GuiContainerEvent.BackgroundDrawnEvent) {