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 /src/main/java/at/hannibal2/skyhanni/utils | |
| parent | 017edfa6eaca6b682a68c16fc0a9c621ebaf1177 (diff) | |
| download | skyhanni-35d358151fdd3a344a28407a1da950d99f62675c.tar.gz skyhanni-35d358151fdd3a344a28407a1da950d99f62675c.tar.bz2 skyhanni-35d358151fdd3a344a28407a1da950d99f62675c.zip | |
Preparations
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/utils')
| -rw-r--r-- | src/main/java/at/hannibal2/skyhanni/utils/NEUItems.kt | 51 |
1 files changed, 51 insertions, 0 deletions
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 |
