package moe.nea.firmament.repo import io.github.moulberry.repo.IReloadable import io.github.moulberry.repo.NEURepository import io.github.moulberry.repo.data.NEUIngredient import io.github.moulberry.repo.data.NEURecipe import moe.nea.firmament.util.SkyblockId class EssenceRecipeProvider : IReloadable { data class EssenceUpgradeRecipe( val itemId: SkyblockId, val starCountAfter: Int, val essenceCost: Int, val essenceType: String, // TODO: replace with proper type val extraItems: List, ) : NEURecipe { val essenceIngredient= NEUIngredient.fromString("${essenceType}:$essenceCost") val allUpgradeComponents = listOf(essenceIngredient) + extraItems override fun getAllInputs(): Collection { return listOf(NEUIngredient.fromString(itemId.neuItem + ":1")) + allUpgradeComponents } override fun getAllOutputs(): Collection { return listOf(NEUIngredient.fromString(itemId.neuItem + ":1")) } } var recipes = listOf() private set override fun reload(repository: NEURepository) { val recipes = mutableListOf() for ((neuId, costs) in repository.constants.essenceCost.costs) { // TODO: add dungeonization costs. this is in repo, but not in the repo parser. for ((starCountAfter, essenceCost) in costs.essenceCosts.entries) { val items = costs.itemCosts[starCountAfter] ?: emptyList() recipes.add( EssenceUpgradeRecipe( SkyblockId(neuId), starCountAfter, essenceCost, "ESSENCE_" + costs.type.uppercase(), // how flimsy items.map { NEUIngredient.fromString(it) })) } } this.recipes = recipes } }