diff options
author | hannibal2 <24389977+hannibal002@users.noreply.github.com> | 2024-02-25 08:15:04 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-25 08:15:04 +0100 |
commit | 16d6a47c85be560517505499df1fff6df9582c18 (patch) | |
tree | 8d23232cac7627cf39595dc6c5006944fd0aaec8 /src/main/java/at/hannibal2/skyhanni/utils | |
parent | 72fb024dc19d83e996a6aaf7cd0dc0183e3a0378 (diff) | |
download | skyhanni-16d6a47c85be560517505499df1fff6df9582c18.tar.gz skyhanni-16d6a47c85be560517505499df1fff6df9582c18.tar.bz2 skyhanni-16d6a47c85be560517505499df1fff6df9582c18.zip |
Fixed internal name resolving. #1046
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/utils')
3 files changed, 93 insertions, 88 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/utils/ItemNameResolver.kt b/src/main/java/at/hannibal2/skyhanni/utils/ItemNameResolver.kt new file mode 100644 index 000000000..d17f579ed --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/utils/ItemNameResolver.kt @@ -0,0 +1,84 @@ +package at.hannibal2.skyhanni.utils + +import at.hannibal2.skyhanni.utils.NEUInternalName.Companion.asInternalName +import at.hannibal2.skyhanni.utils.NumberUtil.romanToDecimal +import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher +import at.hannibal2.skyhanni.utils.StringUtils.removeColor +import io.github.moulberry.notenoughupdates.util.ItemResolutionQuery + +object ItemNameResolver { + private val itemNameCache = mutableMapOf<String, NEUInternalName>() // item name -> internal name + + internal fun getInternalNameOrNull(itemName: String): NEUInternalName? { + val lowercase = itemName.lowercase() + itemNameCache[lowercase]?.let { + return it + } + + if (itemName == "§cmissing repo item") { + return itemNameCache.getOrPut(lowercase) { NEUInternalName.MISSING_ITEM } + } + + resolveEnchantmentByName(itemName)?.let { + return itemNameCache.getOrPut(lowercase) { fixEnchantmentName(it) } + } + + val internalName = ItemResolutionQuery.findInternalNameByDisplayName(itemName, true)?.let { + + // This fixes a NEU bug with §9Hay Bale (cosmetic item) + // TODO remove workaround when this is fixed in neu + val rawInternalName = if (it == "HAY_BALE") "HAY_BLOCK" else it + rawInternalName.asInternalName() + } ?: run { + getInternalNameOrNullIgnoreCase(itemName) + } ?: return null + + itemNameCache[lowercase] = internalName + return internalName + } + + // Taken and edited from NEU + private fun resolveEnchantmentByName(enchantmentName: String) = + UtilsPatterns.enchantmentNamePattern.matchMatcher(enchantmentName) { + val name = group("name").trim { it <= ' ' } + val ultimate = group("format").lowercase().contains("§l") + ((if (ultimate && name != "Ultimate Wise") "ULTIMATE_" else "") + + turboCheck(name).replace(" ", "_").replace("-", "_").uppercase() + + ";" + group("level").romanToDecimal()) + } + + private fun turboCheck(text: String): String { + if (text == "Turbo-Cocoa") return "Turbo-Coco" + if (text == "Turbo-Cacti") return "Turbo-Cactus" + return text + } + + // Workaround for duplex + private val duplexPattern = "ULTIMATE_DUPLEX;(?<tier>.*)".toPattern() + + private fun fixEnchantmentName(originalName: String): NEUInternalName { + duplexPattern.matchMatcher(originalName) { + val tier = group("tier") + return "ULTIMATE_REITERATE;$tier".asInternalName() + } + // TODO USE SH-REPO + return originalName.asInternalName() + } + + private fun getInternalNameOrNullIgnoreCase(itemName: String): NEUInternalName? { + val lowercase = itemName.removeColor().lowercase() + itemNameCache[lowercase]?.let { + return it + } + + if (NEUItems.allItemsCache.isEmpty()) { + NEUItems.allItemsCache = NEUItems.readAllNeuItems() + } + NEUItems.allItemsCache[lowercase]?.let { + itemNameCache[lowercase] = it + return it + } + + return null + } +} diff --git a/src/main/java/at/hannibal2/skyhanni/utils/NEUInternalName.kt b/src/main/java/at/hannibal2/skyhanni/utils/NEUInternalName.kt index 73fc82622..368877079 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/NEUInternalName.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/NEUInternalName.kt @@ -13,11 +13,14 @@ class NEUInternalName private constructor(private val internalName: String) { val SKYBLOCK_COIN = "SKYBLOCK_COIN".asInternalName() fun String.asInternalName(): NEUInternalName { - val internalName = uppercase() + val internalName = uppercase().replace(" ", "_") return map.getOrPut(internalName) { NEUInternalName(internalName) } } - fun fromItemName(itemName: String) = NEUItems.getInternalNameFromItemName(itemName) + fun fromItemNameOrNull(itemName: String): NEUInternalName? = ItemNameResolver.getInternalNameOrNull(itemName) + + fun fromItemName(itemName: String): NEUInternalName = + fromItemNameOrNull(itemName) ?: throw Error("NEUInternalName is null for item name '$itemName'") } fun asString() = internalName diff --git a/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt b/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt index c96fb36a3..69f1e4fc3 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt @@ -8,8 +8,6 @@ import at.hannibal2.skyhanni.test.command.ErrorManager import at.hannibal2.skyhanni.utils.ItemBlink.checkBlinkItem import at.hannibal2.skyhanni.utils.ItemUtils.getInternalName import at.hannibal2.skyhanni.utils.NEUInternalName.Companion.asInternalName -import at.hannibal2.skyhanni.utils.NumberUtil.romanToDecimal -import at.hannibal2.skyhanni.utils.StringUtils.matchMatcher import at.hannibal2.skyhanni.utils.StringUtils.removeColor import com.google.gson.JsonObject import com.google.gson.JsonPrimitive @@ -37,13 +35,11 @@ import org.lwjgl.opengl.GL11 object NEUItems { val manager: NEUManager get() = NotEnoughUpdates.INSTANCE.manager - private val itemNameCache = mutableMapOf<String, NEUInternalName>() // item name -> internal name private val multiplierCache = mutableMapOf<NEUInternalName, Pair<NEUInternalName, Int>>() private val recipesCache = mutableMapOf<NEUInternalName, Set<NeuRecipe>>() private val ingredientsCache = mutableMapOf<NeuRecipe, Set<Ingredient>>() var allItemsCache = mapOf<String, NEUInternalName>() // item name -> internal name - var allInternalNames = mutableListOf<NEUInternalName>() val ignoreItemsFilter = MultiFilter() private val fallbackItem by lazy { @@ -60,90 +56,21 @@ object NEUItems { ignoreItemsFilter.load(ignoredItems) } - // TODO remove @Deprecated("Use NEUInternalName rather than String", ReplaceWith("getInternalNameFromItemName()")) - fun getRawInternalName(itemName: String): String { - return getInternalNameFromItemName(itemName).asString() - } - - fun getInternalNameFromItemName(itemName: String): NEUInternalName { - return getInternalNameOrNull(itemName) ?: throw Error("Internal name is null for '$itemName'") - } - - fun getInternalNameOrNullIgnoreCase(itemName: String): NEUInternalName? { - val lowercase = itemName.removeColor().lowercase() - if (itemNameCache.containsKey(lowercase)) { - return itemNameCache[lowercase]!! - } - - if (allItemsCache.isEmpty()) { - allItemsCache = readAllNeuItems() - } - allItemsCache[lowercase]?.let { - itemNameCache[lowercase] = it - return it - } - - return null - } + fun getRawInternalName(itemName: String): String = NEUInternalName.fromItemName(itemName).asString() fun readAllNeuItems(): Map<String, NEUInternalName> { - allInternalNames.clear() val map = mutableMapOf<String, NEUInternalName>() for (rawInternalName in allNeuRepoItems().keys) { val name = manager.createItem(rawInternalName).displayName.removeColor().lowercase() val internalName = rawInternalName.asInternalName() map[name] = internalName - allInternalNames.add(internalName) } return map } - fun getInternalNameOrNull(itemName: String): NEUInternalName? { - val lowercase = itemName.lowercase() - if (itemNameCache.containsKey(lowercase)) { - return itemNameCache[lowercase]!! - } - - if (itemName == "§cmissing repo item") { - itemNameCache[lowercase] = NEUInternalName.MISSING_ITEM - return NEUInternalName.MISSING_ITEM - } - - resolveEnchantmentByName(itemName)?.let { - val enchantmentName = fixEnchantmentName(it) - itemNameCache[itemName] = enchantmentName - return enchantmentName - } - var rawInternalName = ItemResolutionQuery.findInternalNameByDisplayName(itemName, false) ?: return null - - // This fixes a NEU bug with §9Hay Bale (cosmetic item) - // TODO remove workaround when this is fixed in neu - rawInternalName = if (rawInternalName == "HAY_BALE") "HAY_BLOCK" else rawInternalName - - val internalName = rawInternalName.asInternalName() - - itemNameCache[lowercase] = internalName - return internalName - } - - // Workaround for duplex - private val duplexPattern = "ULTIMATE_DUPLEX;(?<tier>.*)".toPattern() - - private fun fixEnchantmentName(originalName: String): NEUInternalName { - duplexPattern.matchMatcher(originalName) { - val tier = group("tier") - return "ULTIMATE_REITERATE;$tier".asInternalName() - } - // TODO USE SH-REPO - return originalName.asInternalName() - } - - private fun turboCheck(text: String): String { - if (text == "Turbo-Cocoa") return "Turbo-Coco" - if (text == "Turbo-Cacti") return "Turbo-Cactus" - return text - } + @Deprecated("moved", ReplaceWith("NEUInternalName.fromItemNameOrNull(itemName)")) + fun getInternalNameOrNull(itemName: String): NEUInternalName? = NEUInternalName.fromItemNameOrNull(itemName) fun getInternalName(itemStack: ItemStack): String? = ItemResolutionQuery(manager) .withCurrentGuiContext() @@ -184,6 +111,7 @@ object NEUItems { return getNpcPriceOrNull() } + @Deprecated("Use NEUInternalName", ReplaceWith("internalName.asInternalName().getPrice(useSellingPrice)")) fun getPrice(internalName: String, useSellingPrice: Boolean = false): Double = internalName.asInternalName().getPrice(useSellingPrice) @@ -355,16 +283,6 @@ object NEUItems { return false } - // Taken and edited from NEU - private fun resolveEnchantmentByName(enchantmentName: String) = - UtilsPatterns.enchantmentNamePattern.matchMatcher(enchantmentName) { - val name = group("name").trim { it <= ' ' } - val ultimate = group("format").lowercase().contains("§l") - ((if (ultimate && name != "Ultimate Wise") "ULTIMATE_" else "") - + turboCheck(name).replace(" ", "_").replace("-", "_").uppercase() - + ";" + group("level").romanToDecimal()) - } - // Uses NEU fun saveNBTData(item: ItemStack, removeLore: Boolean = true): String { val jsonObject = manager.getJsonForItem(item) |