diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/ItemStars.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/ItemStars.kt index 4e1b0cbfb00b..7e0ab8d7d7b2 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/inventory/ItemStars.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/ItemStars.kt @@ -13,6 +13,7 @@ import at.hannibal2.skyhanni.utils.ItemUtils.name import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.RegexUtils.findMatcher import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getDungeonStarCount +import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.getStarCount import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern import net.minecraft.item.ItemStack import net.minecraftforge.fml.common.eventhandler.EventPriority @@ -39,7 +40,7 @@ object ItemStars { if (!isEnabled()) return val stack = event.itemStack if (stack.stackSize != 1) return - val stars = stack.getStarCount() ?: return + val stars = stack.grabStarCount() ?: return starPattern.findMatcher(stack.name) { val name = group("name") event.toolTip[0] = "$name §c$stars✪" @@ -52,11 +53,11 @@ object ItemStars { if (!CRIMSON_ARMOR.isSelected()) return val stack = event.stack if (stack.getInternalNameOrNull()?.isKuudraArmor() != true) return - val stars = stack.getStarCount() ?: return + val stars = stack.grabStarCount() ?: return event.stackTip = stars.toString() } - private fun ItemStack.getStarCount(): Int? { + private fun ItemStack.grabStarCount(): Int? { val internalName = getInternalNameOrNull() ?: return null val baseStars = getDungeonStarCount() ?: getStarCount() ?: return null if (internalName.isKuudraArmor()) { diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValueCalculator.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValueCalculator.kt index eb35506aa4db..30d3267502b4 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValueCalculator.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/items/EstimatedItemValueCalculator.kt @@ -2,8 +2,10 @@ package at.hannibal2.skyhanni.features.misc.items import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.api.ReforgeAPI +import at.hannibal2.skyhanni.features.nether.kuudra.KuudraAPI import at.hannibal2.skyhanni.features.nether.kuudra.KuudraAPI.getKuudraTier import at.hannibal2.skyhanni.features.nether.kuudra.KuudraAPI.isKuudraArmor +import at.hannibal2.skyhanni.features.nether.kuudra.KuudraAPI.removeKuudraTier import at.hannibal2.skyhanni.test.command.ErrorManager import at.hannibal2.skyhanni.utils.CollectionUtils.addOrPut import at.hannibal2.skyhanni.utils.CollectionUtils.sorted @@ -26,6 +28,7 @@ import at.hannibal2.skyhanni.utils.NEUItems.getItemStackOrNull import at.hannibal2.skyhanni.utils.NEUItems.getNpcPriceOrNull import at.hannibal2.skyhanni.utils.NEUItems.getPriceOrNull import at.hannibal2.skyhanni.utils.NEUItems.getRawCraftCostOrNull +import at.hannibal2.skyhanni.utils.NEUItems.removePrefix import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators import at.hannibal2.skyhanni.utils.NumberUtil.shortFormat import at.hannibal2.skyhanni.utils.PrimitiveIngredient @@ -71,9 +74,6 @@ object EstimatedItemValueCalculator { private val config get() = SkyHanniMod.feature.inventory.estimatedItemValues - // TODO move into KuudraAPI - private val kuudraSets = listOf("AURORA", "CRIMSON", "TERROR", "HOLLOW", "FERVOR") - var starChange = 0 get() = if (SkyHanniMod.feature.dev.debug.enabled) field else 0 @@ -137,23 +137,22 @@ object EstimatedItemValueCalculator { return Pair(totalPrice, basePrice) } - fun isKuudraSet(internalName: String) = internalName.asInternalName().isKuudraArmor() - private fun addAttributeCost(stack: ItemStack, list: MutableList): Double { val attributes = stack.getAttributes() ?: return 0.0 - var internalName = removeKuudraArmorPrefix(stack.getInternalName().asString().removePrefix("VANQUISHED_")) - var genericName = internalName - if (isKuudraSet(internalName)) { - genericName = kuudraSets.fold(internalName) { acc, part -> acc.replace(part, "GENERIC_KUUDRA") } + val internalName = stack.getInternalName() + val internalNameString = internalName.removeKuudraTier().removePrefix("VANQUISHED_").asString() + var genericName = internalNameString + if (internalName.isKuudraArmor()) { + genericName = KuudraAPI.kuudraSets.fold(internalNameString) { acc, part -> acc.replace(part, "GENERIC_KUUDRA") } } stack.getAttributeFromShard()?.let { return 0.0 } if (attributes.size != 2) return 0.0 - val basePrice = internalName.asInternalName().getPriceOrNull() ?: 0.0 + val basePrice = internalName.getPriceOrNull() ?: 0.0 var subTotal = 0.0 - val combo = ("$internalName+ATTRIBUTE_${attributes[0].first}+ATTRIBUTE_${attributes[1].first}") - var comboPrice = combo.asInternalName().getPriceOrNull() + val combo = ("$internalNameString+ATTRIBUTE_${attributes[0].first}+ATTRIBUTE_${attributes[1].first}") + val comboPrice = combo.asInternalName().getPriceOrNull() if (comboPrice != null) { val useless = isUselessAttribute(combo) @@ -189,16 +188,6 @@ object EstimatedItemValueCalculator { return subTotal + 0.1 } - private fun removeKuudraArmorPrefix(original: String): String { - if (!isKuudraSet(original)) return original - - var internalName = original - for (prefix in kuudraUpgradeTiers) { - internalName = internalName.removePrefix(prefix) - } - return internalName - } - private fun addAttributePrice(attributePrice: Double, basePrice: Double): Double = if (attributePrice > basePrice) { attributePrice - basePrice } else { @@ -488,14 +477,13 @@ object EstimatedItemValueCalculator { inputStars: Int, ): Pair>? { var totalStars = inputStars - val rawInternalName = internalName.asString() - val (price, maxStars) = if (isKuudraSet(rawInternalName)) { + val (price, maxStars) = if (internalName.isKuudraArmor()) { val tier = internalName.getKuudraTier() ?: 0 totalStars += tier * 10 var remainingStars = totalStars - val removed = removeKuudraArmorPrefix(rawInternalName) + val removed = internalName.removeKuudraTier().asString() var maxStars = 0 var finalPrice: EssenceItemUtils.EssenceUpgradePrice? = null @@ -681,7 +669,7 @@ object EstimatedItemValueCalculator { } private fun addBaseItem(stack: ItemStack, list: MutableList): Double { - val internalName = removeKuudraArmorPrefix(stack.getInternalName().asString()).asInternalName() + val internalName = stack.getInternalName().removeKuudraTier() stack.getAttributeFromShard()?.let { val price = it.getAttributePrice() diff --git a/src/main/java/at/hannibal2/skyhanni/features/nether/kuudra/KuudraAPI.kt b/src/main/java/at/hannibal2/skyhanni/features/nether/kuudra/KuudraAPI.kt index ce6486970473..2f19878c5346 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/nether/kuudra/KuudraAPI.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/nether/kuudra/KuudraAPI.kt @@ -9,7 +9,11 @@ import at.hannibal2.skyhanni.events.LorenzWorldChangeEvent import at.hannibal2.skyhanni.skyhannimodule.SkyHanniModule import at.hannibal2.skyhanni.utils.LorenzUtils import at.hannibal2.skyhanni.utils.NEUInternalName +import at.hannibal2.skyhanni.utils.NEUInternalName.Companion.asInternalName +import at.hannibal2.skyhanni.utils.NEUItems.removePrefix +import at.hannibal2.skyhanni.utils.RegexUtils.matchGroup import at.hannibal2.skyhanni.utils.RegexUtils.matchMatcher +import at.hannibal2.skyhanni.utils.RegexUtils.matches import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern import net.minecraftforge.fml.common.eventhandler.SubscribeEvent @@ -26,28 +30,29 @@ object KuudraAPI { "chat.complete", "§.\\s*(?:§.)*KUUDRA DOWN!" ) + private val kuudraArmorPattern by patternGroup.pattern( + "internalname.armor", + "(?HOT|BURNING|FIERY|INFERNAL|)_?(?AURORA|CRIMSON|TERROR|HOLLOW|FERVOR)_(?:HELMET|CHESTPLATE|LEGGINGS|BOOTS)" + ) - private val kuudraTiers = listOf("HOT_", "BURNING_", "FIERY_", "INFERNAL_") + private val kuudraTiers = listOf("", "HOT", "BURNING", "FIERY", "INFERNAL") + val kuudraSets = listOf("AURORA", "CRIMSON", "TERROR", "HOLLOW", "FERVOR") - private val kuudraArmors: List + fun NEUInternalName.isKuudraArmor(): Boolean = kuudraArmorPattern.matches(asString()) - init { - val kuudraSets = listOf("AURORA_", "CRIMSON_", "TERROR_", "HOLLOW_", "FERVOR_") - val armorPieces = listOf("HELMET", "CHESTPLATE", "LEGGINGS", "BOOTS") - kuudraArmors = (kuudraTiers + "").flatMap { tier -> - kuudraSets.flatMap { set -> - armorPieces.map { piece -> - "$set$tier$piece" - } - } - } + fun NEUInternalName.getKuudraTier(): Int? { + val tier = kuudraArmorPattern.matchGroup(asString(), "tier") ?: return null + return (kuudraTiers.indexOf(tier) + 1).takeIf { it != 0 } } - fun NEUInternalName.isKuudraArmor(): Boolean = asString() in kuudraArmors - - fun NEUInternalName.getKuudraTier(): Int? = kuudraTiers.indexOfFirst { asString().startsWith(it) }.takeIf { it != -1 }?.let { it + 1 } + fun NEUInternalName.removeKuudraTier(): NEUInternalName { + val prefix = kuudraArmorPattern.matchGroup(asString(), "tier") ?: return this + return removePrefix("${prefix}_") + } var kuudraTier: Int? = null + private set + fun inKuudra() = kuudraTier != null @SubscribeEvent diff --git a/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt b/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt index 75c6173ba57e..f5db6b429c77 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt @@ -226,6 +226,13 @@ object NEUItems { fun NEUInternalName.isVanillaItem(): Boolean = manager.auctionManager.isVanillaItem(this.asString()) + fun NEUInternalName.removePrefix(prefix: String): NEUInternalName { + if (prefix.isEmpty()) return this + val string = asString() + if (!string.startsWith(prefix)) return this + return string.substring(prefix.length).asInternalName() + } + const val itemFontSize = 2.0 / 3.0 fun ItemStack.renderOnScreen(