From ca157ab95ff0271df59ee808e05fcdb7a6e835b1 Mon Sep 17 00:00:00 2001 From: hannibal2 <24389977+hannibal00212@users.noreply.github.com> Date: Thu, 10 Aug 2023 10:19:39 +0200 Subject: [PATCH] Using NEUInternalName in MinionCraftHelper --- .../features/bingo/MinionCraftHelper.kt | 67 ++++++++++--------- .../skyhanni/utils/NEUInternalName.kt | 2 + .../at/hannibal2/skyhanni/utils/NEUItems.kt | 44 ++++++------ 3 files changed, 60 insertions(+), 53 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/features/bingo/MinionCraftHelper.kt b/src/main/java/at/hannibal2/skyhanni/features/bingo/MinionCraftHelper.kt index ae956f2d801c..4cfe6abfeddd 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/bingo/MinionCraftHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/bingo/MinionCraftHelper.kt @@ -3,9 +3,12 @@ package at.hannibal2.skyhanni.features.bingo import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.data.TitleUtils import at.hannibal2.skyhanni.events.* -import at.hannibal2.skyhanni.utils.ItemUtils.getInternalName_old +import at.hannibal2.skyhanni.utils.ItemUtils.getInternalName +import at.hannibal2.skyhanni.utils.ItemUtils.getItemName import at.hannibal2.skyhanni.utils.ItemUtils.name import at.hannibal2.skyhanni.utils.LorenzUtils +import at.hannibal2.skyhanni.utils.NEUInternalName +import at.hannibal2.skyhanni.utils.NEUInternalName.Companion.asInternalName import at.hannibal2.skyhanni.utils.NEUItems import at.hannibal2.skyhanni.utils.NumberUtil.romanToDecimalIfNeeded import at.hannibal2.skyhanni.utils.RenderUtils.renderStrings @@ -22,9 +25,9 @@ class MinionCraftHelper { private var display = emptyList() private var hasMinionInInventory = false private var hasItemsForMinion = false - private val tierOneMinions = mutableListOf() - private val tierOneMinionsDone = mutableListOf() - private val allIngredients = mutableListOf() + private val tierOneMinions = mutableListOf() + private val tierOneMinionsDone = mutableListOf() + private val allIngredients = mutableListOf() private val alreadyNotified = mutableListOf() @SubscribeEvent @@ -63,8 +66,8 @@ class MinionCraftHelper { } private fun drawDisplay( - minions: MutableMap, - otherItems: MutableMap, + minions: MutableMap, + otherItems: MutableMap, ): MutableList { val newDisplay = mutableListOf() for ((minionName, minionId) in minions) { @@ -82,15 +85,15 @@ class MinionCraftHelper { tierOneMinionsDone.clear() } - private fun loadFromInventory(mainInventory: Array): Pair, MutableMap> { + private fun loadFromInventory(mainInventory: Array): Pair, MutableMap> { init() - val minions = mutableMapOf() - val otherItems = mutableMapOf() + val minions = mutableMapOf() + val otherItems = mutableMapOf() for (item in mainInventory) { val name = item?.name?.removeColor() ?: continue - val rawId = item.getInternalName_old() + val rawId = item.getInternalName() if (isMinionName(name)) { minions[name] = rawId } @@ -101,7 +104,7 @@ class MinionCraftHelper { for (item in mainInventory) { val name = item?.name?.removeColor() ?: continue - val rawId = item.getInternalName_old() + val rawId = item.getInternalName() if (!isMinionName(name)) { if (!allIngredients.contains(rawId)) continue if (!isAllowed(allMinions, rawId)) continue @@ -116,14 +119,14 @@ class MinionCraftHelper { return Pair(minions, otherItems) } - private fun isAllowed(allMinions: List, internalName: String): Boolean { + private fun isAllowed(allMinions: List, internalName: NEUInternalName): Boolean { val a = NEUItems.getMultiplier(internalName) for (minion in allMinions) { val recipes = NEUItems.getRecipes(minion) for (recipe in recipes) { for (ingredient in recipe.ingredients) { - val ingredientInternalName = ingredient.internalItemId + val ingredientInternalName = ingredient.internalItemId.asInternalName() if (ingredientInternalName == internalName) return true val b = NEUItems.getMultiplier(ingredientInternalName) @@ -140,19 +143,20 @@ class MinionCraftHelper { allIngredients.clear() for (internalId in NotEnoughUpdates.INSTANCE.manager.itemInformation.keys) { - if (internalId.endsWith("_GENERATOR_1")) { + val internalName = internalId.asInternalName() + if (internalName.endsWith("_GENERATOR_1")) { if (internalId == "REVENANT_GENERATOR_1") continue if (internalId == "TARANTULA_GENERATOR_1") continue if (internalId == "VOIDLING_GENERATOR_1") continue - tierOneMinions.add(internalId) + tierOneMinions.add(internalName) } - if (internalId.contains("_GENERATOR_")) { - for (recipe in NEUItems.getRecipes(internalId)) { + if (internalName.contains("_GENERATOR_")) { + for (recipe in NEUItems.getRecipes(internalName)) { if (recipe !is CraftingRecipe) continue for (ingredient in recipe.ingredients) { - val id = ingredient.internalItemId + val id = ingredient.internalItemId.asInternalName() if (!id.contains("_GENERATOR_")) { if (!allIngredients.contains(id)) { allIngredients.add(id) @@ -164,11 +168,11 @@ class MinionCraftHelper { } } - private fun firstMinionTier(otherItems: Map, minions: MutableMap) { + private fun firstMinionTier(otherItems: Map, minions: MutableMap) { val help = otherItems.filter { !it.key.startsWith("WOOD_") } val tierOneMinionsFiltered = tierOneMinions.filter { it !in tierOneMinionsDone } for (minionId in tierOneMinionsFiltered) { - val prefix = minionId.dropLast(1) + val prefix = minionId.asString().dropLast(1) if (minions.any { it.value.startsWith(prefix) }) { tierOneMinionsDone.add(minionId) } @@ -176,7 +180,7 @@ class MinionCraftHelper { for (minionId in tierOneMinionsFiltered) { for (recipe in NEUItems.getRecipes(minionId)) { if (recipe !is CraftingRecipe) continue - if (recipe.ingredients.any { help.contains(it.internalItemId) }) { + if (recipe.ingredients.any { help.contains(it.internalItemId.asInternalName()) }) { val name = recipe.output.itemStack.name!!.removeColor() val abc = name.replace(" I", " 0") minions[abc] = minionId.replace("_1", "_0") @@ -188,8 +192,8 @@ class MinionCraftHelper { private fun addMinion( name: String, minionTier: Int, - minionId: String, - otherItems: MutableMap, + minionId: NEUInternalName, + otherItems: MutableMap, newDisplay: MutableList, ) { val nextTier = minionTier + 1 @@ -199,12 +203,12 @@ class MinionCraftHelper { for (recipe in NEUItems.getRecipes(nextMinionId)) { if (recipe !is CraftingRecipe) continue val output = recipe.output - val internalItemId = output.internalItemId + val internalItemId = output.internalItemId.asInternalName() if (!internalItemId.contains("_GENERATOR_")) continue - val map = mutableMapOf() + val map = mutableMapOf() for (input in recipe.inputs) { - val itemId = input.internalItemId - if (minionId != itemId) { + val itemId = input.internalItemId.asInternalName() + if (minionId.equals(itemId)) { val count = input.count.toInt() val old = map.getOrDefault(itemId, 0) map[itemId] = old + count @@ -216,7 +220,7 @@ class MinionCraftHelper { val needAmount = need * multiplier val have = otherItems.getOrDefault(itemId, 0) val percentage = have.toDouble() / needAmount - val itemName = NEUItems.getItemStack(rawId).name ?: "§cName??§f" + val itemName = rawId.getItemName() if (percentage >= 1) { val color = if (itemId.startsWith("WOOD_")) "§7" else "§a" newDisplay.add(" $itemName§8: ${color}DONE") @@ -252,8 +256,8 @@ class MinionCraftHelper { alreadyNotified.add(minionName) } - private fun String.addOneToId(): String { - val lastText = split("_").last() + private fun NEUInternalName.addOneToId(): NEUInternalName { + val lastText = asString().split("_").last() val next = lastText.toInt() + 1 return replace(lastText, "" + next) } @@ -269,7 +273,8 @@ class MinionCraftHelper { val name = b.name ?: continue if (!name.startsWith("§e")) continue - val internalName = NEUItems.getRawInternalName("$name I").replace("MINION", "GENERATOR").replace(";", "_") + val rawInternalName = NEUInternalName.fromItemName("$name I").asString() + val internalName = rawInternalName.replace("MINION", "GENERATOR").replace(";", "_").asInternalName() if (!tierOneMinionsDone.contains(internalName)) { tierOneMinionsDone.add(internalName) } diff --git a/src/main/java/at/hannibal2/skyhanni/utils/NEUInternalName.kt b/src/main/java/at/hannibal2/skyhanni/utils/NEUInternalName.kt index acf2aa092efb..d4499ab12741 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/NEUInternalName.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/NEUInternalName.kt @@ -12,6 +12,8 @@ class NEUInternalName private constructor(private val internalName: String) { val internalName = uppercase() return map.getOrPut(internalName) { NEUInternalName(internalName) } } + + fun fromItemName(itemName: String) = NEUItems.getInternalNameFromItemName(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 b706bfb689c3..0b8e37935a28 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt @@ -31,8 +31,8 @@ import java.util.regex.Pattern object NEUItems { val manager: NEUManager get() = NotEnoughUpdates.INSTANCE.manager private val itemNameCache = mutableMapOf() // item name -> internal name - private val multiplierCache = mutableMapOf>() - private val recipesCache = mutableMapOf>() + private val multiplierCache = mutableMapOf>() + private val recipesCache = mutableMapOf>() private val enchantmentNamePattern = Pattern.compile("^(?(?:§.)+)(?[^§]+) (?[IVXL]+)$") var allItemsCache = mapOf() // item name -> internal name var allInternalNames = mutableListOf() @@ -224,12 +224,12 @@ object NEUItems { GlStateManager.popMatrix() } - fun getMultiplier(internalName: NEUInternalName, tryCount: Int = 0): Pair { - val pair = getMultiplier(internalName.asString(), tryCount) - return Pair(pair.first.asInternalName(), pair.second) + fun getMultiplier(internalName: String, tryCount: Int = 0): Pair { + val pair = getMultiplier(internalName.asInternalName(), tryCount) + return Pair(pair.first.asString(), pair.second) } - fun getMultiplier(internalName: String, tryCount: Int = 0): Pair { + fun getMultiplier(internalName: NEUInternalName, tryCount: Int = 0): Pair { if (multiplierCache.contains(internalName)) { return multiplierCache[internalName]!! } @@ -242,34 +242,34 @@ object NEUItems { for (recipe in getRecipes(internalName)) { if (recipe !is CraftingRecipe) continue - val map = mutableMapOf() + val map = mutableMapOf() for (ingredient in recipe.ingredients) { val count = ingredient.count.toInt() - var internalItemId = ingredient.internalItemId + var internalItemId = ingredient.internalItemId.asInternalName() // ignore cactus green - if (internalName == "ENCHANTED_CACTUS_GREEN") { - if (internalItemId == "INK_SACK-2") { - internalItemId = "CACTUS" + if (internalName == "ENCHANTED_CACTUS_GREEN".asInternalName()) { + if (internalItemId == "INK_SACK-2".asInternalName()) { + internalItemId = "CACTUS".asInternalName() } } // ignore wheat in enchanted cookie - if (internalName == "ENCHANTED_COOKIE") { - if (internalItemId == "WHEAT") { + if (internalName == "ENCHANTED_COOKIE".asInternalName()) { + if (internalItemId == "WHEAT".asInternalName()) { continue } } // ignore golden carrot in enchanted golden carrot - if (internalName == "ENCHANTED_GOLDEN_CARROT") { - if (internalItemId == "GOLDEN_CARROT") { + if (internalName == "ENCHANTED_GOLDEN_CARROT".asInternalName()) { + if (internalItemId == "GOLDEN_CARROT".asInternalName()) { continue } } // ignore rabbit hide in leather - if (internalName == "LEATHER") { - if (internalItemId == "RABBIT_HIDE") { + if (internalName == "LEATHER".asInternalName()) { + if (internalItemId == "RABBIT_HIDE".asInternalName()) { continue } } @@ -299,12 +299,12 @@ object NEUItems { return result } - fun getRecipes(minionId: String): Set { - if (recipesCache.contains(minionId)) { - return recipesCache[minionId]!! + fun getRecipes(internalName: NEUInternalName): Set { + if (recipesCache.contains(internalName)) { + return recipesCache[internalName]!! } - val recipes = manager.getRecipesFor(minionId) - recipesCache[minionId] = recipes + val recipes = manager.getRecipesFor(internalName.asString()) + recipesCache[internalName] = recipes return recipes }