aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/utils
diff options
context:
space:
mode:
authorhannibal2 <24389977+hannibal002@users.noreply.github.com>2024-02-25 08:15:04 +0100
committerGitHub <noreply@github.com>2024-02-25 08:15:04 +0100
commit16d6a47c85be560517505499df1fff6df9582c18 (patch)
tree8d23232cac7627cf39595dc6c5006944fd0aaec8 /src/main/java/at/hannibal2/skyhanni/utils
parent72fb024dc19d83e996a6aaf7cd0dc0183e3a0378 (diff)
downloadskyhanni-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')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/ItemNameResolver.kt84
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/NEUInternalName.kt7
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt90
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)