diff options
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/data/SackAPI.kt')
-rw-r--r-- | src/main/java/at/hannibal2/skyhanni/data/SackAPI.kt | 46 |
1 files changed, 38 insertions, 8 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/data/SackAPI.kt b/src/main/java/at/hannibal2/skyhanni/data/SackAPI.kt index 328031478..cde612d82 100644 --- a/src/main/java/at/hannibal2/skyhanni/data/SackAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/data/SackAPI.kt @@ -24,6 +24,7 @@ import at.hannibal2.skyhanni.utils.NEUItems.getNpcPriceOrNull import at.hannibal2.skyhanni.utils.NEUItems.getPrice import at.hannibal2.skyhanni.utils.NumberUtil.formatInt import at.hannibal2.skyhanni.utils.NumberUtil.romanToDecimal +import at.hannibal2.skyhanni.utils.StringUtils.matchAll import at.hannibal2.skyhanni.utils.StringUtils.matchFirst import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher import at.hannibal2.skyhanni.utils.StringUtils.matches @@ -60,6 +61,15 @@ object SackAPI { var isTrophySack = false private var sackRarity: TrophyRarity? = null + /** + * TODO merge all 3 lists into one: + * + * move item name (currently key) into AbstractSackItem + * work with instance check + * add custom function for render behaviour. + * have only one render display function + */ + // val sackItem = mutableMapOf<String, SackOtherItem>() val runeItem = mutableMapOf<String, SackRune>() val gemstoneItem = mutableMapOf<String, SackGemstone>() @@ -119,13 +129,13 @@ object SackAPI { fun getSacksData(savingSacks: Boolean) { if (savingSacks) sackData = ProfileStorageData.sackProfiles?.sackContents ?: return - for ((_, stack) in stackList) { + for ((slot, stack) in stackList) { val name = stack.name val lore = stack.getLore() if (isGemstoneSack) { - lore.matchFirst(gemstonePattern) { - val gem = SackGemstone() + val gem = SackGemstone() + lore.matchAll(gemstonePattern) { val rarity = group("gemrarity") val stored = group("stored").formatInt() gem.internalName = gemstoneMap[name.removeColor()] ?: NEUInternalName.NONE @@ -134,26 +144,34 @@ object SackAPI { name.uppercase().split(" ")[0].removeColor() }_GEM".asInternalName() + gem.slot = slot + when (rarity) { "Rough" -> { gem.rough = stored + gem.stored += stored gem.roughPrice = internalName.sackPrice(stored) + gem.price += gem.roughPrice if (savingSacks) setSackItem(internalName, stored) } "Flawed" -> { gem.flawed = stored + gem.stored += stored gem.flawedPrice = internalName.sackPrice(stored) + gem.price += gem.flawedPrice if (savingSacks) setSackItem(internalName, stored) } "Fine" -> { gem.fine = stored + gem.stored += stored gem.finePrice = internalName.sackPrice(stored) + gem.price += gem.finePrice if (savingSacks) setSackItem(internalName, stored) + gemstoneItem[name] = gem } } - gemstoneItem[name] = gem } } } else if (isRuneSack) { @@ -163,11 +181,13 @@ object SackAPI { val level = group("level").romanToDecimal() val stored = group("stored").formatInt() rune.stack = stack + rune.stored += stored when (level) { 1 -> rune.lvl1 = stored 2 -> rune.lvl2 = stored 3 -> { + rune.slot = slot rune.lvl3 = stored runeItem[name] = rune } @@ -175,6 +195,7 @@ object SackAPI { } } } else { + // normal sack lore.matchFirst(numPattern) { val item = SackOtherItem() val stored = group("stored").formatInt() @@ -193,6 +214,7 @@ object SackAPI { } else { internalName.sackPrice(stored).coerceAtLeast(0) } + item.slot = slot sackItem[name] = item } } @@ -330,22 +352,26 @@ object SackAPI { var roughPrice: Long = 0, var flawedPrice: Long = 0, var finePrice: Long = 0, - ) + ): AbstractSackItem() data class SackRune( var stack: ItemStack? = null, var lvl1: Int = 0, var lvl2: Int = 0, var lvl3: Int = 0, - ) + ): AbstractSackItem() data class SackOtherItem( var internalName: NEUInternalName = NEUInternalName.NONE, var colorCode: String = "", - var stored: Int = 0, var total: Int = 0, - var price: Long = 0, var magmaFish: Int = 0, + ): AbstractSackItem() + + abstract class AbstractSackItem( + var stored: Int = 0, + var price: Long = 0, + var slot: Int = -1, ) fun NEUInternalName.getAmountInSacksOrNull(): Int? = @@ -373,6 +399,10 @@ private val gemstoneMap = mapOf( "Jasper Gemstones" to "ROUGH_JASPER_GEM".asInternalName(), "Ruby Gemstones" to "ROUGH_RUBY_GEM".asInternalName(), "Opal Gemstones" to "ROUGH_OPAL_GEM".asInternalName(), + "Onyx Gemstones" to "ROUGH_ONYX_GEM".asInternalName(), + "Aquamarine Gemstones" to "ROUGH_AQUAMARINE_GEM".asInternalName(), + "Citrine Gemstones" to "ROUGH_CITRINE_GEM".asInternalName(), + "Peridot Gemstones" to "ROUGH_PERIDOT_GEM".asInternalName(), ) // ideally should be correct but using alright should also be fine unless they sold their whole sacks |