summaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/utils
diff options
context:
space:
mode:
authorhannibal2 <24389977+hannibal00212@users.noreply.github.com>2023-07-29 20:20:41 +0200
committerhannibal2 <24389977+hannibal00212@users.noreply.github.com>2023-07-29 20:20:41 +0200
commit0662bb696bb5f003a8c0edc14e8d54dac19f78dc (patch)
tree3e42b1e4c3f70fda25cc312e5792c14084b211b8 /src/main/java/at/hannibal2/skyhanni/utils
parente10493b7318931938f03ec56f106cf5e27225fa5 (diff)
downloadskyhanni-0662bb696bb5f003a8c0edc14e8d54dac19f78dc.tar.gz
skyhanni-0662bb696bb5f003a8c0edc14e8d54dac19f78dc.tar.bz2
skyhanni-0662bb696bb5f003a8c0edc14e8d54dac19f78dc.zip
Created NEUInternalName, fixed collection counter
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/utils')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/ItemUtils.kt6
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/NEUInternalName.kt28
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt102
3 files changed, 96 insertions, 40 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/utils/ItemUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/ItemUtils.kt
index 9b06dfb8d..1683f90e0 100644
--- a/src/main/java/at/hannibal2/skyhanni/utils/ItemUtils.kt
+++ b/src/main/java/at/hannibal2/skyhanni/utils/ItemUtils.kt
@@ -117,7 +117,11 @@ object ItemUtils {
fun ItemStack.getInternalNameOrNull() = getInternalName().takeIf { it != "" }
- fun ItemStack.getInternalName(): String {
+ fun ItemStack.getInternalNameOrNull_new() = getInternalName_new().takeIf { it.asString() != "" }
+
+ fun ItemStack.getInternalName_new() = NEUInternalName.from(getInternalName())
+
+ fun ItemStack.getInternalName(): String {
if (name == "§fWisp's Ice-Flavored Water I Splash Potion") {
return "WISP_POTION"
}
diff --git a/src/main/java/at/hannibal2/skyhanni/utils/NEUInternalName.kt b/src/main/java/at/hannibal2/skyhanni/utils/NEUInternalName.kt
new file mode 100644
index 000000000..8e9b8efc2
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/utils/NEUInternalName.kt
@@ -0,0 +1,28 @@
+package at.hannibal2.skyhanni.utils
+
+class NEUInternalName private constructor(private val internalName: String) {
+
+ companion object {
+ private val map = mutableMapOf<String, NEUInternalName>()
+
+ fun from(name: String): NEUInternalName {
+ val internalName = name.uppercase()
+ return map.getOrPut(internalName) { NEUInternalName(internalName) }
+ }
+ }
+
+ fun asString() = internalName
+
+ override fun equals(other: Any?): Boolean {
+ if (other is NEUInternalName) {
+ return internalName == other.internalName
+ }
+ return super.equals(other)
+ }
+
+ override fun toString(): String {
+ return "internalName:$internalName"
+ }
+
+// fun equals(other: String) = internalName == other
+} \ No newline at end of file
diff --git a/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt b/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt
index 077993544..f22f26112 100644
--- a/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt
+++ b/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt
@@ -29,12 +29,12 @@ import java.util.regex.Pattern
object NEUItems {
val manager: NEUManager get() = NotEnoughUpdates.INSTANCE.manager
- private val itemNameCache = mutableMapOf<String, String>() // item name -> internal name
+ private val itemNameCache = mutableMapOf<String, NEUInternalName>() // item name -> internal name
private val multiplierCache = mutableMapOf<String, Pair<String, Int>>()
private val recipesCache = mutableMapOf<String, Set<NeuRecipe>>()
private val enchantmentNamePattern = Pattern.compile("^(?<format>(?:§.)+)(?<name>[^§]+) (?<level>[IVXL]+)$")
- var allItemsCache = mapOf<String, String>() // item name -> internal name
- var allInternalNames = mutableListOf<String>()
+ var allItemsCache = mapOf<String, NEUInternalName>() // item name -> internal name
+ var allInternalNames = mutableListOf<NEUInternalName>()
private val fallbackItem by lazy {
Utils.createItemStack(
@@ -45,10 +45,14 @@ object NEUItems {
}
fun getInternalName(itemName: String): String {
- return getInternalNameOrNull(itemName) ?: throw Error("getInternalName is null for '$itemName'")
+ return getInternalNameOrNull_new(itemName)?.asString() ?: throw Error("getInternalName is null for '$itemName'")
}
- fun getInternalNameOrNullIgnoreCase(itemName: String): String? {
+ fun getInternalName_new(itemName: String): NEUInternalName {
+ return getInternalNameOrNull_new(itemName) ?: throw Error("getInternalName is null for '$itemName'")
+ }
+
+ fun getInternalNameOrNullIgnoreCase(itemName: String): NEUInternalName? {
val lowercase = itemName.removeColor().lowercase()
if (itemNameCache.containsKey(lowercase)) {
return itemNameCache[lowercase]!!
@@ -65,26 +69,30 @@ object NEUItems {
return null
}
- fun readAllNeuItems(): Map<String, String> {
+ fun readAllNeuItems(): Map<String, NEUInternalName> {
allInternalNames.clear()
- val map = mutableMapOf<String, String>()
- for (internalName in manager.itemInformation.keys) {
- val name = manager.createItem(internalName).displayName.removeColor().lowercase()
+ val map = mutableMapOf<String, NEUInternalName>()
+ for (internalNameRaw in manager.itemInformation.keys) {
+ val name = manager.createItem(internalNameRaw).displayName.removeColor().lowercase()
+ val internalName = NEUInternalName.from(internalNameRaw)
map[name] = internalName
allInternalNames.add(internalName)
}
return map
}
- fun getInternalNameOrNull(itemName: String): String? {
+ fun getInternalNameOrNull(itemName: String) = getInternalNameOrNull_new(itemName)?.asString()
+
+ fun getInternalNameOrNull_new(itemName: String): NEUInternalName? {
val lowercase = itemName.lowercase()
if (itemNameCache.containsKey(lowercase)) {
return itemNameCache[lowercase]!!
}
if (itemName == "§cmissing repo item") {
- itemNameCache[lowercase] = "MISSING_ITEM"
- return "MISSING_ITEM"
+ val name = NEUInternalName.from("MISSING_ITEM")
+ itemNameCache[lowercase] = name
+ return name
}
resolveEnchantmentByName(itemName)?.let {
@@ -92,26 +100,28 @@ object NEUItems {
itemNameCache[itemName] = enchantmentName
return enchantmentName
}
- var internalName = ItemResolutionQuery.findInternalNameByDisplayName(itemName, false) ?: return null
+ var internalNameRaw = 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
- if (internalName == "HAY_BALE") {
- internalName = "HAY_BLOCK"
+ val internalName = if (internalNameRaw == "HAY_BALE") {
+ NEUInternalName.from("HAY_BLOCK")
+ } else {
+ NEUInternalName.from(internalNameRaw)
}
itemNameCache[lowercase] = internalName
return internalName
}
- private fun fixEnchantmentName(originalName: String): String {
+ private fun fixEnchantmentName(originalName: String): NEUInternalName {
// Workaround for duplex
"ULTIMATE_DUPLEX;(?<tier>.*)".toPattern().matchMatcher(originalName) {
val tier = group("tier")
- return "ULTIMATE_REITERATE;$tier"
+ return NEUInternalName.from("ULTIMATE_REITERATE;$tier")
}
- return originalName
+ return NEUInternalName.from(originalName)
}
private fun turboCheck(text: String): String {
@@ -136,23 +146,27 @@ object NEUItems {
return price
}
- fun getPrice(internalName: String): Double {
- if (internalName == "WISP_POTION") {
+ fun getPrice(internalName: NEUInternalName): Double {
+ if (internalName.asString() == "WISP_POTION") {
return 20_000.0
}
return getPrice(internalName, false)
}
- fun transHypixelNameToInternalName(hypixelId: String): String =
- manager.auctionManager.transformHypixelBazaarToNEUItemId(hypixelId)
+ fun getPrice(internalName: String) = getPrice(NEUInternalName.from(internalName))
- fun getPrice(internalName: String, useSellingPrice: Boolean): Double {
- val result = manager.auctionManager.getBazaarOrBin(internalName, useSellingPrice)
+ fun transHypixelNameToInternalName(hypixelId: String): NEUInternalName {
+ val name = manager.auctionManager.transformHypixelBazaarToNEUItemId(hypixelId)
+ return NEUInternalName.from(name)
+ }
+
+ fun getPrice(internalName: NEUInternalName, useSellingPrice: Boolean): Double {
+ val result = manager.auctionManager.getBazaarOrBin(internalName.asString(), useSellingPrice)
if (result == -1.0) {
- if (internalName == "JACK_O_LANTERN") {
+ if (internalName.asString() == "JACK_O_LANTERN") {
return getPrice("PUMPKIN", useSellingPrice) + 1
}
- if (internalName == "GOLDEN_CARROT") {
+ if (internalName.asString() == "GOLDEN_CARROT") {
// 6.8 for some players
return 7.0 // NPC price
}
@@ -160,22 +174,32 @@ object NEUItems {
return result
}
- fun getItemStackOrNull(internalName: String) = ItemResolutionQuery(manager)
- .withKnownInternalName(internalName)
+ fun getPrice(internalName: String, useSellingPrice: Boolean): Double {
+ return getPrice(NEUInternalName.from(internalName), useSellingPrice)
+ }
+
+ fun getItemStackOrNull(internalName: NEUInternalName) = ItemResolutionQuery(manager)
+ .withKnownInternalName(internalName.asString())
.resolveToItemStack()?.copy()
- fun getItemStack(internalName: String, definite: Boolean = false): ItemStack = getItemStackOrNull(internalName) ?: run {
- if (definite) {
- Utils.showOutdatedRepoNotification()
+ fun getItemStackOrNull(internalName: String) = getItemStackOrNull(NEUInternalName.from(internalName))
+
+ fun getItemStack(internalName: String, definite: Boolean = false): ItemStack =
+ getItemStack(NEUInternalName.from(internalName), definite)
+
+ fun getItemStack(internalName: NEUInternalName, definite: Boolean = false): ItemStack =
+ getItemStackOrNull(internalName) ?: run {
+ if (definite) {
+ Utils.showOutdatedRepoNotification()
+ }
+ CopyErrorCommand.logError(
+ IllegalStateException("Something went wrong!"),
+ "Encountered an error getting the item for §7$internalName§c. " +
+ "This may be because your NEU repo is outdated. Please ask in the SkyHanni " +
+ "Discord if this is the case"
+ )
+ fallbackItem
}
- CopyErrorCommand.logError(
- IllegalStateException("Something went wrong!"),
- "Encountered an error getting the item for §7$internalName§c. " +
- "This may be because your NEU repo is outdated. Please ask in the SkyHanni " +
- "Discord if this is the case"
- )
- fallbackItem
- }
fun isVanillaItem(item: ItemStack) = manager.auctionManager.isVanillaItem(item.getInternalName())