From b0f4a294663c1c3c0a4b32ce4605bfc04e1c3311 Mon Sep 17 00:00:00 2001 From: Walker Selby Date: Tue, 24 Oct 2023 17:57:10 +0100 Subject: [PATCH 1/3] Refactor MinionCraftHelper to use NEUInternalName --- .../features/bingo/MinionCraftHelper.kt | 76 ++++++++++--------- 1 file changed, 40 insertions(+), 36 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 1470ace28872..d8d1a16b6701 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/bingo/MinionCraftHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/bingo/MinionCraftHelper.kt @@ -6,9 +6,12 @@ import at.hannibal2.skyhanni.events.InventoryFullyOpenedEvent import at.hannibal2.skyhanni.events.LorenzTickEvent import at.hannibal2.skyhanni.events.LorenzWorldChangeEvent import at.hannibal2.skyhanni.events.ProfileJoinEvent -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 @@ -27,9 +30,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 @@ -67,8 +70,8 @@ class MinionCraftHelper { } private fun drawDisplay( - minions: MutableMap, - otherItems: MutableMap, + minions: MutableMap, + otherItems: MutableMap, ): MutableList { val newDisplay = mutableListOf() for ((minionName, minionId) in minions) { @@ -86,15 +89,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 } @@ -105,7 +108,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 @@ -120,14 +123,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) @@ -144,21 +147,22 @@ class MinionCraftHelper { allIngredients.clear() for (internalId in NotEnoughUpdates.INSTANCE.manager.itemInformation.keys) { - if (internalId.endsWith("_GENERATOR_1")) { - if (internalId == "REVENANT_GENERATOR_1") continue - if (internalId == "TARANTULA_GENERATOR_1") continue - if (internalId == "VOIDLING_GENERATOR_1") continue - if (internalId == "INFERNO_GENERATOR_1") continue - if (internalId == "VAMPIRE_GENERATOR_1") continue - tierOneMinions.add(internalId) + val internalName = internalId.asInternalName() + if (internalName.endsWith("_GENERATOR_1")) { + if (internalName == "REVENANT_GENERATOR_1".asInternalName() || + internalName == "TARANTULA_GENERATOR_1".asInternalName() || + internalName == "VOIDLING_GENERATOR_1".asInternalName() || + internalName == "INFERNO_GENERATOR_1".asInternalName() || + internalName == "VAMPIRE_GENERATOR_1".asInternalName()) continue + 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_") && !allIngredients.contains(id)) { allIngredients.add(id) } @@ -168,11 +172,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) } @@ -180,7 +184,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") @@ -192,8 +196,8 @@ class MinionCraftHelper { private fun addMinion( name: String, minionTier: Int, - minionId: String, - otherItems: MutableMap, + minionId: NEUInternalName, + otherItems: MutableMap, newDisplay: MutableList, ) { val nextTier = minionTier + 1 @@ -203,11 +207,11 @@ 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 + val itemId = input.internalItemId.asInternalName() if (minionId != itemId) { val count = input.count.toInt() val old = map.getOrDefault(itemId, 0) @@ -220,7 +224,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") @@ -256,8 +260,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) } @@ -272,8 +276,8 @@ class MinionCraftHelper { for ((_, b) in event.inventoryItems) { 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) } From a078ada082f59e26298dea5918b6270e189e380b Mon Sep 17 00:00:00 2001 From: Walker Selby Date: Tue, 24 Oct 2023 17:57:34 +0100 Subject: [PATCH 2/3] Refactor some functions in NEUItems to use NEUInternalName --- .../at/hannibal2/skyhanni/utils/NEUItems.kt | 41 ++++++++++--------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt b/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt index fdbe8c995399..e93acb38517b 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt @@ -32,8 +32,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,11 +224,6 @@ object NEUItems { } 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 { if (multiplierCache.contains(internalName)) { return multiplierCache[internalName]!! } @@ -241,27 +236,27 @@ 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" && internalItemId == "INK_SACK-2") { - internalItemId = "CACTUS" + if (internalName == "ENCHANTED_CACTUS_GREEN".asInternalName() && internalItemId == "INK_SACK-2".asInternalName()) { + internalItemId = "CACTUS".asInternalName() } // ignore wheat in enchanted cookie - if (internalName == "ENCHANTED_COOKIE" && internalItemId == "WHEAT") { + if (internalName == "ENCHANTED_COOKIE".asInternalName() && internalItemId == "WHEAT".asInternalName()) { continue } // ignore golden carrot in enchanted golden carrot - if (internalName == "ENCHANTED_GOLDEN_CARROT" && internalItemId == "GOLDEN_CARROT") { + if (internalName == "ENCHANTED_GOLDEN_CARROT".asInternalName() && internalItemId == "GOLDEN_CARROT".asInternalName()) { continue } // ignore rabbit hide in leather - if (internalName == "LEATHER" && internalItemId == "RABBIT_HIDE") { + if (internalName == "LEATHER".asInternalName() && internalItemId == "RABBIT_HIDE".asInternalName()) { continue } @@ -284,14 +279,20 @@ object NEUItems { val result = Pair(internalName, 1) multiplierCache[internalName] = result return result + + } + + fun getMultiplier(internalName: String, tryCount: Int = 0): Pair { + val pair = getMultiplier(internalName.asInternalName(), tryCount) + return Pair(pair.first.asString(), pair.second) } - 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 } @@ -330,4 +331,4 @@ object NEUItems { val jsonObject = ConfigManager.gson.fromJson(jsonString, JsonObject::class.java) return manager.jsonToStack(jsonObject, false) } -} \ No newline at end of file +} From e6e38ee3802e67a9f77eae243e8e573672596bc6 Mon Sep 17 00:00:00 2001 From: Walker Selby Date: Fri, 8 Dec 2023 23:41:20 +0000 Subject: [PATCH 3/3] Cast as String, due to new BingoAPI changes Signed-off-by: Walker Selby --- .../at/hannibal2/skyhanni/features/bingo/MinionCraftHelper.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 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 8dc1671ad3fc..9dab12e79699 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/bingo/MinionCraftHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/bingo/MinionCraftHelper.kt @@ -173,11 +173,11 @@ class MinionCraftHelper { private fun firstMinionTier(otherItems: Map, minions: MutableMap) { val help = otherItems.filter { !it.key.startsWith("WOOD_") } - val tierOneMinionsFiltered = tierOneMinions.filter { it !in tierOneMinionsDone } + val tierOneMinionsFiltered = tierOneMinions.filter { it.asString() !in tierOneMinionsDone } for (minionId in tierOneMinionsFiltered) { val prefix = minionId.asString().dropLast(1) if (minions.any { it.value.startsWith(prefix) }) { - tierOneMinionsDone.add(minionId) + tierOneMinionsDone.add(minionId.toString()) } } for (minionId in tierOneMinionsFiltered) {