diff options
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/utils/ItemUtils.kt')
| -rw-r--r-- | src/main/java/at/hannibal2/skyhanni/utils/ItemUtils.kt | 75 |
1 files changed, 57 insertions, 18 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/utils/ItemUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/ItemUtils.kt index bedbebc46..fd2ca66e1 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/ItemUtils.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/ItemUtils.kt @@ -1,5 +1,6 @@ package at.hannibal2.skyhanni.utils +import at.hannibal2.skyhanni.test.command.CopyErrorCommand import at.hannibal2.skyhanni.utils.NEUInternalName.Companion.asInternalName import at.hannibal2.skyhanni.utils.NEUItems.getItemStack import at.hannibal2.skyhanni.utils.SkyBlockItemModifierUtils.isRecombobulated @@ -152,19 +153,39 @@ object ItemUtils { return nbt.getCompoundTag("SkullOwner").getString("Id") } - fun ItemStack.getItemRarity(): Int { - //todo make into an enum in future - return when (this.getLore().lastOrNull()?.take(4)) { - "§f§l" -> 0 // common - "§a§l" -> 1 // uncommon - "§9§l" -> 2 // rare - "§5§l" -> 3 // epic - "§6§l" -> 4 // legendary - "§d§l" -> 5 // mythic - "§b§l" -> 6 // divine - "§4§l" -> 7 // supreme - "§c§l" -> 8 // special/very special - else -> -1 // unknown + fun ItemStack.getItemRarityOrCommon() = getItemRarityOrNull() ?: LorenzRarity.COMMON + + fun ItemStack.getItemRarityOrNull(): LorenzRarity? { + if (isPet(cleanName())) { + return getPetRarity(this) + } + + val lore = getLore() + var lastLine = lore.lastOrNull() ?: return null + if (lastLine == "§eClick to inspect!") { + // Assuming inside ah browser + val index = lore.indexOfFirst { it.startsWith("§7Seller: ") } - 2 + if (index > 0) { + lastLine = lore[index] + } + } + return when (lastLine.take(4)) { + "§f§l" -> LorenzRarity.COMMON + "§a§l" -> LorenzRarity.UNCOMMON + "§9§l" -> LorenzRarity.RARE + "§5§l" -> LorenzRarity.EPIC + "§6§l" -> LorenzRarity.LEGENDARY + "§d§l" -> LorenzRarity.MYTHIC + "§b§l" -> LorenzRarity.DIVINE + "§4§l" -> LorenzRarity.SUPREME + "§c§l" -> LorenzRarity.SPECIAL + else -> { + CopyErrorCommand.logErrorState( + "Could not read rarity for item $name", + "getItemRarityOrNull not found for: ${getInternalName()}, name:'$name', lastLine:'$lastLine'" + ) + return null + } } } @@ -189,7 +210,12 @@ object ItemUtils { private val itemAmountCache = mutableMapOf<String, Pair<String, Int>>() - fun readItemAmount(input: String): Pair<String, Int>? { + fun readItemAmount(originalInput: String): Pair<String, Int>? { + // This workaround fixes 'Tubto Cacti I Book' + val input = if (originalInput.endsWith(" Book")) { + originalInput.replace(" Book", "") + } else originalInput + if (itemAmountCache.containsKey(input)) { return itemAmountCache[input]!! } @@ -234,10 +260,23 @@ object ItemUtils { return getItemStack().nameWithEnchantment ?: error("Could not find item name for $this") } + // TODO: Replace entirely some day fun getPetRarityOld(petStack: ItemStack?): Int { - val petInternalName = petStack?.getInternalName_old() - if (petInternalName == "NONE" || petInternalName == null) return -1 - val split = petInternalName.split(";") - return split.last().toInt() + val rarity = petStack?.getItemRarityOrNull() ?: return -1 + + return rarity.id + } + + private fun getPetRarity(pet: ItemStack): LorenzRarity? { + val rarityId = pet.getInternalName().asString().split(";").last().toInt() + val rarity = LorenzRarity.getById(rarityId) + val name = pet.name + if (rarity == null) { + CopyErrorCommand.logErrorState( + "Could not read rarity for pet $name", + "getPetRarity not found for: ${pet.getInternalName()}, name:'$name'" + ) + } + return rarity } }
\ No newline at end of file |
