summaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/utils
diff options
context:
space:
mode:
authorhannibal2 <24389977+hannibal00212@users.noreply.github.com>2023-03-02 14:21:09 +0100
committerhannibal2 <24389977+hannibal00212@users.noreply.github.com>2023-03-02 14:21:09 +0100
commit35d358151fdd3a344a28407a1da950d99f62675c (patch)
tree82c6ce7d46acccc222dc7f818136c5e56ab4dd54 /src/main/java/at/hannibal2/skyhanni/utils
parent017edfa6eaca6b682a68c16fc0a9c621ebaf1177 (diff)
downloadskyhanni-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.kt51
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