From 8944ad51824cedef0b81464e76ce7d6ef8d682a9 Mon Sep 17 00:00:00 2001
From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com>
Date: Wed, 10 Dec 2025 03:32:43 +0900
Subject: [PATCH 01/49] refactor: unified recipe inputs into HTRecipeInput
---
.../ragium/api/recipe/HTFluidRecipe.kt | 23 +---
.../hiiragi283/ragium/api/recipe/HTRecipe.kt | 47 ++-----
.../ragium/api/recipe/HTRecipeFinder.kt | 2 -
.../ragium/api/recipe/RagiumRecipeTypes.kt | 30 ++---
.../api/recipe/extra/HTExtraItemRecipe.kt | 6 +-
.../api/recipe/extra/HTPlantingRecipe.kt | 34 ++---
.../recipe/extra/HTSingleExtraItemRecipe.kt | 7 +-
.../recipe/ingredient/HTFluidIngredient.kt | 4 +-
.../api/recipe/ingredient/HTIngredient.kt | 10 +-
.../api/recipe/ingredient/HTItemIngredient.kt | 10 +-
.../api/recipe/input/HTDoubleRecipeInput.kt | 20 ---
.../api/recipe/input/HTFluidRecipeInput.kt | 10 --
.../input/HTItemWithFluidRecipeInput.kt | 30 -----
.../api/recipe/input/HTMultiRecipeInput.kt | 84 ------------
.../ragium/api/recipe/input/HTRecipeInput.kt | 120 ++++++++++++++++++
.../api/recipe/multi/HTCombineRecipe.kt | 19 ++-
.../api/recipe/multi/HTComplexRecipe.kt | 3 +-
.../recipe/multi/HTItemWithCatalystRecipe.kt | 3 +-
.../recipe/multi/HTRockGeneratingRecipe.kt | 27 ++--
.../recipe/multi/HTShapelessInputsRecipe.kt | 3 +-
.../api/recipe/single/HTSingleFluidRecipe.kt | 6 +-
.../api/recipe/single/HTSingleItemRecipe.kt | 14 +-
.../api/registry/impl/HTDeferredRecipeType.kt | 22 +---
.../ragium/api/stack/ImmutableItemStack.kt | 3 +
.../ragium/api/storage/item/HTItemSlots.kt | 3 -
.../emi/category/RagiumEmiRecipeCategories.kt | 30 ++---
.../recipe/base/HTMultiOutputsEmiRecipe.kt | 2 +-
.../device/HTStoneCollectorBlockEntity.kt | 18 +--
.../processor/HTAdvancedMixerBlockEntity.kt | 6 +-
.../processor/HTAlloySmelterBlockEntity.kt | 12 +-
.../entity/processor/HTBreweryBlockEntity.kt | 4 +-
.../processor/HTCompressorBlockEntity.kt | 4 +-
.../entity/processor/HTCrusherBlockEntity.kt | 6 +-
.../processor/HTCuttingMachineBlockEntity.kt | 11 +-
.../processor/HTElectricFurnaceBlockEntity.kt | 7 +-
.../processor/HTEnchanterBlockEntity.kt | 4 +-
.../processor/HTExtractorBlockEntity.kt | 4 +-
.../entity/processor/HTMelterBlockEntity.kt | 6 +-
.../entity/processor/HTMixerBlockEntity.kt | 8 +-
.../processor/HTMobCrusherBlockEntity.kt | 17 ++-
.../processor/HTMultiSmelterBlockEntity.kt | 16 ++-
.../processor/HTProcessorBlockEntity.kt | 14 +-
.../processor/HTPulverizerBlockEntity.kt | 6 +-
.../entity/processor/HTRefineryBlockEntity.kt | 14 +-
.../processor/HTSimulatorBlockEntity.kt | 4 +-
.../base/HTAbstractCombinerBlockEntity.kt | 14 +-
.../base/HTAbstractCrusherBlockEntity.kt | 6 +-
.../base/HTAbstractSmelterBlockEntity.kt | 5 +-
.../processor/base/HTComplexBlockEntity.kt | 12 +-
.../base/HTItemWithCatalystBlockEntity.kt | 14 +-
.../base/HTSingleItemInputBlockEntity.kt | 24 ++--
.../common/recipe/HTAutoCraftingRecipe.kt | 19 ++-
.../common/recipe/HTVanillaCookingRecipe.kt | 5 +-
.../common/recipe/HTVanillaResultFactory.kt | 6 +-
.../recipe/HTVanillaSingleItemRecipe.kt | 26 ++--
.../recipe/machine/HTCopyEnchantingRecipe.kt | 25 ++--
.../recipe/machine/HTExpExtractingRecipe.kt | 34 ++---
.../ragium/impl/recipe/HTAlloyingRecipe.kt | 10 +-
.../ragium/impl/recipe/HTBrewingRecipe.kt | 20 +--
.../ragium/impl/recipe/HTCompressingRecipe.kt | 13 +-
.../ragium/impl/recipe/HTEnchantingRecipe.kt | 25 +---
.../ragium/impl/recipe/HTExtractingRecipe.kt | 13 +-
.../ragium/impl/recipe/HTMixingRecipe.kt | 23 +---
.../ragium/impl/recipe/HTRefiningRecipe.kt | 15 +--
.../impl/recipe/HTSimpleMixingRecipe.kt | 15 +--
.../ragium/impl/recipe/HTSimulatingRecipe.kt | 13 +-
.../impl/recipe/base/HTBasicCombineRecipe.kt | 12 +-
.../recipe/base/HTBasicComplexOutputRecipe.kt | 22 +---
.../impl/recipe/base/HTBasicComplexRecipe.kt | 3 +-
.../base/HTBasicItemWithCatalystRecipe.kt | 11 +-
.../base/HTBasicSingleExtraItemRecipe.kt | 20 +--
.../recipe/base/HTBasicSingleFluidRecipe.kt | 12 +-
.../recipe/base/HTBasicSingleOutputRecipe.kt | 8 +-
.../ragium/setup/RagiumRecipeBiCodecs.kt | 12 +-
74 files changed, 499 insertions(+), 671 deletions(-)
delete mode 100644 src/api/kotlin/hiiragi283/ragium/api/recipe/input/HTDoubleRecipeInput.kt
delete mode 100644 src/api/kotlin/hiiragi283/ragium/api/recipe/input/HTFluidRecipeInput.kt
delete mode 100644 src/api/kotlin/hiiragi283/ragium/api/recipe/input/HTItemWithFluidRecipeInput.kt
delete mode 100644 src/api/kotlin/hiiragi283/ragium/api/recipe/input/HTMultiRecipeInput.kt
create mode 100644 src/api/kotlin/hiiragi283/ragium/api/recipe/input/HTRecipeInput.kt
diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/HTFluidRecipe.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/HTFluidRecipe.kt
index 717e7d3e2..ed705945d 100644
--- a/src/api/kotlin/hiiragi283/ragium/api/recipe/HTFluidRecipe.kt
+++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/HTFluidRecipe.kt
@@ -1,35 +1,18 @@
package hiiragi283.ragium.api.recipe
-import hiiragi283.ragium.api.recipe.result.HTFluidResult
-import hiiragi283.ragium.api.recipe.result.HTRecipeResult
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
import hiiragi283.ragium.api.stack.ImmutableFluidStack
import net.minecraft.core.HolderLookup
-import net.minecraft.world.item.crafting.RecipeInput
/**
* 液体を完成品にとるレシピのインターフェース
- * @param INPUT レシピの入力となるクラス
*/
-interface HTFluidRecipe : HTRecipe {
+interface HTFluidRecipe : HTRecipe {
/**
* 指定された[input]と[provider]から[ImmutableFluidStack]を返します。
* @param input レシピの入力
* @param provider レジストリのアクセス
* @return 完成品となる[ImmutableFluidStack]
*/
- fun assembleFluid(input: INPUT, provider: HolderLookup.Provider): ImmutableFluidStack?
-
- // Extension //
-
- /**
- * 指定された引数からアイテムの完成品を返します。
- * @param input レシピの入力
- * @param provider レジストリのアクセス
- * @param result [ImmutableFluidStack]の[HTRecipeResult]
- * @return [test]の戻り値が`false`,または[HTRecipeResult.getStackOrNull]が`null`の場合は`null`
- */
- fun getFluidResult(input: INPUT, provider: HolderLookup.Provider?, result: HTFluidResult?): ImmutableFluidStack? = when {
- test(input) -> result?.getStackOrNull(provider)
- else -> null
- }
+ fun assembleFluid(input: HTRecipeInput, provider: HolderLookup.Provider): ImmutableFluidStack?
}
diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/HTRecipe.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/HTRecipe.kt
index 05276bba3..5a997e360 100644
--- a/src/api/kotlin/hiiragi283/ragium/api/recipe/HTRecipe.kt
+++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/HTRecipe.kt
@@ -1,76 +1,47 @@
package hiiragi283.ragium.api.recipe
-import hiiragi283.ragium.api.recipe.result.HTItemResult
-import hiiragi283.ragium.api.recipe.result.HTRecipeResult
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
import hiiragi283.ragium.api.stack.ImmutableItemStack
import net.minecraft.core.HolderLookup
import net.minecraft.core.NonNullList
import net.minecraft.world.item.ItemStack
import net.minecraft.world.item.crafting.Ingredient
import net.minecraft.world.item.crafting.Recipe
-import net.minecraft.world.item.crafting.RecipeInput
import net.minecraft.world.item.crafting.RecipeSerializer
import net.minecraft.world.item.crafting.RecipeType
-import net.minecraft.world.level.Level
-import java.util.function.Predicate
/**
* Ragiumで使用する[Recipe]の拡張インターフェース
* @see mekanism.api.recipes.MekanismRecipe
*/
-interface HTRecipe :
- Recipe,
- Predicate {
- /**
- * 指定された[input]がこのレシピの条件を満たしているか判定します。
- */
- override fun test(input: INPUT): Boolean
-
- override fun matches(input: INPUT, level: Level): Boolean = !isIncomplete && test(input)
-
+interface HTRecipe : Recipe {
@Deprecated("Not used in Ragium", level = DeprecationLevel.ERROR)
override fun canCraftInDimensions(width: Int, height: Int): Boolean = true
- fun assembleItem(input: INPUT, provider: HolderLookup.Provider): ImmutableItemStack?
+ fun assembleItem(input: HTRecipeInput, provider: HolderLookup.Provider): ImmutableItemStack?
@Deprecated(
- "Use `assembleItem(INPUT, HolderLookup.Provider) `instead",
+ "Use `assembleItem(HTRecipeInput, HolderLookup.Provider) `instead",
ReplaceWith("this.assembleItem(input, registries)"),
DeprecationLevel.ERROR,
)
- override fun assemble(input: INPUT, registries: HolderLookup.Provider): ItemStack =
+ override fun assemble(input: HTRecipeInput, registries: HolderLookup.Provider): ItemStack =
assembleItem(input, registries)?.unwrap() ?: ItemStack.EMPTY
- @Deprecated("Use `assemble(INPUT, HolderLookup.Provider) `instead", level = DeprecationLevel.ERROR)
+ @Deprecated("Use `assemble(HTRecipeInput, HolderLookup.Provider) `instead", level = DeprecationLevel.ERROR)
override fun getResultItem(registries: HolderLookup.Provider): ItemStack = ItemStack.EMPTY
@Deprecated("Not used in Ragium", level = DeprecationLevel.ERROR)
- override fun getRemainingItems(input: INPUT): NonNullList = super.getRemainingItems(input)
+ override fun getRemainingItems(input: HTRecipeInput): NonNullList = super.getRemainingItems(input)
@Deprecated("Not used in Ragium", level = DeprecationLevel.ERROR)
override fun getIngredients(): NonNullList = super.getIngredients()
override fun isSpecial(): Boolean = true
- abstract override fun isIncomplete(): Boolean
-
- // Extension //
-
- /**
- * 指定された引数からアイテムの完成品を返します。
- * @param input レシピの入力
- * @param provider レジストリのアクセス
- * @param result [ImmutableItemStack]の[HTRecipeResult]
- * @return [test]の戻り値が`false`,または[HTRecipeResult.getStackOrNull]が`null`の場合は`null`
- */
- fun getItemResult(input: INPUT, provider: HolderLookup.Provider?, result: HTItemResult?): ImmutableItemStack? = when {
- test(input) -> result?.getStackOrNull(provider)
- else -> null
- }
-
// Fake //
- interface Fake : HTRecipe {
+ interface Fake : HTRecipe {
@Deprecated("Not implemented", level = DeprecationLevel.ERROR)
override fun getSerializer(): RecipeSerializer<*> = throw UnsupportedOperationException()
@@ -80,7 +51,7 @@ interface HTRecipe :
// Modifiable //
- interface Modifiable> : HTRecipe {
+ interface Modifiable : HTRecipe {
fun copyAndMultiply(multiplier: Int): RECIPE
}
}
diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/HTRecipeFinder.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/HTRecipeFinder.kt
index a3c62afcb..d5cb2c54f 100644
--- a/src/api/kotlin/hiiragi283/ragium/api/recipe/HTRecipeFinder.kt
+++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/HTRecipeFinder.kt
@@ -26,6 +26,4 @@ fun interface HTRecipeFinder> {
level: Level,
lastRecipe: RecipeHolder?,
): RecipeHolder?
-
- fun matches(recipe: RECIPE, input: INPUT, level: Level): Boolean = recipe.matches(input, level) && !recipe.isIncomplete
}
diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt
index 297be607c..81cff1d6f 100644
--- a/src/api/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt
+++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/RagiumRecipeTypes.kt
@@ -4,8 +4,7 @@ import hiiragi283.ragium.api.RagiumAPI
import hiiragi283.ragium.api.RagiumConst
import hiiragi283.ragium.api.recipe.extra.HTPlantingRecipe
import hiiragi283.ragium.api.recipe.extra.HTSingleExtraItemRecipe
-import hiiragi283.ragium.api.recipe.input.HTDoubleRecipeInput
-import hiiragi283.ragium.api.recipe.input.HTMultiRecipeInput
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
import hiiragi283.ragium.api.recipe.multi.HTCombineRecipe
import hiiragi283.ragium.api.recipe.multi.HTComplexRecipe
import hiiragi283.ragium.api.recipe.multi.HTItemWithCatalystRecipe
@@ -15,47 +14,46 @@ import hiiragi283.ragium.api.recipe.single.HTSingleFluidRecipe
import hiiragi283.ragium.api.registry.impl.HTDeferredRecipeType
import net.minecraft.world.item.crafting.Recipe
import net.minecraft.world.item.crafting.RecipeInput
-import net.minecraft.world.item.crafting.SingleRecipeInput
object RagiumRecipeTypes {
@JvmField
- val ALLOYING: HTDeferredRecipeType = create(RagiumConst.ALLOYING)
+ val ALLOYING: HTDeferredRecipeType = create(RagiumConst.ALLOYING)
@JvmField
- val BREWING: HTDeferredRecipeType = create(RagiumConst.BREWING)
+ val BREWING: HTDeferredRecipeType = create(RagiumConst.BREWING)
@JvmField
- val COMPRESSING: HTDeferredRecipeType = create(RagiumConst.COMPRESSING)
+ val COMPRESSING: HTDeferredRecipeType = create(RagiumConst.COMPRESSING)
@JvmField
- val CRUSHING: HTDeferredRecipeType = create(RagiumConst.CRUSHING)
+ val CRUSHING: HTDeferredRecipeType = create(RagiumConst.CRUSHING)
@JvmField
- val CUTTING: HTDeferredRecipeType = create(RagiumConst.CUTTING)
+ val CUTTING: HTDeferredRecipeType = create(RagiumConst.CUTTING)
@JvmField
- val ENCHANTING: HTDeferredRecipeType = create(RagiumConst.ENCHANTING)
+ val ENCHANTING: HTDeferredRecipeType = create(RagiumConst.ENCHANTING)
@JvmField
- val EXTRACTING: HTDeferredRecipeType = create(RagiumConst.EXTRACTING)
+ val EXTRACTING: HTDeferredRecipeType = create(RagiumConst.EXTRACTING)
@JvmField
- val MELTING: HTDeferredRecipeType = create(RagiumConst.MELTING)
+ val MELTING: HTDeferredRecipeType = create(RagiumConst.MELTING)
@JvmField
- val MIXING: HTDeferredRecipeType = create(RagiumConst.MIXING)
+ val MIXING: HTDeferredRecipeType = create(RagiumConst.MIXING)
@JvmField
- val PLANTING: HTDeferredRecipeType = create(RagiumConst.PLANTING)
+ val PLANTING: HTDeferredRecipeType = create(RagiumConst.PLANTING)
@JvmField
- val REFINING: HTDeferredRecipeType = create(RagiumConst.REFINING)
+ val REFINING: HTDeferredRecipeType = create(RagiumConst.REFINING)
@JvmField
- val ROCK_GENERATING: HTDeferredRecipeType = create(RagiumConst.ROCK_GENERATING)
+ val ROCK_GENERATING: HTDeferredRecipeType = create(RagiumConst.ROCK_GENERATING)
@JvmField
- val SIMULATING: HTDeferredRecipeType = create(RagiumConst.SIMULATING)
+ val SIMULATING: HTDeferredRecipeType = create(RagiumConst.SIMULATING)
@JvmStatic
private fun > create(path: String): HTDeferredRecipeType =
diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/extra/HTExtraItemRecipe.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/extra/HTExtraItemRecipe.kt
index 4d858322d..bb4beeacc 100644
--- a/src/api/kotlin/hiiragi283/ragium/api/recipe/extra/HTExtraItemRecipe.kt
+++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/extra/HTExtraItemRecipe.kt
@@ -1,13 +1,13 @@
package hiiragi283.ragium.api.recipe.extra
import hiiragi283.ragium.api.recipe.HTRecipe
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
import hiiragi283.ragium.api.stack.ImmutableItemStack
import net.minecraft.core.HolderLookup
-import net.minecraft.world.item.crafting.RecipeInput
/**
* 主産物と副産物を生産するレシピ
*/
-interface HTExtraItemRecipe : HTRecipe {
- fun assembleExtraItem(input: INPUT, provider: HolderLookup.Provider): ImmutableItemStack?
+interface HTExtraItemRecipe : HTRecipe {
+ fun assembleExtraItem(input: HTRecipeInput, provider: HolderLookup.Provider): ImmutableItemStack?
}
diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/extra/HTPlantingRecipe.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/extra/HTPlantingRecipe.kt
index 05d7bbcd4..4099fefba 100644
--- a/src/api/kotlin/hiiragi283/ragium/api/recipe/extra/HTPlantingRecipe.kt
+++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/extra/HTPlantingRecipe.kt
@@ -4,46 +4,36 @@ import hiiragi283.ragium.api.RagiumPlatform
import hiiragi283.ragium.api.recipe.RagiumRecipeTypes
import hiiragi283.ragium.api.recipe.ingredient.HTFluidIngredient
import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient
-import hiiragi283.ragium.api.recipe.input.HTMultiRecipeInput
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
import hiiragi283.ragium.api.recipe.result.HTItemResult
import hiiragi283.ragium.api.registry.HTKeyOrTagEntry
import hiiragi283.ragium.api.stack.ImmutableItemStack
import net.minecraft.core.HolderLookup
import net.minecraft.core.component.DataComponentPatch
-import net.minecraft.core.registries.BuiltInRegistries
import net.minecraft.world.item.Item
-import net.minecraft.world.item.ItemStack
import net.minecraft.world.item.crafting.RecipeSerializer
import net.minecraft.world.item.crafting.RecipeType
+import net.minecraft.world.level.Level
class HTPlantingRecipe(
val seed: HTKeyOrTagEntry- ,
val soil: HTItemIngredient,
val fluid: HTFluidIngredient,
val crop: HTItemResult,
-) : HTExtraItemRecipe {
+) : HTExtraItemRecipe {
val seedResult = HTItemResult(seed, 1, DataComponentPatch.EMPTY)
- override fun assembleExtraItem(input: HTMultiRecipeInput, provider: HolderLookup.Provider): ImmutableItemStack? =
- getItemResult(input, provider, seedResult)
+ override fun assembleExtraItem(input: HTRecipeInput, provider: HolderLookup.Provider): ImmutableItemStack? =
+ seedResult.getStackOrNull(provider)
- override fun test(input: HTMultiRecipeInput): Boolean {
- val seedItem: ItemStack = input.getItem(0)
- val bool1: Boolean = seed.unwrap().map(seedItem.itemHolder::`is`, seedItem::`is`)
- val bool2: Boolean = soil.test(input.getItem(1))
- val bool3: Boolean = fluid.test(input.getFluid(0))
- return bool1 && bool2 && bool3
- }
+ override fun assembleItem(input: HTRecipeInput, provider: HolderLookup.Provider): ImmutableItemStack? = crop.getStackOrNull(provider)
- override fun assembleItem(input: HTMultiRecipeInput, provider: HolderLookup.Provider): ImmutableItemStack? =
- getItemResult(input, provider, crop)
-
- override fun isIncomplete(): Boolean {
- val bool1: Boolean = !seed.unwrap().map(BuiltInRegistries.ITEM::containsKey) { true }
- val bool2: Boolean = soil.hasNoMatchingStacks()
- val bool3: Boolean = fluid.hasNoMatchingStacks()
- val bool4: Boolean = crop.hasNoMatchingStack()
- return bool1 || bool2 || bool3 || bool4
+ override fun matches(input: HTRecipeInput, level: Level): Boolean {
+ val seedItem: ImmutableItemStack = input.item(0) ?: return false
+ val bool1: Boolean = seed.unwrap().map(seedItem::isOf, seedItem::isOf)
+ val bool2: Boolean = input.testCatalyst(1, soil)
+ val bool3: Boolean = input.testFluid(0, fluid)
+ return bool1 && bool2 && bool3
}
override fun getSerializer(): RecipeSerializer<*> = RagiumPlatform.INSTANCE.getPlantingRecipeSerializer()
diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/extra/HTSingleExtraItemRecipe.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/extra/HTSingleExtraItemRecipe.kt
index e3ebeee4b..b49a93d89 100644
--- a/src/api/kotlin/hiiragi283/ragium/api/recipe/extra/HTSingleExtraItemRecipe.kt
+++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/extra/HTSingleExtraItemRecipe.kt
@@ -1,11 +1,10 @@
package hiiragi283.ragium.api.recipe.extra
-import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient
-import net.minecraft.world.item.crafting.SingleRecipeInput
+import hiiragi283.ragium.api.recipe.single.HTSingleItemRecipe
/**
* 単一のアイテムから主産物と副産物を生産するレシピ
*/
interface HTSingleExtraItemRecipe :
- HTExtraItemRecipe,
- HTItemIngredient.CountGetter
+ HTSingleItemRecipe,
+ HTExtraItemRecipe
diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/ingredient/HTFluidIngredient.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/ingredient/HTFluidIngredient.kt
index 4dc132294..de0bc9629 100644
--- a/src/api/kotlin/hiiragi283/ragium/api/recipe/ingredient/HTFluidIngredient.kt
+++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/ingredient/HTFluidIngredient.kt
@@ -38,13 +38,11 @@ data class HTFluidIngredient(private val ingredient: FluidIngredient, private va
fun copyWithAmount(amount: Int): HTFluidIngredient = HTFluidIngredient(ingredient, amount)
- override fun test(stack: ImmutableFluidStack): Boolean = testOnlyType(stack) && stack.amount() >= this.amount
-
override fun testOnlyType(stack: ImmutableFluidStack): Boolean = ingredient.test(stack.unwrap())
override fun getRequiredAmount(stack: ImmutableFluidStack): Int = if (testOnlyType(stack)) this.amount else 0
- override fun hasNoMatchingStacks(): Boolean = ingredient.hasNoFluids()
+ override fun getRequiredAmount(): Int = this.amount
override fun unwrap(): Either, Int>, List> = when (ingredient) {
is TagFluidIngredient -> Either.left(ingredient.tag() to amount)
diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/ingredient/HTIngredient.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/ingredient/HTIngredient.kt
index 1bc0f81a9..19647f2fb 100644
--- a/src/api/kotlin/hiiragi283/ragium/api/recipe/ingredient/HTIngredient.kt
+++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/ingredient/HTIngredient.kt
@@ -16,7 +16,7 @@ interface HTIngredient> : Predic
/**
* 指定された[stack]が条件を満たしているか判定します。
*/
- abstract override fun test(stack: STACK): Boolean
+ override fun test(stack: STACK): Boolean = testOnlyType(stack) && stack.amount() >= getRequiredAmount()
/**
* 指定された[stack]が数量を除いて条件を満たしているか判定します。
@@ -28,11 +28,7 @@ interface HTIngredient> : Predic
*/
fun getRequiredAmount(stack: STACK): Int
- /**
- * 条件に合致する[STACK]があるか判定します。
- * @return ない場合は`true`, ある場合は`false`
- */
- fun hasNoMatchingStacks(): Boolean
-
+ fun getRequiredAmount(): Int
+
fun unwrap(): Either, Int>, List>
}
diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/ingredient/HTItemIngredient.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/ingredient/HTItemIngredient.kt
index e2bf37dcc..688723ca9 100644
--- a/src/api/kotlin/hiiragi283/ragium/api/recipe/ingredient/HTItemIngredient.kt
+++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/ingredient/HTItemIngredient.kt
@@ -25,8 +25,8 @@ class HTItemIngredient(private val ingredient: Ingredient, private val count: In
}
companion object {
- @JvmStatic
- private val FLAT_CODEC: BiCodec =
+ @JvmField
+ val UNSIZED_CODEC: BiCodec =
VanillaBiCodecs.INGREDIENT.xmap(::HTItemIngredient, HTItemIngredient::ingredient)
@JvmStatic
@@ -38,7 +38,7 @@ class HTItemIngredient(private val ingredient: Ingredient, private val count: In
@JvmField
val CODEC: BiCodec = BiCodecs
- .xor(FLAT_CODEC, NESTED_CODEC)
+ .xor(UNSIZED_CODEC, NESTED_CODEC)
.xmap(::unwrapEither) { ingredient: HTItemIngredient ->
when (ingredient.count) {
1 -> Either.left(ingredient)
@@ -55,13 +55,11 @@ class HTItemIngredient(private val ingredient: Ingredient, private val count: In
fun copyWithCount(operator: IntUnaryOperator): HTItemIngredient = HTItemIngredient(this.ingredient, operator.applyAsInt(this.count))
- override fun test(stack: ImmutableItemStack): Boolean = testOnlyType(stack) && stack.amount() >= this.count
-
override fun testOnlyType(stack: ImmutableItemStack): Boolean = ingredient.test(stack.unwrap())
override fun getRequiredAmount(stack: ImmutableItemStack): Int = if (testOnlyType(stack)) this.count else 0
- override fun hasNoMatchingStacks(): Boolean = ingredient.items.isEmpty()
+ override fun getRequiredAmount(): Int = this.count
override fun unwrap(): Either, Int>, List> {
val custom: ICustomIngredient? = ingredient.customIngredient
diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/input/HTDoubleRecipeInput.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/input/HTDoubleRecipeInput.kt
deleted file mode 100644
index bae27ae73..000000000
--- a/src/api/kotlin/hiiragi283/ragium/api/recipe/input/HTDoubleRecipeInput.kt
+++ /dev/null
@@ -1,20 +0,0 @@
-package hiiragi283.ragium.api.recipe.input
-
-import hiiragi283.ragium.api.storage.item.HTItemSlot
-import hiiragi283.ragium.api.storage.item.getItemStack
-import net.minecraft.world.item.ItemStack
-import net.minecraft.world.item.crafting.RecipeInput
-
-@ConsistentCopyVisibility
-@JvmRecord
-data class HTDoubleRecipeInput private constructor(val first: ItemStack, val second: ItemStack) : RecipeInput {
- constructor(first: HTItemSlot, second: HTItemSlot) : this(first.getItemStack(), second.getItemStack())
-
- override fun getItem(index: Int): ItemStack = when (index) {
- 0 -> first
- 1 -> second
- else -> ItemStack.EMPTY
- }
-
- override fun size(): Int = 2
-}
diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/input/HTFluidRecipeInput.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/input/HTFluidRecipeInput.kt
deleted file mode 100644
index a0bbd609d..000000000
--- a/src/api/kotlin/hiiragi283/ragium/api/recipe/input/HTFluidRecipeInput.kt
+++ /dev/null
@@ -1,10 +0,0 @@
-package hiiragi283.ragium.api.recipe.input
-
-import net.minecraft.world.item.crafting.RecipeInput
-import net.neoforged.neoforge.fluids.FluidStack
-
-interface HTFluidRecipeInput : RecipeInput {
- fun getFluid(index: Int): FluidStack
-
- abstract override fun isEmpty(): Boolean
-}
diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/input/HTItemWithFluidRecipeInput.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/input/HTItemWithFluidRecipeInput.kt
deleted file mode 100644
index bc1756f03..000000000
--- a/src/api/kotlin/hiiragi283/ragium/api/recipe/input/HTItemWithFluidRecipeInput.kt
+++ /dev/null
@@ -1,30 +0,0 @@
-package hiiragi283.ragium.api.recipe.input
-
-import hiiragi283.ragium.api.storage.fluid.HTFluidTank
-import hiiragi283.ragium.api.storage.fluid.getFluidStack
-import hiiragi283.ragium.api.storage.item.HTItemSlot
-import hiiragi283.ragium.api.storage.item.getItemStack
-import hiiragi283.ragium.api.tag.RagiumModTags
-import net.minecraft.world.item.ItemStack
-import net.minecraft.world.item.crafting.RecipeInput
-import net.neoforged.neoforge.fluids.FluidStack
-
-/**
- * [ItemStack]と[FluidStack]を受け取る[RecipeInput]の実装
- */
-@ConsistentCopyVisibility
-@JvmRecord
-data class HTItemWithFluidRecipeInput private constructor(val item: ItemStack, val fluid: FluidStack) : HTFluidRecipeInput {
- constructor(slot: HTItemSlot, tank: HTFluidTank) : this(slot.getItemStack(), tank.getFluidStack())
-
- private fun validateItem(): ItemStack =
- item.takeUnless { stack: ItemStack -> stack.`is`(RagiumModTags.Items.IGNORED_IN_RECIPES) } ?: ItemStack.EMPTY
-
- override fun getItem(index: Int): ItemStack = validateItem()
-
- override fun getFluid(index: Int): FluidStack = fluid
-
- override fun size(): Int = 1
-
- override fun isEmpty(): Boolean = validateItem().isEmpty && fluid.isEmpty
-}
diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/input/HTMultiRecipeInput.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/input/HTMultiRecipeInput.kt
deleted file mode 100644
index a5443695c..000000000
--- a/src/api/kotlin/hiiragi283/ragium/api/recipe/input/HTMultiRecipeInput.kt
+++ /dev/null
@@ -1,84 +0,0 @@
-package hiiragi283.ragium.api.recipe.input
-
-import hiiragi283.ragium.api.recipe.ingredient.HTIngredient
-import hiiragi283.ragium.api.stack.ImmutableFluidStack
-import hiiragi283.ragium.api.stack.ImmutableItemStack
-import hiiragi283.ragium.api.stack.ImmutableStack
-import hiiragi283.ragium.api.tag.RagiumModTags
-import net.minecraft.world.item.ItemStack
-import net.neoforged.neoforge.fluids.FluidStack
-
-@ConsistentCopyVisibility
-@JvmRecord
-data class HTMultiRecipeInput private constructor(val items: List, val fluids: List) :
- HTFluidRecipeInput {
- companion object {
- @JvmStatic
- fun > getMatchingSlots(
- ingredients: List>,
- stacks: List,
- ): IntArray {
- if (ingredients.isEmpty() || (stacks.isEmpty() || stacks.filterNotNull().isEmpty())) return intArrayOf()
- if (ingredients.size > stacks.size) return intArrayOf()
-
- val stacks1: MutableList = stacks.toMutableList()
- val result: MutableList = MutableList(ingredients.size) { -1 }
-
- ingredients.forEachIndexed { index: Int, ingredient: HTIngredient<*, STACK> ->
- stacks1.forEachIndexed stack@{ index1: Int, stack: STACK? ->
- if (stack != null) {
- if (ingredient.test(stack)) {
- result[index] = index1
- val count: Int = ingredient.getRequiredAmount(stack)
- stacks1[index1] = stack.copyWithAmount(stack.amount() - count)
- return@stack
- }
- }
- }
- }
- result.removeIf { it < 0 }
- return when {
- result.size != ingredients.size -> intArrayOf()
- else -> result.toIntArray()
- }
- }
-
- @JvmStatic
- fun > hasMatchingSlots(
- ingredients: List>,
- stacks: List,
- ): Boolean {
- val slots: IntArray = getMatchingSlots(ingredients, stacks)
- return slots.isNotEmpty() && slots.size == ingredients.size
- }
-
- fun > isEmpty(stacks: List): Boolean =
- stacks.isEmpty() || stacks.filterNotNull().isEmpty()
-
- @JvmStatic
- inline fun create(builderAction: Builder.() -> Unit): HTMultiRecipeInput? = Builder().apply(builderAction).build()
- }
-
- constructor(item: ImmutableItemStack?, fluid: ImmutableFluidStack?) : this(listOfNotNull(item), listOfNotNull(fluid))
-
- private fun validateItem(index: Int): ItemStack = items
- .getOrNull(index)
- ?.takeUnless { stack: ImmutableItemStack -> stack.isOf(RagiumModTags.Items.IGNORED_IN_RECIPES) }
- ?.unwrap()
- ?: ItemStack.EMPTY
-
- override fun getItem(index: Int): ItemStack = validateItem(index)
-
- override fun getFluid(index: Int): FluidStack = fluids.getOrNull(index)?.unwrap() ?: FluidStack.EMPTY
-
- override fun size(): Int = items.size
-
- override fun isEmpty(): Boolean = isEmpty(items) && isEmpty(fluids)
-
- class Builder {
- val items: MutableList = mutableListOf()
- val fluids: MutableList = mutableListOf()
-
- fun build(): HTMultiRecipeInput? = HTMultiRecipeInput(items, fluids).takeUnless(HTMultiRecipeInput::isEmpty)
- }
- }
diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/input/HTRecipeInput.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/input/HTRecipeInput.kt
new file mode 100644
index 000000000..8502617a7
--- /dev/null
+++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/input/HTRecipeInput.kt
@@ -0,0 +1,120 @@
+package hiiragi283.ragium.api.recipe.input
+
+import hiiragi283.ragium.api.recipe.ingredient.HTFluidIngredient
+import hiiragi283.ragium.api.recipe.ingredient.HTIngredient
+import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient
+import hiiragi283.ragium.api.stack.ImmutableFluidStack
+import hiiragi283.ragium.api.stack.ImmutableItemStack
+import hiiragi283.ragium.api.stack.ImmutableStack
+import hiiragi283.ragium.api.tag.RagiumModTags
+import net.minecraft.world.item.ItemStack
+import net.minecraft.world.item.crafting.RecipeInput
+import net.minecraft.world.item.crafting.SingleRecipeInput
+import java.util.Optional
+
+@ConsistentCopyVisibility
+@JvmRecord
+data class HTRecipeInput private constructor(val items: List, val fluids: List) : RecipeInput {
+ companion object {
+ @JvmStatic
+ inline fun create(builderAction: Builder.() -> Unit): HTRecipeInput? = Builder().apply(builderAction).build()
+
+ @JvmStatic
+ fun single(stack: ImmutableItemStack?): HTRecipeInput? = create {
+ items += stack
+ }
+
+ @JvmStatic
+ fun > getMatchingSlots(
+ ingredients: List>,
+ stacks: List,
+ ): IntArray {
+ if (ingredients.isEmpty() || (stacks.isEmpty() || stacks.filterNotNull().isEmpty())) return intArrayOf()
+ if (ingredients.size > stacks.size) return intArrayOf()
+
+ val stacks1: MutableList = stacks.toMutableList()
+ val result: MutableList = MutableList(ingredients.size) { -1 }
+
+ ingredients.forEachIndexed { index: Int, ingredient: HTIngredient<*, STACK> ->
+ stacks1.forEachIndexed stack@{ index1: Int, stack: STACK? ->
+ if (stack != null) {
+ if (ingredient.test(stack)) {
+ result[index] = index1
+ val count: Int = ingredient.getRequiredAmount(stack)
+ stacks1[index1] = stack.copyWithAmount(stack.amount() - count)
+ return@stack
+ }
+ }
+ }
+ }
+ result.removeIf { it < 0 }
+ return when {
+ result.size != ingredients.size -> intArrayOf()
+ else -> result.toIntArray()
+ }
+ }
+
+ @JvmStatic
+ fun > hasMatchingSlots(ingredients: List>, stacks: List): Boolean {
+ val slots: IntArray = getMatchingSlots(ingredients, stacks)
+ return slots.isNotEmpty() && slots.size == ingredients.size
+ }
+
+ @JvmStatic
+ fun > isEmpty(stacks: List): Boolean = stacks.isEmpty() || stacks.filterNotNull().isEmpty()
+ }
+
+ private fun validateItem(index: Int): ImmutableItemStack? = items
+ .getOrNull(index)
+ ?.takeUnless { stack: ImmutableItemStack -> stack.isOf(RagiumModTags.Items.IGNORED_IN_RECIPES) }
+
+ fun toSingleItem(): SingleRecipeInput? = item(0)?.unwrap()?.let(::SingleRecipeInput)
+
+ fun item(index: Int): ImmutableItemStack? = validateItem(index)
+
+ fun fluid(index: Int): ImmutableFluidStack? = fluids.getOrNull(index)
+
+ fun testItem(index: Int, ingredient: HTItemIngredient): Boolean = testItem(index, ingredient::test)
+
+ inline fun testItem(index: Int, predicate: (ImmutableItemStack) -> Boolean): Boolean = item(index)?.let(predicate) ?: false
+
+ fun testItem(index: Int, ingredient: Optional): Boolean {
+ val stack: ImmutableItemStack = item(index) ?: return ingredient.isEmpty
+ return when {
+ ingredient.isPresent -> ingredient.get().test(stack)
+ else -> false
+ }
+ }
+
+ fun testFluid(index: Int, ingredient: HTFluidIngredient): Boolean = testFluid(index, ingredient::test)
+
+ inline fun testFluid(index: Int, predicate: (ImmutableFluidStack) -> Boolean): Boolean = fluid(index)?.let(predicate) ?: false
+
+ fun testCatalyst(index: Int, ingredient: HTItemIngredient): Boolean = item(index)?.let(ingredient::testOnlyType) ?: false
+
+ fun testCatalyst(index: Int, ingredient: Optional): Boolean {
+ val stack: ImmutableItemStack = item(index) ?: return ingredient.isEmpty
+ return when {
+ ingredient.isPresent -> ingredient.get().testOnlyType(stack)
+ else -> false
+ }
+ }
+
+ // RecipeInput //
+
+ @Deprecated("Use `item(Int)` instead", ReplaceWith("this.item(Int)"), DeprecationLevel.ERROR)
+ override fun getItem(index: Int): ItemStack = item(index)?.unwrap() ?: ItemStack.EMPTY
+
+ override fun size(): Int = items.size
+
+ override fun isEmpty(): Boolean = isEmpty(items) && isEmpty(fluids)
+
+ // Builder //
+
+ class Builder {
+ val items: MutableList = mutableListOf()
+ val fluids: MutableList = mutableListOf()
+
+ fun build(): HTRecipeInput? = HTRecipeInput(items, fluids).takeUnless(HTRecipeInput::isEmpty)
+ }
+}
diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTCombineRecipe.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTCombineRecipe.kt
index b2d423f8b..a9cebbbc0 100644
--- a/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTCombineRecipe.kt
+++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTCombineRecipe.kt
@@ -1,17 +1,30 @@
package hiiragi283.ragium.api.recipe.multi
import hiiragi283.ragium.api.recipe.HTRecipe
-import hiiragi283.ragium.api.recipe.input.HTMultiRecipeInput
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
import hiiragi283.ragium.api.stack.ImmutableFluidStack
import hiiragi283.ragium.api.stack.ImmutableItemStack
+import net.minecraft.world.level.Level
+import net.neoforged.neoforge.common.util.TriPredicate
/**
* 2種類のアイテムと単一の液体から,単一のアイテムを生産するレシピ
*/
-interface HTCombineRecipe : HTRecipe {
+interface HTCombineRecipe :
+ HTRecipe,
+ TriPredicate {
fun getLeftRequiredCount(stack: ImmutableItemStack): Int
fun getRightRequiredCount(stack: ImmutableItemStack): Int
- fun getRequiredAmount(input: HTMultiRecipeInput, stack: ImmutableFluidStack): Int
+ fun getRequiredAmount(input: HTRecipeInput, stack: ImmutableFluidStack): Int
+
+ override fun matches(input: HTRecipeInput, level: Level): Boolean {
+ val left: ImmutableItemStack = input.item(0) ?: return false
+ val right: ImmutableItemStack = input.item(1) ?: return false
+ val fluid: ImmutableFluidStack = input.fluid(0) ?: return false
+ return this.test(left, right, fluid)
+ }
+
+ override fun test(left: ImmutableItemStack, right: ImmutableItemStack, fluid: ImmutableFluidStack): Boolean
}
diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTComplexRecipe.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTComplexRecipe.kt
index 21cbcb313..fea756b4a 100644
--- a/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTComplexRecipe.kt
+++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTComplexRecipe.kt
@@ -1,14 +1,13 @@
package hiiragi283.ragium.api.recipe.multi
import hiiragi283.ragium.api.recipe.HTFluidRecipe
-import hiiragi283.ragium.api.recipe.input.HTMultiRecipeInput
import hiiragi283.ragium.api.stack.ImmutableFluidStack
import hiiragi283.ragium.api.stack.ImmutableItemStack
/**
* 複数のインプット(アイテム,液体)から複数の完成品(アイテム,液体)を生産するレシピ
*/
-interface HTComplexRecipe : HTFluidRecipe {
+interface HTComplexRecipe : HTFluidRecipe {
fun getRequiredCount(index: Int, stack: ImmutableItemStack): Int
fun getRequiredAmount(index: Int, stack: ImmutableFluidStack): Int
diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTItemWithCatalystRecipe.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTItemWithCatalystRecipe.kt
index 8163a53ba..3d6adf275 100644
--- a/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTItemWithCatalystRecipe.kt
+++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTItemWithCatalystRecipe.kt
@@ -2,11 +2,10 @@ package hiiragi283.ragium.api.recipe.multi
import hiiragi283.ragium.api.recipe.HTFluidRecipe
import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient
-import hiiragi283.ragium.api.recipe.input.HTDoubleRecipeInput
/**
* 単一のアイテムと触媒から複数の完成品(アイテム,液体)を生産するレシピ
*/
interface HTItemWithCatalystRecipe :
- HTFluidRecipe,
+ HTFluidRecipe,
HTItemIngredient.CountGetter
diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTRockGeneratingRecipe.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTRockGeneratingRecipe.kt
index e4a3d7bc6..b711d92a7 100644
--- a/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTRockGeneratingRecipe.kt
+++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTRockGeneratingRecipe.kt
@@ -5,13 +5,14 @@ import hiiragi283.ragium.api.RagiumPlatform
import hiiragi283.ragium.api.recipe.RagiumRecipeTypes
import hiiragi283.ragium.api.recipe.ingredient.HTFluidIngredient
import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient
-import hiiragi283.ragium.api.recipe.input.HTMultiRecipeInput
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
import hiiragi283.ragium.api.recipe.result.HTItemResult
import hiiragi283.ragium.api.stack.ImmutableFluidStack
import hiiragi283.ragium.api.stack.ImmutableItemStack
import net.minecraft.core.HolderLookup
import net.minecraft.world.item.crafting.RecipeSerializer
import net.minecraft.world.item.crafting.RecipeType
+import net.minecraft.world.level.Level
import java.util.*
class HTRockGeneratingRecipe(
@@ -31,28 +32,20 @@ class HTRockGeneratingRecipe(
else -> 0
}
- override fun assembleFluid(input: HTMultiRecipeInput, provider: HolderLookup.Provider): ImmutableFluidStack? = null
+ override fun assembleFluid(input: HTRecipeInput, provider: HolderLookup.Provider): ImmutableFluidStack? = null
- override fun test(input: HTMultiRecipeInput): Boolean {
- val bool1: Boolean = left.test(input.getFluid(0))
+ override fun assembleItem(input: HTRecipeInput, provider: HolderLookup.Provider): ImmutableItemStack? = result.getStackOrNull(provider)
+
+ override fun matches(input: HTRecipeInput, level: Level): Boolean {
+ val bool1: Boolean = input.testFluid(0, left)
val bool2: Boolean = right.map(
- { ingredient: HTItemIngredient -> ingredient.test(input.getItem(0)) },
- { ingredient: HTFluidIngredient -> ingredient.test(input.getFluid(1)) },
+ { ingredient: HTItemIngredient -> input.testItem(0, ingredient) },
+ { ingredient: HTFluidIngredient -> input.testFluid(1, ingredient) },
)
- val bool3: Boolean = bottom.isEmpty || bottom.get().test(input.getItem(1))
+ val bool3: Boolean = input.testCatalyst(1, bottom)
return bool1 && bool2 && bool3
}
- override fun assembleItem(input: HTMultiRecipeInput, provider: HolderLookup.Provider): ImmutableItemStack? =
- getItemResult(input, provider, result)
-
- override fun isIncomplete(): Boolean {
- val bool1: Boolean = left.hasNoMatchingStacks()
- val bool2: Boolean = right.map(HTItemIngredient::hasNoMatchingStacks, HTFluidIngredient::hasNoMatchingStacks)
- val bool3: Boolean = bottom.isPresent && bottom.get().hasNoMatchingStacks()
- return bool1 || bool2 || bool3
- }
-
override fun getSerializer(): RecipeSerializer<*> = RagiumPlatform.INSTANCE.getRockGeneratingRecipeSerializer()
override fun getType(): RecipeType<*> = RagiumRecipeTypes.ROCK_GENERATING.get()
diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTShapelessInputsRecipe.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTShapelessInputsRecipe.kt
index 8a796c426..21edbf181 100644
--- a/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTShapelessInputsRecipe.kt
+++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/multi/HTShapelessInputsRecipe.kt
@@ -2,13 +2,12 @@ package hiiragi283.ragium.api.recipe.multi
import hiiragi283.ragium.api.recipe.HTRecipe
import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient
-import hiiragi283.ragium.api.recipe.input.HTMultiRecipeInput
/**
* 複数のアイテムから完成品を生産するレシピ
*
* 材料の並びは不定
*/
-interface HTShapelessInputsRecipe : HTRecipe {
+interface HTShapelessInputsRecipe : HTRecipe {
val ingredients: List
}
diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/single/HTSingleFluidRecipe.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/single/HTSingleFluidRecipe.kt
index 7be456dbf..c8a7ef66f 100644
--- a/src/api/kotlin/hiiragi283/ragium/api/recipe/single/HTSingleFluidRecipe.kt
+++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/single/HTSingleFluidRecipe.kt
@@ -1,15 +1,15 @@
package hiiragi283.ragium.api.recipe.single
import hiiragi283.ragium.api.recipe.HTFluidRecipe
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
import hiiragi283.ragium.api.stack.ImmutableItemStack
import net.minecraft.core.HolderLookup
-import net.minecraft.world.item.crafting.SingleRecipeInput
/**
* 単一のアイテムから単一の液体を生産するレシピ
*/
interface HTSingleFluidRecipe :
HTSingleItemRecipe,
- HTFluidRecipe {
- override fun assembleItem(input: SingleRecipeInput, provider: HolderLookup.Provider): ImmutableItemStack? = null
+ HTFluidRecipe {
+ override fun assembleItem(input: HTRecipeInput, provider: HolderLookup.Provider): ImmutableItemStack? = null
}
diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/single/HTSingleItemRecipe.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/single/HTSingleItemRecipe.kt
index d39b0cb03..77f51f88b 100644
--- a/src/api/kotlin/hiiragi283/ragium/api/recipe/single/HTSingleItemRecipe.kt
+++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/single/HTSingleItemRecipe.kt
@@ -2,11 +2,19 @@ package hiiragi283.ragium.api.recipe.single
import hiiragi283.ragium.api.recipe.HTRecipe
import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient
-import net.minecraft.world.item.crafting.SingleRecipeInput
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
+import hiiragi283.ragium.api.stack.ImmutableItemStack
+import net.minecraft.world.level.Level
+import java.util.function.Predicate
/**
* 単一のアイテムから単一のアイテムを生成するレシピ
*/
interface HTSingleItemRecipe :
- HTRecipe,
- HTItemIngredient.CountGetter
+ HTRecipe,
+ Predicate,
+ HTItemIngredient.CountGetter {
+ override fun matches(input: HTRecipeInput, level: Level): Boolean = input.testItem(0, this::test)
+
+ override fun test(stack: ImmutableItemStack): Boolean
+}
diff --git a/src/api/kotlin/hiiragi283/ragium/api/registry/impl/HTDeferredRecipeType.kt b/src/api/kotlin/hiiragi283/ragium/api/registry/impl/HTDeferredRecipeType.kt
index 64ae68c2f..4b4bb723d 100644
--- a/src/api/kotlin/hiiragi283/ragium/api/registry/impl/HTDeferredRecipeType.kt
+++ b/src/api/kotlin/hiiragi283/ragium/api/registry/impl/HTDeferredRecipeType.kt
@@ -15,6 +15,7 @@ import net.minecraft.world.item.crafting.RecipeInput
import net.minecraft.world.item.crafting.RecipeManager
import net.minecraft.world.item.crafting.RecipeType
import net.minecraft.world.level.Level
+import kotlin.jvm.optionals.getOrNull
class HTDeferredRecipeType> :
HTDeferredHolder, RecipeType>,
@@ -34,24 +35,7 @@ class HTDeferredRecipeType> :
input: INPUT,
level: Level,
lastRecipe: RecipeHolder?,
- ): RecipeHolder? {
- // 入力が空の場合は即座に抜ける
- if (input.isEmpty) return null
- // キャッシュから判定を行う
- if (lastRecipe != null && matches(lastRecipe.value, input, level)) {
- return lastRecipe
- }
- // 次にRecipeManagerから行う
- for (holder: RecipeHolder in manager.getAllRecipesFor(get())) {
- if (matches(holder.value, input, level)) {
- return holder
- }
- }
- return null
- }
+ ): RecipeHolder? = manager.getRecipeFor(get(), input, level, lastRecipe).getOrNull()
- override fun getAllHolders(manager: RecipeManager): Sequence> = manager
- .getAllRecipesFor(get())
- .asSequence()
- .filterNot { holder: RecipeHolder -> holder.value.isIncomplete }
+ override fun getAllHolders(manager: RecipeManager): Sequence> = manager.getAllRecipesFor(get()).asSequence()
}
diff --git a/src/api/kotlin/hiiragi283/ragium/api/stack/ImmutableItemStack.kt b/src/api/kotlin/hiiragi283/ragium/api/stack/ImmutableItemStack.kt
index eaa930666..953f8e0e0 100644
--- a/src/api/kotlin/hiiragi283/ragium/api/stack/ImmutableItemStack.kt
+++ b/src/api/kotlin/hiiragi283/ragium/api/stack/ImmutableItemStack.kt
@@ -12,6 +12,7 @@ import net.minecraft.core.component.DataComponentType
import net.minecraft.core.registries.Registries
import net.minecraft.network.RegistryFriendlyByteBuf
import net.minecraft.network.chat.Component
+import net.minecraft.resources.ResourceKey
import net.minecraft.tags.TagKey
import net.minecraft.world.item.Item
import net.minecraft.world.item.ItemStack
@@ -61,6 +62,8 @@ value class ImmutableItemStack private constructor(private val stack: ItemStack)
fun isOf(item: Item): Boolean = stack.`is`(item)
+ fun isOf(key: ResourceKey
- ): Boolean = stack.itemHolder.`is`(key)
+
fun isOf(tagKey: TagKey
- ): Boolean = stack.`is`(tagKey)
fun isOf(holder: Holder
- ): Boolean = stack.`is`(holder)
diff --git a/src/api/kotlin/hiiragi283/ragium/api/storage/item/HTItemSlots.kt b/src/api/kotlin/hiiragi283/ragium/api/storage/item/HTItemSlots.kt
index 860ff4155..30060da1a 100644
--- a/src/api/kotlin/hiiragi283/ragium/api/storage/item/HTItemSlots.kt
+++ b/src/api/kotlin/hiiragi283/ragium/api/storage/item/HTItemSlots.kt
@@ -4,12 +4,9 @@ import hiiragi283.ragium.api.stack.ImmutableItemStack
import hiiragi283.ragium.api.stack.toImmutable
import hiiragi283.ragium.api.storage.HTStackView
import net.minecraft.world.item.ItemStack
-import net.minecraft.world.item.crafting.SingleRecipeInput
typealias HTItemView = HTStackView
fun HTItemView.getItemStack(): ItemStack = this.getStack()?.unwrap() ?: ItemStack.EMPTY
-fun HTItemView.toRecipeInput(): SingleRecipeInput? = this.getStack()?.unwrap()?.let(::SingleRecipeInput)
-
fun HTItemSlot.isValid(stack: ItemStack): Boolean = stack.toImmutable()?.let(this::isValid) ?: false
diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/category/RagiumEmiRecipeCategories.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/category/RagiumEmiRecipeCategories.kt
index 8d9b583f4..508939834 100644
--- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/category/RagiumEmiRecipeCategories.kt
+++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/category/RagiumEmiRecipeCategories.kt
@@ -4,8 +4,7 @@ import hiiragi283.ragium.api.math.HTBounds
import hiiragi283.ragium.api.recipe.RagiumRecipeTypes
import hiiragi283.ragium.api.recipe.extra.HTPlantingRecipe
import hiiragi283.ragium.api.recipe.extra.HTSingleExtraItemRecipe
-import hiiragi283.ragium.api.recipe.input.HTDoubleRecipeInput
-import hiiragi283.ragium.api.recipe.input.HTMultiRecipeInput
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
import hiiragi283.ragium.api.recipe.multi.HTCombineRecipe
import hiiragi283.ragium.api.recipe.multi.HTComplexRecipe
import hiiragi283.ragium.api.recipe.multi.HTItemWithCatalystRecipe
@@ -22,7 +21,6 @@ import hiiragi283.ragium.setup.RagiumFluidContents
import hiiragi283.ragium.setup.RagiumItems
import net.minecraft.world.item.crafting.Recipe
import net.minecraft.world.item.crafting.RecipeInput
-import net.minecraft.world.item.crafting.SingleRecipeInput
import net.minecraft.world.level.ItemLike
object RagiumEmiRecipeCategories {
@@ -77,59 +75,59 @@ object RagiumEmiRecipeCategories {
// Basic
@JvmField
- val ALLOYING: HTRegistryEmiRecipeCategory =
+ val ALLOYING: HTRegistryEmiRecipeCategory =
machine(RagiumRecipeTypes.ALLOYING, RagiumBlocks.ALLOY_SMELTER)
@JvmField
- val COMPRESSING: HTRegistryEmiRecipeCategory =
+ val COMPRESSING: HTRegistryEmiRecipeCategory =
machine(RagiumRecipeTypes.COMPRESSING, RagiumBlocks.COMPRESSOR)
@JvmField
- val CRUSHING: HTRegistryEmiRecipeCategory =
+ val CRUSHING: HTRegistryEmiRecipeCategory =
machine(RagiumRecipeTypes.CRUSHING, RagiumBlocks.PULVERIZER, RagiumBlocks.CRUSHER)
@JvmField
- val CUTTING: HTRegistryEmiRecipeCategory =
+ val CUTTING: HTRegistryEmiRecipeCategory =
machine(RagiumRecipeTypes.CUTTING, RagiumBlocks.CUTTING_MACHINE)
@JvmField
- val EXTRACTING: HTRegistryEmiRecipeCategory =
+ val EXTRACTING: HTRegistryEmiRecipeCategory =
machine(RagiumRecipeTypes.EXTRACTING, RagiumBlocks.EXTRACTOR)
// Advanced
@JvmField
- val MELTING: HTRegistryEmiRecipeCategory =
+ val MELTING: HTRegistryEmiRecipeCategory =
machine(RagiumRecipeTypes.MELTING, RagiumBlocks.MELTER)
@JvmField
- val MIXING: HTRegistryEmiRecipeCategory =
+ val MIXING: HTRegistryEmiRecipeCategory =
machine(RagiumRecipeTypes.MIXING, RagiumBlocks.MIXER, RagiumBlocks.ADVANCED_MIXER)
@JvmField
- val REFINING: HTRegistryEmiRecipeCategory =
+ val REFINING: HTRegistryEmiRecipeCategory =
machine(RagiumRecipeTypes.REFINING, RagiumBlocks.REFINERY)
// Elite
@JvmField
- val BREWING: HTRegistryEmiRecipeCategory =
+ val BREWING: HTRegistryEmiRecipeCategory =
machine(RagiumRecipeTypes.BREWING, RagiumBlocks.BREWERY)
@JvmField
- val PLANTING: HTRegistryEmiRecipeCategory =
+ val PLANTING: HTRegistryEmiRecipeCategory =
machine(RagiumRecipeTypes.PLANTING, RagiumBlocks.PLANTER)
// Ultimate
@JvmField
- val ENCHANTING: HTRegistryEmiRecipeCategory =
+ val ENCHANTING: HTRegistryEmiRecipeCategory =
machine(RagiumRecipeTypes.ENCHANTING, RagiumBlocks.ENCHANTER)
@JvmField
- val SIMULATING: HTRegistryEmiRecipeCategory =
+ val SIMULATING: HTRegistryEmiRecipeCategory =
machine(RagiumRecipeTypes.SIMULATING, RagiumBlocks.SIMULATOR)
// Device //
@JvmField
- val ROCK_GENERATING: HTRegistryEmiRecipeCategory =
+ val ROCK_GENERATING: HTRegistryEmiRecipeCategory =
machine(RagiumRecipeTypes.ROCK_GENERATING, RagiumBlocks.STONE_COLLECTOR)
}
diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/base/HTMultiOutputsEmiRecipe.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/base/HTMultiOutputsEmiRecipe.kt
index 995a6c382..f8d152b04 100644
--- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/base/HTMultiOutputsEmiRecipe.kt
+++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/recipe/base/HTMultiOutputsEmiRecipe.kt
@@ -6,7 +6,7 @@ import hiiragi283.ragium.client.integration.emi.recipe.HTEmiHolderRecipe
import hiiragi283.ragium.impl.recipe.base.HTBasicComplexOutputRecipe
import net.minecraft.world.item.crafting.RecipeHolder
-abstract class HTMultiOutputsEmiRecipe>(
+abstract class HTMultiOutputsEmiRecipe(
category: HTEmiRecipeCategory,
holder: RecipeHolder,
) : HTEmiHolderRecipe(category, holder) {
diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTStoneCollectorBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTStoneCollectorBlockEntity.kt
index 05c62955c..b0b3afefb 100644
--- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTStoneCollectorBlockEntity.kt
+++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/device/HTStoneCollectorBlockEntity.kt
@@ -4,7 +4,7 @@ import hiiragi283.ragium.api.block.attribute.getAttributeFront
import hiiragi283.ragium.api.recipe.HTRecipeCache
import hiiragi283.ragium.api.recipe.HTRecipeFinder
import hiiragi283.ragium.api.recipe.RagiumRecipeTypes
-import hiiragi283.ragium.api.recipe.input.HTMultiRecipeInput
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
import hiiragi283.ragium.api.recipe.multi.HTRockGeneratingRecipe
import hiiragi283.ragium.api.stack.ImmutableFluidStack
import hiiragi283.ragium.api.stack.ImmutableItemStack
@@ -43,12 +43,12 @@ class HTStoneCollectorBlockEntity(pos: BlockPos, state: BlockState) :
// Ticking //
- private val recipeCache: HTRecipeCache = HTFinderRecipeCache(RecipeFinder())
+ private val recipeCache: HTRecipeCache = HTFinderRecipeCache(RecipeFinder())
override fun actionServer(level: ServerLevel, pos: BlockPos, state: BlockState): Boolean {
// インプットに一致するレシピを探索する
val front: Direction = state.getAttributeFront() ?: return false
- val input: HTMultiRecipeInput = createInput(level, pos, front) ?: return false
+ val input: HTRecipeInput = createInput(level, pos, front) ?: return false
val recipe: HTRockGeneratingRecipe = recipeCache.getFirstRecipe(input, level) ?: return false
// 実際にアウトプットに搬出する
outputSlot.insert(recipe.assembleItem(input, level.registryAccess()), HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL)
@@ -57,7 +57,7 @@ class HTStoneCollectorBlockEntity(pos: BlockPos, state: BlockState) :
return true
}
- private fun createInput(level: ServerLevel, pos: BlockPos, front: Direction): HTMultiRecipeInput? = HTMultiRecipeInput.create {
+ private fun createInput(level: ServerLevel, pos: BlockPos, front: Direction): HTRecipeInput? = HTRecipeInput.create {
val leftPos: BlockPos = pos.relative(front.counterClockWise)
val rightPos: BlockPos = pos.relative(front.clockWise)
// 左側は液体のみ
@@ -79,17 +79,17 @@ class HTStoneCollectorBlockEntity(pos: BlockPos, state: BlockState) :
// RecipeFinder //
- private class RecipeFinder : HTRecipeFinder {
+ private class RecipeFinder : HTRecipeFinder {
override fun getRecipeFor(
manager: RecipeManager,
- input: HTMultiRecipeInput,
+ input: HTRecipeInput,
level: Level,
lastRecipe: RecipeHolder?,
): RecipeHolder? {
// 入力が空の場合は即座に抜ける
if (input.isEmpty) return null
// キャッシュから判定を行う
- if (lastRecipe != null && matches(lastRecipe.value, input, level)) {
+ if (lastRecipe != null && lastRecipe.value.matches(input, level)) {
return lastRecipe
}
// 次にRecipeManagerから一覧を取得する
@@ -98,14 +98,14 @@ class HTStoneCollectorBlockEntity(pos: BlockPos, state: BlockState) :
// 触媒ありのレシピから優先して判定を行う
for (holder: RecipeHolder in allRecipes) {
val recipe: HTRockGeneratingRecipe = holder.value()
- if (recipe.bottom.isPresent && matches(recipe, input, level)) {
+ if (recipe.bottom.isPresent && recipe.matches(input, level)) {
return holder
}
}
// 触媒なしのレシピを判定
for (holder: RecipeHolder in allRecipes) {
val recipe: HTRockGeneratingRecipe = holder.value()
- if (recipe.bottom.isEmpty && matches(recipe, input, level)) {
+ if (recipe.bottom.isEmpty && recipe.matches(input, level)) {
return holder
}
}
diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTAdvancedMixerBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTAdvancedMixerBlockEntity.kt
index 123e71e57..102176740 100644
--- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTAdvancedMixerBlockEntity.kt
+++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTAdvancedMixerBlockEntity.kt
@@ -2,7 +2,7 @@ package hiiragi283.ragium.common.block.entity.processor
import hiiragi283.ragium.api.block.attribute.getFluidAttribute
import hiiragi283.ragium.api.recipe.RagiumRecipeTypes
-import hiiragi283.ragium.api.recipe.input.HTMultiRecipeInput
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
import hiiragi283.ragium.api.recipe.multi.HTComplexRecipe
import hiiragi283.ragium.api.storage.holder.HTSlotInfo
import hiiragi283.ragium.api.util.HTContentListener
@@ -20,7 +20,7 @@ import net.minecraft.server.level.ServerLevel
import net.minecraft.world.level.block.state.BlockState
class HTAdvancedMixerBlockEntity(pos: BlockPos, state: BlockState) :
- HTComplexBlockEntity(
+ HTComplexBlockEntity(
RagiumRecipeTypes.MIXING,
RagiumBlocks.ADVANCED_MIXER,
pos,
@@ -63,7 +63,7 @@ class HTAdvancedMixerBlockEntity(pos: BlockPos, state: BlockState) :
)
}
- override fun createRecipeInput(level: ServerLevel, pos: BlockPos): HTMultiRecipeInput? = HTMultiRecipeInput.create {
+ override fun createRecipeInput(level: ServerLevel, pos: BlockPos): HTRecipeInput? = HTRecipeInput.create {
items.addAll(inputSlots.map(HTBasicItemSlot::getStack))
fluids += firstInputTank.getStack()
fluids += secondInputTank.getStack()
diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTAlloySmelterBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTAlloySmelterBlockEntity.kt
index 5ac156daf..1123f914a 100644
--- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTAlloySmelterBlockEntity.kt
+++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTAlloySmelterBlockEntity.kt
@@ -2,7 +2,7 @@ package hiiragi283.ragium.common.block.entity.processor
import hiiragi283.ragium.api.recipe.RagiumRecipeTypes
import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient
-import hiiragi283.ragium.api.recipe.input.HTMultiRecipeInput
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
import hiiragi283.ragium.api.recipe.multi.HTShapelessInputsRecipe
import hiiragi283.ragium.api.storage.HTStorageAccess
import hiiragi283.ragium.api.storage.HTStorageAction
@@ -20,7 +20,7 @@ import net.minecraft.sounds.SoundSource
import net.minecraft.world.level.block.state.BlockState
class HTAlloySmelterBlockEntity(pos: BlockPos, state: BlockState) :
- HTProcessorBlockEntity.Cached(
+ HTProcessorBlockEntity.Cached(
RagiumRecipeTypes.ALLOYING,
RagiumBlocks.ALLOY_SMELTER,
pos,
@@ -45,25 +45,25 @@ class HTAlloySmelterBlockEntity(pos: BlockPos, state: BlockState) :
override fun shouldCheckRecipe(level: ServerLevel, pos: BlockPos): Boolean = outputSlot.getNeeded() > 0
- override fun createRecipeInput(level: ServerLevel, pos: BlockPos): HTMultiRecipeInput? = HTMultiRecipeInput.create {
+ override fun createRecipeInput(level: ServerLevel, pos: BlockPos): HTRecipeInput? = HTRecipeInput.create {
items.addAll(inputSlots.map(HTBasicItemSlot::getStack))
}
- override fun canProgressRecipe(level: ServerLevel, input: HTMultiRecipeInput, recipe: HTShapelessInputsRecipe): Boolean =
+ override fun canProgressRecipe(level: ServerLevel, input: HTRecipeInput, recipe: HTShapelessInputsRecipe): Boolean =
HTStackSlotHelper.canInsertStack(outputSlot, input, level, recipe::assembleItem)
override fun completeRecipe(
level: ServerLevel,
pos: BlockPos,
state: BlockState,
- input: HTMultiRecipeInput,
+ input: HTRecipeInput,
recipe: HTShapelessInputsRecipe,
) {
// 実際にアウトプットに搬出する
outputSlot.insert(recipe.assembleItem(input, level.registryAccess()), HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL)
// 実際にインプットを減らす
val ingredients: List = recipe.ingredients
- HTMultiRecipeInput.getMatchingSlots(ingredients, input.items).forEachIndexed { index: Int, slot: Int ->
+ HTRecipeInput.getMatchingSlots(ingredients, input.items).forEachIndexed { index: Int, slot: Int ->
HTStackSlotHelper.shrinkStack(inputSlots[slot], ingredients[index]::getRequiredAmount, HTStorageAction.EXECUTE)
}
// SEを鳴らす
diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTBreweryBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTBreweryBlockEntity.kt
index 8dcae418c..99bcd1cf6 100644
--- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTBreweryBlockEntity.kt
+++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTBreweryBlockEntity.kt
@@ -1,7 +1,7 @@
package hiiragi283.ragium.common.block.entity.processor
import hiiragi283.ragium.api.recipe.RagiumRecipeTypes
-import hiiragi283.ragium.api.recipe.input.HTMultiRecipeInput
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
import hiiragi283.ragium.api.recipe.multi.HTCombineRecipe
import hiiragi283.ragium.api.stack.ImmutableFluidStack
import hiiragi283.ragium.common.block.entity.processor.base.HTAbstractCombinerBlockEntity
@@ -21,7 +21,7 @@ class HTBreweryBlockEntity(pos: BlockPos, state: BlockState) :
level: ServerLevel,
pos: BlockPos,
state: BlockState,
- input: HTMultiRecipeInput,
+ input: HTRecipeInput,
recipe: HTCombineRecipe,
) {
super.completeRecipe(level, pos, state, input, recipe)
diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTCompressorBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTCompressorBlockEntity.kt
index 586a1044e..18bad3206 100644
--- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTCompressorBlockEntity.kt
+++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTCompressorBlockEntity.kt
@@ -1,7 +1,7 @@
package hiiragi283.ragium.common.block.entity.processor
import hiiragi283.ragium.api.recipe.RagiumRecipeTypes
-import hiiragi283.ragium.api.recipe.input.HTDoubleRecipeInput
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
import hiiragi283.ragium.api.recipe.multi.HTItemWithCatalystRecipe
import hiiragi283.ragium.common.block.entity.processor.base.HTItemWithCatalystBlockEntity
import hiiragi283.ragium.setup.RagiumBlocks
@@ -22,7 +22,7 @@ class HTCompressorBlockEntity(pos: BlockPos, state: BlockState) :
level: ServerLevel,
pos: BlockPos,
state: BlockState,
- input: HTDoubleRecipeInput,
+ input: HTRecipeInput,
recipe: HTItemWithCatalystRecipe,
) {
super.completeRecipe(level, pos, state, input, recipe)
diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTCrusherBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTCrusherBlockEntity.kt
index f0a16dd0d..0dc7c631c 100644
--- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTCrusherBlockEntity.kt
+++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTCrusherBlockEntity.kt
@@ -1,6 +1,7 @@
package hiiragi283.ragium.common.block.entity.processor
import hiiragi283.ragium.api.recipe.extra.HTSingleExtraItemRecipe
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
import hiiragi283.ragium.api.storage.HTStorageAccess
import hiiragi283.ragium.api.storage.HTStorageAction
import hiiragi283.ragium.api.util.HTContentListener
@@ -13,7 +14,6 @@ import hiiragi283.ragium.setup.RagiumItems
import net.minecraft.core.BlockPos
import net.minecraft.core.RegistryAccess
import net.minecraft.server.level.ServerLevel
-import net.minecraft.world.item.crafting.SingleRecipeInput
import net.minecraft.world.level.block.state.BlockState
class HTCrusherBlockEntity(pos: BlockPos, state: BlockState) :
@@ -39,7 +39,7 @@ class HTCrusherBlockEntity(pos: BlockPos, state: BlockState) :
override fun shouldCheckRecipe(level: ServerLevel, pos: BlockPos): Boolean = outputSlot.getNeeded() > 0 && extraSlot.getNeeded() > 0
- override fun canProgressRecipe(level: ServerLevel, input: SingleRecipeInput, recipe: HTSingleExtraItemRecipe): Boolean {
+ override fun canProgressRecipe(level: ServerLevel, input: HTRecipeInput, recipe: HTSingleExtraItemRecipe): Boolean {
// アウトプットに搬出できるか判定する
val bool1: Boolean = HTStackSlotHelper.canInsertStack(outputSlot, input, level, recipe::assembleItem)
if (hasUpgrade(RagiumItems.PRIMARY_ONLY_UPGRADE)) {
@@ -49,7 +49,7 @@ class HTCrusherBlockEntity(pos: BlockPos, state: BlockState) :
return bool1 && bool2
}
- override fun completeOutput(level: ServerLevel, input: SingleRecipeInput, recipe: HTSingleExtraItemRecipe) {
+ override fun completeOutput(level: ServerLevel, input: HTRecipeInput, recipe: HTSingleExtraItemRecipe) {
// 実際にアウトプットに搬出する
val access: RegistryAccess = level.registryAccess()
outputSlot.insert(recipe.assembleItem(input, access), HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL)
diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTCuttingMachineBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTCuttingMachineBlockEntity.kt
index f938553ad..f659b6598 100644
--- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTCuttingMachineBlockEntity.kt
+++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTCuttingMachineBlockEntity.kt
@@ -2,9 +2,9 @@ package hiiragi283.ragium.common.block.entity.processor
import hiiragi283.ragium.api.recipe.RagiumRecipeTypes
import hiiragi283.ragium.api.recipe.extra.HTSingleExtraItemRecipe
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
import hiiragi283.ragium.api.storage.HTStorageAccess
import hiiragi283.ragium.api.storage.HTStorageAction
-import hiiragi283.ragium.api.storage.item.toRecipeInput
import hiiragi283.ragium.api.util.HTContentListener
import hiiragi283.ragium.common.storage.holder.HTBasicItemSlotHolder
import hiiragi283.ragium.common.storage.item.slot.HTBasicItemSlot
@@ -16,11 +16,10 @@ import net.minecraft.core.RegistryAccess
import net.minecraft.server.level.ServerLevel
import net.minecraft.sounds.SoundEvents
import net.minecraft.sounds.SoundSource
-import net.minecraft.world.item.crafting.SingleRecipeInput
import net.minecraft.world.level.block.state.BlockState
class HTCuttingMachineBlockEntity(pos: BlockPos, state: BlockState) :
- HTProcessorBlockEntity.Cached(
+ HTProcessorBlockEntity.Cached(
RagiumRecipeTypes.CUTTING,
RagiumBlocks.CUTTING_MACHINE,
pos,
@@ -45,9 +44,9 @@ class HTCuttingMachineBlockEntity(pos: BlockPos, state: BlockState) :
override fun shouldCheckRecipe(level: ServerLevel, pos: BlockPos): Boolean = outputSlot.getNeeded() > 0 && extraSlot.getNeeded() > 0
- override fun createRecipeInput(level: ServerLevel, pos: BlockPos): SingleRecipeInput? = inputSlot.toRecipeInput()
+ override fun createRecipeInput(level: ServerLevel, pos: BlockPos): HTRecipeInput? = HTRecipeInput.single(inputSlot.getStack())
- override fun canProgressRecipe(level: ServerLevel, input: SingleRecipeInput, recipe: HTSingleExtraItemRecipe): Boolean {
+ override fun canProgressRecipe(level: ServerLevel, input: HTRecipeInput, recipe: HTSingleExtraItemRecipe): Boolean {
// アウトプットに搬出できるか判定する
val bool1: Boolean = HTStackSlotHelper.canInsertStack(outputSlot, input, level, recipe::assembleItem)
if (hasUpgrade(RagiumItems.PRIMARY_ONLY_UPGRADE)) {
@@ -61,7 +60,7 @@ class HTCuttingMachineBlockEntity(pos: BlockPos, state: BlockState) :
level: ServerLevel,
pos: BlockPos,
state: BlockState,
- input: SingleRecipeInput,
+ input: HTRecipeInput,
recipe: HTSingleExtraItemRecipe,
) {
// 実際にアウトプットに搬出する
diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTElectricFurnaceBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTElectricFurnaceBlockEntity.kt
index b7f76524b..1664309a3 100644
--- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTElectricFurnaceBlockEntity.kt
+++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTElectricFurnaceBlockEntity.kt
@@ -1,5 +1,6 @@
package hiiragi283.ragium.common.block.entity.processor
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
import hiiragi283.ragium.common.block.entity.processor.base.HTAbstractSmelterBlockEntity
import hiiragi283.ragium.common.recipe.HTVanillaCookingRecipe
import hiiragi283.ragium.setup.RagiumBlocks
@@ -10,6 +11,8 @@ import net.minecraft.world.level.block.state.BlockState
class HTElectricFurnaceBlockEntity(pos: BlockPos, state: BlockState) :
HTAbstractSmelterBlockEntity(RagiumBlocks.ELECTRIC_FURNACE, pos, state) {
- override fun getMatchedRecipe(input: SingleRecipeInput, level: ServerLevel): HTVanillaCookingRecipe? =
- getRecipeCache().getFirstRecipe(input, level)?.let(::HTVanillaCookingRecipe)
+ override fun getMatchedRecipe(input: HTRecipeInput, level: ServerLevel): HTVanillaCookingRecipe? {
+ val singleInput: SingleRecipeInput = input.toSingleItem() ?: return null
+ return getRecipeCache().getFirstRecipe(singleInput, level)?.let(::HTVanillaCookingRecipe)
+ }
}
diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTEnchanterBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTEnchanterBlockEntity.kt
index b6cf765e1..53bae588f 100644
--- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTEnchanterBlockEntity.kt
+++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTEnchanterBlockEntity.kt
@@ -1,7 +1,7 @@
package hiiragi283.ragium.common.block.entity.processor
import hiiragi283.ragium.api.recipe.RagiumRecipeTypes
-import hiiragi283.ragium.api.recipe.input.HTMultiRecipeInput
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
import hiiragi283.ragium.api.recipe.multi.HTCombineRecipe
import hiiragi283.ragium.api.stack.ImmutableFluidStack
import hiiragi283.ragium.common.block.entity.processor.base.HTAbstractCombinerBlockEntity
@@ -26,7 +26,7 @@ class HTEnchanterBlockEntity(pos: BlockPos, state: BlockState) :
level: ServerLevel,
pos: BlockPos,
state: BlockState,
- input: HTMultiRecipeInput,
+ input: HTRecipeInput,
recipe: HTCombineRecipe,
) {
super.completeRecipe(level, pos, state, input, recipe)
diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTExtractorBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTExtractorBlockEntity.kt
index 73c5622f6..f8003706f 100644
--- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTExtractorBlockEntity.kt
+++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTExtractorBlockEntity.kt
@@ -1,7 +1,7 @@
package hiiragi283.ragium.common.block.entity.processor
import hiiragi283.ragium.api.recipe.RagiumRecipeTypes
-import hiiragi283.ragium.api.recipe.input.HTDoubleRecipeInput
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
import hiiragi283.ragium.api.recipe.multi.HTItemWithCatalystRecipe
import hiiragi283.ragium.common.block.entity.processor.base.HTItemWithCatalystBlockEntity
import hiiragi283.ragium.setup.RagiumBlocks
@@ -22,7 +22,7 @@ class HTExtractorBlockEntity(pos: BlockPos, state: BlockState) :
level: ServerLevel,
pos: BlockPos,
state: BlockState,
- input: HTDoubleRecipeInput,
+ input: HTRecipeInput,
recipe: HTItemWithCatalystRecipe,
) {
super.completeRecipe(level, pos, state, input, recipe)
diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTMelterBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTMelterBlockEntity.kt
index b2f4cd0ae..5e4ec61c2 100644
--- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTMelterBlockEntity.kt
+++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTMelterBlockEntity.kt
@@ -2,6 +2,7 @@ package hiiragi283.ragium.common.block.entity.processor
import hiiragi283.ragium.api.block.attribute.getFluidAttribute
import hiiragi283.ragium.api.recipe.RagiumRecipeTypes
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
import hiiragi283.ragium.api.recipe.single.HTSingleFluidRecipe
import hiiragi283.ragium.api.stack.ImmutableItemStack
import hiiragi283.ragium.api.stack.getCraftingRemainingItem
@@ -24,7 +25,6 @@ import net.minecraft.core.BlockPos
import net.minecraft.server.level.ServerLevel
import net.minecraft.sounds.SoundEvents
import net.minecraft.sounds.SoundSource
-import net.minecraft.world.item.crafting.SingleRecipeInput
import net.minecraft.world.level.block.state.BlockState
class HTMelterBlockEntity(pos: BlockPos, state: BlockState) :
@@ -61,14 +61,14 @@ class HTMelterBlockEntity(pos: BlockPos, state: BlockState) :
override fun shouldCheckRecipe(level: ServerLevel, pos: BlockPos): Boolean = outputTank.getNeeded() > 0
// アウトプットに搬出できるか判定する
- override fun canProgressRecipe(level: ServerLevel, input: SingleRecipeInput, recipe: HTSingleFluidRecipe): Boolean =
+ override fun canProgressRecipe(level: ServerLevel, input: HTRecipeInput, recipe: HTSingleFluidRecipe): Boolean =
HTStackSlotHelper.canInsertStack(outputTank, input, level, recipe::assembleFluid)
override fun completeRecipe(
level: ServerLevel,
pos: BlockPos,
state: BlockState,
- input: SingleRecipeInput,
+ input: HTRecipeInput,
recipe: HTSingleFluidRecipe,
) {
// 実際にアウトプットに搬出する
diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTMixerBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTMixerBlockEntity.kt
index 06161f8cf..a40512afe 100644
--- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTMixerBlockEntity.kt
+++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTMixerBlockEntity.kt
@@ -3,7 +3,7 @@ package hiiragi283.ragium.common.block.entity.processor
import hiiragi283.ragium.api.block.attribute.getFluidAttribute
import hiiragi283.ragium.api.function.partially1
import hiiragi283.ragium.api.recipe.RagiumRecipeTypes
-import hiiragi283.ragium.api.recipe.input.HTMultiRecipeInput
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
import hiiragi283.ragium.api.recipe.multi.HTComplexRecipe
import hiiragi283.ragium.api.storage.HTStorageAction
import hiiragi283.ragium.api.storage.holder.HTSlotInfo
@@ -21,7 +21,7 @@ import net.minecraft.server.level.ServerLevel
import net.minecraft.world.level.block.state.BlockState
class HTMixerBlockEntity(pos: BlockPos, state: BlockState) :
- HTComplexBlockEntity(
+ HTComplexBlockEntity(
RagiumRecipeTypes.MIXING,
RagiumBlocks.MIXER,
pos,
@@ -48,7 +48,7 @@ class HTMixerBlockEntity(pos: BlockPos, state: BlockState) :
outputSlot = upperOutput(builder, listener)
}
- override fun createRecipeInput(level: ServerLevel, pos: BlockPos): HTMultiRecipeInput? = HTMultiRecipeInput.create {
+ override fun createRecipeInput(level: ServerLevel, pos: BlockPos): HTRecipeInput? = HTRecipeInput.create {
items += inputSlot.getStack()
fluids += inputTank.getStack()
}
@@ -57,7 +57,7 @@ class HTMixerBlockEntity(pos: BlockPos, state: BlockState) :
level: ServerLevel,
pos: BlockPos,
state: BlockState,
- input: HTMultiRecipeInput,
+ input: HTRecipeInput,
recipe: HTComplexRecipe,
) {
super.completeRecipe(level, pos, state, input, recipe)
diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTMobCrusherBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTMobCrusherBlockEntity.kt
index 9dcb9b588..65cec7d62 100644
--- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTMobCrusherBlockEntity.kt
+++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTMobCrusherBlockEntity.kt
@@ -3,6 +3,7 @@ package hiiragi283.ragium.common.block.entity.processor
import hiiragi283.ragium.api.RagiumConst
import hiiragi283.ragium.api.block.attribute.getFluidAttribute
import hiiragi283.ragium.api.function.HTPredicates
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
import hiiragi283.ragium.api.registry.vanillaId
import hiiragi283.ragium.api.stack.ImmutableFluidStack
import hiiragi283.ragium.api.stack.ImmutableItemStack
@@ -11,7 +12,6 @@ import hiiragi283.ragium.api.storage.HTStorageAccess
import hiiragi283.ragium.api.storage.HTStorageAction
import hiiragi283.ragium.api.storage.holder.HTSlotInfo
import hiiragi283.ragium.api.storage.item.getItemStack
-import hiiragi283.ragium.api.storage.item.toRecipeInput
import hiiragi283.ragium.api.util.HTContentListener
import hiiragi283.ragium.common.inventory.HTSlotHelper
import hiiragi283.ragium.common.storage.fluid.tank.HTBasicFluidTank
@@ -35,7 +35,6 @@ import net.minecraft.world.entity.EntityType
import net.minecraft.world.entity.LivingEntity
import net.minecraft.world.item.ItemStack
import net.minecraft.world.item.SpawnEggItem
-import net.minecraft.world.item.crafting.SingleRecipeInput
import net.minecraft.world.level.block.state.BlockState
import net.minecraft.world.level.storage.loot.LootParams
import net.minecraft.world.level.storage.loot.LootTable
@@ -45,7 +44,7 @@ import net.minecraft.world.phys.Vec3
import net.neoforged.neoforge.event.EventHooks
class HTMobCrusherBlockEntity(pos: BlockPos, state: BlockState) :
- HTProcessorBlockEntity(RagiumBlocks.MOB_CRUSHER, pos, state) {
+ HTProcessorBlockEntity(RagiumBlocks.MOB_CRUSHER, pos, state) {
lateinit var outputTank: HTBasicFluidTank
private set
@@ -105,14 +104,14 @@ class HTMobCrusherBlockEntity(pos: BlockPos, state: BlockState) :
override fun shouldCheckRecipe(level: ServerLevel, pos: BlockPos): Boolean =
outputSlots.any { slot: HTBasicItemSlot -> slot.getNeeded() > 0 }
- override fun createRecipeInput(level: ServerLevel, pos: BlockPos): SingleRecipeInput? = inputSlot.toRecipeInput()
+ override fun createRecipeInput(level: ServerLevel, pos: BlockPos): HTRecipeInput? = HTRecipeInput.single(inputSlot.getStack())
/**
* @see net.minecraft.server.commands.LootCommand.dropKillLoot
*/
- override fun getMatchedRecipe(input: SingleRecipeInput, level: ServerLevel): MobLootRecipe? {
- val stack: ItemStack = input.item()
- val entityType: EntityType<*> = (stack.item as? SpawnEggItem)?.getType(stack) ?: return null
+ override fun getMatchedRecipe(input: HTRecipeInput, level: ServerLevel): MobLootRecipe? {
+ val stack: ImmutableItemStack = input.item(0) ?: return null
+ val entityType: EntityType<*> = (stack.value() as? SpawnEggItem)?.getType(stack.unwrap()) ?: return null
val fakeEntity: LivingEntity = entityType.create(level) as? LivingEntity ?: return null
val fakePlayer: ServerPlayer = getFakePlayer(level)
@@ -138,7 +137,7 @@ class HTMobCrusherBlockEntity(pos: BlockPos, state: BlockState) :
override fun getRecipeTime(recipe: MobLootRecipe): Int = super.getRecipeTime(recipe) / 4
- override fun canProgressRecipe(level: ServerLevel, input: SingleRecipeInput, recipe: MobLootRecipe): Boolean {
+ override fun canProgressRecipe(level: ServerLevel, input: HTRecipeInput, recipe: MobLootRecipe): Boolean {
// アウトプットに搬出できるか判定する
for (stackIn: ImmutableItemStack in recipe.drops) {
if (HTStackSlotHelper.insertStacks(outputSlots, stackIn, HTStorageAction.SIMULATE) != null) {
@@ -154,7 +153,7 @@ class HTMobCrusherBlockEntity(pos: BlockPos, state: BlockState) :
level: ServerLevel,
pos: BlockPos,
state: BlockState,
- input: SingleRecipeInput,
+ input: HTRecipeInput,
recipe: MobLootRecipe,
) {
val (_, _, drops: List) = recipe
diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTMultiSmelterBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTMultiSmelterBlockEntity.kt
index 4496f4b86..dbe303f72 100644
--- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTMultiSmelterBlockEntity.kt
+++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTMultiSmelterBlockEntity.kt
@@ -1,14 +1,15 @@
package hiiragi283.ragium.common.block.entity.processor
-import hiiragi283.ragium.api.function.andThen
import hiiragi283.ragium.api.recipe.HTRecipeCache
import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
import hiiragi283.ragium.api.stack.maxStackSize
import hiiragi283.ragium.api.tier.HTBaseTier
import hiiragi283.ragium.common.block.entity.processor.base.HTAbstractSmelterBlockEntity
import hiiragi283.ragium.common.recipe.HTVanillaCookingRecipe
import hiiragi283.ragium.setup.RagiumBlocks
import net.minecraft.core.BlockPos
+import net.minecraft.core.HolderLookup
import net.minecraft.server.level.ServerLevel
import net.minecraft.world.item.ItemStack
import net.minecraft.world.item.crafting.AbstractCookingRecipe
@@ -22,10 +23,11 @@ class HTMultiSmelterBlockEntity(pos: BlockPos, state: BlockState) :
pos,
state,
) {
- override fun getMatchedRecipe(input: SingleRecipeInput, level: ServerLevel): HTVanillaCookingRecipe? {
+ override fun getMatchedRecipe(input: HTRecipeInput, level: ServerLevel): HTVanillaCookingRecipe? {
val cache: HTRecipeCache = getRecipeCache()
- val baseRecipe: AbstractCookingRecipe = cache.getFirstRecipe(input, level) ?: return null
- val result: ItemStack = baseRecipe.assemble(input, level.registryAccess())
+ val singleInput = input.toSingleItem() ?: return null
+ val baseRecipe: AbstractCookingRecipe = cache.getFirstRecipe(singleInput, level) ?: return null
+ val result: ItemStack = baseRecipe.assemble(singleInput, level.registryAccess())
if (result.isEmpty) return null
val resultMaxSize: Int = result.maxStackSize
@@ -40,8 +42,10 @@ class HTMultiSmelterBlockEntity(pos: BlockPos, state: BlockState) :
return HTVanillaCookingRecipe(
baseRecipe,
HTItemIngredient(baseRecipe.ingredients[0], inputCount),
- baseRecipe::assemble.andThen { it.copyWithCount(outputCount) },
- )
+ ) { inputIn: HTRecipeInput, provider: HolderLookup.Provider ->
+ val singleInputIn: SingleRecipeInput = inputIn.toSingleItem() ?: return@HTVanillaCookingRecipe ItemStack.EMPTY
+ baseRecipe.assemble(singleInputIn, provider).copyWithCount(outputCount)
+ }
}
private fun getMaxParallel(): Int = when (getMaxMachineTier()) {
diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTProcessorBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTProcessorBlockEntity.kt
index d436ba92c..1e392374d 100644
--- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTProcessorBlockEntity.kt
+++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTProcessorBlockEntity.kt
@@ -3,8 +3,10 @@ package hiiragi283.ragium.common.block.entity.processor
import hiiragi283.ragium.api.item.component.HTMachineUpgrade
import hiiragi283.ragium.api.math.div
import hiiragi283.ragium.api.math.fraction
+import hiiragi283.ragium.api.recipe.HTRecipe
import hiiragi283.ragium.api.recipe.HTRecipeCache
import hiiragi283.ragium.api.recipe.HTRecipeFinder
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
import hiiragi283.ragium.api.storage.holder.HTSlotInfo
import hiiragi283.ragium.api.util.HTContentListener
import hiiragi283.ragium.common.block.entity.HTMachineBlockEntity
@@ -16,8 +18,6 @@ import hiiragi283.ragium.common.storage.holder.HTBasicEnergyBatteryHolder
import net.minecraft.core.BlockPos
import net.minecraft.core.Holder
import net.minecraft.server.level.ServerLevel
-import net.minecraft.world.item.crafting.Recipe
-import net.minecraft.world.item.crafting.RecipeInput
import net.minecraft.world.level.block.Block
import net.minecraft.world.level.block.state.BlockState
import org.apache.commons.lang3.math.Fraction
@@ -135,19 +135,19 @@ abstract class HTProcessorBlockEntity(blockHolder: Ho
/**
* レシピのキャッシュを保持する[HTProcessorBlockEntity]の拡張クラス
*/
- abstract class Cached>(
- private val recipeCache: HTRecipeCache,
+ abstract class Cached(
+ private val recipeCache: HTRecipeCache,
blockHolder: Holder,
pos: BlockPos,
state: BlockState,
- ) : HTProcessorBlockEntity(blockHolder, pos, state) {
+ ) : HTProcessorBlockEntity(blockHolder, pos, state) {
constructor(
- finder: HTRecipeFinder,
+ finder: HTRecipeFinder,
blockHolder: Holder,
pos: BlockPos,
state: BlockState,
) : this(HTFinderRecipeCache(finder), blockHolder, pos, state)
- final override fun getMatchedRecipe(input: INPUT, level: ServerLevel): RECIPE? = recipeCache.getFirstRecipe(input, level)
+ final override fun getMatchedRecipe(input: HTRecipeInput, level: ServerLevel): RECIPE? = recipeCache.getFirstRecipe(input, level)
}
}
diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTPulverizerBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTPulverizerBlockEntity.kt
index cc3b7c595..9fa2fe01f 100644
--- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTPulverizerBlockEntity.kt
+++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTPulverizerBlockEntity.kt
@@ -1,6 +1,7 @@
package hiiragi283.ragium.common.block.entity.processor
import hiiragi283.ragium.api.recipe.extra.HTSingleExtraItemRecipe
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
import hiiragi283.ragium.api.storage.HTStorageAccess
import hiiragi283.ragium.api.storage.HTStorageAction
import hiiragi283.ragium.api.util.HTContentListener
@@ -11,7 +12,6 @@ import hiiragi283.ragium.common.util.HTStackSlotHelper
import hiiragi283.ragium.setup.RagiumBlocks
import net.minecraft.core.BlockPos
import net.minecraft.server.level.ServerLevel
-import net.minecraft.world.item.crafting.SingleRecipeInput
import net.minecraft.world.level.block.state.BlockState
class HTPulverizerBlockEntity(pos: BlockPos, state: BlockState) : HTAbstractCrusherBlockEntity(RagiumBlocks.PULVERIZER, pos, state) {
@@ -27,10 +27,10 @@ class HTPulverizerBlockEntity(pos: BlockPos, state: BlockState) : HTAbstractCrus
override fun shouldCheckRecipe(level: ServerLevel, pos: BlockPos): Boolean = outputSlot.getNeeded() > 0
- override fun canProgressRecipe(level: ServerLevel, input: SingleRecipeInput, recipe: HTSingleExtraItemRecipe): Boolean =
+ override fun canProgressRecipe(level: ServerLevel, input: HTRecipeInput, recipe: HTSingleExtraItemRecipe): Boolean =
HTStackSlotHelper.canInsertStack(outputSlot, input, level, recipe::assembleItem)
- override fun completeOutput(level: ServerLevel, input: SingleRecipeInput, recipe: HTSingleExtraItemRecipe) {
+ override fun completeOutput(level: ServerLevel, input: HTRecipeInput, recipe: HTSingleExtraItemRecipe) {
outputSlot.insert(recipe.assembleItem(input, level.registryAccess()), HTStorageAction.EXECUTE, HTStorageAccess.INTERNAL)
}
}
diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTRefineryBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTRefineryBlockEntity.kt
index f48aa8374..d76522016 100644
--- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTRefineryBlockEntity.kt
+++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTRefineryBlockEntity.kt
@@ -3,7 +3,7 @@ package hiiragi283.ragium.common.block.entity.processor
import hiiragi283.ragium.api.block.attribute.getFluidAttribute
import hiiragi283.ragium.api.function.partially1
import hiiragi283.ragium.api.recipe.RagiumRecipeTypes
-import hiiragi283.ragium.api.recipe.input.HTMultiRecipeInput
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
import hiiragi283.ragium.api.recipe.multi.HTComplexRecipe
import hiiragi283.ragium.api.storage.HTStorageAccess
import hiiragi283.ragium.api.storage.HTStorageAction
@@ -26,7 +26,7 @@ import net.minecraft.sounds.SoundSource
import net.minecraft.world.level.block.state.BlockState
class HTRefineryBlockEntity(pos: BlockPos, state: BlockState) :
- HTProcessorBlockEntity.Cached(
+ HTProcessorBlockEntity.Cached(
RagiumRecipeTypes.REFINING,
RagiumBlocks.REFINERY,
pos,
@@ -72,11 +72,13 @@ class HTRefineryBlockEntity(pos: BlockPos, state: BlockState) :
override fun shouldCheckRecipe(level: ServerLevel, pos: BlockPos): Boolean = outputSlot.getNeeded() > 0 || outputTank.getNeeded() > 0
- override fun createRecipeInput(level: ServerLevel, pos: BlockPos): HTMultiRecipeInput =
- HTMultiRecipeInput(catalystSlot.getStack(), inputTank.getStack())
+ override fun createRecipeInput(level: ServerLevel, pos: BlockPos): HTRecipeInput? = HTRecipeInput.create {
+ items += catalystSlot.getStack()
+ fluids += inputTank.getStack()
+ }
// アウトプットに搬出できるか判定する
- override fun canProgressRecipe(level: ServerLevel, input: HTMultiRecipeInput, recipe: HTComplexRecipe): Boolean {
+ override fun canProgressRecipe(level: ServerLevel, input: HTRecipeInput, recipe: HTComplexRecipe): Boolean {
val bool1: Boolean = HTStackSlotHelper.canInsertStack(outputSlot, input, level, recipe::assembleItem)
val bool2: Boolean = HTStackSlotHelper.canInsertStack(outputTank, input, level, recipe::assembleFluid)
return bool1 && bool2
@@ -86,7 +88,7 @@ class HTRefineryBlockEntity(pos: BlockPos, state: BlockState) :
level: ServerLevel,
pos: BlockPos,
state: BlockState,
- input: HTMultiRecipeInput,
+ input: HTRecipeInput,
recipe: HTComplexRecipe,
) {
// 実際にアウトプットに搬出する
diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTSimulatorBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTSimulatorBlockEntity.kt
index ff1edb823..647c3cbdd 100644
--- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTSimulatorBlockEntity.kt
+++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/HTSimulatorBlockEntity.kt
@@ -1,7 +1,7 @@
package hiiragi283.ragium.common.block.entity.processor
import hiiragi283.ragium.api.recipe.RagiumRecipeTypes
-import hiiragi283.ragium.api.recipe.input.HTDoubleRecipeInput
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
import hiiragi283.ragium.api.recipe.multi.HTItemWithCatalystRecipe
import hiiragi283.ragium.common.block.entity.processor.base.HTItemWithCatalystBlockEntity
import hiiragi283.ragium.setup.RagiumBlocks
@@ -22,7 +22,7 @@ class HTSimulatorBlockEntity(pos: BlockPos, state: BlockState) :
level: ServerLevel,
pos: BlockPos,
state: BlockState,
- input: HTDoubleRecipeInput,
+ input: HTRecipeInput,
recipe: HTItemWithCatalystRecipe,
) {
super.completeRecipe(level, pos, state, input, recipe)
diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/base/HTAbstractCombinerBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/base/HTAbstractCombinerBlockEntity.kt
index 00f78a916..eeadb1652 100644
--- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/base/HTAbstractCombinerBlockEntity.kt
+++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/base/HTAbstractCombinerBlockEntity.kt
@@ -4,7 +4,7 @@ import hiiragi283.ragium.api.block.attribute.getFluidAttribute
import hiiragi283.ragium.api.function.partially1
import hiiragi283.ragium.api.recipe.HTRecipeCache
import hiiragi283.ragium.api.recipe.HTRecipeFinder
-import hiiragi283.ragium.api.recipe.input.HTMultiRecipeInput
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
import hiiragi283.ragium.api.recipe.multi.HTCombineRecipe
import hiiragi283.ragium.api.stack.ImmutableFluidStack
import hiiragi283.ragium.api.storage.HTStorageAccess
@@ -26,16 +26,16 @@ import net.minecraft.server.level.ServerLevel
import net.minecraft.world.level.block.Block
import net.minecraft.world.level.block.state.BlockState
-abstract class HTAbstractCombinerBlockEntity : HTProcessorBlockEntity.Cached {
+abstract class HTAbstractCombinerBlockEntity : HTProcessorBlockEntity.Cached {
constructor(
- recipeCache: HTRecipeCache,
+ recipeCache: HTRecipeCache,
blockHolder: Holder,
pos: BlockPos,
state: BlockState,
) : super(recipeCache, blockHolder, pos, state)
constructor(
- finder: HTRecipeFinder,
+ finder: HTRecipeFinder,
blockHolder: Holder,
pos: BlockPos,
state: BlockState,
@@ -80,20 +80,20 @@ abstract class HTAbstractCombinerBlockEntity : HTProcessorBlockEntity.Cached 0
- final override fun createRecipeInput(level: ServerLevel, pos: BlockPos): HTMultiRecipeInput? = HTMultiRecipeInput.create {
+ final override fun createRecipeInput(level: ServerLevel, pos: BlockPos): HTRecipeInput? = HTRecipeInput.create {
items += leftInputSlot.getStack()
items += rightInputSlot.getStack()
fluids += inputTank.getStack()
}
- final override fun canProgressRecipe(level: ServerLevel, input: HTMultiRecipeInput, recipe: HTCombineRecipe): Boolean =
+ final override fun canProgressRecipe(level: ServerLevel, input: HTRecipeInput, recipe: HTCombineRecipe): Boolean =
HTStackSlotHelper.canInsertStack(outputSlot, input, level, recipe::assembleItem)
override fun completeRecipe(
level: ServerLevel,
pos: BlockPos,
state: BlockState,
- input: HTMultiRecipeInput,
+ input: HTRecipeInput,
recipe: HTCombineRecipe,
) {
// 実際にアウトプットに搬出する
diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/base/HTAbstractCrusherBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/base/HTAbstractCrusherBlockEntity.kt
index 56d6afb45..bda1d8093 100644
--- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/base/HTAbstractCrusherBlockEntity.kt
+++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/base/HTAbstractCrusherBlockEntity.kt
@@ -5,6 +5,7 @@ import hiiragi283.ragium.api.block.attribute.getFluidAttribute
import hiiragi283.ragium.api.math.times
import hiiragi283.ragium.api.recipe.RagiumRecipeTypes
import hiiragi283.ragium.api.recipe.extra.HTSingleExtraItemRecipe
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
import hiiragi283.ragium.api.storage.HTStorageAccess
import hiiragi283.ragium.api.storage.HTStorageAction
import hiiragi283.ragium.api.util.HTContentListener
@@ -18,7 +19,6 @@ import net.minecraft.core.Holder
import net.minecraft.server.level.ServerLevel
import net.minecraft.sounds.SoundEvents
import net.minecraft.sounds.SoundSource
-import net.minecraft.world.item.crafting.SingleRecipeInput
import net.minecraft.world.level.block.Block
import net.minecraft.world.level.block.state.BlockState
import org.apache.commons.lang3.math.Fraction
@@ -53,7 +53,7 @@ abstract class HTAbstractCrusherBlockEntity(blockHolder: Holder, pos: Blo
level: ServerLevel,
pos: BlockPos,
state: BlockState,
- input: SingleRecipeInput,
+ input: HTRecipeInput,
recipe: HTSingleExtraItemRecipe,
) {
// 実際にアウトプットに搬出する
@@ -68,5 +68,5 @@ abstract class HTAbstractCrusherBlockEntity(blockHolder: Holder, pos: Blo
level.playSound(null, pos, SoundEvents.GRINDSTONE_USE, SoundSource.BLOCKS, 0.25f, 1f)
}
- protected abstract fun completeOutput(level: ServerLevel, input: SingleRecipeInput, recipe: HTSingleExtraItemRecipe)
+ protected abstract fun completeOutput(level: ServerLevel, input: HTRecipeInput, recipe: HTSingleExtraItemRecipe)
}
diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/base/HTAbstractSmelterBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/base/HTAbstractSmelterBlockEntity.kt
index 06a3b4426..1de661727 100644
--- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/base/HTAbstractSmelterBlockEntity.kt
+++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/base/HTAbstractSmelterBlockEntity.kt
@@ -1,6 +1,7 @@
package hiiragi283.ragium.common.block.entity.processor.base
import hiiragi283.ragium.api.recipe.HTRecipeCache
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
import hiiragi283.ragium.api.storage.HTStorageAccess
import hiiragi283.ragium.api.storage.HTStorageAction
import hiiragi283.ragium.api.storage.holder.HTSlotInfo
@@ -72,14 +73,14 @@ abstract class HTAbstractSmelterBlockEntity(blockHolder: Holder, pos: Blo
final override fun getRecipeTime(recipe: HTVanillaCookingRecipe): Int = recipe.cookingTime
- final override fun canProgressRecipe(level: ServerLevel, input: SingleRecipeInput, recipe: HTVanillaCookingRecipe): Boolean =
+ final override fun canProgressRecipe(level: ServerLevel, input: HTRecipeInput, recipe: HTVanillaCookingRecipe): Boolean =
HTStackSlotHelper.canInsertStack(outputSlot, input, level, recipe::assembleItem)
final override fun completeRecipe(
level: ServerLevel,
pos: BlockPos,
state: BlockState,
- input: SingleRecipeInput,
+ input: HTRecipeInput,
recipe: HTVanillaCookingRecipe,
) {
// 実際にアウトプットに搬出する
diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/base/HTComplexBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/base/HTComplexBlockEntity.kt
index 2cb996996..b3211b1a8 100644
--- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/base/HTComplexBlockEntity.kt
+++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/base/HTComplexBlockEntity.kt
@@ -4,6 +4,7 @@ import hiiragi283.ragium.api.block.attribute.getFluidAttribute
import hiiragi283.ragium.api.recipe.HTFluidRecipe
import hiiragi283.ragium.api.recipe.HTRecipeCache
import hiiragi283.ragium.api.recipe.HTRecipeFinder
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
import hiiragi283.ragium.api.storage.HTStorageAccess
import hiiragi283.ragium.api.storage.HTStorageAction
import hiiragi283.ragium.api.storage.holder.HTSlotInfo
@@ -18,20 +19,19 @@ import net.minecraft.core.BlockPos
import net.minecraft.core.Holder
import net.minecraft.core.RegistryAccess
import net.minecraft.server.level.ServerLevel
-import net.minecraft.world.item.crafting.RecipeInput
import net.minecraft.world.level.block.Block
import net.minecraft.world.level.block.state.BlockState
-abstract class HTComplexBlockEntity> : HTProcessorBlockEntity.Cached {
+abstract class HTComplexBlockEntity : HTProcessorBlockEntity.Cached {
constructor(
- recipeCache: HTRecipeCache,
+ recipeCache: HTRecipeCache,
blockHolder: Holder,
pos: BlockPos,
state: BlockState,
) : super(recipeCache, blockHolder, pos, state)
constructor(
- finder: HTRecipeFinder,
+ finder: HTRecipeFinder,
blockHolder: Holder,
pos: BlockPos,
state: BlockState,
@@ -57,7 +57,7 @@ abstract class HTComplexBlockEntity 0
- final override fun canProgressRecipe(level: ServerLevel, input: INPUT, recipe: RECIPE): Boolean {
+ final override fun canProgressRecipe(level: ServerLevel, input: HTRecipeInput, recipe: RECIPE): Boolean {
val bool1: Boolean = HTStackSlotHelper.canInsertStack(outputSlot, input, level, recipe::assembleItem)
val bool2: Boolean = HTStackSlotHelper.canInsertStack(outputTank, input, level, recipe::assembleFluid)
return bool1 && bool2
@@ -67,7 +67,7 @@ abstract class HTComplexBlockEntity,
+ finder: HTRecipeFinder,
blockHolder: Holder,
pos: BlockPos,
state: BlockState,
-) : HTComplexBlockEntity(finder, blockHolder, pos, state) {
+) : HTComplexBlockEntity(finder, blockHolder, pos, state) {
lateinit var inputSlot: HTBasicItemSlot
private set
lateinit var catalystSlot: HTBasicItemSlot
@@ -39,14 +39,16 @@ abstract class HTItemWithCatalystBlockEntity(
outputSlot = upperOutput(builder, listener)
}
- final override fun createRecipeInput(level: ServerLevel, pos: BlockPos): HTDoubleRecipeInput =
- HTDoubleRecipeInput(inputSlot, catalystSlot)
+ final override fun createRecipeInput(level: ServerLevel, pos: BlockPos): HTRecipeInput? = HTRecipeInput.create {
+ items += inputSlot.getStack()
+ items += catalystSlot.getStack()
+ }
override fun completeRecipe(
level: ServerLevel,
pos: BlockPos,
state: BlockState,
- input: HTDoubleRecipeInput,
+ input: HTRecipeInput,
recipe: HTItemWithCatalystRecipe,
) {
super.completeRecipe(level, pos, state, input, recipe)
diff --git a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/base/HTSingleItemInputBlockEntity.kt b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/base/HTSingleItemInputBlockEntity.kt
index d811c21f3..9df872d00 100644
--- a/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/base/HTSingleItemInputBlockEntity.kt
+++ b/src/main/kotlin/hiiragi283/ragium/common/block/entity/processor/base/HTSingleItemInputBlockEntity.kt
@@ -1,9 +1,10 @@
package hiiragi283.ragium.common.block.entity.processor.base
+import hiiragi283.ragium.api.recipe.HTRecipe
import hiiragi283.ragium.api.recipe.HTRecipeCache
import hiiragi283.ragium.api.recipe.HTRecipeFinder
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
import hiiragi283.ragium.api.storage.holder.HTSlotInfo
-import hiiragi283.ragium.api.storage.item.toRecipeInput
import hiiragi283.ragium.api.util.HTContentListener
import hiiragi283.ragium.common.block.entity.processor.HTProcessorBlockEntity
import hiiragi283.ragium.common.recipe.HTFinderRecipeCache
@@ -13,47 +14,44 @@ import hiiragi283.ragium.common.storage.item.slot.HTBasicItemSlot
import net.minecraft.core.BlockPos
import net.minecraft.core.Holder
import net.minecraft.server.level.ServerLevel
-import net.minecraft.world.item.crafting.Recipe
-import net.minecraft.world.item.crafting.SingleRecipeInput
import net.minecraft.world.level.block.Block
import net.minecraft.world.level.block.state.BlockState
abstract class HTSingleItemInputBlockEntity(blockHolder: Holder, pos: BlockPos, state: BlockState) :
- HTProcessorBlockEntity(blockHolder, pos, state) {
+ HTProcessorBlockEntity(blockHolder, pos, state) {
lateinit var inputSlot: HTBasicItemSlot
protected set
- final override fun createRecipeInput(level: ServerLevel, pos: BlockPos): SingleRecipeInput? = inputSlot.toRecipeInput()
+ final override fun createRecipeInput(level: ServerLevel, pos: BlockPos): HTRecipeInput? = HTRecipeInput.single(inputSlot.getStack())
// Cached //
- abstract class Cached>(
- private val recipeCache: HTRecipeCache,
+ abstract class Cached(
+ private val recipeCache: HTRecipeCache,
blockHolder: Holder,
pos: BlockPos,
state: BlockState,
) : HTSingleItemInputBlockEntity(blockHolder, pos, state) {
constructor(
- finder: HTRecipeFinder,
+ finder: HTRecipeFinder,
blockHolder: Holder,
pos: BlockPos,
state: BlockState,
) : this(HTFinderRecipeCache(finder), blockHolder, pos, state)
- final override fun getMatchedRecipe(input: SingleRecipeInput, level: ServerLevel): RECIPE? =
- recipeCache.getFirstRecipe(input, level)
+ final override fun getMatchedRecipe(input: HTRecipeInput, level: ServerLevel): RECIPE? = recipeCache.getFirstRecipe(input, level)
}
- abstract class CachedWithTank> : Cached {
+ abstract class CachedWithTank : Cached {
constructor(
- recipeCache: HTRecipeCache,
+ recipeCache: HTRecipeCache,
blockHolder: Holder,
pos: BlockPos,
state: BlockState,
) : super(recipeCache, blockHolder, pos, state)
constructor(
- finder: HTRecipeFinder,
+ finder: HTRecipeFinder,
blockHolder: Holder,
pos: BlockPos,
state: BlockState,
diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTAutoCraftingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTAutoCraftingRecipe.kt
index 419a4e911..7d9ab26ba 100644
--- a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTAutoCraftingRecipe.kt
+++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTAutoCraftingRecipe.kt
@@ -2,19 +2,18 @@ package hiiragi283.ragium.common.recipe
import hiiragi283.ragium.api.recipe.HTRecipe
import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient
-import hiiragi283.ragium.api.recipe.input.HTMultiRecipeInput
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
import hiiragi283.ragium.api.recipe.multi.HTShapelessInputsRecipe
import hiiragi283.ragium.api.stack.ImmutableItemStack
import hiiragi283.ragium.api.stack.toImmutable
import net.minecraft.core.HolderLookup
import net.minecraft.world.item.crafting.CraftingRecipe
import net.minecraft.world.item.crafting.Ingredient
+import net.minecraft.world.level.Level
-class HTAutoCraftingRecipe(
- override val ingredients: List,
- private val factory: HTVanillaResultFactory,
-) : HTShapelessInputsRecipe,
- HTRecipe.Fake {
+class HTAutoCraftingRecipe(override val ingredients: List, private val factory: HTVanillaResultFactory) :
+ HTShapelessInputsRecipe,
+ HTRecipe.Fake {
companion object {
/**
* @see net.minecraft.world.level.block.entity.CrafterBlockEntity
@@ -26,13 +25,11 @@ class HTAutoCraftingRecipe(
this[ingredient] = this.getOrDefault(ingredient, 0) + 1
}
}.map { (ingredient: Ingredient, count: Int) -> HTItemIngredient(ingredient, count) },
- ) { _: HTMultiRecipeInput, provider: HolderLookup.Provider -> recipe.getResultItem(provider) }
+ ) { _: HTRecipeInput, provider: HolderLookup.Provider -> recipe.getResultItem(provider) }
}
- override fun test(input: HTMultiRecipeInput): Boolean = HTMultiRecipeInput.hasMatchingSlots(ingredients, input.items)
-
- override fun assembleItem(input: HTMultiRecipeInput, provider: HolderLookup.Provider): ImmutableItemStack? =
+ override fun assembleItem(input: HTRecipeInput, provider: HolderLookup.Provider): ImmutableItemStack? =
factory.assemble(input, provider).toImmutable()
- override fun isIncomplete(): Boolean = ingredients.isEmpty() || ingredients.any(HTItemIngredient::hasNoMatchingStacks)
+ override fun matches(input: HTRecipeInput, level: Level): Boolean = HTRecipeInput.hasMatchingSlots(ingredients, input.items)
}
diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTVanillaCookingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTVanillaCookingRecipe.kt
index 458940ad9..c7c276ad2 100644
--- a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTVanillaCookingRecipe.kt
+++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTVanillaCookingRecipe.kt
@@ -5,15 +5,14 @@ import hiiragi283.ragium.api.recipe.HTRecipe
import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient
import net.minecraft.world.item.ItemStack
import net.minecraft.world.item.crafting.AbstractCookingRecipe
-import net.minecraft.world.item.crafting.SingleRecipeInput
open class HTVanillaCookingRecipe :
HTVanillaSingleItemRecipe,
- HTRecipe.Modifiable {
+ HTRecipe.Modifiable {
constructor(
recipe: AbstractCookingRecipe,
ingredient: HTItemIngredient,
- resultFactory: HTVanillaResultFactory,
+ resultFactory: HTVanillaResultFactory,
) : super(recipe, ingredient, resultFactory)
constructor(recipe: AbstractCookingRecipe) : super(recipe)
diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTVanillaResultFactory.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTVanillaResultFactory.kt
index 6c62431f4..40734d164 100644
--- a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTVanillaResultFactory.kt
+++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTVanillaResultFactory.kt
@@ -1,9 +1,9 @@
package hiiragi283.ragium.common.recipe
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
import net.minecraft.core.HolderLookup
import net.minecraft.world.item.ItemStack
-import net.minecraft.world.item.crafting.RecipeInput
-fun interface HTVanillaResultFactory {
- fun assemble(input: INPUT, registries: HolderLookup.Provider): ItemStack
+fun interface HTVanillaResultFactory {
+ fun assemble(input: HTRecipeInput, registries: HolderLookup.Provider): ItemStack
}
diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTVanillaSingleItemRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTVanillaSingleItemRecipe.kt
index 49c428bc1..b33452ed2 100644
--- a/src/main/kotlin/hiiragi283/ragium/common/recipe/HTVanillaSingleItemRecipe.kt
+++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/HTVanillaSingleItemRecipe.kt
@@ -2,30 +2,38 @@ package hiiragi283.ragium.common.recipe
import hiiragi283.ragium.api.recipe.HTRecipe
import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
+import hiiragi283.ragium.api.recipe.single.HTSingleItemRecipe
import hiiragi283.ragium.api.stack.ImmutableItemStack
import hiiragi283.ragium.api.stack.toImmutable
import net.minecraft.core.HolderLookup
+import net.minecraft.world.item.ItemStack
import net.minecraft.world.item.crafting.Recipe
import net.minecraft.world.item.crafting.SingleRecipeInput
open class HTVanillaSingleItemRecipe>(
protected val recipe: RECIPE,
protected val ingredient: HTItemIngredient,
- protected val resultFactory: HTVanillaResultFactory,
-) : HTRecipe.Fake,
- HTItemIngredient.CountGetter {
+ protected val resultFactory: HTVanillaResultFactory,
+) : HTRecipe.Fake,
+ HTSingleItemRecipe {
constructor(recipe: RECIPE) : this(
recipe,
HTItemIngredient(recipe.ingredients[0], 1),
- { input: SingleRecipeInput, provider: HolderLookup.Provider -> recipe.assemble(input, provider) },
+ { input: HTRecipeInput, provider: HolderLookup.Provider ->
+ val item: ItemStack? = input.item(0)?.unwrap()
+ if (item != null) {
+ recipe.assemble(SingleRecipeInput(item), provider)
+ } else {
+ ItemStack.EMPTY
+ }
+ },
)
- final override fun test(input: SingleRecipeInput): Boolean = ingredient.test(input.item())
-
- override fun assembleItem(input: SingleRecipeInput, provider: HolderLookup.Provider): ImmutableItemStack? =
+ override fun assembleItem(input: HTRecipeInput, provider: HolderLookup.Provider): ImmutableItemStack? =
resultFactory.assemble(input, provider).toImmutable()
- final override fun isIncomplete(): Boolean = ingredient.hasNoMatchingStacks()
+ override fun test(stack: ImmutableItemStack): Boolean = ingredient.test(stack)
- final override fun getRequiredCount(stack: ImmutableItemStack): Int = ingredient.getRequiredAmount(stack)
+ override fun getRequiredCount(stack: ImmutableItemStack): Int = ingredient.getRequiredAmount(stack)
}
diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/machine/HTCopyEnchantingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/machine/HTCopyEnchantingRecipe.kt
index 7264f180e..b3e21d45e 100644
--- a/src/main/kotlin/hiiragi283/ragium/common/recipe/machine/HTCopyEnchantingRecipe.kt
+++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/machine/HTCopyEnchantingRecipe.kt
@@ -2,7 +2,7 @@ package hiiragi283.ragium.common.recipe.machine
import hiiragi283.ragium.api.item.component.filter
import hiiragi283.ragium.api.recipe.RagiumRecipeTypes
-import hiiragi283.ragium.api.recipe.input.HTMultiRecipeInput
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
import hiiragi283.ragium.api.recipe.multi.HTCombineRecipe
import hiiragi283.ragium.api.stack.ImmutableFluidStack
import hiiragi283.ragium.api.stack.ImmutableItemStack
@@ -20,7 +20,7 @@ object HTCopyEnchantingRecipe : HTCombineRecipe {
override fun getRightRequiredCount(stack: ImmutableItemStack): Int = 0
- override fun getRequiredAmount(input: HTMultiRecipeInput, stack: ImmutableFluidStack): Int {
+ override fun getRequiredAmount(input: HTRecipeInput, stack: ImmutableFluidStack): Int {
val tool: ImmutableItemStack = input.items[0]?.copyWithAmount(1) ?: return 0
val book: ImmutableItemStack = input.items[1] ?: return 0
return getFilteredEnchantments(tool, book)
@@ -28,26 +28,23 @@ object HTCopyEnchantingRecipe : HTCombineRecipe {
.let(HTExperienceHelper::fluidAmountFromExp)
}
- override fun test(input: HTMultiRecipeInput): Boolean {
- val tool: ImmutableItemStack = input.items[0]?.copyWithAmount(1) ?: return false
- val book: ImmutableItemStack = input.items[1] ?: return false
- return !getFilteredEnchantments(tool, book).isEmpty
+ override fun test(left: ImmutableItemStack, right: ImmutableItemStack, fluid: ImmutableFluidStack): Boolean {
+ val tool: ImmutableItemStack = left.copyWithAmount(1) ?: return false
+ return !getFilteredEnchantments(tool, right).isEmpty
}
- private fun getFilteredEnchantments(tool: ImmutableItemStack, book: ImmutableItemStack): ItemEnchantments = book
- .get(DataComponents.STORED_ENCHANTMENTS)
- ?.filter(tool.unwrap())
- ?: ItemEnchantments.EMPTY
-
- override fun assembleItem(input: HTMultiRecipeInput, provider: HolderLookup.Provider): ImmutableItemStack? {
+ override fun assembleItem(input: HTRecipeInput, provider: HolderLookup.Provider): ImmutableItemStack? {
val tool: ImmutableItemStack = input.items[0]?.copyWithAmount(1) ?: return null
val book: ImmutableItemStack = input.items[1] ?: return null
return tool.plus(EnchantmentHelper.getComponentType(tool.unwrap()), getFilteredEnchantments(tool, book))
}
- override fun isIncomplete(): Boolean = false
-
override fun getSerializer(): RecipeSerializer<*> = RagiumRecipeSerializers.COPY_ENCHANTING
override fun getType(): RecipeType<*> = RagiumRecipeTypes.ENCHANTING.get()
+
+ private fun getFilteredEnchantments(tool: ImmutableItemStack, book: ImmutableItemStack): ItemEnchantments = book
+ .get(DataComponents.STORED_ENCHANTMENTS)
+ ?.filter(tool.unwrap())
+ ?: ItemEnchantments.EMPTY
}
diff --git a/src/main/kotlin/hiiragi283/ragium/common/recipe/machine/HTExpExtractingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/common/recipe/machine/HTExpExtractingRecipe.kt
index b27f3caa2..3b47f88f6 100644
--- a/src/main/kotlin/hiiragi283/ragium/common/recipe/machine/HTExpExtractingRecipe.kt
+++ b/src/main/kotlin/hiiragi283/ragium/common/recipe/machine/HTExpExtractingRecipe.kt
@@ -1,43 +1,45 @@
package hiiragi283.ragium.common.recipe.machine
import hiiragi283.ragium.api.recipe.RagiumRecipeTypes
-import hiiragi283.ragium.api.recipe.input.HTDoubleRecipeInput
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
import hiiragi283.ragium.api.recipe.multi.HTItemWithCatalystRecipe
import hiiragi283.ragium.api.stack.ImmutableFluidStack
import hiiragi283.ragium.api.stack.ImmutableItemStack
-import hiiragi283.ragium.api.stack.toImmutable
import hiiragi283.ragium.common.util.HTExperienceHelper
import hiiragi283.ragium.setup.RagiumFluidContents
import hiiragi283.ragium.setup.RagiumRecipeSerializers
import net.minecraft.core.HolderLookup
-import net.minecraft.world.item.ItemStack
import net.minecraft.world.item.Items
import net.minecraft.world.item.crafting.RecipeSerializer
import net.minecraft.world.item.crafting.RecipeType
import net.minecraft.world.item.enchantment.EnchantmentHelper
+import net.minecraft.world.level.Level
data object HTExpExtractingRecipe : HTItemWithCatalystRecipe {
- override fun assembleFluid(input: HTDoubleRecipeInput, provider: HolderLookup.Provider): ImmutableFluidStack? = EnchantmentHelper
- .getEnchantmentsForCrafting(input.getItem(0))
- .let(HTExperienceHelper::getTotalMinCost)
- .let(HTExperienceHelper::fluidAmountFromExp)
- .let(RagiumFluidContents.EXPERIENCE::toImmutableStack)
-
- override fun test(input: HTDoubleRecipeInput): Boolean =
- EnchantmentHelper.canStoreEnchantments(input.getItem(0)) && input.getItem(1).`is`(Items.GRINDSTONE)
+ override fun assembleFluid(input: HTRecipeInput, provider: HolderLookup.Provider): ImmutableFluidStack? = input
+ .item(0)
+ ?.unwrap()
+ ?.let(EnchantmentHelper::getEnchantmentsForCrafting)
+ ?.let(HTExperienceHelper::getTotalMinCost)
+ ?.let(HTExperienceHelper::fluidAmountFromExp)
+ ?.let(RagiumFluidContents.EXPERIENCE::toImmutableStack)
/**
* @see net.minecraft.world.inventory.GrindstoneMenu
*/
- override fun assembleItem(input: HTDoubleRecipeInput, provider: HolderLookup.Provider): ImmutableItemStack? {
- val tool: ItemStack = input.getItem(0).copyWithCount(1)
+ override fun assembleItem(input: HTRecipeInput, provider: HolderLookup.Provider): ImmutableItemStack? {
+ val tool: ImmutableItemStack = input.item(0)?.copyWithAmount(1) ?: return null
return when {
- tool.`is`(Items.ENCHANTED_BOOK) -> ImmutableItemStack.of(Items.BOOK)
- else -> tool.toImmutable()?.minus(EnchantmentHelper.getComponentType(tool))
+ tool.isOf(Items.ENCHANTED_BOOK) -> ImmutableItemStack.of(Items.BOOK)
+ else -> tool.minus(EnchantmentHelper.getComponentType(tool.unwrap()))
}
}
- override fun isIncomplete(): Boolean = false
+ override fun matches(input: HTRecipeInput, level: Level): Boolean {
+ val bool1: Boolean = input.testItem(0) { stack: ImmutableItemStack -> EnchantmentHelper.canStoreEnchantments(stack.unwrap()) }
+ val bool2: Boolean = input.testItem(1) { stack: ImmutableItemStack -> stack.isOf(Items.GRINDSTONE) }
+ return bool1 && bool2
+ }
override fun getSerializer(): RecipeSerializer<*> = RagiumRecipeSerializers.EXP_EXTRACTING
diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTAlloyingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTAlloyingRecipe.kt
index f3da5a85c..de4620e56 100644
--- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTAlloyingRecipe.kt
+++ b/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTAlloyingRecipe.kt
@@ -2,21 +2,19 @@ package hiiragi283.ragium.impl.recipe
import hiiragi283.ragium.api.recipe.RagiumRecipeTypes
import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient
-import hiiragi283.ragium.api.recipe.input.HTMultiRecipeInput
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
import hiiragi283.ragium.api.recipe.multi.HTShapelessInputsRecipe
import hiiragi283.ragium.api.recipe.result.HTItemResult
import hiiragi283.ragium.impl.recipe.base.HTBasicSingleOutputRecipe
import hiiragi283.ragium.setup.RagiumRecipeSerializers
import net.minecraft.world.item.crafting.RecipeSerializer
import net.minecraft.world.item.crafting.RecipeType
+import net.minecraft.world.level.Level
class HTAlloyingRecipe(override val ingredients: List, result: HTItemResult) :
- HTBasicSingleOutputRecipe(result),
+ HTBasicSingleOutputRecipe(result),
HTShapelessInputsRecipe {
- override fun test(input: HTMultiRecipeInput): Boolean = HTMultiRecipeInput.hasMatchingSlots(ingredients, input.items)
-
- override fun isIncomplete(): Boolean =
- ingredients.isEmpty() || ingredients.any(HTItemIngredient::hasNoMatchingStacks) || result.hasNoMatchingStack()
+ override fun matches(input: HTRecipeInput, level: Level): Boolean = HTRecipeInput.hasMatchingSlots(ingredients, input.items)
override fun getSerializer(): RecipeSerializer<*> = RagiumRecipeSerializers.ALLOYING
diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTBrewingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTBrewingRecipe.kt
index 059f96a1b..8905e6917 100644
--- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTBrewingRecipe.kt
+++ b/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTBrewingRecipe.kt
@@ -6,7 +6,7 @@ import hiiragi283.ragium.api.item.alchemy.HTPotionHelper
import hiiragi283.ragium.api.recipe.RagiumRecipeTypes
import hiiragi283.ragium.api.recipe.ingredient.HTFluidIngredient
import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient
-import hiiragi283.ragium.api.recipe.input.HTMultiRecipeInput
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
import hiiragi283.ragium.api.stack.ImmutableFluidStack
import hiiragi283.ragium.api.stack.ImmutableItemStack
import hiiragi283.ragium.api.stack.toImmutable
@@ -24,24 +24,14 @@ class HTBrewingRecipe(itemIngredients: Pair,
val FLUID_INGREDIENT: HTFluidIngredient = RagiumPlatform.INSTANCE.fluidCreator().water(1000)
}
- override fun testFluid(input: HTMultiRecipeInput): Boolean = FLUID_INGREDIENT.test(input.getFluid(0))
+ override fun testFluid(stack: ImmutableFluidStack): Boolean = FLUID_INGREDIENT.test(stack)
- override fun assembleItem(input: HTMultiRecipeInput, provider: HolderLookup.Provider): ImmutableItemStack? = when (test(input)) {
- true -> HTPotionHelper.createPotion(RagiumItems.POTION_DROP, contents).toImmutable()
- false -> null
- }
+ override fun getRequiredAmount(input: HTRecipeInput, stack: ImmutableFluidStack): Int = FLUID_INGREDIENT.getRequiredAmount(stack)
- override fun isIncomplete(): Boolean {
- val (left: HTItemIngredient, right: HTItemIngredient) = itemIngredients
- val bool1: Boolean = left.hasNoMatchingStacks()
- val bool2: Boolean = right.hasNoMatchingStacks()
- val bool3: Boolean = contents.isEmpty()
- return bool1 || bool2 || bool3
- }
+ override fun assembleItem(input: HTRecipeInput, provider: HolderLookup.Provider): ImmutableItemStack? =
+ HTPotionHelper.createPotion(RagiumItems.POTION_DROP, contents).toImmutable()
override fun getSerializer(): RecipeSerializer<*> = RagiumRecipeSerializers.BREWING
override fun getType(): RecipeType<*> = RagiumRecipeTypes.BREWING.get()
-
- override fun getRequiredAmount(input: HTMultiRecipeInput, stack: ImmutableFluidStack): Int = FLUID_INGREDIENT.getRequiredAmount(stack)
}
diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTCompressingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTCompressingRecipe.kt
index 77b6134f6..2d2f5497d 100644
--- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTCompressingRecipe.kt
+++ b/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTCompressingRecipe.kt
@@ -2,24 +2,21 @@ package hiiragi283.ragium.impl.recipe
import hiiragi283.ragium.api.recipe.RagiumRecipeTypes
import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient
-import hiiragi283.ragium.api.recipe.input.HTDoubleRecipeInput
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
import hiiragi283.ragium.api.recipe.result.HTComplexResult
import hiiragi283.ragium.api.stack.ImmutableItemStack
import hiiragi283.ragium.impl.recipe.base.HTBasicItemWithCatalystRecipe
import hiiragi283.ragium.setup.RagiumRecipeSerializers
-import net.minecraft.world.item.ItemStack
import net.minecraft.world.item.crafting.RecipeSerializer
import net.minecraft.world.item.crafting.RecipeType
+import net.minecraft.world.level.Level
import java.util.Optional
class HTCompressingRecipe(ingredient: HTItemIngredient, catalyst: Optional, results: HTComplexResult) :
HTBasicItemWithCatalystRecipe(ingredient, catalyst, results) {
- override fun test(input: HTDoubleRecipeInput): Boolean {
- val stackIn: ItemStack = input.getItem(1)
- val bool1: Boolean = optional
- .map { ingredient: HTItemIngredient -> ingredient.testOnlyType(stackIn) }
- .orElse(stackIn.isEmpty)
- val bool2: Boolean = required.test(input.getItem(0))
+ override fun matches(input: HTRecipeInput, level: Level): Boolean {
+ val bool1: Boolean = input.testItem(0, required)
+ val bool2: Boolean = input.testCatalyst(1, optional)
return bool1 && bool2
}
diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTEnchantingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTEnchantingRecipe.kt
index c25cd3c51..de5093514 100644
--- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTEnchantingRecipe.kt
+++ b/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTEnchantingRecipe.kt
@@ -3,7 +3,7 @@ package hiiragi283.ragium.impl.recipe
import hiiragi283.ragium.api.item.createEnchantedBook
import hiiragi283.ragium.api.recipe.RagiumRecipeTypes
import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient
-import hiiragi283.ragium.api.recipe.input.HTMultiRecipeInput
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
import hiiragi283.ragium.api.stack.ImmutableFluidStack
import hiiragi283.ragium.api.stack.ImmutableItemStack
import hiiragi283.ragium.api.stack.toImmutable
@@ -16,7 +16,6 @@ import net.minecraft.core.HolderLookup
import net.minecraft.world.item.crafting.RecipeSerializer
import net.minecraft.world.item.crafting.RecipeType
import net.minecraft.world.item.enchantment.Enchantment
-import net.neoforged.neoforge.fluids.FluidStack
class HTEnchantingRecipe(itemIngredients: Pair, val holder: Holder) :
HTBasicCombineRecipe(itemIngredients) {
@@ -25,27 +24,15 @@ class HTEnchantingRecipe(itemIngredients: Pair= getRequiredExpFluid()
- }
-
- override fun assembleItem(input: HTMultiRecipeInput, provider: HolderLookup.Provider): ImmutableItemStack? = when (test(input)) {
- true -> createEnchantedBook(holder)
- false -> null
- }?.toImmutable()
+ override fun testFluid(stack: ImmutableFluidStack): Boolean =
+ RagiumFluidContents.EXPERIENCE.isOf(stack) && stack.amount() >= getRequiredExpFluid()
override fun getSerializer(): RecipeSerializer<*> = RagiumRecipeSerializers.ENCHANTING
override fun getType(): RecipeType<*> = RagiumRecipeTypes.ENCHANTING.get()
- override fun isIncomplete(): Boolean {
- val (left: HTItemIngredient, right: HTItemIngredient) = itemIngredients
- val bool1: Boolean = left.hasNoMatchingStacks()
- val bool2: Boolean = right.hasNoMatchingStacks()
- val bool3: Boolean = !holder.isBound
- return bool1 || bool2 || bool3
- }
+ override fun getRequiredAmount(input: HTRecipeInput, stack: ImmutableFluidStack): Int = getRequiredExpFluid()
- override fun getRequiredAmount(input: HTMultiRecipeInput, stack: ImmutableFluidStack): Int = getRequiredExpFluid()
+ override fun assembleItem(input: HTRecipeInput, provider: HolderLookup.Provider): ImmutableItemStack? =
+ createEnchantedBook(holder).toImmutable()
}
diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTExtractingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTExtractingRecipe.kt
index 9edf0cc83..fe4402290 100644
--- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTExtractingRecipe.kt
+++ b/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTExtractingRecipe.kt
@@ -2,24 +2,21 @@ package hiiragi283.ragium.impl.recipe
import hiiragi283.ragium.api.recipe.RagiumRecipeTypes
import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient
-import hiiragi283.ragium.api.recipe.input.HTDoubleRecipeInput
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
import hiiragi283.ragium.api.recipe.result.HTComplexResult
import hiiragi283.ragium.api.stack.ImmutableItemStack
import hiiragi283.ragium.impl.recipe.base.HTBasicItemWithCatalystRecipe
import hiiragi283.ragium.setup.RagiumRecipeSerializers
-import net.minecraft.world.item.ItemStack
import net.minecraft.world.item.crafting.RecipeSerializer
import net.minecraft.world.item.crafting.RecipeType
+import net.minecraft.world.level.Level
import java.util.Optional
class HTExtractingRecipe(ingredient: HTItemIngredient, catalyst: Optional, results: HTComplexResult) :
HTBasicItemWithCatalystRecipe(ingredient, catalyst, results) {
- override fun test(input: HTDoubleRecipeInput): Boolean {
- val stackIn: ItemStack = input.getItem(1)
- val bool1: Boolean = optional
- .map { ingredient: HTItemIngredient -> ingredient.testOnlyType(stackIn) }
- .orElse(stackIn.isEmpty)
- val bool2: Boolean = required.test(input.getItem(0))
+ override fun matches(input: HTRecipeInput, level: Level): Boolean {
+ val bool1: Boolean = input.testItem(0, required)
+ val bool2: Boolean = input.testCatalyst(1, optional)
return bool1 && bool2
}
diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTMixingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTMixingRecipe.kt
index 55aa8f419..13c6ce449 100644
--- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTMixingRecipe.kt
+++ b/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTMixingRecipe.kt
@@ -3,7 +3,7 @@ package hiiragi283.ragium.impl.recipe
import hiiragi283.ragium.api.recipe.RagiumRecipeTypes
import hiiragi283.ragium.api.recipe.ingredient.HTFluidIngredient
import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient
-import hiiragi283.ragium.api.recipe.input.HTMultiRecipeInput
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
import hiiragi283.ragium.api.recipe.result.HTComplexResult
import hiiragi283.ragium.api.stack.ImmutableFluidStack
import hiiragi283.ragium.api.stack.ImmutableItemStack
@@ -11,29 +11,16 @@ import hiiragi283.ragium.impl.recipe.base.HTBasicComplexRecipe
import hiiragi283.ragium.setup.RagiumRecipeSerializers
import net.minecraft.world.item.crafting.RecipeSerializer
import net.minecraft.world.item.crafting.RecipeType
+import net.minecraft.world.level.Level
class HTMixingRecipe(
val itemIngredients: List,
val fluidIngredients: List,
results: HTComplexResult,
) : HTBasicComplexRecipe(results) {
- override fun isIncompleteIngredient(): Boolean {
- if (!itemIngredients.isEmpty()) {
- if (itemIngredients.any(HTItemIngredient::hasNoMatchingStacks)) {
- return true
- }
- }
- if (!fluidIngredients.isEmpty()) {
- if (fluidIngredients.any(HTFluidIngredient::hasNoMatchingStacks)) {
- return true
- }
- }
- return false
- }
-
- override fun test(input: HTMultiRecipeInput): Boolean {
- val bool1: Boolean = HTMultiRecipeInput.hasMatchingSlots(itemIngredients, input.items)
- val bool2: Boolean = HTMultiRecipeInput.hasMatchingSlots(fluidIngredients, input.fluids)
+ override fun matches(input: HTRecipeInput, level: Level): Boolean {
+ val bool1: Boolean = HTRecipeInput.hasMatchingSlots(itemIngredients, input.items)
+ val bool2: Boolean = HTRecipeInput.hasMatchingSlots(fluidIngredients, input.fluids)
return bool1 && bool2
}
diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTRefiningRecipe.kt b/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTRefiningRecipe.kt
index afb038fb3..e3c6ad290 100644
--- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTRefiningRecipe.kt
+++ b/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTRefiningRecipe.kt
@@ -3,7 +3,7 @@ package hiiragi283.ragium.impl.recipe
import hiiragi283.ragium.api.recipe.RagiumRecipeTypes
import hiiragi283.ragium.api.recipe.ingredient.HTFluidIngredient
import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient
-import hiiragi283.ragium.api.recipe.input.HTMultiRecipeInput
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
import hiiragi283.ragium.api.recipe.result.HTComplexResult
import hiiragi283.ragium.api.stack.ImmutableFluidStack
import hiiragi283.ragium.api.stack.ImmutableItemStack
@@ -11,19 +11,14 @@ import hiiragi283.ragium.impl.recipe.base.HTBasicComplexRecipe
import hiiragi283.ragium.setup.RagiumRecipeSerializers
import net.minecraft.world.item.crafting.RecipeSerializer
import net.minecraft.world.item.crafting.RecipeType
+import net.minecraft.world.level.Level
import java.util.Optional
class HTRefiningRecipe(val itemIngredient: Optional, val fluidIngredient: HTFluidIngredient, results: HTComplexResult) :
HTBasicComplexRecipe(results) {
- override fun isIncompleteIngredient(): Boolean {
- val bool1: Boolean = itemIngredient.isPresent && itemIngredient.get().hasNoMatchingStacks()
- val bool2: Boolean = fluidIngredient.hasNoMatchingStacks()
- return bool1 || bool2
- }
-
- override fun test(input: HTMultiRecipeInput): Boolean {
- val bool1: Boolean = itemIngredient.isEmpty || itemIngredient.get().test(input.getItem(0))
- val bool2: Boolean = fluidIngredient.test(input.getFluid(0))
+ override fun matches(input: HTRecipeInput, level: Level): Boolean {
+ val bool1: Boolean = input.testCatalyst(0, itemIngredient)
+ val bool2: Boolean = input.testFluid(0, fluidIngredient)
return bool1 && bool2
}
diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTSimpleMixingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTSimpleMixingRecipe.kt
index 14bd32135..15dc23dad 100644
--- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTSimpleMixingRecipe.kt
+++ b/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTSimpleMixingRecipe.kt
@@ -3,7 +3,7 @@ package hiiragi283.ragium.impl.recipe
import hiiragi283.ragium.api.recipe.RagiumRecipeTypes
import hiiragi283.ragium.api.recipe.ingredient.HTFluidIngredient
import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient
-import hiiragi283.ragium.api.recipe.input.HTMultiRecipeInput
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
import hiiragi283.ragium.api.recipe.result.HTComplexResult
import hiiragi283.ragium.api.stack.ImmutableFluidStack
import hiiragi283.ragium.api.stack.ImmutableItemStack
@@ -11,18 +11,13 @@ import hiiragi283.ragium.impl.recipe.base.HTBasicComplexRecipe
import hiiragi283.ragium.setup.RagiumRecipeSerializers
import net.minecraft.world.item.crafting.RecipeSerializer
import net.minecraft.world.item.crafting.RecipeType
+import net.minecraft.world.level.Level
class HTSimpleMixingRecipe(val itemIngredient: HTItemIngredient, val fluidIngredient: HTFluidIngredient, results: HTComplexResult) :
HTBasicComplexRecipe(results) {
- override fun isIncompleteIngredient(): Boolean {
- val bool1: Boolean = itemIngredient.hasNoMatchingStacks()
- val bool2: Boolean = fluidIngredient.hasNoMatchingStacks()
- return bool1 || bool2
- }
-
- override fun test(input: HTMultiRecipeInput): Boolean {
- val bool1: Boolean = itemIngredient.test(input.getItem(0))
- val bool2: Boolean = fluidIngredient.test(input.getFluid(0))
+ override fun matches(input: HTRecipeInput, level: Level): Boolean {
+ val bool1: Boolean = input.testItem(0, itemIngredient)
+ val bool2: Boolean = input.testFluid(0, fluidIngredient)
return bool1 && bool2
}
diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTSimulatingRecipe.kt b/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTSimulatingRecipe.kt
index 3675341ad..11b4a444e 100644
--- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTSimulatingRecipe.kt
+++ b/src/main/kotlin/hiiragi283/ragium/impl/recipe/HTSimulatingRecipe.kt
@@ -2,24 +2,21 @@ package hiiragi283.ragium.impl.recipe
import hiiragi283.ragium.api.recipe.RagiumRecipeTypes
import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient
-import hiiragi283.ragium.api.recipe.input.HTDoubleRecipeInput
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
import hiiragi283.ragium.api.recipe.result.HTComplexResult
import hiiragi283.ragium.api.stack.ImmutableItemStack
import hiiragi283.ragium.impl.recipe.base.HTBasicItemWithCatalystRecipe
import hiiragi283.ragium.setup.RagiumRecipeSerializers
-import net.minecraft.world.item.ItemStack
import net.minecraft.world.item.crafting.RecipeSerializer
import net.minecraft.world.item.crafting.RecipeType
+import net.minecraft.world.level.Level
import java.util.Optional
class HTSimulatingRecipe(catalyst: HTItemIngredient, ingredient: Optional, results: HTComplexResult) :
HTBasicItemWithCatalystRecipe(catalyst, ingredient, results) {
- override fun test(input: HTDoubleRecipeInput): Boolean {
- val stackIn: ItemStack = input.getItem(0)
- val bool1: Boolean = optional
- .map { ingredient: HTItemIngredient -> ingredient.testOnlyType(stackIn) }
- .orElse(stackIn.isEmpty)
- val bool2: Boolean = required.test(input.getItem(1))
+ override fun matches(input: HTRecipeInput, level: Level): Boolean {
+ val bool1: Boolean = input.testCatalyst(0, optional)
+ val bool2: Boolean = input.testItem(1, required)
return bool1 && bool2
}
diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicCombineRecipe.kt b/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicCombineRecipe.kt
index f295428aa..3eecd510a 100644
--- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicCombineRecipe.kt
+++ b/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicCombineRecipe.kt
@@ -1,8 +1,8 @@
package hiiragi283.ragium.impl.recipe.base
import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient
-import hiiragi283.ragium.api.recipe.input.HTMultiRecipeInput
import hiiragi283.ragium.api.recipe.multi.HTCombineRecipe
+import hiiragi283.ragium.api.stack.ImmutableFluidStack
import hiiragi283.ragium.api.stack.ImmutableItemStack
abstract class HTBasicCombineRecipe(val itemIngredients: Pair) : HTCombineRecipe {
@@ -10,12 +10,12 @@ abstract class HTBasicCombineRecipe(val itemIngredients: Pair(val results: HTComplexResult) : HTFluidRecipe {
- final override fun assembleFluid(input: INPUT, provider: HolderLookup.Provider): ImmutableFluidStack? =
- getFluidResult(input, provider, results.getRight())
+abstract class HTBasicComplexOutputRecipe(val results: HTComplexResult) : HTFluidRecipe {
+ final override fun assembleFluid(input: HTRecipeInput, provider: HolderLookup.Provider): ImmutableFluidStack? =
+ results.getRight()?.getStackOrNull(provider)
- final override fun assembleItem(input: INPUT, provider: HolderLookup.Provider): ImmutableItemStack? =
- getItemResult(input, provider, results.getLeft())
-
- final override fun isIncomplete(): Boolean =
- isIncompleteIngredient() || results.map(HTItemResult::hasNoMatchingStack, HTFluidResult::hasNoMatchingStack)
-
- /**
- * 材料が有効かどうか判定します
- */
- protected abstract fun isIncompleteIngredient(): Boolean
+ final override fun assembleItem(input: HTRecipeInput, provider: HolderLookup.Provider): ImmutableItemStack? =
+ results.getLeft()?.getStackOrNull(provider)
}
diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicComplexRecipe.kt b/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicComplexRecipe.kt
index 95d660893..fba6d075d 100644
--- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicComplexRecipe.kt
+++ b/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicComplexRecipe.kt
@@ -1,6 +1,5 @@
package hiiragi283.ragium.impl.recipe.base
-import hiiragi283.ragium.api.recipe.input.HTMultiRecipeInput
import hiiragi283.ragium.api.recipe.multi.HTComplexRecipe
import hiiragi283.ragium.api.recipe.result.HTComplexResult
@@ -8,5 +7,5 @@ import hiiragi283.ragium.api.recipe.result.HTComplexResult
* [HTComplexRecipe]の抽象クラス
*/
abstract class HTBasicComplexRecipe(results: HTComplexResult) :
- HTBasicComplexOutputRecipe(results),
+ HTBasicComplexOutputRecipe(results),
HTComplexRecipe
diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicItemWithCatalystRecipe.kt b/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicItemWithCatalystRecipe.kt
index 61c8071b1..016472aff 100644
--- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicItemWithCatalystRecipe.kt
+++ b/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicItemWithCatalystRecipe.kt
@@ -1,7 +1,6 @@
package hiiragi283.ragium.impl.recipe.base
import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient
-import hiiragi283.ragium.api.recipe.input.HTDoubleRecipeInput
import hiiragi283.ragium.api.recipe.multi.HTItemWithCatalystRecipe
import hiiragi283.ragium.api.recipe.result.HTComplexResult
import java.util.Optional
@@ -13,11 +12,5 @@ abstract class HTBasicItemWithCatalystRecipe(
val required: HTItemIngredient,
val optional: Optional,
results: HTComplexResult,
-) : HTBasicComplexOutputRecipe(results),
- HTItemWithCatalystRecipe {
- final override fun isIncompleteIngredient(): Boolean {
- val bool1: Boolean = required.hasNoMatchingStacks()
- val bool2: Boolean = optional.map(HTItemIngredient::hasNoMatchingStacks).orElse(false)
- return bool1 || bool2
- }
-}
+) : HTBasicComplexOutputRecipe(results),
+ HTItemWithCatalystRecipe
diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicSingleExtraItemRecipe.kt b/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicSingleExtraItemRecipe.kt
index 19fc48e70..d157ed8be 100644
--- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicSingleExtraItemRecipe.kt
+++ b/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicSingleExtraItemRecipe.kt
@@ -2,28 +2,22 @@ package hiiragi283.ragium.impl.recipe.base
import hiiragi283.ragium.api.recipe.extra.HTSingleExtraItemRecipe
import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
import hiiragi283.ragium.api.recipe.result.HTItemResult
import hiiragi283.ragium.api.stack.ImmutableItemStack
import net.minecraft.core.HolderLookup
-import net.minecraft.world.item.crafting.SingleRecipeInput
import java.util.Optional
import kotlin.jvm.optionals.getOrNull
abstract class HTBasicSingleExtraItemRecipe(val ingredient: HTItemIngredient, val result: HTItemResult, val extra: Optional) :
HTSingleExtraItemRecipe {
- final override fun assembleExtraItem(input: SingleRecipeInput, provider: HolderLookup.Provider): ImmutableItemStack? =
- getItemResult(input, provider, extra.getOrNull())
+ final override fun test(stack: ImmutableItemStack): Boolean = ingredient.test(stack)
- final override fun test(input: SingleRecipeInput): Boolean = ingredient.test(input.item())
-
- final override fun assembleItem(input: SingleRecipeInput, provider: HolderLookup.Provider): ImmutableItemStack? =
- getItemResult(input, provider, result)
-
- override fun isIncomplete(): Boolean {
- val bool1: Boolean = ingredient.hasNoMatchingStacks()
- val bool2: Boolean = result.hasNoMatchingStack()
- return bool1 || bool2
- }
+ final override fun assembleItem(input: HTRecipeInput, provider: HolderLookup.Provider): ImmutableItemStack? =
+ result.getStackOrNull(provider)
final override fun getRequiredCount(stack: ImmutableItemStack): Int = ingredient.getRequiredAmount(stack)
+
+ final override fun assembleExtraItem(input: HTRecipeInput, provider: HolderLookup.Provider): ImmutableItemStack? =
+ extra.getOrNull()?.getStackOrNull(provider)
}
diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicSingleFluidRecipe.kt b/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicSingleFluidRecipe.kt
index a7785a136..55323a74a 100644
--- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicSingleFluidRecipe.kt
+++ b/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicSingleFluidRecipe.kt
@@ -1,23 +1,21 @@
package hiiragi283.ragium.impl.recipe.base
import hiiragi283.ragium.api.recipe.ingredient.HTItemIngredient
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
import hiiragi283.ragium.api.recipe.result.HTFluidResult
import hiiragi283.ragium.api.recipe.single.HTSingleFluidRecipe
import hiiragi283.ragium.api.stack.ImmutableFluidStack
import hiiragi283.ragium.api.stack.ImmutableItemStack
import net.minecraft.core.HolderLookup
-import net.minecraft.world.item.crafting.SingleRecipeInput
/**
* [HTSingleFluidRecipe]の抽象クラス
*/
abstract class HTBasicSingleFluidRecipe(val ingredient: HTItemIngredient, val result: HTFluidResult) : HTSingleFluidRecipe {
- override fun getRequiredCount(stack: ImmutableItemStack): Int = ingredient.getRequiredAmount(stack)
+ final override fun test(stack: ImmutableItemStack): Boolean = ingredient.test(stack)
- override fun test(input: SingleRecipeInput): Boolean = ingredient.test(input.item())
+ final override fun getRequiredCount(stack: ImmutableItemStack): Int = ingredient.getRequiredAmount(stack)
- final override fun isIncomplete(): Boolean = ingredient.hasNoMatchingStacks() || result.hasNoMatchingStack()
-
- final override fun assembleFluid(input: SingleRecipeInput, provider: HolderLookup.Provider): ImmutableFluidStack? =
- getFluidResult(input, provider, result)
+ final override fun assembleFluid(input: HTRecipeInput, provider: HolderLookup.Provider): ImmutableFluidStack? =
+ result.getStackOrNull(provider)
}
diff --git a/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicSingleOutputRecipe.kt b/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicSingleOutputRecipe.kt
index 977e8bc10..c59f5dc6c 100644
--- a/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicSingleOutputRecipe.kt
+++ b/src/main/kotlin/hiiragi283/ragium/impl/recipe/base/HTBasicSingleOutputRecipe.kt
@@ -1,12 +1,12 @@
package hiiragi283.ragium.impl.recipe.base
import hiiragi283.ragium.api.recipe.HTRecipe
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
import hiiragi283.ragium.api.recipe.result.HTItemResult
import hiiragi283.ragium.api.stack.ImmutableItemStack
import net.minecraft.core.HolderLookup
-import net.minecraft.world.item.crafting.RecipeInput
-abstract class HTBasicSingleOutputRecipe(val result: HTItemResult) : HTRecipe {
- final override fun assembleItem(input: INPUT, provider: HolderLookup.Provider): ImmutableItemStack? =
- getItemResult(input, provider, result)
+abstract class HTBasicSingleOutputRecipe(val result: HTItemResult) : HTRecipe {
+ final override fun assembleItem(input: HTRecipeInput, provider: HolderLookup.Provider): ImmutableItemStack? =
+ result.getStackOrNull(provider)
}
diff --git a/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeBiCodecs.kt b/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeBiCodecs.kt
index 2fc78b90b..a8e2bfd99 100644
--- a/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeBiCodecs.kt
+++ b/src/main/kotlin/hiiragi283/ragium/setup/RagiumRecipeBiCodecs.kt
@@ -69,7 +69,7 @@ object RagiumRecipeBiCodecs {
.codec(Registries.ITEM)
.fieldOf("seed")
.forGetter(HTPlantingRecipe::seed),
- HTItemIngredient.CODEC.fieldOf("soil").forGetter(HTPlantingRecipe::soil),
+ HTItemIngredient.UNSIZED_CODEC.fieldOf("soil").forGetter(HTPlantingRecipe::soil),
HTFluidIngredient.CODEC.fieldOf("fluid").forGetter(HTPlantingRecipe::fluid),
HTItemResult.CODEC.fieldOf("crop").forGetter(HTPlantingRecipe::crop),
::HTPlantingRecipe,
@@ -77,7 +77,7 @@ object RagiumRecipeBiCodecs {
@JvmField
val REFINING: MapBiCodec = MapBiCodec.composite(
- HTItemIngredient.CODEC.optionalFieldOf("item_ingredient").forGetter(HTRefiningRecipe::itemIngredient),
+ HTItemIngredient.UNSIZED_CODEC.optionalFieldOf("item_ingredient").forGetter(HTRefiningRecipe::itemIngredient),
HTFluidIngredient.CODEC.fieldOf("fluid_ingredient").forGetter(HTRefiningRecipe::fluidIngredient),
RESULTS.forGetter(HTRefiningRecipe::results),
::HTRefiningRecipe,
@@ -86,19 +86,19 @@ object RagiumRecipeBiCodecs {
@JvmField
val ROCK_GENERATING: MapBiCodec = MapBiCodec.composite(
HTFluidIngredient.CODEC.fieldOf("left").forGetter(HTRockGeneratingRecipe::left),
- BiCodecs.either(HTItemIngredient.CODEC, HTFluidIngredient.CODEC).fieldOf("right").forGetter(HTRockGeneratingRecipe::right),
- HTItemIngredient.CODEC.optionalFieldOf("bottom").forGetter(HTRockGeneratingRecipe::bottom),
+ BiCodecs.either(HTItemIngredient.UNSIZED_CODEC, HTFluidIngredient.CODEC).fieldOf("right").forGetter(HTRockGeneratingRecipe::right),
+ HTItemIngredient.UNSIZED_CODEC.optionalFieldOf("bottom").forGetter(HTRockGeneratingRecipe::bottom),
HTItemResult.CODEC.fieldOf(RagiumConst.RESULT).forGetter(HTRockGeneratingRecipe::result),
::HTRockGeneratingRecipe,
)
@JvmStatic
- fun > singleOutput(
+ fun singleOutput(
factory: (I, HTItemResult) -> R,
ingredient: ParameterCodec,
): MapBiCodec = MapBiCodec.composite(
ingredient,
- HTItemResult.CODEC.fieldOf(RagiumConst.RESULT).forGetter(HTBasicSingleOutputRecipe<*>::result),
+ HTItemResult.CODEC.fieldOf(RagiumConst.RESULT).forGetter(HTBasicSingleOutputRecipe::result),
factory,
)
From 889f4cc4160a029f6f794c34d226dace4171cdd6 Mon Sep 17 00:00:00 2001
From: Hiiragi Russell Tsubasa <97942736+Hiiragi283@users.noreply.github.com>
Date: Wed, 10 Dec 2025 03:55:32 +0900
Subject: [PATCH 02/49] refactor: refine around EMI integration
---
.../ragium/api/recipe/HTRecipeType.kt | 19 ---
.../api/recipe/ingredient/HTIngredient.kt | 2 +-
.../api/registry/impl/HTDeferredRecipeType.kt | 8 +-
.../client/integration/emi/RagiumEmiPlugin.kt | 114 ++++++++----------
.../emi/category/HTEmiRecipeCategory.kt | 15 +++
.../category/HTRegistryEmiRecipeCategory.kt | 26 ----
.../emi/category/RagiumEmiRecipeCategories.kt | 88 ++++++++++----
.../recipe/base/HTMultiOutputsEmiRecipe.kt | 6 +-
.../custom/HTCopyEnchantingEmiRecipe.kt | 6 +-
.../recipe/custom/HTExpExtractingEmiRecipe.kt | 6 +-
.../custom/HTMachineUpgradeEmiRecipe.kt | 6 +-
.../device/HTRockGeneratingEmiRecipe.kt | 6 +-
.../recipe/generator/HTBiomassEmiRecipe.kt | 6 +-
.../recipe/generator/HTCoolantEmiRecipe.kt | 6 +-
.../recipe/processor/HTAlloyingEmiRecipe.kt | 6 +-
.../recipe/processor/HTBrewingEmiRecipe.kt | 6 +-
.../recipe/processor/HTEnchantingEmiRecipe.kt | 6 +-
.../processor/HTItemWithCatalystEmiRecipe.kt | 15 +++
.../recipe/processor/HTMeltingEmiRecipe.kt | 6 +-
.../emi/recipe/processor/HTMixingEmiRecipe.kt | 6 +-
.../recipe/processor/HTPlantingEmiRecipe.kt | 6 +-
.../recipe/processor/HTRefiningEmiRecipe.kt | 6 +-
.../processor/HTSingleExtraItemEmiRecipe.kt | 11 ++
23 files changed, 197 insertions(+), 185 deletions(-)
delete mode 100644 src/api/kotlin/hiiragi283/ragium/api/recipe/HTRecipeType.kt
delete mode 100644 src/integration/kotlin/hiiragi283/ragium/client/integration/emi/category/HTRegistryEmiRecipeCategory.kt
diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/HTRecipeType.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/HTRecipeType.kt
deleted file mode 100644
index d400c92fa..000000000
--- a/src/api/kotlin/hiiragi283/ragium/api/recipe/HTRecipeType.kt
+++ /dev/null
@@ -1,19 +0,0 @@
-package hiiragi283.ragium.api.recipe
-
-import hiiragi283.ragium.api.text.HTHasText
-import net.minecraft.world.item.crafting.Recipe
-import net.minecraft.world.item.crafting.RecipeHolder
-import net.minecraft.world.item.crafting.RecipeInput
-import net.minecraft.world.item.crafting.RecipeManager
-
-/**
- * レシピの一覧を取得するインターフェース
- * @param INPUT レシピの入力となるクラス
- * @param RECIPE レシピのクラス
- */
-interface HTRecipeType> : HTHasText {
- /**
- * 指定した[manager]から[RecipeHolder]の一覧を返します。
- */
- fun getAllHolders(manager: RecipeManager): Sequence>
-}
diff --git a/src/api/kotlin/hiiragi283/ragium/api/recipe/ingredient/HTIngredient.kt b/src/api/kotlin/hiiragi283/ragium/api/recipe/ingredient/HTIngredient.kt
index 19647f2fb..be0652f7b 100644
--- a/src/api/kotlin/hiiragi283/ragium/api/recipe/ingredient/HTIngredient.kt
+++ b/src/api/kotlin/hiiragi283/ragium/api/recipe/ingredient/HTIngredient.kt
@@ -29,6 +29,6 @@ interface HTIngredient> : Predic
fun getRequiredAmount(stack: STACK): Int
fun getRequiredAmount(): Int
-
+
fun unwrap(): Either, Int>, List>
}
diff --git a/src/api/kotlin/hiiragi283/ragium/api/registry/impl/HTDeferredRecipeType.kt b/src/api/kotlin/hiiragi283/ragium/api/registry/impl/HTDeferredRecipeType.kt
index 4b4bb723d..d4bad283a 100644
--- a/src/api/kotlin/hiiragi283/ragium/api/registry/impl/HTDeferredRecipeType.kt
+++ b/src/api/kotlin/hiiragi283/ragium/api/registry/impl/HTDeferredRecipeType.kt
@@ -1,8 +1,8 @@
package hiiragi283.ragium.api.registry.impl
import hiiragi283.ragium.api.recipe.HTRecipeFinder
-import hiiragi283.ragium.api.recipe.HTRecipeType
import hiiragi283.ragium.api.registry.HTDeferredHolder
+import hiiragi283.ragium.api.text.HTHasText
import hiiragi283.ragium.api.text.HTHasTranslationKey
import hiiragi283.ragium.api.text.translatableText
import net.minecraft.core.registries.Registries
@@ -20,8 +20,8 @@ import kotlin.jvm.optionals.getOrNull
class HTDeferredRecipeType> :
HTDeferredHolder, RecipeType>,
HTRecipeFinder,
- HTRecipeType,
- HTHasTranslationKey {
+ HTHasTranslationKey,
+ HTHasText {
constructor(key: ResourceKey>) : super(key)
constructor(id: ResourceLocation) : super(Registries.RECIPE_TYPE, id)
@@ -36,6 +36,4 @@ class HTDeferredRecipeType> :
level: Level,
lastRecipe: RecipeHolder?,
): RecipeHolder? = manager.getRecipeFor(get(), input, level, lastRecipe).getOrNull()
-
- override fun getAllHolders(manager: RecipeManager): Sequence> = manager.getAllRecipesFor(get()).asSequence()
}
diff --git a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/RagiumEmiPlugin.kt b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/RagiumEmiPlugin.kt
index 31b4b12bb..b2d0a3e5f 100644
--- a/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/RagiumEmiPlugin.kt
+++ b/src/integration/kotlin/hiiragi283/ragium/client/integration/emi/RagiumEmiPlugin.kt
@@ -22,12 +22,15 @@ import hiiragi283.ragium.api.item.component.HTSpawnerMob
import hiiragi283.ragium.api.item.createItemStack
import hiiragi283.ragium.api.math.times
import hiiragi283.ragium.api.math.toFraction
+import hiiragi283.ragium.api.recipe.HTRecipe
+import hiiragi283.ragium.api.recipe.RagiumRecipeTypes
+import hiiragi283.ragium.api.recipe.input.HTRecipeInput
import hiiragi283.ragium.api.registry.HTFluidHolderLike
import hiiragi283.ragium.api.registry.HTItemHolderLike
import hiiragi283.ragium.api.registry.getHolderDataMap
import hiiragi283.ragium.api.registry.idOrThrow
+import hiiragi283.ragium.api.registry.impl.HTDeferredRecipeType
import hiiragi283.ragium.client.integration.emi.category.HTEmiRecipeCategory
-import hiiragi283.ragium.client.integration.emi.category.HTRegistryEmiRecipeCategory
import hiiragi283.ragium.client.integration.emi.category.RagiumEmiRecipeCategories
import hiiragi283.ragium.client.integration.emi.data.HTBiomassRecipeData
import hiiragi283.ragium.client.integration.emi.data.HTEmiFluidFuelData
@@ -49,7 +52,6 @@ import hiiragi283.ragium.client.integration.emi.recipe.processor.HTPlantingEmiRe
import hiiragi283.ragium.client.integration.emi.recipe.processor.HTRefiningEmiRecipe
import hiiragi283.ragium.client.integration.emi.recipe.processor.HTSingleExtraItemEmiRecipe
import hiiragi283.ragium.common.block.HTImitationSpawnerBlock
-import hiiragi283.ragium.common.block.HTImitationSpawnerBlock.Companion.filterEntityType
import hiiragi283.ragium.common.block.entity.HTBlockEntity
import hiiragi283.ragium.common.block.entity.generator.HTCulinaryGeneratorBlockEntity
import hiiragi283.ragium.common.material.CommonMaterialPrefixes
@@ -74,9 +76,7 @@ import net.minecraft.world.item.Items
import net.minecraft.world.item.SpawnEggItem
import net.minecraft.world.item.alchemy.Potion
import net.minecraft.world.item.component.Unbreakable
-import net.minecraft.world.item.crafting.Recipe
import net.minecraft.world.item.crafting.RecipeHolder
-import net.minecraft.world.item.crafting.RecipeInput
import net.minecraft.world.level.ItemLike
import net.minecraft.world.level.material.Fluid
import net.minecraft.world.level.material.Fluids
@@ -102,10 +102,11 @@ class RagiumEmiPlugin : EmiPlugin {
}
override fun register(registry: EmiRegistry) {
+ // Category
+ RagiumEmiRecipeCategories.register(registry)
// Recipe
addRecipes(
registry,
- RagiumEmiRecipeCategories.MACHINE_UPGRADE,
ITEM_LOOKUP
.filterElements { item: Item -> item.defaultInstance.has(RagiumDataComponents.MACHINE_UPGRADE_FILTER) }
.listElements()
@@ -120,12 +121,6 @@ class RagiumEmiPlugin : EmiPlugin {
addProcessors(registry)
addInteractions(registry)
- // Workstations
- for (block: ItemLike in listOf(RagiumBlocks.ELECTRIC_FURNACE, RagiumBlocks.MULTI_SMELTER)) {
- registry.addWorkstation(VanillaEmiRecipeCategories.BLASTING, block.toEmi())
- registry.addWorkstation(VanillaEmiRecipeCategories.SMELTING, block.toEmi())
- registry.addWorkstation(VanillaEmiRecipeCategories.SMOKING, block.toEmi())
- }
// Functions
registry.addGenericStackProvider(RagiumEmiStackProvider)
@@ -260,21 +255,20 @@ class RagiumEmiPlugin : EmiPlugin {
fun addFuelRecipes(category: HTEmiRecipeCategory, dataMapType: DataMapType) {
addDataMapRecipes(
registry,
- category,
FLUID_LOOKUP,
dataMapType,
{ holder: Holder, data: HTFluidFuelData ->
val stack: EmiStack = holder.value().toEmi(100).takeUnless(EmiStack::isEmpty) ?: return@addDataMapRecipes null
HTEmiFluidFuelData(stack, data.time)
},
- ::HTFuelGeneratorEmiRecipe,
+ ::HTFuelGeneratorEmiRecipe.partially1(category),
)
}
// Basic
addItemStackRecipes(
registry,
- RagiumEmiRecipeCategories.THERMAL,
+ "thermal",
{ stack: ItemStack ->
val burnTime: Int = stack.getBurnTime(null)
if (burnTime <= 0) return@addItemStackRecipes null
@@ -282,26 +276,25 @@ class RagiumEmiPlugin : EmiPlugin {
stack1.remainder = stack.craftingRemainingItem.toEmi()
HTEmiFluidFuelData(stack1, burnTime)
},
- ::HTFuelGeneratorEmiRecipe,
+ ::HTFuelGeneratorEmiRecipe.partially1(RagiumEmiRecipeCategories.THERMAL),
)
// Advanced
addFuelRecipes(RagiumEmiRecipeCategories.MAGMATIC, RagiumDataMapTypes.MAGMATIC_FUEL)
addItemStackRecipes(
registry,
- RagiumEmiRecipeCategories.CULINARY,
+ "culinary",
{ stack: ItemStack ->
val food: FoodProperties = stack.getFoodProperties(null) ?: return@addItemStackRecipes null
val stack1: EmiStack = stack.toEmi()
food.usingConvertsTo().map(ItemStack::toEmi).ifPresent(stack1::setRemainder)
HTEmiFluidFuelData(stack1, HTCulinaryGeneratorBlockEntity.getTime(food))
},
- ::HTFuelGeneratorEmiRecipe,
+ ::HTFuelGeneratorEmiRecipe.partially1(RagiumEmiRecipeCategories.CULINARY),
)
// Elite
addDataMapRecipes(
registry,
- RagiumEmiRecipeCategories.BIOMASS,
ITEM_LOOKUP,
NeoForgeDataMaps.COMPOSTABLES,
{ holder: Holder
- , compostable: Compostable ->
@@ -316,7 +309,6 @@ class RagiumEmiPlugin : EmiPlugin {
addDataMapRecipes(
registry,
- RagiumEmiRecipeCategories.COOLANT,
FLUID_LOOKUP,
RagiumDataMapTypes.COOLANT,
{ holder: Holder, data: HTFluidCoolantData ->
@@ -330,32 +322,28 @@ class RagiumEmiPlugin : EmiPlugin {
private fun addProcessors(registry: EmiRegistry) {
// Basic
- addRegistryRecipes(registry, RagiumEmiRecipeCategories.ALLOYING, ::HTAlloyingEmiRecipe)
- addRegistryRecipes(registry, RagiumEmiRecipeCategories.COMPRESSING, ::HTItemWithCatalystEmiRecipe)
- addRegistryRecipes(registry, RagiumEmiRecipeCategories.CRUSHING, ::HTSingleExtraItemEmiRecipe)
- addRegistryRecipes(registry, RagiumEmiRecipeCategories.CUTTING, ::HTSingleExtraItemEmiRecipe)
- addRegistryRecipes(registry, RagiumEmiRecipeCategories.EXTRACTING, ::HTItemWithCatalystEmiRecipe)
-
- registry.addRecipeSafe(RagiumAPI.id("/${RagiumConst.EXTRACTING}", "experience_from_items")) {
- HTExpExtractingEmiRecipe(RagiumEmiRecipeCategories.EXTRACTING, it)
- }
+ addRegistryRecipes(registry, RagiumRecipeTypes.ALLOYING, ::HTAlloyingEmiRecipe)
+ addRegistryRecipes(registry, RagiumRecipeTypes.COMPRESSING, HTItemWithCatalystEmiRecipe::compressing)
+ addRegistryRecipes(registry, RagiumRecipeTypes.CRUSHING, HTSingleExtraItemEmiRecipe::crushing)
+ addRegistryRecipes(registry, RagiumRecipeTypes.CUTTING, HTSingleExtraItemEmiRecipe::cutting)
+ addRegistryRecipes(registry, RagiumRecipeTypes.EXTRACTING, HTItemWithCatalystEmiRecipe::extracting)
+
+ registry.addRecipeSafe(RagiumAPI.id("/${RagiumConst.EXTRACTING}", "experience_from_items"), ::HTExpExtractingEmiRecipe)
// Advanced
- addRegistryRecipes(registry, RagiumEmiRecipeCategories.MELTING, ::HTMeltingEmiRecipe)
- addRegistryRecipes(registry, RagiumEmiRecipeCategories.MIXING, ::HTMixingEmiRecipe)
- addRegistryRecipes(registry, RagiumEmiRecipeCategories.REFINING, ::HTRefiningEmiRecipe)
+ addRegistryRecipes(registry, RagiumRecipeTypes.MELTING, ::HTMeltingEmiRecipe)
+ addRegistryRecipes(registry, RagiumRecipeTypes.MIXING, ::HTMixingEmiRecipe)
+ addRegistryRecipes(registry, RagiumRecipeTypes.REFINING, ::HTRefiningEmiRecipe)
// Elite
- addRegistryRecipes(registry, RagiumEmiRecipeCategories.BREWING, ::HTBrewingEmiRecipe)
- addRegistryRecipes(registry, RagiumEmiRecipeCategories.PLANTING, ::HTPlantingEmiRecipe)
+ addRegistryRecipes(registry, RagiumRecipeTypes.BREWING, ::HTBrewingEmiRecipe)
+ addRegistryRecipes(registry, RagiumRecipeTypes.PLANTING, ::HTPlantingEmiRecipe)
// Ultimate
- addRegistryRecipes(registry, RagiumEmiRecipeCategories.ENCHANTING, ::HTEnchantingEmiRecipe)
- addRegistryRecipes(registry, RagiumEmiRecipeCategories.SIMULATING, ::HTItemWithCatalystEmiRecipe)
+ addRegistryRecipes(registry, RagiumRecipeTypes.ENCHANTING, ::HTEnchantingEmiRecipe)
+ addRegistryRecipes(registry, RagiumRecipeTypes.SIMULATING, HTItemWithCatalystEmiRecipe::simulating)
- registry.addRecipeSafe(RagiumAPI.id("/${RagiumConst.ENCHANTING}", "copy_from_book")) {
- HTCopyEnchantingEmiRecipe(RagiumEmiRecipeCategories.ENCHANTING, it)
- }
+ registry.addRecipeSafe(RagiumAPI.id("/${RagiumConst.ENCHANTING}", "copy_from_book"), ::HTCopyEnchantingEmiRecipe)
// Device
- addRegistryRecipes(registry, RagiumEmiRecipeCategories.ROCK_GENERATING, ::HTRockGeneratingEmiRecipe)
+ addRegistryRecipes(registry, RagiumRecipeTypes.ROCK_GENERATING, ::HTRockGeneratingEmiRecipe)
}
private fun addInteractions(registry: EmiRegistry) {
@@ -411,15 +399,15 @@ class RagiumEmiPlugin : EmiPlugin {
/**
* @see mekanism.client.recipe_viewer.emi.MekanismEmi.addCategoryAndRecipes
*/
- private inline fun , reified RECIPE : BASE, EMI_RECIPE : EmiRecipe> addRegistryRecipes(
+ private inline fun addRegistryRecipes(
registry: EmiRegistry,
- category: HTRegistryEmiRecipeCategory,
- noinline factory: (HTEmiRecipeCategory, RecipeHolder) -> EMI_RECIPE?,
+ recipeType: HTDeferredRecipeType,
+ noinline factory: (RecipeHolder