refactor: essence upgrade recipe as item list agnostic

This commit is contained in:
Linnea Gräf
2025-05-09 21:45:06 +02:00
parent 62bca13bff
commit 3cd70b1b1e
8 changed files with 107 additions and 89 deletions

View File

@@ -9,7 +9,7 @@ import net.minecraft.util.Identifier
import moe.nea.firmament.repo.SBItemStack
interface GenericRecipeRenderer<T : NEURecipe> {
fun render(recipe: T, bounds: Rectangle, layouter: RecipeLayouter)
fun render(recipe: T, bounds: Rectangle, layouter: RecipeLayouter, mainItem: SBItemStack?)
fun getInputs(recipe: T): Collection<SBItemStack>
fun getOutputs(recipe: T): Collection<SBItemStack>
val icon: ItemStack

View File

@@ -13,16 +13,23 @@ import moe.nea.firmament.repo.SBItemStack
import moe.nea.firmament.util.tr
object SBCraftingRecipeRenderer : GenericRecipeRenderer<NEUCraftingRecipe> {
override fun render(recipe: NEUCraftingRecipe, bounds: Rectangle, layouter: RecipeLayouter) {
override fun render(
recipe: NEUCraftingRecipe,
bounds: Rectangle,
layouter: RecipeLayouter,
mainItem: SBItemStack?,
) {
val point = Point(bounds.centerX - 58, bounds.centerY - 27)
layouter.createArrow(point.x + 60, point.y + 18)
for (i in 0 until 3) {
for (j in 0 until 3) {
val item = recipe.inputs[i + j * 3]
layouter.createItemSlot(point.x + 1 + i * 18,
point.y + 1 + j * 18,
SBItemStack(item),
RecipeLayouter.SlotKind.SMALL_INPUT)
layouter.createItemSlot(
point.x + 1 + i * 18,
point.y + 1 + j * 18,
SBItemStack(item),
RecipeLayouter.SlotKind.SMALL_INPUT
)
}
}
layouter.createItemSlot(
@@ -48,6 +55,6 @@ object SBCraftingRecipeRenderer : GenericRecipeRenderer<NEUCraftingRecipe> {
}
override val icon: ItemStack = ItemStack(Blocks.CRAFTING_TABLE)
override val title: Text = tr("firmament.category.crafting", "SkyBlock Crafting") // TODO: fix tr not being included in jars
override val title: Text = tr("firmament.category.crafting", "SkyBlock Crafting")
override val identifier: Identifier = Firmament.identifier("crafting_recipe")
}

View File

@@ -0,0 +1,74 @@
package moe.nea.firmament.repo.recipes
import io.github.moulberry.repo.NEURepository
import io.github.moulberry.repo.data.NEUForgeRecipe
import me.shedaniel.math.Point
import me.shedaniel.math.Rectangle
import net.minecraft.item.ItemStack
import net.minecraft.text.Text
import net.minecraft.util.Identifier
import moe.nea.firmament.Firmament
import moe.nea.firmament.repo.EssenceRecipeProvider
import moe.nea.firmament.repo.RepoManager
import moe.nea.firmament.repo.SBItemStack
import moe.nea.firmament.util.SkyblockId
import moe.nea.firmament.util.tr
object SBEssenceUpgradeRecipeRenderer : GenericRecipeRenderer<EssenceRecipeProvider.EssenceUpgradeRecipe> {
override fun render(
recipe: EssenceRecipeProvider.EssenceUpgradeRecipe,
bounds: Rectangle,
layouter: RecipeLayouter,
mainItem: SBItemStack?
) {
val sourceItem = mainItem ?: SBItemStack(recipe.itemId)
layouter.createItemSlot(
bounds.minX + 12,
bounds.centerY - 8 - 18 / 2,
sourceItem.copy(stars = recipe.starCountAfter - 1),
RecipeLayouter.SlotKind.SMALL_INPUT
)
layouter.createItemSlot(
bounds.minX + 12, bounds.centerY - 8 + 18 / 2,
SBItemStack(recipe.essenceIngredient),
RecipeLayouter.SlotKind.SMALL_INPUT
)
layouter.createItemSlot(
bounds.maxX - 12 - 16, bounds.centerY - 8,
sourceItem.copy(stars = recipe.starCountAfter),
RecipeLayouter.SlotKind.SMALL_OUTPUT
)
val extraItems = recipe.extraItems
layouter.createArrow(
bounds.centerX - 24 / 2,
if (extraItems.isEmpty()) bounds.centerY - 17 / 2
else bounds.centerY + 18 / 2
)
for ((index, item) in extraItems.withIndex()) {
layouter.createItemSlot(
bounds.centerX - extraItems.size * 16 / 2 - 2 / 2 + index * 18,
bounds.centerY - 18 / 2,
SBItemStack(item),
RecipeLayouter.SlotKind.SMALL_INPUT,
)
}
}
override fun getInputs(recipe: EssenceRecipeProvider.EssenceUpgradeRecipe): Collection<SBItemStack> {
return recipe.allInputs.mapNotNull { SBItemStack(it) }
}
override fun getOutputs(recipe: EssenceRecipeProvider.EssenceUpgradeRecipe): Collection<SBItemStack> {
return listOfNotNull(SBItemStack(recipe.itemId))
}
override val icon: ItemStack get() = SBItemStack(SkyblockId("ESSENCE_WITHER")).asImmutableItemStack()
override val title: Text = tr("firmament.category.essence", "Essence Upgrades")
override val identifier: Identifier = Firmament.identifier("essence_upgrade")
override fun findAllRecipes(neuRepository: NEURepository): Iterable<EssenceRecipeProvider.EssenceUpgradeRecipe> {
return RepoManager.essenceRecipeProvider.recipes
}
override val typ: Class<EssenceRecipeProvider.EssenceUpgradeRecipe>
get() = EssenceRecipeProvider.EssenceUpgradeRecipe::class.java
}

View File

@@ -20,7 +20,8 @@ object SBForgeRecipeRenderer : GenericRecipeRenderer<NEUForgeRecipe> {
override fun render(
recipe: NEUForgeRecipe,
bounds: Rectangle,
layouter: RecipeLayouter
layouter: RecipeLayouter,
mainItem: SBItemStack?,
) {
val arrow = layouter.createArrow(bounds.minX + 90, bounds.minY + 54 - 18 / 2)
layouter.createTooltip(