aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/features/bingo/FirstMinionTier.kt
blob: ab5e2f3bf06702d6b7f30e3a3d73192800e8a240 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package at.hannibal2.skyhanni.features.bingo

import at.hannibal2.skyhanni.utils.ItemUtils.name
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.StringUtils.removeColor
import io.github.moulberry.notenoughupdates.recipes.CraftingRecipe

object FirstMinionTier {

    fun firstMinionTier(
        otherItems: Map<NEUInternalName, Int>,
        minions: MutableMap<String, NEUInternalName>,
        tierOneMinions: MutableList<NEUInternalName>,
        tierOneMinionsDone: MutableList<NEUInternalName>,
    ) {
        val help = helpMap(otherItems)
        val tierOneMinionsFiltered = getTierOneMinionsFiltered(tierOneMinions, tierOneMinionsDone)
        addMinion(tierOneMinionsFiltered, minions, tierOneMinionsDone)
        addMoreMinions(tierOneMinionsFiltered, help, minions)
    }

    private fun addMoreMinions(
        tierOneMinionsFiltered: List<NEUInternalName>,
        help: Map<NEUInternalName, Int>,
        minions: MutableMap<String, NEUInternalName>,
    ) {
        for (minionId in tierOneMinionsFiltered) {
            for (recipe in NEUItems.getRecipes(minionId)) {
                if (recipe !is CraftingRecipe) continue
                checkOne(recipe, help, minions, minionId)
            }
        }
    }

    private fun checkOne(
        recipe: CraftingRecipe,
        help: Map<NEUInternalName, Int>,
        minions: MutableMap<String, NEUInternalName>,
        minionId: NEUInternalName,
    ) {
        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")
        }
    }

    private fun addMinion(
        tierOneMinionsFiltered: List<NEUInternalName>,
        minions: MutableMap<String, NEUInternalName>,
        tierOneMinionsDone: MutableList<NEUInternalName>,
    ) {
        for (minionId in tierOneMinionsFiltered) {
            val prefix = minionId.asString().dropLast(1)
            if (minions.any { it.value.startsWith(prefix) }) {
                tierOneMinionsDone.add(minionId)
            }
        }
    }

    private fun getTierOneMinionsFiltered(
        tierOneMinions: MutableList<NEUInternalName>,
        tierOneMinionsDone: MutableList<NEUInternalName>,
    ) = tierOneMinions.filter { it !in tierOneMinionsDone }

    private fun helpMap(otherItems: Map<NEUInternalName, Int>) =
        otherItems.filter { !it.key.startsWith("WOOD_") }
}