aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/utils/ItemUtils.kt
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/utils/ItemUtils.kt')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/ItemUtils.kt75
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