diff options
-rw-r--r-- | src/main/java/at/hannibal2/skyhanni/features/bingo/MinionCraftHelper.kt | 75 | ||||
-rw-r--r-- | src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt | 39 |
2 files changed, 59 insertions, 55 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 902d325eb..9dab12e79 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/bingo/MinionCraftHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/bingo/MinionCraftHelper.kt @@ -5,10 +5,13 @@ import at.hannibal2.skyhanni.events.GuiRenderEvent import at.hannibal2.skyhanni.events.InventoryFullyOpenedEvent import at.hannibal2.skyhanni.events.LorenzTickEvent import at.hannibal2.skyhanni.events.LorenzWorldChangeEvent -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.hasEnchantments 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.NEUItems.getCachedIngredients import at.hannibal2.skyhanni.utils.NumberUtil.romanToDecimalIfNecessary @@ -30,9 +33,9 @@ class MinionCraftHelper { private var display = emptyList<String>() private var hasMinionInInventory = false private var hasItemsForMinion = false - private val tierOneMinions = mutableListOf<String>() + private val tierOneMinions = mutableListOf<NEUInternalName>() private val tierOneMinionsDone get() = BingoAPI.bingoStorage.tierOneMinionsDone - private val allIngredients = mutableListOf<String>() + private val allIngredients = mutableListOf<NEUInternalName>() private val alreadyNotified = mutableListOf<String>() @SubscribeEvent @@ -70,8 +73,8 @@ class MinionCraftHelper { } private fun drawDisplay( - minions: MutableMap<String, String>, - otherItems: MutableMap<String, Int>, + minions: MutableMap<String, NEUInternalName>, + otherItems: MutableMap<NEUInternalName, Int>, ): MutableList<String> { val newDisplay = mutableListOf<String>() for ((minionName, minionId) in minions) { @@ -84,15 +87,15 @@ class MinionCraftHelper { return newDisplay } - private fun loadFromInventory(mainInventory: Array<ItemStack?>): Pair<MutableMap<String, String>, MutableMap<String, Int>> { + private fun loadFromInventory(mainInventory: Array<ItemStack?>): Pair<MutableMap<String, NEUInternalName>, MutableMap<NEUInternalName, Int>> { init() - val minions = mutableMapOf<String, String>() - val otherItems = mutableMapOf<String, Int>() + val minions = mutableMapOf<String, NEUInternalName>() + val otherItems = mutableMapOf<NEUInternalName, Int>() 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 } @@ -104,7 +107,7 @@ class MinionCraftHelper { for (item in mainInventory) { val name = item?.name?.removeColor() ?: continue if (item.hasEnchantments()) continue - val rawId = item.getInternalName_old() + val rawId = item.getInternalName() if (!isMinionName(name)) { if (!allIngredients.contains(rawId)) continue if (!isAllowed(allMinions, rawId)) continue @@ -119,14 +122,14 @@ class MinionCraftHelper { return Pair(minions, otherItems) } - private fun isAllowed(allMinions: List<String>, internalName: String): Boolean { + private fun isAllowed(allMinions: List<NEUInternalName>, 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.getCachedIngredients()) { - val ingredientInternalName = ingredient.internalItemId + val ingredientInternalName = ingredient.internalItemId.asInternalName() if (ingredientInternalName == internalName) return true val b = NEUItems.getMultiplier(ingredientInternalName) @@ -143,21 +146,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.getCachedIngredients()) { - val id = ingredient.internalItemId + val id = ingredient.internalItemId.asInternalName() if (!id.contains("_GENERATOR_") && !allIngredients.contains(id)) { allIngredients.add(id) } @@ -167,19 +171,19 @@ class MinionCraftHelper { } } - private fun firstMinionTier(otherItems: Map<String, Int>, minions: MutableMap<String, String>) { + private fun firstMinionTier(otherItems: Map<NEUInternalName, Int>, minions: MutableMap<String, NEUInternalName>) { 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.dropLast(1) + val prefix = minionId.asString().dropLast(1) if (minions.any { it.value.startsWith(prefix) }) { - tierOneMinionsDone.add(minionId) + tierOneMinionsDone.add(minionId.toString()) } } for (minionId in tierOneMinionsFiltered) { for (recipe in NEUItems.getRecipes(minionId)) { if (recipe !is CraftingRecipe) continue - if (recipe.getCachedIngredients().any { help.contains(it.internalItemId) }) { + if (recipe.getCachedIngredients().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") @@ -191,8 +195,8 @@ class MinionCraftHelper { private fun addMinion( name: String, minionTier: Int, - minionId: String, - otherItems: MutableMap<String, Int>, + minionId: NEUInternalName, + otherItems: MutableMap<NEUInternalName, Int>, newDisplay: MutableList<String>, ) { val nextTier = minionTier + 1 @@ -202,11 +206,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<String, Int>() + val map = mutableMapOf<NEUInternalName, Int>() 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) @@ -219,7 +223,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() val isTool = itemId.startsWith("WOOD_") if (percentage >= 1) { val color = if (isTool) "§7" else "§a" @@ -260,8 +264,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) } @@ -276,7 +280,6 @@ 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(";", "_").replace("CAVE_SPIDER", "CAVESPIDER") if (!tierOneMinionsDone.contains(internalName)) { diff --git a/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt b/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt index 02c8dff54..dff8a77e9 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt @@ -33,8 +33,8 @@ import java.util.regex.Pattern object NEUItems { val manager: NEUManager get() = NotEnoughUpdates.INSTANCE.manager 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 multiplierCache = mutableMapOf<NEUInternalName, Pair<NEUInternalName, Int>>() + private val recipesCache = mutableMapOf<NEUInternalName, Set<NeuRecipe>>() private val ingredientsCache = mutableMapOf<NeuRecipe, Set<Ingredient>>() private val enchantmentNamePattern = Pattern.compile("^(?<format>(?:§.)+)(?<name>[^§]+) (?<level>[IVXL]+)$") var allItemsCache = mapOf<String, NEUInternalName>() // item name -> internal name @@ -231,11 +231,6 @@ object NEUItems { } fun getMultiplier(internalName: NEUInternalName, tryCount: Int = 0): Pair<NEUInternalName, Int> { - val pair = getMultiplier(internalName.asString(), tryCount) - return Pair(pair.first.asInternalName(), pair.second) - } - - fun getMultiplier(internalName: String, tryCount: Int = 0): Pair<String, Int> { if (multiplierCache.contains(internalName)) { return multiplierCache[internalName]!! } @@ -250,27 +245,27 @@ object NEUItems { for (recipe in getRecipes(internalName)) { if (recipe !is CraftingRecipe) continue - val map = mutableMapOf<String, Int>() + val map = mutableMapOf<NEUInternalName, Int>() for (ingredient in recipe.getCachedIngredients()) { 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 } @@ -293,14 +288,20 @@ object NEUItems { val result = Pair(internalName, 1) multiplierCache[internalName] = result return result + + } + + fun getMultiplier(internalName: String, tryCount: Int = 0): Pair<String, Int> { + val pair = getMultiplier(internalName.asInternalName(), tryCount) + return Pair(pair.first.asString(), pair.second) } - fun getRecipes(minionId: String): Set<NeuRecipe> { - if (recipesCache.contains(minionId)) { - return recipesCache[minionId]!! + fun getRecipes(internalName: NEUInternalName): Set<NeuRecipe> { + 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 } |