diff options
author | hannibal2 <24389977+hannibal00212@users.noreply.github.com> | 2023-03-02 14:21:09 +0100 |
---|---|---|
committer | hannibal2 <24389977+hannibal00212@users.noreply.github.com> | 2023-03-02 14:21:09 +0100 |
commit | 35d358151fdd3a344a28407a1da950d99f62675c (patch) | |
tree | 82c6ce7d46acccc222dc7f818136c5e56ab4dd54 | |
parent | 017edfa6eaca6b682a68c16fc0a9c621ebaf1177 (diff) | |
download | skyhanni-35d358151fdd3a344a28407a1da950d99f62675c.tar.gz skyhanni-35d358151fdd3a344a28407a1da950d99f62675c.tar.bz2 skyhanni-35d358151fdd3a344a28407a1da950d99f62675c.zip |
Preparations
3 files changed, 60 insertions, 60 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 c0ae5d6fa..bae238577 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/bingo/MinionCraftHelper.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/bingo/MinionCraftHelper.kt @@ -32,13 +32,10 @@ class MinionCraftHelper { private val tierOneMinionsDone = mutableListOf<String>() private val allIngredients = mutableListOf<String>() private val alreadyNotified = mutableListOf<String>() - private val recipesCache = mutableMapOf<String, List<NeuRecipe>>() - private var multiplierCache = mutableMapOf<String, Pair<String, Int>>() @SubscribeEvent fun onWorldChange(event: WorldEvent.Load) { alreadyNotified.clear() - recipesCache.clear() } @SubscribeEvent @@ -101,7 +98,7 @@ class MinionCraftHelper { minions[name] = rawId } else { if (!allIngredients.contains(rawId)) continue - val (itemId, multiplier) = getMultiplier(rawId) + val (itemId, multiplier) = NEUItems.getMultiplier(rawId) val old = otherItems.getOrDefault(itemId, 0) otherItems[itemId] = old + item.stackSize * multiplier } @@ -121,7 +118,7 @@ class MinionCraftHelper { } if (internalId.contains("_GENERATOR_")) { - for (recipe in getRecipes(internalId)) { + for (recipe in NEUItems.getRecipes(internalId)) { if (recipe !is CraftingRecipe) continue for (ingredient in recipe.ingredients) { @@ -148,7 +145,7 @@ class MinionCraftHelper { } for (minionId in tierOneMinionsFiltered) { - for (recipe in getRecipes(minionId)) { + for (recipe in NEUItems.getRecipes(minionId)) { if (recipe !is CraftingRecipe) continue if (recipe.ingredients.any { help.contains(it.internalItemId) }) { val name = recipe.output.itemStack.name!!.removeColor() @@ -164,7 +161,7 @@ class MinionCraftHelper { val minionName = "§9$name Minion $nextTier" display.add(minionName) val nextMinionId = minionId.addOneToId() - val recipes: List<NeuRecipe> = getRecipes(nextMinionId) + val recipes: List<NeuRecipe> = NEUItems.getRecipes(nextMinionId) for (recipe in recipes) { if (recipe !is CraftingRecipe) continue val output = recipe.output @@ -181,7 +178,7 @@ class MinionCraftHelper { } var allDone = true for ((rawId, need) in map) { - val (itemId, multiplier) = getMultiplier(rawId) + val (itemId, multiplier) = NEUItems.getMultiplier(rawId) val needAmount = need * multiplier val have = otherItems.getOrDefault(itemId, 0) val percentage = have.toDouble() / needAmount @@ -213,15 +210,6 @@ class MinionCraftHelper { SkyHanniMod.feature.bingo.minionCraftHelperPos.renderStrings(display, center = true) } - private fun getRecipes(minionId: String): List<NeuRecipe> { - if (recipesCache.contains(minionId)) { - return recipesCache[minionId]!! - } - val recipes = NEUItems.manager.getAvailableRecipesFor(minionId) - recipesCache[minionId] = recipes - return recipes - } - private fun notify(minionName: String) { if (alreadyNotified.contains(minionName)) return @@ -234,43 +222,4 @@ class MinionCraftHelper { val next = lastText.toInt() + 1 return replace(lastText, "" + next) } - - - private fun getMultiplier(rawId: String, tryCount: Int = 0, parent: String? = null): Pair<String, Int> { - if (multiplierCache.contains(rawId)) { - return multiplierCache[rawId]!! - } - if (tryCount == 10) { - val message = "Error reading getMultiplier for item '$rawId'" - Error(message).printStackTrace() - LorenzUtils.error(message) - return Pair(rawId, 1) - } - for (recipe in getRecipes(rawId)) { - if (recipe !is CraftingRecipe) continue - - val map = mutableMapOf<String, Int>() - for (ingredient in recipe.ingredients) { - val count = ingredient.count.toInt() - val internalItemId = ingredient.internalItemId - val old = map.getOrDefault(internalItemId, 0) - map[internalItemId] = old + count - } - if (map.size != 1) continue - val current = map.iterator().next().toPair() - val id = current.first - return if (id != parent) { - val child = getMultiplier(id, tryCount + 1, rawId) - val result = Pair(child.first, child.second * current.second) - multiplierCache[rawId] = result - result - } else { - Pair(parent, 1) - } - } - - val result = Pair(rawId, 1) - multiplierCache[rawId] = result - return result - } } diff --git a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenVisitorFeatures.kt b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenVisitorFeatures.kt index b9fb4ee5f..a43f9671f 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/garden/GardenVisitorFeatures.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/garden/GardenVisitorFeatures.kt @@ -140,7 +140,7 @@ class GardenVisitorFeatures { var totalPrice = 0.0 var amountDifferentItems = 0 var endReached = false - for ((i, l) in list.withIndex()) { + for ((i, l) in list.toMutableList().withIndex()) { val line = l.substring(4) if (line == "") { if (amountDifferentItems > 1) { @@ -153,9 +153,9 @@ class GardenVisitorFeatures { if (i > 1 && !endReached) { val (itemName, amount) = ItemUtils.readItemAmount(line) if (itemName != null) { - val lowestBin: Double + val internalName: String try { - lowestBin = NEUItems.getPrice(NEUItems.getInternalName(itemName)) + internalName = NEUItems.getInternalName(itemName) } catch (e: NullPointerException) { val message = "internal name is null: '$itemName'" println(message) @@ -163,7 +163,7 @@ class GardenVisitorFeatures { e.printStackTrace() return } - val price = lowestBin * amount + val price = NEUItems.getPrice(internalName) * amount totalPrice += price val format = NumberUtil.format(price) list[i] = "$line §7(§6$format§7)" diff --git a/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt b/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt index 5f8f035f4..344cbd715 100644 --- a/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt +++ b/src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt @@ -3,6 +3,8 @@ package at.hannibal2.skyhanni.utils import at.hannibal2.skyhanni.utils.ItemUtils.getInternalName import io.github.moulberry.notenoughupdates.NEUManager import io.github.moulberry.notenoughupdates.NotEnoughUpdates +import io.github.moulberry.notenoughupdates.recipes.CraftingRecipe +import io.github.moulberry.notenoughupdates.recipes.NeuRecipe import io.github.moulberry.notenoughupdates.util.ItemResolutionQuery import io.github.moulberry.notenoughupdates.util.Utils import net.minecraft.client.Minecraft @@ -15,6 +17,8 @@ object NEUItems { val manager: NEUManager get() = NotEnoughUpdates.INSTANCE.manager private val itemCache = mutableMapOf<String, ItemStack>() private val itemNameCache = mutableMapOf<String, String>() // item name -> internal name + private val multiplierCache = mutableMapOf<String, Pair<String, Int>>() + private val recipesCache = mutableMapOf<String, List<NeuRecipe>>() fun getInternalName(itemName: String): String { if (itemNameCache.containsKey(itemName)) { @@ -93,4 +97,51 @@ object NEUItems { RenderHelper.disableStandardItemLighting() Utils.disableCustomDungColours = false } + + fun getMultiplier(rawId: String, tryCount: Int = 0, parent: String? = null): Pair<String, Int> { + if (multiplierCache.contains(rawId)) { + return multiplierCache[rawId]!! + } + if (tryCount == 10) { + val message = "Error reading getMultiplier for item '$rawId'" + Error(message).printStackTrace() + LorenzUtils.error(message) + return Pair(rawId, 1) + } + for (recipe in getRecipes(rawId)) { + if (recipe !is CraftingRecipe) continue + + val map = mutableMapOf<String, Int>() + for (ingredient in recipe.ingredients) { + val count = ingredient.count.toInt() + val internalItemId = ingredient.internalItemId + val old = map.getOrDefault(internalItemId, 0) + map[internalItemId] = old + count + } + if (map.size != 1) continue + val current = map.iterator().next().toPair() + val id = current.first + return if (id != parent) { + val child = getMultiplier(id, tryCount + 1, rawId) + val result = Pair(child.first, child.second * current.second) + multiplierCache[rawId] = result + result + } else { + Pair(parent, 1) + } + } + + val result = Pair(rawId, 1) + multiplierCache[rawId] = result + return result + } + + fun getRecipes(minionId: String): List<NeuRecipe> { + if (recipesCache.contains(minionId)) { + return recipesCache[minionId]!! + } + val recipes = manager.getAvailableRecipesFor(minionId) + recipesCache[minionId] = recipes + return recipes + } }
\ No newline at end of file |