diff options
| author | hannibal2 <24389977+hannibal002@users.noreply.github.com> | 2024-02-19 13:29:45 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-02-19 13:29:45 +0100 |
| commit | 7d9a6a101071c75773668e0881b37466506307dd (patch) | |
| tree | 0f46abdd4375d2eeb1a5c8154a2cb72046fb7621 /src/main/java/at/hannibal2/skyhanni/utils | |
| parent | 4bb1419b90e424ac824042188f67a371a5c276da (diff) | |
| download | skyhanni-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')
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) |
