Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
[versions]
minecraft = "26.1.2"

neo-moddev = "2.0.147"
neo-version = "26.1.2.112"
neo-moddev = "2.0.148"
neo-version = "26.1.2.114"
kff-version = "6.3.0"

kotlin = "2.4.0"
Expand Down
7 changes: 7 additions & 0 deletions src/client/kotlin/hiiragi283/ragium/client/RagiumClient.kt
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import hiiragi283.lib.text.HTCommonTranslation
import hiiragi283.lib.text.Text
import hiiragi283.lib.transfer.fluid.HTFluidView
import hiiragi283.ragium.api.RagiumAPI
import hiiragi283.ragium.api.data.RagiumDataComponents
import hiiragi283.ragium.api.data.chemical.HTClientChemicalHelper
import hiiragi283.ragium.api.tag.RagiumTags
import hiiragi283.ragium.client.gui.screen.HTWidgetContainerScreen
Expand Down Expand Up @@ -45,6 +46,7 @@ import net.neoforged.neoforge.client.event.RegisterClientTooltipComponentFactori
import net.neoforged.neoforge.client.event.RegisterMenuScreensEvent
import net.neoforged.neoforge.client.fluid.FluidTintSources
import net.neoforged.neoforge.client.network.event.RegisterClientPayloadHandlersEvent
import net.neoforged.neoforge.common.tooltip.TooltipAppender
import net.neoforged.neoforge.common.tooltip.TooltipLocation
import net.neoforged.neoforge.event.RegisterTooltipAppendersEvent
import net.neoforged.neoforge.fluids.FluidStack
Expand Down Expand Up @@ -294,5 +296,10 @@ data object RagiumClient : HTClientMod() {
) { stack: ItemStack, _, _, _, _, builder: Consumer<Text> ->
HTClientChemicalHelper.addToTooltip(stack, builder::accept)
}

event.registerAppender(
TooltipLocation.PRE_ITEM_INFO,
TooltipAppender.createComponentAppender(RagiumDataComponents.ITEM_TOOLTIP)
)
}
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
package hiiragi283.ragium.client.integration.jei

import hiiragi283.lib.HTPhysicalSideHelper
import hiiragi283.lib.integration.jei.HTJeiDrawables
import hiiragi283.lib.integration.jei.HTJeiPlugin
import hiiragi283.lib.integration.jei.HTJeiRecipeHelper
import hiiragi283.lib.integration.jei.category.HTFluidToItemAndFluidRecipeCategory
import hiiragi283.lib.integration.jei.category.HTItemAndFluidToFluidRecipeCategory
import hiiragi283.lib.integration.jei.category.HTItemAndFluidToItemRecipeCategory
import hiiragi283.lib.integration.jei.category.HTItemToDoubleItemRecipeCategory
import hiiragi283.lib.integration.jei.category.HTItemToItemAndFluidRecipeCategory
import hiiragi283.lib.integration.jei.category.HTSingleRecipeCategory
import hiiragi283.lib.integration.jei.category.HTSingleToItemAndFluidRecipeCategory
import hiiragi283.lib.integration.jei.category.HTTripleItemToRecipeCategory
import hiiragi283.lib.integration.jei.ingredient.HTIngredientTypes
import hiiragi283.lib.item.HTPotionBasedItem
Expand All @@ -21,9 +21,12 @@ import hiiragi283.ragium.api.RagiumAPI
import hiiragi283.ragium.api.data.RagiumDataComponents
import hiiragi283.ragium.api.data.recipe.builder.RagiumRecipeBuilders
import hiiragi283.ragium.api.recipe.RagiumRecipeLookups
import hiiragi283.ragium.api.recipe.RagiumRecipeTypes
import hiiragi283.ragium.client.gui.screen.HTWidgetContainerScreen
import hiiragi283.ragium.client.integration.jei.category.RTElectrolyzingRecipeCategory
import hiiragi283.ragium.client.integration.jei.category.RTEnchantingRecipeCategory
import hiiragi283.ragium.client.integration.jei.category.RTFreezingRecipeCategory
import hiiragi283.ragium.client.integration.jei.category.RTMixingRecipeCategory
import hiiragi283.ragium.client.integration.jei.category.RTReactingRecipeCategory
import hiiragi283.ragium.client.integration.jei.category.RTResourceExtractingRecipeCategory
import hiiragi283.ragium.client.integration.jei.category.RTWashingRecipeCategory
Expand Down Expand Up @@ -106,30 +109,83 @@ class RagiumJeiPlugin : HTJeiPlugin(RagiumAPI.MOD_ID) {

override fun registerCategories(registration: IRecipeCategoryRegistration) {
val guiHelper: IGuiHelper = registration.jeiHelpers.guiHelper
HTJeiDrawables.init(guiHelper)

registration.addRecipeCategories(
// Mechanical
HTTripleItemToRecipeCategory.Basic(guiHelper, RagiumJeiRecipeTypes.ASSEMBLING),
HTSingleRecipeCategory.ItemToItem(guiHelper, RagiumJeiRecipeTypes.COMPRESSING),
HTItemToDoubleItemRecipeCategory(guiHelper, RagiumJeiRecipeTypes.CRUSHING),
HTItemToDoubleItemRecipeCategory(guiHelper, RagiumJeiRecipeTypes.CUTTING),
HTItemToItemAndFluidRecipeCategory(guiHelper, RagiumJeiRecipeTypes.DRAINING),
HTItemAndFluidToItemRecipeCategory(guiHelper, RagiumJeiRecipeTypes.FILLING),
HTTripleItemToRecipeCategory.Basic(
RagiumJeiRecipeTypes.ASSEMBLING,
RagiumRecipeTypes.ASSEMBLING,
guiHelper.createDrawableItemLike(RagiumBlocks.ASSEMBLER)
),
HTSingleRecipeCategory.ItemToItem(
RagiumJeiRecipeTypes.COMPRESSING,
RagiumRecipeTypes.COMPRESSING,
guiHelper.createDrawableItemLike(RagiumBlocks.COMPRESSOR)
),
HTItemToDoubleItemRecipeCategory(
RagiumJeiRecipeTypes.CRUSHING,
RagiumRecipeTypes.CRUSHING,
guiHelper.createDrawableItemLike(RagiumBlocks.CRUSHER)
),
HTItemToDoubleItemRecipeCategory(
RagiumJeiRecipeTypes.CUTTING,
RagiumRecipeTypes.CUTTING,
guiHelper.createDrawableItemLike(RagiumBlocks.CUTTING_MACHINE)
),
HTSingleToItemAndFluidRecipeCategory.ItemTo(
RagiumJeiRecipeTypes.DRAINING,
RagiumRecipeTypes.DRAINING,
guiHelper.createDrawableItemLike(RagiumBlocks.MACHINE_CASING)
),
HTItemAndFluidToItemRecipeCategory(
RagiumJeiRecipeTypes.FILLING,
RagiumRecipeTypes.FILLING,
guiHelper.createDrawableItemLike(RagiumBlocks.MACHINE_CASING)
),
// Heat
HTTripleItemToRecipeCategory.Basic(guiHelper, RagiumJeiRecipeTypes.ALLOYING),
HTSingleRecipeCategory.FluidToItem(guiHelper, RagiumJeiRecipeTypes.FREEZING),
HTSingleRecipeCategory.ItemToFluid(guiHelper, RagiumJeiRecipeTypes.MELTING),
HTItemToItemAndFluidRecipeCategory(guiHelper, RagiumJeiRecipeTypes.PYROLYZING),
HTFluidToItemAndFluidRecipeCategory(guiHelper, RagiumJeiRecipeTypes.REFINING),
HTTripleItemToRecipeCategory.Basic(
RagiumJeiRecipeTypes.ALLOYING,
RagiumRecipeTypes.ALLOYING,
guiHelper.createDrawableItemLike(RagiumBlocks.ALLOY_SMELTER)
),
RTFreezingRecipeCategory(guiHelper),
HTSingleRecipeCategory.ItemToFluid(
RagiumJeiRecipeTypes.MELTING,
RagiumRecipeTypes.MELTING,
guiHelper.createDrawableItemLike(RagiumBlocks.MELTER)
),
HTSingleToItemAndFluidRecipeCategory.ItemTo(
RagiumJeiRecipeTypes.PYROLYZING,
RagiumRecipeTypes.PYROLYZING,
guiHelper.createDrawableItemLike(RagiumBlocks.PYROLYZER)
),
HTSingleToItemAndFluidRecipeCategory.FluidTo(
RagiumJeiRecipeTypes.REFINING,
RagiumRecipeTypes.REFINING,
guiHelper.createDrawableItemLike(RagiumBlocks.REFINERY)
),
// Chemical
HTItemAndFluidToItemRecipeCategory(guiHelper, RagiumJeiRecipeTypes.BATHING),
HTItemAndFluidToItemRecipeCategory(
RagiumJeiRecipeTypes.BATHING,
RagiumRecipeTypes.BATHING,
guiHelper.createDrawableItemLike(RagiumBlocks.CHEMICAL_BATH)
),
RTElectrolyzingRecipeCategory(guiHelper),
HTItemAndFluidToFluidRecipeCategory(guiHelper, RagiumJeiRecipeTypes.MIXING),
RTMixingRecipeCategory(guiHelper),
RTReactingRecipeCategory(guiHelper),
RTWashingRecipeCategory(guiHelper),
// Bio
HTItemAndFluidToFluidRecipeCategory(guiHelper, RagiumJeiRecipeTypes.BREWING),
HTItemToDoubleItemRecipeCategory(guiHelper, RagiumJeiRecipeTypes.PLANTING),
HTItemAndFluidToFluidRecipeCategory(
RagiumJeiRecipeTypes.BREWING,
RagiumRecipeTypes.BREWING,
guiHelper.createDrawableItemLike(RagiumBlocks.BREWERY)
),
HTItemToDoubleItemRecipeCategory(
RagiumJeiRecipeTypes.PLANTING,
RagiumRecipeTypes.PLANTING,
guiHelper.createDrawableItemLike(RagiumBlocks.PLANTER)
),
// Electronics
RTResourceExtractingRecipeCategory(guiHelper),
// Arcane
Expand Down
Original file line number Diff line number Diff line change
@@ -1,109 +1,96 @@
package hiiragi283.ragium.client.integration.jei

import hiiragi283.lib.integration.jei.HTHolderJeiRecipeType
import hiiragi283.lib.integration.jei.HTJeiRecipeType
import hiiragi283.lib.integration.jei.HTRecipeHolderType
import hiiragi283.lib.integration.jei.IRecipeType
import hiiragi283.lib.recipe.HTRecipeHolder
import hiiragi283.lib.recipe.base.HTFluidToDoubleFluidRecipe
import hiiragi283.lib.recipe.base.HTFluidToRecipe
import hiiragi283.lib.recipe.base.HTItemAndFluidToRecipe
import hiiragi283.lib.recipe.base.HTItemToDoubleItemRecipe
import hiiragi283.lib.recipe.base.HTItemToRecipe
import hiiragi283.lib.recipe.base.HTTripleItemToItemRecipe
import hiiragi283.ragium.api.RagiumAPI
import hiiragi283.ragium.api.RagiumConstants
import hiiragi283.ragium.api.recipe.RTElectrolyzingRecipe
import hiiragi283.ragium.api.recipe.RTEnchantingRecipe
import hiiragi283.ragium.api.recipe.RTFreezingRecipe
import hiiragi283.ragium.api.recipe.RTMixingRecipe
import hiiragi283.ragium.api.recipe.RTReactingRecipe
import hiiragi283.ragium.api.recipe.RTResourceExtractingRecipe
import hiiragi283.ragium.api.recipe.RTWashingRecipe
import hiiragi283.ragium.api.recipe.RagiumRecipeTypes
import hiiragi283.ragium.common.block.RagiumBlocks

data object RagiumJeiRecipeTypes {
@JvmStatic
private inline fun <reified T : Any> create(name: String): HTRecipeHolderType<T> =
IRecipeType<HTRecipeHolder<T>>(RagiumAPI.id(name))

// Mechanical
@JvmField
val ASSEMBLING: HTHolderJeiRecipeType<HTTripleItemToItemRecipe.Basic> =
HTJeiRecipeType(RagiumRecipeTypes.ASSEMBLING, RagiumBlocks.ASSEMBLER)
val ASSEMBLING: HTRecipeHolderType<HTTripleItemToItemRecipe.Basic> = create(RagiumConstants.ASSEMBLING)

@JvmField
val COMPRESSING: HTHolderJeiRecipeType<HTItemToRecipe.BasicItem> =
HTJeiRecipeType(RagiumRecipeTypes.COMPRESSING, RagiumBlocks.COMPRESSOR)
val COMPRESSING: HTRecipeHolderType<HTItemToRecipe.BasicItem> = create(RagiumConstants.COMPRESSING)

@JvmField
val CRUSHING: HTHolderJeiRecipeType<HTItemToDoubleItemRecipe.Basic> =
HTJeiRecipeType(RagiumRecipeTypes.CRUSHING, RagiumBlocks.CRUSHER)
val CRUSHING: HTRecipeHolderType<HTItemToDoubleItemRecipe.Basic> = create(RagiumConstants.CRUSHING)

@JvmField
val CUTTING: HTHolderJeiRecipeType<HTItemToDoubleItemRecipe.Basic> =
HTJeiRecipeType(RagiumRecipeTypes.CUTTING, RagiumBlocks.CUTTING_MACHINE)
val CUTTING: HTRecipeHolderType<HTItemToDoubleItemRecipe.Basic> = create(RagiumConstants.CUTTING)

@JvmField
val DRAINING: HTHolderJeiRecipeType<HTItemToRecipe.BasicItemAndFluid> =
HTJeiRecipeType(RagiumRecipeTypes.DRAINING, RagiumBlocks.MACHINE_CASING)
val DRAINING: HTRecipeHolderType<HTItemToRecipe.BasicItemAndFluid> = create(RagiumConstants.DRAINING)

@JvmField
val FILLING: HTHolderJeiRecipeType<HTItemAndFluidToRecipe.BasicItem> =
HTJeiRecipeType(RagiumRecipeTypes.FILLING, RagiumBlocks.MACHINE_CASING)
val FILLING: HTRecipeHolderType<HTItemAndFluidToRecipe.BasicItem> = create(RagiumConstants.FILLING)

// Heat
@JvmField
val ALLOYING: HTHolderJeiRecipeType<HTTripleItemToItemRecipe.Basic> =
HTJeiRecipeType(RagiumRecipeTypes.ALLOYING, RagiumBlocks.ALLOY_SMELTER)
val ALLOYING: HTRecipeHolderType<HTTripleItemToItemRecipe.Basic> = create(RagiumConstants.ALLOYING)

@JvmField
val FREEZING: HTHolderJeiRecipeType<HTFluidToRecipe.BasicItem> =
HTJeiRecipeType(RagiumRecipeTypes.FREEZING, RagiumBlocks.FREEZER)
val FREEZING: HTRecipeHolderType<RTFreezingRecipe> = create(RagiumConstants.FREEZING)

@JvmField
val MELTING: HTHolderJeiRecipeType<HTItemToRecipe.BasicFluid> =
HTJeiRecipeType(RagiumRecipeTypes.MELTING, RagiumBlocks.MELTER)
val MELTING: HTRecipeHolderType<HTItemToRecipe.BasicFluid> = create(RagiumConstants.MELTING)

@JvmField
val PYROLYZING: HTHolderJeiRecipeType<HTItemToRecipe.BasicItemAndFluid> =
HTJeiRecipeType(RagiumRecipeTypes.PYROLYZING, RagiumBlocks.PYROLYZER)
val PYROLYZING: HTRecipeHolderType<HTItemToRecipe.BasicItemAndFluid> = create(RagiumConstants.PYROLYZING)

@JvmField
val REFINING: HTHolderJeiRecipeType<HTFluidToRecipe.BasicItemAndFluid> =
HTJeiRecipeType(RagiumRecipeTypes.REFINING, RagiumBlocks.REFINERY)
val REFINING: HTRecipeHolderType<HTFluidToRecipe.BasicItemAndFluid> = create(RagiumConstants.REFINING)

// Chemical
@JvmField
val BATHING: HTHolderJeiRecipeType<HTItemAndFluidToRecipe.BasicItem> =
HTJeiRecipeType(RagiumRecipeTypes.BATHING, RagiumBlocks.CHEMICAL_BATH)
val BATHING: HTRecipeHolderType<HTItemAndFluidToRecipe.BasicItem> = create(RagiumConstants.BATHING)

@JvmField
val CENTRIFUGING: HTHolderJeiRecipeType<HTFluidToDoubleFluidRecipe.Basic> =
HTJeiRecipeType(RagiumRecipeTypes.CENTRIFUGING, RagiumBlocks.CHEMICAL_BATH)
val CENTRIFUGING: HTRecipeHolderType<HTFluidToDoubleFluidRecipe.Basic> = create(RagiumConstants.CENTRIFUGING)

@JvmField
val MIXING: HTHolderJeiRecipeType<HTItemAndFluidToRecipe.BasicFluid> =
HTJeiRecipeType(RagiumRecipeTypes.MIXING, RagiumBlocks.MIXER)
val MIXING: HTRecipeHolderType<RTMixingRecipe> = create(RagiumConstants.MIXING)

@JvmField
val REACTING: HTHolderJeiRecipeType<RTReactingRecipe.Basic> =
HTJeiRecipeType(RagiumRecipeTypes.REACTING, RagiumBlocks.CHEMICAL_REACTOR)
val REACTING: HTRecipeHolderType<RTReactingRecipe.Basic> = create(RagiumConstants.REACTING)

@JvmField
val WASHING: HTHolderJeiRecipeType<RTWashingRecipe> =
HTJeiRecipeType(RagiumRecipeTypes.WASHING, RagiumBlocks.MACHINE_CASING)
val WASHING: HTRecipeHolderType<RTWashingRecipe> = create(RagiumConstants.WASHING)

// Bio
@JvmField
val BREWING: HTHolderJeiRecipeType<HTItemAndFluidToRecipe.BasicFluid> =
HTJeiRecipeType(RagiumRecipeTypes.BREWING, RagiumBlocks.BREWERY)
val BREWING: HTRecipeHolderType<HTItemAndFluidToRecipe.BasicFluid> = create(RagiumConstants.BREWING)

@JvmField
val PLANTING: HTHolderJeiRecipeType<HTItemToDoubleItemRecipe.Basic> =
HTJeiRecipeType(RagiumRecipeTypes.PLANTING, RagiumBlocks.PLANTER)
val PLANTING: HTRecipeHolderType<HTItemToDoubleItemRecipe.Basic> = create(RagiumConstants.PLANTING)

// Electronics
@JvmField
val ELECTROLYZING: HTHolderJeiRecipeType<RTElectrolyzingRecipe> =
HTJeiRecipeType(RagiumRecipeTypes.ELECTROLYZING, RagiumBlocks.ELECTROLYZER)
val ELECTROLYZING: HTRecipeHolderType<RTElectrolyzingRecipe> = create(RagiumConstants.ELECTROLYZING)

@JvmField
val RESOURCE_EXTRACTING: HTHolderJeiRecipeType<RTResourceExtractingRecipe> =
HTJeiRecipeType(RagiumRecipeTypes.RESOURCE_EXTRACTING, RagiumBlocks.MACHINE_CASING)
val RESOURCE_EXTRACTING: HTRecipeHolderType<RTResourceExtractingRecipe> =
create(RagiumConstants.RESOURCE_EXTRACTING)

// Arcane
@JvmField
val ENCHANTING: HTHolderJeiRecipeType<RTEnchantingRecipe> =
HTJeiRecipeType(RagiumRecipeTypes.ENCHANTING, RagiumBlocks.ENCHANTER)
val ENCHANTING: HTRecipeHolderType<RTEnchantingRecipe> = create(RagiumConstants.ENCHANTING)
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@ import hiiragi283.lib.integration.jei.add
import hiiragi283.lib.integration.jei.category.HTHolderRecipeCategory
import hiiragi283.lib.recipe.result.HTFluidResult
import hiiragi283.ragium.api.recipe.RTElectrolyzingRecipe
import hiiragi283.ragium.api.recipe.RagiumRecipeTypes
import hiiragi283.ragium.client.integration.jei.RagiumJeiRecipeTypes
import hiiragi283.ragium.common.block.RagiumBlocks
import mezz.jei.api.gui.builder.IRecipeLayoutBuilder
import mezz.jei.api.gui.builder.IRecipeSlotBuilder
import mezz.jei.api.gui.widgets.IRecipeExtrasBuilder
Expand All @@ -14,8 +16,9 @@ import mezz.jei.api.recipe.IFocusGroup

class RTElectrolyzingRecipeCategory(guiHelper: IGuiHelper) :
HTHolderRecipeCategory<RTElectrolyzingRecipe>(
guiHelper,
RagiumJeiRecipeTypes.ELECTROLYZING,
RagiumRecipeTypes.ELECTROLYZING,
guiHelper.createDrawableItemLike(RagiumBlocks.ELECTROLYZER),
18 * 6,
18 * 1,
RTElectrolyzingRecipe.CODEC
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,17 @@ package hiiragi283.ragium.client.integration.jei.category
import hiiragi283.lib.integration.jei.add
import hiiragi283.lib.integration.jei.category.HTDoubleItemToRecipeCategory
import hiiragi283.ragium.api.recipe.RTEnchantingRecipe
import hiiragi283.ragium.api.recipe.RagiumRecipeTypes
import hiiragi283.ragium.client.integration.jei.RagiumJeiRecipeTypes
import hiiragi283.ragium.common.block.RagiumBlocks
import mezz.jei.api.gui.builder.IRecipeSlotBuilder
import mezz.jei.api.helpers.IGuiHelper

class RTEnchantingRecipeCategory(guiHelper: IGuiHelper) :
HTDoubleItemToRecipeCategory<RTEnchantingRecipe>(
guiHelper,
RagiumJeiRecipeTypes.ENCHANTING,
RagiumRecipeTypes.ENCHANTING,
guiHelper.createDrawableItemLike(RagiumBlocks.ENCHANTER),
RTEnchantingRecipe.CODEC
) {
override fun setPrimaryInput(builder: IRecipeSlotBuilder, recipe: RTEnchantingRecipe) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package hiiragi283.ragium.client.integration.jei.category

import hiiragi283.lib.gui.HTBackgroundType
import hiiragi283.lib.integration.jei.add
import hiiragi283.lib.integration.jei.category.HTHolderRecipeCategory
import hiiragi283.ragium.api.recipe.RTFreezingRecipe
import hiiragi283.ragium.api.recipe.RagiumRecipeTypes
import hiiragi283.ragium.client.integration.jei.RagiumJeiRecipeTypes
import hiiragi283.ragium.common.block.RagiumBlocks
import mezz.jei.api.gui.builder.IRecipeLayoutBuilder
import mezz.jei.api.gui.widgets.IRecipeExtrasBuilder
import mezz.jei.api.helpers.IGuiHelper
import mezz.jei.api.recipe.IFocusGroup

class RTFreezingRecipeCategory(guiHelper: IGuiHelper) :
HTHolderRecipeCategory<RTFreezingRecipe>(
RagiumJeiRecipeTypes.FREEZING,
RagiumRecipeTypes.FREEZING,
guiHelper.createDrawableItemLike(RagiumBlocks.FREEZER),
18 * 6,
18 * 1,
RTFreezingRecipe.CODEC
) {
override fun setupRecipe(builder: IRecipeLayoutBuilder, recipe: RTFreezingRecipe, focuses: IFocusGroup) {
// inputs
builder
.addInputSlot(getPosition(0), getPosition(0))
.add(recipe.ingredient)
.setSlotBackground(HTBackgroundType.INPUT)
builder
.addInputSlot(getPosition(2), getPosition(0))
.add(recipe.catalyst)
.setSlotBackground(HTBackgroundType.NONE)
// output
builder
.addOutputSlot(getPosition(5), getPosition(0))
.add(recipe.result)
.setSlotBackground(HTBackgroundType.OUTPUT)
}

override fun setupRecipeExtras(builder: IRecipeExtrasBuilder, recipe: RTFreezingRecipe, focuses: IFocusGroup) {
builder.addRecipePlus(getPosition(1))
builder.addRecipeArrow(recipe).setPosition(getPosition(3.25), getPosition(0))
}
}
Loading
Loading