summaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/utils
diff options
context:
space:
mode:
authorhannibal2 <24389977+hannibal002@users.noreply.github.com>2024-02-19 13:29:45 +0100
committerGitHub <noreply@github.com>2024-02-19 13:29:45 +0100
commit7d9a6a101071c75773668e0881b37466506307dd (patch)
tree0f46abdd4375d2eeb1a5c8154a2cb72046fb7621 /src/main/java/at/hannibal2/skyhanni/utils
parent4bb1419b90e424ac824042188f67a371a5c276da (diff)
downloadskyhanni-7d9a6a101071c75773668e0881b37466506307dd.tar.gz
skyhanni-7d9a6a101071c75773668e0881b37466506307dd.tar.bz2
skyhanni-7d9a6a101071c75773668e0881b37466506307dd.zip
Item name rewrite and cache #1016
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/utils')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/CachedItemData.kt6
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/ItemUtils.kt76
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/NEUInternalName.kt3
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt4
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniItemTracker.kt7
5 files changed, 68 insertions, 28 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/utils/CachedItemData.kt b/src/main/java/at/hannibal2/skyhanni/utils/CachedItemData.kt
index e22f1cba5..ca9f11cc6 100644
--- a/src/main/java/at/hannibal2/skyhanni/utils/CachedItemData.kt
+++ b/src/main/java/at/hannibal2/skyhanni/utils/CachedItemData.kt
@@ -17,10 +17,14 @@ data class CachedItemData(
var riftExportable: Boolean? = null,
// null = not loaded
- var itemRarityLastCheck: Long = 0L, // Cant use SimpleTimeMark here
+ var itemRarityLastCheck: Long = 0L, // Can't use SimpleTimeMark here
// null = not loaded
var itemRarity: LorenzRarity? = null,
var itemCategory: ItemCategory? = null,
+
+ var lastInternalName: NEUInternalName? = null,
+
+ var lastInternalNameFetchTime: Long = 0L, // Still can't use SimpleTimeMark here
)
diff --git a/src/main/java/at/hannibal2/skyhanni/utils/ItemUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/ItemUtils.kt
index 6b52d1eb2..ab0d695fd 100644
--- a/src/main/java/at/hannibal2/skyhanni/utils/ItemUtils.kt
+++ b/src/main/java/at/hannibal2/skyhanni/utils/ItemUtils.kt
@@ -1,8 +1,9 @@
package at.hannibal2.skyhanni.utils
+import at.hannibal2.skyhanni.data.PetAPI
import at.hannibal2.skyhanni.test.command.ErrorManager
import at.hannibal2.skyhanni.utils.NEUInternalName.Companion.asInternalName
-import at.hannibal2.skyhanni.utils.NEUItems.getItemStack
+import at.hannibal2.skyhanni.utils.NEUItems.getItemStackOrNull
import at.hannibal2.skyhanni.utils.NumberUtil.formatNumber
import at.hannibal2.skyhanni.utils.SimpleTimeMark.Companion.asTimeMark
import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.cachedData
@@ -26,6 +27,8 @@ import kotlin.time.Duration.Companion.seconds
object ItemUtils {
+ private val itemNameCache = mutableMapOf<NEUInternalName, String>() // internal name -> item name
+
private val ignoredPetStrings = listOf(
"Archer",
"Berserk",
@@ -122,13 +125,22 @@ object ItemUtils {
fun ItemStack.getInternalName() = getInternalNameOrNull() ?: NEUInternalName.NONE
- fun ItemStack.getInternalNameOrNull() = getRawInternalName()?.asInternalName()
+ fun ItemStack.getInternalNameOrNull(): NEUInternalName? {
+ val data = cachedData
+ if (data.lastInternalNameFetchTime.asTimeMark().passedSince() < 1.seconds) {
+ return data.lastInternalName
+ }
+ val internalName = grabInternalNameOrNull()
+ data.lastInternalName = internalName
+ data.lastInternalNameFetchTime = SimpleTimeMark.now().toMillis()
+ return internalName
+ }
- private fun ItemStack.getRawInternalName(): String? {
+ private fun ItemStack.grabInternalNameOrNull(): NEUInternalName? {
if (name == "§fWisp's Ice-Flavored Water I Splash Potion") {
- return "WISP_POTION"
+ return NEUInternalName.WISP_POTION
}
- return NEUItems.getInternalName(this)
+ return NEUItems.getInternalName(this)?.asInternalName()
}
fun ItemStack.isVanilla() = NEUItems.isVanillaItem(this)
@@ -297,12 +309,9 @@ object ItemUtils {
setStackDisplayName(value)
}
+ @Deprecated("outdated", ReplaceWith("itemName"))
val ItemStack.nameWithEnchantment: String?
- get() = name?.let {
- if (it.endsWith("Enchanted Book")) {
- getLore()[0]
- } else it
- }
+ get() = getInternalNameOrNull()?.itemName
fun isSkyBlockMenuItem(stack: ItemStack?): Boolean = stack?.getInternalName()?.equals("SKYBLOCK_MENU") ?: false
@@ -348,17 +357,6 @@ object ItemUtils {
return pair
}
- fun NEUInternalName.getItemNameOrNull() = getItemStack().name
-
- fun NEUInternalName.getItemName() = getItemNameOrNull() ?: error("No item name found for $this")
-
- fun NEUInternalName.getNameWithEnchantment(): String {
- if (equals("WISP_POTION")) {
- return "§fWisp's Ice-Flavored Water"
- }
- return getItemStack().nameWithEnchantment ?: error("Could not find item name for $this")
- }
-
private fun getPetRarity(pet: ItemStack): LorenzRarity? {
val rarityId = pet.getInternalName().asString().split(";").last().toInt()
val rarity = LorenzRarity.getById(rarityId)
@@ -377,4 +375,40 @@ object ItemUtils {
}
fun NEUInternalName.isRune(): Boolean = contains("_RUNE;")
+
+ val ItemStack.itemName: String
+ get() = getInternalName().itemName
+
+ val ItemStack.itemNameWithoutColor: String get() = itemName.removeColor()
+
+ val NEUInternalName.itemName: String
+ get() = itemNameCache.getOrPut(this) { grabItemName() }
+
+ val NEUInternalName.itemNameWithoutColor: String get() = itemName.removeColor()
+
+ private fun NEUInternalName.grabItemName(): String {
+ if (this == NEUInternalName.WISP_POTION) {
+ return "§fWisp's Ice-Flavored Water"
+ }
+ if (this == NEUInternalName.SKYBLOCK_COIN) {
+ return "§6Coins"
+ }
+ if (this == NEUInternalName.NONE) {
+ error("NEUInternalName.NONE has no name!")
+ }
+
+ val itemStack = getItemStackOrNull()
+ val name = itemStack?.name ?: error("Could not find item name for $this")
+
+ // show enchanted book name
+ if (name.endsWith("Enchanted Book")) {
+ return itemStack.getLore()[0]
+ }
+
+ // hide pet level
+ PetAPI.getCleanName(name)?.let {
+ return "$it Pet"
+ }
+ return name
+ }
}
diff --git a/src/main/java/at/hannibal2/skyhanni/utils/NEUInternalName.kt b/src/main/java/at/hannibal2/skyhanni/utils/NEUInternalName.kt
index 26bfcc799..73fc82622 100644
--- a/src/main/java/at/hannibal2/skyhanni/utils/NEUInternalName.kt
+++ b/src/main/java/at/hannibal2/skyhanni/utils/NEUInternalName.kt
@@ -9,6 +9,9 @@ class NEUInternalName private constructor(private val internalName: String) {
val NONE = "NONE".asInternalName()
val MISSING_ITEM = "MISSING_ITEM".asInternalName()
+ val WISP_POTION = "WISP_POTION".asInternalName()
+ val SKYBLOCK_COIN = "SKYBLOCK_COIN".asInternalName()
+
fun String.asInternalName(): NEUInternalName {
val internalName = uppercase()
return map.getOrPut(internalName) { NEUInternalName(internalName) }
diff --git a/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt b/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt
index 06901f239..c96fb36a3 100644
--- a/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt
+++ b/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt
@@ -158,7 +158,7 @@ object NEUItems {
fun NEUInternalName.getNpcPrice() = getNpcPriceOrNull() ?: -1.0
fun NEUInternalName.getNpcPriceOrNull(): Double? {
- if (equals("WISP_POTION")) {
+ if (this == NEUInternalName.WISP_POTION) {
return 20_000.0
}
return BazaarDataHolder.getNpcPrice(this)
@@ -168,7 +168,7 @@ object NEUItems {
manager.auctionManager.transformHypixelBazaarToNEUItemId(hypixelId).asInternalName()
fun NEUInternalName.getPriceOrNull(useSellingPrice: Boolean = false): Double? {
- if (equals("WISP_POTION")) {
+ if (this == NEUInternalName.WISP_POTION) {
return 20_000.0
}
val result = manager.auctionManager.getBazaarOrBin(asString(), useSellingPrice)
diff --git a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniItemTracker.kt b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniItemTracker.kt
index 6c6ca77ff..e2e7b5ae2 100644
--- a/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniItemTracker.kt
+++ b/src/main/java/at/hannibal2/skyhanni/utils/tracker/SkyHanniItemTracker.kt
@@ -8,12 +8,11 @@ import at.hannibal2.skyhanni.test.PriceSource
import at.hannibal2.skyhanni.utils.ChatUtils
import at.hannibal2.skyhanni.utils.CollectionUtils.addAsSingletonList
import at.hannibal2.skyhanni.utils.CollectionUtils.sortedDesc
-import at.hannibal2.skyhanni.utils.ItemUtils.getNameWithEnchantment
+import at.hannibal2.skyhanni.utils.ItemUtils.itemName
import at.hannibal2.skyhanni.utils.KeyboardManager
import at.hannibal2.skyhanni.utils.LorenzUtils
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.NumberUtil
import at.hannibal2.skyhanni.utils.NumberUtil.addSeparators
import at.hannibal2.skyhanni.utils.StringUtils.removeColor
@@ -29,7 +28,7 @@ class SkyHanniItemTracker<Data : ItemTrackerData>(
companion object {
- val SKYBLOCK_COIN by lazy { "SKYBLOCK_COIN".asInternalName() }
+ val SKYBLOCK_COIN = NEUInternalName.SKYBLOCK_COIN
}
private var lastClickDelay = 0L
@@ -106,7 +105,7 @@ class SkyHanniItemTracker<Data : ItemTrackerData>(
val cleanName = if (internalName == SKYBLOCK_COIN) {
data.getCoinName(itemProfit)
} else {
- internalName.getNameWithEnchantment()
+ internalName.itemName
}
val priceFormat = NumberUtil.format(price)