blob: 3a3bc939704b663dcb0d4106c916e79eadf62331 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
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
}
}
|